diff options
Diffstat (limited to 'migrate/changeset/databases')
-rw-r--r-- | migrate/changeset/databases/mysql.py | 27 | ||||
-rw-r--r-- | migrate/changeset/databases/oracle.py | 7 | ||||
-rw-r--r-- | migrate/changeset/databases/postgres.py | 23 | ||||
-rw-r--r-- | migrate/changeset/databases/sqlite.py | 21 | ||||
-rw-r--r-- | migrate/changeset/databases/visitor.py | 18 |
5 files changed, 41 insertions, 55 deletions
diff --git a/migrate/changeset/databases/mysql.py b/migrate/changeset/databases/mysql.py index 94ee4db..08ad4f3 100644 --- a/migrate/changeset/databases/mysql.py +++ b/migrate/changeset/databases/mysql.py @@ -10,19 +10,11 @@ MySQLSchemaGenerator = sa_base.MySQLSchemaGenerator class MySQLColumnGenerator(MySQLSchemaGenerator, ansisql.ANSIColumnGenerator): - - def _do_quote_table_identifier(self, identifier): - return '%s'%identifier pass class MySQLColumnDropper(ansisql.ANSIColumnDropper): - - def _do_quote_table_identifier(self, identifier): - return '%s'%identifier - - def _do_quote_column_identifier(self, identifier): - return '%s'%identifier + pass class MySQLSchemaChanger(MySQLSchemaGenerator, ansisql.ANSISchemaChanger): @@ -49,9 +41,10 @@ class MySQLSchemaChanger(MySQLSchemaGenerator, ansisql.ANSISchemaChanger): if not column.table: column.table = delta.table colspec = self.get_column_specification(column) - self.start_alter_table(table_name) + # TODO: we need table formating here + self.start_alter_table(self.preparer.quote(table_name, True)) self.append("CHANGE COLUMN ") - self.append(col_name) + self.append(self.preparer.quote(col_name, True)) self.append(' ') self.append(colspec) @@ -59,14 +52,9 @@ class MySQLSchemaChanger(MySQLSchemaGenerator, ansisql.ANSISchemaChanger): # If MySQL can do this, I can't find how raise exceptions.NotSupportedError("MySQL cannot rename indexes") - def _do_quote_table_identifier(self, identifier): - return '%s'%identifier - class MySQLConstraintGenerator(ansisql.ANSIConstraintGenerator): - - def _do_quote_table_identifier(self, identifier): - return '%s'%identifier + pass class MySQLConstraintDropper(ansisql.ANSIConstraintDropper): @@ -85,12 +73,9 @@ class MySQLConstraintDropper(ansisql.ANSIConstraintDropper): def visit_migrate_foreign_key_constraint(self, constraint): self.start_alter_table(constraint) self.append("DROP FOREIGN KEY ") - self.append(constraint.name) + self.append(self.preparer.format_constraint(constraint)) self.execute() - def _do_quote_table_identifier(self, identifier): - return '%s'%identifier - class MySQLDialect(ansisql.ANSIDialect): columngenerator = MySQLColumnGenerator diff --git a/migrate/changeset/databases/oracle.py b/migrate/changeset/databases/oracle.py index 35b146c..2716fa2 100644 --- a/migrate/changeset/databases/oracle.py +++ b/migrate/changeset/databases/oracle.py @@ -67,8 +67,8 @@ class OracleSchemaChanger(OracleSchemaGenerator, ansisql.ANSISchemaChanger): column.server_default = sa.PassiveDefault(sa.sql.null()) if notnull_hack: column.nullable = True - colspec=self.get_column_specification(column, - override_nullable=null_hack) + colspec = self.get_column_specification(column, + override_nullable=null_hack) if null_hack: colspec += ' NULL' if notnull_hack: @@ -76,7 +76,8 @@ class OracleSchemaChanger(OracleSchemaGenerator, ansisql.ANSISchemaChanger): if dropdefault_hack: column.server_default = None - self.start_alter_table(table_name) + # TODO: format from table + self.start_alter_table(self.preparer.quote(table_name, True)) self.append("MODIFY ") self.append(colspec) diff --git a/migrate/changeset/databases/postgres.py b/migrate/changeset/databases/postgres.py index d1d4cc8..bcdc08b 100644 --- a/migrate/changeset/databases/postgres.py +++ b/migrate/changeset/databases/postgres.py @@ -11,40 +11,27 @@ from sqlalchemy.databases import postgres as sa_base PGSchemaGenerator = sa_base.PGSchemaGenerator -class PGSchemaGeneratorMixin(object): - """Common code used by the PostgreSQL specific classes.""" - - def _do_quote_table_identifier(self, identifier): - return identifier - - def _do_quote_column_identifier(self, identifier): - return '"%s"'%identifier - - -class PGColumnGenerator(PGSchemaGenerator, ansisql.ANSIColumnGenerator, - PGSchemaGeneratorMixin): +class PGColumnGenerator(PGSchemaGenerator, ansisql.ANSIColumnGenerator): """PostgreSQL column generator implementation.""" pass -class PGColumnDropper(ansisql.ANSIColumnDropper, PGSchemaGeneratorMixin): +class PGColumnDropper(ansisql.ANSIColumnDropper): """PostgreSQL column dropper implementation.""" pass -class PGSchemaChanger(ansisql.ANSISchemaChanger, PGSchemaGeneratorMixin): +class PGSchemaChanger(ansisql.ANSISchemaChanger): """PostgreSQL schema changer implementation.""" pass -class PGConstraintGenerator(ansisql.ANSIConstraintGenerator, - PGSchemaGeneratorMixin): +class PGConstraintGenerator(ansisql.ANSIConstraintGenerator): """PostgreSQL constraint generator implementation.""" pass -class PGConstraintDropper(ansisql.ANSIConstraintDropper, - PGSchemaGeneratorMixin): +class PGConstraintDropper(ansisql.ANSIConstraintDropper): """PostgreSQL constaint dropper implementation.""" pass diff --git a/migrate/changeset/databases/sqlite.py b/migrate/changeset/databases/sqlite.py index 3748659..28b2dc7 100644 --- a/migrate/changeset/databases/sqlite.py +++ b/migrate/changeset/databases/sqlite.py @@ -19,7 +19,7 @@ class SQLiteHelper(object): except: table = self._to_table(param) raise - table_name = self._to_table_name(table) + table_name = self.preparer.format_table(table) self.append('ALTER TABLE %s RENAME TO migration_tmp' % table_name) self.execute() @@ -41,7 +41,7 @@ class SQLiteColumnDropper(SQLiteHelper, ansisql.ANSIColumnDropper): def _modify_table(self, table, column): del table.columns[column.name] - columns = ','.join([c.name for c in table.columns]) + columns = ' ,'.join(map(self.preparer.format_column, table.columns)) return 'INSERT INTO %(table_name)s SELECT ' + columns + \ ' from migration_tmp' @@ -50,7 +50,7 @@ class SQLiteSchemaChanger(SQLiteHelper, ansisql.ANSISchemaChanger): def _not_supported(self, op): raise exceptions.NotSupportedError("SQLite does not support " - "%s; see http://www.sqlite.org/lang_altertable.html"%op) + "%s; see http://www.sqlite.org/lang_altertable.html" % op) def _modify_table(self, table, delta): column = table.columns[delta.current_name] @@ -61,17 +61,14 @@ class SQLiteSchemaChanger(SQLiteHelper, ansisql.ANSISchemaChanger): def visit_index(self, param): self._not_supported('ALTER INDEX') - def _do_quote_column_identifier(self, identifier): - return '"%s"'%identifier - class SQLiteConstraintGenerator(ansisql.ANSIConstraintGenerator): def visit_migrate_primary_key_constraint(self, constraint): tmpl = "CREATE UNIQUE INDEX %s ON %s ( %s )" - cols = ','.join([c.name for c in constraint.columns]) - tname = constraint.table.name - name = constraint.name + cols = ', '.join(map(self.preparer.format_column, constraint.columns)) + tname = self.preparer.format_table(constraint.table) + name = self.get_constraint_name(constraint) msg = tmpl % (name, tname, cols) self.append(msg) self.execute() @@ -84,15 +81,15 @@ class SQLiteFKGenerator(SQLiteSchemaChanger, ansisql.ANSIFKGenerator): if self.fk: self._not_supported("ALTER TABLE ADD FOREIGN KEY") - if self.buffer.getvalue() !='': + if self.buffer.getvalue() != '': self.execute() -class SQLiteConstraintDropper(ansisql.ANSIColumnDropper): +class SQLiteConstraintDropper(ansisql.ANSIColumnDropper, ansisql.ANSIConstraintCommon): def visit_migrate_primary_key_constraint(self, constraint): tmpl = "DROP INDEX %s " - name = constraint.name + name = self.get_constraint_name(constraint) msg = tmpl % (name) self.append(msg) self.execute() diff --git a/migrate/changeset/databases/visitor.py b/migrate/changeset/databases/visitor.py index 60216cc..4afad77 100644 --- a/migrate/changeset/databases/visitor.py +++ b/migrate/changeset/databases/visitor.py @@ -18,7 +18,14 @@ dialects = { def get_engine_visitor(engine, name): """ Get the visitor implementation for the given database engine. + + :param engine: SQLAlchemy Engine + :param name: Name of the visitor + :type name: string + :type engine: Engine + :returns: visitor """ + # TODO: link to supported visitors return get_dialect_visitor(engine.dialect, name) @@ -28,7 +35,16 @@ def get_dialect_visitor(sa_dialect, name): Finds the visitor implementation based on the dialect class and returns and instance initialized with the given name. + + Binds dialect specific preparer to visitor. """ + + # map sa dialect to migrate dialect and return visitor sa_dialect_cls = sa_dialect.__class__ migrate_dialect_cls = dialects[sa_dialect_cls] - return migrate_dialect_cls.visitor(name) + visitor = migrate_dialect_cls.visitor(name) + + # bind preparer + visitor.preparer = sa_dialect.preparer(sa_dialect) + + return visitor |