summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sqlparse/keywords.py2
-rw-r--r--tests/test_grouping.py12
2 files changed, 12 insertions, 2 deletions
diff --git a/sqlparse/keywords.py b/sqlparse/keywords.py
index 3123531..68ced92 100644
--- a/sqlparse/keywords.py
+++ b/sqlparse/keywords.py
@@ -44,7 +44,7 @@ SQL_REGEX = {
(r'(?<!\w)[$:?]\w+', tokens.Name.Placeholder),
(r'\\\w+', tokens.Command),
-
+ (r'(NOT\s+)?(IN)\b', tokens.Operator.Comparison),
# FIXME(andi): VALUES shouldn't be listed here
# see https://github.com/andialbrecht/sqlparse/pull/64
# AS and IN are special, it may be followed by a parenthesis, but
diff --git a/tests/test_grouping.py b/tests/test_grouping.py
index 683954e..879ba29 100644
--- a/tests/test_grouping.py
+++ b/tests/test_grouping.py
@@ -371,10 +371,20 @@ def test_grouping_function_not_in():
# issue183
p = sqlparse.parse('in(1, 2)')[0]
assert len(p.tokens) == 2
- assert p.tokens[0].ttype == T.Keyword
+ assert p.tokens[0].ttype == T.Comparison
assert isinstance(p.tokens[1], sql.Parenthesis)
+def test_in_comparison():
+ # issue566
+ p = sqlparse.parse('a in (1, 2)')[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 == 'a'
+ assert p.tokens[0].right.value == '(1, 2)'
+
+
def test_grouping_varchar():
p = sqlparse.parse('"text" Varchar(50) NOT NULL')[0]
assert isinstance(p.tokens[2], sql.Function)