diff options
| author | Andi Albrecht <albrecht.andi@gmail.com> | 2009-05-06 18:50:27 +0200 |
|---|---|---|
| committer | Andi Albrecht <albrecht.andi@gmail.com> | 2009-05-06 18:50:27 +0200 |
| commit | 01b2e8f15c57296bb14d7d56242fca641bcbcebe (patch) | |
| tree | 9c07ff9aa40bb891d54ed729b403f5f4b80f88a1 | |
| parent | 974222bcb24a5b2bf3a0e5ecd616a2c3855e8342 (diff) | |
| download | sqlparse-01b2e8f15c57296bb14d7d56242fca641bcbcebe.tar.gz | |
* Python and PHP output filter now add a trailing whitespace.
* More test coverage.
| -rw-r--r-- | sqlparse/filters.py | 10 | ||||
| -rw-r--r-- | sqlparse/formatter.py | 2 | ||||
| -rw-r--r-- | sqlparse/sql.py | 6 | ||||
| -rw-r--r-- | tests/test_format.py | 45 | ||||
| -rw-r--r-- | tests/test_tokenize.py | 5 |
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() |
