summaryrefslogtreecommitdiff
path: root/migrate/changeset/databases/firebird.py
diff options
context:
space:
mode:
authoriElectric <unknown>2009-06-22 10:22:06 +0000
committeriElectric <unknown>2009-06-22 10:22:06 +0000
commita8c31eb25f89542c9be72d0a8f90b4d984b6aead (patch)
tree8c56225780ea545c5a86d10a1964f4aa672d1aa1 /migrate/changeset/databases/firebird.py
parent17cc5f36e6f1463fbb0b9ad912f5c5dc983e08a8 (diff)
downloadsqlalchemy-migrate-a8c31eb25f89542c9be72d0a8f90b4d984b6aead.tar.gz
adding basic support for firebird, fixes #55
Diffstat (limited to 'migrate/changeset/databases/firebird.py')
-rw-r--r--migrate/changeset/databases/firebird.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/migrate/changeset/databases/firebird.py b/migrate/changeset/databases/firebird.py
new file mode 100644
index 0000000..215762c
--- /dev/null
+++ b/migrate/changeset/databases/firebird.py
@@ -0,0 +1,62 @@
+"""
+ Firebird database specific implementations of changeset classes.
+"""
+from sqlalchemy.databases import firebird as sa_base
+
+from migrate.changeset import ansisql, exceptions
+
+
+FBSchemaGenerator = sa_base.FBSchemaGenerator
+
+
+class FBColumnGenerator(FBSchemaGenerator, ansisql.ANSIColumnGenerator):
+ """Firebird column generator implementation."""
+
+
+class FBColumnDropper(ansisql.ANSIColumnDropper):
+ """Firebird column dropper implementation."""
+
+ def visit_column(self, column):
+ table = self.start_alter_table(column)
+ self.append('DROP %s' % self.preparer.format_column(column))
+ self.execute()
+
+
+class FBSchemaChanger(ansisql.ANSISchemaChanger):
+ """Firebird schema changer implementation."""
+
+ def visit_table(self, table):
+ """Rename table not supported"""
+ raise exceptions.NotSupportedError(
+ "Firebird does not support renaming tables.")
+
+ def _visit_column_name(self, table, col_name, delta):
+ new_name = delta['name']
+ self.start_alter_table(table)
+ self.append('ALTER COLUMN %s TO %s' % ((col_name), (new_name)))
+
+ def _visit_column_nullable(self, table, col_name, delta):
+ """Changing NULL is not supported"""
+ # TODO: http://www.firebirdfaq.org/faq103/
+ raise exceptions.NotSupportedError(
+ "Firebird does not support altering NULL bevahior.")
+
+
+class FBConstraintGenerator(ansisql.ANSIConstraintGenerator):
+ """Firebird constraint generator implementation."""
+
+
+class FBConstraintDropper(ansisql.ANSIConstraintDropper):
+ """Firebird constaint dropper implementation."""
+
+ def cascade_constraint(self, constraint):
+ raise exceptions.NotSupportedError(
+ "Firebird does not support cascading constraints")
+
+
+class FBDialect(ansisql.ANSIDialect):
+ columngenerator = FBColumnGenerator
+ columndropper = FBColumnDropper
+ schemachanger = FBSchemaChanger
+ constraintgenerator = FBConstraintGenerator
+ constraintdropper = FBConstraintDropper