diff options
| author | Andi Albrecht <albrecht.andi@gmail.com> | 2009-07-12 09:28:05 +0200 |
|---|---|---|
| committer | Andi Albrecht <albrecht.andi@gmail.com> | 2009-07-12 09:28:05 +0200 |
| commit | 9114ff791c224f8edfa6f1ff00ae57e8e3296f75 (patch) | |
| tree | 4702e934c4f6d9639fb704329ecdb9973ae26d12 | |
| parent | d47657d07ab900604547efd0a4eb288775ad43b9 (diff) | |
| download | sqlparse-9114ff791c224f8edfa6f1ff00ae57e8e3296f75.tar.gz | |
Distinguish between operators that are part of a comparsion and others.
| -rw-r--r-- | sqlparse/engine/grouping.py | 5 | ||||
| -rw-r--r-- | sqlparse/lexer.py | 3 | ||||
| -rw-r--r-- | sqlparse/tokens.py | 1 | ||||
| -rw-r--r-- | tests/test_grouping.py | 6 |
4 files changed, 10 insertions, 5 deletions
diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py index 1a0badf..c123d3c 100644 --- a/sqlparse/engine/grouping.py +++ b/sqlparse/engine/grouping.py @@ -100,7 +100,7 @@ def group_comparsion(tlist): return (token.ttype in (T.String.Symbol, T.Name, T.Number, T.Number.Integer, T.Literal) or isinstance(token, (Identifier,))) - _group_left_right(tlist, T.Operator, None, Comparsion, + _group_left_right(tlist, T.Operator.Comparsion, None, Comparsion, check_left=_parts_valid, check_right=_parts_valid) @@ -111,7 +111,8 @@ def group_case(tlist): def group_identifier(tlist): def _consume_cycle(tl, i): - x = itertools.cycle((lambda y: y.match(T.Punctuation, '.'), + x = itertools.cycle((lambda y: (y.match(T.Punctuation, '.') + or y.ttype is T.Operator), lambda y: y.ttype in (T.String.Symbol, T.Name, T.Wildcard))) diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py index 1cdb98c..a416c16 100644 --- a/sqlparse/lexer.py +++ b/sqlparse/lexer.py @@ -171,7 +171,8 @@ class Lexer: (r"`(``|[^`])*`", Name), (r"´(´´|[^´])*´", Name), (r'@[a-zA-Z_][a-zA-Z0-9_]+', Name), - (r'[+/<>=~!@#%^&|`?^-]', Operator), + (r'[<>=~!]+', Operator.Comparsion), + (r'[+/@#%^&|`?^-]+', Operator), (r'[0-9]+', Number.Integer), # TODO: Backslash escapes? (r"'(''|[^'])*'", String.Single), diff --git a/sqlparse/tokens.py b/sqlparse/tokens.py index c66bb9b..5d1458a 100644 --- a/sqlparse/tokens.py +++ b/sqlparse/tokens.py @@ -58,6 +58,7 @@ String = Literal.String Number = Literal.Number Punctuation = Token.Punctuation Operator = Token.Operator +Comparsion = Operator.Comparsion Wildcard = Token.Wildcard Comment = Token.Comment Assignment = Token.Assignement diff --git a/tests/test_grouping.py b/tests/test_grouping.py index 8d62ea4..6331317 100644 --- a/tests/test_grouping.py +++ b/tests/test_grouping.py @@ -136,10 +136,12 @@ class TestGrouping(TestCaseBase): def test_comparsion_exclude(self): # make sure operators are not handled too lazy - p = sqlparse.parse('(+)')[0] + p = sqlparse.parse('(=)')[0] self.assert_(isinstance(p.tokens[0], Parenthesis)) self.assert_(not isinstance(p.tokens[0].tokens[1], Comparsion)) - p = sqlparse.parse('(a+1)')[0] + p = sqlparse.parse('(a=1)')[0] + self.assert_(isinstance(p.tokens[0].tokens[1], Comparsion)) + p = sqlparse.parse('(a>=1)')[0] self.assert_(isinstance(p.tokens[0].tokens[1], Comparsion)) def test_function(self): |
