|
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