Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion sqlparse/engine/statement_splitter.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@ def _change_splitlevel(self, ttype, value):
(ttype is T.Keyword or ttype is T.Name) and \
unified in ('TRANSACTION', 'WORK', 'TRAN',
'DISTRIBUTED', 'DEFERRED',
'IMMEDIATE', 'EXCLUSIVE'):
'IMMEDIATE', 'EXCLUSIVE',
'ISOLATION', 'READ'):
self._seen_begin = False
if self._block_stack and self._block_stack[-1] == 'BEGIN':
self._block_stack.pop()
Expand Down
29 changes: 27 additions & 2 deletions tests/test_split.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,33 @@ def test_split_begin_transaction_formatted(): # issue826
assert stmts[2].startswith('INSERT')
assert stmts[3] == 'END\nTRANSACTION;'

# https://github.com/andialbrecht/sqlparse/issues/843
def test_split_begin_read_write():
# Redshift BEGIN READ WRITE should not be treated as a block start
sql = """BEGIN READ WRITE;
DELETE FROM schema.table_a USING table_a_temp
WHERE schema.table_a.id = table_a_temp.id;
INSERT INTO schema.table_a SELECT * FROM table_a_temp;
END TRANSACTION;"""
stmts = sqlparse.split(sql)
assert len(stmts) == 4
assert stmts[0] == 'BEGIN READ WRITE;'
assert stmts[1].startswith('DELETE')
assert stmts[2].startswith('INSERT')
assert stmts[3] == 'END TRANSACTION;'


# https://github.com/andialbrecht/sqlparse/issues/843
def test_split_begin_isolation_level_read_only():
sql = """BEGIN ISOLATION LEVEL SERIALIZABLE READ ONLY;
SELECT 1;
END TRANSACTION;"""
stmts = sqlparse.split(sql)
assert len(stmts) == 3
assert stmts[0] == 'BEGIN ISOLATION LEVEL SERIALIZABLE READ ONLY;'
assert stmts[1] == 'SELECT 1;'
assert stmts[2] == 'END TRANSACTION;'


def test_split_anonymous_begin_end_for(): # issue845 Case 1
sql = """
Expand Down Expand Up @@ -372,5 +399,3 @@ def test_split_standalone_for_update():
assert len(stmts) == 2
assert stmts[0] == "SELECT * FROM foo FOR UPDATE;"
assert stmts[1] == "SELECT 3;"