diff options
| author | Andi Albrecht <albrecht.andi@gmail.com> | 2009-07-13 20:19:34 +0200 |
|---|---|---|
| committer | Andi Albrecht <albrecht.andi@gmail.com> | 2009-07-13 20:19:34 +0200 |
| commit | e10bf7967aa5ac6ed329631471ad90e5009e2c25 (patch) | |
| tree | 3ef3240cd4b830d0d51d9fb8ab16ba91846652e6 | |
| parent | d009c7dc9581c55ad3ebbc1074a9868be89793cd (diff) | |
| download | sqlparse-e10bf7967aa5ac6ed329631471ad90e5009e2c25.tar.gz | |
Improve detection of identifier aliases (fixes issue8).
| -rw-r--r-- | CHANGES | 1 | ||||
| -rw-r--r-- | sqlparse/engine/grouping.py | 7 | ||||
| -rw-r--r-- | tests/test_grouping.py | 7 |
3 files changed, 14 insertions, 1 deletions
@@ -4,6 +4,7 @@ In Development Bug Fixes * Fixed incorrect detection of keyword fragments embed in names (issue7, reported and initial patch by andyboyko). + * Stricter detection of identfier aliases (issue8, reported by estama). Release 0.1.1 (May 6, 2009) diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py index 3b92361..d30031f 100644 --- a/sqlparse/engine/grouping.py +++ b/sqlparse/engine/grouping.py @@ -89,7 +89,12 @@ def group_for(tlist): _group_matching(tlist, T.Keyword, 'FOR', T.Keyword, 'END LOOP', For, True) def group_as(tlist): - _group_left_right(tlist, T.Keyword, 'AS', Identifier) + def _right_valid(token): + # Currently limited to DML/DDL. Maybe additional more non SQL reserved + # keywords should appear here (see issue8). + return not token.ttype in (T.DML, T.DDL) + _group_left_right(tlist, T.Keyword, 'AS', Identifier, + check_right=_right_valid) def group_assignment(tlist): _group_left_right(tlist, T.Assignment, ':=', Assignment, diff --git a/tests/test_grouping.py b/tests/test_grouping.py index 13d52b9..c3039b8 100644 --- a/tests/test_grouping.py +++ b/tests/test_grouping.py @@ -73,6 +73,13 @@ class TestGrouping(TestCaseBase): self.assertEqual(p.tokens[0].get_real_name(), None) self.assertEqual(p.tokens[0].get_parent_name(), 'a') + def test_identifier_as_invalid(self): # issue8 + p = sqlparse.parse('foo as select *')[0] + self.assert_(len(p.tokens), 5) + self.assert_(isinstance(p.tokens[0], Identifier)) + self.assertEqual(len(p.tokens[0].tokens), 1) + self.assertEqual(p.tokens[2].ttype, T.Keyword) + def test_identifier_function(self): p = sqlparse.parse('foo() as bar')[0] self.assert_(isinstance(p.tokens[0], Identifier)) |
