From c0ccbd016564251bc8488d9bb98e5f361dd473ad Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Sat, 20 Jun 2026 11:58:48 +0200 Subject: [PATCH] recipe: duckdb 1.5.4 --- recipes/duckdb/meta.yaml | 49 +++++++++++++++++++++++++++++ recipes/duckdb/tests/test_duckdb.py | 27 ++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 recipes/duckdb/meta.yaml create mode 100644 recipes/duckdb/tests/test_duckdb.py diff --git a/recipes/duckdb/meta.yaml b/recipes/duckdb/meta.yaml new file mode 100644 index 0000000..b04cd04 --- /dev/null +++ b/recipes/duckdb/meta.yaml @@ -0,0 +1,49 @@ +package: + name: duckdb + version: 1.5.4 + +requirements: + build: + # duckdb builds via scikit-build-core + CMake (Ninja generator); with forge's + # `--no-isolation` these must be in the build venv. scikit-build-core, + # pybind11 and setuptools_scm come from the package's own build-system.requires. + - cmake + - ninja +# {% if sdk == 'android' %} + host: + # duckdb's _duckdb.so is C++; on Android it links libc++_shared.so, which the + # device runtime doesn't provide unless bundled. + - flet-libcpp-shared >=27.2.12479018 +# {% endif %} + +build: + number: 1 + script_env: +# {% if sdk == 'android' %} + CMAKE_ARGS: >- + -DCMAKE_TOOLCHAIN_FILE={NDK_ROOT}/build/cmake/android.toolchain.cmake + -DANDROID_ABI={ANDROID_ABI} + -DANDROID_NATIVE_API_LEVEL={ANDROID_API_LEVEL} + -DANDROID_STL=c++_shared + -DCMAKE_CROSSCOMPILING_EMULATOR=/usr/bin/env + -DCMAKE_SHARED_LINKER_FLAGS=-Wl,-z,max-page-size=16384 + -DCMAKE_MODULE_LINKER_FLAGS=-Wl,-z,max-page-size=16384 + -DPython_EXECUTABLE={CROSS_VENV_PYTHON} + -DPython_INCLUDE_DIR={HOST_PYTHON_HOME}/include/python{py_version_short} + -DPython_LIBRARY={HOST_PYTHON_HOME}/lib/libpython{py_version_short}.so +# {% else %} + # The `ninja` pip package crashes importing on the iOS crossenv python + # (sysconfig.get_preferred_scheme('user') -> 'posix_user' invalid on iOS), + # so use the Makefiles generator on iOS; scikit-build-core then never imports + # ninja. (Android keeps Ninja, which works there.) + CMAKE_GENERATOR: Unix Makefiles + CMAKE_ARGS: >- + -DCMAKE_SYSTEM_NAME=iOS + -DCMAKE_OSX_SYSROOT={{ sdk }} + -DCMAKE_OSX_DEPLOYMENT_TARGET={{ sdk_version }} + -DCMAKE_OSX_ARCHITECTURES={{ arch }} + -DCMAKE_CROSSCOMPILING_EMULATOR=/usr/bin/env + -DPython_EXECUTABLE={CROSS_VENV_PYTHON} + -DPython_INCLUDE_DIR={HOST_PYTHON_HOME}/include/python{py_version_short} + -DPython_LIBRARY={HOST_PYTHON_HOME}/lib/libpython{py_version_short}.dylib +# {% endif %} diff --git a/recipes/duckdb/tests/test_duckdb.py b/recipes/duckdb/tests/test_duckdb.py new file mode 100644 index 0000000..b2d408e --- /dev/null +++ b/recipes/duckdb/tests/test_duckdb.py @@ -0,0 +1,27 @@ +def test_import_version(): + """Loads the _duckdb pybind11 C++ extension (the canary that the big C++ + engine cross-compiled and links its C++ runtime).""" + import duckdb + + assert duckdb.__version__ + + +def test_in_memory_query(): + """duckdb is an in-process OLAP engine — no server needed. Open an in-memory + database and run a CREATE/INSERT/SELECT round-trip through the engine.""" + import duckdb + + con = duckdb.connect(":memory:") + try: + assert con.execute("SELECT 42").fetchone() == (42,) + + con.execute("CREATE TABLE t(id INTEGER, name VARCHAR)") + con.executemany("INSERT INTO t VALUES (?, ?)", [(1, "apple"), (2, "banana")]) + rows = con.execute("SELECT id, name FROM t ORDER BY id").fetchall() + assert rows == [(1, "apple"), (2, "banana")], rows + + # an aggregate to exercise the analytical engine path + total = con.execute("SELECT sum(id) FROM t").fetchone() + assert total == (3,), total + finally: + con.close()