From 9114ff791c224f8edfa6f1ff00ae57e8e3296f75 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Sun, 12 Jul 2009 09:28:05 +0200 Subject: Distinguish between operators that are part of a comparsion and others. --- sqlparse/engine/grouping.py | 5 +++-- sqlparse/lexer.py | 3 ++- sqlparse/tokens.py | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) (limited to 'sqlparse') 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 -- cgit v1.2.1