From ced65eba50410b5654c9e43cfa950e4c05ef829a Mon Sep 17 00:00:00 2001 From: Elliana May Date: Sun, 28 Sep 2025 19:41:48 +0800 Subject: [PATCH 1/6] build: add duckdb 1.4.0 to test matrix --- noxfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noxfile.py b/noxfile.py index 1acc26623..3538699a8 100644 --- a/noxfile.py +++ b/noxfile.py @@ -24,7 +24,7 @@ def group(title: str) -> Generator[None, None, None]: # TODO: "0.5.1", "0.6.1", "0.7.1", "0.8.1" # TODO: 3.11, 3.12, 3.13 @nox.session(py=["3.9", "3.10"]) -@nox.parametrize("duckdb", ["0.9.2", "1.0.0", "1.2.2"]) +@nox.parametrize("duckdb", ["0.9.2", "1.0.0", "1.4.0"]) @nox.parametrize("sqlalchemy", ["1.3", "1.4", "2.0.35"]) def tests(session: nox.Session, duckdb: str, sqlalchemy: str) -> None: tests_core(session, duckdb, sqlalchemy) From 2dbdba5205da6dd18b7f3cc5c416c1d80f9cd3eb Mon Sep 17 00:00:00 2001 From: Elliana May Date: Sun, 28 Sep 2025 19:46:37 +0800 Subject: [PATCH 2/6] fix: translate description in duckdb version 1.4.0 --- duckdb_engine/__init__.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/duckdb_engine/__init__.py b/duckdb_engine/__init__.py index e6b1680e2..5f7307b87 100644 --- a/duckdb_engine/__init__.py +++ b/duckdb_engine/__init__.py @@ -44,6 +44,7 @@ duckdb_version: str = duckdb.__version__ supports_attach: bool = duckdb_version >= "0.7.0" supports_user_agent: bool = duckdb_version >= "0.9.2" +returns_complex_description = duckdb_version >= "1.4.0" if TYPE_CHECKING: from sqlalchemy.base import Connection @@ -166,6 +167,14 @@ def connection(self) -> "Connection": def close(self) -> None: pass # closing cursors is not supported in duckdb + @property + def description(self): + descr = self.__c.description + if returns_complex_description: + return [(name, typ.id, *rest) for (name, typ, *rest) in descr] + else: + return descr + def __getattr__(self, name: str) -> Any: return getattr(self.__c, name) From 718046723b59cffa1ec03dcc6c4c26198d513848 Mon Sep 17 00:00:00 2001 From: Elliana May Date: Sun, 28 Sep 2025 19:58:47 +0800 Subject: [PATCH 3/6] chore: handle None --- duckdb_engine/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/duckdb_engine/__init__.py b/duckdb_engine/__init__.py index 5f7307b87..9e09fca9e 100644 --- a/duckdb_engine/__init__.py +++ b/duckdb_engine/__init__.py @@ -170,7 +170,7 @@ def close(self) -> None: @property def description(self): descr = self.__c.description - if returns_complex_description: + if returns_complex_description and descr is not None: return [(name, typ.id, *rest) for (name, typ, *rest) in descr] else: return descr From c8a3b7c2cb5d20441f6faf953a76b184a80a11a5 Mon Sep 17 00:00:00 2001 From: Elliana May Date: Wed, 22 Oct 2025 00:35:47 +0800 Subject: [PATCH 4/6] use 1.4.1 --- noxfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noxfile.py b/noxfile.py index 3538699a8..389a0265f 100644 --- a/noxfile.py +++ b/noxfile.py @@ -24,7 +24,7 @@ def group(title: str) -> Generator[None, None, None]: # TODO: "0.5.1", "0.6.1", "0.7.1", "0.8.1" # TODO: 3.11, 3.12, 3.13 @nox.session(py=["3.9", "3.10"]) -@nox.parametrize("duckdb", ["0.9.2", "1.0.0", "1.4.0"]) +@nox.parametrize("duckdb", ["0.9.2", "1.0.0", "1.4.1"]) @nox.parametrize("sqlalchemy", ["1.3", "1.4", "2.0.35"]) def tests(session: nox.Session, duckdb: str, sqlalchemy: str) -> None: tests_core(session, duckdb, sqlalchemy) From 5b075f5ba05f6be1e3278ef749e2468283a6ac91 Mon Sep 17 00:00:00 2001 From: Elliana May Date: Wed, 22 Oct 2025 00:36:06 +0800 Subject: [PATCH 5/6] restore 1.2.2 --- noxfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noxfile.py b/noxfile.py index 389a0265f..6d7a74a9d 100644 --- a/noxfile.py +++ b/noxfile.py @@ -24,7 +24,7 @@ def group(title: str) -> Generator[None, None, None]: # TODO: "0.5.1", "0.6.1", "0.7.1", "0.8.1" # TODO: 3.11, 3.12, 3.13 @nox.session(py=["3.9", "3.10"]) -@nox.parametrize("duckdb", ["0.9.2", "1.0.0", "1.4.1"]) +@nox.parametrize("duckdb", ["0.9.2", "1.0.0", "1.2.2", "1.4.1"]) @nox.parametrize("sqlalchemy", ["1.3", "1.4", "2.0.35"]) def tests(session: nox.Session, duckdb: str, sqlalchemy: str) -> None: tests_core(session, duckdb, sqlalchemy) From edc0dfe7e62b15ccb79ff49b2b678637ca1797a7 Mon Sep 17 00:00:00 2001 From: Elliana May Date: Wed, 22 Oct 2025 00:41:27 +0800 Subject: [PATCH 6/6] chore: add method type --- duckdb_engine/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/duckdb_engine/__init__.py b/duckdb_engine/__init__.py index 9e09fca9e..0f1abb9cc 100644 --- a/duckdb_engine/__init__.py +++ b/duckdb_engine/__init__.py @@ -168,7 +168,7 @@ def close(self) -> None: pass # closing cursors is not supported in duckdb @property - def description(self): + def description(self) -> tuple: descr = self.__c.description if returns_complex_description and descr is not None: return [(name, typ.id, *rest) for (name, typ, *rest) in descr]