From d00cb370243f80613a74a5a24b4236fe16a85dba Mon Sep 17 00:00:00 2001 From: Mila Page Date: Tue, 27 Feb 2024 01:05:02 -0800 Subject: [PATCH 1/7] Add test and move semantics. --- .../Under the Hood-20240227-010428.yaml | 6 +++ dbt/adapters/snowflake/relation.py | 46 +++++++++++++------ dev-requirements.txt | 2 +- tests/unit/test_renamed_relations.py | 17 +++++++ 4 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 .changes/unreleased/Under the Hood-20240227-010428.yaml create mode 100644 tests/unit/test_renamed_relations.py diff --git a/.changes/unreleased/Under the Hood-20240227-010428.yaml b/.changes/unreleased/Under the Hood-20240227-010428.yaml new file mode 100644 index 000000000..5252d0313 --- /dev/null +++ b/.changes/unreleased/Under the Hood-20240227-010428.yaml @@ -0,0 +1,6 @@ +kind: Under the Hood +body: Add unit test for transaction semantics. +time: 2024-02-27T01:04:28.713433-08:00 +custom: + Author: versusfacit + Issue: "912" diff --git a/dbt/adapters/snowflake/relation.py b/dbt/adapters/snowflake/relation.py index 325d23c9b..e8b4943ae 100644 --- a/dbt/adapters/snowflake/relation.py +++ b/dbt/adapters/snowflake/relation.py @@ -19,14 +19,27 @@ @dataclass(frozen=True, eq=False, repr=False) class SnowflakeRelation(BaseRelation): type: Optional[SnowflakeRelationType] = None # type: ignore - quote_policy: SnowflakeQuotePolicy = field(default_factory=lambda: SnowflakeQuotePolicy()) - renameable_relations = frozenset({SnowflakeRelationType.Table, SnowflakeRelationType.View}) - replaceable_relations = frozenset( - { - SnowflakeRelationType.DynamicTable, - SnowflakeRelationType.Table, - SnowflakeRelationType.View, - } + quote_policy: SnowflakeQuotePolicy = field( + default_factory=lambda: SnowflakeQuotePolicy() + ) + + renameable_relations: FrozenSet[RelationType] = field( + default_factory=lambda: frozenset( + { + SnowflakeRelationType.Table, + SnowflakeRelationType.View, + } + ) + ) + + replaceable_relations: FrozenSet[RelationType] = field( + default_factory=lambda: frozenset( + { + SnowflakeRelationType.DynamicTable, + SnowflakeRelationType.Table, + SnowflakeRelationType.View, + } + ) ) @property @@ -48,17 +61,24 @@ def dynamic_table_config_changeset( existing_dynamic_table = SnowflakeDynamicTableConfig.from_relation_results( relation_results ) - new_dynamic_table = SnowflakeDynamicTableConfig.from_relation_config(relation_config) + new_dynamic_table = SnowflakeDynamicTableConfig.from_relation_config( + relation_config + ) config_change_collection = SnowflakeDynamicTableConfigChangeset() if new_dynamic_table.target_lag != existing_dynamic_table.target_lag: - config_change_collection.target_lag = SnowflakeDynamicTableTargetLagConfigChange( - action=RelationConfigChangeAction.alter, - context=new_dynamic_table.target_lag, + config_change_collection.target_lag = ( + SnowflakeDynamicTableTargetLagConfigChange( + action=RelationConfigChangeAction.alter, + context=new_dynamic_table.target_lag, + ) ) - if new_dynamic_table.snowflake_warehouse != existing_dynamic_table.snowflake_warehouse: + if ( + new_dynamic_table.snowflake_warehouse + != existing_dynamic_table.snowflake_warehouse + ): config_change_collection.snowflake_warehouse = ( SnowflakeDynamicTableWarehouseConfigChange( action=RelationConfigChangeAction.alter, diff --git a/dev-requirements.txt b/dev-requirements.txt index db49d0497..aeeae213a 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,7 +1,7 @@ # install latest changes in dbt-core # TODO: how to automate switching from develop to version branches? git+https://github.com/dbt-labs/dbt-core.git#egg=dbt-core&subdirectory=core -git+https://github.com/dbt-labs/dbt-adapters.git +git+https://github.com/dbt-labs/dbt-adapters.git@ADAP-108/fix_renamed_relations_for_1.8 git+https://github.com/dbt-labs/dbt-adapters.git#subdirectory=dbt-tests-adapter # if version 1.x or greater -> pin to major version diff --git a/tests/unit/test_renamed_relations.py b/tests/unit/test_renamed_relations.py new file mode 100644 index 000000000..d05758de3 --- /dev/null +++ b/tests/unit/test_renamed_relations.py @@ -0,0 +1,17 @@ +from dbt.adapters.snowflake.relation import SnowflakeRelation +from dbt.adapters.contracts.relation import RelationType + + +def test_renameable_relation(): + relation = SnowflakeRelation.create( + database="my_db", + schema="my_schema", + identifier="my_table", + type=RelationType.Table, + ) + assert relation.renameable_relations == frozenset( + { + SnowflakeRelationType.Table, + SnowflakeRelationType.View, + } + ) From ab154fba3562cc0e6d2c6a162bb1e8e29b64e9c1 Mon Sep 17 00:00:00 2001 From: Mila Page Date: Tue, 27 Feb 2024 01:10:40 -0800 Subject: [PATCH 2/7] Add FrozenSEt to imports --- dbt/adapters/snowflake/relation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbt/adapters/snowflake/relation.py b/dbt/adapters/snowflake/relation.py index e8b4943ae..ef3e56c4e 100644 --- a/dbt/adapters/snowflake/relation.py +++ b/dbt/adapters/snowflake/relation.py @@ -1,5 +1,5 @@ from dataclasses import dataclass, field -from typing import Optional, Type +from typing import FrozenSet, Optional, Type from dbt.adapters.base.relation import BaseRelation from dbt.adapters.relation_configs import RelationConfigChangeAction, RelationResults From 0269f0bdc2f63a74b1141c368cc450db0aa587e9 Mon Sep 17 00:00:00 2001 From: Mila Page Date: Tue, 27 Feb 2024 01:28:14 -0800 Subject: [PATCH 3/7] Fix flake8 error. --- dbt/adapters/snowflake/relation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dbt/adapters/snowflake/relation.py b/dbt/adapters/snowflake/relation.py index ef3e56c4e..288f87e12 100644 --- a/dbt/adapters/snowflake/relation.py +++ b/dbt/adapters/snowflake/relation.py @@ -23,7 +23,7 @@ class SnowflakeRelation(BaseRelation): default_factory=lambda: SnowflakeQuotePolicy() ) - renameable_relations: FrozenSet[RelationType] = field( + renameable_relations: FrozenSet[SnowflakeRelationType] = field( default_factory=lambda: frozenset( { SnowflakeRelationType.Table, @@ -32,7 +32,7 @@ class SnowflakeRelation(BaseRelation): ) ) - replaceable_relations: FrozenSet[RelationType] = field( + replaceable_relations: FrozenSet[SnowflakeRelationType] = field( default_factory=lambda: frozenset( { SnowflakeRelationType.DynamicTable, From efa592d3c240b76210a44d26b4a08888370f1be4 Mon Sep 17 00:00:00 2001 From: Mila Page Date: Tue, 27 Feb 2024 01:30:14 -0800 Subject: [PATCH 4/7] Tweak test failures. --- tests/unit/test_renamed_relations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/test_renamed_relations.py b/tests/unit/test_renamed_relations.py index d05758de3..315d5f343 100644 --- a/tests/unit/test_renamed_relations.py +++ b/tests/unit/test_renamed_relations.py @@ -1,5 +1,5 @@ from dbt.adapters.snowflake.relation import SnowflakeRelation -from dbt.adapters.contracts.relation import RelationType +from dbt.adapters.snowflake.relation_configs import SnowflakeRelationType def test_renameable_relation(): @@ -7,7 +7,7 @@ def test_renameable_relation(): database="my_db", schema="my_schema", identifier="my_table", - type=RelationType.Table, + type=SnowflakeRelationType.Table, ) assert relation.renameable_relations == frozenset( { From def1d47db3a590f1485a0f79ad115d0b53b2c4ec Mon Sep 17 00:00:00 2001 From: Mila Page Date: Tue, 27 Feb 2024 01:44:01 -0800 Subject: [PATCH 5/7] Alter formatting. --- dbt/adapters/snowflake/relation.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/dbt/adapters/snowflake/relation.py b/dbt/adapters/snowflake/relation.py index 288f87e12..ae037aebc 100644 --- a/dbt/adapters/snowflake/relation.py +++ b/dbt/adapters/snowflake/relation.py @@ -19,9 +19,7 @@ @dataclass(frozen=True, eq=False, repr=False) class SnowflakeRelation(BaseRelation): type: Optional[SnowflakeRelationType] = None # type: ignore - quote_policy: SnowflakeQuotePolicy = field( - default_factory=lambda: SnowflakeQuotePolicy() - ) + quote_policy: SnowflakeQuotePolicy = field(default_factory=lambda: SnowflakeQuotePolicy()) renameable_relations: FrozenSet[SnowflakeRelationType] = field( default_factory=lambda: frozenset( @@ -61,24 +59,17 @@ def dynamic_table_config_changeset( existing_dynamic_table = SnowflakeDynamicTableConfig.from_relation_results( relation_results ) - new_dynamic_table = SnowflakeDynamicTableConfig.from_relation_config( - relation_config - ) + new_dynamic_table = SnowflakeDynamicTableConfig.from_relation_config(relation_config) config_change_collection = SnowflakeDynamicTableConfigChangeset() if new_dynamic_table.target_lag != existing_dynamic_table.target_lag: - config_change_collection.target_lag = ( - SnowflakeDynamicTableTargetLagConfigChange( - action=RelationConfigChangeAction.alter, - context=new_dynamic_table.target_lag, - ) + config_change_collection.target_lag = SnowflakeDynamicTableTargetLagConfigChange( + action=RelationConfigChangeAction.alter, + context=new_dynamic_table.target_lag, ) - if ( - new_dynamic_table.snowflake_warehouse - != existing_dynamic_table.snowflake_warehouse - ): + if new_dynamic_table.snowflake_warehouse != existing_dynamic_table.snowflake_warehouse: config_change_collection.snowflake_warehouse = ( SnowflakeDynamicTableWarehouseConfigChange( action=RelationConfigChangeAction.alter, From 4b8e9ef21e4ea31be215c8b4e28e966963e2dbd4 Mon Sep 17 00:00:00 2001 From: Mike Alfare Date: Wed, 20 Mar 2024 18:27:38 -0400 Subject: [PATCH 6/7] remove extra semicolon --- dbt/include/snowflake/macros/relations/dynamic_table/create.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/dbt/include/snowflake/macros/relations/dynamic_table/create.sql b/dbt/include/snowflake/macros/relations/dynamic_table/create.sql index 8e8f3287f..1d76c417c 100644 --- a/dbt/include/snowflake/macros/relations/dynamic_table/create.sql +++ b/dbt/include/snowflake/macros/relations/dynamic_table/create.sql @@ -6,6 +6,5 @@ as ( {{ sql }} ) - ; {%- endmacro %} From 04d4c9d03c86cac82d8f285f0870109077aba842 Mon Sep 17 00:00:00 2001 From: Mike Alfare Date: Thu, 21 Mar 2024 10:29:29 -0400 Subject: [PATCH 7/7] repoint dev deps to main --- dev-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index ae880c697..5e5458901 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,7 +1,7 @@ # install latest changes in dbt-core # TODO: how to automate switching from develop to version branches? git+https://github.com/dbt-labs/dbt-core.git#egg=dbt-core&subdirectory=core -git+https://github.com/dbt-labs/dbt-adapters.git@ADAP-108/fix_renamed_relations_for_1.8 +git+https://github.com/dbt-labs/dbt-adapters.git git+https://github.com/dbt-labs/dbt-adapters.git#subdirectory=dbt-tests-adapter # if version 1.x or greater -> pin to major version