From fe7c4f3355c983eb25fe77964a0e0c0488f7b8d0 Mon Sep 17 00:00:00 2001 From: Alexey Semchenko Date: Wed, 31 Mar 2021 15:28:00 +0300 Subject: [PATCH 01/10] Support for changing database in model configuration --- dbt/include/sqlserver/macros/adapters.sql | 43 +++++++++++++++-------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/dbt/include/sqlserver/macros/adapters.sql b/dbt/include/sqlserver/macros/adapters.sql index 8821983e..af65c485 100644 --- a/dbt/include/sqlserver/macros/adapters.sql +++ b/dbt/include/sqlserver/macros/adapters.sql @@ -24,17 +24,17 @@ case when table_type = 'BASE TABLE' then 'table' when table_type = 'VIEW' then 'view' else table_type - end as table_type + end as [type] - from information_schema.tables + from [{{ schema_relation.database }}].information_schema.tables where table_schema like '{{ schema_relation.schema }}' - and table_catalog like '{{ schema_relation.database }}' {% endcall %} {{ return(load_result('list_relations_without_caching').table) }} {% endmacro %} {% macro sqlserver__list_schemas(database) %} {% call statement('list_schemas', fetch_result=True, auto_begin=False) -%} + use {{ database }}; select name as [schema] from sys.schemas {% endcall %} @@ -43,7 +43,7 @@ {% macro sqlserver__create_schema(relation) -%} {% call statement('create_schema') -%} - USE [{{ relation.database }}] + use [{{ relation.database }}]; IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = '{{ relation.without_identifier().schema }}') BEGIN EXEC('CREATE SCHEMA {{ relation.without_identifier().schema }}') @@ -79,6 +79,7 @@ {%- else -%} invalid target name {% endif %} {% call statement('drop_relation', auto_begin=False) -%} + use [{{ relation.database }}]; if object_id ('{{ relation.include(database=False) }}','{{ object_id_type }}') is not null begin drop {{ relation.type }} {{ relation.include(database=False) }} @@ -93,6 +94,7 @@ {% set object_id_type = 'U' %} {%- else -%} invalid target name {% endif %} + use [{{ relation.database }}]; if object_id ('{{ relation.include(database=False) }}','{{ object_id_type }}') is not null begin drop {{ relation.type }} {{ relation.include(database=False) }} @@ -107,14 +109,27 @@ {{ return(load_result('check_schema_exists').table) }} {% endmacro %} + +{% macro sqlserver__create_view_exec(relation, sql) -%} + {%- set temp_view_sql = sql.replace("'", "''") -%} + execute('create view {{ relation.include(database=False) }} as + {{ temp_view_sql }} + '); +{% endmacro %} + + {% macro sqlserver__create_view_as(relation, sql) -%} - create view {{ relation.schema }}.{{ relation.identifier }} as - {{ sql }} + use [{{ relation.database }}]; + {{ sqlserver__create_view_exec(relation, sql) }} {% endmacro %} {% macro sqlserver__rename_relation(from_relation, to_relation) -%} {% call statement('rename_relation') -%} + {% if from_relation.database != to_relation.database %} + {{ exceptions.raise_compiler_error("Can't do cross-database rename {} -> {}".format(from_relation, to_relation)) }} + {% endif %} + use [{{ to_relation.database }}]; EXEC sp_rename '{{ from_relation.schema }}.{{ from_relation.identifier }}', '{{ to_relation.identifier }}' IF EXISTS( SELECT * @@ -128,6 +143,7 @@ {%- set cci_name = relation.schema ~ '_' ~ relation.identifier ~ '_cci' -%} {%- set relation_name = relation.schema ~ '_' ~ relation.identifier -%} {%- set full_relation = relation.schema ~ '.' ~ relation.identifier -%} + use [{{ relation.database }}]; if EXISTS ( SELECT * FROM sys.indexes WHERE name = '{{cci_name}}' @@ -149,12 +165,13 @@ {{ sqlserver__drop_relation_script(relation) }} - EXEC('create view {{ tmp_relation.schema }}.{{ tmp_relation.identifier }} as + use [{{ relation.database }}]; + EXEC('create view {{ tmp_relation.include(database=False) }} as {{ temp_view_sql }} '); - SELECT * INTO {{ relation.schema }}.{{ relation.identifier }} FROM - {{ tmp_relation.schema }}.{{ tmp_relation.identifier }} + SELECT * INTO {{ relation }} FROM + {{ tmp_relation }} {{ sqlserver__drop_relation_script(tmp_relation) }} @@ -165,11 +182,7 @@ {% endmacro %}_ {% macro sqlserver__insert_into_from(to_relation, from_relation) -%} - {%- set full_to_relation = to_relation.schema ~ '.' ~ to_relation.identifier -%} - {%- set full_from_relation = from_relation.schema ~ '.' ~ from_relation.identifier -%} - - SELECT * INTO {{full_to_relation}} FROM {{full_from_relation}} - + SELECT * INTO {{ to_relation }} FROM {{ from_relation }} {% endmacro %} {% macro sqlserver__current_timestamp() -%} @@ -192,7 +205,7 @@ character_maximum_length, numeric_precision, numeric_scale - from INFORMATION_SCHEMA.COLUMNS + from [{{ relation.database }}].INFORMATION_SCHEMA.COLUMNS where table_name = '{{ relation.identifier }}' and table_schema = '{{ relation.schema }}' UNION ALL From 22f8bda99000c743dc333d5c8c9281825d51928a Mon Sep 17 00:00:00 2001 From: Alexey Semchenko Date: Wed, 31 Mar 2021 17:02:24 +0300 Subject: [PATCH 02/10] Bumbed version --- dbt/adapters/sqlserver/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbt/adapters/sqlserver/__version__.py b/dbt/adapters/sqlserver/__version__.py index c86c5243..b95c1bdb 100644 --- a/dbt/adapters/sqlserver/__version__.py +++ b/dbt/adapters/sqlserver/__version__.py @@ -1 +1 @@ -version = '0.19.0.2' \ No newline at end of file +version = '0.19.0.3' \ No newline at end of file From 71ea34a5b8232d2fd96084bb645049f85b5e3e94 Mon Sep 17 00:00:00 2001 From: Anders Date: Thu, 1 Apr 2021 21:53:48 -0700 Subject: [PATCH 03/10] Update dbt/include/sqlserver/macros/adapters.sql --- dbt/include/sqlserver/macros/adapters.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbt/include/sqlserver/macros/adapters.sql b/dbt/include/sqlserver/macros/adapters.sql index af65c485..85f7a27a 100644 --- a/dbt/include/sqlserver/macros/adapters.sql +++ b/dbt/include/sqlserver/macros/adapters.sql @@ -24,7 +24,7 @@ case when table_type = 'BASE TABLE' then 'table' when table_type = 'VIEW' then 'view' else table_type - end as [type] + end as table_type from [{{ schema_relation.database }}].information_schema.tables where table_schema like '{{ schema_relation.schema }}' From e25cf6ba3c52cbd8173f82ccf5259c236c066e21 Mon Sep 17 00:00:00 2001 From: Alexey Semchenko Date: Fri, 2 Apr 2021 10:08:46 +0300 Subject: [PATCH 04/10] Removed unnecessary check --- dbt/include/sqlserver/macros/adapters.sql | 3 --- 1 file changed, 3 deletions(-) diff --git a/dbt/include/sqlserver/macros/adapters.sql b/dbt/include/sqlserver/macros/adapters.sql index 85f7a27a..681e5b55 100644 --- a/dbt/include/sqlserver/macros/adapters.sql +++ b/dbt/include/sqlserver/macros/adapters.sql @@ -126,9 +126,6 @@ {% macro sqlserver__rename_relation(from_relation, to_relation) -%} {% call statement('rename_relation') -%} - {% if from_relation.database != to_relation.database %} - {{ exceptions.raise_compiler_error("Can't do cross-database rename {} -> {}".format(from_relation, to_relation)) }} - {% endif %} use [{{ to_relation.database }}]; EXEC sp_rename '{{ from_relation.schema }}.{{ from_relation.identifier }}', '{{ to_relation.identifier }}' IF EXISTS( From 82d01b40d3d88101914de270990186c757478975 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Sat, 8 May 2021 15:01:43 -0400 Subject: [PATCH 05/10] drop redundancy --- dbt/include/sqlserver/macros/adapters.sql | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/dbt/include/sqlserver/macros/adapters.sql b/dbt/include/sqlserver/macros/adapters.sql index 681e5b55..41ff1b75 100644 --- a/dbt/include/sqlserver/macros/adapters.sql +++ b/dbt/include/sqlserver/macros/adapters.sql @@ -72,18 +72,8 @@ {% endmacro %} {% macro sqlserver__drop_relation(relation) -%} - {% if relation.type == 'view' -%} - {% set object_id_type = 'V' %} - {% elif relation.type == 'table'%} - {% set object_id_type = 'U' %} - {%- else -%} invalid target name - {% endif %} {% call statement('drop_relation', auto_begin=False) -%} - use [{{ relation.database }}]; - if object_id ('{{ relation.include(database=False) }}','{{ object_id_type }}') is not null - begin - drop {{ relation.type }} {{ relation.include(database=False) }} - end + {{ sqlserver__drop_relation_script(relation) }} {%- endcall %} {% endmacro %} From 3ccaabadf2d46a058242d8739a81733b6db18753 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Sat, 8 May 2021 15:02:29 -0400 Subject: [PATCH 06/10] 3-part versions from now on --- dbt/adapters/sqlserver/__version__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dbt/adapters/sqlserver/__version__.py b/dbt/adapters/sqlserver/__version__.py index b95c1bdb..22e18d53 100644 --- a/dbt/adapters/sqlserver/__version__.py +++ b/dbt/adapters/sqlserver/__version__.py @@ -1 +1 @@ -version = '0.19.0.3' \ No newline at end of file +version = '0.19.1' \ No newline at end of file diff --git a/setup.py b/setup.py index 3b5e7560..bab24a3c 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ def _dbt_sqlserver_version(): package_version = _dbt_sqlserver_version() description = """A sqlserver adapter plugin for dbt (data build tool)""" -dbt_version = '0.19.0' +dbt_version = '0.19' # the package version should be the dbt version, with maybe some things on the # ends of it. (0.18.1 vs 0.18.1a1, 0.18.1.1, ...) if not package_version.startswith(dbt_version): From 5da086be5f4d191579a5642dc61c4946413c583e Mon Sep 17 00:00:00 2001 From: Anders Date: Sat, 8 May 2021 15:32:51 -0400 Subject: [PATCH 07/10] capitals as style guide --- dbt/include/sqlserver/macros/adapters.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dbt/include/sqlserver/macros/adapters.sql b/dbt/include/sqlserver/macros/adapters.sql index 41ff1b75..f2402d53 100644 --- a/dbt/include/sqlserver/macros/adapters.sql +++ b/dbt/include/sqlserver/macros/adapters.sql @@ -43,7 +43,7 @@ {% macro sqlserver__create_schema(relation) -%} {% call statement('create_schema') -%} - use [{{ relation.database }}]; + USE [{{ relation.database }}]; IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = '{{ relation.without_identifier().schema }}') BEGIN EXEC('CREATE SCHEMA {{ relation.without_identifier().schema }}') @@ -84,7 +84,7 @@ {% set object_id_type = 'U' %} {%- else -%} invalid target name {% endif %} - use [{{ relation.database }}]; + USE [{{ relation.database }}]; if object_id ('{{ relation.include(database=False) }}','{{ object_id_type }}') is not null begin drop {{ relation.type }} {{ relation.include(database=False) }} @@ -109,7 +109,7 @@ {% macro sqlserver__create_view_as(relation, sql) -%} - use [{{ relation.database }}]; + USE [{{ relation.database }}]; {{ sqlserver__create_view_exec(relation, sql) }} {% endmacro %} From 20f688aa51f7079046d5e1843e6482f9a94234c2 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Sat, 8 May 2021 16:27:33 -0400 Subject: [PATCH 08/10] document --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4219883e..de0612c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +### v0.19.1 + +#### features: + +- users can now delcare a model's database to be other than the one specified in the profile. This will only work for on-premise SQL Server and Azure SQL Managed Instance. [#126](https://github.com/dbt-msft/dbt-sqlserver/issues/126) thanks [@semcha](https://github.com/semcha)! + +#### under the hood + +- abandon four-part version names (`v0.19.0.2`) in favor of three-part version names because it isn't [SemVer](https://semver.org/) and it causes problems with the `~=` pip operator used dbt-synapse, a pacakge that depends on dbt-sqlserver + ### v0.19.0.2 #### fixes From caae04d46987001478b7abdea34f60d059fc490c Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Sat, 8 May 2021 16:35:42 -0400 Subject: [PATCH 09/10] typo --- test/integration/azuresql.dbtspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/azuresql.dbtspec b/test/integration/azuresql.dbtspec index ed464781..8db1cddf 100644 --- a/test/integration/azuresql.dbtspec +++ b/test/integration/azuresql.dbtspec @@ -17,7 +17,7 @@ sequences: test_dbt_ephemeral: ephemeral test_dbt_incremental: incremental test_dbt_snapshot_strategy_timestamp: snapshot_strategy_timestamp - # test_dbt_snapshot_strategy_check_cols: snapshot_strategy_check_cols + test_dbt_snapshot_strategy_check_cols: snapshot_strategy_check_cols test_dbt_data_test: data_test test_dbt_schema_test: schema_test # test_dbt_ephemeral_data_tests: data_test_ephemeral_models From e4e1f7ba897843902bbb27f131321843b11a75fa Mon Sep 17 00:00:00 2001 From: Anders Date: Sat, 8 May 2021 16:45:20 -0400 Subject: [PATCH 10/10] style: capitalized function words --- dbt/include/sqlserver/macros/adapters.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dbt/include/sqlserver/macros/adapters.sql b/dbt/include/sqlserver/macros/adapters.sql index f2402d53..b5af3044 100644 --- a/dbt/include/sqlserver/macros/adapters.sql +++ b/dbt/include/sqlserver/macros/adapters.sql @@ -34,7 +34,7 @@ {% macro sqlserver__list_schemas(database) %} {% call statement('list_schemas', fetch_result=True, auto_begin=False) -%} - use {{ database }}; + USE {{ database }}; select name as [schema] from sys.schemas {% endcall %} @@ -116,7 +116,7 @@ {% macro sqlserver__rename_relation(from_relation, to_relation) -%} {% call statement('rename_relation') -%} - use [{{ to_relation.database }}]; + USE [{{ to_relation.database }}]; EXEC sp_rename '{{ from_relation.schema }}.{{ from_relation.identifier }}', '{{ to_relation.identifier }}' IF EXISTS( SELECT * @@ -152,7 +152,7 @@ {{ sqlserver__drop_relation_script(relation) }} - use [{{ relation.database }}]; + USE [{{ relation.database }}]; EXEC('create view {{ tmp_relation.include(database=False) }} as {{ temp_view_sql }} ');