Skip to content

Commit 7cdefe9

Browse files
committed
Option to indent after first line
This adds a command line argument `--indent_after_first` which sets the indentation of all lines after the first one, e.g. SELECT, UPDATE, etc. For example: $ sqlparse/__main__.py -r sample.sql UPDATE foo SET a = 1 WHERE a > 2 AND a < 10; $ sqlparse/__main__.py -r --indent_after_first sample.sql UPDATE foo SET a = 1 WHERE a > 2 AND a < 10;
1 parent dc788ab commit 7cdefe9

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

sqlparse/cli.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ def create_parser():
101101
type=int,
102102
help='indentation width (defaults to 2 spaces)')
103103

104+
group.add_argument(
105+
'--indent_after_first',
106+
dest='indent_after_first',
107+
action='store_true',
108+
default=False,
109+
help='indent after first line of statement (e.g. SELECT)')
110+
104111
group.add_argument(
105112
'-a', '--reindent_aligned',
106113
action='store_true',

sqlparse/filters/reindent.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212

1313
class ReindentFilter(object):
1414
def __init__(self, width=2, char=' ', wrap_after=0, n='\n',
15-
comma_first=False):
15+
comma_first=False, indent_after_first = False):
1616
self.n = n
1717
self.width = width
1818
self.char = char
19-
self.indent = 0
19+
self.indent = 1 if indent_after_first else 0
2020
self.offset = 0
2121
self.wrap_after = wrap_after
2222
self.comma_first = comma_first

sqlparse/formatter.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ def validate_options(options):
7070
elif reindent_aligned:
7171
options['strip_whitespace'] = True
7272

73+
indent_after_first = options.get('indent_after_first', False)
74+
if indent_after_first not in [True, False]:
75+
raise SQLParseError('Invalid value for indent_after_first: '
76+
'{0!r}'.format(indent_after_first))
77+
7378
indent_tabs = options.get('indent_tabs', False)
7479
if indent_tabs not in [True, False]:
7580
raise SQLParseError('Invalid value for indent_tabs: '
@@ -153,6 +158,7 @@ def build_filter_stack(stack, options):
153158
stack.stmtprocess.append(
154159
filters.ReindentFilter(char=options['indent_char'],
155160
width=options['indent_width'],
161+
indent_after_first=options['indent_after_first'],
156162
wrap_after=options['wrap_after'],
157163
comma_first=options['comma_first']))
158164

0 commit comments

Comments
 (0)