summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2009-07-12 09:28:05 +0200
committerAndi Albrecht <albrecht.andi@gmail.com>2009-07-12 09:28:05 +0200
commit9114ff791c224f8edfa6f1ff00ae57e8e3296f75 (patch)
tree4702e934c4f6d9639fb704329ecdb9973ae26d12
parentd47657d07ab900604547efd0a4eb288775ad43b9 (diff)
downloadsqlparse-9114ff791c224f8edfa6f1ff00ae57e8e3296f75.tar.gz
Distinguish between operators that are part of a comparsion and others.
-rw-r--r--sqlparse/engine/grouping.py5
-rw-r--r--sqlparse/lexer.py3
-rw-r--r--sqlparse/tokens.py1
-rw-r--r--tests/test_grouping.py6
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):