diff options
| author | Andi Albrecht <albrecht.andi@gmail.com> | 2011-07-23 22:56:09 +0200 |
|---|---|---|
| committer | Andi Albrecht <albrecht.andi@gmail.com> | 2011-07-23 22:56:09 +0200 |
| commit | dea76adfa5b3c25dd34d7c820410e21364e16d12 (patch) | |
| tree | 01b94994f59e26b48b1ed075473b42423b99e52f | |
| parent | d1956f27183c96f092a70a37e172f2fd045932a7 (diff) | |
| download | sqlparse-dea76adfa5b3c25dd34d7c820410e21364e16d12.tar.gz | |
Make sure that identifier lists in subselects with alias are grouped correctly.
| -rw-r--r-- | CHANGES | 4 | ||||
| -rw-r--r-- | sqlparse/engine/grouping.py | 2 | ||||
| -rw-r--r-- | tests/test_regressions.py | 32 |
3 files changed, 36 insertions, 2 deletions
@@ -5,7 +5,9 @@ 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). + * Avoid parsing names as keywords (issue39, reported by djo...@taket.org). + * Make sure identifier lists in subselects are grouped (issue40, + reported by djo...@taket.org). Release 0.1.2 (Nov 23, 2010) diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py index d233772..552a79f 100644 --- a/sqlparse/engine/grouping.py +++ b/sqlparse/engine/grouping.py @@ -170,7 +170,7 @@ def group_identifier(tlist): def group_identifier_list(tlist): [group_identifier_list(sgroup) for sgroup in tlist.get_sublists() - if not isinstance(sgroup, (sql.Identifier, sql.IdentifierList))] + if not isinstance(sgroup, sql.IdentifierList)] idx = 0 # Allowed list items fend1_funcs = [lambda t: isinstance(t, sql.Identifier), diff --git a/tests/test_regressions.py b/tests/test_regressions.py index 10c5608..edc039f 100644 --- a/tests/test_regressions.py +++ b/tests/test_regressions.py @@ -56,3 +56,35 @@ class RegressionTests(TestCaseBase): 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) + + def test_issue40(self): + # make sure identifier lists in subselects are grouped + p = sqlparse.parse(('SELECT id, name FROM ' + '(SELECT id, name FROM bar) as foo'))[0] + self.assertEqual(len(p.tokens), 7) + self.assertEqual(p.tokens[2].__class__, sql.IdentifierList) + self.assertEqual(p.tokens[-1].__class__, sql.Identifier) + self.assertEqual(p.tokens[-1].get_name(), u'foo') + sp = p.tokens[-1].tokens[0] + self.assertEqual(sp.tokens[3].__class__, sql.IdentifierList) + # make sure that formatting works as expected + self.ndiffAssertEqual( + sqlparse.format(('SELECT id, name FROM ' + '(SELECT id, name FROM bar)'), + reindent=True), + ('SELECT id,\n' + ' name\n' + 'FROM\n' + ' (SELECT id,\n' + ' name\n' + ' FROM bar)')) + self.ndiffAssertEqual( + sqlparse.format(('SELECT id, name FROM ' + '(SELECT id, name FROM bar) as foo'), + reindent=True), + ('SELECT id,\n' + ' name\n' + 'FROM\n' + ' (SELECT id,\n' + ' name\n' + ' FROM bar) as foo')) |
