From 508db7329f05362a47a0ed9f93d0ae8d9e42dcc8 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Thu, 19 Apr 2012 21:21:53 +0200 Subject: Preserve whitespace after subgroups. --- sqlparse/filters.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'sqlparse') diff --git a/sqlparse/filters.py b/sqlparse/filters.py index 6bb3415..3d2355a 100644 --- a/sqlparse/filters.py +++ b/sqlparse/filters.py @@ -218,10 +218,11 @@ class StripWhitespaceFilter(Filter): tlist.tokens.pop(-2) self._stripws_default(tlist) - def process(self, stack, stmt): - [self.process(stack, sgroup) for sgroup in stmt.get_sublists()] + def process(self, stack, stmt, depth=0): + [self.process(stack, sgroup, depth+1) + for sgroup in stmt.get_sublists()] self._stripws(stmt) - if stmt.tokens[-1].is_whitespace(): + if depth == 0 and stmt.tokens[-1].is_whitespace(): stmt.tokens.pop(-1) @@ -610,4 +611,4 @@ class Limit(Filter): if index and token_type in Keyword and value == 'LIMIT': return stream[4 - index][1] - return -1 \ No newline at end of file + return -1 -- cgit v1.2.1 From e4bccf45a6e82d4738aab1b5eded3fa208a76875 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Thu, 19 Apr 2012 22:02:08 +0200 Subject: Pretty format comments in identifier lists (fixes issue59). --- sqlparse/engine/grouping.py | 30 ++++++++++++++++-------------- sqlparse/filters.py | 3 +++ sqlparse/sql.py | 8 ++++++++ 3 files changed, 27 insertions(+), 14 deletions(-) (limited to 'sqlparse') diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py index b0c6c2c..499ba8c 100644 --- a/sqlparse/engine/grouping.py +++ b/sqlparse/engine/grouping.py @@ -197,6 +197,7 @@ def group_identifier_list(tlist): lambda t: t.ttype == T.Number.Integer, lambda t: t.ttype == T.String.Single, lambda t: isinstance(t, sql.Comparison), + lambda t: isinstance(t, sql.Comment), ] tcomma = tlist.token_next_match(idx, T.Punctuation, ',') start = None @@ -314,18 +315,19 @@ def group_functions(tlist): def group(tlist): - for func in [group_parenthesis, - group_functions, - group_comments, - group_where, - group_case, - group_identifier, - group_typecasts, - group_as, - group_aliased, - group_assignment, - group_comparison, - group_identifier_list, - group_if, - group_for]: + for func in [ + group_comments, + group_parenthesis, + group_functions, + group_where, + group_case, + group_identifier, + group_typecasts, + group_as, + group_aliased, + group_assignment, + group_comparison, + group_identifier_list, + group_if, + group_for]: func(tlist) diff --git a/sqlparse/filters.py b/sqlparse/filters.py index 3d2355a..bfa757d 100644 --- a/sqlparse/filters.py +++ b/sqlparse/filters.py @@ -332,6 +332,9 @@ class ReindentFilter(Filter): self.offset += num_offset for token in identifiers[1:]: tlist.insert_before(token, self.nl()) + for token in tlist.tokens: + if isinstance(token, sql.Comment): + tlist.insert_after(token, self.nl()) self.offset -= num_offset self._process_default(tlist) diff --git a/sqlparse/sql.py b/sqlparse/sql.py index 72609e2..3ea1c6f 100644 --- a/sqlparse/sql.py +++ b/sqlparse/sql.py @@ -322,6 +322,14 @@ class TokenList(Token): """Inserts *token* before *where*.""" self.tokens.insert(self.token_index(where), token) + def insert_after(self, where, token): + """Inserts *token* after *where*.""" + next_token = self.token_next(where) + if next_token is None: + self.tokens.append(token) + else: + self.tokens.insert(self.token_index(next_token), token) + def has_alias(self): """Returns ``True`` if an alias is present.""" return self.get_alias() is not None -- cgit v1.2.1 From fb9ba15d47f6041a1ebebc738ec2707da0de49f1 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Thu, 19 Apr 2012 22:16:09 +0200 Subject: Pretty formatting of role keyword in identifier list (fixes #49). --- sqlparse/engine/grouping.py | 1 + 1 file changed, 1 insertion(+) (limited to 'sqlparse') diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py index 499ba8c..923ea63 100644 --- a/sqlparse/engine/grouping.py +++ b/sqlparse/engine/grouping.py @@ -194,6 +194,7 @@ def group_identifier_list(tlist): lambda t: t.ttype == T.Name, lambda t: t.ttype == T.Wildcard, lambda t: t.match(T.Keyword, 'null'), + lambda t: t.match(T.Keyword, 'role'), lambda t: t.ttype == T.Number.Integer, lambda t: t.ttype == T.String.Single, lambda t: isinstance(t, sql.Comparison), -- cgit v1.2.1 From 3942d09bd0be0a7b207864ebd0a5ce2ea0f9e28e Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Thu, 19 Apr 2012 22:21:00 +0200 Subject: Properly group placeholders in identifier lists (fixes #52). --- sqlparse/engine/grouping.py | 1 + 1 file changed, 1 insertion(+) (limited to 'sqlparse') diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py index 923ea63..55ec7e2 100644 --- a/sqlparse/engine/grouping.py +++ b/sqlparse/engine/grouping.py @@ -197,6 +197,7 @@ def group_identifier_list(tlist): lambda t: t.match(T.Keyword, 'role'), lambda t: t.ttype == T.Number.Integer, lambda t: t.ttype == T.String.Single, + lambda t: t.ttype == T.Name.Placeholder, lambda t: isinstance(t, sql.Comparison), lambda t: isinstance(t, sql.Comment), ] -- cgit v1.2.1 From 5d4c1468ee559032690601bdcfeee8cda95e69bb Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Thu, 19 Apr 2012 22:37:44 +0200 Subject: TokenLists.value is equal to their unicode() representation (fixes #30). --- sqlparse/sql.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sqlparse') diff --git a/sqlparse/sql.py b/sqlparse/sql.py index 3ea1c6f..9c7aeee 100644 --- a/sqlparse/sql.py +++ b/sqlparse/sql.py @@ -137,7 +137,7 @@ class TokenList(Token): if tokens is None: tokens = [] self.tokens = tokens - Token.__init__(self, None, None) + Token.__init__(self, None, unicode(self)) def __unicode__(self): return ''.join(unicode(x) for x in self.flatten()) -- cgit v1.2.1 From 0afebf47e24d8a1ee1981faef39c0a15a798f7fd Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Fri, 20 Apr 2012 19:44:17 +0200 Subject: Bump version to 0.1.4 --- sqlparse/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'sqlparse') diff --git a/sqlparse/__init__.py b/sqlparse/__init__.py index 5ccf092..f924c04 100644 --- a/sqlparse/__init__.py +++ b/sqlparse/__init__.py @@ -6,7 +6,7 @@ """Parse SQL statements.""" -__version__ = '0.1.3' +__version__ = '0.1.4' class SQLParseError(Exception): @@ -58,4 +58,4 @@ def split(sql): from sqlparse.engine.filter import StatementFilter def split2(stream): splitter = StatementFilter() - return list(splitter.process(None, stream)) \ No newline at end of file + return list(splitter.process(None, stream)) -- cgit v1.2.1