
Remove all trailing spaces and tabs in every file in the project. People have editors configured to do this, which causes them to accidentally make little whitespace changes in unrelated commits, which makes those commits harder to review. Better to fix them all at once. Change-Id: I17d89f55f41d8599e0ab1a31f646cd161289703e
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
import logging
|
|
import shutil
|
|
|
|
from migrate.versioning.script import base
|
|
from migrate.versioning.template import Template
|
|
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
class SqlScript(base.BaseScript):
|
|
"""A file containing plain SQL statements."""
|
|
|
|
@classmethod
|
|
def create(cls, path, **opts):
|
|
"""Create an empty migration script at specified path
|
|
|
|
:returns: :class:`SqlScript instance <migrate.versioning.script.sql.SqlScript>`"""
|
|
cls.require_notfound(path)
|
|
|
|
src = Template(opts.pop('templates_path', None)).get_sql_script(theme=opts.pop('templates_theme', None))
|
|
shutil.copy(src, path)
|
|
return cls(path)
|
|
|
|
# TODO: why is step parameter even here?
|
|
def run(self, engine, step=None, executemany=True):
|
|
"""Runs SQL script through raw dbapi execute call"""
|
|
text = self.source()
|
|
# Don't rely on SA's autocommit here
|
|
# (SA uses .startswith to check if a commit is needed. What if script
|
|
# starts with a comment?)
|
|
conn = engine.connect()
|
|
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)
|
|
trans.commit()
|
|
except:
|
|
trans.rollback()
|
|
raise
|
|
finally:
|
|
conn.close()
|