summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2009-07-13 20:19:34 +0200
committerAndi Albrecht <albrecht.andi@gmail.com>2009-07-13 20:19:34 +0200
commite10bf7967aa5ac6ed329631471ad90e5009e2c25 (patch)
tree3ef3240cd4b830d0d51d9fb8ab16ba91846652e6
parentd009c7dc9581c55ad3ebbc1074a9868be89793cd (diff)
downloadsqlparse-e10bf7967aa5ac6ed329631471ad90e5009e2c25.tar.gz
Improve detection of identifier aliases (fixes issue8).
-rw-r--r--CHANGES1
-rw-r--r--sqlparse/engine/grouping.py7
-rw-r--r--tests/test_grouping.py7
3 files changed, 14 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 27fa8b6..af7b917 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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))