Skip to content

Commit b434592

Browse files
authored
Merge branch 'dbt-msft:master' into column-nvarchar-dtype
2 parents 05156f7 + bcf4ac9 commit b434592

File tree

14 files changed

+146
-20
lines changed

14 files changed

+146
-20
lines changed

.github/workflows/integration-tests-sqlserver.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
name: Regular
1919
strategy:
2020
matrix:
21-
python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
21+
python_version: ["3.9", "3.10", "3.11", "3.12"]
2222
msodbc_version: ["17", "18"]
2323
sqlserver_version: ["2017", "2019", "2022"]
2424
collation: ["SQL_Latin1_General_CP1_CS_AS", "SQL_Latin1_General_CP1_CI_AS"]

.github/workflows/publish-docker.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
publish-docker-client:
1313
strategy:
1414
matrix:
15-
python_version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
15+
python_version: ["3.9", "3.10", "3.11", "3.12"]
1616
docker_target: ["msodbc17", "msodbc18"]
1717
runs-on: ubuntu-latest
1818
permissions:

.github/workflows/unit-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
name: Unit tests
1919
strategy:
2020
matrix:
21-
python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
21+
python_version: ["3.9", "3.10", "3.11", "3.12"]
2222
runs-on: ubuntu-latest
2323
permissions:
2424
contents: read

dbt/adapters/sqlserver/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = "1.8.7"
1+
version = "1.9.0"

dbt/adapters/sqlserver/sqlserver_adapter.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,9 @@ def render_model_constraint(cls, constraint) -> Optional[str]:
5959
@classmethod
6060
def date_function(cls):
6161
return "getdate()"
62+
63+
def valid_incremental_strategies(self):
64+
"""The set of standard builtin strategies which this adapter supports out-of-the-box.
65+
Not used to validate custom strategies defined by end users.
66+
"""
67+
return ["append", "delete+insert", "merge", "microbatch"]

dbt/adapters/sqlserver/sqlserver_relation.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from dataclasses import dataclass, field
22
from typing import Optional, Type
33

4-
from dbt.adapters.base.relation import BaseRelation
4+
from dbt.adapters.base.relation import BaseRelation, EventTimeFilter
55
from dbt.adapters.utils import classproperty
66
from dbt_common.exceptions import DbtRuntimeError
77

@@ -49,3 +49,28 @@ def __post_init__(self):
4949

5050
def relation_max_name_length(self):
5151
return MAX_CHARACTERS_IN_IDENTIFIER
52+
53+
def _render_event_time_filtered(self, event_time_filter: EventTimeFilter) -> str:
54+
"""
55+
Returns "" if start and end are both None
56+
"""
57+
filter = ""
58+
if event_time_filter.start and event_time_filter.end:
59+
filter = (
60+
f"{event_time_filter.field_name} >="
61+
f" cast('{event_time_filter.start}' as datetimeoffset)"
62+
f" and {event_time_filter.field_name} <"
63+
f" cast('{event_time_filter.end}' as datetimeoffset)"
64+
)
65+
elif event_time_filter.start:
66+
filter = (
67+
f"{event_time_filter.field_name} >="
68+
f" cast('{event_time_filter.start}' as datetimeoffset)"
69+
)
70+
elif event_time_filter.end:
71+
filter = (
72+
f"{event_time_filter.field_name} <"
73+
f" cast('{event_time_filter.end}' as datetimeoffset)"
74+
)
75+
76+
return filter

dbt/include/sqlserver/dbt_project.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: dbt_sqlserver
2-
version: 1.8.0
2+
version: 1.9.0
33
config-version: 2
44

55
macro-paths: ["macros"]

dbt/include/sqlserver/macros/adapter/columns.sql

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
{% macro sqlserver__get_empty_subquery_sql(select_sql, select_sql_header=none) %}
2+
{% if select_sql.strip().lower().startswith('with') %}
3+
{{ select_sql }}
4+
{% else -%}
5+
select * from (
6+
{{ select_sql }}
7+
) dbt_sbq_tmp
8+
where 1 = 0
9+
{%- endif -%}
10+
11+
{% endmacro %}
12+
13+
{% macro sqlserver__get_columns_in_query(select_sql) %}
14+
{% set query_label = apply_label() %}
15+
{% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}
16+
select TOP 0 * from (
17+
{{ select_sql }}
18+
) as __dbt_sbq
19+
where 0 = 1
20+
{{ query_label }}
21+
{% endcall %}
22+
23+
{{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}
24+
{% endmacro %}
25+
126
{% macro sqlserver__alter_column_type(relation, column_name, new_column_type) %}
227

328
{%- set tmp_column = column_name + "__dbt_alter" -%}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{% macro sqlserver__get_incremental_microbatch_sql(arg_dict) %}
2+
{%- set target = arg_dict["target_relation"] -%}
3+
{%- set source = arg_dict["temp_relation"] -%}
4+
{%- set dest_columns = arg_dict["dest_columns"] -%}
5+
{%- set incremental_predicates = [] if arg_dict.get('incremental_predicates') is none else arg_dict.get('incremental_predicates') -%}
6+
7+
{#-- Add additional incremental_predicates to filter for batch --#}
8+
{% if model.config.get("__dbt_internal_microbatch_event_time_start") -%}
9+
{{ log("incremental append event start time > DBT_INTERNAL_TARGET." ~ model.config.event_time ~ " >= cast('" ~ model.config.__dbt_internal_microbatch_event_time_start ~ "' as datetimeoffset)") }}
10+
{% do incremental_predicates.append("DBT_INTERNAL_TARGET." ~ model.config.event_time ~ " >= cast('" ~ model.config.__dbt_internal_microbatch_event_time_start ~ "' as datetimeoffset)") %}
11+
{% endif %}
12+
{% if model.config.__dbt_internal_microbatch_event_time_end -%}
13+
{{ log("incremental append event end time < DBT_INTERNAL_TARGET." ~ model.config.event_time ~ " < cast('" ~ model.config.__dbt_internal_microbatch_event_time_end ~ "' as datetimeoffset)") }}
14+
{% do incremental_predicates.append("DBT_INTERNAL_TARGET." ~ model.config.event_time ~ " < cast('" ~ model.config.__dbt_internal_microbatch_event_time_end ~ "' as datetimeoffset)") %}
15+
{% endif %}
16+
{% do arg_dict.update({'incremental_predicates': incremental_predicates}) %}
17+
18+
delete DBT_INTERNAL_TARGET from {{ target }} AS DBT_INTERNAL_TARGET
19+
where (
20+
{% for predicate in incremental_predicates %}
21+
{%- if not loop.first %}and {% endif -%} {{ predicate }}
22+
{% endfor %}
23+
);
24+
25+
{%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute="name")) -%}
26+
insert into {{ target }} ({{ dest_cols_csv }})
27+
(
28+
select {{ dest_cols_csv }}
29+
from {{ source }}
30+
)
31+
{% endmacro %}

dev_requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
dbt-tests-adapter>=1.8.0, <1.9.0
2+
dbt-tests-adapter>=1.9.0,<2.0
33

44
ruff
55
black==24.8.0

0 commit comments

Comments
 (0)