]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Don't use schema with second argument, SQL Server sp_rename
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 18 May 2017 14:36:13 +0000 (10:36 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 18 May 2017 14:36:13 +0000 (10:36 -0400)
Repaired :meth:`.Operations.rename_table` for SQL Server when the
target table is in a remote schema, the schema name is omitted from
the "new name" argument.

Also added some extra tests for sp_rename w/ quoting / case sensitive
names.

Change-Id: I411b32d0c5bba5a466c0b5d6a412c1b7541fdc95
Fixes: #429
alembic/ddl/mssql.py
docs/build/changelog.rst
tests/test_mssql.py

index f51de33bee2cb3147857884015497ce5f6dec869..f10c5e61565fdd8acda4f58aa4621e40578874d0 100644 (file)
@@ -229,5 +229,5 @@ def visit_column_type(element, compiler, **kw):
 def visit_rename_table(element, compiler, **kw):
     return "EXEC sp_rename '%s', %s" % (
         format_table_name(compiler, element.table_name, element.schema),
-        format_table_name(compiler, element.new_table_name, element.schema)
+        format_table_name(compiler, element.new_table_name, None)
     )
index 926556b09c500f987a15421f64e2e2a6665bae30..a5f00394d82ab671e5cf1e5a5f716530aa000b6a 100644 (file)
@@ -7,6 +7,14 @@ Changelog
     :version: 0.9.2
     :released:
 
+    .. change:: 429
+      :tags: bug, mssql
+      :tickets: 429
+
+      Repaired :meth:`.Operations.rename_table` for SQL Server when the
+      target table is in a remote schema, the schema name is omitted from
+      the "new name" argument.
+
     .. change:: 425
       :tags: feature, commands
       :tickets: 425
index 84a1c7717b0c3e85a78218f336a880331fb46bbc..b369cfc0f23570cb14ae366c59e364017f4913be 100644 (file)
@@ -252,10 +252,30 @@ class OpTest(TestBase):
         op.rename_table('t1', 't2')
         context.assert_contains("EXEC sp_rename 't1', t2")
 
-    # TODO: when we add schema support
-    # def test_alter_column_rename_mssql_schema(self):
-    #    context = op_fixture('mssql')
-    #    op.alter_column("t", "c", name="x", schema="y")
-    #    context.assert_(
-    #        "EXEC sp_rename 'y.t.c', 'x', 'COLUMN'"
-    #    )
+    def test_rename_table_schema(self):
+        context = op_fixture('mssql')
+        op.rename_table('t1', 't2', schema="foobar")
+        context.assert_contains("EXEC sp_rename 'foobar.t1', t2")
+
+    def test_rename_table_casesens(self):
+        context = op_fixture('mssql')
+        op.rename_table('TeeOne', 'TeeTwo')
+        # yup, ran this in SQL Server 2014, the two levels of quoting
+        # seems to be understood.  Can't do the two levels on the
+        # target name though !
+        context.assert_contains("EXEC sp_rename '[TeeOne]', [TeeTwo]")
+
+    def test_rename_table_schema_casesens(self):
+        context = op_fixture('mssql')
+        op.rename_table('TeeOne', 'TeeTwo', schema="FooBar")
+        # yup, ran this in SQL Server 2014, the two levels of quoting
+        # seems to be understood.  Can't do the two levels on the
+        # target name though !
+        context.assert_contains("EXEC sp_rename '[FooBar].[TeeOne]', [TeeTwo]")
+
+    def test_alter_column_rename_mssql_schema(self):
+        context = op_fixture('mssql')
+        op.alter_column("t", "c", name="x", schema="y")
+        context.assert_(
+            "EXEC sp_rename 'y.t.c', x, 'COLUMN'"
+        )