Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions sqlparse/filters/others.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ def _stripws_default(tlist):
for token in tlist.tokens:
if token.is_whitespace:
token.value = '' if last_was_ws or is_first_char else ' '
token.normalized = token.value
last_was_ws = token.is_whitespace
is_first_char = False

Expand Down
18 changes: 18 additions & 0 deletions tests/test_format.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,24 @@ def test_strip_ws_invalid_option(self):
with pytest.raises(SQLParseError):
sqlparse.format(s, strip_whitespace=None)

@pytest.mark.parametrize('text', [
'\t select\n\t* from foo',
'select (a\t +\n b)',
'select a\t,\n b from foo',
])
def test_strip_ws_updates_normalized_value(self, text):
# Regression for issue547: match() must see the filtered whitespace.
from sqlparse.filters import StripWhitespaceFilter

stmt = sqlparse.parse(text)[0]
StripWhitespaceFilter().process(stmt)
for token in stmt.flatten():
if token.is_whitespace:
assert token.normalized == token.value
assert token.match(token.ttype, token.value)
pattern = '^ $' if token.value else '^$'
assert token.match(token.ttype, pattern, regex=True)

def test_preserve_ws(self):
# preserve at least one whitespace after subgroups
f = lambda sql: sqlparse.format(sql, strip_whitespace=True)
Expand Down