summaryrefslogtreecommitdiff
path: root/sqlparse
diff options
context:
space:
mode:
Diffstat (limited to 'sqlparse')
-rw-r--r--sqlparse/filters.py9
-rw-r--r--sqlparse/formatter.py16
2 files changed, 21 insertions, 4 deletions
diff --git a/sqlparse/filters.py b/sqlparse/filters.py
index 72f17d0..4cb8a46 100644
--- a/sqlparse/filters.py
+++ b/sqlparse/filters.py
@@ -279,12 +279,13 @@ class StripWhitespaceFilter:
class ReindentFilter:
- def __init__(self, width=2, char=' ', line_width=None):
+ def __init__(self, width=2, char=' ', line_width=None, wrap_after=0):
self.width = width
self.char = char
self.indent = 0
self.offset = 0
self.line_width = line_width
+ self.wrap_after = wrap_after
self._curr_stmt = None
self._last_stmt = None
@@ -413,8 +414,12 @@ class ReindentFilter:
else:
num_offset = self._get_offset(first) - len(first.value)
self.offset += num_offset
+ position = self.offset
for token in identifiers[1:]:
- tlist.insert_before(token, self.nl())
+ position += len(token.value) + 1 # Add 1 for the "," separator
+ if position > self.wrap_after:
+ tlist.insert_before(token, self.nl())
+ position = self.offset
self.offset -= num_offset
self._process_default(tlist)
diff --git a/sqlparse/formatter.py b/sqlparse/formatter.py
index ab5f370..05ea327 100644
--- a/sqlparse/formatter.py
+++ b/sqlparse/formatter.py
@@ -52,6 +52,7 @@ def validate_options(options):
% reindent)
elif reindent:
options['strip_whitespace'] = True
+
indent_tabs = options.get('indent_tabs', False)
if indent_tabs not in [True, False]:
raise SQLParseError('Invalid value for indent_tabs: %r' % indent_tabs)
@@ -59,15 +60,25 @@ def validate_options(options):
options['indent_char'] = '\t'
else:
options['indent_char'] = ' '
+
indent_width = options.get('indent_width', 2)
try:
indent_width = int(indent_width)
except (TypeError, ValueError):
raise SQLParseError('indent_width requires an integer')
if indent_width < 1:
- raise SQLParseError('indent_width requires an positive integer')
+ raise SQLParseError('indent_width requires a positive integer')
options['indent_width'] = indent_width
+ wrap_after = options.get('wrap_after', 0)
+ try:
+ wrap_after = int(wrap_after)
+ except (TypeError, ValueError):
+ raise SQLParseError('wrap_after requires an integer')
+ if wrap_after < 0:
+ raise SQLParseError('wrap_after requires a positive integer')
+ options['wrap_after'] = wrap_after
+
right_margin = options.get('right_margin', None)
if right_margin is not None:
try:
@@ -115,7 +126,8 @@ def build_filter_stack(stack, options):
stack.enable_grouping()
stack.stmtprocess.append(
filters.ReindentFilter(char=options['indent_char'],
- width=options['indent_width']))
+ width=options['indent_width'],
+ wrap_after=options['wrap_after']))
if options.get('right_margin', False):
stack.enable_grouping()