summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES7
-rw-r--r--sqlparse/lexer.py2
-rw-r--r--tests/test_parse.py7
3 files changed, 15 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 8f0a108..5cac0f6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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)