summaryrefslogtreecommitdiff
path: root/migrate/changeset
diff options
context:
space:
mode:
Diffstat (limited to 'migrate/changeset')
-rw-r--r--migrate/changeset/ansisql.py5
-rw-r--r--migrate/changeset/databases/sqlite.py26
-rw-r--r--migrate/changeset/schema.py13
3 files changed, 25 insertions, 19 deletions
diff --git a/migrate/changeset/ansisql.py b/migrate/changeset/ansisql.py
index e5500b8..021885b 100644
--- a/migrate/changeset/ansisql.py
+++ b/migrate/changeset/ansisql.py
@@ -108,10 +108,7 @@ class ANSIColumnGenerator(AlterTableVisitor, SchemaGenerator):
# add indexes and unique constraints
if column.index_name:
- ix = Index(column.index_name,
- column,
- unique=bool(column.index_name or column.index))
- ix.create()
+ Index(column.index_name,column).create()
elif column.unique_name:
constraint.UniqueConstraint(column,
name=column.unique_name).create()
diff --git a/migrate/changeset/databases/sqlite.py b/migrate/changeset/databases/sqlite.py
index 2c49b03..66a8f5a 100644
--- a/migrate/changeset/databases/sqlite.py
+++ b/migrate/changeset/databases/sqlite.py
@@ -26,13 +26,7 @@ class SQLiteCommon(object):
class SQLiteHelper(SQLiteCommon):
- def visit_column(self, delta):
- if isinstance(delta, DictMixin):
- column = delta.result_column
- table = self._to_table(delta.table)
- else:
- column = delta
- table = self._to_table(column.table)
+ def recreate_table(self,table,column=None,delta=None):
table_name = self.preparer.format_table(table)
# we remove all indexes so as not to have
@@ -50,6 +44,15 @@ class SQLiteHelper(SQLiteCommon):
self.execute()
self.append('DROP TABLE migration_tmp')
self.execute()
+
+ def visit_column(self, delta):
+ if isinstance(delta, DictMixin):
+ column = delta.result_column
+ table = self._to_table(delta.table)
+ else:
+ column = delta
+ table = self._to_table(column.table)
+ self.recreate_table(table,column,delta)
class SQLiteColumnGenerator(SQLiteSchemaGenerator,
ansisql.ANSIColumnGenerator,
@@ -93,7 +96,7 @@ class SQLiteSchemaChanger(SQLiteHelper, ansisql.ANSISchemaChanger):
self._not_supported('ALTER INDEX')
-class SQLiteConstraintGenerator(ansisql.ANSIConstraintGenerator, SQLiteCommon):
+class SQLiteConstraintGenerator(ansisql.ANSIConstraintGenerator, SQLiteHelper, SQLiteCommon):
def visit_migrate_primary_key_constraint(self, constraint):
tmpl = "CREATE UNIQUE INDEX %s ON %s ( %s )"
@@ -104,11 +107,14 @@ class SQLiteConstraintGenerator(ansisql.ANSIConstraintGenerator, SQLiteCommon):
self.append(msg)
self.execute()
+ def _modify_table(self, table, column, delta):
+ return 'INSERT INTO %(table_name)s SELECT * from migration_tmp'
+
def visit_migrate_foreign_key_constraint(self, *p, **k):
- self._not_supported('ALTER TABLE ADD CONSTRAINT')
+ self.recreate_table(p[0].table)
def visit_migrate_unique_constraint(self, *p, **k):
- self._not_supported('ALTER TABLE ADD CONSTRAINT')
+ self.recreate_table(p[0].table)
class SQLiteConstraintDropper(ansisql.ANSIColumnDropper,
diff --git a/migrate/changeset/schema.py b/migrate/changeset/schema.py
index bf5aebe..ef8dd85 100644
--- a/migrate/changeset/schema.py
+++ b/migrate/changeset/schema.py
@@ -8,6 +8,7 @@ from UserDict import DictMixin
import sqlalchemy
from sqlalchemy.schema import ForeignKeyConstraint
+from sqlalchemy.schema import UniqueConstraint
from migrate.exceptions import *
from migrate.changeset import SQLA_06
@@ -570,6 +571,9 @@ populated with defaults
if table is not None and self.table is None:
self._set_parent(table)
+ def _col_name_in_constraint(self,cons,name):
+ return False
+
def remove_from_table(self, table, unset_table=True):
# TODO: remove primary keys, constraints, etc
if unset_table:
@@ -590,14 +594,13 @@ populated with defaults
to_drop = set()
for cons in table.constraints:
# TODO: deal with other types of constraint
- if isinstance(cons,ForeignKeyConstraint):
- col_names = []
+ if isinstance(cons,(ForeignKeyConstraint,
+ UniqueConstraint)):
for col_name in cons.columns:
if not isinstance(col_name,basestring):
col_name = col_name.name
- col_names.append(col_name)
- if self.name in col_names:
- to_drop.add(cons)
+ if self.name==col_name:
+ to_drop.add(cons)
table.constraints = table.constraints - to_drop
if table.c.contains_column(self):