from .base import alter_table, AddColumn, ColumnName, \
format_table_name, format_column_name, ColumnNullable, alter_column,\
format_server_default,ColumnDefault, format_type, ColumnType
+from sqlalchemy.sql.expression import ClauseElement, Executable
class MSSQLImpl(DefaultImpl):
__dialect__ = 'mssql'
if existing_server_default is not False or \
server_default is None:
self._exec(
- _exec_drop_col_constraint(self,
+ _ExecDropConstraint(
table_name, column_name,
'sys.default_constraints')
)
drop_default = kw.pop('mssql_drop_default', False)
if drop_default:
self._exec(
- _exec_drop_col_constraint(self,
+ _ExecDropConstraint(
table_name, column,
'sys.default_constraints')
)
drop_check = kw.pop('mssql_drop_check', False)
if drop_check:
self._exec(
- _exec_drop_col_constraint(self,
+ _ExecDropConstraint(
table_name, column,
'sys.check_constraints')
)
drop_fks = kw.pop('mssql_drop_foreign_key', False)
if drop_fks:
self._exec(
- _exec_drop_col_fk_constraint(self,
- table_name, column)
+ _ExecDropFKConstraint(table_name, column)
)
super(MSSQLImpl, self).drop_column(table_name, column)
-def _exec_drop_col_constraint(impl, tname, colname, type_):
+class _ExecDropConstraint(ClauseElement, Executable):
+ def __init__(self, tname, colname, type_):
+ self.tname = tname
+ self.colname = colname
+ self.type_ = type_
+
+class _ExecDropFKConstraint(ClauseElement, Executable):
+ def __init__(self, tname, colname):
+ self.tname = tname
+ self.colname = colname
+
+
+@compiles(_ExecDropConstraint, 'mssql')
+def _exec_drop_col_constraint(element, compiler, **kw):
+ tname, colname, type_ = element.tname, element.colname, element.type_
# from http://www.mssqltips.com/sqlservertip/1425/working-with-default-constraints-in-sql-server/
# TODO: needs table formatting, etc.
return """declare @const_name varchar(256)
select @const_name = [name] from %(type)s
where parent_object_id = object_id('%(tname)s')
and col_name(parent_object_id, parent_column_id) = '%(colname)s'
-exec('alter table %(tname)s drop constraint ' + @const_name)""" % {
+exec('alter table %(tname_quoted)s drop constraint ' + @const_name)""" % {
'type': type_,
'tname': tname,
- 'colname': colname
+ 'colname': colname,
+ 'tname_quoted': format_table_name(compiler, tname, None),
}
-def _exec_drop_col_fk_constraint(impl, tname, colname):
+@compiles(_ExecDropFKConstraint, 'mssql')
+def _exec_drop_col_fk_constraint(element, compiler, **kw):
+ tname, colname = element.tname, element.colname
+
return """declare @const_name varchar(256)
select @const_name = [name] from
sys.foreign_keys fk join sys.foreign_key_columns fkc
on fk.object_id=fkc.constraint_object_id
where fkc.parent_object_id = object_id('%(tname)s')
and col_name(fkc.parent_object_id, fkc.parent_column_id) = '%(colname)s'
-exec('alter table %(tname)s drop constraint ' + @const_name)""" % {
+exec('alter table %(tname_quoted)s drop constraint ' + @const_name)""" % {
'tname': tname,
- 'colname': colname
+ 'colname': colname,
+ 'tname_quoted': format_table_name(compiler, tname, None),
}