diff options
| author | saaj <id@saaj.me> | 2016-04-05 11:15:40 +0300 |
|---|---|---|
| committer | saaj <id@saaj.me> | 2016-04-05 11:17:15 +0300 |
| commit | c63737f9d2ec4b7ac2e2579b2583daff6700f462 (patch) | |
| tree | 7b22f0f7c82375188941b6c7a75e646e87c783e3 | |
| parent | ee5799fbb60e9739e42922861cd9f24990fc52dd (diff) | |
| download | sqlparse-c63737f9d2ec4b7ac2e2579b2583daff6700f462.tar.gz | |
Fix #230 (function comparison grouping)
| -rw-r--r-- | sqlparse/engine/grouping.py | 3 | ||||
| -rw-r--r-- | tests/test_grouping.py | 23 |
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] |
