Skip to content

Commit a8ded64

Browse files
committed
Put common code from Python and PHP output filters in OutputFilter
1 parent 28f9c77 commit a8ded64

2 files changed

Lines changed: 37 additions & 37 deletions

File tree

sqlparse/filters.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -503,14 +503,28 @@ def Tokens2Unicode(stream):
503503
return result
504504

505505

506-
class OutputPythonFilter(Filter):
507-
506+
class OutputFilter(Filter):
508507
def __init__(self, varname='sql'):
509-
self.varname = varname
510-
self.cnt = 0
508+
self.varname = self.varname_prefix + varname
509+
self.count = 0
511510

512-
def _process(self, stream, varname, count, has_nl):
513-
if count > 1:
511+
def process(self, stack, stmt):
512+
self.count += 1
513+
if self.count > 1:
514+
varname = '%s%d' % (self.varname, self.count)
515+
else:
516+
varname = self.varname
517+
518+
has_nl = len(unicode(stmt).strip().splitlines()) > 1
519+
stmt.tokens = self._process(stmt.tokens, varname, has_nl)
520+
return stmt
521+
522+
523+
class OutputPythonFilter(OutputFilter):
524+
varname_prefix = ''
525+
526+
def _process(self, stream, varname, has_nl):
527+
if self.count > 1:
514528
yield sql.Token(T.Whitespace, '\n')
515529
yield sql.Token(T.Name, varname)
516530
yield sql.Token(T.Whitespace, ' ')
@@ -519,6 +533,7 @@ def _process(self, stream, varname, count, has_nl):
519533
if has_nl:
520534
yield sql.Token(T.Operator, '(')
521535
yield sql.Token(T.Text, "'")
536+
522537
cnt = 0
523538
for token in stream:
524539
cnt += 1
@@ -528,74 +543,59 @@ def _process(self, stream, varname, count, has_nl):
528543
after_lb = token.value.split('\n', 1)[1]
529544
yield sql.Token(T.Text, " '")
530545
yield sql.Token(T.Whitespace, '\n')
531-
for i in range(len(varname) + 4):
532-
yield sql.Token(T.Whitespace, ' ')
546+
547+
yield sql.Token(T.Whitespace, ' ' * (len(varname) + 4))
533548
yield sql.Token(T.Text, "'")
534549
if after_lb: # it's the indendation
535550
yield sql.Token(T.Whitespace, after_lb)
536551
continue
552+
537553
elif token.value and "'" in token.value:
538554
token.value = token.value.replace("'", "\\'")
539555
yield sql.Token(T.Text, token.value or '')
556+
540557
yield sql.Token(T.Text, "'")
541558
if has_nl:
542559
yield sql.Token(T.Operator, ')')
543560

544-
def process(self, stack, stmt):
545-
self.cnt += 1
546-
if self.cnt > 1:
547-
varname = '%s%d' % (self.varname, self.cnt)
548-
else:
549-
varname = self.varname
550-
has_nl = len(unicode(stmt).strip().splitlines()) > 1
551-
stmt.tokens = self._process(stmt.tokens, varname, self.cnt, has_nl)
552-
return stmt
553-
554-
555-
class OutputPHPFilter(Filter):
556561

557-
def __init__(self, varname='sql'):
558-
self.varname = '$%s' % varname
559-
self.count = 0
562+
class OutputPHPFilter(OutputFilter):
563+
varname_prefix = '$'
560564

561-
def _process(self, stream, varname):
565+
def _process(self, stream, varname, has_nl):
562566
if self.count > 1:
563567
yield sql.Token(T.Whitespace, '\n')
564568
yield sql.Token(T.Name, varname)
565569
yield sql.Token(T.Whitespace, ' ')
570+
if has_nl:
571+
yield sql.Token(T.Whitespace, ' ')
566572
yield sql.Token(T.Operator, '=')
567573
yield sql.Token(T.Whitespace, ' ')
568574
yield sql.Token(T.Text, '"')
575+
569576
for token in stream:
570577
if token.is_whitespace() and '\n' in token.value:
571578
after_lb = token.value.split('\n', 1)[1]
572579
yield sql.Token(T.Text, ' "')
573580
yield sql.Token(T.Operator, ';')
574581
yield sql.Token(T.Whitespace, '\n')
582+
575583
yield sql.Token(T.Name, varname)
576584
yield sql.Token(T.Whitespace, ' ')
577-
yield sql.Token(T.Punctuation, '.')
578-
yield sql.Token(T.Operator, '=')
585+
yield sql.Token(T.Operator, '.=')
579586
yield sql.Token(T.Whitespace, ' ')
580587
yield sql.Token(T.Text, '"')
581588
if after_lb:
582589
yield sql.Token(T.Text, after_lb)
583590
continue
591+
584592
elif '"' in token.value:
585593
token.value = token.value.replace('"', '\\"')
586594
yield sql.Token(T.Text, token.value)
595+
587596
yield sql.Token(T.Text, '"')
588597
yield sql.Token(T.Punctuation, ';')
589598

590-
def process(self, stack, stmt):
591-
self.count += 1
592-
if self.count > 1:
593-
varname = '%s%d' % (self.varname, self.count)
594-
else:
595-
varname = self.varname
596-
stmt.tokens = tuple(self._process(stmt.tokens, varname))
597-
return stmt
598-
599599

600600
class Limit(Filter):
601601
"""Get the LIMIT of a query.

tests/test_format.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def test_option(self):
9090
self.assertRaises(sqlparse.SQLParseError, sqlparse.format, 'foo',
9191
reindent=True, indent_width='foo')
9292
self.assertRaises(sqlparse.SQLParseError, sqlparse.format, 'foo',
93-
reindent=True, indent_width=-12)
93+
reindent=True, indent_width= -12)
9494

9595
def test_stmts(self):
9696
f = lambda sql: sqlparse.format(sql, reindent=True)
@@ -259,7 +259,7 @@ def test_php(self):
259259
self.ndiffAssertEqual(f(sql), '$sql = "select * from foo;";')
260260
f = lambda sql: sqlparse.format(sql, output_format='php',
261261
reindent=True)
262-
self.ndiffAssertEqual(f(sql), ('$sql = "select * ";\n'
262+
self.ndiffAssertEqual(f(sql), ('$sql = "select * ";\n'
263263
'$sql .= "from foo;";'))
264264

265265
def test_sql(self): # "sql" is an allowed option but has no effect

0 commit comments

Comments
 (0)