|
13 | 13 | from sqlmesh.core import dialect as d |
14 | 14 | from sqlmesh.core.dialect import normalize_model_name |
15 | 15 | from sqlmesh.core.engine_adapter import EngineAdapter, EngineAdapterWithIndexSupport |
| 16 | +from sqlmesh.core.engine_adapter.mixins import InsertOverwriteWithMergeMixin |
16 | 17 | from sqlmesh.core.engine_adapter.shared import InsertOverwriteStrategy |
17 | 18 | from sqlmesh.core.schema_diff import SchemaDiffer, TableAlterOperation |
18 | 19 | from sqlmesh.utils import columns_to_types_to_struct |
@@ -322,6 +323,30 @@ def test_insert_overwrite_no_where(make_mocked_engine_adapter: t.Callable): |
322 | 323 | ] |
323 | 324 |
|
324 | 325 |
|
| 326 | +def test_insert_overwrite_by_condition_column_contains_unsafe_characters( |
| 327 | + make_mocked_engine_adapter: t.Callable, mocker: MockerFixture |
| 328 | +): |
| 329 | + adapter = make_mocked_engine_adapter(InsertOverwriteWithMergeMixin) |
| 330 | + |
| 331 | + source_queries, columns_to_types = adapter._get_source_queries_and_columns_to_types( |
| 332 | + parse_one("SELECT 1 AS c"), None, target_table="test_table" |
| 333 | + ) |
| 334 | + |
| 335 | + columns_mock = mocker.patch.object(adapter, "columns") |
| 336 | + columns_mock.return_value = {"foo.bar.baz": exp.DataType.build("INT")} |
| 337 | + |
| 338 | + adapter._insert_overwrite_by_condition( |
| 339 | + "test_table", |
| 340 | + source_queries, |
| 341 | + columns_to_types=None, |
| 342 | + ) |
| 343 | + |
| 344 | + # The goal here is to assert that we don't parse `foo.bar.baz` into a qualified column |
| 345 | + assert to_sql_calls(adapter) == [ |
| 346 | + 'MERGE INTO "test_table" AS "__MERGE_TARGET__" USING (SELECT "foo.bar.baz" FROM (SELECT 1 AS "c") AS "_subquery") AS "__MERGE_SOURCE__" ON FALSE WHEN NOT MATCHED BY SOURCE THEN DELETE WHEN NOT MATCHED THEN INSERT ("foo.bar.baz") VALUES ("foo.bar.baz")' |
| 347 | + ] |
| 348 | + |
| 349 | + |
325 | 350 | def test_insert_append_query(make_mocked_engine_adapter: t.Callable): |
326 | 351 | adapter = make_mocked_engine_adapter(EngineAdapter) |
327 | 352 |
|
|
0 commit comments