From d1956f27183c96f092a70a37e172f2fd045932a7 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Wed, 20 Jul 2011 08:28:49 +0200 Subject: Avoid parsing of names as keywords (fixes issue39). --- CHANGES | 1 + sqlparse/lexer.py | 1 + tests/test_regressions.py | 10 ++++++++++ 3 files changed, 12 insertions(+) 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) -- cgit v1.2.1