From 77c03be71ded43b938c3a5c2fe8b6e026bd2276c Mon Sep 17 00:00:00 2001 From: Elazar Lachkar Date: Tue, 26 May 2026 15:14:59 +0300 Subject: [PATCH 1/5] fix: add explicit sqlserver__ dispatch to T-SQL fabric macros dbt-sqlserver removed dbt-fabric from its adapter dispatch chain, so sqlserver targets no longer inherit fabric__ macros. Delegate sqlserver__ to the existing T-SQL implementations to fix CI failures such as Invalid column name 'True' when building dbt_invocations on SQL Server. CORE-877 Co-authored-by: Cursor --- .../macros/schema_utils/list_schemas.sql | 4 + .../macros/schema_utils/schema_exists.sql | 4 + .../edr/system/system_utils/empty_table.sql | 3 +- .../sqlserver_tsql_dispatch.sql | 233 ++++++++++++++++++ .../table_operations/create_temp_table.sql | 6 +- .../table_operations/replace_table_data.sql | 5 +- 6 files changed, 249 insertions(+), 6 deletions(-) create mode 100644 macros/utils/cross_db_utils/sqlserver_tsql_dispatch.sql diff --git a/integration_tests/dbt_project/macros/schema_utils/list_schemas.sql b/integration_tests/dbt_project/macros/schema_utils/list_schemas.sql index 7e1afe0c7..240018f7b 100644 --- a/integration_tests/dbt_project/macros/schema_utils/list_schemas.sql +++ b/integration_tests/dbt_project/macros/schema_utils/list_schemas.sql @@ -41,6 +41,10 @@ {% do return(schemas) %} {% endmacro %} +{% macro sqlserver__edr_list_schemas(database) %} + {% do return(fabric__edr_list_schemas(database)) %} +{% endmacro %} + {% macro clickhouse__edr_list_schemas(database) %} {% set results = run_query("SHOW DATABASES") %} {% set schemas = [] %} diff --git a/integration_tests/dbt_project/macros/schema_utils/schema_exists.sql b/integration_tests/dbt_project/macros/schema_utils/schema_exists.sql index eb65dba34..d28cdaa39 100644 --- a/integration_tests/dbt_project/macros/schema_utils/schema_exists.sql +++ b/integration_tests/dbt_project/macros/schema_utils/schema_exists.sql @@ -49,6 +49,10 @@ {% do return(result | length > 0) %} {% endmacro %} +{% macro sqlserver__edr_schema_exists(database, schema_name) %} + {% do return(fabric__edr_schema_exists(database, schema_name)) %} +{% endmacro %} + {% macro clickhouse__edr_schema_exists(database, schema_name) %} {% set safe_schema = schema_name | replace("'", "''") %} {% set result = run_query( diff --git a/macros/edr/system/system_utils/empty_table.sql b/macros/edr/system/system_utils/empty_table.sql index 8a4deea37..a66a1e4c2 100644 --- a/macros/edr/system/system_utils/empty_table.sql +++ b/macros/edr/system/system_utils/empty_table.sql @@ -240,7 +240,8 @@ {% endmacro %} {# T-SQL does not have boolean literals True/False. - Use 1 which can be cast to bit. #} + Use 1 which can be cast to bit. sqlserver__ delegates here via + sqlserver_tsql_dispatch.sql. #} {% macro fabric__dummy_values() %} {%- set dummy_values = { "string": "dummy_string", diff --git a/macros/utils/cross_db_utils/sqlserver_tsql_dispatch.sql b/macros/utils/cross_db_utils/sqlserver_tsql_dispatch.sql new file mode 100644 index 000000000..6c810e67e --- /dev/null +++ b/macros/utils/cross_db_utils/sqlserver_tsql_dispatch.sql @@ -0,0 +1,233 @@ +{#- + dbt-sqlserver no longer declares dbt-fabric as a dispatch parent (dbt-msft/dbt-sqlserver#628, + merged May 2026). T-SQL-safe implementations live in fabric__ macros; sqlserver__ delegates + to them explicitly so both adapters share the same behavior without relying on adapter deps. + + Do not add sqlserver__ overrides here for macros that already have dedicated sqlserver__ + implementations (e.g. get_normalized_data_type, generate_elementary_profile_args). +-#} +{% macro sqlserver__dummy_values() %} + {% do return(elementary.fabric__dummy_values()) %} +{% endmacro %} + +{% macro sqlserver__edr_type_bool() %} + {% do return(elementary.fabric__edr_type_bool()) %} +{% endmacro %} + +{% macro sqlserver__edr_type_string() %} + {% do return(elementary.fabric__edr_type_string()) %} +{% endmacro %} + +{% macro sqlserver__edr_type_long_string() %} + {% do return(elementary.fabric__edr_type_long_string()) %} +{% endmacro %} + +{% macro sqlserver__edr_type_timestamp() %} + {{ elementary.fabric__edr_type_timestamp() }} +{% endmacro %} + +{% macro sqlserver__edr_boolean_literal(value) %} + {{ elementary.fabric__edr_boolean_literal(value) }} +{% endmacro %} + +{% macro sqlserver__edr_is_true(expr) %} + {{ elementary.fabric__edr_is_true(expr) }} +{% endmacro %} + +{% macro sqlserver__edr_is_false(expr) %} + {{ elementary.fabric__edr_is_false(expr) }} +{% endmacro %} + +{% macro sqlserver__is_tsql() %} + {% do return(elementary.fabric__is_tsql()) %} +{% endmacro %} + +{% macro sqlserver__data_type_list(data_type) %} + {% do return(elementary.fabric__data_type_list(data_type)) %} +{% endmacro %} + +{% macro sqlserver__try_cast_column_to_timestamp(table_relation, timestamp_column) %} + {{ + elementary.fabric__try_cast_column_to_timestamp( + table_relation, timestamp_column + ) + }} +{% endmacro %} + +{% macro sqlserver__replace_table_data(relation, rows) %} + {% do elementary.fabric__replace_table_data(relation, rows) %} +{% endmacro %} + +{% macro sqlserver__edr_make_temp_relation(base_relation, suffix) %} + {% do return(elementary.fabric__edr_make_temp_relation(base_relation, suffix)) %} +{% endmacro %} + +{% macro sqlserver__escape_special_chars(string_value) %} + {{- elementary.fabric__escape_special_chars(string_value) -}} +{% endmacro %} + +{% macro sqlserver__insert_as_select(table_relation, select_query) %} + {% do elementary.fabric__insert_as_select(table_relation, select_query) %} +{% endmacro %} + +{% macro sqlserver__get_relation_max_name_length(temporary, relation, sql_query) %} + {% do return( + elementary.fabric__get_relation_max_name_length( + temporary, relation, sql_query + ) + ) %} +{% endmacro %} + +{% macro sqlserver__create_temp_table( + database_name, schema_name, table_name, sql_query +) %} + {% do elementary.fabric__create_temp_table( + database_name, schema_name, table_name, sql_query + ) %} +{% endmacro %} + +{% macro sqlserver__edr_to_char(column, format) %} + {{ elementary.fabric__edr_to_char(column, format) }} +{% endmacro %} + +{% macro sqlserver__edr_timeadd(date_part, number, timestamp_expression) %} + {{ elementary.fabric__edr_timeadd(date_part, number, timestamp_expression) }} +{% endmacro %} + +{% macro sqlserver__edr_time_trunc(date_part, date_expression) %} + {{ elementary.fabric__edr_time_trunc(date_part, date_expression) }} +{% endmacro %} + +{% macro sqlserver__edr_multi_value_in(source_cols, target_cols, target_table) %} + {{- + elementary.fabric__edr_multi_value_in( + source_cols, target_cols, target_table + ) + -}} +{% endmacro %} + +{% macro sqlserver__get_default_incremental_strategy() %} + {% do return(elementary.fabric__get_default_incremental_strategy()) %} +{% endmacro %} + +{% macro sqlserver__edr_hour_of_week_expression(date_expr) %} + {{ elementary.fabric__edr_hour_of_week_expression(date_expr) }} +{% endmacro %} + +{% macro sqlserver__edr_hour_of_day_expression(date_expr) %} + {{ elementary.fabric__edr_hour_of_day_expression(date_expr) }} +{% endmacro %} + +{% macro sqlserver__edr_day_of_week_expression(date_expr) %} + {{ elementary.fabric__edr_day_of_week_expression(date_expr) }} +{% endmacro %} + +{% macro sqlserver__edr_datediff(first_date, second_date, date_part) %} + {{ elementary.fabric__edr_datediff(first_date, second_date, date_part) }} +{% endmacro %} + +{% macro sqlserver__edr_dateadd(datepart, interval, from_date_or_timestamp) %} + {{ elementary.fabric__edr_dateadd(datepart, interval, from_date_or_timestamp) }} +{% endmacro %} + +{% macro sqlserver__edr_date_trunc(datepart, date_expression) %} + {{ elementary.fabric__edr_date_trunc(datepart, date_expression) }} +{% endmacro %} + +{% macro sqlserver__edr_current_timestamp() -%} + {{ elementary.fabric__edr_current_timestamp() }} +{%- endmacro %} + +{% macro sqlserver__edr_current_timestamp_in_utc() -%} + {{ elementary.fabric__edr_current_timestamp_in_utc() }} +{%- endmacro %} + +{% macro sqlserver__edr_concat(fields) %} + {{ elementary.fabric__edr_concat(fields) }} +{% endmacro %} + +{% macro sqlserver__full_name_split(part_name) %} + {% do return(elementary.fabric__full_name_split(part_name)) %} +{% endmacro %} + +{% macro sqlserver__complete_buckets_cte( + time_bucket, + bucket_end_expr, + min_bucket_start_expr, + max_bucket_end_expr +) -%} + {{- + elementary.fabric__complete_buckets_cte( + time_bucket, + bucket_end_expr, + min_bucket_start_expr, + max_bucket_end_expr, + ) + -}} +{%- endmacro %} + +{% macro sqlserver__get_failed_row_count_calc_query(failed_row_count_calc) %} + {% do return( + elementary.fabric__get_failed_row_count_calc_query( + failed_row_count_calc + ) + ) %} +{% endmacro %} + +{% macro sqlserver__get_column_changes_from_baseline_cur( + model_relation, full_table_name, model_baseline_relation +) %} + {% do elementary.fabric__get_column_changes_from_baseline_cur( + model_relation, full_table_name, model_baseline_relation + ) %} +{% endmacro %} + +{% macro sqlserver___bucket_end_freshness_expr() %} + {{ elementary.fabric___bucket_end_freshness_expr() }} +{% endmacro %} + +{% macro sqlserver__freshness_metric_query(metric, metric_properties) %} + {{ elementary.fabric__freshness_metric_query(metric, metric_properties) }} +{% endmacro %} + +{% macro sqlserver__get_latest_full_refresh(model_node) %} + {{ elementary.fabric__get_latest_full_refresh(model_node) }} +{% endmacro %} + +{% macro sqlserver__max_length(column_name) -%} + {{ elementary.fabric__max_length(column_name) }} +{%- endmacro %} + +{% macro sqlserver__min_length(column_name) -%} + {{ elementary.fabric__min_length(column_name) }} +{%- endmacro %} + +{% macro sqlserver__average_length(column_name) -%} + {{ elementary.fabric__average_length(column_name) }} +{%- endmacro %} + +{% macro sqlserver__standard_deviation(column_name) -%} + {{ elementary.fabric__standard_deviation(column_name) }} +{%- endmacro %} + +{% macro sqlserver__variance(column_name) -%} + {{ elementary.fabric__variance(column_name) }} +{%- endmacro %} + +{%- macro sqlserver__get_anomaly_query(flattened_test=none) -%} + {{- elementary.fabric__get_anomaly_query(flattened_test) -}} +{%- endmacro -%} + +{%- macro sqlserver__get_anomaly_query_for_dimension_anomalies(flattened_test=none) -%} + {{- elementary.fabric__get_anomaly_query_for_dimension_anomalies(flattened_test) -}} +{%- endmacro -%} + +{% macro sqlserver__query_test_result_rows( + sample_limit=none, ignore_passed_tests=false +) %} + {% do return( + elementary.fabric__query_test_result_rows( + sample_limit, ignore_passed_tests + ) + ) %} +{% endmacro %} diff --git a/macros/utils/table_operations/create_temp_table.sql b/macros/utils/table_operations/create_temp_table.sql index 95f68093c..d255c119d 100644 --- a/macros/utils/table_operations/create_temp_table.sql +++ b/macros/utils/table_operations/create_temp_table.sql @@ -38,9 +38,9 @@ We use a regular table (not #temp) because the EXEC scope isolation of SQL Server makes #temp tables invisible to the caller. - sqlserver__ is not needed here because dbt-sqlserver declares - dependencies=["fabric"], so this macro is found automatically - via the dispatch chain: sqlserver__ → fabric__ → default__. + T-SQL implementations live in fabric__ macros; sqlserver__ delegates + explicitly (see sqlserver_tsql_dispatch.sql) because dbt-sqlserver no + longer includes fabric in its adapter dispatch chain. #} {% set table_exists, table_relation = dbt.get_or_create_relation( database=database_name, diff --git a/macros/utils/table_operations/replace_table_data.sql b/macros/utils/table_operations/replace_table_data.sql index c55dba998..a6bbf8f55 100644 --- a/macros/utils/table_operations/replace_table_data.sql +++ b/macros/utils/table_operations/replace_table_data.sql @@ -150,8 +150,9 @@ {% endmacro %} {# Fabric / SQL Server - truncate and insert (non-atomic). - sqlserver dispatches through fabric via the chain: sqlserver__ -> fabric__ -> default__, - so this covers both adapters. #} + T-SQL implementations live in fabric__ macros; sqlserver__ delegates + explicitly (see sqlserver_tsql_dispatch.sql) because dbt-sqlserver no + longer includes fabric in its adapter dispatch chain. #} {% macro fabric__replace_table_data(relation, rows) %} {% do dbt.truncate_relation(relation) %} {% do elementary.insert_rows( From 007b5e09d7ae9fcd24cffad5ddd5aaa1be86e6d7 Mon Sep 17 00:00:00 2001 From: Elazar Lachkar Date: Tue, 26 May 2026 15:40:54 +0300 Subject: [PATCH 2/5] refactor: colocate sqlserver__ T-SQL delegates next to fabric__ macros Remove the central sqlserver_tsql_dispatch.sql file and add sqlserver__ delegates beside each fabric__ implementation so future developers can see SQL Server behavior in context. Co-authored-by: Cursor --- .../monitors/column_numeric_monitors.sql | 8 + .../monitors/column_string_monitors.sql | 12 + .../get_latest_full_refresh.sql | 4 + .../monitors_query/table_monitoring_query.sql | 8 + .../get_columns_changes_query.sql | 8 + .../test/failed_row_count.sql | 4 + macros/edr/materializations/test/test.sql | 6 + .../edr/system/system_utils/buckets_cte.sql | 16 ++ .../edr/system/system_utils/empty_table.sql | 7 +- macros/edr/system/system_utils/full_names.sql | 4 + .../system/system_utils/get_config_var.sql | 16 ++ .../tests/test_utils/get_anomaly_query.sql | 8 + macros/utils/cross_db_utils/concat.sql | 4 + .../cross_db_utils/current_timestamp.sql | 8 + macros/utils/cross_db_utils/date_trunc.sql | 4 + macros/utils/cross_db_utils/dateadd.sql | 4 + macros/utils/cross_db_utils/datediff.sql | 4 + macros/utils/cross_db_utils/day_of_week.sql | 4 + macros/utils/cross_db_utils/hour_of_day.sql | 4 + macros/utils/cross_db_utils/hour_of_week.sql | 4 + .../cross_db_utils/incremental_strategy.sql | 4 + .../utils/cross_db_utils/multi_value_in.sql | 8 + .../sqlserver_tsql_dispatch.sql | 233 ------------------ macros/utils/cross_db_utils/time_trunc.sql | 4 + macros/utils/cross_db_utils/timeadd.sql | 4 + macros/utils/cross_db_utils/to_char.sql | 4 + macros/utils/data_types/data_type.sql | 16 ++ macros/utils/data_types/data_type_list.sql | 4 + .../try_cast_column_to_timestamp.sql | 8 + .../table_operations/create_temp_table.sql | 17 +- .../get_relation_max_length.sql | 8 + .../table_operations/insert_as_select.sql | 4 + macros/utils/table_operations/insert_rows.sql | 4 + .../table_operations/make_temp_relation.sql | 4 + .../table_operations/replace_table_data.sql | 9 +- 35 files changed, 227 insertions(+), 241 deletions(-) delete mode 100644 macros/utils/cross_db_utils/sqlserver_tsql_dispatch.sql diff --git a/macros/edr/data_monitoring/monitors/column_numeric_monitors.sql b/macros/edr/data_monitoring/monitors/column_numeric_monitors.sql index 7eb82c77c..93a4db267 100644 --- a/macros/edr/data_monitoring/monitors/column_numeric_monitors.sql +++ b/macros/edr/data_monitoring/monitors/column_numeric_monitors.sql @@ -83,6 +83,14 @@ var(cast({{ column_name }} as {{ elementary.edr_type_float() }})) {%- endmacro %} +{% macro sqlserver__standard_deviation(column_name) -%} + {{ elementary.fabric__standard_deviation(column_name) }} +{%- endmacro %} + +{% macro sqlserver__variance(column_name) -%} + {{ elementary.fabric__variance(column_name) }} +{%- endmacro %} + {% macro sum(column_name) -%} sum(cast({{ column_name }} as {{ elementary.edr_type_float() }})) {%- endmacro %} diff --git a/macros/edr/data_monitoring/monitors/column_string_monitors.sql b/macros/edr/data_monitoring/monitors/column_string_monitors.sql index a06036ed3..4629f125b 100644 --- a/macros/edr/data_monitoring/monitors/column_string_monitors.sql +++ b/macros/edr/data_monitoring/monitors/column_string_monitors.sql @@ -24,6 +24,18 @@ avg(len({{ column_name }})) {%- endmacro %} +{% macro sqlserver__max_length(column_name) -%} + {{ elementary.fabric__max_length(column_name) }} +{%- endmacro %} + +{% macro sqlserver__min_length(column_name) -%} + {{ elementary.fabric__min_length(column_name) }} +{%- endmacro %} + +{% macro sqlserver__average_length(column_name) -%} + {{ elementary.fabric__average_length(column_name) }} +{%- endmacro %} + {% macro missing_count(column_name) %} coalesce( sum( diff --git a/macros/edr/data_monitoring/monitors_query/get_latest_full_refresh.sql b/macros/edr/data_monitoring/monitors_query/get_latest_full_refresh.sql index 7c8e563aa..a60669a1c 100644 --- a/macros/edr/data_monitoring/monitors_query/get_latest_full_refresh.sql +++ b/macros/edr/data_monitoring/monitors_query/get_latest_full_refresh.sql @@ -30,3 +30,7 @@ {% endset %} {% do return(elementary.result_value(query)) %} {% endmacro %} + +{% macro sqlserver__get_latest_full_refresh(model_node) %} + {{ elementary.fabric__get_latest_full_refresh(model_node) }} +{% endmacro %} diff --git a/macros/edr/data_monitoring/monitors_query/table_monitoring_query.sql b/macros/edr/data_monitoring/monitors_query/table_monitoring_query.sql index a16169c61..0805ffc0d 100644 --- a/macros/edr/data_monitoring/monitors_query/table_monitoring_query.sql +++ b/macros/edr/data_monitoring/monitors_query/table_monitoring_query.sql @@ -406,6 +406,10 @@ }} {% endmacro %} +{% macro sqlserver___bucket_end_freshness_expr() %} + {{ elementary.fabric___bucket_end_freshness_expr() }} +{% endmacro %} + {#-- Helper: final SELECT columns for freshness metric --#} {% macro _freshness_final_select(metric) %} select @@ -545,6 +549,10 @@ where row_num = 1 {% endmacro %} +{% macro sqlserver__freshness_metric_query(metric, metric_properties) %} + {{ elementary.fabric__freshness_metric_query(metric, metric_properties) }} +{% endmacro %} + {% macro event_freshness_metric_query(metric, metric_properties) %} {{ return( diff --git a/macros/edr/data_monitoring/schema_changes/get_columns_changes_query.sql b/macros/edr/data_monitoring/schema_changes/get_columns_changes_query.sql index 4f3b9f49c..302af7e6d 100644 --- a/macros/edr/data_monitoring/schema_changes/get_columns_changes_query.sql +++ b/macros/edr/data_monitoring/schema_changes/get_columns_changes_query.sql @@ -313,3 +313,11 @@ on (lower(cs.column_name) = lower(bl.column_name)) where lower(cs.full_table_name) = lower('{{ full_table_name }}') {% endmacro %} + +{% macro sqlserver__get_column_changes_from_baseline_cur( + model_relation, full_table_name, model_baseline_relation +) %} + {% do elementary.fabric__get_column_changes_from_baseline_cur( + model_relation, full_table_name, model_baseline_relation + ) %} +{% endmacro %} diff --git a/macros/edr/materializations/test/failed_row_count.sql b/macros/edr/materializations/test/failed_row_count.sql index a7a23ca0d..6b4df8646 100644 --- a/macros/edr/materializations/test/failed_row_count.sql +++ b/macros/edr/materializations/test/failed_row_count.sql @@ -72,3 +72,7 @@ as {{ elementary.escape_reserved_keywords("count") }} from {{ tmp_relation }} {% endmacro %} + +{% macro sqlserver__get_failed_row_count_calc_query(failed_row_count_calc) %} + {{ elementary.fabric__get_failed_row_count_calc_query(failed_row_count_calc) }} +{% endmacro %} diff --git a/macros/edr/materializations/test/test.sql b/macros/edr/materializations/test/test.sql index 71fe21d5f..dd471322a 100644 --- a/macros/edr/materializations/test/test.sql +++ b/macros/edr/materializations/test/test.sql @@ -280,6 +280,12 @@ {% do return(result) %} {% endmacro %} +{% macro sqlserver__query_test_result_rows( + sample_limit=none, ignore_passed_tests=false +) %} + {{ elementary.fabric__query_test_result_rows(sample_limit, ignore_passed_tests) }} +{% endmacro %} + {% macro get_columns_to_exclude_from_sampling(flattened_test) %} {% set columns_to_exclude = [] %} diff --git a/macros/edr/system/system_utils/buckets_cte.sql b/macros/edr/system/system_utils/buckets_cte.sql index 9902fdb87..a04b62bc4 100644 --- a/macros/edr/system/system_utils/buckets_cte.sql +++ b/macros/edr/system/system_utils/buckets_cte.sql @@ -288,6 +288,22 @@ {{ return(complete_buckets_cte) }} {% endmacro %} +{% macro sqlserver__complete_buckets_cte( + time_bucket, + bucket_end_expr, + min_bucket_start_expr, + max_bucket_end_expr +) -%} + {{- + elementary.fabric__complete_buckets_cte( + time_bucket, + bucket_end_expr, + min_bucket_start_expr, + max_bucket_end_expr, + ) + -}} +{%- endmacro %} + {% macro dremio__complete_buckets_cte( time_bucket, bucket_end_expr, min_bucket_start_expr, max_bucket_end_expr ) %} diff --git a/macros/edr/system/system_utils/empty_table.sql b/macros/edr/system/system_utils/empty_table.sql index a66a1e4c2..26d20beae 100644 --- a/macros/edr/system/system_utils/empty_table.sql +++ b/macros/edr/system/system_utils/empty_table.sql @@ -240,8 +240,7 @@ {% endmacro %} {# T-SQL does not have boolean literals True/False. - Use 1 which can be cast to bit. sqlserver__ delegates here via - sqlserver_tsql_dispatch.sql. #} + Use 1 which can be cast to bit. #} {% macro fabric__dummy_values() %} {%- set dummy_values = { "string": "dummy_string", @@ -254,3 +253,7 @@ } %} {{ return(dummy_values) }} {% endmacro %} + +{% macro sqlserver__dummy_values() %} + {% do return(elementary.fabric__dummy_values()) %} +{% endmacro %} diff --git a/macros/edr/system/system_utils/full_names.sql b/macros/edr/system/system_utils/full_names.sql index 6cdd1e6b6..404205e86 100644 --- a/macros/edr/system/system_utils/full_names.sql +++ b/macros/edr/system/system_utils/full_names.sql @@ -116,6 +116,10 @@ cast(replace(parsename(full_table_name, {{ part_index }}), '"', '') as varchar(256)) as {{ part_name }} {% endmacro %} +{% macro sqlserver__full_name_split(part_name) %} + {{ elementary.fabric__full_name_split(part_name) }} +{% endmacro %} + {% macro bigquery__full_name_split(part_name) %} {%- if part_name == "database_name" -%} {%- set part_index = 0 %} {%- elif part_name == "schema_name" -%} {%- set part_index = 1 %} diff --git a/macros/edr/system/system_utils/get_config_var.sql b/macros/edr/system/system_utils/get_config_var.sql index 391ce25d4..837d87a9e 100644 --- a/macros/edr/system/system_utils/get_config_var.sql +++ b/macros/edr/system/system_utils/get_config_var.sql @@ -49,6 +49,10 @@ {% if value %} cast(1 as bit) {% else %} cast(0 as bit){% endif %} {% endmacro %} +{% macro sqlserver__edr_boolean_literal(value) %} + {{ elementary.fabric__edr_boolean_literal(value) }} +{% endmacro %} + {# Render a SQL condition as a boolean column value. Produces: case when then TRUE else FALSE end On T-SQL, TRUE/FALSE become cast(1/0 as bit). @@ -70,6 +74,10 @@ {% macro fabric__edr_is_true(expr) %} {{ expr }} = cast(1 as bit) {% endmacro %} +{% macro sqlserver__edr_is_true(expr) %} + {{ elementary.fabric__edr_is_true(expr) }} +{% endmacro %} + {# Compare a SQL expression to FALSE. Works across all dialects including T-SQL (bit). #} {% macro edr_is_false(expr) %} {{ return(adapter.dispatch("edr_is_false", "elementary")(expr)) }} @@ -79,6 +87,10 @@ {% macro fabric__edr_is_false(expr) %} {{ expr }} = cast(0 as bit) {% endmacro %} +{% macro sqlserver__edr_is_false(expr) %} + {{ elementary.fabric__edr_is_false(expr) }} +{% endmacro %} + {# Returns true if the current adapter uses T-SQL dialect (Fabric or SQL Server). #} {% macro is_tsql() %} {{ return(adapter.dispatch("is_tsql", "elementary")()) }} @@ -88,6 +100,10 @@ {% macro fabric__is_tsql() %} {{ return(true) }} {% endmacro %} +{% macro sqlserver__is_tsql() %} + {% do return(elementary.fabric__is_tsql()) %} +{% endmacro %} + {% macro get_default_config(var_name) %} {{ return(adapter.dispatch("get_default_config", "elementary")()) }} {%- endmacro -%} diff --git a/macros/edr/tests/test_utils/get_anomaly_query.sql b/macros/edr/tests/test_utils/get_anomaly_query.sql index 5ab85942f..1046355ac 100644 --- a/macros/edr/tests/test_utils/get_anomaly_query.sql +++ b/macros/edr/tests/test_utils/get_anomaly_query.sql @@ -23,6 +23,10 @@ -}} {%- endmacro -%} +{%- macro sqlserver__get_anomaly_query(flattened_test=none) -%} + {{- elementary.fabric__get_anomaly_query(flattened_test) -}} +{%- endmacro -%} + {%- macro get_anomaly_query_for_dimension_anomalies(flattened_test=none) -%} {{- return( @@ -64,6 +68,10 @@ -}} {%- endmacro -%} +{%- macro sqlserver__get_anomaly_query_for_dimension_anomalies(flattened_test=none) -%} + {{- elementary.fabric__get_anomaly_query_for_dimension_anomalies(flattened_test) -}} +{%- endmacro -%} + {% macro get_read_anomaly_scores_query( flattened_test=none, additional_where=none, diff --git a/macros/utils/cross_db_utils/concat.sql b/macros/utils/cross_db_utils/concat.sql index 625cea9ab..02bae20f8 100644 --- a/macros/utils/cross_db_utils/concat.sql +++ b/macros/utils/cross_db_utils/concat.sql @@ -13,3 +13,7 @@ {% macro fabric__edr_concat(fields) %} cast({{ dbt.concat(fields) }} as varchar(4000)) {% endmacro %} + +{% macro sqlserver__edr_concat(fields) %} + {{ elementary.fabric__edr_concat(fields) }} +{% endmacro %} diff --git a/macros/utils/cross_db_utils/current_timestamp.sql b/macros/utils/cross_db_utils/current_timestamp.sql index e438feae6..2525d3668 100644 --- a/macros/utils/cross_db_utils/current_timestamp.sql +++ b/macros/utils/cross_db_utils/current_timestamp.sql @@ -92,6 +92,14 @@ cast(sysutcdatetime() as datetime2(6)) {%- endmacro -%} +{% macro sqlserver__edr_current_timestamp() -%} + {{ elementary.fabric__edr_current_timestamp() }} +{%- endmacro -%} + +{% macro sqlserver__edr_current_timestamp_in_utc() -%} + {{ elementary.fabric__edr_current_timestamp_in_utc() }} +{%- endmacro -%} + {% macro fabricspark__edr_current_timestamp() %} {{ return(elementary.spark__edr_current_timestamp()) }} {% endmacro %} diff --git a/macros/utils/cross_db_utils/date_trunc.sql b/macros/utils/cross_db_utils/date_trunc.sql index 74844e59b..11e3b7597 100644 --- a/macros/utils/cross_db_utils/date_trunc.sql +++ b/macros/utils/cross_db_utils/date_trunc.sql @@ -24,3 +24,7 @@ {% macro fabric__edr_date_trunc(datepart, date_expression) %} datetrunc({{ datepart }}, {{ date_expression }}) {% endmacro %} + +{% macro sqlserver__edr_date_trunc(datepart, date_expression) %} + {{ elementary.fabric__edr_date_trunc(datepart, date_expression) }} +{% endmacro %} diff --git a/macros/utils/cross_db_utils/dateadd.sql b/macros/utils/cross_db_utils/dateadd.sql index b1226e258..ab02edd7a 100644 --- a/macros/utils/cross_db_utils/dateadd.sql +++ b/macros/utils/cross_db_utils/dateadd.sql @@ -28,6 +28,10 @@ dateadd({{ datepart }}, {{ interval }}, {{ from_date_or_timestamp }}) {% endmacro %} +{% macro sqlserver__edr_dateadd(datepart, interval, from_date_or_timestamp) %} + {{ elementary.fabric__edr_dateadd(datepart, interval, from_date_or_timestamp) }} +{% endmacro %} + {% macro dremio__edr_dateadd(datepart, interval, from_date_or_timestamp) %} {% set datepart = datepart | lower %} {% if datepart == "year" %} diff --git a/macros/utils/cross_db_utils/datediff.sql b/macros/utils/cross_db_utils/datediff.sql index 922e703c7..ac02a4180 100644 --- a/macros/utils/cross_db_utils/datediff.sql +++ b/macros/utils/cross_db_utils/datediff.sql @@ -280,6 +280,10 @@ datediff({{ date_part }}, {{ first_date }}, {{ second_date }}) {% endmacro %} +{% macro sqlserver__edr_datediff(first_date, second_date, date_part) %} + {{ elementary.fabric__edr_datediff(first_date, second_date, date_part) }} +{% endmacro %} + {% macro dremio__edr_datediff(first_date, second_date, date_part) %} {%- set seconds_diff_expr -%} cast(unix_timestamp(substr(cast(({{ second_date }}) as varchar), 1, 19)) - diff --git a/macros/utils/cross_db_utils/day_of_week.sql b/macros/utils/cross_db_utils/day_of_week.sql index 88bec3caa..137e863c8 100644 --- a/macros/utils/cross_db_utils/day_of_week.sql +++ b/macros/utils/cross_db_utils/day_of_week.sql @@ -71,6 +71,10 @@ cast(datename(weekday, {{ date_expr }}) as varchar(30)) {% endmacro %} +{% macro sqlserver__edr_day_of_week_expression(date_expr) %} + {{ elementary.fabric__edr_day_of_week_expression(date_expr) }} +{% endmacro %} + -- fmt: off {% macro clickhouse__edr_day_of_week_expression(date_expr) %} formatDateTime({{ date_expr }}, '%W') diff --git a/macros/utils/cross_db_utils/hour_of_day.sql b/macros/utils/cross_db_utils/hour_of_day.sql index 395bfbd86..ff118876d 100644 --- a/macros/utils/cross_db_utils/hour_of_day.sql +++ b/macros/utils/cross_db_utils/hour_of_day.sql @@ -32,3 +32,7 @@ {% macro fabric__edr_hour_of_day_expression(date_expr) %} datepart(hour, {{ date_expr }}) {% endmacro %} + +{% macro sqlserver__edr_hour_of_day_expression(date_expr) %} + {{ elementary.fabric__edr_hour_of_day_expression(date_expr) }} +{% endmacro %} diff --git a/macros/utils/cross_db_utils/hour_of_week.sql b/macros/utils/cross_db_utils/hour_of_week.sql index 632c503bf..e5c96ed10 100644 --- a/macros/utils/cross_db_utils/hour_of_week.sql +++ b/macros/utils/cross_db_utils/hour_of_week.sql @@ -96,6 +96,10 @@ ) {% endmacro %} +{% macro sqlserver__edr_hour_of_week_expression(date_expr) %} + {{ elementary.fabric__edr_hour_of_week_expression(date_expr) }} +{% endmacro %} + {% macro duckdb__edr_hour_of_week_expression(date_expr) %} concat( cast(dayname({{ date_expr }}) as {{ elementary.edr_type_string() }}), diff --git a/macros/utils/cross_db_utils/incremental_strategy.sql b/macros/utils/cross_db_utils/incremental_strategy.sql index dfa6e292a..ab12bb8e6 100644 --- a/macros/utils/cross_db_utils/incremental_strategy.sql +++ b/macros/utils/cross_db_utils/incremental_strategy.sql @@ -24,6 +24,10 @@ {% do return("merge") %} {% endmacro %} +{%- macro sqlserver__get_default_incremental_strategy() %} + {% do return(elementary.fabric__get_default_incremental_strategy()) %} +{% endmacro %} + {%- macro fabricspark__get_default_incremental_strategy() %} {{ return(elementary.spark__get_default_incremental_strategy()) }} {% endmacro %} diff --git a/macros/utils/cross_db_utils/multi_value_in.sql b/macros/utils/cross_db_utils/multi_value_in.sql index cfb1cb0c5..140c4c626 100644 --- a/macros/utils/cross_db_utils/multi_value_in.sql +++ b/macros/utils/cross_db_utils/multi_value_in.sql @@ -53,6 +53,14 @@ ) {%- endmacro -%} +{%- macro sqlserver__edr_multi_value_in(source_cols, target_cols, target_table) -%} + {{- + elementary.fabric__edr_multi_value_in( + source_cols, target_cols, target_table + ) + -}} +{%- endmacro -%} + {%- macro redshift__edr_multi_value_in(source_cols, target_cols, target_table) -%} {# Redshift doesn't support multi-column IN subqueries (tuple IN) like: (col1, col2) IN (SELECT col1, col2 FROM table) diff --git a/macros/utils/cross_db_utils/sqlserver_tsql_dispatch.sql b/macros/utils/cross_db_utils/sqlserver_tsql_dispatch.sql deleted file mode 100644 index 6c810e67e..000000000 --- a/macros/utils/cross_db_utils/sqlserver_tsql_dispatch.sql +++ /dev/null @@ -1,233 +0,0 @@ -{#- - dbt-sqlserver no longer declares dbt-fabric as a dispatch parent (dbt-msft/dbt-sqlserver#628, - merged May 2026). T-SQL-safe implementations live in fabric__ macros; sqlserver__ delegates - to them explicitly so both adapters share the same behavior without relying on adapter deps. - - Do not add sqlserver__ overrides here for macros that already have dedicated sqlserver__ - implementations (e.g. get_normalized_data_type, generate_elementary_profile_args). --#} -{% macro sqlserver__dummy_values() %} - {% do return(elementary.fabric__dummy_values()) %} -{% endmacro %} - -{% macro sqlserver__edr_type_bool() %} - {% do return(elementary.fabric__edr_type_bool()) %} -{% endmacro %} - -{% macro sqlserver__edr_type_string() %} - {% do return(elementary.fabric__edr_type_string()) %} -{% endmacro %} - -{% macro sqlserver__edr_type_long_string() %} - {% do return(elementary.fabric__edr_type_long_string()) %} -{% endmacro %} - -{% macro sqlserver__edr_type_timestamp() %} - {{ elementary.fabric__edr_type_timestamp() }} -{% endmacro %} - -{% macro sqlserver__edr_boolean_literal(value) %} - {{ elementary.fabric__edr_boolean_literal(value) }} -{% endmacro %} - -{% macro sqlserver__edr_is_true(expr) %} - {{ elementary.fabric__edr_is_true(expr) }} -{% endmacro %} - -{% macro sqlserver__edr_is_false(expr) %} - {{ elementary.fabric__edr_is_false(expr) }} -{% endmacro %} - -{% macro sqlserver__is_tsql() %} - {% do return(elementary.fabric__is_tsql()) %} -{% endmacro %} - -{% macro sqlserver__data_type_list(data_type) %} - {% do return(elementary.fabric__data_type_list(data_type)) %} -{% endmacro %} - -{% macro sqlserver__try_cast_column_to_timestamp(table_relation, timestamp_column) %} - {{ - elementary.fabric__try_cast_column_to_timestamp( - table_relation, timestamp_column - ) - }} -{% endmacro %} - -{% macro sqlserver__replace_table_data(relation, rows) %} - {% do elementary.fabric__replace_table_data(relation, rows) %} -{% endmacro %} - -{% macro sqlserver__edr_make_temp_relation(base_relation, suffix) %} - {% do return(elementary.fabric__edr_make_temp_relation(base_relation, suffix)) %} -{% endmacro %} - -{% macro sqlserver__escape_special_chars(string_value) %} - {{- elementary.fabric__escape_special_chars(string_value) -}} -{% endmacro %} - -{% macro sqlserver__insert_as_select(table_relation, select_query) %} - {% do elementary.fabric__insert_as_select(table_relation, select_query) %} -{% endmacro %} - -{% macro sqlserver__get_relation_max_name_length(temporary, relation, sql_query) %} - {% do return( - elementary.fabric__get_relation_max_name_length( - temporary, relation, sql_query - ) - ) %} -{% endmacro %} - -{% macro sqlserver__create_temp_table( - database_name, schema_name, table_name, sql_query -) %} - {% do elementary.fabric__create_temp_table( - database_name, schema_name, table_name, sql_query - ) %} -{% endmacro %} - -{% macro sqlserver__edr_to_char(column, format) %} - {{ elementary.fabric__edr_to_char(column, format) }} -{% endmacro %} - -{% macro sqlserver__edr_timeadd(date_part, number, timestamp_expression) %} - {{ elementary.fabric__edr_timeadd(date_part, number, timestamp_expression) }} -{% endmacro %} - -{% macro sqlserver__edr_time_trunc(date_part, date_expression) %} - {{ elementary.fabric__edr_time_trunc(date_part, date_expression) }} -{% endmacro %} - -{% macro sqlserver__edr_multi_value_in(source_cols, target_cols, target_table) %} - {{- - elementary.fabric__edr_multi_value_in( - source_cols, target_cols, target_table - ) - -}} -{% endmacro %} - -{% macro sqlserver__get_default_incremental_strategy() %} - {% do return(elementary.fabric__get_default_incremental_strategy()) %} -{% endmacro %} - -{% macro sqlserver__edr_hour_of_week_expression(date_expr) %} - {{ elementary.fabric__edr_hour_of_week_expression(date_expr) }} -{% endmacro %} - -{% macro sqlserver__edr_hour_of_day_expression(date_expr) %} - {{ elementary.fabric__edr_hour_of_day_expression(date_expr) }} -{% endmacro %} - -{% macro sqlserver__edr_day_of_week_expression(date_expr) %} - {{ elementary.fabric__edr_day_of_week_expression(date_expr) }} -{% endmacro %} - -{% macro sqlserver__edr_datediff(first_date, second_date, date_part) %} - {{ elementary.fabric__edr_datediff(first_date, second_date, date_part) }} -{% endmacro %} - -{% macro sqlserver__edr_dateadd(datepart, interval, from_date_or_timestamp) %} - {{ elementary.fabric__edr_dateadd(datepart, interval, from_date_or_timestamp) }} -{% endmacro %} - -{% macro sqlserver__edr_date_trunc(datepart, date_expression) %} - {{ elementary.fabric__edr_date_trunc(datepart, date_expression) }} -{% endmacro %} - -{% macro sqlserver__edr_current_timestamp() -%} - {{ elementary.fabric__edr_current_timestamp() }} -{%- endmacro %} - -{% macro sqlserver__edr_current_timestamp_in_utc() -%} - {{ elementary.fabric__edr_current_timestamp_in_utc() }} -{%- endmacro %} - -{% macro sqlserver__edr_concat(fields) %} - {{ elementary.fabric__edr_concat(fields) }} -{% endmacro %} - -{% macro sqlserver__full_name_split(part_name) %} - {% do return(elementary.fabric__full_name_split(part_name)) %} -{% endmacro %} - -{% macro sqlserver__complete_buckets_cte( - time_bucket, - bucket_end_expr, - min_bucket_start_expr, - max_bucket_end_expr -) -%} - {{- - elementary.fabric__complete_buckets_cte( - time_bucket, - bucket_end_expr, - min_bucket_start_expr, - max_bucket_end_expr, - ) - -}} -{%- endmacro %} - -{% macro sqlserver__get_failed_row_count_calc_query(failed_row_count_calc) %} - {% do return( - elementary.fabric__get_failed_row_count_calc_query( - failed_row_count_calc - ) - ) %} -{% endmacro %} - -{% macro sqlserver__get_column_changes_from_baseline_cur( - model_relation, full_table_name, model_baseline_relation -) %} - {% do elementary.fabric__get_column_changes_from_baseline_cur( - model_relation, full_table_name, model_baseline_relation - ) %} -{% endmacro %} - -{% macro sqlserver___bucket_end_freshness_expr() %} - {{ elementary.fabric___bucket_end_freshness_expr() }} -{% endmacro %} - -{% macro sqlserver__freshness_metric_query(metric, metric_properties) %} - {{ elementary.fabric__freshness_metric_query(metric, metric_properties) }} -{% endmacro %} - -{% macro sqlserver__get_latest_full_refresh(model_node) %} - {{ elementary.fabric__get_latest_full_refresh(model_node) }} -{% endmacro %} - -{% macro sqlserver__max_length(column_name) -%} - {{ elementary.fabric__max_length(column_name) }} -{%- endmacro %} - -{% macro sqlserver__min_length(column_name) -%} - {{ elementary.fabric__min_length(column_name) }} -{%- endmacro %} - -{% macro sqlserver__average_length(column_name) -%} - {{ elementary.fabric__average_length(column_name) }} -{%- endmacro %} - -{% macro sqlserver__standard_deviation(column_name) -%} - {{ elementary.fabric__standard_deviation(column_name) }} -{%- endmacro %} - -{% macro sqlserver__variance(column_name) -%} - {{ elementary.fabric__variance(column_name) }} -{%- endmacro %} - -{%- macro sqlserver__get_anomaly_query(flattened_test=none) -%} - {{- elementary.fabric__get_anomaly_query(flattened_test) -}} -{%- endmacro -%} - -{%- macro sqlserver__get_anomaly_query_for_dimension_anomalies(flattened_test=none) -%} - {{- elementary.fabric__get_anomaly_query_for_dimension_anomalies(flattened_test) -}} -{%- endmacro -%} - -{% macro sqlserver__query_test_result_rows( - sample_limit=none, ignore_passed_tests=false -) %} - {% do return( - elementary.fabric__query_test_result_rows( - sample_limit, ignore_passed_tests - ) - ) %} -{% endmacro %} diff --git a/macros/utils/cross_db_utils/time_trunc.sql b/macros/utils/cross_db_utils/time_trunc.sql index eb42a5fd5..239327b87 100644 --- a/macros/utils/cross_db_utils/time_trunc.sql +++ b/macros/utils/cross_db_utils/time_trunc.sql @@ -26,3 +26,7 @@ cast({{ date_expression }} as {{ elementary.edr_type_timestamp() }}) ) {% endmacro %} + +{% macro sqlserver__edr_time_trunc(date_part, date_expression) %} + {{ elementary.fabric__edr_time_trunc(date_part, date_expression) }} +{% endmacro %} diff --git a/macros/utils/cross_db_utils/timeadd.sql b/macros/utils/cross_db_utils/timeadd.sql index 87a1d9b18..81b57ec58 100644 --- a/macros/utils/cross_db_utils/timeadd.sql +++ b/macros/utils/cross_db_utils/timeadd.sql @@ -88,6 +88,10 @@ ) {% endmacro %} +{% macro sqlserver__edr_timeadd(date_part, number, timestamp_expression) %} + {{ elementary.fabric__edr_timeadd(date_part, number, timestamp_expression) }} +{% endmacro %} + {% macro dremio__edr_timeadd(date_part, number, timestamp_expression) %} timestampadd( {{ date_part }}, diff --git a/macros/utils/cross_db_utils/to_char.sql b/macros/utils/cross_db_utils/to_char.sql index 8cde8b631..a72617367 100644 --- a/macros/utils/cross_db_utils/to_char.sql +++ b/macros/utils/cross_db_utils/to_char.sql @@ -34,3 +34,7 @@ {%- else %}, 120) {%- endif %} {% endmacro %} + +{% macro sqlserver__edr_to_char(column, format) %} + {{ elementary.fabric__edr_to_char(column, format) }} +{% endmacro %} diff --git a/macros/utils/data_types/data_type.sql b/macros/utils/data_types/data_type.sql index 4b9e519f2..f79c7a642 100644 --- a/macros/utils/data_types/data_type.sql +++ b/macros/utils/data_types/data_type.sql @@ -12,6 +12,10 @@ {% macro fabric__edr_type_bool() %} {% do return("bit") %} {% endmacro %} +{% macro sqlserver__edr_type_bool() %} + {% do return(elementary.fabric__edr_type_bool()) %} +{% endmacro %} + {%- macro edr_type_string() -%} {{ return(adapter.dispatch("edr_type_string", "elementary")()) }} @@ -52,6 +56,10 @@ {% macro fabric__edr_type_string() %} {% do return("varchar(4096)") %} {% endmacro %} +{% macro sqlserver__edr_type_string() %} + {% do return(elementary.fabric__edr_type_string()) %} +{% endmacro %} + {% macro vertica__edr_type_string() %} {% do return("varchar(16000)") %} {% endmacro %} @@ -89,6 +97,10 @@ {% do return("varchar(max)") %} {%- endmacro -%} +{% macro sqlserver__edr_type_long_string() %} + {% do return(elementary.fabric__edr_type_long_string()) %} +{% endmacro %} + {% macro edr_type_bigint() %} {% set macro = dbt.type_bigint or dbt_utils.type_bigint %} @@ -159,6 +171,10 @@ {% macro fabric__edr_type_timestamp() %} datetime2(6) {% endmacro %} +{% macro sqlserver__edr_type_timestamp() %} + {{ elementary.fabric__edr_type_timestamp() }} +{% endmacro %} + {% macro fabricspark__edr_type_bool() %} {{ return(elementary.default__edr_type_bool()) }} {% endmacro %} diff --git a/macros/utils/data_types/data_type_list.sql b/macros/utils/data_types/data_type_list.sql index 1e14eaa20..4a373efa5 100644 --- a/macros/utils/data_types/data_type_list.sql +++ b/macros/utils/data_types/data_type_list.sql @@ -331,6 +331,10 @@ {% endmacro %} +{% macro sqlserver__data_type_list(data_type) %} + {% do return(elementary.fabric__data_type_list(data_type)) %} +{% endmacro %} + {% macro dremio__data_type_list(data_type) %} {% set string_list = ["varchar", "character varying"] | list %} {% set numeric_list = [ diff --git a/macros/utils/data_types/try_cast_column_to_timestamp.sql b/macros/utils/data_types/try_cast_column_to_timestamp.sql index cbd1d547d..56a2a8420 100644 --- a/macros/utils/data_types/try_cast_column_to_timestamp.sql +++ b/macros/utils/data_types/try_cast_column_to_timestamp.sql @@ -40,3 +40,11 @@ {{ return(false) }} {% endmacro %} + +{% macro sqlserver__try_cast_column_to_timestamp(table_relation, timestamp_column) %} + {% do return( + elementary.fabric__try_cast_column_to_timestamp( + table_relation, timestamp_column + ) + ) %} +{% endmacro %} diff --git a/macros/utils/table_operations/create_temp_table.sql b/macros/utils/table_operations/create_temp_table.sql index d255c119d..5b1aed657 100644 --- a/macros/utils/table_operations/create_temp_table.sql +++ b/macros/utils/table_operations/create_temp_table.sql @@ -38,9 +38,8 @@ We use a regular table (not #temp) because the EXEC scope isolation of SQL Server makes #temp tables invisible to the caller. - T-SQL implementations live in fabric__ macros; sqlserver__ delegates - explicitly (see sqlserver_tsql_dispatch.sql) because dbt-sqlserver no - longer includes fabric in its adapter dispatch chain. + T-SQL implementations are shared with sqlserver__ delegating to fabric__ + because dbt-sqlserver no longer includes fabric in its adapter dispatch chain. #} {% set table_exists, table_relation = dbt.get_or_create_relation( database=database_name, @@ -96,3 +95,15 @@ {{ return(temp_table_relation) }} {% endmacro %} + +{% macro sqlserver__create_temp_table( + database_name, schema_name, table_name, sql_query +) %} + {{ + return( + elementary.fabric__create_temp_table( + database_name, schema_name, table_name, sql_query + ) + ) + }} +{% endmacro %} diff --git a/macros/utils/table_operations/get_relation_max_length.sql b/macros/utils/table_operations/get_relation_max_length.sql index d6e47500b..61d6c96d8 100644 --- a/macros/utils/table_operations/get_relation_max_length.sql +++ b/macros/utils/table_operations/get_relation_max_length.sql @@ -61,3 +61,11 @@ leave headroom for longer schemas and __dbt_tmp_vw suffixes. #} {{ return(60) }} {% endmacro %} + +{% macro sqlserver__get_relation_max_name_length(temporary, relation, sql_query) %} + {% do return( + elementary.fabric__get_relation_max_name_length( + temporary, relation, sql_query + ) + ) %} +{% endmacro %} diff --git a/macros/utils/table_operations/insert_as_select.sql b/macros/utils/table_operations/insert_as_select.sql index 2770a78d1..82b8a76d4 100644 --- a/macros/utils/table_operations/insert_as_select.sql +++ b/macros/utils/table_operations/insert_as_select.sql @@ -43,3 +43,7 @@ {%- endset %} {{ return(insert_query) }} {% endmacro %} + +{% macro sqlserver__insert_as_select(table_relation, select_query) %} + {{ return(elementary.fabric__insert_as_select(table_relation, select_query)) }} +{% endmacro %} diff --git a/macros/utils/table_operations/insert_rows.sql b/macros/utils/table_operations/insert_rows.sql index 512c4b05b..ac051726e 100644 --- a/macros/utils/table_operations/insert_rows.sql +++ b/macros/utils/table_operations/insert_rows.sql @@ -254,6 +254,10 @@ {{- return(string_value | replace("'", "''")) -}} {%- endmacro -%} +{%- macro sqlserver__escape_special_chars(string_value) -%} + {{- elementary.fabric__escape_special_chars(string_value) -}} +{%- endmacro -%} + {%- macro dremio__escape_special_chars(string_value) -%} {{- return( diff --git a/macros/utils/table_operations/make_temp_relation.sql b/macros/utils/table_operations/make_temp_relation.sql index c1d3f2553..bcf031937 100644 --- a/macros/utils/table_operations/make_temp_relation.sql +++ b/macros/utils/table_operations/make_temp_relation.sql @@ -53,6 +53,10 @@ {% do return(dbt.make_temp_relation(base_relation, suffix)) %} {% endmacro %} +{% macro sqlserver__edr_make_temp_relation(base_relation, suffix) %} + {% do return(elementary.fabric__edr_make_temp_relation(base_relation, suffix)) %} +{% endmacro %} + {% macro spark__edr_make_temp_relation(base_relation, suffix) %} {% set tmp_identifier = elementary.table_name_with_suffix( base_relation.identifier, suffix diff --git a/macros/utils/table_operations/replace_table_data.sql b/macros/utils/table_operations/replace_table_data.sql index a6bbf8f55..38c2830cb 100644 --- a/macros/utils/table_operations/replace_table_data.sql +++ b/macros/utils/table_operations/replace_table_data.sql @@ -150,9 +150,8 @@ {% endmacro %} {# Fabric / SQL Server - truncate and insert (non-atomic). - T-SQL implementations live in fabric__ macros; sqlserver__ delegates - explicitly (see sqlserver_tsql_dispatch.sql) because dbt-sqlserver no - longer includes fabric in its adapter dispatch chain. #} + sqlserver__ delegates to fabric__ because dbt-sqlserver no longer includes + fabric in its adapter dispatch chain. #} {% macro fabric__replace_table_data(relation, rows) %} {% do dbt.truncate_relation(relation) %} {% do elementary.insert_rows( @@ -162,3 +161,7 @@ chunk_size=elementary.get_config_var("dbt_artifacts_chunk_size"), ) %} {% endmacro %} + +{% macro sqlserver__replace_table_data(relation, rows) %} + {% do elementary.fabric__replace_table_data(relation, rows) %} +{% endmacro %} From 850ce992976adf8a3e7fd356a7749d26c7ef91d0 Mon Sep 17 00:00:00 2001 From: Elazar Lachkar Date: Tue, 26 May 2026 15:56:15 +0300 Subject: [PATCH 3/5] Improved comments --- macros/utils/table_operations/create_temp_table.sql | 3 --- macros/utils/table_operations/replace_table_data.sql | 5 ++--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/macros/utils/table_operations/create_temp_table.sql b/macros/utils/table_operations/create_temp_table.sql index 5b1aed657..9368d8218 100644 --- a/macros/utils/table_operations/create_temp_table.sql +++ b/macros/utils/table_operations/create_temp_table.sql @@ -37,9 +37,6 @@ We use a regular table (not #temp) because the EXEC scope isolation of SQL Server makes #temp tables invisible to the caller. - - T-SQL implementations are shared with sqlserver__ delegating to fabric__ - because dbt-sqlserver no longer includes fabric in its adapter dispatch chain. #} {% set table_exists, table_relation = dbt.get_or_create_relation( database=database_name, diff --git a/macros/utils/table_operations/replace_table_data.sql b/macros/utils/table_operations/replace_table_data.sql index 38c2830cb..4b92fdd36 100644 --- a/macros/utils/table_operations/replace_table_data.sql +++ b/macros/utils/table_operations/replace_table_data.sql @@ -149,9 +149,7 @@ ) %} {% endmacro %} -{# Fabric / SQL Server - truncate and insert (non-atomic). - sqlserver__ delegates to fabric__ because dbt-sqlserver no longer includes - fabric in its adapter dispatch chain. #} +{# Fabric - truncate and insert (non-atomic). #} {% macro fabric__replace_table_data(relation, rows) %} {% do dbt.truncate_relation(relation) %} {% do elementary.insert_rows( @@ -162,6 +160,7 @@ ) %} {% endmacro %} +{# SQL Server - delegate to Fabric (non-atomic). #} {% macro sqlserver__replace_table_data(relation, rows) %} {% do elementary.fabric__replace_table_data(relation, rows) %} {% endmacro %} From 94c42cc7a61bc85a30e895f20ee3e19b5cabc01d Mon Sep 17 00:00:00 2001 From: Elazar Lachkar Date: Tue, 26 May 2026 16:01:39 +0300 Subject: [PATCH 4/5] Fix CR --- .../schema_changes/get_columns_changes_query.sql | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/macros/edr/data_monitoring/schema_changes/get_columns_changes_query.sql b/macros/edr/data_monitoring/schema_changes/get_columns_changes_query.sql index 302af7e6d..cd31efa1e 100644 --- a/macros/edr/data_monitoring/schema_changes/get_columns_changes_query.sql +++ b/macros/edr/data_monitoring/schema_changes/get_columns_changes_query.sql @@ -317,7 +317,9 @@ {% macro sqlserver__get_column_changes_from_baseline_cur( model_relation, full_table_name, model_baseline_relation ) %} - {% do elementary.fabric__get_column_changes_from_baseline_cur( - model_relation, full_table_name, model_baseline_relation - ) %} + {{ + elementary.fabric__get_column_changes_from_baseline_cur( + model_relation, full_table_name, model_baseline_relation + ) + }} {% endmacro %} From a14dd71c43dfda12c83021e7376ff1d7e5edfc11 Mon Sep 17 00:00:00 2001 From: Elazar Lachkar Date: Tue, 26 May 2026 17:14:04 +0300 Subject: [PATCH 5/5] Fix sqlserver__ delegate return propagation for value-returning macros. Fabric implementations use {% do return(...)} but sqlserver wrappers rendered via {{ }} dropped the return value, causing None to leak as 'None' strings and empty sampling results. Co-authored-by: Cursor --- .../monitors_query/get_latest_full_refresh.sql | 2 +- macros/edr/materializations/test/test.sql | 6 +++++- macros/edr/system/system_utils/buckets_cte.sql | 12 +++++++----- macros/edr/tests/test_utils/get_anomaly_query.sql | 8 ++++++-- macros/utils/table_operations/insert_rows.sql | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/macros/edr/data_monitoring/monitors_query/get_latest_full_refresh.sql b/macros/edr/data_monitoring/monitors_query/get_latest_full_refresh.sql index a60669a1c..08f998c61 100644 --- a/macros/edr/data_monitoring/monitors_query/get_latest_full_refresh.sql +++ b/macros/edr/data_monitoring/monitors_query/get_latest_full_refresh.sql @@ -32,5 +32,5 @@ {% endmacro %} {% macro sqlserver__get_latest_full_refresh(model_node) %} - {{ elementary.fabric__get_latest_full_refresh(model_node) }} + {% do return(elementary.fabric__get_latest_full_refresh(model_node)) %} {% endmacro %} diff --git a/macros/edr/materializations/test/test.sql b/macros/edr/materializations/test/test.sql index dd471322a..eabc7aff4 100644 --- a/macros/edr/materializations/test/test.sql +++ b/macros/edr/materializations/test/test.sql @@ -283,7 +283,11 @@ {% macro sqlserver__query_test_result_rows( sample_limit=none, ignore_passed_tests=false ) %} - {{ elementary.fabric__query_test_result_rows(sample_limit, ignore_passed_tests) }} + {% do return( + elementary.fabric__query_test_result_rows( + sample_limit, ignore_passed_tests + ) + ) %} {% endmacro %} {% macro get_columns_to_exclude_from_sampling(flattened_test) %} diff --git a/macros/edr/system/system_utils/buckets_cte.sql b/macros/edr/system/system_utils/buckets_cte.sql index a04b62bc4..0a5cadc29 100644 --- a/macros/edr/system/system_utils/buckets_cte.sql +++ b/macros/edr/system/system_utils/buckets_cte.sql @@ -295,11 +295,13 @@ max_bucket_end_expr ) -%} {{- - elementary.fabric__complete_buckets_cte( - time_bucket, - bucket_end_expr, - min_bucket_start_expr, - max_bucket_end_expr, + return( + elementary.fabric__complete_buckets_cte( + time_bucket, + bucket_end_expr, + min_bucket_start_expr, + max_bucket_end_expr, + ) ) -}} {%- endmacro %} diff --git a/macros/edr/tests/test_utils/get_anomaly_query.sql b/macros/edr/tests/test_utils/get_anomaly_query.sql index 1046355ac..00bc1d2a0 100644 --- a/macros/edr/tests/test_utils/get_anomaly_query.sql +++ b/macros/edr/tests/test_utils/get_anomaly_query.sql @@ -24,7 +24,7 @@ {%- endmacro -%} {%- macro sqlserver__get_anomaly_query(flattened_test=none) -%} - {{- elementary.fabric__get_anomaly_query(flattened_test) -}} + {%- do return(elementary.fabric__get_anomaly_query(flattened_test)) -%} {%- endmacro -%} {%- macro get_anomaly_query_for_dimension_anomalies(flattened_test=none) -%} @@ -69,7 +69,11 @@ {%- endmacro -%} {%- macro sqlserver__get_anomaly_query_for_dimension_anomalies(flattened_test=none) -%} - {{- elementary.fabric__get_anomaly_query_for_dimension_anomalies(flattened_test) -}} + {%- do return( + elementary.fabric__get_anomaly_query_for_dimension_anomalies( + flattened_test + ) + ) -%} {%- endmacro -%} {% macro get_read_anomaly_scores_query( diff --git a/macros/utils/table_operations/insert_rows.sql b/macros/utils/table_operations/insert_rows.sql index ac051726e..b0635a3b5 100644 --- a/macros/utils/table_operations/insert_rows.sql +++ b/macros/utils/table_operations/insert_rows.sql @@ -255,7 +255,7 @@ {%- endmacro -%} {%- macro sqlserver__escape_special_chars(string_value) -%} - {{- elementary.fabric__escape_special_chars(string_value) -}} + {%- do return(elementary.fabric__escape_special_chars(string_value)) -%} {%- endmacro -%} {%- macro dremio__escape_special_chars(string_value) -%}