summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sqlparse/keywords.py2
-rw-r--r--tests/test_grouping.py4
-rw-r--r--tests/test_tokenize.py19
3 files changed, 23 insertions, 2 deletions
diff --git a/sqlparse/keywords.py b/sqlparse/keywords.py
index ad37c89..9c37e50 100644
--- a/sqlparse/keywords.py
+++ b/sqlparse/keywords.py
@@ -89,7 +89,7 @@ SQL_REGEX = {
r'(EXPLODE|INLINE|PARSE_URL_TUPLE|POSEXPLODE|STACK)\b',
tokens.Keyword),
(r"(AT|WITH')\s+TIME\s+ZONE\s+'[^']+'", tokens.Keyword.TZCast),
- (r'(NOT\s)?(LIKE|ILIKE)\b', tokens.Operator.Comparison),
+ (r'(NOT\s+)?(LIKE|ILIKE)\b', tokens.Operator.Comparison),
(r'[0-9_A-ZÀ-Ü][_$#\w]*', is_keyword),
(r'[;:()\[\],\.]', tokens.Punctuation),
(r'[<>=~!]+', tokens.Operator.Comparison),
diff --git a/tests/test_grouping.py b/tests/test_grouping.py
index 5828e08..3e9b1bd 100644
--- a/tests/test_grouping.py
+++ b/tests/test_grouping.py
@@ -472,7 +472,9 @@ def test_comparison_with_parenthesis():
assert comp.right.ttype is T.Number.Integer
-@pytest.mark.parametrize('operator', ['LIKE', 'NOT LIKE', 'ILIKE', 'NOT ILIKE'])
+@pytest.mark.parametrize('operator', (
+ 'LIKE', 'NOT LIKE', 'ILIKE', 'NOT ILIKE',
+))
def test_comparison_with_strings(operator):
# issue148
p = sqlparse.parse("foo {0} 'bar'".format(operator))[0]
diff --git a/tests/test_tokenize.py b/tests/test_tokenize.py
index 2748b1b..1b34342 100644
--- a/tests/test_tokenize.py
+++ b/tests/test_tokenize.py
@@ -205,6 +205,25 @@ def test_parse_order_by():
@pytest.mark.parametrize('s', (
+ "LIKE", "ILIKE", "NOT LIKE", "NOT ILIKE",
+ "NOT LIKE", "NOT ILIKE",
+))
+def test_like_and_ilike_parsed_as_comparisons(s):
+ p = sqlparse.parse(s)[0]
+ assert len(p.tokens) == 1
+ assert p.tokens[0].ttype == T.Operator.Comparison
+
+
+@pytest.mark.parametrize('s', (
+ "LIKEaaa", "bILIKE", "aaILIKEbb", "NOTLIKE", "NOTILIKE",
+))
+def test_near_like_and_ilike_parsed_appropriately(s):
+ p = sqlparse.parse(s)[0]
+ assert len(p.tokens) == 1
+ assert isinstance(p.tokens[0], sql.Identifier)
+
+
+@pytest.mark.parametrize('s', (
'AT TIME ZONE \'UTC\'',
))
def test_parse_tzcast(s):