|
34 | 34 | )
|
35 | 35 | {%- endmacro %}
|
36 | 36 |
|
37 |
| -{% macro oracle_check_and_quote_column_names_for_incremental_merge(dest_column_names) %} |
38 |
| - {%- set quoted_update_columns = [] -%} |
39 |
| - {%- set update_columns = config.get("merge_update_columns", default=dest_column_names) -%} |
40 |
| - {% for col in update_columns %} |
41 |
| - {% do quoted_update_columns.append(adapter.check_and_quote_identifier(col, model.columns)) %} |
42 |
| - {% endfor %} |
43 |
| - {{ return(quoted_update_columns)}} |
44 |
| -{% endmacro %} |
45 |
| - |
46 | 37 | {% macro oracle_check_and_quote_unique_key_for_incremental_merge(unique_key) %}
|
47 | 38 | {%- set quote = "\"" -%}
|
48 | 39 | {%- set unique_key_list = [] -%}
|
|
54 | 45 | {% else %}
|
55 | 46 | {% do unique_key_list.append(key.upper()) %}
|
56 | 47 | {% endif %}
|
57 |
| - {% endfor %} |
| 48 | + {% endfor %} |
| 49 | + {% else %} |
| 50 | + {% if adapter.should_identifier_be_quoted(unique_key, model.columns) == true %} |
| 51 | + {% do unique_key_list.append(quote ~ unique_key ~ quote) %} |
58 | 52 | {% else %}
|
59 |
| - {% if adapter.should_identifier_be_quoted(unique_key, model.columns) == true %} |
60 |
| - {% do unique_key_list.append(quote ~ unique_key ~ quote) %} |
61 |
| - {% else %} |
62 |
| - {% do unique_key_list.append(unique_key.upper()) %} |
63 |
| - {% endif %} |
| 53 | + {% do unique_key_list.append(unique_key.upper()) %} |
64 | 54 | {% endif %}
|
65 |
| - {% for key in unique_key_list %} |
66 |
| - {% set this_key_match %} |
67 |
| - temp.{{ key }} = target.{{ key }} |
68 |
| - {% endset %} |
69 |
| - {% do unique_key_merge_predicates.append(this_key_match) %} |
70 |
| - {% endfor %} |
| 55 | + {% endif %} |
| 56 | + {% for key in unique_key_list %} |
| 57 | + {% set this_key_match %} |
| 58 | + temp.{{ key }} = target.{{ key }} |
| 59 | + {% endset %} |
| 60 | + {% do unique_key_merge_predicates.append(this_key_match) %} |
| 61 | + {% endfor %} |
71 | 62 | {%- set unique_key_result = {'unique_key_list': unique_key_list, 'unique_key_merge_predicates': unique_key_merge_predicates} -%}
|
72 | 63 | {{ return(unique_key_result)}}
|
73 | 64 | {% endmacro %}
|
74 | 65 |
|
75 | 66 |
|
76 |
| -{% macro oracle_incremental_upsert(tmp_relation, target_relation, dest_columns, unique_key=none, statement_name="main") %} |
| 67 | +{% macro oracle__get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %} |
| 68 | + {%- set default_cols = dest_columns | map(attribute='name') | list -%} |
| 69 | +
|
| 70 | + {%- if merge_update_columns and merge_exclude_columns -%} |
| 71 | + {{ exceptions.raise_compiler_error( |
| 72 | + 'Model cannot specify merge_update_columns and merge_exclude_columns. Please update model to use only one config' |
| 73 | + )}} |
| 74 | + {%- elif merge_update_columns -%} |
| 75 | + {%- set update_columns = merge_update_columns -%} |
| 76 | + {%- elif merge_exclude_columns -%} |
| 77 | + {%- set update_columns = [] -%} |
| 78 | + {%- for column in dest_columns -%} |
| 79 | + {% if column.column | lower not in merge_exclude_columns | map("lower") | list %} |
| 80 | + {%- do update_columns.append(column.name) -%} |
| 81 | + {% endif %} |
| 82 | + {%- endfor -%} |
| 83 | + {%- else -%} |
| 84 | + {%- set update_columns = default_cols -%} |
| 85 | + {%- endif -%} |
| 86 | +
|
| 87 | + {%- set quoted_update_columns = [] -%} |
| 88 | + {% for col in update_columns %} |
| 89 | + {% do quoted_update_columns.append(adapter.check_and_quote_identifier(col, model.columns)) %} |
| 90 | + {% endfor %} |
| 91 | + {{ return(quoted_update_columns)}} |
| 92 | +{% endmacro %} |
| 93 | +
|
| 94 | +
|
| 95 | +{% macro oracle__get_incremental_append_sql(arg_dict) %} |
| 96 | + {%- set dest_columns = args_dict["dest_columns"] -%} |
| 97 | + {%- set temp_relation = args_dict["temp_relation"] -%} |
| 98 | + {%- set target_relation = args_dict["target_relation"] -%} |
77 | 99 | {%- set dest_column_names = dest_columns | map(attribute='name') | list -%}
|
78 | 100 | {%- set dest_cols_csv = get_quoted_column_csv(model, dest_column_names) -%}
|
79 |
| - {%- set update_columns = oracle_check_and_quote_column_names_for_incremental_merge(dest_column_names) -%} |
| 101 | + INSERT INTO {{ target_relation }} ({{ dest_cols_csv }}) |
| 102 | + ( |
| 103 | + SELECT {{ dest_cols_csv }} |
| 104 | + FROM {{ temp_relation }} |
| 105 | + ) |
| 106 | +{% endmacro %} |
| 107 | +
|
| 108 | +{% macro oracle__get_incremental_merge_sql(args_dict) %} |
| 109 | + {%- set dest_columns = args_dict["dest_columns"] -%} |
| 110 | + {%- set temp_relation = args_dict["temp_relation"] -%} |
| 111 | + {%- set target_relation = args_dict["target_relation"] -%} |
| 112 | + {%- set unique_key = args_dict["unique_key"] -%} |
| 113 | + {%- set dest_column_names = dest_columns | map(attribute='name') | list -%} |
| 114 | + {%- set dest_cols_csv = get_quoted_column_csv(model, dest_column_names) -%} |
| 115 | + {%- set merge_update_columns = config.get('merge_update_columns') -%} |
| 116 | + {%- set merge_exclude_columns = config.get('merge_exclude_columns') -%} |
| 117 | + {%- set update_columns = get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) -%} |
80 | 118 | {%- if unique_key -%}
|
81 | 119 | {%- set unique_key_result = oracle_check_and_quote_unique_key_for_incremental_merge(unique_key) -%}
|
82 | 120 | {%- set unique_key_list = unique_key_result['unique_key_list'] -%}
|
83 | 121 | {%- set unique_key_merge_predicates = unique_key_result['unique_key_merge_predicates'] -%}
|
84 | 122 | merge into {{ target_relation }} target
|
85 |
| - using {{ tmp_relation }} temp |
| 123 | + using {{ temp_relation }} temp |
86 | 124 | on ({{ unique_key_merge_predicates | join(' AND ') }})
|
87 | 125 | when matched then
|
88 | 126 | update set
|
|
100 | 138 | insert into {{ target_relation }} ({{ dest_cols_csv }})
|
101 | 139 | (
|
102 | 140 | select {{ dest_cols_csv }}
|
103 |
| - from {{ tmp_relation }} |
| 141 | + from {{ temp_relation }} |
104 | 142 | )
|
105 | 143 | {%- endif -%}
|
106 |
| -{%- endmacro %} |
| 144 | +{% endmacro %} |
| 145 | +
|
| 146 | +{% macro oracle__get_incremental_default_sql(arg_dict) %} |
| 147 | + {% do return(get_incremental_merge_sql(arg_dict)) %} |
| 148 | +{% endmacro %} |
0 commit comments