]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Allow server_default=None for batch operations.
authorMartin Domke <mail@martindomke.net>
Wed, 16 Mar 2016 16:35:28 +0000 (17:35 +0100)
committerMartin Domke <mail@martindomke.net>
Wed, 16 Mar 2016 16:39:12 +0000 (17:39 +0100)
alembic/operations/batch.py
tests/test_batch.py

index d8bf0dff31756c16b238e6ad9357ec958348388b..2497e864761739ac4e381f28395c4d9308473710 100644 (file)
@@ -305,7 +305,10 @@ class ApplyBatchImpl(object):
         if nullable is not None:
             existing.nullable = nullable
         if server_default is not False:
-            sql_schema.DefaultClause(server_default)._set_parent(existing)
+            if server_default is None:
+                existing.server_default = None
+            else:
+                sql_schema.DefaultClause(server_default)._set_parent(existing)
         if autoincrement is not None:
             existing.autoincrement = bool(autoincrement)
 
index 05bd3547266f7ab81224cd10f82688fd4da356fc..829dc1b1c350d45806bcafee4c15e608f936de75 100644 (file)
@@ -161,6 +161,15 @@ class BatchApplyTest(TestBase):
         )
         return ApplyBatchImpl(t, table_args, table_kwargs)
 
+    def _server_default_fixture(self, table_args=(), table_kwargs={}):
+        m = MetaData()
+        t = Table(
+            'tname', m,
+            Column('id', Integer, primary_key=True),
+            Column('thing', String(), server_default='')
+        )
+        return ApplyBatchImpl(t, table_args, table_kwargs)
+
     def _assert_impl(self, impl, colnames=None,
                      ddl_contains=None, ddl_not_contains=None,
                      dialect='default', schema=None):
@@ -360,6 +369,13 @@ class BatchApplyTest(TestBase):
             new_table.c.y.server_default.arg, "10"
         )
 
+    def test_change_server_default(self):
+        impl = self._server_default_fixture()
+        impl.alter_column('tname', 'thing', server_default=None)
+        new_table = self._assert_impl(
+            impl, colnames=['id', 'thing'], ddl_not_contains="DEFAULT")
+        eq_(new_table.c.thing.server_default, None)
+
     def test_rename_col_pk(self):
         impl = self._simple_fixture()
         impl.alter_column('tname', 'id', name='foobar')