diff options
| -rw-r--r-- | sqlparse/keywords.py | 2 | ||||
| -rw-r--r-- | tests/test_grouping.py | 4 | ||||
| -rw-r--r-- | tests/test_tokenize.py | 19 |
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): |
