From f871291d33df018bf38cd62df3781456c8914210 Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Tue, 19 Nov 2013 08:11:58 +0100 Subject: Support for BEGIN/END blocks, add FOREACH keyword. --- sqlparse/engine/grouping.py | 14 +++++++++++++- sqlparse/keywords.py | 3 ++- sqlparse/sql.py | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'sqlparse') diff --git a/sqlparse/engine/grouping.py b/sqlparse/engine/grouping.py index 47e77ac..29f7a37 100644 --- a/sqlparse/engine/grouping.py +++ b/sqlparse/engine/grouping.py @@ -99,6 +99,16 @@ def group_for(tlist): sql.For, True) +def group_foreach(tlist): + _group_matching(tlist, T.Keyword, 'FOREACH', T.Keyword, 'END LOOP', + sql.For, True) + + +def group_begin(tlist): + _group_matching(tlist, T.Keyword, 'BEGIN', T.Keyword, 'END', + sql.Begin, True) + + def group_as(tlist): def _right_valid(token): @@ -369,5 +379,7 @@ def group(tlist): group_comparison, group_identifier_list, group_if, - group_for]: + group_for, + group_foreach, + group_begin]: func(tlist) diff --git a/sqlparse/keywords.py b/sqlparse/keywords.py index f1d76d0..1675d81 100644 --- a/sqlparse/keywords.py +++ b/sqlparse/keywords.py @@ -29,7 +29,7 @@ KEYWORDS = { 'BACKWARD': tokens.Keyword, 'BEFORE': tokens.Keyword, - 'BEGIN': tokens.Keyword.DML, + 'BEGIN': tokens.Keyword, 'BETWEEN': tokens.Keyword, 'BITVAR': tokens.Keyword, 'BIT_LENGTH': tokens.Keyword, @@ -163,6 +163,7 @@ KEYWORDS = { 'FINAL': tokens.Keyword, 'FIRST': tokens.Keyword, 'FORCE': tokens.Keyword, + 'FOREACH': tokens.Keyword, 'FOREIGN': tokens.Keyword, 'FORTRAN': tokens.Keyword, 'FORWARD': tokens.Keyword, diff --git a/sqlparse/sql.py b/sqlparse/sql.py index 9567aa5..cfd622b 100644 --- a/sqlparse/sql.py +++ b/sqlparse/sql.py @@ -629,3 +629,9 @@ class Function(TokenList): elif isinstance(t, Identifier): return [t,] return [] + + +class Begin(TokenList): + """A BEGIN/END block.""" + + __slots__ = ('value', 'ttype', 'tokens') -- cgit v1.2.1