Skip to content

Commit d3b8665

Browse files
authored
V1.9.4 (#284)
* Reverting nested CTE changes * Fixing issues to revert nested cte * Updating tests to fix issues * Updating nested cte table materialization * Delete test directory
1 parent 9d2be68 commit d3b8665

File tree

1 file changed

+6
-35
lines changed

1 file changed

+6
-35
lines changed
Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,26 @@
1-
{% macro check_for_nested_cte(sql) %}
2-
{% if execute %} {# Ensure this runs only at execution time #}
3-
{% set cleaned_sql = sql | lower | replace("\n", " ") %} {# Convert to lowercase and remove newlines #}
4-
{% set cte_count = cleaned_sql.count("with ") %} {# Count occurrences of "WITH " #}
5-
{% if cte_count > 1 %}
6-
{{ return(True) }}
7-
{% else %}
8-
{{ return(False) }} {# No nested CTEs found #}
9-
{% endif %}
10-
{% else %}
11-
{{ return(False) }} {# Return False during parsing #}
12-
{% endif %}
13-
{% endmacro %}
14-
15-
161
{% macro fabric__create_table_as(temporary, relation, sql) -%}
17-
182
{% set query_label = apply_label() %}
19-
{% set contract_config = config.get('contract') %}
20-
{% set is_nested_cte = check_for_nested_cte(sql) %}
21-
22-
{% if is_nested_cte and contract_config.enforced %}
3+
{% set tmp_vw_relation = relation.incorporate(path={"identifier": relation.identifier ~ '__dbt_tmp_vw'}, type='view')-%}
4+
{% do adapter.drop_relation(tmp_vw_relation) %}
5+
{{ get_create_view_as_sql(tmp_vw_relation, sql) }}
236

24-
{{ exceptions.raise_compiler_error(
25-
"Since the contract is enforced and the model contains a nested CTE, Fabric DW uses CREATE TABLE + INSERT to load data.
26-
INSERT INTO is not supported with nested CTEs. To resolve this, either disable contract enforcement or modify the model."
27-
) }}
28-
29-
{%- elif not is_nested_cte and contract_config.enforced %}
7+
{% set contract_config = config.get('contract') %}
8+
{% if contract_config.enforced %}
309

3110
CREATE TABLE {{relation}}
3211
{{ build_columns_constraints(relation) }}
3312
{{ get_assert_columns_equivalent(sql) }}
34-
3513
{% set listColumns %}
3614
{% for column in model['columns'] %}
3715
{{ "["~column~"]" }}{{ ", " if not loop.last }}
3816
{% endfor %}
3917
{%endset%}
4018

41-
{% set tmp_vw_relation = relation.incorporate(path={"identifier": relation.identifier ~ '__dbt_tmp_vw'}, type='view')-%}
42-
{% do adapter.drop_relation(tmp_vw_relation) %}
43-
{{ get_create_view_as_sql(tmp_vw_relation, sql) }}
44-
4519
INSERT INTO {{relation}} ({{listColumns}})
4620
SELECT {{listColumns}} FROM {{tmp_vw_relation}} {{ query_label }}
4721

4822
{%- else %}
49-
5023
{%- set query_label_option = query_label.replace("'", "''") -%}
51-
{%- set sql_with_quotes = sql.replace("'", "''") -%}
52-
EXEC('CREATE TABLE {{relation}} AS {{sql_with_quotes}} {{ query_label_option }}');
53-
24+
EXEC('CREATE TABLE {{relation}} AS SELECT * FROM {{tmp_vw_relation}} {{ query_label_option }}');
5425
{% endif %}
5526
{% endmacro %}

0 commit comments

Comments
 (0)