diff options
author | chrisw <unknown> | 2010-09-09 13:58:41 +0100 |
---|---|---|
committer | chrisw <unknown> | 2010-09-09 13:58:41 +0100 |
commit | a085ffa59048e10f8a874ea649aecf3335b4ab79 (patch) | |
tree | a710509431a64c3ed00589e30a955f49ffef7c63 /migrate/changeset/databases/sqlite.py | |
parent | a7c0c18a52649d1693cff6db7224477eeaa352c9 (diff) | |
download | sqlalchemy-migrate-a085ffa59048e10f8a874ea649aecf3335b4ab79.tar.gz |
implement column adding with foreign keys on sqlite
Diffstat (limited to 'migrate/changeset/databases/sqlite.py')
-rw-r--r-- | migrate/changeset/databases/sqlite.py | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/migrate/changeset/databases/sqlite.py b/migrate/changeset/databases/sqlite.py index 4136af3..2c49b03 100644 --- a/migrate/changeset/databases/sqlite.py +++ b/migrate/changeset/databases/sqlite.py @@ -51,14 +51,27 @@ class SQLiteHelper(SQLiteCommon): self.append('DROP TABLE migration_tmp') self.execute() -class SQLiteColumnGenerator(SQLiteSchemaGenerator, SQLiteCommon, - ansisql.ANSIColumnGenerator): +class SQLiteColumnGenerator(SQLiteSchemaGenerator, + ansisql.ANSIColumnGenerator, + # at the end so we get the normal + # visit_column by default + SQLiteHelper, + SQLiteCommon + ): """SQLite ColumnGenerator""" - def add_foreignkey(self, constraint): - """Does not support ALTER TABLE ADD FOREIGN KEY""" - self._not_supported("ALTER TABLE ADD CONSTRAINT") - + def _modify_table(self, table, column, delta): + columns = ' ,'.join(map( + self.preparer.format_column, + [c for c in table.columns if c.name!=column.name])) + return ('INSERT INTO %%(table_name)s (%(cols)s) ' + 'SELECT %(cols)s from migration_tmp')%{'cols':columns} + + def visit_column(self,column): + if column.foreign_keys: + SQLiteHelper.visit_column(self,column) + else: + super(SQLiteColumnGenerator,self).visit_column(column) class SQLiteColumnDropper(SQLiteHelper, ansisql.ANSIColumnDropper): """SQLite ColumnDropper""" @@ -73,7 +86,6 @@ class SQLiteSchemaChanger(SQLiteHelper, ansisql.ANSISchemaChanger): """SQLite SchemaChanger""" def _modify_table(self, table, column, delta): - column = table.columns[delta.current_name] return 'INSERT INTO %(table_name)s SELECT * from migration_tmp' def visit_index(self, index): |