summaryrefslogtreecommitdiff
path: root/migrate/versioning/script/sql.py
diff options
context:
space:
mode:
Diffstat (limited to 'migrate/versioning/script/sql.py')
-rw-r--r--migrate/versioning/script/sql.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/migrate/versioning/script/sql.py b/migrate/versioning/script/sql.py
index 40d628f..70b49ec 100644
--- a/migrate/versioning/script/sql.py
+++ b/migrate/versioning/script/sql.py
@@ -3,6 +3,8 @@
import logging
import shutil
+import sqlparse
+
from migrate.versioning.script import base
from migrate.versioning.template import Template
@@ -24,7 +26,7 @@ class SqlScript(base.BaseScript):
return cls(path)
# TODO: why is step parameter even here?
- def run(self, engine, step=None, executemany=True):
+ def run(self, engine, step=None):
"""Runs SQL script through raw dbapi execute call"""
text = self.source()
# Don't rely on SA's autocommit here
@@ -34,13 +36,13 @@ class SqlScript(base.BaseScript):
try:
trans = conn.begin()
try:
- # HACK: SQLite doesn't allow multiple statements through
- # its execute() method, but it provides executescript() instead
- dbapi = conn.engine.raw_connection()
- if executemany and getattr(dbapi, 'executescript', None):
- dbapi.executescript(text)
- else:
- conn.execute(text)
+ # NOTE(ihrachys): script may contain multiple statements, and
+ # not all drivers reliably handle multistatement queries or
+ # commands passed to .execute(), so split them and execute one
+ # by one
+ for statement in sqlparse.split(text):
+ if statement:
+ conn.execute(statement)
trans.commit()
except Exception as e:
log.error("SQL script %s failed: %s", self.path, e)