diff options
author | chrisw <unknown> | 2010-09-09 15:38:42 +0100 |
---|---|---|
committer | chrisw <unknown> | 2010-09-09 15:38:42 +0100 |
commit | adf4113a0b8465dc67ea4002da3bc153eb4653db (patch) | |
tree | 4307d9d2b7cad2f720287d38017b49d038e763f1 /migrate/changeset/databases/sqlite.py | |
parent | a085ffa59048e10f8a874ea649aecf3335b4ab79 (diff) | |
download | sqlalchemy-migrate-adf4113a0b8465dc67ea4002da3bc153eb4653db.tar.gz |
Fix issue 94 - it was impossible to add a column with a non-unique index.
Also implement more functionality with unique and foreign key constrains for sqlite.
Diffstat (limited to 'migrate/changeset/databases/sqlite.py')
-rw-r--r-- | migrate/changeset/databases/sqlite.py | 26 |
1 files changed, 16 insertions, 10 deletions
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, |