summaryrefslogtreecommitdiff
path: root/migrate/changeset/databases/mysql.py
diff options
context:
space:
mode:
Diffstat (limited to 'migrate/changeset/databases/mysql.py')
-rw-r--r--migrate/changeset/databases/mysql.py50
1 files changed, 26 insertions, 24 deletions
diff --git a/migrate/changeset/databases/mysql.py b/migrate/changeset/databases/mysql.py
index fc65569..ea83d2a 100644
--- a/migrate/changeset/databases/mysql.py
+++ b/migrate/changeset/databases/mysql.py
@@ -20,39 +20,28 @@ class MySQLColumnDropper(ansisql.ANSIColumnDropper):
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)
- 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):
+ def visit_column(self, column):
+ delta = column.delta
+ table = column.table
+ colspec = self.get_column_specification(column)
+
if not hasattr(delta, 'result_column'):
- # Mysql needs the whole column definition, not just a lone
- # name/type
+ # Mysql needs the whole column definition, not just a lone name/type
raise exceptions.NotSupportedError(
- "A column object is required to do this")
+ "A column object must be present in table to alter it")
- column = delta.result_column
- # needed by get_column_specification
- if not column.table:
- column.table = delta.table
- colspec = self.get_column_specification(column)
- # TODO: we need table formating here
- self.start_alter_table(self.preparer.quote(table_name, True))
- self.append("CHANGE COLUMN ")
- self.append(self.preparer.quote(col_name, True))
- self.append(' ')
+ self.start_alter_table(table)
+
+ old_col_name = self.preparer.quote(delta.current_name, column.quote)
+ self.append("CHANGE COLUMN %s " % old_col_name)
self.append(colspec)
+ self.execute()
def visit_index(self, param):
# If MySQL can do this, I can't find how
raise exceptions.NotSupportedError("MySQL cannot rename indexes")
+
class MySQLConstraintGenerator(ansisql.ANSIConstraintGenerator):
pass
@@ -67,9 +56,22 @@ class MySQLConstraintDropper(ansisql.ANSIConstraintDropper):
def visit_migrate_foreign_key_constraint(self, constraint):
self.start_alter_table(constraint)
self.append("DROP FOREIGN KEY ")
+ constraint.name = self.get_constraint_name(constraint)
self.append(self.preparer.format_constraint(constraint))
self.execute()
+ def visit_migrate_check_constraint(self, *p, **k):
+ raise exceptions.NotSupportedError("MySQL does not support CHECK"
+ " constraints, use triggers instead.")
+
+ def visit_migrate_unique_constraint(self, constraint, *p, **k):
+ self.start_alter_table(constraint)
+ self.append('DROP INDEX ')
+ constraint.name = self.get_constraint_name(constraint)
+ self.append(self.preparer.format_constraint(constraint))
+ self.execute()
+
+
class MySQLDialect(ansisql.ANSIDialect):
columngenerator = MySQLColumnGenerator
columndropper = MySQLColumnDropper