dbt-adapters 1.4.1__py3-none-any.whl → 1.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of dbt-adapters might be problematic. Click here for more details.
- dbt/adapters/__about__.py +1 -1
- dbt/adapters/base/impl.py +27 -3
- dbt/adapters/base/meta.py +19 -0
- dbt/adapters/base/relation.py +51 -3
- dbt/adapters/factory.py +2 -2
- dbt/include/global_project/macros/adapters/timestamps.sql +8 -0
- dbt/include/global_project/macros/materializations/models/incremental/strategies.sql +13 -0
- dbt/include/global_project/macros/materializations/snapshots/helpers.sql +25 -0
- dbt/include/global_project/macros/materializations/snapshots/snapshot.sql +5 -0
- {dbt_adapters-1.4.1.dist-info → dbt_adapters-1.6.0.dist-info}/METADATA +2 -2
- {dbt_adapters-1.4.1.dist-info → dbt_adapters-1.6.0.dist-info}/RECORD +13 -13
- {dbt_adapters-1.4.1.dist-info → dbt_adapters-1.6.0.dist-info}/WHEEL +0 -0
- {dbt_adapters-1.4.1.dist-info → dbt_adapters-1.6.0.dist-info}/licenses/LICENSE +0 -0
dbt/adapters/__about__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
version = "1.
|
|
1
|
+
version = "1.6.0"
|
dbt/adapters/base/impl.py
CHANGED
|
@@ -24,6 +24,7 @@ from typing import (
|
|
|
24
24
|
)
|
|
25
25
|
|
|
26
26
|
import pytz
|
|
27
|
+
from dbt_common.behavior_flags import Behavior, BehaviorFlag
|
|
27
28
|
from dbt_common.clients.jinja import CallableMacroGenerator
|
|
28
29
|
from dbt_common.contracts.constraints import (
|
|
29
30
|
ColumnLevelConstraint,
|
|
@@ -54,7 +55,7 @@ from dbt.adapters.base.connections import (
|
|
|
54
55
|
BaseConnectionManager,
|
|
55
56
|
Connection,
|
|
56
57
|
)
|
|
57
|
-
from dbt.adapters.base.meta import AdapterMeta, available
|
|
58
|
+
from dbt.adapters.base.meta import AdapterMeta, available, available_property
|
|
58
59
|
from dbt.adapters.base.relation import (
|
|
59
60
|
BaseRelation,
|
|
60
61
|
ComponentName,
|
|
@@ -261,7 +262,7 @@ class BaseAdapter(metaclass=AdapterMeta):
|
|
|
261
262
|
|
|
262
263
|
MAX_SCHEMA_METADATA_RELATIONS = 100
|
|
263
264
|
|
|
264
|
-
# This static member variable can be
|
|
265
|
+
# This static member variable can be overridden in concrete adapter
|
|
265
266
|
# implementations to indicate adapter support for optional capabilities.
|
|
266
267
|
_capabilities = CapabilityDict({})
|
|
267
268
|
|
|
@@ -271,6 +272,8 @@ class BaseAdapter(metaclass=AdapterMeta):
|
|
|
271
272
|
self.connections = self.ConnectionManager(config, mp_context)
|
|
272
273
|
self._macro_resolver: Optional[MacroResolverProtocol] = None
|
|
273
274
|
self._macro_context_generator: Optional[MacroContextGeneratorCallable] = None
|
|
275
|
+
# this will be updated to include global behavior flags once they exist
|
|
276
|
+
self.behavior = [] # type: ignore
|
|
274
277
|
|
|
275
278
|
###
|
|
276
279
|
# Methods to set / access a macro resolver
|
|
@@ -291,6 +294,27 @@ class BaseAdapter(metaclass=AdapterMeta):
|
|
|
291
294
|
) -> None:
|
|
292
295
|
self._macro_context_generator = macro_context_generator
|
|
293
296
|
|
|
297
|
+
@available_property
|
|
298
|
+
def behavior(self) -> Behavior:
|
|
299
|
+
return self._behavior
|
|
300
|
+
|
|
301
|
+
@behavior.setter # type: ignore
|
|
302
|
+
def behavior(self, flags: List[BehaviorFlag]) -> None:
|
|
303
|
+
flags.extend(self._behavior_flags)
|
|
304
|
+
try:
|
|
305
|
+
# we don't always get project flags, for example during `dbt debug`
|
|
306
|
+
self._behavior = Behavior(flags, self.config.flags)
|
|
307
|
+
except AttributeError:
|
|
308
|
+
# in that case, don't load any behavior to avoid unexpected defaults
|
|
309
|
+
self._behavior = Behavior([], {})
|
|
310
|
+
|
|
311
|
+
@property
|
|
312
|
+
def _behavior_flags(self) -> List[BehaviorFlag]:
|
|
313
|
+
"""
|
|
314
|
+
This method should be overwritten by adapter maintainers to provide platform-specific flags
|
|
315
|
+
"""
|
|
316
|
+
return []
|
|
317
|
+
|
|
294
318
|
###
|
|
295
319
|
# Methods that pass through to the connection manager
|
|
296
320
|
###
|
|
@@ -1549,7 +1573,7 @@ class BaseAdapter(metaclass=AdapterMeta):
|
|
|
1549
1573
|
return ["append"]
|
|
1550
1574
|
|
|
1551
1575
|
def builtin_incremental_strategies(self):
|
|
1552
|
-
return ["append", "delete+insert", "merge", "insert_overwrite"]
|
|
1576
|
+
return ["append", "delete+insert", "merge", "insert_overwrite", "microbatch"]
|
|
1553
1577
|
|
|
1554
1578
|
@available.parse_none
|
|
1555
1579
|
def get_incremental_strategy_macro(self, model_context, strategy: str):
|
dbt/adapters/base/meta.py
CHANGED
|
@@ -92,6 +92,25 @@ class _Available:
|
|
|
92
92
|
available = _Available()
|
|
93
93
|
|
|
94
94
|
|
|
95
|
+
class available_property(property):
|
|
96
|
+
"""
|
|
97
|
+
This supports making dynamic properties (`@property`) available in the jinja context.
|
|
98
|
+
|
|
99
|
+
We use `@available` to make methods available in the jinja context, but this mechanism relies on the method being callable.
|
|
100
|
+
Intuitively, we should be able to use both `@available` and `@property` to create a dynamic property that's available in the jinja context.
|
|
101
|
+
|
|
102
|
+
Using the `@property` decorator as the inner decorator supplies `@available` with something that is not callable.
|
|
103
|
+
Instead of returning the method, `@property` returns the value itself, not the method that is called to create the value.
|
|
104
|
+
|
|
105
|
+
Using the `@available` decorator as the inner decorator adds `_is_available_ = True` to the function.
|
|
106
|
+
However, when the `@property` decorator executes, it returns a `property` object which does not have the `_is_available_` attribute.
|
|
107
|
+
|
|
108
|
+
This decorator solves this problem by simply adding `_is_available_ = True` as an attribute on the `property` built-in.
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
_is_available_ = True
|
|
112
|
+
|
|
113
|
+
|
|
95
114
|
class AdapterMeta(abc.ABCMeta):
|
|
96
115
|
_available_: FrozenSet[str]
|
|
97
116
|
_parse_replacements_: Dict[str, Callable]
|
dbt/adapters/base/relation.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from collections.abc import Hashable
|
|
2
2
|
from dataclasses import dataclass, field
|
|
3
|
+
from datetime import datetime
|
|
3
4
|
from typing import (
|
|
4
5
|
Any,
|
|
5
6
|
Dict,
|
|
@@ -36,6 +37,13 @@ Self = TypeVar("Self", bound="BaseRelation")
|
|
|
36
37
|
SerializableIterable = Union[Tuple, FrozenSet]
|
|
37
38
|
|
|
38
39
|
|
|
40
|
+
@dataclass
|
|
41
|
+
class EventTimeFilter(FakeAPIObject):
|
|
42
|
+
field_name: str
|
|
43
|
+
start: Optional[datetime] = None
|
|
44
|
+
end: Optional[datetime] = None
|
|
45
|
+
|
|
46
|
+
|
|
39
47
|
@dataclass(frozen=True, eq=False, repr=False)
|
|
40
48
|
class BaseRelation(FakeAPIObject, Hashable):
|
|
41
49
|
path: Path
|
|
@@ -47,6 +55,7 @@ class BaseRelation(FakeAPIObject, Hashable):
|
|
|
47
55
|
quote_policy: Policy = field(default_factory=lambda: Policy())
|
|
48
56
|
dbt_created: bool = False
|
|
49
57
|
limit: Optional[int] = None
|
|
58
|
+
event_time_filter: Optional[EventTimeFilter] = None
|
|
50
59
|
require_alias: bool = (
|
|
51
60
|
True # used to govern whether to add an alias when render_limited is called
|
|
52
61
|
)
|
|
@@ -208,14 +217,19 @@ class BaseRelation(FakeAPIObject, Hashable):
|
|
|
208
217
|
# if there is nothing set, this will return the empty string.
|
|
209
218
|
return ".".join(part for _, part in self._render_iterator() if part is not None)
|
|
210
219
|
|
|
211
|
-
def
|
|
220
|
+
def _render_subquery_alias(self, namespace: str) -> str:
|
|
212
221
|
"""Some databases require an alias for subqueries (postgres, mysql) for all others we want to avoid adding
|
|
213
222
|
an alias as it has the potential to introduce issues with the query if the user also defines an alias.
|
|
214
223
|
"""
|
|
215
224
|
if self.require_alias:
|
|
216
|
-
return f"
|
|
225
|
+
return f" _dbt_{namespace}_subq_{self.table}"
|
|
217
226
|
return ""
|
|
218
227
|
|
|
228
|
+
def _render_limited_alias(
|
|
229
|
+
self,
|
|
230
|
+
) -> str:
|
|
231
|
+
return self._render_subquery_alias(namespace="limit")
|
|
232
|
+
|
|
219
233
|
def render_limited(self) -> str:
|
|
220
234
|
rendered = self.render()
|
|
221
235
|
if self.limit is None:
|
|
@@ -225,6 +239,31 @@ class BaseRelation(FakeAPIObject, Hashable):
|
|
|
225
239
|
else:
|
|
226
240
|
return f"(select * from {rendered} limit {self.limit}){self._render_limited_alias()}"
|
|
227
241
|
|
|
242
|
+
def render_event_time_filtered(self, rendered: Optional[str] = None) -> str:
|
|
243
|
+
rendered = rendered or self.render()
|
|
244
|
+
if self.event_time_filter is None:
|
|
245
|
+
return rendered
|
|
246
|
+
|
|
247
|
+
filter = self._render_event_time_filtered(self.event_time_filter)
|
|
248
|
+
if not filter:
|
|
249
|
+
return rendered
|
|
250
|
+
|
|
251
|
+
return f"(select * from {rendered} where {filter}){self._render_subquery_alias(namespace='et_filter')}"
|
|
252
|
+
|
|
253
|
+
def _render_event_time_filtered(self, event_time_filter: EventTimeFilter) -> str:
|
|
254
|
+
"""
|
|
255
|
+
Returns "" if start and end are both None
|
|
256
|
+
"""
|
|
257
|
+
filter = ""
|
|
258
|
+
if event_time_filter.start and event_time_filter.end:
|
|
259
|
+
filter = f"{event_time_filter.field_name} >= '{event_time_filter.start}' and {event_time_filter.field_name} < '{event_time_filter.end}'"
|
|
260
|
+
elif event_time_filter.start:
|
|
261
|
+
filter = f"{event_time_filter.field_name} >= '{event_time_filter.start}'"
|
|
262
|
+
elif event_time_filter.end:
|
|
263
|
+
filter = f"{event_time_filter.field_name} < '{event_time_filter.end}'"
|
|
264
|
+
|
|
265
|
+
return filter
|
|
266
|
+
|
|
228
267
|
def quoted(self, identifier):
|
|
229
268
|
return "{quote_char}{identifier}{quote_char}".format(
|
|
230
269
|
quote_char=self.quote_character,
|
|
@@ -240,6 +279,7 @@ class BaseRelation(FakeAPIObject, Hashable):
|
|
|
240
279
|
cls: Type[Self],
|
|
241
280
|
relation_config: RelationConfig,
|
|
242
281
|
limit: Optional[int] = None,
|
|
282
|
+
event_time_filter: Optional[EventTimeFilter] = None,
|
|
243
283
|
) -> Self:
|
|
244
284
|
# Note that ephemeral models are based on the identifier, which will
|
|
245
285
|
# point to the model's alias if one exists and otherwise fall back to
|
|
@@ -250,6 +290,7 @@ class BaseRelation(FakeAPIObject, Hashable):
|
|
|
250
290
|
type=cls.CTE,
|
|
251
291
|
identifier=identifier,
|
|
252
292
|
limit=limit,
|
|
293
|
+
event_time_filter=event_time_filter,
|
|
253
294
|
).quote(identifier=False)
|
|
254
295
|
|
|
255
296
|
@classmethod
|
|
@@ -315,7 +356,14 @@ class BaseRelation(FakeAPIObject, Hashable):
|
|
|
315
356
|
return hash(self.render())
|
|
316
357
|
|
|
317
358
|
def __str__(self) -> str:
|
|
318
|
-
|
|
359
|
+
rendered = self.render() if self.limit is None else self.render_limited()
|
|
360
|
+
|
|
361
|
+
# Limited subquery is wrapped by the event time filter subquery, and not the other way around.
|
|
362
|
+
# This is because in the context of resolving limited refs, we care more about performance than reliably producing a sample of a certain size.
|
|
363
|
+
if self.event_time_filter:
|
|
364
|
+
rendered = self.render_event_time_filtered(rendered)
|
|
365
|
+
|
|
366
|
+
return rendered
|
|
319
367
|
|
|
320
368
|
@property
|
|
321
369
|
def database(self) -> Optional[str]:
|
dbt/adapters/factory.py
CHANGED
|
@@ -188,7 +188,7 @@ class AdapterContainer:
|
|
|
188
188
|
def get_adapter_type_names(self, name: Optional[str]) -> List[str]:
|
|
189
189
|
return [p.adapter.type() for p in self.get_adapter_plugins(name)]
|
|
190
190
|
|
|
191
|
-
def get_adapter_constraint_support(self, name: Optional[str]) ->
|
|
191
|
+
def get_adapter_constraint_support(self, name: Optional[str]) -> Dict[str, str]:
|
|
192
192
|
return self.lookup_adapter(name).CONSTRAINT_SUPPORT # type: ignore
|
|
193
193
|
|
|
194
194
|
|
|
@@ -251,7 +251,7 @@ def get_adapter_type_names(name: Optional[str]) -> List[str]:
|
|
|
251
251
|
return FACTORY.get_adapter_type_names(name)
|
|
252
252
|
|
|
253
253
|
|
|
254
|
-
def get_adapter_constraint_support(name: Optional[str]) ->
|
|
254
|
+
def get_adapter_constraint_support(name: Optional[str]) -> Dict[str, str]:
|
|
255
255
|
return FACTORY.get_adapter_constraint_support(name)
|
|
256
256
|
|
|
257
257
|
|
|
@@ -15,6 +15,14 @@
|
|
|
15
15
|
{{ current_timestamp() }}
|
|
16
16
|
{% endmacro %}
|
|
17
17
|
|
|
18
|
+
{% macro get_snapshot_get_time_data_type() %}
|
|
19
|
+
{% set snapshot_time = adapter.dispatch('snapshot_get_time', 'dbt')() %}
|
|
20
|
+
{% set time_data_type_sql = 'select ' ~ snapshot_time ~ ' as dbt_snapshot_time' %}
|
|
21
|
+
{% set snapshot_time_column_schema = get_column_schema_from_query(time_data_type_sql) %}
|
|
22
|
+
{% set time_data_type = snapshot_time_column_schema[0].dtype %}
|
|
23
|
+
{{ return(time_data_type or none) }}
|
|
24
|
+
{% endmacro %}
|
|
25
|
+
|
|
18
26
|
---------------------------------------------
|
|
19
27
|
|
|
20
28
|
/* {#
|
|
@@ -66,6 +66,19 @@
|
|
|
66
66
|
{% endmacro %}
|
|
67
67
|
|
|
68
68
|
|
|
69
|
+
{% macro get_incremental_microbatch_sql(arg_dict) %}
|
|
70
|
+
|
|
71
|
+
{{ return(adapter.dispatch('get_incremental_microbatch_sql', 'dbt')(arg_dict)) }}
|
|
72
|
+
|
|
73
|
+
{% endmacro %}
|
|
74
|
+
|
|
75
|
+
{% macro default__get_incremental_microbatch_sql(arg_dict) %}
|
|
76
|
+
|
|
77
|
+
{{ exceptions.raise_not_implemented('microbatch materialization strategy not implemented for adapter ' + adapter.type()) }}
|
|
78
|
+
|
|
79
|
+
{% endmacro %}
|
|
80
|
+
|
|
81
|
+
|
|
69
82
|
{% macro get_insert_into_sql(target_relation, temp_relation, dest_columns) %}
|
|
70
83
|
|
|
71
84
|
{%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute="name")) -%}
|
|
@@ -179,3 +179,28 @@
|
|
|
179
179
|
|
|
180
180
|
{% do return(temp_relation) %}
|
|
181
181
|
{% endmacro %}
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
{% macro get_updated_at_column_data_type(snapshot_sql) %}
|
|
185
|
+
{% set snapshot_sql_column_schema = get_column_schema_from_query(snapshot_sql) %}
|
|
186
|
+
{% set dbt_updated_at_data_type = null %}
|
|
187
|
+
{% set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}
|
|
188
|
+
{% set ns.dbt_updated_at_data_type = null -%}
|
|
189
|
+
{% for column in snapshot_sql_column_schema %}
|
|
190
|
+
{% if ((column.column == 'dbt_updated_at') or (column.column == 'DBT_UPDATED_AT')) %}
|
|
191
|
+
{% set ns.dbt_updated_at_data_type = column.dtype %}
|
|
192
|
+
{% endif %}
|
|
193
|
+
{% endfor %}
|
|
194
|
+
{{ return(ns.dbt_updated_at_data_type or none) }}
|
|
195
|
+
{% endmacro %}
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
{% macro check_time_data_types(sql) %}
|
|
199
|
+
{% set dbt_updated_at_data_type = get_updated_at_column_data_type(sql) %}
|
|
200
|
+
{% set snapshot_get_time_data_type = get_snapshot_get_time_data_type() %}
|
|
201
|
+
{% if snapshot_get_time_data_type is not none and dbt_updated_at_data_type is not none and snapshot_get_time_data_type != dbt_updated_at_data_type %}
|
|
202
|
+
{% if exceptions.warn_snapshot_timestamp_data_types %}
|
|
203
|
+
{{ exceptions.warn_snapshot_timestamp_data_types(snapshot_get_time_data_type, dbt_updated_at_data_type) }}
|
|
204
|
+
{% endif %}
|
|
205
|
+
{% endif %}
|
|
206
|
+
{% endmacro %}
|
|
@@ -29,12 +29,14 @@
|
|
|
29
29
|
{% if not target_relation_exists %}
|
|
30
30
|
|
|
31
31
|
{% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}
|
|
32
|
+
{% set build_or_select_sql = build_sql %}
|
|
32
33
|
{% set final_sql = create_table_as(False, target_relation, build_sql) %}
|
|
33
34
|
|
|
34
35
|
{% else %}
|
|
35
36
|
|
|
36
37
|
{{ adapter.valid_snapshot_target(target_relation) }}
|
|
37
38
|
|
|
39
|
+
{% set build_or_select_sql = snapshot_staging_table(strategy, sql, target_relation) %}
|
|
38
40
|
{% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}
|
|
39
41
|
|
|
40
42
|
-- this may no-op if the database does not require column expansion
|
|
@@ -71,6 +73,9 @@
|
|
|
71
73
|
|
|
72
74
|
{% endif %}
|
|
73
75
|
|
|
76
|
+
|
|
77
|
+
{{ check_time_data_types(build_or_select_sql) }}
|
|
78
|
+
|
|
74
79
|
{% call statement('main') %}
|
|
75
80
|
{{ final_sql }}
|
|
76
81
|
{% endcall %}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: dbt-adapters
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.0
|
|
4
4
|
Summary: The set of adapter protocols and base functionality that supports integration with dbt-core
|
|
5
5
|
Project-URL: Homepage, https://github.com/dbt-labs/dbt-adapters
|
|
6
6
|
Project-URL: Documentation, https://docs.getdbt.com
|
|
@@ -23,7 +23,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.12
|
|
24
24
|
Requires-Python: >=3.8.0
|
|
25
25
|
Requires-Dist: agate<2.0,>=1.0
|
|
26
|
-
Requires-Dist: dbt-common<2.0,>=1.
|
|
26
|
+
Requires-Dist: dbt-common<2.0,>=1.8
|
|
27
27
|
Requires-Dist: mashumaro[msgpack]<4.0,>=3.0
|
|
28
28
|
Requires-Dist: protobuf<5.0,>=3.0
|
|
29
29
|
Requires-Dist: pytz>=2015.7
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
dbt/__init__.py,sha256=iY4jdvOxcDhkdr5FiyOTZPHadKtMZDQ-qC6Fw6_EHPM,277
|
|
2
|
-
dbt/adapters/__about__.py,sha256=
|
|
2
|
+
dbt/adapters/__about__.py,sha256=x8UFKPUEuSXMhqiFugvE43AvVf31jatg5kxfn9Lf_Po,18
|
|
3
3
|
dbt/adapters/__init__.py,sha256=3noHsg-64qI0_Pw6OR9F7l1vU2_qrJvinq8POTtuaZM,252
|
|
4
4
|
dbt/adapters/cache.py,sha256=WGy4ewnz-J13LverTACBW2iFhGswrWLgm-wiBrQnMzo,20084
|
|
5
5
|
dbt/adapters/capability.py,sha256=-Mbej2AL_bjQatHpFWUgsQ8z0zwnotyE9Y5DYHnX7NE,2364
|
|
6
|
-
dbt/adapters/factory.py,sha256=
|
|
6
|
+
dbt/adapters/factory.py,sha256=9N-LjTnyqBKqK7KARjJdAPdQIRXQbVRfd2cBNDtU4Dc,9378
|
|
7
7
|
dbt/adapters/protocol.py,sha256=qRsEFAKjUMVnoBspAiCUTICez1ckson-dFS04dTXSco,3818
|
|
8
8
|
dbt/adapters/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
dbt/adapters/reference_keys.py,sha256=lRN3gPdQD6Qciy-BAGx_rz3CFlbS7zMSZ43pZ_9ondE,1046
|
|
@@ -12,11 +12,11 @@ dbt/adapters/base/README.md,sha256=muHQntC07Lh6L1XfVgwKhV5RltOPBLYPdQqd8_7l34c,5
|
|
|
12
12
|
dbt/adapters/base/__init__.py,sha256=KGGGbj8jGMjAFJdQ5YHcOpApMMVZ_6Xuni1swhpkqRY,423
|
|
13
13
|
dbt/adapters/base/column.py,sha256=Uj20UixoxCn2rlv4QDNONyys6CDkDFyG3anCXKf0T2c,5350
|
|
14
14
|
dbt/adapters/base/connections.py,sha256=-C5dOwGgMKH8n_v6wjwOxV7chBdS0GjOGwNQCUbhhWc,16951
|
|
15
|
-
dbt/adapters/base/impl.py,sha256=
|
|
16
|
-
dbt/adapters/base/meta.py,sha256=
|
|
15
|
+
dbt/adapters/base/impl.py,sha256=SxYJiwG_9BZQw32LeKd5GqQH7rDM8ClaE3E1EHj7aV4,70527
|
|
16
|
+
dbt/adapters/base/meta.py,sha256=IKqviGf7gK_qGtrn0t8NaSdUaw8g_M8SjICacMvNwGY,5702
|
|
17
17
|
dbt/adapters/base/plugin.py,sha256=rm0GjNHnWM2mn0GJOjciZLwn-02xlzWCoMT9u-epwP0,1076
|
|
18
18
|
dbt/adapters/base/query_headers.py,sha256=UluGd9IYCYkoMiDi5Yx_lnrCOSjWppjwRro4SIGgx8I,3496
|
|
19
|
-
dbt/adapters/base/relation.py,sha256=
|
|
19
|
+
dbt/adapters/base/relation.py,sha256=MhwrOGOv6DeijeFy6n61PNdVsa6ZDOMHwwQqIMXYn-Y,18364
|
|
20
20
|
dbt/adapters/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
dbt/adapters/clients/jinja.py,sha256=NsZOiBpOLunS46hRL5OcX1MpY3Ih6_87Vgz4qd_PNbc,768
|
|
22
22
|
dbt/adapters/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -67,7 +67,7 @@ dbt/include/global_project/macros/adapters/persist_docs.sql,sha256=TUazJHSaMIDlE
|
|
|
67
67
|
dbt/include/global_project/macros/adapters/relation.sql,sha256=18lE088vj0JZW8af2byoGLFhxYxekyXKTrX7Dj-B-E0,2809
|
|
68
68
|
dbt/include/global_project/macros/adapters/schema.sql,sha256=XElo0cfvdEipI5hpulLXLBEXP_YnilG-1kRwDMqDD5I,594
|
|
69
69
|
dbt/include/global_project/macros/adapters/show.sql,sha256=mFDQZxvvDzafTeh9v90ttks-VCjUUxbrw_YA02MV1Jk,785
|
|
70
|
-
dbt/include/global_project/macros/adapters/timestamps.sql,sha256=
|
|
70
|
+
dbt/include/global_project/macros/adapters/timestamps.sql,sha256=FvPwWkmM00r9rs2DjR5wrI-U9ah3-8VMIwk5wRRzuPw,1910
|
|
71
71
|
dbt/include/global_project/macros/adapters/validate_sql.sql,sha256=IC-HEVv8Cl8nd7dic_U4hyqlrkdO6plPbH914OdM_WE,285
|
|
72
72
|
dbt/include/global_project/macros/etc/datetime.sql,sha256=HwNxXw0xHHLVKFBlbbc4wqTdYe6_smku1EwWGM7G-6g,2185
|
|
73
73
|
dbt/include/global_project/macros/etc/statement.sql,sha256=lkm6T6kCIPGkCuHVS6VuVqsAX8zV9CI7iTIOnPOZnw8,1819
|
|
@@ -91,11 +91,11 @@ dbt/include/global_project/macros/materializations/models/incremental/incrementa
|
|
|
91
91
|
dbt/include/global_project/macros/materializations/models/incremental/is_incremental.sql,sha256=Sm1TqOeqcCQofj3REFcA97yukPB1J_mClDd55r5GewE,478
|
|
92
92
|
dbt/include/global_project/macros/materializations/models/incremental/merge.sql,sha256=Xg5-Gc9jHego-wpdfg6yEIQv7EClz6-xcJEeFXuZiwQ,5197
|
|
93
93
|
dbt/include/global_project/macros/materializations/models/incremental/on_schema_change.sql,sha256=EOgcrYhwOGVPnyaBu7kIfe8LTOYVOu-AhxMtBs8ETpQ,4927
|
|
94
|
-
dbt/include/global_project/macros/materializations/models/incremental/strategies.sql,sha256=
|
|
94
|
+
dbt/include/global_project/macros/materializations/models/incremental/strategies.sql,sha256=ORGWiYfj-b3_VIps9FDlyx-Q4A2hZzX2aYLocW8b6pU,2613
|
|
95
95
|
dbt/include/global_project/macros/materializations/seeds/helpers.sql,sha256=Y15ej-D3gm1ExIOMNT208q43gRk8d985WQBuGSooNL0,3920
|
|
96
96
|
dbt/include/global_project/macros/materializations/seeds/seed.sql,sha256=YSoGzVO3iIUiOKIUM9G7yApGLFH4O9bv_d4KjHo3p4Q,2155
|
|
97
|
-
dbt/include/global_project/macros/materializations/snapshots/helpers.sql,sha256=
|
|
98
|
-
dbt/include/global_project/macros/materializations/snapshots/snapshot.sql,sha256=
|
|
97
|
+
dbt/include/global_project/macros/materializations/snapshots/helpers.sql,sha256=rLnopom7nEzbQ12C9O9yIMh4C8poshYqlVTnmE4gLh0,6012
|
|
98
|
+
dbt/include/global_project/macros/materializations/snapshots/snapshot.sql,sha256=q_LzkaeJCXGemzPvHnCWYTUS7ODaS747cYN_zXZHb7k,3874
|
|
99
99
|
dbt/include/global_project/macros/materializations/snapshots/snapshot_merge.sql,sha256=Lu3Yq3fEQuOGoDY0NFfruTAuvOEF3wXuo3SF_dK7uqY,858
|
|
100
100
|
dbt/include/global_project/macros/materializations/snapshots/strategies.sql,sha256=ahWDMnD-Q_fTGKSjvm5ZwvypmNC6BDVguk-LNk-nHhU,6286
|
|
101
101
|
dbt/include/global_project/macros/materializations/tests/helpers.sql,sha256=rxUxDZm4EvrDbi0H_ePghE34_QLmxGEY2o_LTMc9CU0,1731
|
|
@@ -157,7 +157,7 @@ dbt/include/global_project/macros/utils/right.sql,sha256=EwNG98CAFIwNDmarwopf7Rk
|
|
|
157
157
|
dbt/include/global_project/macros/utils/safe_cast.sql,sha256=1mswwkDACmIi1I99JKb_-vq3kjMe4HhMRV70mW8Bt4Y,298
|
|
158
158
|
dbt/include/global_project/macros/utils/split_part.sql,sha256=fXEIS0oIiYR7-4lYbb0QbZdG-q2TpV63AFd1ky4I5UM,714
|
|
159
159
|
dbt/include/global_project/tests/generic/builtin.sql,sha256=p94xdyPwb2TlxgLBqCfrcRfJ1QNgsjPvBm8f0Q5eqZM,1022
|
|
160
|
-
dbt_adapters-1.
|
|
161
|
-
dbt_adapters-1.
|
|
162
|
-
dbt_adapters-1.
|
|
163
|
-
dbt_adapters-1.
|
|
160
|
+
dbt_adapters-1.6.0.dist-info/METADATA,sha256=U_VNpaFe2HNhS7AnTf2MhcgU2HUHv9Iui_N6NRCqNSw,2547
|
|
161
|
+
dbt_adapters-1.6.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
162
|
+
dbt_adapters-1.6.0.dist-info/licenses/LICENSE,sha256=9yjigiJhWcCZvQjdagGKDwrRph58QWc5P2bVSQwXo6s,11344
|
|
163
|
+
dbt_adapters-1.6.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|