@@ -1039,6 +1039,48 @@ def test_table_format_iceberg(snowflake_mocked_engine_adapter: SnowflakeEngineAd
10391039 ]
10401040
10411041
1042+ def test_clone_table_iceberg (mocker : MockerFixture , make_mocked_engine_adapter : t .Callable ):
1043+ mocker .patch ("sqlmesh.core.engine_adapter.snowflake.SnowflakeEngineAdapter.set_current_catalog" )
1044+ adapter = make_mocked_engine_adapter (SnowflakeEngineAdapter , default_catalog = "test_catalog" )
1045+
1046+ # Snowflake rejects `CREATE TABLE ... CLONE` for Iceberg tables
1047+ adapter .clone_table ("target_table" , "source_table" , table_format = "iceberg" )
1048+ adapter .cursor .execute .assert_called_once_with (
1049+ 'CREATE ICEBERG TABLE IF NOT EXISTS "target_table" CLONE "source_table"'
1050+ )
1051+
1052+ # Engines that don't need format-specific DDL are unaffected
1053+ adapter = make_mocked_engine_adapter (EngineAdapter , default_catalog = "test_catalog" )
1054+ adapter .SUPPORTS_CLONING = True
1055+ adapter .clone_table ("target_table" , "source_table" , table_format = "iceberg" )
1056+ adapter .cursor .execute .assert_called_once_with (
1057+ 'CREATE TABLE IF NOT EXISTS "target_table" CLONE "source_table"'
1058+ )
1059+
1060+
1061+ def test_alter_table_iceberg (mocker : MockerFixture , make_mocked_engine_adapter : t .Callable ):
1062+ mocker .patch ("sqlmesh.core.engine_adapter.snowflake.SnowflakeEngineAdapter.set_current_catalog" )
1063+ adapter = make_mocked_engine_adapter (SnowflakeEngineAdapter , default_catalog = "test_catalog" )
1064+
1065+ current_table = {"a" : "INT" }
1066+ target_table = {"a" : "INT" , "b" : "INT" }
1067+ adapter .columns = lambda table_name , ** kwargs : {
1068+ k : exp .DataType .build (v )
1069+ for k , v in (current_table if table_name == "test_table" else target_table ).items ()
1070+ }
1071+
1072+ alter_operations = adapter .get_alter_operations ("test_table" , "target_table" )
1073+
1074+ # Snowflake rejects `ALTER TABLE` for Iceberg tables
1075+ adapter .alter_table (alter_operations , table_format = "iceberg" )
1076+ assert to_sql_calls (adapter ) == ['ALTER ICEBERG TABLE "test_table" ADD "b" INT' ]
1077+
1078+ # Without a table format the regular `ALTER TABLE` is used
1079+ adapter = make_mocked_engine_adapter (SnowflakeEngineAdapter , default_catalog = "test_catalog" )
1080+ adapter .alter_table (alter_operations )
1081+ assert to_sql_calls (adapter ) == ['ALTER TABLE "test_table" ADD "b" INT' ]
1082+
1083+
10421084def test_create_view_with_schema_and_grants (
10431085 snowflake_mocked_engine_adapter : SnowflakeEngineAdapter ,
10441086):
0 commit comments