summaryrefslogtreecommitdiff
path: root/sqlparse
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2013-11-19 08:11:58 +0100
committerAndi Albrecht <albrecht.andi@gmail.com>2013-11-19 08:11:58 +0100
commitf871291d33df018bf38cd62df3781456c8914210 (patch)
tree719f1dda71f687ff0f95949dc5a09f457c6cf2e1 /sqlparse
parent13ffdb69dd6129b81d0a6457d484798fd62e54c3 (diff)
downloadsqlparse-f871291d33df018bf38cd62df3781456c8914210.tar.gz
Support for BEGIN/END blocks, add FOREACH keyword.
Diffstat (limited to 'sqlparse')
-rw-r--r--sqlparse/engine/grouping.py14
-rw-r--r--sqlparse/keywords.py3
-rw-r--r--sqlparse/sql.py6
3 files changed, 21 insertions, 2 deletions
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')