Skip to content

Commit 6c6d66d

Browse files
committed
Fixed materialized view replacement and full refresh
1 parent 2998e05 commit 6c6d66d

File tree

6 files changed

+47
-22
lines changed

6 files changed

+47
-22
lines changed

dbt/adapters/oracle/relation.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
OracleRefreshModeConfigChange,
3737
OracleBuildModeConfigChange,
3838
OracleQueryRewriteConfigChange,
39+
OracleQueryConfigChange,
3940
OracleQuotePolicy,
4041
OracleIncludePolicy)
4142

@@ -108,14 +109,20 @@ def materialized_view_config_changeset(
108109
context=new_materialized_view.query_rewrite
109110
)
110111

112+
if new_materialized_view.query.upper() != existing_materialized_view.query.upper():
113+
config_change_collection.query = OracleQueryConfigChange(
114+
action=RelationConfigChangeAction.create,
115+
context=new_materialized_view.query
116+
)
117+
111118
logger.debug(f"Config change collection {config_change_collection}")
112119

113120
if config_change_collection.has_changes:
114121

115122
if config_change_collection.refresh_mode is None:
116123
config_change_collection.refresh_mode = OracleRefreshModeConfigChange(
117124
action=RelationConfigChangeAction.alter,
118-
context=new_materialized_view.refresh_mode)
125+
context=existing_materialized_view.refresh_mode)
119126

