|
7 | 7 |
|
8 | 8 | import sqlmesh.core.dialect as d |
9 | 9 | from sqlmesh.core.dialect import normalize_model_name |
| 10 | +from sqlmesh.core.engine_adapter.base import EngineAdapter |
10 | 11 | from sqlmesh.core.model import load_sql_based_model |
11 | 12 | from sqlmesh.core.engine_adapter import SnowflakeEngineAdapter |
12 | 13 | from sqlmesh.core.model.definition import SqlModel |
@@ -634,3 +635,34 @@ def test_create_view(make_mocked_engine_adapter: t.Callable): |
634 | 635 | 'CREATE OR REPLACE VIEW "test_view" COPY GRANTS AS SELECT 1', |
635 | 636 | 'CREATE VIEW "test_view" AS SELECT 1', |
636 | 637 | ] |
| 638 | + |
| 639 | + |
| 640 | +def test_clone_table(mocker: MockerFixture, make_mocked_engine_adapter: t.Callable): |
| 641 | + mocker.patch("sqlmesh.core.engine_adapter.snowflake.SnowflakeEngineAdapter.set_current_catalog") |
| 642 | + adapter = make_mocked_engine_adapter(SnowflakeEngineAdapter, default_catalog="test_catalog") |
| 643 | + adapter.clone_table("target_table", "source_table") |
| 644 | + adapter.cursor.execute.assert_called_once_with( |
| 645 | + 'CREATE TABLE "target_table" CLONE "source_table"' |
| 646 | + ) |
| 647 | + |
| 648 | + # Validate with transient type we create the clone table accordingly |
| 649 | + rendered_physical_properties = { |
| 650 | + "creatable_type": exp.column("transient"), |
| 651 | + } |
| 652 | + adapter = make_mocked_engine_adapter(SnowflakeEngineAdapter, default_catalog="test_catalog") |
| 653 | + adapter.clone_table( |
| 654 | + "target_table", "source_table", rendered_physical_properties=rendered_physical_properties |
| 655 | + ) |
| 656 | + adapter.cursor.execute.assert_called_once_with( |
| 657 | + 'CREATE TRANSIENT TABLE "target_table" CLONE "source_table"' |
| 658 | + ) |
| 659 | + |
| 660 | + # Validate other engine adapters would work as usual even when we pass the properties |
| 661 | + adapter = make_mocked_engine_adapter(EngineAdapter, default_catalog="test_catalog") |
| 662 | + adapter.SUPPORTS_CLONING = True |
| 663 | + adapter.clone_table( |
| 664 | + "target_table", "source_table", rendered_physical_properties=rendered_physical_properties |
| 665 | + ) |
| 666 | + adapter.cursor.execute.assert_called_once_with( |
| 667 | + 'CREATE TABLE "target_table" CLONE "source_table"' |
| 668 | + ) |
0 commit comments