summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2009-05-06 18:50:27 +0200
committerAndi Albrecht <albrecht.andi@gmail.com>2009-05-06 18:50:27 +0200
commit01b2e8f15c57296bb14d7d56242fca641bcbcebe (patch)
tree9c07ff9aa40bb891d54ed729b403f5f4b80f88a1
parent974222bcb24a5b2bf3a0e5ecd616a2c3855e8342 (diff)
downloadsqlparse-01b2e8f15c57296bb14d7d56242fca641bcbcebe.tar.gz
* Python and PHP output filter now add a trailing whitespace.
* More test coverage.
-rw-r--r--sqlparse/filters.py10
-rw-r--r--sqlparse/formatter.py2
-rw-r--r--sqlparse/sql.py6
-rw-r--r--tests/test_format.py45
-rw-r--r--tests/test_tokenize.py5
5 files changed, 59 insertions, 9 deletions
diff --git a/sqlparse/filters.py b/sqlparse/filters.py
index 1ff767e..2692613 100644
--- a/sqlparse/filters.py
+++ b/sqlparse/filters.py
@@ -364,7 +364,7 @@ class OutputPythonFilter(Filter):
if cnt == 1:
continue
after_lb = token.value.split('\n', 1)[1]
- yield grouping.Token(T.Text, "'")
+ yield grouping.Token(T.Text, " '")
yield grouping.Token(T.Whitespace, '\n')
for i in range(len(varname)+4):
yield grouping.Token(T.Whitespace, ' ')
@@ -407,11 +407,11 @@ class OutputPHPFilter(Filter):
cnt = 0
for token in stream:
if token.is_whitespace() and '\n' in token.value:
- cnt += 1
- if cnt == 1:
- continue
+# cnt += 1
+# if cnt == 1:
+# continue
after_lb = token.value.split('\n', 1)[1]
- yield grouping.Token(T.Text, '"')
+ yield grouping.Token(T.Text, ' "')
yield grouping.Token(T.Operator, ';')
yield grouping.Token(T.Whitespace, '\n')
yield grouping.Token(T.Name, varname)
diff --git a/sqlparse/formatter.py b/sqlparse/formatter.py
index 9c6f76b..b9fd891 100644
--- a/sqlparse/formatter.py
+++ b/sqlparse/formatter.py
@@ -41,7 +41,7 @@ def validate_options(options):
options['strip_whitespace'] = True
indent_tabs = options.get('indent_tabs', False)
if indent_tabs not in [True, False]:
- raise SQLParserError('Invalid value for indent_tabs: %r' % indent_tabs)
+ raise SQLParseError('Invalid value for indent_tabs: %r' % indent_tabs)
elif indent_tabs:
options['indent_char'] = '\t'
else:
diff --git a/sqlparse/sql.py b/sqlparse/sql.py
index 5abaad0..7c607c4 100644
--- a/sqlparse/sql.py
+++ b/sqlparse/sql.py
@@ -170,9 +170,9 @@ class TokenList(Token):
If no matching token can be found ``None`` is returned.
"""
- if type(clss) not in (types.ListType, types.TupleType):
+ if isinstance(clss, (list, tuple)):
clss = (clss,)
- if type(clss) is not types.TupleType:
+ if isinstance(clss, tuple):
clss = tuple(clss)
for token in self.tokens[idx:]:
if isinstance(token, clss):
@@ -181,7 +181,7 @@ class TokenList(Token):
def token_next_by_type(self, idx, ttypes):
"""Returns next matching token by it's token type."""
- if not isinstance(ttypes, (types.TupleType, types.ListType)):
+ if not isinstance(ttypes, (list, tuple)):
ttypes = [ttypes]
for token in self.tokens[idx:]:
if token.ttype in ttypes:
diff --git a/tests/test_format.py b/tests/test_format.py
index 7cfb7fe..de65eae 100644
--- a/tests/test_format.py
+++ b/tests/test_format.py
@@ -42,6 +42,8 @@ class TestFormat(TestCaseBase):
sql = 'select-- foo\nfrom -- bar\nwhere'
res = sqlparse.format(sql, strip_comments=True)
self.ndiffAssertEqual(res, 'select from where')
+ self.assertRaises(sqlparse.SQLParseError, sqlparse.format, sql,
+ strip_comments=None)
def test_strip_comments_multi(self):
sql = '/* sql starts here */\nselect'
@@ -63,10 +65,27 @@ class TestFormat(TestCaseBase):
self.ndiffAssertEqual(f(s), 'select * from foo where (1 = 2)')
s = 'select -- foo\nfrom bar\n'
self.ndiffAssertEqual(f(s), 'select -- foo\nfrom bar')
+ self.assertRaises(sqlparse.SQLParseError, sqlparse.format, s,
+ strip_whitespace=None)
+
+ def test_outputformat(self):
+ sql = 'select * from foo;'
+ self.assertRaises(sqlparse.SQLParseError, sqlparse.format, sql,
+ output_format='foo')
class TestFormatReindent(TestCaseBase):
+ def test_option(self):
+ self.assertRaises(sqlparse.SQLParseError, sqlparse.format, 'foo',
+ reindent=2)
+ self.assertRaises(sqlparse.SQLParseError, sqlparse.format, 'foo',
+ indent_tabs=2)
+ self.assertRaises(sqlparse.SQLParseError, sqlparse.format, 'foo',
+ reindent=True, indent_width='foo')
+ self.assertRaises(sqlparse.SQLParseError, sqlparse.format, 'foo',
+ reindent=True, indent_width=-12)
+
def test_stmts(self):
f = lambda sql: sqlparse.format(sql, reindent=True)
s = 'select foo; select bar'
@@ -176,3 +195,29 @@ class TestFormatReindent(TestCaseBase):
'order by c1']))
+
+
+class TestOutputFormat(TestCaseBase):
+
+ def test_python(self):
+ sql = 'select * from foo;'
+ f = lambda sql: sqlparse.format(sql, output_format='python')
+ self.ndiffAssertEqual(f(sql), "sql = 'select * from foo;'")
+ f = lambda sql: sqlparse.format(sql, output_format='python',
+ reindent=True)
+ self.ndiffAssertEqual(f(sql), ("sql = ('select * '\n"
+ " 'from foo;')"))
+
+ def test_php(self):
+ sql = 'select * from foo;'
+ f = lambda sql: sqlparse.format(sql, output_format='php')
+ self.ndiffAssertEqual(f(sql), '$sql = "select * from foo;";')
+ f = lambda sql: sqlparse.format(sql, output_format='php',
+ reindent=True)
+ self.ndiffAssertEqual(f(sql), ('$sql = "select * ";\n'
+ '$sql .= "from foo;";'))
+
+ def test_sql(self): # "sql" is an allowed option but has no effect
+ sql = 'select * from foo;'
+ f = lambda sql: sqlparse.format(sql, output_format='sql')
+ self.ndiffAssertEqual(f(sql), 'select * from foo;')
diff --git a/tests/test_tokenize.py b/tests/test_tokenize.py
index e4ef6c3..690ef31 100644
--- a/tests/test_tokenize.py
+++ b/tests/test_tokenize.py
@@ -66,6 +66,11 @@ class TestToken(unittest.TestCase):
class TestTokenList(unittest.TestCase):
+ def test_repr(self):
+ p = sqlparse.parse('foo, bar, baz')[0]
+ tst = "<IdentifierList 'foo, b...' at 0x"
+ self.assertEqual(repr(p.tokens[0])[:len(tst)], tst)
+
def test_token_first(self):
p = sqlparse.parse(' select foo')[0]
first = p.token_first()