summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsaaj <id@saaj.me>2016-04-05 11:15:40 +0300
committersaaj <id@saaj.me>2016-04-05 11:17:15 +0300
commitc63737f9d2ec4b7ac2e2579b2583daff6700f462 (patch)
tree7b22f0f7c82375188941b6c7a75e646e87c783e3
parentee5799fbb60e9739e42922861cd9f24990fc52dd (diff)
downloadsqlparse-c63737f9d2ec4b7ac2e2579b2583daff6700f462.tar.gz
Fix #230 (function comparison grouping)
-rw-r--r--sqlparse/engine/grouping.py3
-rw-r--r--tests/test_grouping.py23
2 files changed, 25 insertions, 1 deletions
diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py
index 4e45f65..68960d5 100644
--- a/sqlparse/engine/grouping.py
+++ b/sqlparse/engine/grouping.py
@@ -135,7 +135,8 @@ def group_comparison(tlist):
T.Name, T.Number, T.Number.Float,
T.Number.Integer, T.Literal,
T.Literal.Number.Integer, T.Name.Placeholder)
- or isinstance(token, (sql.Identifier, sql.Parenthesis))
+ or isinstance(token, (sql.Identifier, sql.Parenthesis,
+ sql.Function))
or (token.ttype is T.Keyword
and token.value.upper() in ['NULL', ]))
_group_left_right(tlist, T.Operator.Comparison, None, sql.Comparison,
diff --git a/tests/test_grouping.py b/tests/test_grouping.py
index e846176..a6c4028 100644
--- a/tests/test_grouping.py
+++ b/tests/test_grouping.py
@@ -325,6 +325,29 @@ def test_comparison_with_strings(): # issue148
assert p.tokens[0].right.ttype == T.String.Single
+def test_comparison_with_functions(): # issue230
+ p = sqlparse.parse('foo = DATE(bar.baz)')[0]
+ assert len(p.tokens) == 1
+ assert isinstance(p.tokens[0], sql.Comparison)
+ assert len(p.tokens[0].tokens) == 5
+ assert p.tokens[0].left.value == 'foo'
+ assert p.tokens[0].right.value == 'DATE(bar.baz)'
+
+ p = sqlparse.parse('DATE(foo.bar) = DATE(bar.baz)')[0]
+ assert len(p.tokens) == 1
+ assert isinstance(p.tokens[0], sql.Comparison)
+ assert len(p.tokens[0].tokens) == 5
+ assert p.tokens[0].left.value == 'DATE(foo.bar)'
+ assert p.tokens[0].right.value == 'DATE(bar.baz)'
+
+ p = sqlparse.parse('DATE(foo.bar) = bar.baz')[0]
+ assert len(p.tokens) == 1
+ assert isinstance(p.tokens[0], sql.Comparison)
+ assert len(p.tokens[0].tokens) == 5
+ assert p.tokens[0].left.value == 'DATE(foo.bar)'
+ assert p.tokens[0].right.value == 'bar.baz'
+
+
@pytest.mark.parametrize('start', ['FOR', 'FOREACH'])
def test_forloops(start):
p = sqlparse.parse('%s foo in bar LOOP foobar END LOOP' % start)[0]