]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Support autoincrement and existing_autoincrement in alter_column for MySQL dialect.
authorMoriyoshi Koizumi <mozo@mozo.jp>
Tue, 24 Jul 2012 16:42:15 +0000 (01:42 +0900)
committerMoriyoshi Koizumi <mozo@mozo.jp>
Tue, 24 Jul 2012 16:42:15 +0000 (01:42 +0900)
It'd be impossible to alter an autoincremented column without this extension.

alembic/ddl/impl.py
alembic/ddl/mssql.py
alembic/ddl/mysql.py
alembic/operations.py

index 95ead4c5b054ea9e56c3f04f5b0f3c10d4b5d95c..32e15e66ec569531f298000f24ecc0f0c0b28448 100644 (file)
@@ -83,11 +83,14 @@ class DefaultImpl(object):
                         name=None,
                         type_=None,
                         schema=None,
+                        autoincrement=None,
                         existing_type=None,
                         existing_server_default=None,
-                        existing_nullable=None
+                        existing_nullable=None,
+                        existing_autoincrement=None
                     ):
-
+        if autoincrement is not None or existing_autoincrement is not None:
+            util.warn("nautoincrement and existing_autoincrement only make sense for MySQL")
         if nullable is not None:
             self._exec(base.ColumnNullable(table_name, column_name, 
                                 nullable, schema=schema,
index 42e844787e5ea2477b8dfeadd7a9ed5c7008ed36..d7eaba67cdc03b151a65a19456c228683c6db30f 100644 (file)
@@ -30,9 +30,11 @@ class MSSQLImpl(DefaultImpl):
                         name=None,
                         type_=None,
                         schema=None,
+                        autoincrement=None,
                         existing_type=None,
                         existing_server_default=None,
-                        existing_nullable=None
+                        existing_nullable=None,
+                        existing_autoincrement=None
                     ):
 
         if nullable is not None and existing_type is None:
@@ -52,8 +54,10 @@ class MSSQLImpl(DefaultImpl):
                         nullable=nullable,
                         type_=type_,
                         schema=schema,
+                        autoincrement=autoincrement,
                         existing_type=existing_type,
-                        existing_nullable=existing_nullable
+                        existing_nullable=existing_nullable,
+                        existing_autoincrement=existing_autoincrement
         )
 
         if server_default is not False:
index 17920b4f6fae4ed55f216b132ed68fa2a7922004..4d23c17b2a0f16f6967daff4e94b40f98f65c0ac 100644 (file)
@@ -15,9 +15,11 @@ class MySQLImpl(DefaultImpl):
                         name=None,
                         type_=None,
                         schema=None,
+                        autoincrement=None,
                         existing_type=None,
                         existing_server_default=None,
-                        existing_nullable=None
+                        existing_nullable=None,
+                        existing_autoincrement=None
                     ):
         self._exec(
             MySQLAlterColumn(
@@ -29,6 +31,7 @@ class MySQLImpl(DefaultImpl):
                                 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,
+                autoincrement=autoincrement if autoincrement is not None else existing_autoincrement
             )
         )
 
@@ -37,12 +40,14 @@ class MySQLAlterColumn(AlterColumn):
                         newname=None,
                         type_=None,
                         nullable=None,
-                        default=False):
+                        default=False,
+                        autoincrement=None):
         super(AlterColumn, self).__init__(name, schema=schema)
         self.column_name = column_name
         self.nullable = nullable
         self.newname = newname
         self.default = default
+        self.autoincrement = autoincrement
         if type_ is None:
             raise util.CommandError(
                 "All MySQL ALTER COLUMN operations "
@@ -71,7 +76,8 @@ def _mysql_alter_column(element, compiler, **kw):
             name=element.newname,
             nullable=element.nullable,
             server_default=element.default,
-            type_=element.type_
+            type_=element.type_,
+            autoincrement=element.autoincrement
         ),
     )
 
@@ -81,12 +87,14 @@ def render_value(compiler, expr):
     else:
         return compiler.sql_compiler.process(expr)
 
-def _mysql_colspec(compiler, name, nullable, server_default, type_):
+def _mysql_colspec(compiler, name, nullable, server_default, type_, autoincrement):
     spec = "%s %s %s" % (
         name,
         compiler.dialect.type_compiler.process(type_),
         "NULL" if nullable else "NOT NULL"
     )
+    if autoincrement is not None:
+        spec += " AUTO_INCREMENT"
     if server_default != False:
         spec += " DEFAULT %s" % render_value(compiler, server_default)
 
index 2eef7cba1e020c101c5ca9d54adf64b663cb614f..beb0f9fbc137c37d67408d810a42f366fb232de6 100644 (file)
@@ -151,9 +151,11 @@ class Operations(object):
                         server_default=False,
                         name=None,
                         type_=None,
+                        autoincrement=None,
                         existing_type=None,
                         existing_server_default=False,
                         existing_nullable=None,
+                        existing_autoincrement=None
     ):
         """Issue an "alter column" instruction using the
         current migration context.
@@ -218,6 +220,7 @@ class Operations(object):
         :param existing_nullable: Optional; the existing nullability
          of the column.  Required on MySQL if the existing nullability
          is not being changed; else MySQL sets this to NULL.
+        :param existing_autoincrement: Optional; the 
         """
 
         if existing_type:
@@ -233,9 +236,11 @@ class Operations(object):
             server_default=server_default,
             name=name,
             type_=type_,
+            autoincrement=autoincrement,
             existing_type=existing_type,
             existing_server_default=existing_server_default,
             existing_nullable=existing_nullable,
+            existing_autoincrement=existing_autoincrement
         )
 
         if type_: