summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2011-07-20 08:28:49 +0200
committerAndi Albrecht <albrecht.andi@gmail.com>2011-07-20 08:28:49 +0200
commitd1956f27183c96f092a70a37e172f2fd045932a7 (patch)
treeb02031d25d2e644e2cff603469684815c34c8716
parentf6f2e20e4c61d50fbd5cbf0e685b03d8c5927a3a (diff)
downloadsqlparse-d1956f27183c96f092a70a37e172f2fd045932a7.tar.gz
Avoid parsing of names as keywords (fixes issue39).
-rw-r--r--CHANGES1
-rw-r--r--sqlparse/lexer.py1
-rw-r--r--tests/test_regressions.py10
3 files changed, 12 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 63a4ab9..16b0d11 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,7 @@ Bug Fixes
* Improve parsing of floats (thanks to Kris).
* When formatting a statement a space before LIMIT was removed (issue35).
* Fix strip_comments flag (issue38, reported by ooberm...@gmail.com).
+ * Avoid parsing names as keywords (issue39, reported by djo...@taket.org).
Release 0.1.2 (Nov 23, 2010)
diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py
index 937cfbd..6304911 100644
--- a/sqlparse/lexer.py
+++ b/sqlparse/lexer.py
@@ -175,6 +175,7 @@ class Lexer:
(r"`(``|[^`])*`", tokens.Name),
(r"´(´´|[^´])*´", tokens.Name),
(r'@[a-zA-Z_][a-zA-Z0-9_]+', tokens.Name),
+ (r'[a-zA-Z_][a-zA-Z0-9_]*(?=\.)', tokens.Name), # see issue39
(r'[<>=~!]+', tokens.Operator.Comparison),
(r'[+/@#%^&|`?^-]+', tokens.Operator),
(r'0x[0-9a-fA-F]+', tokens.Number.Hexadecimal),
diff --git a/tests/test_regressions.py b/tests/test_regressions.py
index 6624d33..10c5608 100644
--- a/tests/test_regressions.py
+++ b/tests/test_regressions.py
@@ -46,3 +46,13 @@ class RegressionTests(TestCaseBase):
self.ndiffAssertEqual(sql, "SELECT foo;")
sql = sqlparse.format("/* foo */", strip_comments=True)
self.ndiffAssertEqual(sql, "")
+
+ def test_issue39(self):
+ p = sqlparse.parse('select user.id from user')[0]
+ self.assertEqual(len(p.tokens), 7)
+ idt = p.tokens[2]
+ self.assertEqual(idt.__class__, sql.Identifier)
+ self.assertEqual(len(idt.tokens), 3)
+ self.assertEqual(idt.tokens[0].match(T.Name, 'user'), True)
+ self.assertEqual(idt.tokens[1].match(T.Punctuation, '.'), True)
+ self.assertEqual(idt.tokens[2].match(T.Name, 'id'), True)