From 6caf95e5cc7c3380892821ecaeaedf13a54bf3b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 09:56:49 +0200 Subject: [PATCH 01/33] first attempt --- .../actions/manylinux_2014_setup/action.yml | 111 +++++++++++ .github/actions/ubuntu_18_setup/action.yml | 100 ++++++++++ .github/workflows/ODBC.yml | 181 ++++++++++++++++++ scripts/setup_manylinux2014.sh | 84 ++++++++ scripts/upload-assets-to-staging.sh | 64 +++++++ 5 files changed, 540 insertions(+) create mode 100644 .github/actions/manylinux_2014_setup/action.yml create mode 100644 .github/actions/ubuntu_18_setup/action.yml create mode 100644 .github/workflows/ODBC.yml create mode 100755 scripts/setup_manylinux2014.sh create mode 100755 scripts/upload-assets-to-staging.sh diff --git a/.github/actions/manylinux_2014_setup/action.yml b/.github/actions/manylinux_2014_setup/action.yml new file mode 100644 index 00000000..71bb3f0a --- /dev/null +++ b/.github/actions/manylinux_2014_setup/action.yml @@ -0,0 +1,111 @@ +name: "Setup manylinux2014 image" +description: "Installs/configures additional CI dependencies" +inputs: + aws-cli: + description: 'Setup aws-cli' + default: 0 + ninja-build: + description: 'Setup ninja-build' + default: 0 + vcpkg: + description: 'Setup vcpkg (installs to $GITHUB_WORKSPACE/vcpkg)' + default: 0 + openssl: + description: 'Setup OpenSSL (requires vcpkg to also be installed)' + default: 0 + ccache: + description: 'Setup Ccache' + default: 0 + jdk: + description: 'Setup JDK' + default: 0 + odbc: + description: 'Setup ODBC' + default: 0 + ssh: + description: 'Setup SSH' + default: 0 + glibc32: + description: 'Setup 32bit glibc' + default: 0 + nodejs: + description: 'Setup NodeJS' + default: 0 + gcc_4_8: + description: 'Setup GCC 4.8 (installs to /usr/bin/g++, default will still be GCC 10)' + default: 0 + python_alias: + description: 'Create an alias for python3 to python3.9' + default: 0 + +runs: + using: "composite" + steps: + - name: Setup general dependencies + shell: bash + run: scripts/setup_manylinux2014.sh general + + - name: Install AWS CLI + if: ${{ inputs.aws-cli == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh aws-cli + + - name: Setup dependencies for ODBC + if: ${{ inputs.odbc == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh odbc + + - name: Setup dependencies for ccache + if: ${{ inputs.ccache == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh ccache + + - name: Setup JDK + if: ${{ inputs.jdk == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh jdk + + - name: Setup SSH + if: ${{ inputs.ssh == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh ssh + + - name: Setup NodeJS + if: ${{ inputs.nodejs == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh nodejs + + - name: Setup 32bit compiler + if: ${{ inputs.glibc32 == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh glibc32 + + - name: Setup python3 as python3.9 + if: ${{ inputs.python_alias == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh python_alias + + - name: Setup old (GCC 4.8) compiler + if: ${{ inputs.gcc_4_8 == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh gcc_4_8 + + # Note instead of using scripts/setup_manylinux2014.sh vcpkg, we prefer to use + # lukka/run-vcpkg@v11.1 here as it configures vcpkg to cache to GH actions. + - name: Setup vcpkg + if: ${{ inputs.vcpkg == 1 }} + uses: lukka/run-vcpkg@v11.1 + with: + vcpkgGitCommitId: a1a1cbc975abf909a6c8985a6a2b8fe20bbd9bd6 + + - name: Install OpenSSL + if: ${{ inputs.openssl == 1 }} + shell: bash + run: scripts/setup_manylinux2014.sh openssl + + - name: Setup Ccache + if: ${{ inputs.ccache == 1 }} + uses: hendrikmuhs/ccache-action@v1.2.11 # Note: pinned due to GLIBC incompatibility in later releases + with: + key: ${{ github.job }} + save: ${{ github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb-java' }} \ No newline at end of file diff --git a/.github/actions/ubuntu_18_setup/action.yml b/.github/actions/ubuntu_18_setup/action.yml new file mode 100644 index 00000000..c01e8ce7 --- /dev/null +++ b/.github/actions/ubuntu_18_setup/action.yml @@ -0,0 +1,100 @@ +name: "Setup Ubuntu 18" +description: "Setup an Ubuntu 18 docker container with the required libraries" +inputs: + openssl: + description: 'OpenSSL' + default: 0 + python: + description: 'Python' + default: 1 + aarch64_cross_compile: + description: 'Install dependencies for aarch64 cross-compiling' + default: 0 + vcpkg: + description: 'Install vcpkg' + default: 0 + ccache: + description: 'Install ccache' + default: 0 + +runs: + using: "composite" + steps: + - name: Install + shell: bash + run: | + apt-get update -y -qq + apt-get install -y -qq software-properties-common + add-apt-repository ppa:git-core/ppa + apt-get update -y -qq + apt-get install -y -qq ninja-build make gcc-multilib g++-multilib libssl-dev wget openjdk-8-jdk zip maven unixodbc-dev libc6-dev-i386 lib32readline6-dev libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip build-essential checkinstall libffi-dev curl libz-dev openssh-client pkg-config + + - name: Install + shell: bash + if: ${{ inputs.aarch64_cross_compile == 1 }} + run: | + apt-get install -y -qq gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + + - name: Install Git 2.18.5 + shell: bash + run: | + wget https://github.com/git/git/archive/refs/tags/v2.18.5.tar.gz + tar xvf v2.18.5.tar.gz + cd git-2.18.5 + make + make prefix=/usr install + git --version + + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install CMake 3.21 + shell: bash + run: | + wget https://github.com/Kitware/CMake/releases/download/v3.21.3/cmake-3.21.3-linux-x86_64.sh + chmod +x cmake-3.21.3-linux-x86_64.sh + ./cmake-3.21.3-linux-x86_64.sh --skip-license --prefix=/usr/local + cmake --version + + - name: Install Python 3.8 + if: ${{ inputs.python }} == 1 + shell: bash + run: | + wget https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tgz + tar xvf Python-3.8.17.tgz + cd Python-3.8.17 + mkdir -p pythonbin + ./configure --with-ensurepip=install + make -j + make install + python3.8 --version + python3.8 -m pip install pip + python3.8 -m pip install requests awscli + + - name: Version Check + shell: bash + run: | + ldd --version ldd + python3 --version + git --version + git log -1 --format=%h + + - name: Setup vcpkg + if: ${{ inputs.vcpkg == 1 }} + uses: lukka/run-vcpkg@v11.1 + with: + vcpkgGitCommitId: a1a1cbc975abf909a6c8985a6a2b8fe20bbd9bd6 + + - name: Setup Ccache + if: ${{ inputs.ccache == 1 }} + uses: hendrikmuhs/ccache-action@v1.2.11 # Note: pinned due to GLIBC incompatibility in later releases + with: + key: ${{ github.job }} + save: ${{ github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb-java' }} + + - name: Instal OpenSSL through vcpkg + if: ${{ inputs.openssl == 1 }} + shell: bash + run: | + cd $VCPKG_ROOT && ./vcpkg install openssl --triplet=${{ inputs.aarch64_cross_compile == 1 && 'arm64-linux' || 'x64-linux' }} \ No newline at end of file diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml new file mode 100644 index 00000000..8cc2c106 --- /dev/null +++ b/.github/workflows/ODBC.yml @@ -0,0 +1,181 @@ +name: JDBC +on: + push: + pull_request: + workflow_dispatch: + repository_dispatch: + +env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + OVERRIDE_GIT_DESCRIBE: ${{ inputs.override_git_describe }} + +jobs: + odbc-linux-amd64: + name: ODBC Linux (amd64) + runs-on: ubuntu-latest + container: + image: quay.io/pypa/manylinux2014_x86_64 + env: + GEN: ninja + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: ${{ inputs.git_ref }} + + - uses: ./.github/actions/manylinux_2014_setup + with: + ninja-build: 1 + ccache: 1 + python_alias: 1 + aws-cli: 1 + + - name: Build + shell: bash + run: make release + + - name: ODBC Tests + shell: bash + if: ${{ inputs.skip_tests != 'true' }} + run: make test + + - name: Deploy + shell: bash + env: + AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} + run: | + zip -j duckdb_odbc-linux-amd64.zip build/release/libduckdb_odbc.so linux_setup/unixodbc_setup.sh linux_setup/update_odbc_path.py + ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-linux-amd64.zip + - uses: actions/upload-artifact@v3 + with: + name: odbc-linux-amd64 + path: | + duckdb_odbc-linux-amd64.zip + + odbc-linux-aarch64: + name: ODBC Linux (aarch64) + runs-on: ubuntu-latest + container: + image: ubuntu:18.04 + # needs: odbc-linux-amd64 + env: + GEN: ninja + DUCKDB_PLATFORM: linux_arm64 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: ${{ inputs.git_ref }} + + - uses: ./.github/actions/ubuntu_18_setup + with: + ccache: 1 + aarch64_cross_compile: 1 + + - name: Build + shell: bash + run: CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ make release + + - name: Deploy + shell: bash + env: + AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} + run: | + cp build/release/duckdb_jdbc.jar duckdb_jdbc-linux-aarch64.jar + # ./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-linux-aarch64.jar + + - uses: actions/upload-artifact@v3 + with: + name: java-linux-aarch64 + path: | + build/release/duckdb_jdbc.jar + + + odbc-windows-amd64: + name: ODBC Windows (amd64) + runs-on: windows-latest + # needs: odbc-linux-amd64 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: ${{ inputs.git_ref }} + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@main + with: + key: ${{ github.job }} + save: ${{ github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb-java' }} + + - name: Build + shell: bash + run: make release + + - name: ODBC Tests + if: ${{ inputs.skip_tests != 'true' }} + shell: bash + run: | + ls -R . + make test + + - name: Deploy + shell: bash + env: + AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} + run: | + cp build/release/duckdb_jdbc.jar duckdb_jdbc-windows-amd64.jar + ./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-windows-amd64.jar + - uses: actions/upload-artifact@v3 + with: + name: java-windows-amd64 + path: | + build/release/duckdb_jdbc.jar + + + odbc-osx-universal: + name: ODBC OSX (Universal) + runs-on: macos-14 +# needs: odbc-linux-amd64 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: ${{ inputs.git_ref }} + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@main + with: + key: ${{ github.job }} + save: ${{ github.ref == 'refs/heads/main' }} + - name: Build + shell: bash + run: make release + - name: ODBC Tests + if: ${{ inputs.skip_tests != 'true' }} + shell: bash + run: make test + - name: See if this actually universal + shell: bash + run: lipo -archs build/release/libduckdb_odbc.dylib | grep "x86_64 arm64" + - name: Deploy + shell: bash + env: + AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} + run: | + cp build/release/duckdb_jdbc.jar duckdb_jdbc-osx-universal.jar + ./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-osx-universal.jar + - uses: actions/upload-artifact@v3 + with: + name: java-osx-universal + path: | + build/release/duckdb_jdbc.jar + + diff --git a/scripts/setup_manylinux2014.sh b/scripts/setup_manylinux2014.sh new file mode 100755 index 00000000..8e9a7d70 --- /dev/null +++ b/scripts/setup_manylinux2014.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +# This script is used to setup the additional dependencies required by duckdb +# for the manylinux2014 image. The reason for this to exist in a script is firstly to be able to +# easily reproduce the same environment locally. Secondly, these steps can be now used +# both in the x86 jobs as the aarch64 jobs on GH actions (aarch64 jobs need a special env). + +# Examples +# +### To install just basics: +# +# > scripts/setup_manylinux2014.sh general +# +### Install openssl (through vcpkg, which will be in /tmp/vcpkg), ccache and jdk +# +# > VCPKG_TARGET_DIR=/tmp scripts/setup_manylinux2014.sh general vcpkg openssl ccache jdk +# + +# Installs deps for a specific required dependency +install_deps() { + if [ "$1" = "general" ]; then + git config --global --add safe.directory '*' + yum install -y curl zip unzip tar + yum install -y ninja-build + + elif [ "$1" = "aws-cli" ]; then + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + ./aws/install + aws --version + + elif [ "$1" = "odbc" ]; then + yum install -y unixODBC-devel + + elif [ "$1" = "vcpkg" ]; then + # Note: it is preferred to use the lukka/run-vcpkg@v11 over this when running this + # in a Github Actions job. When running locally or in the aarch64, these can be used instead + # Also note that this action install. + # Note2: this installs vcpkg to $VCPKG_TARGET_DIR + ( + cd $VCPKG_TARGET_DIR ; + git clone https://github.com/Microsoft/vcpkg.git ; + git checkout a1a1cbc975abf909a6c8985a6a2b8fe20bbd9bd6 ; + cd vcpkg ; + ./bootstrap-vcpkg.sh + ) + export VCPKG_ROOT=$VCPKG_TARGET_DIR/vcpkg + + elif [ "$1" = "openssl" ]; then + yum install -y perl-IPC-Cmd + + elif [ "$1" = "ccache" ]; then + yum -y install ccache + + elif [ "$1" = "python_alias" ]; then + ln -fs /usr/local/bin/python3.9 /usr/local/bin/python3 + + elif [ "$1" = "jdk" ]; then + yum install -y java-11-openjdk-devel maven + + elif [ "$1" = "ssh" ]; then + yum install -y openssh-clients + + elif [ "$1" = "glibc32" ]; then + yum install -y libgcc*i686 libstdc++*i686 glibc*i686 libgfortran*i686 + + elif [ "$1" = "gcc_4_8" ]; then + yum install -y gcc-c++ + + elif [ "$1" = "nodejs" ]; then + yum install -y nodejs + + else + >&2 echo "unknown input for setup_manylinux2014.sh: '$1'" + exit $exit_code + fi +} + +for var in "$@" +do + install_deps $var +done + + diff --git a/scripts/upload-assets-to-staging.sh b/scripts/upload-assets-to-staging.sh new file mode 100755 index 00000000..ab3b9693 --- /dev/null +++ b/scripts/upload-assets-to-staging.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +# Main extension uploading script + +# Usage: ./scripts/upload-staging-asset.sh * +# : Folder to upload to +# : File to be uploaded + +if [ -z "$1" ] || [ -z "$2" ]; then + echo "Usage: ./scripts/upload-staging-asset.sh [... ]" + exit 1 +fi + +set -e + +# skip if repo is not in duckdb organization +if [ "$GITHUB_REPOSITORY_OWNER" != "duckdb" ]; then + echo "Repository is $GITHUB_REPOSITORY_OWNER (not duckdb)" + exit 0 +fi + +FOLDER="$1" +DRY_RUN_PARAM="" + +# dryrun if repo is not duckdb/duckdb-java +if [ "$GITHUB_REPOSITORY" != "duckdb/duckdb-java" ]; then + echo "Repository is $GITHUB_REPOSITORY (not duckdb/duckdb-java)" + DRY_RUN_PARAM="--dryrun" +fi +# dryrun if we are not in main +if [ "$GITHUB_REF" != "refs/heads/main" ]; then + echo "git ref is $GITHUB_REF (not refs/heads/main)" + DRY_RUN_PARAM="--dryrun" +fi + +if [ "$GITHUB_EVENT_NAME" == "workflow_dispatch" ]; then + echo "overriding DRY_RUN_PARAM, forcing upload" + DRY_RUN_PARAM="" +fi + +# dryrun if AWS key is not set +if [ -z "$AWS_ACCESS_KEY_ID" ]; then + echo "No access key available" + DRY_RUN_PARAM="--dryrun" +fi + + +TARGET=$(git log -1 --format=%h) + +if [ "$UPLOAD_ASSETS_TO_STAGING_TARGET" ]; then + TARGET="$UPLOAD_ASSETS_TO_STAGING_TARGET" +fi + +# decide target for staging +if [ "$OVERRIDE_GIT_DESCRIBE" ]; then + TARGET="$TARGET/$OVERRIDE_GIT_DESCRIBE" +fi + +python3 -m pip install awscli + +for var in "${@: 2}" +do + aws s3 cp $var s3://duckdb-staging/$TARGET/$GITHUB_REPOSITORY/$FOLDER/ $DRY_RUN_PARAM --region us-east-2 +done From afe8290446c4959b63cc2937633a60db6c67191f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 09:58:05 +0200 Subject: [PATCH 02/33] ? --- .github/workflows/ODBC.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 8cc2c106..bef879de 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -33,7 +33,6 @@ jobs: - name: Build shell: bash run: make release - - name: ODBC Tests shell: bash if: ${{ inputs.skip_tests != 'true' }} From a1879d832971b4cbd3cc0a3ee6b3cebce6ea8caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 09:58:34 +0200 Subject: [PATCH 03/33] orr --- .github/workflows/ODBC.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index bef879de..8cc9674d 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -33,11 +33,12 @@ jobs: - name: Build shell: bash run: make release + - name: ODBC Tests shell: bash if: ${{ inputs.skip_tests != 'true' }} run: make test - + - name: Deploy shell: bash env: From 2430c7899a4eb9385afa6ff98a1c40b1b03bc76c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 09:59:05 +0200 Subject: [PATCH 04/33] whitespace wtf --- .github/workflows/ODBC.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 8cc9674d..f068a9d8 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -38,7 +38,6 @@ jobs: shell: bash if: ${{ inputs.skip_tests != 'true' }} run: make test - - name: Deploy shell: bash env: From 49e259386f4f6022cf18c69a5b51c7d397ceefe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:24:05 +0200 Subject: [PATCH 05/33] yaml --- .github/workflows/ODBC.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index f068a9d8..fed74083 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -45,7 +45,7 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | zip -j duckdb_odbc-linux-amd64.zip build/release/libduckdb_odbc.so linux_setup/unixodbc_setup.sh linux_setup/update_odbc_path.py - ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-linux-amd64.zip + ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-linux-amd64.zip - uses: actions/upload-artifact@v3 with: name: odbc-linux-amd64 From cde9d5058d35f205f05c7b90676c74e5a567756f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:26:06 +0200 Subject: [PATCH 06/33] need odbc --- .github/workflows/ODBC.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index fed74083..d145ab1b 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -29,6 +29,7 @@ jobs: ccache: 1 python_alias: 1 aws-cli: 1 + odbc: 1 - name: Build shell: bash From c256bdf1a9539a4721bfc022ba1049b0305650d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:35:50 +0200 Subject: [PATCH 07/33] arm setup --- .github/workflows/ODBC.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index d145ab1b..0a9eb0fb 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -62,6 +62,7 @@ jobs: env: GEN: ninja DUCKDB_PLATFORM: linux_arm64 + ODBC_CONFIG: ../../build/unixodbc/build/bin/odbc_config steps: - uses: actions/checkout@v3 with: @@ -73,6 +74,15 @@ jobs: ccache: 1 aarch64_cross_compile: 1 + - name: Install unixODBC + shell: bash + run: | # we need an x86 odbc_config tool to run cmake. fun. + apt-get remove -y unixodbc unixodbc-dev + CC=gcc ./scripts/install_unixodbc.sh + cp build/unixodbc/build/bin/odbc_config . + CC=aarch64-linux-gnu-gcc ./scripts/install_unixodbc.sh --host aarch64-linux-gnu + cp odbc_config build/unixodbc/build/bin/odbc_config + - name: Build shell: bash run: CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ make release From 25ef84bbd1da9dbafdeaf28d7d5b1e730656cab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:44:28 +0200 Subject: [PATCH 08/33] tests --- .github/workflows/ODBC.yml | 85 +++++++++++++++++++++++++++++++++++--- Makefile | 32 ++++---------- 2 files changed, 87 insertions(+), 30 deletions(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 0a9eb0fb..18d2d781 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -38,7 +38,7 @@ jobs: - name: ODBC Tests shell: bash if: ${{ inputs.skip_tests != 'true' }} - run: make test + run: ./build/release/test/test_odbc - name: Deploy shell: bash env: @@ -128,9 +128,7 @@ jobs: - name: ODBC Tests if: ${{ inputs.skip_tests != 'true' }} shell: bash - run: | - ls -R . - make test + run: ./build/release/test/test_odbc - name: Deploy shell: bash @@ -170,7 +168,7 @@ jobs: - name: ODBC Tests if: ${{ inputs.skip_tests != 'true' }} shell: bash - run: make test + run: ./build/release/test/test_odbc - name: See if this actually universal shell: bash run: lipo -archs build/release/libduckdb_odbc.dylib | grep "x86_64 arm64" @@ -187,5 +185,82 @@ jobs: name: java-osx-universal path: | build/release/duckdb_jdbc.jar + + + debug: + name: ODBC Tests + if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + runs-on: ubuntu-22.04 + needs: linux-debug + env: + BUILD_ODBC: 1 + GEN: ninja + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Dependencies + shell: bash + run: | + sudo apt-get update -y -qq + sudo apt-get install -y -qq ninja-build unixodbc-dev + pip3 install pyodbc + + - name: Install nanodbc + shell: bash + run: | + wget https://github.com/nanodbc/nanodbc/archive/refs/tags/v2.14.0.tar.gz -O nanodbc.tgz + mkdir nanodbc + tar xvf nanodbc.tgz -C nanodbc --strip-components=1 + cd nanodbc + wget https://github.com/catchorg/Catch2/releases/download/v2.13.9/catch.hpp + cp catch.hpp test/catch/catch.hpp + sed -i -e "s/set(test_list/set(test_list odbc/" test/CMakeLists.txt + mkdir build + cd build + cmake -DNANODBC_DISABLE_TESTS=OFF .. + cmake --build . + + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@main + with: + key: ${{ github.job }} + save: ${{ github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb' }} + + - name: Build + shell: bash + run: make debug + - name: Test Standard ODBC tests + shell: bash + run: build/debug/test/test_odbc + + - name: Test Connection ODBC tests + shell: bash + run: | + chmod +x scripts/create_ini_file.sh + scripts/create_ini_file.sh + build/debug/test/test_connection_odbc + + - name: Test nanodbc + shell: bash + run: ./test/run_nanodbc_tests.sh + + - name: Test isql + shell: bash + run: ./test/run_isql_tests.sh + + - name: Test R ODBC + shell: bash + run: R -f test/rodbc.R + + - name: Test Python ODBC + shell: bash + run: ./test/run_pyodbc_tests.sh diff --git a/Makefile b/Makefile index 53581f89..eca0fd80 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,5 @@ -.PHONY: build test clean +.PHONY: release debug test clean -SEP= -JARS= - -ifeq ($(OS),Windows_NT) - # windows is weird - SEP=";" - JARS=build/release -else - SEP=":" - JARS=build/release -endif - -ARCH_OVERRIDE= -ifneq ($(OVERRIDE_JDBC_OS_ARCH),) - ARCH_OVERRIDE=-DOVERRIDE_JDBC_OS_ARCH=$(OVERRIDE_JDBC_OS_ARCH) -endif GENERATOR= @@ -24,16 +8,14 @@ ifeq ($(GEN),ninja) FORCE_COLOR=-DFORCE_COLORED_OUTPUT=1 endif -JAR=$(JARS)/duckdb_jdbc.jar -TEST_JAR=$(JARS)/duckdb_jdbc_tests.jar -CP=$(JAR)$(SEP)$(TEST_JAR) - -test: - java -cp $(CP) org.duckdb.TestDuckDBJDBC - release: mkdir -p build/release - cd build/release && cmake -DCMAKE_BUILD_TYPE=Release $(GENERATOR) $(ARCH_OVERRIDE) ../.. && cmake --build . --config Release + cd build/release && cmake -DCMAKE_BUILD_TYPE=Release $(GENERATOR) ../.. && cmake --build . --config Release + +debug: + mkdir -p build/debug + cd build/debug && cmake -DCMAKE_BUILD_TYPE=Debug $(GENERATOR) ../.. && cmake --build . --config Debug + clean: rm -rf build \ No newline at end of file From f2ea816e03c23eef296fb45b8898d98a8f11aaa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:45:30 +0200 Subject: [PATCH 09/33] comment out dep --- .github/workflows/ODBC.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 18d2d781..6e210d05 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -191,7 +191,7 @@ jobs: name: ODBC Tests if: ${{ !startsWith(github.ref, 'refs/tags/v') }} runs-on: ubuntu-22.04 - needs: linux-debug + # needs: linux-debug env: BUILD_ODBC: 1 GEN: ninja From 7cec1af716c00f1b9f12c25c9f35dbbeba2ab734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:47:52 +0200 Subject: [PATCH 10/33] fix osx --- .github/workflows/ODBC.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 6e210d05..bae44741 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -148,6 +148,9 @@ jobs: odbc-osx-universal: name: ODBC OSX (Universal) runs-on: macos-14 + env: + GEN: ninja + ODBC_CONFIG: ../../build/unixodbc/build/bin/odbc_config # needs: odbc-linux-amd64 steps: - uses: actions/checkout@v3 @@ -162,6 +165,12 @@ jobs: with: key: ${{ github.job }} save: ${{ github.ref == 'refs/heads/main' }} + + - name: Install UnixODBC + shell: bash + run: | + CFLAGS="-arch x86_64 -arch arm64" ./scripts/install_unixodbc.sh + - name: Build shell: bash run: make release From 4e8fc09b00840f4859dc01842fbbe2b7463059c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:48:55 +0200 Subject: [PATCH 11/33] missing script --- scripts/install_unixodbc.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100755 scripts/install_unixodbc.sh diff --git a/scripts/install_unixodbc.sh b/scripts/install_unixodbc.sh new file mode 100755 index 00000000..61a8b890 --- /dev/null +++ b/scripts/install_unixodbc.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -x +rm -rf build/unixodbc +mkdir -p build/unixodbc +cd build/unixodbc +mkdir sources build +wget http://www.unixodbc.org/unixODBC-2.3.11.tar.gz || wget http://github.com/lurcher/unixODBC/releases/download/2.3.11/unixODBC-2.3.11.tar.gz +tar -xf unixODBC-2.3.11.tar.gz -C sources --strip-components 1 +cd sources +./configure --prefix `cd ../build; pwd` --disable-debug --disable-dependency-tracking --enable-static --enable-gui=no $@ +make -j install \ No newline at end of file From 755012af836702092774c48e04afd448a7ebb876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:51:39 +0200 Subject: [PATCH 12/33] ninja --- .github/workflows/ODBC.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index bae44741..f3d55f58 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -166,6 +166,9 @@ jobs: key: ${{ github.job }} save: ${{ github.ref == 'refs/heads/main' }} + - name: Install Ninja + run: brew install ninja + - name: Install UnixODBC shell: bash run: | From 03b8f8bc71a719678b98a5bbc1d992f94a0392e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:53:51 +0200 Subject: [PATCH 13/33] path changes --- .github/workflows/ODBC.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index f3d55f58..35eccf08 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -150,7 +150,7 @@ jobs: runs-on: macos-14 env: GEN: ninja - ODBC_CONFIG: ../../build/unixodbc/build/bin/odbc_config + ODBC_CONFIG: build/unixodbc/build/bin/odbc_config # needs: odbc-linux-amd64 steps: - uses: actions/checkout@v3 From 2d1e5ee1948ac656f581646b797cdf4016e85ceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 10:57:53 +0200 Subject: [PATCH 14/33] ci debugging --- .github/workflows/ODBC.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 35eccf08..72dd2696 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -173,7 +173,7 @@ jobs: shell: bash run: | CFLAGS="-arch x86_64 -arch arm64" ./scripts/install_unixodbc.sh - + ls -R . - name: Build shell: bash run: make release From 9927973c4c37ea58e36a6279e38f6ec1f42c447f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 12:23:52 +0200 Subject: [PATCH 15/33] missing storage_version.db file --- test/sql/storage_version/storage_version.db | Bin 0 -> 798720 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/sql/storage_version/storage_version.db diff --git a/test/sql/storage_version/storage_version.db b/test/sql/storage_version/storage_version.db new file mode 100644 index 0000000000000000000000000000000000000000..c816c3c219ae67be0cd4d3baba1882e446509dd2 GIT binary patch literal 798720 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 Date: Wed, 1 May 2024 12:30:44 +0200 Subject: [PATCH 16/33] moar config stuff --- .github/workflows/ODBC.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 72dd2696..fec44a7a 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -62,7 +62,7 @@ jobs: env: GEN: ninja DUCKDB_PLATFORM: linux_arm64 - ODBC_CONFIG: ../../build/unixodbc/build/bin/odbc_config + ODBC_CONFIG: ./build/unixodbc/build/bin/odbc_config steps: - uses: actions/checkout@v3 with: @@ -150,7 +150,7 @@ jobs: runs-on: macos-14 env: GEN: ninja - ODBC_CONFIG: build/unixodbc/build/bin/odbc_config + ODBC_CONFIG: ./build/unixodbc/build/bin/odbc_config # needs: odbc-linux-amd64 steps: - uses: actions/checkout@v3 @@ -171,9 +171,7 @@ jobs: - name: Install UnixODBC shell: bash - run: | - CFLAGS="-arch x86_64 -arch arm64" ./scripts/install_unixodbc.sh - ls -R . + run: CFLAGS="-arch x86_64 -arch arm64" ./scripts/install_unixodbc.sh - name: Build shell: bash run: make release From b020f1031d3bbeb24fbd6f364026c97dfa7a8e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 12:50:18 +0200 Subject: [PATCH 17/33] passing through ODBC_CONFIG flag --- Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index eca0fd80..73acb5c4 100644 --- a/Makefile +++ b/Makefile @@ -8,13 +8,18 @@ ifeq ($(GEN),ninja) FORCE_COLOR=-DFORCE_COLORED_OUTPUT=1 endif +ODBC_CONFIG_FLAG= +ifneq ($(ODBC_CONFIG),) + ODBC_CONFIG_FLAG=-DODBC_CONFIG=${ODBC_CONFIG} +endif + release: mkdir -p build/release - cd build/release && cmake -DCMAKE_BUILD_TYPE=Release $(GENERATOR) ../.. && cmake --build . --config Release + cd build/release && cmake -DCMAKE_BUILD_TYPE=Release $(GENERATOR) $(ODBC_CONFIG_FLAG) ../.. && cmake --build . --config Release debug: mkdir -p build/debug - cd build/debug && cmake -DCMAKE_BUILD_TYPE=Debug $(GENERATOR) ../.. && cmake --build . --config Debug + cd build/debug && cmake -DCMAKE_BUILD_TYPE=Debug $(GENERATOR) $(ODBC_CONFIG_FLAG) ../.. && cmake --build . --config Debug clean: From fe817e1303e0f5df02ce369811060fe98c85c167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 13:02:33 +0200 Subject: [PATCH 18/33] more ci fixes --- .github/workflows/ODBC.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index fec44a7a..ca12e9cb 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -62,7 +62,7 @@ jobs: env: GEN: ninja DUCKDB_PLATFORM: linux_arm64 - ODBC_CONFIG: ./build/unixodbc/build/bin/odbc_config + ODBC_CONFIG: ../../build/unixodbc/build/bin/odbc_config steps: - uses: actions/checkout@v3 with: @@ -93,14 +93,14 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | - cp build/release/duckdb_jdbc.jar duckdb_jdbc-linux-aarch64.jar - # ./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-linux-aarch64.jar + zip -j duckdb_odbc-linux-aarch64.zip build/release/libduckdb_odbc.so linux_setup/unixodbc_setup.sh linux_setup/update_odbc_path.py + ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-linux-aarch64.zip - uses: actions/upload-artifact@v3 with: - name: java-linux-aarch64 + name: odbc-linux-aarch64 path: | - build/release/duckdb_jdbc.jar + duckdb_odbc-linux-aarch64.zip odbc-windows-amd64: @@ -136,8 +136,9 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | - cp build/release/duckdb_jdbc.jar duckdb_jdbc-windows-amd64.jar - ./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-windows-amd64.jar + zip -j duckdb_odbc-windows-amd64.zip bin/Release/* + ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-windows-amd64.zip + - uses: actions/upload-artifact@v3 with: name: java-windows-amd64 @@ -150,7 +151,7 @@ jobs: runs-on: macos-14 env: GEN: ninja - ODBC_CONFIG: ./build/unixodbc/build/bin/odbc_config + ODBC_CONFIG: ../../build/unixodbc/build/bin/odbc_config # needs: odbc-linux-amd64 steps: - uses: actions/checkout@v3 @@ -188,14 +189,14 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | - cp build/release/duckdb_jdbc.jar duckdb_jdbc-osx-universal.jar - ./scripts/upload-assets-to-staging.sh github_release duckdb_jdbc-osx-universal.jar + zip -j duckdb_odbc-osx-universal.zip build/release/tools/odbc/libduckdb_odbc.dylib + ./scripts/upload-assets-to-staging.sh github_release libduckdb-osx-universal.zip duckdb_cli-osx-universal.zip duckdb_odbc-osx-universal.zip + - uses: actions/upload-artifact@v3 with: name: java-osx-universal path: | - build/release/duckdb_jdbc.jar - + duckdb_odbc-osx-universal.zip debug: name: ODBC Tests From 0723b2b3c8c66c7a470cc6f2b1f7791d2ec06eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 13:28:27 +0200 Subject: [PATCH 19/33] universal builds optional --- .github/workflows/ODBC.yml | 1 + CMakeLists.txt | 11 +++++++++++ CMakeLists.txt.in | 11 +++++++++++ Makefile | 9 +++++++-- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index ca12e9cb..276c215e 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -152,6 +152,7 @@ jobs: env: GEN: ninja ODBC_CONFIG: ../../build/unixodbc/build/bin/odbc_config + OSX_BUILD_UNIVERSAL: 1 # needs: odbc-linux-amd64 steps: - uses: actions/checkout@v3 diff --git a/CMakeLists.txt b/CMakeLists.txt index 0bdded32..7cefc614 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,17 @@ if(ODBC_FOUND) endif() endif() + +if(NOT MSVC) + set(CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wno-unused-parameter -Wno-redundant-move" + ) +endif() + +if(OSX_BUILD_UNIVERSAL) + SET(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures for Mac OS X" FORCE) +endif() + add_definitions(-DNO_FRAMEWORKS -DDUCKDB_EXTENSION_PARQUET_LINKED -DDUCKDB_EXTENSION_ICU_LINKED -DDUCKDB_EXTENSION_JSON_LINKED) include_directories(src/duckdb/src/include/ src/duckdb/src/include src/duckdb/third_party/concurrentqueue src/duckdb/third_party/fast_float src/duckdb/third_party/fastpforlib src/duckdb/third_party/fmt/include src/duckdb/third_party/fsst src/duckdb/third_party/httplib src/duckdb/third_party/hyperloglog src/duckdb/third_party/jaro_winkler src/duckdb/third_party/jaro_winkler/details src/duckdb/third_party/libpg_query src/duckdb/third_party/libpg_query/include src/duckdb/third_party/lz4 src/duckdb/third_party/mbedtls src/duckdb/third_party/mbedtls/include src/duckdb/third_party/mbedtls/library src/duckdb/third_party/miniz src/duckdb/third_party/pcg src/duckdb/third_party/re2 src/duckdb/third_party/skiplist src/duckdb/third_party/tdigest src/duckdb/third_party/utf8proc src/duckdb/third_party/utf8proc/include src/duckdb/extension/parquet/include src/duckdb/third_party/parquet src/duckdb/third_party/thrift src/duckdb/third_party/lz4 src/duckdb/third_party/snappy src/duckdb/third_party/zstd/include src/duckdb/third_party/mbedtls src/duckdb/third_party/mbedtls/include src/duckdb/extension/icu/include src/duckdb/extension/icu/third_party/icu/common src/duckdb/extension/icu/third_party/icu/i18n src/duckdb/extension/json/include src/duckdb/extension/json/yyjson/include ${ODBC_INCLUDE_DIRS} include) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index 19d2bc03..de5cfc22 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -30,6 +30,17 @@ if(ODBC_FOUND) endif() endif() + +if(NOT MSVC) + set(CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wno-unused-parameter -Wno-redundant-move" + ) +endif() + +if(OSX_BUILD_UNIVERSAL) + SET(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures for Mac OS X" FORCE) +endif() + add_definitions(-DNO_FRAMEWORKS ${DEFINES}) include_directories(src/duckdb/src/include/ ${INCLUDE_FILES} ${ODBC_INCLUDE_DIRS} include) diff --git a/Makefile b/Makefile index 73acb5c4..942b8db0 100644 --- a/Makefile +++ b/Makefile @@ -13,13 +13,18 @@ ifneq ($(ODBC_CONFIG),) ODBC_CONFIG_FLAG=-DODBC_CONFIG=${ODBC_CONFIG} endif +OSX_BUILD_UNIVERSAL_FLAG= +ifneq ($(OSX_BUILD_UNIVERSAL),) + OSX_BUILD_UNIVERSAL_FLAG=-DOSX_BUILD_UNIVERSAL=1 +endif + release: mkdir -p build/release - cd build/release && cmake -DCMAKE_BUILD_TYPE=Release $(GENERATOR) $(ODBC_CONFIG_FLAG) ../.. && cmake --build . --config Release + cd build/release && cmake -DCMAKE_BUILD_TYPE=Release $(GENERATOR) $(ODBC_CONFIG_FLAG) $(OSX_BUILD_UNIVERSAL_FLAG) ../.. && cmake --build . --config Release debug: mkdir -p build/debug - cd build/debug && cmake -DCMAKE_BUILD_TYPE=Debug $(GENERATOR) $(ODBC_CONFIG_FLAG) ../.. && cmake --build . --config Debug + cd build/debug && cmake -DCMAKE_BUILD_TYPE=Debug $(GENERATOR) $(ODBC_CONFIG_FLAG) $(OSX_BUILD_UNIVERSAL_FLAG) ../.. && cmake --build . --config Debug clean: From 4d3bba6a595fe752661378cc1e04bf44ca48e7dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 13:40:26 +0200 Subject: [PATCH 20/33] zapped a few more tools/odbc instances --- .github/workflows/ODBC.yml | 2 +- README.md | 4 ++-- test/julia-test.jl | 2 +- test/rodbc.R | 2 +- test/run_isql_tests.sh | 8 ++++---- test/run_nanodbc_tests.sh | 4 ++-- test/run_pyodbc_tests.sh | 6 +++--- test/tests/connect_with_ini.cpp | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 276c215e..bdab96b0 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -190,7 +190,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | - zip -j duckdb_odbc-osx-universal.zip build/release/tools/odbc/libduckdb_odbc.dylib + zip -j duckdb_odbc-osx-universal.zip build/release/libduckdb_odbc.dylib ./scripts/upload-assets-to-staging.sh github_release libduckdb-osx-universal.zip duckdb_cli-osx-universal.zip duckdb_odbc-osx-universal.zip - uses: actions/upload-artifact@v3 diff --git a/README.md b/README.md index d23af75c..ad077892 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ BUILD_ODBC=1 DISABLE_SANITIZER=1 make debug -j The ODBC tests are written with the catch framework. To run the tests, run the following command from the main DuckDB repository: ```bash -build/debug/tools/odbc/test/test_odbc +build/debug/test/test_odbc ``` You can also individually run the tests by specifying the test name as an argument to the test executable: ```bash -build/debug/tools/odbc/test/test_odbc 'Test ALTER TABLE statement' +build/debug/test/test_odbc 'Test ALTER TABLE statement' ``` \ No newline at end of file diff --git a/test/julia-test.jl b/test/julia-test.jl index d2aa6fe9..545fc0a3 100644 --- a/test/julia-test.jl +++ b/test/julia-test.jl @@ -11,7 +11,7 @@ ODBC.setunixODBC(;ODBCSYSINI=home, ODBCINSTINI=".odbcinst.ini", ODBCINI=string(h conn=ODBC.Connection("DSN=DuckDB;") duckdb_dir = pwd() -DBInterface.execute(conn,"CREATE TABLE test AS SELECT * FROM read_csv_auto('" * duckdb_dir * "/tools/odbc/test/test.csv')") +DBInterface.execute(conn,"CREATE TABLE test AS SELECT * FROM read_csv_auto('" * duckdb_dir * "test/test.csv')") df1 = DBInterface.execute(conn,"SELECT sum(a) as a, sum(b) as b, sum(c) as c FROM test")|>DataFrame df2 = DataFrame(a = Float64(3.3), b = Float64(36.0), c = Float64(1.0)); diff --git a/test/rodbc.R b/test/rodbc.R index 567cd9e1..68a62e01 100644 --- a/test/rodbc.R +++ b/test/rodbc.R @@ -4,7 +4,7 @@ install.packages(c("odbc", "DBI"), repos="https://cloud.r-project.org/", lib=tem library("DBI", lib.loc=tempdir()) library("odbc", lib.loc=tempdir()) -con <- dbConnect(odbc(), database=":memory:", driver=Sys.glob("build/debug/tools/odbc/libduckdb_odbc.*")) +con <- dbConnect(odbc(), database=":memory:", driver=Sys.glob("build/debug/libduckdb_odbc.*")) dbExecute(con, "CREATE TABLE fuu (i INTEGER, j STRING)") dbExecute(con, "INSERT INTO fuu VALUES (42, 'Hello'), (43, 'World'), (NULL, NULL)") diff --git a/test/run_isql_tests.sh b/test/run_isql_tests.sh index 6b0d2bbc..ed81187b 100755 --- a/test/run_isql_tests.sh +++ b/test/run_isql_tests.sh @@ -2,7 +2,7 @@ set -e -#echo -e "[ODBC]\nTrace = yes\nTraceFile = /tmp/odbctrace\n\n[DuckDB Driver]\nDriver = "$(pwd)"/build/debug/tools/odbc/libduckdb_odbc.so" > ~/.odbcinst.ini +#echo -e "[ODBC]\nTrace = yes\nTraceFile = /tmp/odbctrace\n\n[DuckDB Driver]\nDriver = "$(pwd)"/build/debug/libduckdb_odbc.so" > ~/.odbcinst.ini #echo -e "[DuckDB]\nDriver = DuckDB Driver\nDatabase=test.db\n" > ~/.odbc.ini BASE_DIR=$(dirname $0) @@ -12,17 +12,17 @@ if test -f test.db; then fi #Configuring ODBC files -$BASE_DIR/../linux_setup/unixodbc_setup.sh -u -db test.db -D $(pwd)/build/debug/tools/odbc/libduckdb_odbc.so +$BASE_DIR/../linux_setup/unixodbc_setup.sh -u -db test.db -D $(pwd)/build/debug/libduckdb_odbc.so export ASAN_OPTIONS=verify_asan_link_order=0 -python tools/odbc/test/isql-test.py isql +python test/isql-test.py isql if [[ $? != 0 ]]; then exit 1; fi # running isql with the option -e -rm test.db && python tools/odbc/test/isql-test.py isql -e +rm test.db && python test/isql-test.py isql -e if [[ $? != 0 ]]; then exit 1; fi diff --git a/test/run_nanodbc_tests.sh b/test/run_nanodbc_tests.sh index 879e59ee..1e5a9a71 100755 --- a/test/run_nanodbc_tests.sh +++ b/test/run_nanodbc_tests.sh @@ -2,7 +2,7 @@ set -e -#echo -e "[ODBC]\nTrace = yes\nTraceFile = /tmp/odbctrace\n\n[DuckDB Driver]\nDriver = "$(pwd)"/build/debug/tools/odbc/libduckdb_odbc.so" > ~/.odbcinst.ini +#echo -e "[ODBC]\nTrace = yes\nTraceFile = /tmp/odbctrace\n\n[DuckDB Driver]\nDriver = "$(pwd)"/build/debug/libduckdb_odbc.so" > ~/.odbcinst.ini #echo -e "[DuckDB]\nDriver = DuckDB Driver\nDatabase=:memory:\n" > ~/.odbc.ini BASE_DIR=$(dirname $0) @@ -22,7 +22,7 @@ case "$(uname -s)" in ;; esac -$BASE_DIR/../linux_setup/unixodbc_setup.sh -u -D $(pwd)/build/debug/tools/odbc/libduckdb_odbc.${extension} +$BASE_DIR/../linux_setup/unixodbc_setup.sh -u -D $(pwd)/build/debug/libduckdb_odbc.${extension} export NANODBC_TEST_CONNSTR_ODBC="DRIVER=DuckDB Driver;" export ASAN_OPTIONS=verify_asan_link_order=0 diff --git a/test/run_pyodbc_tests.sh b/test/run_pyodbc_tests.sh index 385fb5f5..75a00d81 100755 --- a/test/run_pyodbc_tests.sh +++ b/test/run_pyodbc_tests.sh @@ -2,17 +2,17 @@ set -e -#echo -e "[ODBC]\nTrace = yes\nTraceFile = /tmp/odbctrace\n\n[DuckDB Driver]\nDriver = "$(pwd)"/build/debug/tools/odbc/libduckdb_odbc.so" > ~/.odbcinst.ini +#echo -e "[ODBC]\nTrace = yes\nTraceFile = /tmp/odbctrace\n\n[DuckDB Driver]\nDriver = "$(pwd)"/build/debug/libduckdb_odbc.so" > ~/.odbcinst.ini #echo -e "[DuckDB]\nDriver = DuckDB Driver\nDatabase=:memory:\n" > ~/.odbc.ini BASE_DIR=$(dirname $0) #Configuring ODBC files -$BASE_DIR/../linux_setup/unixodbc_setup.sh -u -D $(pwd)/build/debug/tools/odbc/libduckdb_odbc.so +$BASE_DIR/../linux_setup/unixodbc_setup.sh -u -D $(pwd)/build/debug/libduckdb_odbc.so export ASAN_OPTIONS=verify_asan_link_order=0 -python3 tools/odbc/test/pyodbc-test.py +python3 test/pyodbc-test.py if [[ $? != 0 ]]; then exit 1; fi diff --git a/test/tests/connect_with_ini.cpp b/test/tests/connect_with_ini.cpp index 8cb4e856..4d6bf95f 100644 --- a/test/tests/connect_with_ini.cpp +++ b/test/tests/connect_with_ini.cpp @@ -3,7 +3,7 @@ using namespace odbc_test; // If running this test on macOS you need to run the following script before executing the test -// tools/odbc/scripts/create_ini_file.sh +// scripts/create_ini_file.sh // Connect to the database using the ini file TEST_CASE("Test SQLConnect with Ini File", "[odbc]") { From 814a8fefcf9653b7213d8bb6303664a7cafa1cb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 13:43:07 +0200 Subject: [PATCH 21/33] threads --- CMakeLists.txt | 2 ++ CMakeLists.txt.in | 2 ++ 2 files changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cefc614..7c4e6ed9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.12.0) project(duckdb-odbc) find_package(ODBC) +find_package(Threads REQUIRED) set(CMAKE_CXX_STANDARD "11" CACHE STRING "C++ standard to enforce") set(CMAKE_VERBOSE_MAKEFILE OFF) @@ -53,6 +54,7 @@ add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} ) +target_link_libraries(duckdb_odbc Threads::Threads) if(NOT CLANG_TIDY) add_subdirectory(test) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index de5cfc22..7a078b59 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.12.0) project(duckdb-odbc) find_package(ODBC) +find_package(Threads REQUIRED) set(CMAKE_CXX_STANDARD "11" CACHE STRING "C++ standard to enforce") set(CMAKE_VERBOSE_MAKEFILE OFF) @@ -53,6 +54,7 @@ add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} ${LIBRARY_FILES}) +target_link_libraries(duckdb_odbc Threads::Threads) if(NOT CLANG_TIDY) add_subdirectory(test) From b452bf7c492b16e4445de8cda0e6e5fef1e4700a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 14:01:11 +0200 Subject: [PATCH 22/33] fix deploy --- .github/workflows/ODBC.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index bdab96b0..3edcb4c8 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -191,7 +191,7 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | zip -j duckdb_odbc-osx-universal.zip build/release/libduckdb_odbc.dylib - ./scripts/upload-assets-to-staging.sh github_release libduckdb-osx-universal.zip duckdb_cli-osx-universal.zip duckdb_odbc-osx-universal.zip + ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-osx-universal.zip - uses: actions/upload-artifact@v3 with: From fd71e60eebdd6eb7a196b68d5af17472c08ccef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 14:33:10 +0200 Subject: [PATCH 23/33] linux builds? --- CMakeLists.txt | 22 ++++++++++------------ CMakeLists.txt.in | 22 ++++++++++------------ 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c4e6ed9..9e3190f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,20 +22,18 @@ if(ODBC_FOUND) message(STATUS "Found ODBCINST_LIB: " ${ODBCINST_LIB}) endif() - if(WIN32) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) - add_subdirectory(winsetup) - list(APPEND LINK_LIB_LIST $<$:odbccp32>) - list(APPEND LINK_LIB_LIST - $<$:legacy_stdio_definitions>) - endif() +# if(WIN32) +# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +# add_subdirectory(winsetup) +# list(APPEND LINK_LIB_LIST $<$:odbccp32>) +# list(APPEND LINK_LIB_LIST +# $<$:legacy_stdio_definitions>) +# endif() endif() if(NOT MSVC) - set(CMAKE_CXX_FLAGS_DEBUG - "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wno-unused-parameter -Wno-redundant-move" - ) + set(LIB_DL -ldl) endif() if(OSX_BUILD_UNIVERSAL) @@ -53,8 +51,8 @@ set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES} src/duckdb/ub_src_catalog.cpp src/duckd add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") -target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} ) -target_link_libraries(duckdb_odbc Threads::Threads) +target_link_libraries(duckdb_odbc ) +target_link_libraries(duckdb_odbc Threads::Threads ${LIB_DL}) if(NOT CLANG_TIDY) add_subdirectory(test) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index 7a078b59..c32510c4 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -22,20 +22,18 @@ if(ODBC_FOUND) message(STATUS "Found ODBCINST_LIB: " ${ODBCINST_LIB}) endif() - if(WIN32) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) - add_subdirectory(winsetup) - list(APPEND LINK_LIB_LIST $<$:odbccp32>) - list(APPEND LINK_LIB_LIST - $<$:legacy_stdio_definitions>) - endif() +# if(WIN32) +# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +# add_subdirectory(winsetup) +# list(APPEND LINK_LIB_LIST $<$:odbccp32>) +# list(APPEND LINK_LIB_LIST +# $<$:legacy_stdio_definitions>) +# endif() endif() if(NOT MSVC) - set(CMAKE_CXX_FLAGS_DEBUG - "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wno-unused-parameter -Wno-redundant-move" - ) + set(LIB_DL -ldl) endif() if(OSX_BUILD_UNIVERSAL) @@ -53,8 +51,8 @@ set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES} ${SOURCE_FILES}) add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") -target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} ${LIBRARY_FILES}) -target_link_libraries(duckdb_odbc Threads::Threads) +target_link_libraries(duckdb_odbc ${LIBRARY_FILES}) +target_link_libraries(duckdb_odbc Threads::Threads ${LIB_DL}) if(NOT CLANG_TIDY) add_subdirectory(test) From 4262b164ac5675ecff34f49e0ffe18756e8776d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 15:20:38 +0200 Subject: [PATCH 24/33] unbreaking build --- CMakeLists.txt | 2 +- CMakeLists.txt.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e3190f5..577686e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES} src/duckdb/ub_src_catalog.cpp src/duckd add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") -target_link_libraries(duckdb_odbc ) +target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} ) target_link_libraries(duckdb_odbc Threads::Threads ${LIB_DL}) if(NOT CLANG_TIDY) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index c32510c4..2d477670 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -51,7 +51,7 @@ set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES} ${SOURCE_FILES}) add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") -target_link_libraries(duckdb_odbc ${LIBRARY_FILES}) +target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} ${LIBRARY_FILES}) target_link_libraries(duckdb_odbc Threads::Threads ${LIB_DL}) if(NOT CLANG_TIDY) From 84ffe01c1a1b0c3141a434572d9cddbca888a65f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 15:22:52 +0200 Subject: [PATCH 25/33] i guess we need this --- CMakeLists.txt.in | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index 2d477670..ce8aaa46 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -22,13 +22,13 @@ if(ODBC_FOUND) message(STATUS "Found ODBCINST_LIB: " ${ODBCINST_LIB}) endif() -# if(WIN32) -# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) + if(WIN32) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) # add_subdirectory(winsetup) -# list(APPEND LINK_LIB_LIST $<$:odbccp32>) -# list(APPEND LINK_LIB_LIST -# $<$:legacy_stdio_definitions>) -# endif() + list(APPEND LINK_LIB_LIST $<$:odbccp32>) + list(APPEND LINK_LIB_LIST + $<$:legacy_stdio_definitions>) + endif() endif() From a430d33a3956207745e882327db2d9263f98071a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 15:42:18 +0200 Subject: [PATCH 26/33] linking fun on windows --- CMakeLists.txt | 14 +++++++------- CMakeLists.txt.in | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 577686e2..5bb91c07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,13 +22,13 @@ if(ODBC_FOUND) message(STATUS "Found ODBCINST_LIB: " ${ODBCINST_LIB}) endif() -# if(WIN32) -# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) + if(WIN32) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) # add_subdirectory(winsetup) -# list(APPEND LINK_LIB_LIST $<$:odbccp32>) -# list(APPEND LINK_LIB_LIST -# $<$:legacy_stdio_definitions>) -# endif() + list(APPEND LINK_LIB_LIST $<$:odbccp32>) + list(APPEND LINK_LIB_LIST + $<$:legacy_stdio_definitions>) + endif() endif() @@ -40,7 +40,7 @@ if(OSX_BUILD_UNIVERSAL) SET(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures for Mac OS X" FORCE) endif() -add_definitions(-DNO_FRAMEWORKS -DDUCKDB_EXTENSION_PARQUET_LINKED -DDUCKDB_EXTENSION_ICU_LINKED -DDUCKDB_EXTENSION_JSON_LINKED) +add_definitions(-DDUCKDB_BUILD_LIBRARY -DNO_FRAMEWORKS -DDUCKDB_EXTENSION_PARQUET_LINKED -DDUCKDB_EXTENSION_ICU_LINKED -DDUCKDB_EXTENSION_JSON_LINKED) include_directories(src/duckdb/src/include/ src/duckdb/src/include src/duckdb/third_party/concurrentqueue src/duckdb/third_party/fast_float src/duckdb/third_party/fastpforlib src/duckdb/third_party/fmt/include src/duckdb/third_party/fsst src/duckdb/third_party/httplib src/duckdb/third_party/hyperloglog src/duckdb/third_party/jaro_winkler src/duckdb/third_party/jaro_winkler/details src/duckdb/third_party/libpg_query src/duckdb/third_party/libpg_query/include src/duckdb/third_party/lz4 src/duckdb/third_party/mbedtls src/duckdb/third_party/mbedtls/include src/duckdb/third_party/mbedtls/library src/duckdb/third_party/miniz src/duckdb/third_party/pcg src/duckdb/third_party/re2 src/duckdb/third_party/skiplist src/duckdb/third_party/tdigest src/duckdb/third_party/utf8proc src/duckdb/third_party/utf8proc/include src/duckdb/extension/parquet/include src/duckdb/third_party/parquet src/duckdb/third_party/thrift src/duckdb/third_party/lz4 src/duckdb/third_party/snappy src/duckdb/third_party/zstd/include src/duckdb/third_party/mbedtls src/duckdb/third_party/mbedtls/include src/duckdb/extension/icu/include src/duckdb/extension/icu/third_party/icu/common src/duckdb/extension/icu/third_party/icu/i18n src/duckdb/extension/json/include src/duckdb/extension/json/yyjson/include ${ODBC_INCLUDE_DIRS} include) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index ce8aaa46..9258c85c 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -40,7 +40,7 @@ if(OSX_BUILD_UNIVERSAL) SET(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures for Mac OS X" FORCE) endif() -add_definitions(-DNO_FRAMEWORKS ${DEFINES}) +add_definitions(-DDUCKDB_BUILD_LIBRARY -DNO_FRAMEWORKS ${DEFINES}) include_directories(src/duckdb/src/include/ ${INCLUDE_FILES} ${ODBC_INCLUDE_DIRS} include) From dc031c059bb59029ed5be2cc48e72e6e2d151279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Wed, 1 May 2024 15:43:32 +0200 Subject: [PATCH 27/33] re-enabling some deps --- .github/workflows/ODBC.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 3edcb4c8..4bb13672 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -58,7 +58,7 @@ jobs: runs-on: ubuntu-latest container: image: ubuntu:18.04 - # needs: odbc-linux-amd64 + needs: odbc-linux-amd64 env: GEN: ninja DUCKDB_PLATFORM: linux_arm64 @@ -153,7 +153,7 @@ jobs: GEN: ninja ODBC_CONFIG: ../../build/unixodbc/build/bin/odbc_config OSX_BUILD_UNIVERSAL: 1 -# needs: odbc-linux-amd64 + needs: odbc-linux-amd64 steps: - uses: actions/checkout@v3 with: @@ -203,7 +203,7 @@ jobs: name: ODBC Tests if: ${{ !startsWith(github.ref, 'refs/tags/v') }} runs-on: ubuntu-22.04 - # needs: linux-debug + needs: odbc-linux-amd64 env: BUILD_ODBC: 1 GEN: ninja From 8ce5ae9b3c618762bed2f4d3ecc8477248a0d1c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Thu, 2 May 2024 08:54:06 +0200 Subject: [PATCH 28/33] owning the libs more --- CMakeLists.txt | 8 ++++---- CMakeLists.txt.in | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5bb91c07..0a1e362e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,9 +31,9 @@ if(ODBC_FOUND) endif() endif() - -if(NOT MSVC) - set(LIB_DL -ldl) +set(DUCKDB_SYSTEM_LIBS ${CMAKE_DL_LIBS}) +if(MSVC) + set(DUCKDB_SYSTEM_LIBS ${DUCKDB_SYSTEM_LIBS} ws2_32 rstrtmgr bcrypt) endif() if(OSX_BUILD_UNIVERSAL) @@ -52,7 +52,7 @@ add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} ) -target_link_libraries(duckdb_odbc Threads::Threads ${LIB_DL}) +target_link_libraries(duckdb_odbc Threads::Threads ${DUCKDB_SYSTEM_LIBS}) if(NOT CLANG_TIDY) add_subdirectory(test) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index 9258c85c..1287221f 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -31,9 +31,9 @@ if(ODBC_FOUND) endif() endif() - -if(NOT MSVC) - set(LIB_DL -ldl) +set(DUCKDB_SYSTEM_LIBS ${CMAKE_DL_LIBS}) +if(MSVC) + set(DUCKDB_SYSTEM_LIBS ${DUCKDB_SYSTEM_LIBS} ws2_32 rstrtmgr bcrypt) endif() if(OSX_BUILD_UNIVERSAL) @@ -52,7 +52,7 @@ add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} ${LIBRARY_FILES}) -target_link_libraries(duckdb_odbc Threads::Threads ${LIB_DL}) +target_link_libraries(duckdb_odbc Threads::Threads ${DUCKDB_SYSTEM_LIBS}) if(NOT CLANG_TIDY) add_subdirectory(test) From b0a5aff19f1d339b05812f68c8497236c197b49b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Thu, 2 May 2024 09:10:59 +0200 Subject: [PATCH 29/33] builds yay --- .github/workflows/ODBC.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 4bb13672..44be61ab 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -106,7 +106,7 @@ jobs: odbc-windows-amd64: name: ODBC Windows (amd64) runs-on: windows-latest - # needs: odbc-linux-amd64 +# needs: odbc-linux-amd64 steps: - uses: actions/checkout@v3 with: @@ -128,7 +128,9 @@ jobs: - name: ODBC Tests if: ${{ inputs.skip_tests != 'true' }} shell: bash - run: ./build/release/test/test_odbc + run: | + ls -R build/release + ./build/release/test/test_odbc - name: Deploy shell: bash @@ -141,9 +143,9 @@ jobs: - uses: actions/upload-artifact@v3 with: - name: java-windows-amd64 + name: odbc-windows-amd64 path: | - build/release/duckdb_jdbc.jar + duckdb_odbc-windows-amd64.zip odbc-osx-universal: From 8c83f30078f616c7cc3d360919727ddc4c45c55e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Thu, 2 May 2024 09:36:57 +0200 Subject: [PATCH 30/33] path finagling --- .github/workflows/ODBC.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 44be61ab..2e5304b9 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -128,9 +128,7 @@ jobs: - name: ODBC Tests if: ${{ inputs.skip_tests != 'true' }} shell: bash - run: | - ls -R build/release - ./build/release/test/test_odbc + run: ./build/release/bin/Release/test_odbc.exe - name: Deploy shell: bash @@ -138,7 +136,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | - zip -j duckdb_odbc-windows-amd64.zip bin/Release/* + zip -j duckdb_odbc-windows-amd64.zip /build/release/bin/Release/duckdb_odbc.dll ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-windows-amd64.zip - uses: actions/upload-artifact@v3 From 3ebb7cf3863ff0913ce15b1c9df6b8c7edfcf2ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Thu, 2 May 2024 10:06:05 +0200 Subject: [PATCH 31/33] need zip --- .github/workflows/ODBC.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 2e5304b9..e894fb23 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -136,6 +136,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.S3_DUCKDB_STAGING_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | + choco install zip -y --force zip -j duckdb_odbc-windows-amd64.zip /build/release/bin/Release/duckdb_odbc.dll ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-windows-amd64.zip From 993926817b877cc2e91c6a4858dd65af2d826e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Thu, 2 May 2024 10:33:42 +0200 Subject: [PATCH 32/33] missing dot --- .github/workflows/ODBC.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index e894fb23..41949a29 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -137,7 +137,7 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DUCKDB_STAGING_KEY }} run: | choco install zip -y --force - zip -j duckdb_odbc-windows-amd64.zip /build/release/bin/Release/duckdb_odbc.dll + zip -j duckdb_odbc-windows-amd64.zip ./build/release/bin/Release/duckdb_odbc.dll ./scripts/upload-assets-to-staging.sh github_release duckdb_odbc-windows-amd64.zip - uses: actions/upload-artifact@v3 From eb1ec55602d5e900d5d3996ae2707ae110c152e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20M=C3=BChleisen?= Date: Thu, 2 May 2024 11:02:07 +0200 Subject: [PATCH 33/33] yay windows passes --- .github/workflows/ODBC.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ODBC.yml b/.github/workflows/ODBC.yml index 41949a29..0a5e79e5 100644 --- a/.github/workflows/ODBC.yml +++ b/.github/workflows/ODBC.yml @@ -106,7 +106,7 @@ jobs: odbc-windows-amd64: name: ODBC Windows (amd64) runs-on: windows-latest -# needs: odbc-linux-amd64 + needs: odbc-linux-amd64 steps: - uses: actions/checkout@v3 with: