diff options
Diffstat (limited to 'alembic/ddl/mysql.py')
-rw-r--r-- | alembic/ddl/mysql.py | 92 |
1 files changed, 50 insertions, 42 deletions
diff --git a/alembic/ddl/mysql.py b/alembic/ddl/mysql.py index 58d5c70..7545df7 100644 --- a/alembic/ddl/mysql.py +++ b/alembic/ddl/mysql.py @@ -6,27 +6,28 @@ from ..compat import string_types from .. import util from .impl import DefaultImpl from .base import ColumnNullable, ColumnName, ColumnDefault, \ - ColumnType, AlterColumn, format_column_name, \ - format_server_default + ColumnType, AlterColumn, format_column_name, \ + format_server_default from .base import alter_table + class MySQLImpl(DefaultImpl): __dialect__ = 'mysql' transactional_ddl = False def alter_column(self, table_name, column_name, - nullable=None, - server_default=False, - name=None, - type_=None, - schema=None, - autoincrement=None, - existing_type=None, - existing_server_default=None, - existing_nullable=None, - existing_autoincrement=None - ): + nullable=None, + server_default=False, + name=None, + type_=None, + schema=None, + autoincrement=None, + existing_type=None, + existing_server_default=None, + existing_nullable=None, + existing_autoincrement=None + ): if name is not None: self._exec( MySQLChangeColumn( @@ -34,33 +35,33 @@ class MySQLImpl(DefaultImpl): schema=schema, newname=name, nullable=nullable if nullable is not None else - existing_nullable - if existing_nullable is not None - else True, + existing_nullable + if existing_nullable is not None + else True, type_=type_ if type_ is not None else existing_type, default=server_default if server_default is not False - else existing_server_default, + else existing_server_default, autoincrement=autoincrement if autoincrement is not None - else existing_autoincrement + else existing_autoincrement ) ) elif nullable is not None or \ - type_ is not None or \ - autoincrement is not None: + type_ is not None or \ + autoincrement is not None: self._exec( MySQLModifyColumn( table_name, column_name, schema=schema, newname=name if name is not None else column_name, nullable=nullable if nullable is not None else - existing_nullable - if existing_nullable is not None - else True, + existing_nullable + if existing_nullable is not None + else True, type_=type_ if type_ is not None else existing_type, default=server_default if server_default is not False - else existing_server_default, + else existing_server_default, autoincrement=autoincrement if autoincrement is not None - else existing_autoincrement + else existing_autoincrement ) ) elif server_default is not False: @@ -99,7 +100,9 @@ class MySQLImpl(DefaultImpl): if idx.name in removed: metadata_indexes.remove(idx) + class MySQLAlterDefault(AlterColumn): + def __init__(self, name, column_name, default, schema=None): super(AlterColumn, self).__init__(name, schema=schema) self.column_name = column_name @@ -107,12 +110,13 @@ class MySQLAlterDefault(AlterColumn): class MySQLChangeColumn(AlterColumn): + def __init__(self, name, column_name, schema=None, - newname=None, - type_=None, - nullable=None, - default=False, - autoincrement=None): + newname=None, + type_=None, + nullable=None, + default=False, + autoincrement=None): super(AlterColumn, self).__init__(name, schema=schema) self.column_name = column_name self.nullable = nullable @@ -127,6 +131,7 @@ class MySQLChangeColumn(AlterColumn): self.type_ = sqltypes.to_instance(type_) + class MySQLModifyColumn(MySQLChangeColumn): pass @@ -137,8 +142,8 @@ class MySQLModifyColumn(MySQLChangeColumn): @compiles(ColumnType, 'mysql') def _mysql_doesnt_support_individual(element, compiler, **kw): raise NotImplementedError( - "Individual alter column constructs not supported by MySQL" - ) + "Individual alter column constructs not supported by MySQL" + ) @compiles(MySQLAlterDefault, "mysql") @@ -147,10 +152,11 @@ def _mysql_alter_default(element, compiler, **kw): alter_table(compiler, element.table_name, element.schema), format_column_name(compiler, element.column_name), "SET DEFAULT %s" % format_server_default(compiler, element.default) - if element.default is not None - else "DROP DEFAULT" + if element.default is not None + else "DROP DEFAULT" ) + @compiles(MySQLModifyColumn, "mysql") def _mysql_modify_column(element, compiler, **kw): return "%s MODIFY %s %s" % ( @@ -181,14 +187,16 @@ def _mysql_change_column(element, compiler, **kw): ), ) + def _render_value(compiler, expr): if isinstance(expr, string_types): return "'%s'" % expr else: return compiler.sql_compiler.process(expr) + def _mysql_colspec(compiler, nullable, server_default, type_, - autoincrement): + autoincrement): spec = "%s %s" % ( compiler.dialect.type_compiler.process(type_), "NULL" if nullable else "NOT NULL" @@ -200,6 +208,7 @@ def _mysql_colspec(compiler, nullable, server_default, type_, return spec + @compiles(schema.DropConstraint, "mysql") def _mysql_drop_constraint(element, compiler, **kw): """Redefine SQLAlchemy's drop constraint to @@ -207,15 +216,14 @@ def _mysql_drop_constraint(element, compiler, **kw): constraint = element.element if isinstance(constraint, (schema.ForeignKeyConstraint, - schema.PrimaryKeyConstraint, - schema.UniqueConstraint) - ): + schema.PrimaryKeyConstraint, + schema.UniqueConstraint) + ): return compiler.visit_drop_constraint(element, **kw) elif isinstance(constraint, schema.CheckConstraint): raise NotImplementedError( - "MySQL does not support CHECK constraints.") + "MySQL does not support CHECK constraints.") else: raise NotImplementedError( - "No generic 'DROP CONSTRAINT' in MySQL - " - "please specify constraint type") - + "No generic 'DROP CONSTRAINT' in MySQL - " + "please specify constraint type") |