120127
if config_change_collection.query_rewrite is None:
121128
config_change_collection.query_rewrite = OracleQueryRewriteConfigChange(
@@ -130,10 +137,13 @@ def materialized_view_config_changeset(
130137
if config_change_collection.build_mode is None:
131138
config_change_collection.build_mode = OracleBuildModeConfigChange(
132139
action=RelationConfigChangeAction.alter,
133-
context=new_materialized_view.build_mode)
134-
135-
return config_change_collection
140+
context=existing_materialized_view.build_mode)
136141

142+
if config_change_collection.query is None:
143+
config_change_collection.query = OracleQueryConfigChange(
144+
action=RelationConfigChangeAction.create,
145+
context=existing_materialized_view.query)
137146

147+
return config_change_collection
138148

139149
return None

dbt/adapters/oracle/relation_configs/__init__.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@
1414
limitations under the License.
1515
"""
1616

17-
from dbt.adapters.oracle.relation_configs.materialized_view import (OracleMaterializedViewConfig,
18-
OracleMaterializedViewConfigChangeset,
19-
OracleBuildModeConfigChange,
20-
OracleRefreshModeConfigChange,
21-
OracleQueryRewriteConfigChange,
22-
OracleRefreshMethodConfigChange)
17+
from dbt.adapters.oracle.relation_configs.materialized_view import (
18+
OracleMaterializedViewConfig,
19+
OracleMaterializedViewConfigChangeset,
20+
OracleBuildModeConfigChange,
21+
OracleRefreshModeConfigChange,
22+
OracleQueryConfigChange,
23+
OracleQueryRewriteConfigChange,
24+
OracleRefreshMethodConfigChange)
2325

24-
from dbt.adapters.oracle.relation_configs.policies import (OracleQuotePolicy,
25-
OracleIncludePolicy)
26+
from dbt.adapters.oracle.relation_configs.policies import (
27+
OracleQuotePolicy,
28+
OracleIncludePolicy)

dbt/adapters/oracle/relation_configs/materialized_view.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def parse_relation_results(cls, relation_results: RelationResults) -> dict:
128128

129129
@dataclass(frozen=True, eq=True, unsafe_hash=True)
130130
class OracleRefreshModeConfigChange(RelationConfigChange):
131-
context: Optional[bool] = None
131+
context: Optional[str] = None
132132

133133
@property
134134
def requires_full_refresh(self) -> bool:
@@ -137,35 +137,44 @@ def requires_full_refresh(self) -> bool:
137137

138138
@dataclass(frozen=True, eq=True, unsafe_hash=True)
139139
class OracleRefreshMethodConfigChange(RelationConfigChange):
140-
context: Optional[bool] = None
140+
context: Optional[str] = None
141141

142142
@property
143143
def requires_full_refresh(self) -> bool:
144144
return True
145145

146146
@dataclass(frozen=True, eq=True, unsafe_hash=True)
147147
class OracleBuildModeConfigChange(RelationConfigChange):
148-
context: Optional[bool] = None
148+
context: Optional[str] = None
149149

150150
@property
151151
def requires_full_refresh(self) -> bool:
152152
return False
153153

154154
@dataclass(frozen=True, eq=True, unsafe_hash=True)
155155
class OracleQueryRewriteConfigChange(RelationConfigChange):
156-
context: Optional[bool] = None
156+
context: Optional[str] = None
157157

158158
@property
159159
def requires_full_refresh(self) -> bool:
160160
return False
161161

162+
@dataclass(frozen=True, eq=True, unsafe_hash=True)
163+
class OracleQueryConfigChange(RelationConfigChange):
164+
context: Optional[str] = None
165+
166+
@property
167+
def requires_full_refresh(self) -> bool:
168+
return True
169+
162170

163171
@dataclass
164172
class OracleMaterializedViewConfigChangeset:
165173
refresh_mode: Optional[OracleRefreshMethodConfigChange] = None
166174
refresh_method: Optional[OracleRefreshMethodConfigChange] = None
167175
build_mode: Optional[OracleBuildModeConfigChange] = None
168176
query_rewrite: Optional[OracleQueryRewriteConfigChange] = None
177+
query: Optional[OracleQueryConfigChange] = None
169178

170179
@property
171180
def requires_full_refresh(self) -> bool:
@@ -175,6 +184,7 @@ def requires_full_refresh(self) -> bool:
175184
self.refresh_method.requires_full_refresh if self.refresh_method else False,
176185
self.build_mode.requires_full_refresh if self.build_mode else False,
177186
self.query_rewrite.requires_full_refresh if self.query_rewrite else False,
187+
self.query.requires_full_refresh if self.query else False
178188
}
179189
)
180190

@@ -186,5 +196,6 @@ def has_changes(self) -> bool:
186196
self.refresh_method if self.refresh_method else False,
187197
self.build_mode if self.build_mode else False,
188198
self.query_rewrite if self.query_rewrite else False,
199+
self.query if self.query else False
189200
}
190201
)

dbt/include/oracle/macros/adapters.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,8 @@
305305
PRAGMA EXCEPTION_INIT(dne_942, -942);
306306
attempted_ddl_on_in_use_GTT EXCEPTION;
307307
pragma EXCEPTION_INIT(attempted_ddl_on_in_use_GTT, -14452);
308+
mv_dne_12003 EXCEPTION;
309+
PRAGMA EXCEPTION_INIT(mv_dne_12003, -12003);
308310
BEGIN
309311
SAVEPOINT start_transaction;
310312
{%- if relation.is_materialized_view -%}
@@ -318,6 +320,8 @@
318320
NULL; -- if it its a global temporary table, leave it alone.
319321
WHEN dne_942 THEN
320322
NULL;
323+
WHEN mv_dne_12003 THEN
324+
NULL;
321325
END;
322326
{%- endcall %}
323327
{% endmacro %}

dbt/include/oracle/macros/materializations/materialized_view/materialized_view.sql

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,8 @@
99
{%- endmacro %}
1010

1111
{% macro oracle__get_replace_materialized_view_as_sql(relation, sql, existing_relation, backup_relation, intermediate_relation) %}
12-
{% call statement(name="drop_mv") %}
13-
{{ oracle__drop_relation(relation) }}
14-
{% endcall %}
15-
{{- log('ORACLE Applying REPLACE to: ' ~ relation) -}}
16-
{{ get_create_materialized_view_as_sql(relation, sql) }}
12+
{{ oracle__drop_relation(relation) }}
13+
{{ oracle__get_create_materialized_view_as_sql(relation, sql) }}
1714
{% endmacro %}
1815

1916
{% macro oracle__get_create_materialized_view_as_sql(relation, sql) %}

dbt_adbs_test_project/models/sales_internet_mv.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
#}
1616
{{ config(materialized='materialized_view')}}
1717
select * from {{ source('sh_database', 'sales') }}
18-
where channel_id = 4
18+
where channel_id = 5

0 commit comments

Comments
 (0)