diff options
author | Andi Albrecht <albrecht.andi@gmail.com> | 2011-07-20 08:28:49 +0200 |
---|---|---|
committer | Andi Albrecht <albrecht.andi@gmail.com> | 2011-07-20 08:28:49 +0200 |
commit | d1956f27183c96f092a70a37e172f2fd045932a7 (patch) | |
tree | b02031d25d2e644e2cff603469684815c34c8716 | |
parent | f6f2e20e4c61d50fbd5cbf0e685b03d8c5927a3a (diff) | |
download | sqlparse-d1956f27183c96f092a70a37e172f2fd045932a7.tar.gz |
Avoid parsing of names as keywords (fixes issue39).
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | sqlparse/lexer.py | 1 | ||||
-rw-r--r-- | tests/test_regressions.py | 10 |
3 files changed, 12 insertions, 0 deletions
@@ -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) |