Skip to content

Commit 6941d2b

Browse files
authored
Merge pull request #55 from codeforkjeff/dbt-1-6-0-compat-2
add minimum compatibility for 1.6.0
2 parents c72c439 + bde0e34 commit 6941d2b

File tree

7 files changed

+81
-11
lines changed

7 files changed

+81
-11
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ RUN apt-get update && apt-get -y install git python3 python3-pip python3-venv sq
88
WORKDIR /opt/dbt-sqlite
99

1010
RUN python3 -m pip install --upgrade pip \
11-
&& python3 -m pip install pytest pytest-dotenv dbt-core~=1.5.0 dbt-tests-adapter~=1.5.0
11+
&& python3 -m pip install pytest pytest-dotenv dbt-core~=1.6.0 dbt-tests-adapter~=1.6.0
1212

1313
RUN wget -q https://github.com/nalgeon/sqlean/releases/download/0.15.2/crypto.so
1414
RUN wget -q https://github.com/nalgeon/sqlean/releases/download/0.15.2/math.so

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Use the right version. Starting with the release of dbt-core 1.0.0,
3434
versions of dbt-sqlite are aligned to the same major+minor
3535
[version](https://semver.org/) of dbt-core.
3636

37+
- versions 1.5.x of this adapter work with dbt-core 1.6.x
3738
- versions 1.5.x of this adapter work with dbt-core 1.5.x
3839
- versions 1.4.x of this adapter work with dbt-core 1.4.x
3940
- versions 1.3.x of this adapter work with dbt-core 1.3.x

dbt/adapters/sqlite/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = '1.5.1'
1+
version = '1.6.0'
Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,33 @@
11
{% macro sqlite__dateadd(datepart, interval, from_date_or_timestamp) %}
2+
-- If provided a DATETIME, returns a DATETIME
3+
-- If provided a DATE, returns a DATE
24

3-
date(
4-
{{ from_date_or_timestamp }},
5-
"{{ interval }} {{ datepart }}"
6-
)
7-
5+
CASE
6+
-- Matches DATETIME type based on ISO-8601
7+
WHEN {{ from_date_or_timestamp }} LIKE '%:%' OR ({{ from_date_or_timestamp }} LIKE '%T%' AND {{ from_date_or_timestamp }} LIKE '%Z%') THEN
8+
CASE
9+
WHEN LOWER({{ datepart }}) = 'second' THEN datetime({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' seconds')
10+
WHEN LOWER({{ datepart }}) = 'minute' THEN datetime({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' minutes')
11+
WHEN LOWER({{ datepart }}) = 'hour' THEN datetime({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' hours')
12+
WHEN LOWER({{ datepart }}) = 'day' THEN datetime({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' days')
13+
WHEN LOWER({{ datepart }}) = 'week' THEN datetime({{ from_date_or_timestamp }}, '+' || ({{ interval }} * 7) || ' days')
14+
WHEN LOWER({{ datepart }}) = 'month' THEN datetime({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' months')
15+
WHEN LOWER({{ datepart }}) = 'quarter' THEN datetime({{ from_date_or_timestamp }}, '+' || ({{ interval }} * 3) || ' months')
16+
WHEN LOWER({{ datepart }}) = 'year' THEN datetime({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' years')
17+
ELSE NULL
18+
END
19+
-- Matches DATE type based on ISO-8601
20+
WHEN {{ from_date_or_timestamp }} LIKE '%-%' AND {{ from_date_or_timestamp }} NOT LIKE '%T%' AND {{ from_date_or_timestamp }} NOT LIKE '% %' THEN
21+
CASE
22+
WHEN LOWER({{ datepart }}) IN ('second', 'minute', 'hour') THEN date({{ from_date_or_timestamp }})
23+
WHEN LOWER({{ datepart }}) = 'day' THEN date({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' days')
24+
WHEN LOWER({{ datepart }}) = 'week' THEN date({{ from_date_or_timestamp }}, '+' || ({{ interval }} * 7) || ' days')
25+
WHEN LOWER({{ datepart }}) = 'month' THEN date({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' months')
26+
WHEN LOWER({{ datepart }}) = 'quarter' THEN date({{ from_date_or_timestamp }}, '+' || ({{ interval }} * 3) || ' months')
27+
WHEN LOWER({{ datepart }}) = 'year' THEN date({{ from_date_or_timestamp }}, '+' || {{ interval }} || ' years')
28+
ELSE NULL
29+
END
30+
ELSE
31+
NULL
32+
END
833
{% endmacro %}

dbt/include/sqlite/macros/utils/timestamps.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{%- endmacro %}
44

55
{% macro sqlite__snapshot_string_as_time(timestamp) -%}
6-
{# just return the string; SQLite doesn't have a timestamp data type per se #}
6+
{# just return the string; SQLite doesn''t have a timestamp data type per se #}
77
{{ return("'" + timestamp|string + "'") }}
88
{%- endmacro %}
99

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def _get_plugin_version():
4646
]
4747
},
4848
install_requires=[
49-
"dbt-core~=1.5.0"
49+
"dbt-core~=1.6.0"
5050
],
5151
classifiers=[
5252
'Development Status :: 4 - Beta',

tests/functional/adapter/utils/test_utils.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
seeds__data_datediff_csv,
55
models__test_datediff_yml,
66
)
7+
from dbt.tests.adapter.utils.fixture_dateadd import (
8+
seeds__data_dateadd_csv,
9+
models__test_dateadd_yml,
10+
)
711
from dbt.tests.adapter.utils.test_any_value import BaseAnyValue
812
from dbt.tests.adapter.utils.test_array_append import BaseArrayAppend
913
from dbt.tests.adapter.utils.test_array_concat import BaseArrayConcat
@@ -29,6 +33,9 @@
2933
from dbt.tests.adapter.utils.test_safe_cast import BaseSafeCast
3034
from dbt.tests.adapter.utils.test_split_part import BaseSplitPart
3135
from dbt.tests.adapter.utils.test_string_literal import BaseStringLiteral
36+
from dbt.tests.adapter.utils.test_equals import BaseEquals
37+
from dbt.tests.adapter.utils.test_null_compare import BaseMixedNullCompare, BaseNullCompare
38+
from dbt.tests.adapter.utils.test_validate_sql import BaseValidateSqlMethod
3239

3340

3441
class TestAnyValue(BaseAnyValue):
@@ -66,6 +73,32 @@ class TestConcat(BaseConcat):
6673
class TestCurrentTimestampNaive(BaseCurrentTimestampNaive):
6774
pass
6875

76+
class BaseDateAdd(BaseUtils):
77+
78+
models__test_dateadd_sql = """
79+
with data as (
80+
select * from {{ ref('data_dateadd') }}
81+
)
82+
83+
select
84+
{{ dateadd('datepart', 'interval_length', 'from_time') }} AS actual,
85+
result as expected
86+
from data
87+
"""
88+
89+
@pytest.fixture(scope="class")
90+
def seeds(self):
91+
return {"data_dateadd.csv": seeds__data_dateadd_csv}
92+
93+
@pytest.fixture(scope="class")
94+
def models(self):
95+
return {
96+
"test_dateadd.yml": models__test_dateadd_yml,
97+
"test_dateadd.sql": self.interpolate_macro_namespace(
98+
self.models__test_dateadd_sql, "dateadd"
99+
),
100+
}
101+
69102

70103
class TestDateAdd(BaseDateAdd):
71104
pass
@@ -179,10 +212,21 @@ class TestRight(BaseRight):
179212
class TestSafeCast(BaseSafeCast):
180213
pass
181214

182-
215+
@pytest.mark.skip("TODO: implement split_part, either using sqlite>=3.8.3 for WITH RECURSIVE support, or possibly sooner using jinja and agate tables")
183216
class TestSplitPart(BaseSplitPart):
184217
pass
185218

186-
187219
class TestStringLiteral(BaseStringLiteral):
188220
pass
221+
222+
class TestEquals(BaseEquals):
223+
pass
224+
225+
class TestMixedNullCompare(BaseMixedNullCompare):
226+
pass
227+
228+
class TestNullCompare(BaseNullCompare):
229+
pass
230+
231+
class TestValidateSqlMethod(BaseValidateSqlMethod):
232+
pass

0 commit comments

Comments
 (0)