diff options
Diffstat (limited to 'migrate/changeset/databases/mysql.py')
-rw-r--r-- | migrate/changeset/databases/mysql.py | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/migrate/changeset/databases/mysql.py b/migrate/changeset/databases/mysql.py index aa65166..94ee4db 100644 --- a/migrate/changeset/databases/mysql.py +++ b/migrate/changeset/databases/mysql.py @@ -1,52 +1,74 @@ -from migrate.changeset import ansisql,exceptions +""" + MySQL database specific implementations of changeset classes. +""" + +from migrate.changeset import ansisql, exceptions from sqlalchemy.databases import mysql as sa_base #import sqlalchemy as sa MySQLSchemaGenerator = sa_base.MySQLSchemaGenerator -class MySQLColumnGenerator(MySQLSchemaGenerator,ansisql.ANSIColumnGenerator): + +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 -class MySQLSchemaChanger(MySQLSchemaGenerator,ansisql.ANSISchemaChanger): - def visit_column(self,delta): + +class MySQLSchemaChanger(MySQLSchemaGenerator, ansisql.ANSISchemaChanger): + + def visit_column(self, delta): keys = delta.keys() if 'type' in keys or 'nullable' in keys or 'name' in keys: - self._run_subvisit(delta,self._visit_column_change) + self._run_subvisit(delta, self._visit_column_change) if 'server_default' in keys: # Column name might have changed above - col_name = delta.get('name',delta.current_name) - self._run_subvisit(delta,self._visit_column_default,col_name=col_name) - def _visit_column_change(self,table_name,col_name,delta): - if not hasattr(delta,'result_column'): - # Mysql needs the whole column definition, not just a lone name/type + col_name = delta.get('name', delta.current_name) + self._run_subvisit(delta, self._visit_column_default, + col_name=col_name) + + def _visit_column_change(self, table_name, col_name, delta): + if not hasattr(delta, 'result_column'): + # Mysql needs the whole column definition, not just a lone + # name/type raise exceptions.NotSupportedError( "A column object is required to do this") - + column = delta.result_column - if not column.table: column.table = delta.table # needed by get_column_specification + # needed by get_column_specification + if not column.table: + column.table = delta.table colspec = self.get_column_specification(column) self.start_alter_table(table_name) self.append("CHANGE COLUMN ") self.append(col_name) self.append(' ') self.append(colspec) - def visit_index(self,param): + + def visit_index(self, param): # 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 - + + class MySQLConstraintDropper(ansisql.ANSIConstraintDropper): #def visit_constraint(self,constraint): # if isinstance(constraint,sqlalchemy.schema.PrimaryKeyConstraint): @@ -54,12 +76,13 @@ class MySQLConstraintDropper(ansisql.ANSIConstraintDropper): # elif isinstance(constraint,sqlalchemy.schema.ForeignKeyConstraint): # return self._visit_constraint_fk(constraint) # return super(MySQLConstraintDropper,self).visit_constraint(constraint) - def visit_migrate_primary_key_constraint(self,constraint): + + def visit_migrate_primary_key_constraint(self, constraint): self.start_alter_table(constraint) self.append("DROP PRIMARY KEY") self.execute() - def visit_migrate_foreign_key_constraint(self,constraint): + def visit_migrate_foreign_key_constraint(self, constraint): self.start_alter_table(constraint) self.append("DROP FOREIGN KEY ") self.append(constraint.name) @@ -68,6 +91,7 @@ class MySQLConstraintDropper(ansisql.ANSIConstraintDropper): def _do_quote_table_identifier(self, identifier): return '%s'%identifier + class MySQLDialect(ansisql.ANSIDialect): columngenerator = MySQLColumnGenerator columndropper = MySQLColumnDropper |