Skip to content

Commit 43c7ff9

Browse files
committed
Add ODBC Debian support
* Attempt to build Debian ODBC Update debian-13-cpp.dockerfile # New if statement attempts to fix error at https://github.com/Bit-Quill/arrow/actions/runs/23025621291/job/66872649956#step:6:4516. Only an if statement is added, rest of code change is space # Disable Arrow parquet due to https://github.com/Bit-Quill/arrow/actions/runs/23070284534/job/67018772931#step:6:11116
1 parent d28aea9 commit 43c7ff9

4 files changed

Lines changed: 159 additions & 41 deletions

File tree

.github/workflows/cpp_extra.yml

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,70 @@ jobs:
336336
cd cpp/examples/minimal_build
337337
../minimal_build.build/arrow-example
338338
339+
odbc-linux:
340+
needs: check-labels
341+
name: ODBC ${{ matrix.title }}
342+
runs-on: ubuntu-latest
343+
if: >-
344+
needs.check-labels.outputs.force == 'true' ||
345+
contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 'CI: Extra') ||
346+
contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 'CI: Extra: C++')
347+
timeout-minutes: 75
348+
strategy:
349+
fail-fast: false
350+
matrix:
351+
include:
352+
- image: ubuntu-cpp-odbc
353+
title: AMD64 Ubuntu
354+
- image: debian-cpp-odbc
355+
title: AMD64 Debian
356+
env:
357+
ARCH: amd64
358+
ARCHERY_DEBUG: 1
359+
ARROW_ENABLE_TIMING_TESTS: OFF
360+
CLANG_TOOLS: 18
361+
DOCKER_VOLUME_PREFIX: ".docker/"
362+
LLVM: 18
363+
UBUNTU: 24.04
364+
steps:
365+
- name: Checkout Arrow
366+
uses: actions/checkout@v6
367+
with:
368+
fetch-depth: 0
369+
submodules: recursive
370+
- name: Cache Docker Volumes
371+
uses: actions/cache@v5
372+
with:
373+
path: .docker
374+
key: ${{ matrix.image }}-${{ hashFiles('cpp/**') }}
375+
restore-keys: ${{ matrix.image }}-
376+
- name: Setup Python on hosted runner
377+
uses: actions/setup-python@v6
378+
with:
379+
python-version: 3
380+
- name: Setup Archery
381+
run: python3 -m pip install -e dev/archery[docker]
382+
- name: Execute Docker Build
383+
env:
384+
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
385+
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
386+
run: |
387+
# GH-40558: reduce ASLR to avoid ASAN/LSAN crashes
388+
sudo sysctl -w vm.mmap_rnd_bits=28
389+
source ci/scripts/util_enable_core_dumps.sh
390+
archery docker run ${{ matrix.image }}
391+
- name: Docker Push
392+
if: >-
393+
success() &&
394+
github.event_name == 'push' &&
395+
github.repository == 'apache/arrow' &&
396+
github.ref_name == 'main'
397+
env:
398+
ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
399+
ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
400+
continue-on-error: true
401+
run: archery docker push ${{ matrix.image }}
402+
339403
odbc-macos:
340404
needs: check-labels
341405
name: ODBC ${{ matrix.build-type }} ${{ matrix.architecture }} macOS ${{ matrix.macos-version }}
@@ -435,7 +499,7 @@ jobs:
435499
"$(pwd)/build/cpp/${{ matrix.build-type }}/libarrow_flight_sql_odbc.dylib"
436500
- name: Register Flight SQL ODBC Driver
437501
run: |
438-
sudo cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh $(pwd)/build/cpp/${{ matrix.build-type }}/libarrow_flight_sql_odbc.dylib
502+
sudo cpp/src/arrow/flight/sql/odbc/install/unix/install_odbc.sh $(pwd)/build/cpp/${{ matrix.build-type }}/libarrow_flight_sql_odbc.dylib
439503
- name: Test
440504
shell: bash
441505
run: |
@@ -698,6 +762,7 @@ jobs:
698762
- jni-linux
699763
- jni-macos
700764
- msvc-arm64
765+
- odbc-linux
701766
- odbc-macos
702767
- odbc-msvc
703768
- odbc-nightly

