summaryrefslogtreecommitdiff
path: root/alembic/ddl/mysql.py
diff options
context:
space:
mode:
Diffstat (limited to 'alembic/ddl/mysql.py')
-rw-r--r--alembic/ddl/mysql.py92
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")