diff --git a/sqlmesh/core/engine_adapter/snowflake.py b/sqlmesh/core/engine_adapter/snowflake.py index 758e4847c1..dace876bc7 100644 --- a/sqlmesh/core/engine_adapter/snowflake.py +++ b/sqlmesh/core/engine_adapter/snowflake.py @@ -174,7 +174,7 @@ def _drop_catalog(self, catalog_name: exp.Identifier) -> None: .from_(exp.to_table("information_schema.databases")) .where( exp.and_( - exp.column("database_name").eq(exp.Literal.string(catalog_name)), + exp.column("database_name").eq(exp.Literal.string(catalog_name.name)), exp.column("comment").eq(exp.Literal.string(c.SQLMESH_MANAGED)), ) ) diff --git a/tests/core/engine_adapter/test_snowflake.py b/tests/core/engine_adapter/test_snowflake.py index 89f19fc588..ba416a84d7 100644 --- a/tests/core/engine_adapter/test_snowflake.py +++ b/tests/core/engine_adapter/test_snowflake.py @@ -1187,3 +1187,27 @@ def test_drop_catalog(snowflake_mocked_engine_adapter: SnowflakeEngineAdapter) - """SELECT 1 FROM "INFORMATION_SCHEMA"."DATABASES" WHERE "DATABASE_NAME" = 'foo' AND "COMMENT" = 'sqlmesh_managed'""", 'DROP DATABASE IF EXISTS "foo"', ] + + +@pytest.mark.parametrize( + "catalog_name, expected_name", + [ + # names that need quoting are parsed into quoted identifiers + ("my-db__dev", "my-db__dev"), + (exp.to_identifier("my db", quoted=True), "my db"), + (exp.to_identifier("MyDb", quoted=True), "MyDb"), + ], +) +def test_drop_catalog_quoted_name( + snowflake_mocked_engine_adapter: SnowflakeEngineAdapter, + catalog_name: t.Union[str, exp.Identifier], + expected_name: str, +) -> None: + adapter = snowflake_mocked_engine_adapter + adapter.drop_catalog(catalog_name) + + # the existence check must compare against the bare database name, without identifier quotes + assert to_sql_calls(adapter) == [ + f"""SELECT 1 FROM "INFORMATION_SCHEMA"."DATABASES" WHERE "DATABASE_NAME" = '{expected_name}' AND "COMMENT" = 'sqlmesh_managed'""", + f'DROP DATABASE IF EXISTS "{expected_name}"', + ]