diff options
-rw-r--r-- | CHANGES | 7 | ||||
-rw-r--r-- | sqlparse/lexer.py | 2 | ||||
-rw-r--r-- | tests/test_parse.py | 7 |
3 files changed, 15 insertions, 1 deletions
@@ -1,3 +1,10 @@ +Development Version +------------------- + +Bug Fixes +* Fix a regression in identifiers with square bracktes notation (issue153). + + Release 0.1.14 (Nov 30, 2014) ----------------------------- diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py index 6bd414f..631c267 100644 --- a/sqlparse/lexer.py +++ b/sqlparse/lexer.py @@ -195,7 +195,7 @@ class Lexer(object): (r"'(''|\\'|[^'])*'", tokens.String.Single), # not a real string literal in ANSI SQL: (r'(""|".*?[^\\]")', tokens.String.Symbol), - (r'(\[.*[^\]]\])', tokens.Name), + (r'(\[[^\]]+\])', tokens.Name), (r'((LEFT\s+|RIGHT\s+|FULL\s+)?(INNER\s+|OUTER\s+|STRAIGHT\s+)?|(CROSS\s+|NATURAL\s+)?)?JOIN\b', tokens.Keyword), (r'END(\s+IF|\s+LOOP)?\b', tokens.Keyword), (r'NOT NULL\b', tokens.Keyword), diff --git a/tests/test_parse.py b/tests/test_parse.py index d77bb43..fd48127 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -110,6 +110,13 @@ class SQLParseTest(TestCaseBase): self.assertEqual(t[-1].get_real_name(), '[foo bar]') self.assertEqual(t[-1].get_parent_name(), 'a') + def test_square_brackets_notation_isnt_too_greedy(self): # see issue153 + t = sqlparse.parse('[foo], [bar]')[0].tokens + self.assert_(isinstance(t[0], sqlparse.sql.IdentifierList)) + self.assertEqual(len(t[0].tokens), 4) + self.assertEqual(t[0].tokens[0].get_real_name(), '[foo]') + self.assertEqual(t[0].tokens[-1].get_real_name(), '[bar]') + def test_keyword_like_identifier(self): # see issue47 t = sqlparse.parse('foo.key')[0].tokens self.assertEqual(len(t), 1) |