summaryrefslogtreecommitdiff
path: root/migrate/changeset/databases
diff options
context:
space:
mode:
Diffstat (limited to 'migrate/changeset/databases')
-rw-r--r--migrate/changeset/databases/mysql.py27
-rw-r--r--migrate/changeset/databases/oracle.py7
-rw-r--r--migrate/changeset/databases/postgres.py23
-rw-r--r--migrate/changeset/databases/sqlite.py21
-rw-r--r--migrate/changeset/databases/visitor.py18
5 files changed, 41 insertions, 55 deletions
diff --git a/migrate/changeset/databases/mysql.py b/migrate/changeset/databases/mysql.py
index 94ee4db..08ad4f3 100644
--- a/migrate/changeset/databases/mysql.py
+++ b/migrate/changeset/databases/mysql.py
@@ -10,19 +10,11 @@ MySQLSchemaGenerator = sa_base.MySQLSchemaGenerator
class MySQLColumnGenerator(MySQLSchemaGenerator, ansisql.ANSIColumnGenerator):
-
- def _do_quote_table_identifier(self, identifier):
- return '%s'%identifier
pass
class MySQLColumnDropper(ansisql.ANSIColumnDropper):
-
- def _do_quote_table_identifier(self, identifier):
- return '%s'%identifier
-
- def _do_quote_column_identifier(self, identifier):
- return '%s'%identifier
+ pass
class MySQLSchemaChanger(MySQLSchemaGenerator, ansisql.ANSISchemaChanger):
@@ -49,9 +41,10 @@ class MySQLSchemaChanger(MySQLSchemaGenerator, ansisql.ANSISchemaChanger):
if not column.table:
column.table = delta.table
colspec = self.get_column_specification(column)
- self.start_alter_table(table_name)
+ # TODO: we need table formating here
+ self.start_alter_table(self.preparer.quote(table_name, True))
self.append("CHANGE COLUMN ")
- self.append(col_name)
+ self.append(self.preparer.quote(col_name, True))
self.append(' ')
self.append(colspec)
@@ -59,14 +52,9 @@ class MySQLSchemaChanger(MySQLSchemaGenerator, ansisql.ANSISchemaChanger):
# If MySQL can do this, I can't find how
raise exceptions.NotSupportedError("MySQL cannot rename indexes")
- def _do_quote_table_identifier(self, identifier):
- return '%s'%identifier
-
class MySQLConstraintGenerator(ansisql.ANSIConstraintGenerator):
-
- def _do_quote_table_identifier(self, identifier):
- return '%s'%identifier
+ pass
class MySQLConstraintDropper(ansisql.ANSIConstraintDropper):
@@ -85,12 +73,9 @@ class MySQLConstraintDropper(ansisql.ANSIConstraintDropper):
def visit_migrate_foreign_key_constraint(self, constraint):
self.start_alter_table(constraint)
self.append("DROP FOREIGN KEY ")
- self.append(constraint.name)
+ self.append(self.preparer.format_constraint(constraint))
self.execute()
- def _do_quote_table_identifier(self, identifier):
- return '%s'%identifier
-
class MySQLDialect(ansisql.ANSIDialect):
columngenerator = MySQLColumnGenerator
diff --git a/migrate/changeset/databases/oracle.py b/migrate/changeset/databases/oracle.py
index 35b146c..2716fa2 100644
--- a/migrate/changeset/databases/oracle.py
+++ b/migrate/changeset/databases/oracle.py
@@ -67,8 +67,8 @@ class OracleSchemaChanger(OracleSchemaGenerator, ansisql.ANSISchemaChanger):
column.server_default = sa.PassiveDefault(sa.sql.null())
if notnull_hack:
column.nullable = True
- colspec=self.get_column_specification(column,
- override_nullable=null_hack)
+ colspec = self.get_column_specification(column,
+ override_nullable=null_hack)
if null_hack:
colspec += ' NULL'
if notnull_hack:
@@ -76,7 +76,8 @@ class OracleSchemaChanger(OracleSchemaGenerator, ansisql.ANSISchemaChanger):
if dropdefault_hack:
column.server_default = None
- self.start_alter_table(table_name)
+ # TODO: format from table
+ self.start_alter_table(self.preparer.quote(table_name, True))
self.append("MODIFY ")
self.append(colspec)
diff --git a/migrate/changeset/databases/postgres.py b/migrate/changeset/databases/postgres.py
index d1d4cc8..bcdc08b 100644
--- a/migrate/changeset/databases/postgres.py
+++ b/migrate/changeset/databases/postgres.py
@@ -11,40 +11,27 @@ from sqlalchemy.databases import postgres as sa_base
PGSchemaGenerator = sa_base.PGSchemaGenerator
-class PGSchemaGeneratorMixin(object):
- """Common code used by the PostgreSQL specific classes."""
-
- def _do_quote_table_identifier(self, identifier):
- return identifier
-
- def _do_quote_column_identifier(self, identifier):
- return '"%s"'%identifier
-
-
-class PGColumnGenerator(PGSchemaGenerator, ansisql.ANSIColumnGenerator,
- PGSchemaGeneratorMixin):
+class PGColumnGenerator(PGSchemaGenerator, ansisql.ANSIColumnGenerator):
"""PostgreSQL column generator implementation."""
pass
-class PGColumnDropper(ansisql.ANSIColumnDropper, PGSchemaGeneratorMixin):
+class PGColumnDropper(ansisql.ANSIColumnDropper):
"""PostgreSQL column dropper implementation."""
pass
-class PGSchemaChanger(ansisql.ANSISchemaChanger, PGSchemaGeneratorMixin):
+class PGSchemaChanger(ansisql.ANSISchemaChanger):
"""PostgreSQL schema changer implementation."""
pass
-class PGConstraintGenerator(ansisql.ANSIConstraintGenerator,
- PGSchemaGeneratorMixin):
+class PGConstraintGenerator(ansisql.ANSIConstraintGenerator):
"""PostgreSQL constraint generator implementation."""
pass
-class PGConstraintDropper(ansisql.ANSIConstraintDropper,
- PGSchemaGeneratorMixin):
+class PGConstraintDropper(ansisql.ANSIConstraintDropper):
"""PostgreSQL constaint dropper implementation."""
pass
diff --git a/migrate/changeset/databases/sqlite.py b/migrate/changeset/databases/sqlite.py
index 3748659..28b2dc7 100644
--- a/migrate/changeset/databases/sqlite.py
+++ b/migrate/changeset/databases/sqlite.py
@@ -19,7 +19,7 @@ class SQLiteHelper(object):
except:
table = self._to_table(param)
raise
- table_name = self._to_table_name(table)
+ table_name = self.preparer.format_table(table)
self.append('ALTER TABLE %s RENAME TO migration_tmp' % table_name)
self.execute()
@@ -41,7 +41,7 @@ class SQLiteColumnDropper(SQLiteHelper, ansisql.ANSIColumnDropper):
def _modify_table(self, table, column):
del table.columns[column.name]
- columns = ','.join([c.name for c in table.columns])
+ columns = ' ,'.join(map(self.preparer.format_column, table.columns))
return 'INSERT INTO %(table_name)s SELECT ' + columns + \
' from migration_tmp'
@@ -50,7 +50,7 @@ class SQLiteSchemaChanger(SQLiteHelper, ansisql.ANSISchemaChanger):
def _not_supported(self, op):
raise exceptions.NotSupportedError("SQLite does not support "
- "%s; see http://www.sqlite.org/lang_altertable.html"%op)
+ "%s; see http://www.sqlite.org/lang_altertable.html" % op)
def _modify_table(self, table, delta):
column = table.columns[delta.current_name]
@@ -61,17 +61,14 @@ class SQLiteSchemaChanger(SQLiteHelper, ansisql.ANSISchemaChanger):
def visit_index(self, param):
self._not_supported('ALTER INDEX')
- def _do_quote_column_identifier(self, identifier):
- return '"%s"'%identifier
-
class SQLiteConstraintGenerator(ansisql.ANSIConstraintGenerator):
def visit_migrate_primary_key_constraint(self, constraint):
tmpl = "CREATE UNIQUE INDEX %s ON %s ( %s )"
- cols = ','.join([c.name for c in constraint.columns])
- tname = constraint.table.name
- name = constraint.name
+ cols = ', '.join(map(self.preparer.format_column, constraint.columns))
+ tname = self.preparer.format_table(constraint.table)
+ name = self.get_constraint_name(constraint)
msg = tmpl % (name, tname, cols)
self.append(msg)
self.execute()
@@ -84,15 +81,15 @@ class SQLiteFKGenerator(SQLiteSchemaChanger, ansisql.ANSIFKGenerator):
if self.fk:
self._not_supported("ALTER TABLE ADD FOREIGN KEY")
- if self.buffer.getvalue() !='':
+ if self.buffer.getvalue() != '':
self.execute()
-class SQLiteConstraintDropper(ansisql.ANSIColumnDropper):
+class SQLiteConstraintDropper(ansisql.ANSIColumnDropper, ansisql.ANSIConstraintCommon):
def visit_migrate_primary_key_constraint(self, constraint):
tmpl = "DROP INDEX %s "
- name = constraint.name
+ name = self.get_constraint_name(constraint)
msg = tmpl % (name)
self.append(msg)
self.execute()
diff --git a/migrate/changeset/databases/visitor.py b/migrate/changeset/databases/visitor.py
index 60216cc..4afad77 100644
--- a/migrate/changeset/databases/visitor.py
+++ b/migrate/changeset/databases/visitor.py
@@ -18,7 +18,14 @@ dialects = {
def get_engine_visitor(engine, name):
"""
Get the visitor implementation for the given database engine.
+
+ :param engine: SQLAlchemy Engine
+ :param name: Name of the visitor
+ :type name: string
+ :type engine: Engine
+ :returns: visitor
"""
+ # TODO: link to supported visitors
return get_dialect_visitor(engine.dialect, name)
@@ -28,7 +35,16 @@ def get_dialect_visitor(sa_dialect, name):
Finds the visitor implementation based on the dialect class and
returns and instance initialized with the given name.
+
+ Binds dialect specific preparer to visitor.
"""
+
+ # map sa dialect to migrate dialect and return visitor
sa_dialect_cls = sa_dialect.__class__
migrate_dialect_cls = dialects[sa_dialect_cls]
- return migrate_dialect_cls.visitor(name)
+ visitor = migrate_dialect_cls.visitor(name)
+
+ # bind preparer
+ visitor.preparer = sa_dialect.preparer(sa_dialect)
+
+ return visitor