summaryrefslogtreecommitdiff
path: root/migrate/changeset/databases/sqlite.py
diff options
context:
space:
mode:
authorchrisw <unknown>2010-09-09 13:58:41 +0100
committerchrisw <unknown>2010-09-09 13:58:41 +0100
commita085ffa59048e10f8a874ea649aecf3335b4ab79 (patch)
treea710509431a64c3ed00589e30a955f49ffef7c63 /migrate/changeset/databases/sqlite.py
parenta7c0c18a52649d1693cff6db7224477eeaa352c9 (diff)
downloadsqlalchemy-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.py26
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):