Mercurial > kallithea
view rhodecode/lib/dbmigrate/migrate/versioning/script/sql.py @ 1203:6832ef664673 beta
source code cleanup: remove trailing white space, normalize file endings
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 03 Apr 2011 18:23:15 +0200 |
parents | 9bb609d164e4 |
children | 7e5f8c12a3fc |
line wrap: on
line source
#!/usr/bin/env python # -*- coding: utf-8 -*- import logging import shutil from rhodecode.lib.dbmigrate.migrate.versioning.script import base from rhodecode.lib.dbmigrate.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()