ci/docker/debian-13-cpp.dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,10 @@ RUN apt-get update -y -q && \
8888
rapidjson-dev \
8989
rsync \
9090
rustc \
91+
sudo \
9192
tzdata \
9293
tzdata-legacy \
94+
unixodbc-dev \
9395
zlib1g-dev && \
9496
apt-get clean && \
9597
rm -rf /var/lib/apt/lists/*

compose.yaml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ x-hierarchy:
134134
- debian-cpp:
135135
- debian-c-glib:
136136
- debian-ruby
137+
- debian-cpp-odbc
137138
- debian-python:
138139
- debian-docs
139140
- fedora-cpp:
@@ -371,6 +372,54 @@ services:
371372
/arrow/ci/scripts/cpp_build.sh /arrow /build &&
372373
/arrow/ci/scripts/cpp_test.sh /arrow /build"
373374

375+
debian-cpp-odbc:
376+
# Usage:
377+
# docker compose build debian-cpp-odbc
378+
# docker compose run --rm debian-cpp-odbc
379+
# Parameters:
380+
# ARCH: amd64, arm64v8, ...
381+
# DEBIAN: 12, experimental
382+
image: ${REPO}:${ARCH}-debian-${DEBIAN}-cpp
383+
build:
384+
context: .
385+
dockerfile: ci/docker/debian-${DEBIAN}-cpp.dockerfile
386+
cache_from:
387+
- ${REPO}:${ARCH}-debian-${DEBIAN}-cpp
388+
args:
389+
arch: ${ARCH}
390+
gcc: ${GCC}
391+
llvm: ${LLVM}
392+
shm_size: *shm-size
393+
ulimits: *ulimits
394+
environment:
395+
<<: [*common, *ccache, *sccache, *cpp]
396+
ARROW_ACERO: "OFF"
397+
ARROW_AZURE: "OFF"
398+
ARROW_BUILD_TYPE: RELEASE
399+
ARROW_CSV: "OFF"
400+
ARROW_DATASET: "OFF"
401+
ARROW_ENABLE_TIMING_TESTS: # inherit
402+
ARROW_DEPENDENCY_SOURCE: BUNDLED
403+
ARROW_DEPENDENCY_USE_SHARED: "OFF"
404+
ARROW_FILESYSTEM: "OFF"
405+
ARROW_FLIGHT_SQL_ODBC: "ON"
406+
ARROW_GANDIVA: "OFF"
407+
ARROW_GCS: "OFF"
408+
ARROW_HDFS: "OFF"
409+
ARROW_ORC: "OFF"
410+
ARROW_PARQUET: "OFF"
411+
ARROW_S3: "OFF"
412+
ARROW_SUBSTRAIT: "OFF"
413+
volumes: &debian-volumes
414+
- .:/arrow:delegated
415+
- ${DOCKER_VOLUME_PREFIX}debian-ccache:/ccache:delegated
416+
# Register ODBC before running tests
417+
command: >
418+
/bin/bash -c "
419+
/arrow/ci/scripts/cpp_build.sh /arrow /build &&
420+
sudo /arrow/cpp/src/arrow/flight/sql/odbc/install/unix/install_odbc.sh /usr/local/lib/libarrow_flight_sql_odbc.so &&
421+
/arrow/ci/scripts/cpp_test.sh /arrow /build"
422+
374423
ubuntu-cpp:
375424
# Usage:
376425
# docker compose build ubuntu-cpp

cpp/cmake_modules/ThirdpartyToolchain.cmake

Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2689,51 +2689,53 @@ macro(build_zlib)
26892689
# bundled. We need to do this for all packages
26902690
# not just zlib as some depend on zlib, but we don't rebuild
26912691
# if it exists already
2692-
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
2693-
# build zlib using Emscripten ports
2694-
if(NOT EXISTS ${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a)
2695-
execute_process(COMMAND embuilder --pic --force build zlib)
2696-
endif()
2697-
add_library(ZLIB::ZLIB STATIC IMPORTED)
2698-
set_property(TARGET ZLIB::ZLIB
2699-
PROPERTY IMPORTED_LOCATION
2700-
"${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a")
2701-
target_include_directories(ZLIB::ZLIB INTERFACE "${EMSCRIPTEN_SYSROOT}/include")
2702-
list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB)
2703-
else()
2704-
set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep/src/zlib_ep-install")
2705-
if(MSVC)
2706-
if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG")
2707-
set(ZLIB_STATIC_LIB_NAME zlibstaticd.lib)
2708-
else()
2709-
set(ZLIB_STATIC_LIB_NAME zlibstatic.lib)
2692+
if(NOT TARGET ZLIB::ZLIB)
2693+
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
2694+
# build zlib using Emscripten ports
2695+
if(NOT EXISTS ${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a)
2696+
execute_process(COMMAND embuilder --pic --force build zlib)
27102697
endif()
2698+
add_library(ZLIB::ZLIB STATIC IMPORTED)
2699+
set_property(TARGET ZLIB::ZLIB
2700+
PROPERTY IMPORTED_LOCATION
2701+
"${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a")
2702+
target_include_directories(ZLIB::ZLIB INTERFACE "${EMSCRIPTEN_SYSROOT}/include")
2703+
list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB)
27112704
else()
2712-
set(ZLIB_STATIC_LIB_NAME libz.a)
2705+
set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep/src/zlib_ep-install")
2706+
if(MSVC)
2707+
if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG")
2708+
set(ZLIB_STATIC_LIB_NAME zlibstaticd.lib)
2709+
else()
2710+
set(ZLIB_STATIC_LIB_NAME zlibstatic.lib)
2711+
endif()
2712+
else()
2713+
set(ZLIB_STATIC_LIB_NAME libz.a)
2714+
endif()
2715+
set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}")
2716+
set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}")
2717+
2718+
externalproject_add(zlib_ep
2719+
${EP_COMMON_OPTIONS}
2720+
URL ${ZLIB_SOURCE_URL}
2721+
URL_HASH "SHA256=${ARROW_ZLIB_BUILD_SHA256_CHECKSUM}"
2722+
BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}"
2723+
CMAKE_ARGS ${ZLIB_CMAKE_ARGS})
2724+
2725+
file(MAKE_DIRECTORY "${ZLIB_PREFIX}/include")
2726+
2727+
add_library(ZLIB::ZLIB STATIC IMPORTED)
2728+
set(ZLIB_LIBRARIES ${ZLIB_STATIC_LIB})
2729+
set(ZLIB_INCLUDE_DIRS "${ZLIB_PREFIX}/include")
2730+
set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARIES})
2731+
target_include_directories(ZLIB::ZLIB BEFORE INTERFACE "${ZLIB_INCLUDE_DIRS}")
2732+
2733+
add_dependencies(ZLIB::ZLIB zlib_ep)
2734+
list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB)
27132735
endif()
2714-
set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}")
2715-
set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}")
2716-
2717-
externalproject_add(zlib_ep
2718-
${EP_COMMON_OPTIONS}
2719-
URL ${ZLIB_SOURCE_URL}
2720-
URL_HASH "SHA256=${ARROW_ZLIB_BUILD_SHA256_CHECKSUM}"
2721-
BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}"
2722-
CMAKE_ARGS ${ZLIB_CMAKE_ARGS})
27232736

2724-
file(MAKE_DIRECTORY "${ZLIB_PREFIX}/include")
2725-
2726-
add_library(ZLIB::ZLIB STATIC IMPORTED)
2727-
set(ZLIB_LIBRARIES ${ZLIB_STATIC_LIB})
2728-
set(ZLIB_INCLUDE_DIRS "${ZLIB_PREFIX}/include")
2729-
set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARIES})
2730-
target_include_directories(ZLIB::ZLIB BEFORE INTERFACE "${ZLIB_INCLUDE_DIRS}")
2731-
2732-
add_dependencies(ZLIB::ZLIB zlib_ep)
2733-
list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB)
2737+
set(ZLIB_VENDORED TRUE)
27342738
endif()
2735-
2736-
set(ZLIB_VENDORED TRUE)
27372739
endmacro()
27382740

27392741
if(ARROW_WITH_ZLIB)

0 commit comments

Comments
 (0)