summaryrefslogtreecommitdiff
path: root/sqlparse
diff options
context:
space:
mode:
Diffstat (limited to 'sqlparse')
-rw-r--r--sqlparse/engine/grouping.py13
-rw-r--r--sqlparse/filters/reindent.py19
-rw-r--r--sqlparse/sql.py4
3 files changed, 35 insertions, 1 deletions
diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py
index 5ff819c..afc9123 100644
--- a/sqlparse/engine/grouping.py
+++ b/sqlparse/engine/grouping.py
@@ -327,6 +327,18 @@ def align_comments(tlist):
tidx, token = tlist.token_next_by(i=sql.Comment, idx=tidx)
+def group_values(tlist):
+ tidx, token = tlist.token_next_by(m=(T.Keyword, 'VALUES'))
+ start_idx = tidx
+ end_idx = -1
+ while token:
+ if isinstance(token, sql.Parenthesis):
+ end_idx = tidx
+ tidx, token = tlist.token_next(tidx)
+ if end_idx != -1:
+ tlist.group_tokens(sql.Values, start_idx, end_idx, extend=True)
+
+
def group(stmt):
for func in [
group_comments,
@@ -354,6 +366,7 @@ def group(stmt):
align_comments,
group_identifier_list,
+ group_values,
]:
func(stmt)
return stmt
diff --git a/sqlparse/filters/reindent.py b/sqlparse/filters/reindent.py
index 68593c0..02a60df 100644
--- a/sqlparse/filters/reindent.py
+++ b/sqlparse/filters/reindent.py
@@ -133,7 +133,7 @@ class ReindentFilter(object):
first = next(identifiers.pop(0).flatten())
num_offset = 1 if self.char == '\t' else self._get_offset(first)
- if not tlist.within(sql.Function):
+ if not tlist.within(sql.Function) and not tlist.within(sql.Values):
with offset(self, num_offset):
position = 0
for token in identifiers:
@@ -206,6 +206,23 @@ class ReindentFilter(object):
if end_idx is not None:
tlist.insert_before(end_idx, self.nl())
+ def _process_values(self, tlist):
+ tlist.insert_before(0, self.nl())
+ tidx, token = tlist.token_next_by(i=sql.Parenthesis)
+ first_token = token
+ while token:
+ ptidx, ptoken = tlist.token_next_by(m=(T.Punctuation, ','),
+ idx=tidx)
+ if ptoken:
+ if self.comma_first:
+ adjust = -2
+ offset = self._get_offset(first_token) + adjust
+ tlist.insert_before(ptoken, self.nl(offset))
+ else:
+ tlist.insert_after(ptoken,
+ self.nl(self._get_offset(token)))
+ tidx, token = tlist.token_next_by(i=sql.Parenthesis, idx=tidx)
+
def _process_default(self, tlist, stmts=True):
self._split_statements(tlist) if stmts else None
self._split_kwds(tlist)
diff --git a/sqlparse/sql.py b/sqlparse/sql.py
index 2741e83..1f56117 100644
--- a/sqlparse/sql.py
+++ b/sqlparse/sql.py
@@ -621,3 +621,7 @@ class Begin(TokenList):
class Operation(TokenList):
"""Grouping of operations"""
+
+
+class Values(TokenList):
+ """Grouping of values"""