@@ -1007,6 +1007,48 @@ def test_table_format_iceberg(snowflake_mocked_engine_adapter: SnowflakeEngineAd
10071007 ]
10081008
10091009
1010+ def test_clone_table_iceberg (mocker : MockerFixture , make_mocked_engine_adapter : t .Callable ):
1011+ mocker .patch ("sqlmesh.core.engine_adapter.snowflake.SnowflakeEngineAdapter.set_current_catalog" )
1012+ adapter = make_mocked_engine_adapter (SnowflakeEngineAdapter , default_catalog = "test_catalog" )
1013+
1014+ # Snowflake rejects `CREATE TABLE ... CLONE` for Iceberg tables
1015+ adapter .clone_table ("target_table" , "source_table" , table_format = "iceberg" )
1016+ adapter .cursor .execute .assert_called_once_with (
1017+ 'CREATE ICEBERG TABLE IF NOT EXISTS "target_table" CLONE "source_table"'
1018+ )
1019+
1020+ # Engines that don't need format-specific DDL are unaffected
1021+ adapter = make_mocked_engine_adapter (EngineAdapter , default_catalog = "test_catalog" )
1022+ adapter .SUPPORTS_CLONING = True
1023+ adapter .clone_table ("target_table" , "source_table" , table_format = "iceberg" )
1024+ adapter .cursor .execute .assert_called_once_with (
1025+ 'CREATE TABLE IF NOT EXISTS "target_table" CLONE "source_table"'
1026+ )
1027+
1028+
1029+ def test_alter_table_iceberg (mocker : MockerFixture , make_mocked_engine_adapter : t .Callable ):
1030+ mocker .patch ("sqlmesh.core.engine_adapter.snowflake.SnowflakeEngineAdapter.set_current_catalog" )
1031+ adapter = make_mocked_engine_adapter (SnowflakeEngineAdapter , default_catalog = "test_catalog" )
1032+
1033+ current_table = {"a" : "INT" }
1034+ target_table = {"a" : "INT" , "b" : "INT" }
1035+ adapter .columns = lambda table_name , ** kwargs : {
1036+ k : exp .DataType .build (v )
1037+ for k , v in (current_table if table_name == "test_table" else target_table ).items ()
1038+ }
1039+
1040+ alter_operations = adapter .get_alter_operations ("test_table" , "target_table" )
1041+
1042+ # Snowflake rejects `ALTER TABLE` for Iceberg tables
1043+ adapter .alter_table (alter_operations , table_format = "iceberg" )
1044+ assert to_sql_calls (adapter ) == ['ALTER ICEBERG TABLE "test_table" ADD "b" INT' ]
1045+
1046+ # Without a table format the regular `ALTER TABLE` is used
1047+ adapter = make_mocked_engine_adapter (SnowflakeEngineAdapter , default_catalog = "test_catalog" )
1048+ adapter .alter_table (alter_operations )
1049+ assert to_sql_calls (adapter ) == ['ALTER TABLE "test_table" ADD "b" INT' ]
1050+
1051+
10101052def test_create_view_with_schema_and_grants (
10111053 snowflake_mocked_engine_adapter : SnowflakeEngineAdapter ,
10121054):
0 commit comments