diff options
author | Andi Albrecht <albrecht.andi@gmail.com> | 2010-06-23 07:37:16 +0200 |
---|---|---|
committer | Andi Albrecht <albrecht.andi@gmail.com> | 2010-06-23 07:37:16 +0200 |
commit | cc01ab2971981bdcbc3cdbb10b36b202b4655a12 (patch) | |
tree | 9bc7de55f4524973128570310ab6371f88897084 | |
parent | b737d2093eacf3c34e1eb413192f86f0d8623ecd (diff) | |
download | sqlparse-cc01ab2971981bdcbc3cdbb10b36b202b4655a12.tar.gz |
Improve statement detection for DECLARE statements outside function/procedure definitions.
The parser didn't recognized DECLARE statements outside
function/procedure definitions correctly and assumed that a
non-separating semicolon follows.
-rw-r--r-- | sqlparse/engine/filter.py | 6 | ||||
-rw-r--r-- | tests/test_split.py | 7 |
2 files changed, 10 insertions, 3 deletions
diff --git a/sqlparse/engine/filter.py b/sqlparse/engine/filter.py index 08ff21d..0f6eec0 100644 --- a/sqlparse/engine/filter.py +++ b/sqlparse/engine/filter.py @@ -41,17 +41,17 @@ class StatementFilter(TokenFilter): return 0 # ANSI - if ttype is not T.Keyword: + if ttype not in T.Keyword: return 0 unified = value.upper() - if unified == 'DECLARE': + if unified == 'DECLARE' and self._is_create: self._in_declare = True return 1 if unified == 'BEGIN': - if self._in_declare: + if self._in_declare: # FIXME(andi): This makes no sense. return 0 return 0 diff --git a/tests/test_split.py b/tests/test_split.py index 5146bcb..50b3a6b 100644 --- a/tests/test_split.py +++ b/tests/test_split.py @@ -1,3 +1,4 @@ + # -*- coding: utf-8 -*- # Tests splitting functions. @@ -86,3 +87,9 @@ class SQLSplitTest(TestCaseBase): 'comment on table actor is \'The actor table.\';') stmts = sqlparse.split(sql) self.assertEqual(len(stmts), 2) + + def test_cursor_declare(self): + sql = ('DECLARE CURSOR "foo" AS SELECT 1;\n' + 'SELECT 2;') + stmts = sqlparse.split(sql) + self.assertEqual(len(stmts), 2) |