--- /dev/null
+.. change::
+ :tags: usecase, mssql
+ :tickets: 13045
+
+ Added support for the ``IF EXISTS`` clause when dropping indexes on SQL
+ Server 2016 (13.x) and later versions. The :paramref:`.DropIndex.if_exists`
+ parameter is now honored by the SQL Server dialect, allowing conditional
+ index drops that will not raise an error if the index does not exist.
+ Pull request courtesy Edgar Ramírez Mondragón.
import datetime
import operator
import re
+from typing import Any
from typing import Literal
from typing import overload
from typing import TYPE_CHECKING
from ...util import update_wrapper
if TYPE_CHECKING:
+ from ...sql.ddl import DropIndex
from ...sql.dml import DMLState
from ...sql.selectable import TableClause
return text
- def visit_drop_index(self, drop, **kw):
- return "\nDROP INDEX %s ON %s" % (
- self._prepared_index_name(drop.element, include_schema=False),
- self.preparer.format_table(drop.element.table),
+ def visit_drop_index(self, drop: DropIndex, **kw: Any) -> str:
+ index_name = self._prepared_index_name(
+ drop.element, include_schema=False
)
+ table_name = self.preparer.format_table(drop.element.table)
+ if_exists = " IF EXISTS" if drop.if_exists else ""
+ return f"\nDROP INDEX{if_exists} {index_name} ON {table_name}"
def visit_create_table_as(self, element, **kw):
prep = self.preparer
"DROP INDEX idx_foo ON bar.foo",
)
+ def test_drop_index_if_exists(self):
+ m = MetaData()
+ t1 = Table("foo", m, Column("x", Integer), schema="bar")
+ self.assert_compile(
+ schema.DropIndex(Index("idx_foo", t1.c.x), if_exists=True),
+ "DROP INDEX IF EXISTS idx_foo ON bar.foo",
+ )
+
def test_index_extra_include_1(self):
metadata = MetaData()
tbl = Table(