From 9dbcfd31abafe48ee7c646129c40e904ff0a5fac Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Mon, 16 Mar 2015 07:50:06 +0100 Subject: Support comments starting with '#' character (fixes #178). --- CHANGES | 1 + sqlparse/lexer.py | 2 +- tests/test_parse.py | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index c264b9f..4229de3 100644 --- a/CHANGES +++ b/CHANGES @@ -17,6 +17,7 @@ Enhancements * Add support for square bracket array indexing (issue170, issue176, issue177 by darikg). * Improve grouping of aliased elements (issue167, by darikg). +* Support comments starting with '#' character (issue178). Release 0.1.14 (Nov 30, 2014) diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py index 4707990..0a402c3 100644 --- a/sqlparse/lexer.py +++ b/sqlparse/lexer.py @@ -167,7 +167,7 @@ class Lexer(object): (r'--.*?(\r\n|\r|\n)', tokens.Comment.Single), # $ matches *before* newline, therefore we have two patterns # to match Comment.Single - (r'--.*?$', tokens.Comment.Single), + (r'(--|#).*?$', tokens.Comment.Single), (r'(\r\n|\r|\n)', tokens.Newline), (r'\s+', tokens.Whitespace), (r'/\*', tokens.Comment.Multiline, 'multiline-comments'), diff --git a/tests/test_parse.py b/tests/test_parse.py index f6e796f..857685b 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -283,3 +283,13 @@ def test_typed_array_definition(): assert names == ['x', 'y', 'z'] +@pytest.mark.parametrize('sql', [ + 'select 1 -- foo', + 'select 1 # foo' # see issue178 +]) +def test_single_line_comments(sql): + p = sqlparse.parse(sql)[0] + assert len(p.tokens) == 5 + assert p.tokens[-1].ttype == T.Comment.Single + + -- cgit v1.2.1 From f5e1a1add8aa4564cd24e2b3d13414b1fba68899 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Mon, 16 Mar 2015 07:56:01 +0100 Subject: Fix other regex to identify comments starting with '#' character. --- sqlparse/lexer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py index 0a402c3..a1a4703 100644 --- a/sqlparse/lexer.py +++ b/sqlparse/lexer.py @@ -164,7 +164,7 @@ class Lexer(object): tokens = { 'root': [ - (r'--.*?(\r\n|\r|\n)', tokens.Comment.Single), + (r'(--|#).*?(\r\n|\r|\n)', tokens.Comment.Single), # $ matches *before* newline, therefore we have two patterns # to match Comment.Single (r'(--|#).*?$', tokens.Comment.Single), -- cgit v1.2.1 From 9dc700b6ebc2fc8582624c071cb6b86f7084f901 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Sun, 29 Mar 2015 17:56:29 +0200 Subject: Add coverage.xml to .gitignore. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3d7b563..24f7da0 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ extras/appengine/lib/ extras/py3k/sqlparse extras/py3k/tests extras/py3k/sqlparse.diff -extras/py3k/tests.diff \ No newline at end of file +extras/py3k/tests.diff +coverage.xml -- cgit v1.2.1 From ab827eaf935aba776715c4693ec9f320008a6708 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Sun, 12 Apr 2015 07:06:31 +0200 Subject: Update offset when adding line break (fixes 184). This change fixes a regression introduced in 8c5c0684ac61ab7d0c5e77881728c8106f2877f9. --- sqlparse/filters.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sqlparse/filters.py b/sqlparse/filters.py index 9c0a476..676344f 100644 --- a/sqlparse/filters.py +++ b/sqlparse/filters.py @@ -347,6 +347,7 @@ class ReindentFilter: nl = self.nl() added.add(nl) tlist.insert_before(token, nl) + offset += 1 token = _next_token(tlist.token_index(nl) + offset) def _split_statements(self, tlist): -- cgit v1.2.1 From f775030692222a5a0b296284328276b65259cc02 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Sun, 12 Apr 2015 07:37:01 +0200 Subject: Never interpret IN keyword as function name (fixes #183). --- CHANGES | 1 + sqlparse/lexer.py | 3 +++ tests/test_grouping.py | 8 +++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 4229de3..51a2551 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,7 @@ Bug Fixes * Fix parsing of multi-line comments (issue172, by JacekPliszka). * Fix parsing of escaped backslashes (issue174, by caseyching). * Fix parsing of identifiers starting with underscore (issue175). +* Fix misinterpretation of IN keyword (issue183). Enhancements * Improve formatting of HAVING statements. diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py index a1a4703..9533e8a 100644 --- a/sqlparse/lexer.py +++ b/sqlparse/lexer.py @@ -186,6 +186,9 @@ class Lexer(object): # see https://github.com/andialbrecht/sqlparse/pull/64 (r'VALUES', tokens.Keyword), (r'@[^\W\d_]\w+', tokens.Name), + # IN is special, it may be followed by a parenthesis, but + # is never a functino, see issue183 + (r'in\b(?=[ (])?', tokens.Keyword), (r'[^\W\d_]\w*(?=[.(])', tokens.Name), # see issue39 (r'[-]?0x[0-9a-fA-F]+', tokens.Number.Hexadecimal), (r'[-]?[0-9]*(\.[0-9]+)?[eE][-]?[0-9]+', tokens.Number.Float), diff --git a/tests/test_grouping.py b/tests/test_grouping.py index c598258..b6edafe 100644 --- a/tests/test_grouping.py +++ b/tests/test_grouping.py @@ -207,6 +207,12 @@ class TestGrouping(TestCaseBase): self.assert_(isinstance(p.tokens[0], sql.Function)) self.assertEqual(len(list(p.tokens[0].get_parameters())), 2) + def test_function_not_in(self): # issue183 + p = sqlparse.parse('in(1, 2)')[0] + self.assertEqual(len(p.tokens), 2) + self.assertEqual(p.tokens[0].ttype, T.Keyword) + self.assert_(isinstance(p.tokens[1], sql.Parenthesis)) + def test_varchar(self): p = sqlparse.parse('"text" Varchar(50) NOT NULL')[0] self.assert_(isinstance(p.tokens[2], sql.Function)) @@ -385,4 +391,4 @@ def test_aliased_function_without_as(): def test_aliased_literal_without_as(): p = sqlparse.parse('1 foo')[0].tokens assert len(p) == 1 - assert p[0].get_alias() == 'foo' \ No newline at end of file + assert p[0].get_alias() == 'foo' -- cgit v1.2.1