"NULL" if element.nullable else "SET NOT NULL"
)
+@compiles(ColumnName)
+def visit_column_name(element, compiler, **kw):
+ return "%s %s RENAME TO %s" % (
+ alter_table(compiler, element.table_name, element.schema),
+ alter_column(compiler, element.column_name),
+ format_column_name(compiler, element.newname)
+ )
+
def quote_dotted(name, quote):
"""quote the elements of a dotted name"""
self._exec(base.ColumnType(
table_name, column_name, type_, schema=schema
))
+ # do the new name last ;)
+ if name is not None:
+ self._exec(base.ColumnName(
+ table_name, column_name, name, schema=schema
+ ))
def add_column(self, table_name, column):
self._exec(base.AddColumn(table_name, column))
from alembic.ddl.impl import DefaultImpl
-from alembic.ddl.base import alter_table, AddColumn
+from alembic.ddl.base import alter_table, AddColumn, ColumnName, format_table_name, format_column_name
from sqlalchemy.ext.compiler import compiles
class MSSQLImpl(DefaultImpl):
def visit_add_column(element, compiler, **kw):
return "%s %s" % (
alter_table(compiler, element.table_name, element.schema),
- mysql_add_column(compiler, element.column, **kw)
+ mssql_add_column(compiler, element.column, **kw)
)
-def mysql_add_column(compiler, column, **kw):
+def mssql_add_column(compiler, column, **kw):
return "ADD %s" % compiler.get_column_specification(column, **kw)
+
+@compiles(ColumnName, 'mssql')
+def visit_rename_column(element, compiler, **kw):
+ return "EXEC sp_rename '%s.%s', '%s', 'COLUMN'" % (
+ format_table_name(compiler, element.table_name, element.schema),
+ format_column_name(compiler, element.column_name),
+ format_column_name(compiler, element.newname)
+ )
context = _op_fixture("mssql")
op.add_column('t1', Column('c1', Integer, nullable=False, server_default="12"))
context.assert_("ALTER TABLE t1 ADD c1 INTEGER NOT NULL DEFAULT '12'")
+
+def test_alter_column_rename_mssql():
+ context = _op_fixture('mssql')
+ op.alter_column("t", "c", name="x")
+ context.assert_(
+ "EXEC sp_rename 't.c', 'x', 'COLUMN'"
+ )
+
+# TODO: when we add schema support
+#def test_alter_column_rename_mssql_schema():
+# context = _op_fixture('mssql')
+# op.alter_column("t", "c", name="x", schema="y")
+# context.assert_(
+# "EXEC sp_rename 'y.t.c', 'x', 'COLUMN'"
+# )
+
"ALTER TABLE t ALTER COLUMN c SET NOT NULL"
)
+def test_alter_column_rename():
+ context = _op_fixture()
+ op.alter_column("t", "c", name="x")
+ context.assert_(
+ "ALTER TABLE t ALTER COLUMN c RENAME TO x"
+ )
+
def test_add_foreign_key():
context = _op_fixture()
op.create_foreign_key('fk_test', 't1', 't2',