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 = drop.element
+
+ text = "\nDROP INDEX "
+
+ if (
+ # only supported in 2016+
+ self.dialect.server_version_info < MS_2016_VERSION
+ and drop.if_exists
+ ):
+ text += "IF EXISTS "
+
+ text += self._prepared_index_name(index, include_schema=False)
+ text += " ON " + self.preparer.format_table(index.table)
+ return text
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(