From: Mike Bayer Date: Sun, 14 Dec 2025 03:37:04 +0000 (-0500) Subject: improve SQL Server fulltext drop X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=HEAD;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git improve SQL Server fulltext drop Change-Id: I848080227d50ab446a8add296b759003441fd0ad --- diff --git a/lib/sqlalchemy/dialects/mssql/provision.py b/lib/sqlalchemy/dialects/mssql/provision.py index 7d02b47a88..03bdbca113 100644 --- a/lib/sqlalchemy/dialects/mssql/provision.py +++ b/lib/sqlalchemy/dialects/mssql/provision.py @@ -137,11 +137,28 @@ def drop_all_schema_objects_pre_tables(cfg, eng): with eng.connect().execution_options(isolation_level="AUTOCOMMIT") as conn: inspector = inspect(conn) - conn.exec_driver_sql( - "IF EXISTS (SELECT 1 FROM sys.fulltext_catalogs " - "WHERE name = 'Catalog') " - "DROP FULLTEXT CATALOG Catalog" - ) + # Drop all full-text indexes before dropping catalogs + fulltext_indexes = conn.exec_driver_sql( + "SELECT OBJECT_SCHEMA_NAME(object_id) AS schema_name, " + "OBJECT_NAME(object_id) AS table_name " + "FROM sys.fulltext_indexes" + ).fetchall() + + for schema_name, table_name in fulltext_indexes: + if schema_name: + qualified_name = f"[{schema_name}].[{table_name}]" + else: + qualified_name = f"[{table_name}]" + conn.exec_driver_sql(f"DROP FULLTEXT INDEX ON {qualified_name}") + + # Now drop all full-text catalogs + fulltext_catalogs = conn.exec_driver_sql( + "SELECT name FROM sys.fulltext_catalogs" + ).fetchall() + + for (catalog_name,) in fulltext_catalogs: + conn.exec_driver_sql(f"DROP FULLTEXT CATALOG [{catalog_name}]") + for schema in (None, "dbo", cfg.test_schema, cfg.test_schema_2): for tname in inspector.get_table_names(schema=schema): tb = Table(