Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prep work for dbt-core 1.7.0 #280

Merged
merged 8 commits into from
Nov 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dbt/adapters/duckdb/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
version = "1.6.2"
version = "1.7.0"
3 changes: 2 additions & 1 deletion dbt/include/duckdb/macros/seed.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@
{% macro duckdb__load_csv_rows(model, agate_table) %}
{% if config.get('fast', true) %}
{% set seed_file_path = adapter.get_seed_file_path(model) %}
{% set delimiter = config.get('delimiter', ',') %}
{% set sql %}
COPY {{ this.render() }} FROM '{{ seed_file_path }}' (FORMAT CSV, HEADER TRUE)
COPY {{ this.render() }} FROM '{{ seed_file_path }}' (FORMAT CSV, HEADER TRUE, DELIMITER '{{ delimiter }}')
{% endset %}
{% do adapter.add_query(sql, abridge_sql_log=True) %}
{{ return(sql) }}
Expand Down
2 changes: 1 addition & 1 deletion dev-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# git+https://github.com/dbt-labs/dbt-core.git#egg=dbt-core&subdirectory=core
# git+https://github.com/dbt-labs/dbt-core.git#egg=dbt-tests-adapter&subdirectory=tests/adapter

dbt-tests-adapter==1.6.6
dbt-tests-adapter==1.7.0

boto3
mypy-boto3-glue
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def _dbt_duckdb_version():
packages=find_namespace_packages(include=["dbt", "dbt.*"]),
include_package_data=True,
install_requires=[
"dbt-core~=1.6.0",
"dbt-core~=1.7.0",
"duckdb>=0.7.0",
],
extras_require={
Expand Down
36 changes: 35 additions & 1 deletion tests/functional/adapter/simple_seed/test_fast_seed.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import pytest

from dbt.tests.adapter.simple_seed.test_seed import SeedTestBase
from dbt.tests.adapter.simple_seed.test_seed import SeedUniqueDelimiterTestBase
from dbt.tests.util import (
run_dbt,
)
Expand All @@ -14,4 +15,37 @@ def project_config_update(self):

def test_simple_seed_fast(self, project):
self._build_relations_for_test(project)
self._check_relation_end_state(run_result=run_dbt(["seed"]), project=project, exists=True)
self._check_relation_end_state(run_result=run_dbt(["seed"]), project=project, exists=True)


class TestSeedWithUniqueDelimiter(SeedUniqueDelimiterTestBase):
def test_seed_with_unique_delimiter(self, project):
"""Testing correct run of seeds with a unique delimiter (pipe in this case)"""
self._build_relations_for_test(project)
self._check_relation_end_state(run_result=run_dbt(["seed"]), project=project, exists=True)


class TestSeedWithWrongDelimiter(SeedUniqueDelimiterTestBase):
@pytest.fixture(scope="class")
def project_config_update(self):
return {
"seeds": {"quote_columns": False, "delimiter": ";"},
}

def test_seed_with_wrong_delimiter(self, project):
"""Testing failure of running dbt seed with a wrongly configured delimiter"""
seed_result = run_dbt(["seed"], expect_pass=False)
assert "syntax error" in seed_result.results[0].message.lower()


class TestSeedWithEmptyDelimiter(SeedUniqueDelimiterTestBase):
@pytest.fixture(scope="class")
def project_config_update(self):
return {
"seeds": {"quote_columns": False, "delimiter": ""},
}

def test_seed_with_empty_delimiter(self, project):
"""Testing failure of running dbt seed with an empty configured delimiter value"""
seed_result = run_dbt(["seed"], expect_pass=False)
assert "compilation error" in seed_result.results[0].message.lower()
25 changes: 25 additions & 0 deletions tests/functional/adapter/utils/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,14 @@
from dbt.tests.adapter.utils.test_date_trunc import BaseDateTrunc
from dbt.tests.adapter.utils.test_dateadd import BaseDateAdd
from dbt.tests.adapter.utils.test_datediff import BaseDateDiff
from dbt.tests.adapter.utils.test_date_spine import BaseDateSpine
from dbt.tests.adapter.utils.test_escape_single_quotes import (
BaseEscapeSingleQuotesQuote,
)
from dbt.tests.adapter.utils.test_except import BaseExcept
from dbt.tests.adapter.utils.test_generate_series import BaseGenerateSeries
from dbt.tests.adapter.utils.test_get_intervals_between import BaseGetIntervalsBetween
from dbt.tests.adapter.utils.test_get_powers_of_two import BaseGetPowersOfTwo
from dbt.tests.adapter.utils.test_hash import BaseHash
from dbt.tests.adapter.utils.test_intersect import BaseIntersect
from dbt.tests.adapter.utils.test_last_day import BaseLastDay
Expand Down Expand Up @@ -52,6 +56,12 @@ class TestDateDiff(BaseDateDiff):
pass


# Skipping this b/c the upstream utils test
# is irritatingly adapter-specific at the moment
@pytest.mark.skip
class TestDateSpine(BaseDateSpine):
pass

class TestDateTrunc(BaseDateTrunc):
pass

Expand All @@ -60,6 +70,21 @@ class TestEscapeSingleQuotes(BaseEscapeSingleQuotesQuote):
pass


class TestGenerateSeries(BaseGenerateSeries):
pass


# Skipping this b/c the upstream utils test
# is irritatingly adapter-specific at the moment
@pytest.mark.skip
class TestGetIntervalsBetween(BaseGetIntervalsBetween):
pass


class TestGetPowersOfTwo(BaseGetPowersOfTwo):
pass


class TestExcept(BaseExcept):
pass

Expand Down
28 changes: 0 additions & 28 deletions tests/unit/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from unittest import TestCase, mock

from dbt.config.project import PartialProject
from hologram import ValidationError


def normalize(path):
Expand Down Expand Up @@ -121,33 +120,6 @@ def inject_adapter(value, plugin):
FACTORY.adapters[key] = value


class ContractTestCase(TestCase):
ContractType = None

def setUp(self):
self.maxDiff = None
super().setUp()

def assert_to_dict(self, obj, dct):
self.assertEqual(obj.to_dict(), dct)

def assert_from_dict(self, obj, dct, cls=None):
if cls is None:
cls = self.ContractType
self.assertEqual(cls.from_dict(dct), obj)

def assert_symmetric(self, obj, dct, cls=None):
self.assert_to_dict(obj, dct)
self.assert_from_dict(obj, dct, cls)

def assert_fails_validation(self, dct, cls=None):
if cls is None:
cls = self.ContractType

with self.assertRaises(ValidationError):
cls.from_dict(dct)


def generate_name_macros(package):
from dbt.contracts.graph.parsed import ParsedMacro
from dbt.node_types import NodeType
Expand Down