This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new d5d557b52 test(java/driver/jni): expand test matrix (#4376)
d5d557b52 is described below

commit d5d557b52daa625c61f3e5244cbe3c1bf737a17e
Author: David Li <[email protected]>
AuthorDate: Wed Jun 10 18:10:10 2026 -0700

    test(java/driver/jni): expand test matrix (#4376)
    
    Actually build/test (sort of) on Windows and ARM Linux.
    
    After this I think we should add DuckDB to the testing so that we have a
    reasonably complete driver that runs on all platforms and doesn't depend
    on an external service (as the Docker setup can't be used on
    macOS/Windows).
    
    Closes #2688.
---
 .github/workflows/java.yml                         | 82 ++++++++++++++++++----
 ci/scripts/python_wheel_windows_build.bat          |  3 +-
 .../adbc/driver/jni/FlightSqlIntegrationTest.java  |  4 +-
 java/driver/jni/src/main/cpp/jni_wrapper.cc        |  1 +
 .../arrow/adbc/driver/jni/JniDriverTest.java       |  4 ++
 5 files changed, 80 insertions(+), 14 deletions(-)

diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml
index 74e8f0125..183d8d188 100644
--- a/.github/workflows/java.yml
+++ b/.github/workflows/java.yml
@@ -111,8 +111,10 @@ jobs:
     strategy:
       matrix:
         include:
-          - { os: Linux, arch: amd64, vcpkg_arch: x64, runner: ubuntu-latest }
+          - { os: Linux, arch: amd64, vcpkg_arch: x64, runner: ubuntu-latest, 
platform: "linux/amd64" }
+          - { os: Linux, arch: arm64v8, vcpkg_arch: arm64, runner: 
ubuntu-24.04-arm, platform: "linux/arm64/v8" }
           - { os: macOS, arch: arm64v8, vcpkg_arch: arm64, runner: 
macos-latest }
+          - { os: Windows, arch: amd64, vcpkg_arch: x64, runner: 
windows-latest }
     env:
       VCPKG_ROOT: "${{ github.workspace }}/vcpkg"
     steps:
@@ -141,8 +143,11 @@ jobs:
       - name: Install Homebrew dependencies
         if: matrix.os == 'macOS'
         run: brew install autoconf bash pkg-config ninja
-      - name: Build artifacts
-        if: matrix.os != 'macOS'
+      - name: Build artifacts (Linux)
+        if: matrix.os == 'Linux'
+        env:
+          ARCH: ${{ matrix.arch }}
+          PLATFORM: ${{ matrix.platform }}
         run: |
           docker compose run python-wheel-manylinux-build
       - name: Build artifacts (macOS)
@@ -156,8 +161,33 @@ jobs:
           export ADBC_USE_ASAN=OFF
           export ADBC_USE_UBSAN=OFF
           ./ci/scripts/python_wheel_unix_build.sh ${{ matrix.arch }} $(pwd) 
$(pwd)/build
+      - name: Build artifacts (Windows)
+        if: matrix.os == 'Windows'
+        # TODO(https://github.com/apache/arrow-adbc/issues/4269): remove 
cmd.exe usage
+        shell: cmd # zizmor: ignore[misfeature]
+        run: |
+          .\ci\scripts\python_wheel_windows_build.bat %cd% %cd%\build\${{ 
matrix.vcpkg_arch }}
+
+      - name: Build driver manager (Windows)
+        if: matrix.os == 'Windows'
+        run: |
+          ls -laR $(pwd)/build/${{ matrix.vcpkg_arch }}
+          rm -rf $(pwd)/build/${{ matrix.vcpkg_arch 
}}/bin/adbc_driver_manager.dll
+          rm -rf $(pwd)/build/${{ matrix.vcpkg_arch }}/driver_manager
+
+      # I think static and shared conflict on Windows so build static 
separately
+      - name: Build driver manager (Windows)
+        if: matrix.os == 'Windows'
+        # TODO(https://github.com/apache/arrow-adbc/issues/4269): remove 
cmd.exe usage
+        shell: cmd # zizmor: ignore[misfeature]
+        run: |
+          cmake -G "Visual Studio 18 2026" -A x64 -DADBC_BUILD_SHARED=OFF 
-DADBC_BUILD_STATIC=ON -DCMAKE_VERBOSE_MAKEFILE=ON -DADBC_DRIVER_MANAGER=ON 
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=%cd%\build\${{ 
matrix.vcpkg_arch }} -B %cd%\buildmanager %cd%\c || exit /B 1
+          cmake --build %cd%\buildmanager --config Debug --target install 
--verbose -j || exit /B 1
+
       - name: Build JNI artifacts
         run: |
+          ls -l $(pwd)/build/${{ matrix.vcpkg_arch }}
+
           export ADBC_BUILD_STATIC=ON
           export ADBC_BUILD_TESTS=OFF
           export ADBC_USE_ASAN=OFF
@@ -165,6 +195,7 @@ jobs:
           ./ci/scripts/java_build.sh $(pwd)
           ./ci/scripts/java_jni_build.sh $(pwd) $(pwd)/build_jni 
$(pwd)/build/${{ matrix.vcpkg_arch }}
       - name: Assemble artifacts
+        if: matrix.os != 'Windows'
         run: |
           mkdir artifacts
           cp -r java/driver/jni/src/main/resources/ artifacts/jni
@@ -172,6 +203,15 @@ jobs:
           ls -laR artifacts
           mv artifacts artifacts-${{ matrix.os }}-${{ matrix.arch }}
           tar czf artifacts-${{ matrix.os }}-${{ matrix.arch }}.tgz 
artifacts-${{ matrix.os }}-${{ matrix.arch }}
+      - name: Assemble artifacts (Windows)
+        if: matrix.os == 'Windows'
+        run: |
+          mkdir -p artifacts/driver
+          cp -r java/driver/jni/src/main/resources/ artifacts/jni
+          cp -r build/${{ matrix.vcpkg_arch }}/bin/*.dll artifacts/driver
+          ls -laR artifacts
+          mv artifacts artifacts-${{ matrix.os }}-${{ matrix.arch }}
+          tar czf artifacts-${{ matrix.os }}-${{ matrix.arch }}.tgz 
artifacts-${{ matrix.os }}-${{ matrix.arch }}
       - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
           name: jni-artifacts-${{ matrix.os }}-${{ matrix.arch }}
@@ -183,11 +223,15 @@ jobs:
         run: |
           mkdir ~/logs
           find "$VCPKG_ROOT" -name 'build-*.log' -exec cp '{}' ~/logs ';'
+
+          if [[ -d "$(pwd)/build/${{ matrix.vcpkg_arch }}" ]]; then
+            mv "$(pwd)/build/${{ matrix.vcpkg_arch }}" ~/logs/artifacts
+          fi
       - name: Upload failure logs
         if: failure()
         uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
-          name: jni-artifacts-${{ matrix.os }}-${{ matrix.arch }}
+          name: jni-debug-logs-${{ matrix.os }}-${{ matrix.arch }}
           retention-days: 7
           path: ~/logs
 
@@ -199,10 +243,16 @@ jobs:
     strategy:
       matrix:
         include:
-          - { java: '11', os: Linux, arch: amd64, vcpkg_arch: x64, runner: 
ubuntu-latest }
-          - { java: '25', os: Linux, arch: amd64, vcpkg_arch: x64, runner: 
ubuntu-latest }
-          - { java: '11', os: macOS, arch: arm64v8, vcpkg_arch: arm64, runner: 
macos-latest }
-          - { java: '25', os: macOS, arch: arm64v8, vcpkg_arch: arm64, runner: 
macos-latest }
+          # To keep the matrix down, only test Java 11 on some platforms
+          - { java: '11', os: Linux, arch: amd64, runner: ubuntu-latest }
+          - { java: '11', os: macOS, arch: arm64v8, runner: macos-latest }
+          - { java: '11', os: Windows, arch: amd64, runner: windows-latest }
+          - { java: '11', os: Linux, arch: arm64v8, runner: ubuntu-24.04-arm }
+
+          - { java: '25', os: Linux, arch: amd64, runner: ubuntu-latest }
+          - { java: '25', os: macOS, arch: arm64v8, runner: macos-latest }
+          - { java: '25', os: Windows, arch: amd64, runner: windows-latest }
+      max-parallel: 4
     steps:
       - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # 
v6.0.3
         with:
@@ -223,11 +273,9 @@ jobs:
         run: |
           set -x
           pushd artifacts
-          for archive in artifacts*.tgz; do
-            tar xvf $archive
-          done
+          tar xvf artifacts-${{ matrix.os }}-${{ matrix.arch }}.tgz
           popd
-          cp -r artifacts/*/jni/adbc_driver_jni 
java/driver/jni/src/main/resources
+          cp -r artifacts/artifacts-${{ matrix.os }}-${{ matrix.arch 
}}/jni/adbc_driver_jni java/driver/jni/src/main/resources
           env BUILD_JNI=ON ./ci/scripts/java_build.sh $(pwd)
 
       - name: Start Dependencies
@@ -236,6 +284,12 @@ jobs:
           docker compose up --detach --wait flightsql-test 
flightsql-sqlite-test mssql-test postgres-test
           cat .env | grep -v -e '^#' | grep -e '^ADBC_' | awk NF | sed 
's/"//g' | tee -a $GITHUB_ENV
 
+      - name: Start Dependencies
+        if: matrix.os == 'Linux' && matrix.arch == 'arm64v8'
+        run: |
+          docker compose up --detach --wait flightsql-test 
flightsql-sqlite-test postgres-test
+          cat .env | grep -v -e '^#' | grep -v "MSSQL" | grep -e '^ADBC_' | 
awk NF | sed 's/"//g' | tee -a $GITHUB_ENV
+
       - name: Download thirdparty driver
         if: matrix.os == 'Linux' && matrix.arch == 'amd64'
         run: |
@@ -256,6 +310,10 @@ jobs:
           for driver in artifacts/*/driver; do
             export LD_LIBRARY_PATH=$(pwd)/$driver:${LD_LIBRARY_PATH:-}
             export DYLD_LIBRARY_PATH=$(pwd)/$driver:${DYLD_LIBRARY_PATH:-}
+            export PATH=$(pwd)/$driver:${PATH:-}
           done
+          echo LD_LIBRARY_PATH=$LD_LIBRARY_PATH
+          echo DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
+          echo PATH=$PATH
           cd java
           mvn -B -Pjni test -pl :adbc-driver-jni -pl 
:adbc-driver-jni-validation
diff --git a/ci/scripts/python_wheel_windows_build.bat 
b/ci/scripts/python_wheel_windows_build.bat
index 4ca2051be..0a81ea792 100644
--- a/ci/scripts/python_wheel_windows_build.bat
+++ b/ci/scripts/python_wheel_windows_build.bat
@@ -31,6 +31,7 @@ set VCPKG_TARGET_TRIPLET=x64-windows-static
 set VCPKG_DEFAULT_HOST_TRIPLET=x64-windows-static
 
 IF NOT DEFINED VCPKG_ROOT (echo "Must set VCPKG_ROOT" && exit /B 1)
+IF NOT DEFINED ADBC_BUILD_STATIC SET ADBC_BUILD_STATIC=OFF
 
 %VCPKG_ROOT%\vcpkg install --triplet=%VCPKG_TARGET_TRIPLET% libpq 
"sqlite3[dbstat,fts3,fts4,fts5,geopoly,json1,limit,math,rtree,session,snapshot,soundex]"
 IF %errorlevel% NEQ 0 EXIT /B %errorlevel%
@@ -42,7 +43,7 @@ cmake ^
       -G "%CMAKE_GENERATOR%" ^
       -A "%CMAKE_GENERATOR_PLATFORM%" ^
       -DADBC_BUILD_SHARED=ON ^
-      -DADBC_BUILD_STATIC=OFF ^
+      -DADBC_BUILD_STATIC=%ADBC_BUILD_STATIC% ^
       -DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE% ^
       -DCMAKE_INSTALL_PREFIX=%build_dir% ^
       -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake ^
diff --git 
a/java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/FlightSqlIntegrationTest.java
 
b/java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/FlightSqlIntegrationTest.java
index c63bf8dd0..764eeab73 100644
--- 
a/java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/FlightSqlIntegrationTest.java
+++ 
b/java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/FlightSqlIntegrationTest.java
@@ -170,7 +170,9 @@ public class FlightSqlIntegrationTest {
           new Thread(
               () -> {
                 try {
-                  while (stmt.getProgress() < 0.05) {
+                  // try to make sure we get into the hasNext call below first
+                  Thread.sleep(500);
+                  while (stmt.getProgress() < 0.20) {
                     Thread.sleep(100);
                   }
                   System.out.println("progress: " + stmt.getProgress());
diff --git a/java/driver/jni/src/main/cpp/jni_wrapper.cc 
b/java/driver/jni/src/main/cpp/jni_wrapper.cc
index 7a8a73d53..385a65ae1 100644
--- a/java/driver/jni/src/main/cpp/jni_wrapper.cc
+++ b/java/driver/jni/src/main/cpp/jni_wrapper.cc
@@ -25,6 +25,7 @@
 #include <utility>
 #include <vector>
 
+#define ADBC_EXPORT
 #include <arrow-adbc/adbc.h>
 #include <arrow-adbc/adbc_driver_manager.h>
 #include <jni.h>
diff --git 
a/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
 
b/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
index 318923571..7415cce23 100644
--- 
a/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
+++ 
b/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
@@ -51,6 +51,8 @@ import org.apache.arrow.vector.types.pojo.Field;
 import org.apache.arrow.vector.types.pojo.Schema;
 import org.assertj.core.api.InstanceOfAssertFactories;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledOnOs;
+import org.junit.jupiter.api.condition.OS;
 import org.junit.jupiter.api.io.TempDir;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -109,7 +111,9 @@ class JniDriverTest {
     }
   }
 
+  // the driver doesn't really support URIs and seems to choke on Windows in 
particular
   @Test
+  @DisabledOnOs(OS.WINDOWS)
   void loadUri() throws Exception {
     try (final BufferAllocator allocator = new RootAllocator()) {
       JniDriver driver = new JniDriver(allocator);

Reply via email to