From bd4eb4bcd82ada5fffc4834acec109029e98decb Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Mon, 23 Mar 2026 17:47:19 -0700 Subject: [PATCH 01/39] Set up static build of ODBC FlightSQL driver --- .github/workflows/cpp_extra.yml | 8 ++++++-- ci/vcpkg/amd64-windows-no-absl-sync-release.cmake | 4 ++-- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 12 +++--------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/cpp_extra.yml b/.github/workflows/cpp_extra.yml index e4e51608dbe3..18ffb16c90a3 100644 --- a/.github/workflows/cpp_extra.yml +++ b/.github/workflows/cpp_extra.yml @@ -580,8 +580,8 @@ jobs: contents: read packages: write env: - ARROW_BUILD_SHARED: ON - ARROW_BUILD_STATIC: OFF + ARROW_BUILD_SHARED: OFF + ARROW_BUILD_STATIC: ON ARROW_BUILD_TESTS: ON ARROW_BUILD_TYPE: release # Turn Arrow CSV off to disable `find_package(Arrow)` check on MSVC CI. @@ -597,6 +597,10 @@ jobs: # Build Arrow with GPR_DISABLE_ABSEIL_SYNC so grpcpp's Mutex ABI # matches the gRPC rebuilt by the overlay triplet. Remove once fixed upstream. ARROW_CXXFLAGS: -DGPR_DISABLE_ABSEIL_SYNC + ARROW_DEPENDENCY_USE_SHARED: OFF + ARROW_MIMALLOC: OFF + ARROW_TEST_LINKAGE: shared + ARROW_USE_STATIC_CRT: OFF CMAKE_GENERATOR: Ninja CMAKE_INSTALL_PREFIX: /usr VCPKG_BINARY_SOURCES: 'clear;nugettimeout,600;nuget,GitHub,readwrite' diff --git a/ci/vcpkg/amd64-windows-no-absl-sync-release.cmake b/ci/vcpkg/amd64-windows-no-absl-sync-release.cmake index 97c73e31464e..436650842adf 100644 --- a/ci/vcpkg/amd64-windows-no-absl-sync-release.cmake +++ b/ci/vcpkg/amd64-windows-no-absl-sync-release.cmake @@ -17,10 +17,10 @@ # GH-49465: rebuild gRPC with native sync instead of absl::Mutex to avoid the # Windows exit hang. See the ODBC Windows job in cpp_extra.yml -# Dynamic CRT/linkage and release-only to match that job. +# Static library linkage, dynamic CRT (/MD), release-only to match that job. set(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) -set(VCPKG_LIBRARY_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) set(VCPKG_BUILD_TYPE release) set(VCPKG_C_FLAGS "/DGPR_DISABLE_ABSEIL_SYNC") diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index 8783d2b065d8..d61af1b8fb5a 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -67,10 +67,8 @@ set(ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS "") if(WIN32) set(ARROW_FLIGHT_SQL_ODBC_DEPENDENCIES arrow_flight_sql) - set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_shared arrow_odbc_spi_impl) + set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_odbc_spi_impl) set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) - list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS - ArrowFlight::arrow_flight_sql_shared) list(APPEND ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS ArrowFlight::arrow_flight_sql_static) list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS ODBC::ODBC ${ODBCINST}) @@ -130,15 +128,11 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) set(CPACK_PACKAGE_CONTACT "dev@arrow.apache.org") if(WIN32) - # Install ODBC and its Arrow dependencies + # Install ODBC driver install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT ArrowFlightSQLODBC) - install(TARGETS arrow_shared - arrow_compute_shared - arrow_flight_shared - arrow_flight_sql_shared - arrow_flight_sql_odbc_shared + install(TARGETS arrow_flight_sql_odbc_shared RUNTIME_DEPENDENCIES PRE_EXCLUDE_REGEXES "api-ms-.*" From 36d5d095aaad5609f97a9d06a6ba12330fc7f3b0 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Mon, 23 Mar 2026 18:36:54 -0700 Subject: [PATCH 02/39] Set CMAKE_MSVC_RUNTIME_LIBRARY --- cpp/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 143f915b3dea..87c8c008bad3 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -226,6 +226,11 @@ set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) # cmake options include(DefineOptions) +# Set MSVC runtime library (CMP0091 NEW policy) +if(MSVC AND ARROW_USE_STATIC_CRT) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +endif() + if(ARROW_BUILD_SHARED AND NOT ARROW_POSITION_INDEPENDENT_CODE) message(WARNING "Can't disable position-independent code to build shared libraries, enabling" ) From 79edd5b0a4ba34eaa1bbca956245471cb7b52c9a Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 24 Mar 2026 21:06:02 -0700 Subject: [PATCH 03/39] wip --- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 13 +++++++++++-- .../flight/sql/odbc/odbc_impl/CMakeLists.txt | 18 ++++++++++++++---- .../arrow/flight/sql/odbc/tests/CMakeLists.txt | 10 ++++++++-- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index d61af1b8fb5a..b2f77cc94d90 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -65,7 +65,17 @@ set(ARROW_FLIGHT_SQL_ODBC_DEPENDENCIES "") set(ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS "") -if(WIN32) +if(WIN32 AND ARROW_BUILD_STATIC) + # Static Arrow deps on Windows — self-contained ODBC DLL + set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_static arrow_odbc_spi_impl) + set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) + list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS + ArrowFlight::arrow_flight_sql_static) + list(APPEND ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS + ArrowFlight::arrow_flight_sql_static) + list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS ODBC::ODBC ${ODBCINST}) +elseif(WIN32) + # Dynamic Arrow deps on Windows (current behavior) set(ARROW_FLIGHT_SQL_ODBC_DEPENDENCIES arrow_flight_sql) set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_odbc_spi_impl) set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) @@ -128,7 +138,6 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) set(CPACK_PACKAGE_CONTACT "dev@arrow.apache.org") if(WIN32) - # Install ODBC driver install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT ArrowFlightSQLODBC) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index 5a16c0361f32..dc6c5fe9781e 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -133,9 +133,17 @@ endif() if(WIN32) find_package(ODBC REQUIRED) target_include_directories(arrow_odbc_spi_impl PUBLIC ${ODBC_INCLUDE_DIR}) - target_link_libraries(arrow_odbc_spi_impl - PUBLIC arrow_flight_sql_shared arrow_compute_shared Boost::locale - ${ODBCINST}) + if(ARROW_BUILD_STATIC) + target_link_libraries(arrow_odbc_spi_impl + PUBLIC arrow_flight_sql_static + arrow_compute_static + Boost::locale + ${ODBCINST}) + else() + target_link_libraries(arrow_odbc_spi_impl + PUBLIC arrow_flight_sql_shared arrow_compute_shared Boost::locale + ${ODBCINST}) + endif() else() # Unix target_include_directories(arrow_odbc_spi_impl SYSTEM BEFORE PUBLIC ${ODBC_INCLUDE_DIR}) @@ -163,7 +171,9 @@ target_link_libraries(arrow_odbc_spi_impl_cli arrow_odbc_spi_impl) # On Windows, dynamic linking ODBC is supported. # On unix systems, static linking ODBC is supported, thus the library linking is static. -if(WIN32) +if(WIN32 AND ARROW_TEST_LINKAGE STREQUAL "static") + set(ODBC_SPI_IMPL_TEST_LINK_LIBS arrow_flight_testing_static) +elseif(WIN32) set(ODBC_SPI_IMPL_TEST_LINK_LIBS arrow_flight_testing_shared) else() # unix diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 0f45bfd0c811..7e3911d0c05e 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -59,8 +59,14 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_LIBS ${ODBCINST} ${ODBC_LIBRARIES} ${SQLite3_LIBR # On unix systems, static linking ODBC is supported, thus tests link libraries statically. set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") -if(WIN32) - # arrow_odbc_spi_impl is required on Windows due to dynamic linking +if(WIN32 AND ARROW_TEST_LINKAGE STREQUAL "static") + # Static Windows tests + list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS + arrow_odbc_spi_impl + ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} + ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) +elseif(WIN32) + # Dynamic Windows tests (current behavior) list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS}) else() From dbabf18b6ef9af7a4f247f56d037186562fdf076 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 24 Mar 2026 21:06:14 -0700 Subject: [PATCH 04/39] Revert "Set CMAKE_MSVC_RUNTIME_LIBRARY" This reverts commit 819f2fcce4e59a558e4588c505d74a34404412a0. --- cpp/CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 87c8c008bad3..143f915b3dea 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -226,11 +226,6 @@ set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) # cmake options include(DefineOptions) -# Set MSVC runtime library (CMP0091 NEW policy) -if(MSVC AND ARROW_USE_STATIC_CRT) - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") -endif() - if(ARROW_BUILD_SHARED AND NOT ARROW_POSITION_INDEPENDENT_CODE) message(WARNING "Can't disable position-independent code to build shared libraries, enabling" ) From 5e05136a2c9096e8f0e9e19718f852b7dda6551e Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Thu, 26 Mar 2026 16:24:15 -0700 Subject: [PATCH 05/39] testing --- cpp/src/arrow/compute/CMakeLists.txt | 8 ++++++++ cpp/src/arrow/compute/kernels/CMakeLists.txt | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index e965b89ec055..21f3bd3761b5 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -35,6 +35,10 @@ if(ARROW_TESTING) # Even though this is still just an object library we still need to "link" our # dependencies so that include paths are configured correctly target_link_libraries(arrow_compute_core_testing PUBLIC ${ARROW_GTEST_GMOCK}) + # When using static test linkage, define ARROW_STATIC so test_util_internal.cc doesn't expect DLL imports + if(ARROW_TEST_LINKAGE STREQUAL "static") + target_compile_definitions(arrow_compute_core_testing PRIVATE ARROW_STATIC) + endif() endif() # Define arrow_compute_testing object library for test files requiring extra kernels. @@ -46,6 +50,10 @@ if(ARROW_TESTING AND ARROW_COMPUTE) target_link_libraries(arrow_compute_testing PUBLIC $ PUBLIC ${ARROW_GTEST_GTEST}) + # When using static test linkage, define ARROW_STATIC so test_env.cc doesn't expect DLL imports + if(ARROW_TEST_LINKAGE STREQUAL "static") + target_compile_definitions(arrow_compute_testing PRIVATE ARROW_STATIC) + endif() endif() set(ARROW_COMPUTE_TEST_PREFIX "arrow-compute") diff --git a/cpp/src/arrow/compute/kernels/CMakeLists.txt b/cpp/src/arrow/compute/kernels/CMakeLists.txt index 15955b5ef883..ae1da2368a58 100644 --- a/cpp/src/arrow/compute/kernels/CMakeLists.txt +++ b/cpp/src/arrow/compute/kernels/CMakeLists.txt @@ -26,6 +26,10 @@ if(ARROW_TESTING) # Even though this is still just an object library we still need to "link" our # dependencies so that include paths are configured correctly target_link_libraries(arrow_compute_kernels_testing PUBLIC ${ARROW_GTEST_GMOCK}) + # When using static test linkage, define ARROW_STATIC so test_util_internal.cc doesn't expect DLL imports + if(ARROW_TEST_LINKAGE STREQUAL "static") + target_compile_definitions(arrow_compute_kernels_testing PRIVATE ARROW_STATIC) + endif() endif() add_arrow_test(scalar_cast_test From 5b17b16848d500d5d76061d49d6fd6130860d835 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 27 Mar 2026 09:24:23 -0700 Subject: [PATCH 06/39] last set of fixes --- cpp/src/arrow/compute/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index 21f3bd3761b5..7680b5286ffd 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -37,7 +37,7 @@ if(ARROW_TESTING) target_link_libraries(arrow_compute_core_testing PUBLIC ${ARROW_GTEST_GMOCK}) # When using static test linkage, define ARROW_STATIC so test_util_internal.cc doesn't expect DLL imports if(ARROW_TEST_LINKAGE STREQUAL "static") - target_compile_definitions(arrow_compute_core_testing PRIVATE ARROW_STATIC) + target_compile_definitions(arrow_compute_core_testing PRIVATE ARROW_STATIC ARROW_COMPUTE_STATIC) endif() endif() @@ -52,7 +52,7 @@ if(ARROW_TESTING AND ARROW_COMPUTE) PUBLIC ${ARROW_GTEST_GTEST}) # When using static test linkage, define ARROW_STATIC so test_env.cc doesn't expect DLL imports if(ARROW_TEST_LINKAGE STREQUAL "static") - target_compile_definitions(arrow_compute_testing PRIVATE ARROW_STATIC) + target_compile_definitions(arrow_compute_testing PRIVATE ARROW_STATIC ARROW_COMPUTE_STATIC) endif() endif() From f6859cd74ab083b7ca1f2d3b1dca1b2769fae8f2 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Mon, 30 Mar 2026 12:56:10 -0700 Subject: [PATCH 07/39] more testing --- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 7e3911d0c05e..5e7f1a029e59 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -40,7 +40,8 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS type_info_test.cc # Enable Protobuf cleanup after test execution # GH-46889: move protobuf_test_util to a more common location - ../../../../engine/substrait/protobuf_test_util.cc) + #../../../../engine/substrait/protobuf_test_util.cc) +) # GH-49651 Link ODBC tests statically on Linux and dynamically on macOS/Windows if(WIN32 OR APPLE) From 8444488d7a13c9fa42950c588b3ed9046164d96c Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Mon, 30 Mar 2026 17:42:15 -0700 Subject: [PATCH 08/39] Update odbc_test_suite.cc --- .../flight/sql/odbc/tests/odbc_test_suite.cc | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc b/cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc index 3125c18b92ac..3fbc1ceb164b 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc +++ b/cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc @@ -232,7 +232,37 @@ void ODBCTestBase::SetUp() { } void ODBCTestBase::TearDown() { - ASSERT_EQ(SQL_SUCCESS, SQLFreeHandle(SQL_HANDLE_STMT, stmt)); + if (connected) { + ASSERT_EQ(SQL_SUCCESS, SQLFreeHandle(SQL_HANDLE_STMT, stmt)); + } +} + +void ODBCTestBase::TearDownTestSuite() { + if (connected) { + // WORKAROUND GH-49585: Skip Disconnect() to avoid segfault when run through CTest + // + // When tests are run through CTest (but NOT when run directly from cmd.exe), + // SQLFreeHandle(SQL_HANDLE_ENV) crashes during cleanup. The crash occurs only with + // static linkage (ARROW_TEST_LINKAGE=static) and happens while freeing the ODBC + // environment handle, which triggers cleanup of statically-linked gRPC/Flight resources. + // + // Root cause appears to be CTest's process management (signal handling, I/O redirection, + // or environment differences) interfering with gRPC cleanup during static destruction. + // + // This workaround leaks the ODBC handles but allows tests to complete successfully. + // A proper fix would require ensuring gRPC is kept alive until all ODBC handles are freed, + // or switching to dynamic linkage for tests. + // + // Disconnect(); + connected = false; + } +} + +void FlightSQLODBCRemoteTestBase::CheckForRemoteTest() { + if (arrow::internal::GetEnvVar(kTestConnectStr.data()).ValueOr("").empty()) { + skipping_test = true; + GTEST_SKIP() << "Skipping test: kTestConnectStr not set"; + } } void FlightSQLODBCRemoteTestBase::SetUpTestSuite() { From 28c10797832e5bddfd1af0271230e3149a41e9f4 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 31 Mar 2026 09:10:19 -0700 Subject: [PATCH 09/39] Check ARROW_FLIGHT_TEST_LINKAGE Flight tests get statically linked no matter what when grpc or protobuf are static. --- cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index dc6c5fe9781e..47525fafbbdf 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -171,7 +171,7 @@ target_link_libraries(arrow_odbc_spi_impl_cli arrow_odbc_spi_impl) # On Windows, dynamic linking ODBC is supported. # On unix systems, static linking ODBC is supported, thus the library linking is static. -if(WIN32 AND ARROW_TEST_LINKAGE STREQUAL "static") +if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(ODBC_SPI_IMPL_TEST_LINK_LIBS arrow_flight_testing_static) elseif(WIN32) set(ODBC_SPI_IMPL_TEST_LINK_LIBS arrow_flight_testing_shared) From 207d9a257794f03a07312c618809335f2ab6dba7 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 31 Mar 2026 15:40:58 -0700 Subject: [PATCH 10/39] force static link libs --- .../flight/sql/odbc/odbc_impl/CMakeLists.txt | 24 ++++++++++++++----- .../flight/sql/odbc/tests/CMakeLists.txt | 16 ++++++++++--- testing | 2 +- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index 47525fafbbdf..d8325354629f 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -171,13 +171,24 @@ target_link_libraries(arrow_odbc_spi_impl_cli arrow_odbc_spi_impl) # On Windows, dynamic linking ODBC is supported. # On unix systems, static linking ODBC is supported, thus the library linking is static. +# Use STATIC_LINK_LIBS when Flight tests require static linkage to avoid mixing static/shared Arrow if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - set(ODBC_SPI_IMPL_TEST_LINK_LIBS arrow_flight_testing_static) + # Static linkage required - pass everything via STATIC_LINK_LIBS + set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl + arrow_flight_testing_static + ${ARROW_TEST_STATIC_LINK_LIBS}) + set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") elseif(WIN32) - set(ODBC_SPI_IMPL_TEST_LINK_LIBS arrow_flight_testing_shared) + # Shared linkage - use EXTRA_LINK_LIBS + set(ODBC_SPI_IMPL_TEST_STATIC_LIBS "") + set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS arrow_odbc_spi_impl + arrow_flight_testing_shared) else() - # unix - set(ODBC_SPI_IMPL_TEST_LINK_LIBS arrow_flight_testing_static) + # Unix - always static + set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl + arrow_flight_testing_static + ${ARROW_TEST_STATIC_LINK_LIBS}) + set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") endif() add_arrow_test(odbc_spi_impl_test @@ -197,5 +208,6 @@ add_arrow_test(odbc_spi_impl_test record_batch_transformer_test.cc util_test.cc EXTRA_LINK_LIBS - arrow_odbc_spi_impl - ${ODBC_SPI_IMPL_TEST_LINK_LIBS}) + ${ODBC_SPI_IMPL_TEST_EXTRA_LIBS} + STATIC_LINK_LIBS + ${ODBC_SPI_IMPL_TEST_STATIC_LIBS}) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 5e7f1a029e59..0b79e5a34abb 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -43,8 +43,12 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS #../../../../engine/substrait/protobuf_test_util.cc) ) -# GH-49651 Link ODBC tests statically on Linux and dynamically on macOS/Windows -if(WIN32 OR APPLE) +# ODBC tests must respect ARROW_FLIGHT_TEST_LINKAGE since they depend on Flight libraries +# which may be forced to static linkage due to static gRPC/Protobuf +if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_static + ${ARROW_TEST_STATIC_LINK_LIBS}) +else() set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_shared ${ARROW_TEST_SHARED_LINK_LIBS}) else() @@ -60,7 +64,7 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_LIBS ${ODBCINST} ${ODBC_LIBRARIES} ${SQLite3_LIBR # On unix systems, static linking ODBC is supported, thus tests link libraries statically. set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") -if(WIN32 AND ARROW_TEST_LINKAGE STREQUAL "static") +if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") # Static Windows tests list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS arrow_odbc_spi_impl @@ -83,6 +87,12 @@ else() endif() +# When Flight tests require static linkage, we must also add Arrow test libs to STATIC_LINK_LIBS +# to avoid add_arrow_test from adding shared Arrow test libs +if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS ${ARROW_TEST_STATIC_LINK_LIBS}) +endif() + add_arrow_test(flight_sql_odbc_test SOURCES ${ARROW_FLIGHT_SQL_ODBC_TEST_SRCS} diff --git a/testing b/testing index 9cfebfef8982..9bf001b7d6ad 160000 --- a/testing +++ b/testing @@ -1 +1 @@ -Subproject commit 9cfebfef8982fb8612e0a2c59059752bd32321a3 +Subproject commit 9bf001b7d6ad318e222c06e760bccf480f2f550c From 3ca193464f88ba12c9e5aac6192231108af04de2 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 3 Apr 2026 18:31:25 -0700 Subject: [PATCH 11/39] Update CMakeLists.txt --- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 0b79e5a34abb..4155eac78880 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -40,7 +40,7 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS type_info_test.cc # Enable Protobuf cleanup after test execution # GH-46889: move protobuf_test_util to a more common location - #../../../../engine/substrait/protobuf_test_util.cc) + ../../../../engine/substrait/protobuf_test_util.cc) ) # ODBC tests must respect ARROW_FLIGHT_TEST_LINKAGE since they depend on Flight libraries From 298afcd27aa4381f170c02d8984c5b4cbea01af7 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 3 Apr 2026 18:32:25 -0700 Subject: [PATCH 12/39] Update CMakeLists.txt --- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 4155eac78880..dfa361da2b34 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -40,7 +40,7 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS type_info_test.cc # Enable Protobuf cleanup after test execution # GH-46889: move protobuf_test_util to a more common location - ../../../../engine/substrait/protobuf_test_util.cc) + ../../../../engine/substrait/protobuf_test_util.cc ) # ODBC tests must respect ARROW_FLIGHT_TEST_LINKAGE since they depend on Flight libraries From 4f663249c91a79c509e37667fcc2caee774d84ab Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 3 Apr 2026 18:44:43 -0700 Subject: [PATCH 13/39] Update cpp_extra.yml --- .github/workflows/cpp_extra.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/cpp_extra.yml b/.github/workflows/cpp_extra.yml index 18ffb16c90a3..2c7478f59c4c 100644 --- a/.github/workflows/cpp_extra.yml +++ b/.github/workflows/cpp_extra.yml @@ -609,6 +609,14 @@ jobs: VCPKG_DEFAULT_TRIPLET: amd64-windows-no-absl-sync-release VCPKG_OVERLAY_TRIPLETS: ${{ github.workspace }}/ci/vcpkg steps: + - name: Disable Crash Dialogs + run: | + reg add ` + "HKCU\SOFTWARE\Microsoft\Windows\Windows Error Reporting" ` + /v DontShowUI ` + /t REG_DWORD ` + /d 1 ` + /f - name: Checkout Arrow uses: actions/checkout@v6 with: From f96f04acdcc3709abc29048d5b36efb3b6912e90 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 3 Apr 2026 19:06:17 -0700 Subject: [PATCH 14/39] cleanup unneeded cmake --- cpp/src/arrow/compute/CMakeLists.txt | 12 ++++++------ cpp/src/arrow/compute/kernels/CMakeLists.txt | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index 7680b5286ffd..ba5359c966bf 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -36,9 +36,9 @@ if(ARROW_TESTING) # dependencies so that include paths are configured correctly target_link_libraries(arrow_compute_core_testing PUBLIC ${ARROW_GTEST_GMOCK}) # When using static test linkage, define ARROW_STATIC so test_util_internal.cc doesn't expect DLL imports - if(ARROW_TEST_LINKAGE STREQUAL "static") - target_compile_definitions(arrow_compute_core_testing PRIVATE ARROW_STATIC ARROW_COMPUTE_STATIC) - endif() + # if(ARROW_TEST_LINKAGE STREQUAL "static") + # target_compile_definitions(arrow_compute_core_testing PRIVATE ARROW_STATIC ARROW_COMPUTE_STATIC) + # endif() endif() # Define arrow_compute_testing object library for test files requiring extra kernels. @@ -51,9 +51,9 @@ if(ARROW_TESTING AND ARROW_COMPUTE) PUBLIC $ PUBLIC ${ARROW_GTEST_GTEST}) # When using static test linkage, define ARROW_STATIC so test_env.cc doesn't expect DLL imports - if(ARROW_TEST_LINKAGE STREQUAL "static") - target_compile_definitions(arrow_compute_testing PRIVATE ARROW_STATIC ARROW_COMPUTE_STATIC) - endif() + # if(ARROW_TEST_LINKAGE STREQUAL "static") + # target_compile_definitions(arrow_compute_testing PRIVATE ARROW_STATIC ARROW_COMPUTE_STATIC) + # endif() endif() set(ARROW_COMPUTE_TEST_PREFIX "arrow-compute") diff --git a/cpp/src/arrow/compute/kernels/CMakeLists.txt b/cpp/src/arrow/compute/kernels/CMakeLists.txt index ae1da2368a58..f7efca48ea3d 100644 --- a/cpp/src/arrow/compute/kernels/CMakeLists.txt +++ b/cpp/src/arrow/compute/kernels/CMakeLists.txt @@ -27,9 +27,9 @@ if(ARROW_TESTING) # dependencies so that include paths are configured correctly target_link_libraries(arrow_compute_kernels_testing PUBLIC ${ARROW_GTEST_GMOCK}) # When using static test linkage, define ARROW_STATIC so test_util_internal.cc doesn't expect DLL imports - if(ARROW_TEST_LINKAGE STREQUAL "static") - target_compile_definitions(arrow_compute_kernels_testing PRIVATE ARROW_STATIC) - endif() + # if(ARROW_TEST_LINKAGE STREQUAL "static") + # target_compile_definitions(arrow_compute_kernels_testing PRIVATE ARROW_STATIC) + # endif() endif() add_arrow_test(scalar_cast_test From bf511a275d3630dc3c21981e030f43ac9290538b Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 7 Apr 2026 14:19:24 -0700 Subject: [PATCH 15/39] remove comments --- cpp/src/arrow/compute/CMakeLists.txt | 8 -------- cpp/src/arrow/compute/kernels/CMakeLists.txt | 4 ---- 2 files changed, 12 deletions(-) diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index ba5359c966bf..e965b89ec055 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -35,10 +35,6 @@ if(ARROW_TESTING) # Even though this is still just an object library we still need to "link" our # dependencies so that include paths are configured correctly target_link_libraries(arrow_compute_core_testing PUBLIC ${ARROW_GTEST_GMOCK}) - # When using static test linkage, define ARROW_STATIC so test_util_internal.cc doesn't expect DLL imports - # if(ARROW_TEST_LINKAGE STREQUAL "static") - # target_compile_definitions(arrow_compute_core_testing PRIVATE ARROW_STATIC ARROW_COMPUTE_STATIC) - # endif() endif() # Define arrow_compute_testing object library for test files requiring extra kernels. @@ -50,10 +46,6 @@ if(ARROW_TESTING AND ARROW_COMPUTE) target_link_libraries(arrow_compute_testing PUBLIC $ PUBLIC ${ARROW_GTEST_GTEST}) - # When using static test linkage, define ARROW_STATIC so test_env.cc doesn't expect DLL imports - # if(ARROW_TEST_LINKAGE STREQUAL "static") - # target_compile_definitions(arrow_compute_testing PRIVATE ARROW_STATIC ARROW_COMPUTE_STATIC) - # endif() endif() set(ARROW_COMPUTE_TEST_PREFIX "arrow-compute") diff --git a/cpp/src/arrow/compute/kernels/CMakeLists.txt b/cpp/src/arrow/compute/kernels/CMakeLists.txt index f7efca48ea3d..15955b5ef883 100644 --- a/cpp/src/arrow/compute/kernels/CMakeLists.txt +++ b/cpp/src/arrow/compute/kernels/CMakeLists.txt @@ -26,10 +26,6 @@ if(ARROW_TESTING) # Even though this is still just an object library we still need to "link" our # dependencies so that include paths are configured correctly target_link_libraries(arrow_compute_kernels_testing PUBLIC ${ARROW_GTEST_GMOCK}) - # When using static test linkage, define ARROW_STATIC so test_util_internal.cc doesn't expect DLL imports - # if(ARROW_TEST_LINKAGE STREQUAL "static") - # target_compile_definitions(arrow_compute_kernels_testing PRIVATE ARROW_STATIC) - # endif() endif() add_arrow_test(scalar_cast_test From 62c1e850ea0cb4aad77f6cd9be02e82f74e6028f Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 7 Apr 2026 14:22:16 -0700 Subject: [PATCH 16/39] formatting --- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index dfa361da2b34..61c9847c60b3 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -40,8 +40,7 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS type_info_test.cc # Enable Protobuf cleanup after test execution # GH-46889: move protobuf_test_util to a more common location - ../../../../engine/substrait/protobuf_test_util.cc -) + ../../../../engine/substrait/protobuf_test_util.cc) # ODBC tests must respect ARROW_FLIGHT_TEST_LINKAGE since they depend on Flight libraries # which may be forced to static linkage due to static gRPC/Protobuf From 5249de05d65d7049d3cbb3e3bc83805846a080f8 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 7 Apr 2026 14:32:53 -0700 Subject: [PATCH 17/39] Simplify odbc_impl test linkage cmake directives --- .../flight/sql/odbc/odbc_impl/CMakeLists.txt | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index d8325354629f..99af079579a7 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -169,26 +169,15 @@ target_link_libraries(arrow_odbc_spi_impl_cli arrow_odbc_spi_impl) # Unit tests -# On Windows, dynamic linking ODBC is supported. -# On unix systems, static linking ODBC is supported, thus the library linking is static. -# Use STATIC_LINK_LIBS when Flight tests require static linkage to avoid mixing static/shared Arrow -if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - # Static linkage required - pass everything via STATIC_LINK_LIBS +# Respect ARROW_FLIGHT_TEST_LINKAGE, default to shared +if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl arrow_flight_testing_static ${ARROW_TEST_STATIC_LINK_LIBS}) set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") -elseif(WIN32) - # Shared linkage - use EXTRA_LINK_LIBS +else() set(ODBC_SPI_IMPL_TEST_STATIC_LIBS "") set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS arrow_odbc_spi_impl - arrow_flight_testing_shared) -else() - # Unix - always static - set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl - arrow_flight_testing_static - ${ARROW_TEST_STATIC_LINK_LIBS}) - set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") endif() add_arrow_test(odbc_spi_impl_test From 406d1e36439e3e4e017563aa1b94aa5ca8e83d08 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 7 Apr 2026 15:21:12 -0700 Subject: [PATCH 18/39] cleanup --- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 16 +------- .../flight/sql/odbc/odbc_impl/CMakeLists.txt | 2 +- .../flight/sql/odbc/tests/CMakeLists.txt | 37 +++++-------------- 3 files changed, 13 insertions(+), 42 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index b2f77cc94d90..d86412a4c989 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -59,12 +59,11 @@ if(WIN32) list(APPEND ARROW_FLIGHT_SQL_ODBC_SRCS odbc.def install/versioninfo.rc) endif() -# On Windows, dynmaic build for ODBC is supported. -# On unix systems, static build for ODBC is supported, all libraries are linked statically on unix. -set(ARROW_FLIGHT_SQL_ODBC_DEPENDENCIES "") +# Initialize install interface libs (only set in Windows static build) set(ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS "") + if(WIN32 AND ARROW_BUILD_STATIC) # Static Arrow deps on Windows — self-contained ODBC DLL set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_static arrow_odbc_spi_impl) @@ -74,16 +73,7 @@ if(WIN32 AND ARROW_BUILD_STATIC) list(APPEND ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS ArrowFlight::arrow_flight_sql_static) list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS ODBC::ODBC ${ODBCINST}) -elseif(WIN32) - # Dynamic Arrow deps on Windows (current behavior) - set(ARROW_FLIGHT_SQL_ODBC_DEPENDENCIES arrow_flight_sql) - set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_odbc_spi_impl) - set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) - list(APPEND ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS - ArrowFlight::arrow_flight_sql_static) - list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS ODBC::ODBC ${ODBCINST}) else() - # Unix set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_odbc_spi_impl) set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS ODBC::ODBC ${ODBCINST}) endif() @@ -99,8 +89,6 @@ add_arrow_lib(arrow_flight_sql_odbc ${ARROW_FLIGHT_SQL_ODBC_SRCS} DEFINITIONS UNICODE - DEPENDENCIES - ${ARROW_FLIGHT_SQL_ODBC_DEPENDENCIES} SHARED_LINK_FLAGS ${ARROW_VERSION_SCRIPT_FLAGS} # Defined in cpp/arrow/CMakeLists.txt SHARED_LINK_LIBS diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index 99af079579a7..43a5879d7542 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -177,7 +177,7 @@ if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") else() set(ODBC_SPI_IMPL_TEST_STATIC_LIBS "") - set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS arrow_odbc_spi_impl + set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS arrow_odbc_spi_impl) endif() add_arrow_test(odbc_spi_impl_test diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 61c9847c60b3..9abd8587e51a 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -42,8 +42,6 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS # GH-46889: move protobuf_test_util to a more common location ../../../../engine/substrait/protobuf_test_util.cc) -# ODBC tests must respect ARROW_FLIGHT_TEST_LINKAGE since they depend on Flight libraries -# which may be forced to static linkage due to static gRPC/Protobuf if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_static ${ARROW_TEST_STATIC_LINK_LIBS}) @@ -59,37 +57,22 @@ endif() # On macOS, link `ODBCINST` first to ensure iodbc take precedence over unixodbc set(ARROW_FLIGHT_SQL_ODBC_TEST_LIBS ${ODBCINST} ${ODBC_LIBRARIES} ${SQLite3_LIBRARIES}) -# On Windows, dynamic linking ODBC is supported, tests link libraries dynamically. -# On unix systems, static linking ODBC is supported, thus tests link libraries statically. -set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") -set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") -if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - # Static Windows tests +# Respect ARROW_FLIGHT_TEST_LINKAGE, default to shared +if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) -elseif(WIN32) - # Dynamic Windows tests (current behavior) + # When Flight tests require static linkage, we must also add Arrow test libs to STATIC_LINK_LIBS + # to avoid add_arrow_test from adding shared Arrow test libs + if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS ${ARROW_TEST_STATIC_LINK_LIBS}) + endif() +else() list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS}) -else() - # Unix - list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS - ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) - - if(NOT APPLE) - # Links static dependencies on Linux to support ARROW_TEST_LINKAGE=static - list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS arrow_odbc_spi_impl - ${ARROW_PROTOBUF_LIBPROTOBUF}) - endif() - -endif() - -# When Flight tests require static linkage, we must also add Arrow test libs to STATIC_LINK_LIBS -# to avoid add_arrow_test from adding shared Arrow test libs -if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS ${ARROW_TEST_STATIC_LINK_LIBS}) + set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") endif() add_arrow_test(flight_sql_odbc_test From e3f1a41fce994b342e2f0495a2c6f58461ce8d26 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 7 Apr 2026 15:44:49 -0700 Subject: [PATCH 19/39] Update CMakeLists.txt --- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 9abd8587e51a..26c97a9d4d15 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -64,11 +64,6 @@ if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) - # When Flight tests require static linkage, we must also add Arrow test libs to STATIC_LINK_LIBS - # to avoid add_arrow_test from adding shared Arrow test libs - if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS ${ARROW_TEST_STATIC_LINK_LIBS}) - endif() else() list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS}) From 12485870806df4aae8be08466ead9f24adfdbce3 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 10 Apr 2026 15:37:26 -0700 Subject: [PATCH 20/39] format --- .../arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt | 13 +++++-------- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 3 ++- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index 43a5879d7542..85548acae1f9 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -135,14 +135,12 @@ if(WIN32) target_include_directories(arrow_odbc_spi_impl PUBLIC ${ODBC_INCLUDE_DIR}) if(ARROW_BUILD_STATIC) target_link_libraries(arrow_odbc_spi_impl - PUBLIC arrow_flight_sql_static - arrow_compute_static - Boost::locale - ${ODBCINST}) + PUBLIC arrow_flight_sql_static arrow_compute_static + Boost::locale ${ODBCINST}) else() target_link_libraries(arrow_odbc_spi_impl - PUBLIC arrow_flight_sql_shared arrow_compute_shared Boost::locale - ${ODBCINST}) + PUBLIC arrow_flight_sql_shared arrow_compute_shared + Boost::locale ${ODBCINST}) endif() else() # Unix @@ -171,8 +169,7 @@ target_link_libraries(arrow_odbc_spi_impl_cli arrow_odbc_spi_impl) # Respect ARROW_FLIGHT_TEST_LINKAGE, default to shared if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl - arrow_flight_testing_static + set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl arrow_flight_testing_static ${ARROW_TEST_STATIC_LINK_LIBS}) set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") else() diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 26c97a9d4d15..39a29bef8301 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -60,7 +60,8 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_LIBS ${ODBCINST} ${ODBC_LIBRARIES} ${SQLite3_LIBR # Respect ARROW_FLIGHT_TEST_LINKAGE, default to shared if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") - list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS + list(APPEND + ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) From 943f5878c829fcd0f12d668be373da13c84b15e0 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 10 Apr 2026 16:40:37 -0700 Subject: [PATCH 21/39] try to fix macos test crash --- .../flight/sql/odbc/odbc_impl/CMakeLists.txt | 20 ++++++++++---- .../flight/sql/odbc/tests/CMakeLists.txt | 26 ++++++++++++++----- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index 85548acae1f9..d2e069b2a6c0 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -167,14 +167,24 @@ target_link_libraries(arrow_odbc_spi_impl_cli arrow_odbc_spi_impl) # Unit tests -# Respect ARROW_FLIGHT_TEST_LINKAGE, default to shared -if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl arrow_flight_testing_static +# On Windows, dynamic linking ODBC is supported. +# On unix systems, static linking ODBC is supported, thus the library linking is static. +# Use STATIC_LINK_LIBS when Flight tests require static linkage to avoid mixing static/shared Arrow +if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl + arrow_flight_testing_static ${ARROW_TEST_STATIC_LINK_LIBS}) set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") -else() +elseif(WIN32) set(ODBC_SPI_IMPL_TEST_STATIC_LIBS "") - set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS arrow_odbc_spi_impl) + set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS arrow_odbc_spi_impl + arrow_flight_testing_shared) +else() + # Unix - always static + set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl + arrow_flight_testing_static + ${ARROW_TEST_STATIC_LINK_LIBS}) + set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") endif() add_arrow_test(odbc_spi_impl_test diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 39a29bef8301..db56fb2dd3d8 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -57,18 +57,30 @@ endif() # On macOS, link `ODBCINST` first to ensure iodbc take precedence over unixodbc set(ARROW_FLIGHT_SQL_ODBC_TEST_LIBS ${ODBCINST} ${ODBC_LIBRARIES} ${SQLite3_LIBRARIES}) -# Respect ARROW_FLIGHT_TEST_LINKAGE, default to shared -if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") - list(APPEND - ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS +# On Windows, dynamic linking ODBC is supported, tests link libraries dynamically. +# On unix systems, static linking ODBC is supported, thus tests link libraries statically. +set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") +set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") +if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + # Static Windows tests + list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) -else() +elseif(WIN32) + # Dynamic Windows tests (current behavior) list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS}) - set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") +else() + # Unix + list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS + ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) +endif() + +# When Flight tests require static linkage, we must also add Arrow test libs to STATIC_LINK_LIBS +# to avoid add_arrow_test from adding shared Arrow test libs +if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS ${ARROW_TEST_STATIC_LINK_LIBS}) endif() add_arrow_test(flight_sql_odbc_test From 193817594c4dac34aebc9eb631510794a4744bcc Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 10 Apr 2026 16:59:20 -0700 Subject: [PATCH 22/39] format --- cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt | 9 +++------ cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 3 ++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index d2e069b2a6c0..a88867e01d72 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -171,18 +171,15 @@ target_link_libraries(arrow_odbc_spi_impl_cli arrow_odbc_spi_impl) # On unix systems, static linking ODBC is supported, thus the library linking is static. # Use STATIC_LINK_LIBS when Flight tests require static linkage to avoid mixing static/shared Arrow if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl - arrow_flight_testing_static + set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl arrow_flight_testing_static ${ARROW_TEST_STATIC_LINK_LIBS}) set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") elseif(WIN32) set(ODBC_SPI_IMPL_TEST_STATIC_LIBS "") - set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS arrow_odbc_spi_impl - arrow_flight_testing_shared) + set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS arrow_odbc_spi_impl arrow_flight_testing_shared) else() # Unix - always static - set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl - arrow_flight_testing_static + set(ODBC_SPI_IMPL_TEST_STATIC_LIBS arrow_odbc_spi_impl arrow_flight_testing_static ${ARROW_TEST_STATIC_LINK_LIBS}) set(ODBC_SPI_IMPL_TEST_EXTRA_LIBS "") endif() diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index db56fb2dd3d8..a93794a69c42 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -63,7 +63,8 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") # Static Windows tests - list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS + list(APPEND + ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) From 96478b8b3eed53bd9d1dc86615fca7194581e415 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 10 Apr 2026 17:02:44 -0700 Subject: [PATCH 23/39] add missing header --- cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index a88867e01d72..70747fb08259 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -150,6 +150,7 @@ else() arrow_compute_static Boost::locale Boost::headers + Boost::variant RapidJSON) if(NOT APPLE) From 2309b53ce9428056e3c910507ab56f1e0a8fadda Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 10 Apr 2026 17:13:54 -0700 Subject: [PATCH 24/39] testing --- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 27 +++++++++++++------ .../flight/sql/odbc/odbc_impl/CMakeLists.txt | 1 - .../flight/sql/odbc/tests/CMakeLists.txt | 21 ++++++--------- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index d86412a4c989..345d7ef86f95 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -64,16 +64,27 @@ set(ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS "") -if(WIN32 AND ARROW_BUILD_STATIC) - # Static Arrow deps on Windows — self-contained ODBC DLL - set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_static arrow_odbc_spi_impl) - set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) - list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS - ArrowFlight::arrow_flight_sql_static) - list(APPEND ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS - ArrowFlight::arrow_flight_sql_static) +if(WIN32) + if(ARROW_BUILD_STATIC) + # Static Arrow deps on Windows — self-contained ODBC DLL + set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_static arrow_odbc_spi_impl) + set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) + list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS + ArrowFlight::arrow_flight_sql_static) + list(APPEND ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS + ArrowFlight::arrow_flight_sql_static) + else() + set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_shared arrow_odbc_spi_impl) + set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) + list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS + ArrowFlight::arrow_flight_sql_shared) + list(APPEND ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS + ArrowFlight::arrow_flight_sql_static) + endif() list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS ODBC::ODBC ${ODBCINST}) else() + # Unix/macOS: driver dynamically links arrow_flight_sql so the driver and test + # binary share the same grpc/arrow_flight runtime. set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_odbc_spi_impl) set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS ODBC::ODBC ${ODBCINST}) endif() diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index 70747fb08259..a88867e01d72 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -150,7 +150,6 @@ else() arrow_compute_static Boost::locale Boost::headers - Boost::variant RapidJSON) if(NOT APPLE) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index a93794a69c42..bd522c5089ab 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -42,7 +42,7 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS # GH-46889: move protobuf_test_util to a more common location ../../../../engine/substrait/protobuf_test_util.cc) -if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") +if(ARROW_TEST_LINKAGE STREQUAL "static") set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_static ${ARROW_TEST_STATIC_LINK_LIBS}) else() @@ -58,32 +58,27 @@ endif() set(ARROW_FLIGHT_SQL_ODBC_TEST_LIBS ${ODBCINST} ${ODBC_LIBRARIES} ${SQLite3_LIBRARIES}) # On Windows, dynamic linking ODBC is supported, tests link libraries dynamically. -# On unix systems, static linking ODBC is supported, thus tests link libraries statically. +# On Windows with static Arrow, use STATIC_LINK_LIBS to avoid mixing static/shared. +# On Unix/macOS, tests link libraries statically. set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") # Static Windows tests - list(APPEND - ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS + list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} - ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) + ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS} + ${ARROW_TEST_STATIC_LINK_LIBS}) elseif(WIN32) - # Dynamic Windows tests (current behavior) + # Dynamic Windows tests list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS}) else() - # Unix + # Unix/macOS list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS}) endif() -# When Flight tests require static linkage, we must also add Arrow test libs to STATIC_LINK_LIBS -# to avoid add_arrow_test from adding shared Arrow test libs -if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") - list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS ${ARROW_TEST_STATIC_LINK_LIBS}) -endif() - add_arrow_test(flight_sql_odbc_test SOURCES ${ARROW_FLIGHT_SQL_ODBC_TEST_SRCS} From 1898d6ef364c187a41f1bebb0fc7dd1787f1a2e5 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Fri, 10 Apr 2026 22:31:14 -0700 Subject: [PATCH 25/39] format --- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 6 ++++-- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index 345d7ef86f95..5aaa7d2ed90b 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -67,14 +67,16 @@ set(ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS "") if(WIN32) if(ARROW_BUILD_STATIC) # Static Arrow deps on Windows — self-contained ODBC DLL - set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_static arrow_odbc_spi_impl) + set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_static + arrow_odbc_spi_impl) set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS ArrowFlight::arrow_flight_sql_static) list(APPEND ARROW_FLIGHT_SQL_ODBC_STATIC_INSTALL_INTERFACE_LIBS ArrowFlight::arrow_flight_sql_static) else() - set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_shared arrow_odbc_spi_impl) + set(ARROW_FLIGHT_SQL_ODBC_SHARED_LINK_LIBS arrow_flight_sql_shared + arrow_odbc_spi_impl) set(ARROW_FLIGHT_SQL_ODBC_STATIC_LINK_LIBS arrow_flight_sql_static) list(APPEND ARROW_FLIGHT_SQL_ODBC_SHARED_INSTALL_INTERFACE_LIBS ArrowFlight::arrow_flight_sql_shared) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index bd522c5089ab..b50be948a777 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -64,7 +64,8 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_EXTRA_LINK_LIBS "") set(ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS "") if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") # Static Windows tests - list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS + list(APPEND + ARROW_FLIGHT_SQL_ODBC_TEST_STATIC_LINK_LIBS arrow_odbc_spi_impl ${ARROW_FLIGHT_SQL_ODBC_TEST_LIBS} ${ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS} From 5b479f38d4752d23f80023e01640d22e7ed9d3e3 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 21 Apr 2026 17:03:26 -0700 Subject: [PATCH 26/39] Fix rebase mistake --- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index b50be948a777..7c17864aa629 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -48,10 +48,6 @@ if(ARROW_TEST_LINKAGE STREQUAL "static") else() set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_shared ${ARROW_TEST_SHARED_LINK_LIBS}) -else() - # GH-49651 Link ODBC tests statically on Linux to fix segfault - set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_static - ${ARROW_TEST_STATIC_LINK_LIBS}) endif() # On macOS, link `ODBCINST` first to ensure iodbc take precedence over unixodbc From acb06e818987d8a227b09408de1224d50415a400 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 21 Apr 2026 18:34:20 -0700 Subject: [PATCH 27/39] add workaround --- cpp/src/arrow/flight/CMakeLists.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index 8974c9581f7c..e7e8c911610e 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -371,6 +371,23 @@ if(ARROW_BUILD_BENCHMARKS) endif(ARROW_BUILD_BENCHMARKS) +# Workaround for issue found in GH-49585. When building in Debug mode only, the +# linker complains about duplicate absl symbols. This seems to have started +# after GH-48964. Any new Flight tests probably need this. +if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + set(FLIGHT_TEST_EXES + arrow-flight-internals-test + arrow-flight-test + flight-test-server + arrow-flight-perf-server + arrow-flight-benchmark) + foreach(test_exe ${FLIGHT_TEST_EXES}) + if(TARGET ${test_exe}) + target_link_options(${test_exe} PRIVATE "/FORCE:MULTIPLE") + endif() + endforeach() +endif() + if(ARROW_FLIGHT_SQL) add_subdirectory(sql) From fe092b0dd9c24166883426868df12fafe201583f Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 05:22:38 +0000 Subject: [PATCH 28/39] update comment --- cpp/src/arrow/flight/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index e7e8c911610e..4505512d860e 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -372,8 +372,9 @@ if(ARROW_BUILD_BENCHMARKS) endif(ARROW_BUILD_BENCHMARKS) # Workaround for issue found in GH-49585. When building in Debug mode only, the -# linker complains about duplicate absl symbols. This seems to have started -# after GH-48964. Any new Flight tests probably need this. +# linker complains about duplicate absl symbols. It's not clear when this +# started but it may be related to the mixed dynamic and static linkage used in +# GH-49585. Flight tests probably need this. if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(FLIGHT_TEST_EXES arrow-flight-internals-test From 12aa833ab0b359046dfb16acccaae4804aa758ee Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 14:19:50 -0700 Subject: [PATCH 29/39] fix rebase issue with linking --- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 7c17864aa629..c815bc33123e 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -42,12 +42,13 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS # GH-46889: move protobuf_test_util to a more common location ../../../../engine/substrait/protobuf_test_util.cc) -if(ARROW_TEST_LINKAGE STREQUAL "static") - set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_static - ${ARROW_TEST_STATIC_LINK_LIBS}) -else() +# GH-49651 Link ODBC tests statically on Linux and dynamically on macOS. +if(APPLE OR (WIN32 AND ARROW_TEST_LINKAGE STREQUAL "shared")) set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_shared ${ARROW_TEST_SHARED_LINK_LIBS}) +else() + set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_static + ${ARROW_TEST_STATIC_LINK_LIBS}) endif() # On macOS, link `ODBCINST` first to ensure iodbc take precedence over unixodbc From 27ea5b4e6a5e4e0b2b8e407e79746a43a92c67ce Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 14:21:38 -0700 Subject: [PATCH 30/39] restore comment --- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index c815bc33123e..39d6afe483fd 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -47,6 +47,7 @@ if(APPLE OR (WIN32 AND ARROW_TEST_LINKAGE STREQUAL "shared")) set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_shared ${ARROW_TEST_SHARED_LINK_LIBS}) else() + # GH-49651 Link ODBC tests statically on Linux to fix segfault set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_static ${ARROW_TEST_STATIC_LINK_LIBS}) endif() From 81b6b4c69435fe87049d9f8bcfafd9a1a52e98fa Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 14:29:34 -0700 Subject: [PATCH 31/39] update comment --- cpp/src/arrow/flight/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index 4505512d860e..89331d4b31e7 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -374,7 +374,7 @@ endif(ARROW_BUILD_BENCHMARKS) # Workaround for issue found in GH-49585. When building in Debug mode only, the # linker complains about duplicate absl symbols. It's not clear when this # started but it may be related to the mixed dynamic and static linkage used in -# GH-49585. Flight tests probably need this. +# GH-49585 or to switching from /MT to /MD linkage. if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(FLIGHT_TEST_EXES arrow-flight-internals-test From 9ecc3fce5712f2b12d7a14eef5d88f29e8e699ee Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 16:28:03 -0700 Subject: [PATCH 32/39] fix more targets --- cpp/src/arrow/flight/CMakeLists.txt | 13 +++++++++---- cpp/src/arrow/flight/sql/CMakeLists.txt | 6 ++++++ cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 6 ++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index 89331d4b31e7..4c8e75a67b1f 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -245,6 +245,12 @@ if(ARROW_BUILD_STATIC AND WIN32) target_compile_definitions(arrow_flight_static PUBLIC ARROW_FLIGHT_STATIC) endif() +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") + foreach(LIB_TARGET ${ARROW_FLIGHT_LIBRARIES}) + target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") + endforeach() +endif() + foreach(LIB_TARGET ${ARROW_FLIGHT_LIBRARIES}) target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_FLIGHT_EXPORTING) endforeach() @@ -372,10 +378,9 @@ if(ARROW_BUILD_BENCHMARKS) endif(ARROW_BUILD_BENCHMARKS) # Workaround for issue found in GH-49585. When building in Debug mode only, the -# linker complains about duplicate absl symbols. It's not clear when this -# started but it may be related to the mixed dynamic and static linkage used in -# GH-49585 or to switching from /MT to /MD linkage. -if(WIN32 AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") +# linker complains about duplicate absl symbols. This seems to have started +# after GH-48964. Any new Flight tests probably need this. +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(FLIGHT_TEST_EXES arrow-flight-internals-test arrow-flight-test diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/CMakeLists.txt index 2299bdfe0a3b..c22afdbc25ca 100644 --- a/cpp/src/arrow/flight/sql/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/CMakeLists.txt @@ -93,6 +93,12 @@ if(ARROW_BUILD_STATIC AND WIN32) target_compile_definitions(arrow_flight_sql_static PUBLIC ARROW_FLIGHT_SQL_STATIC) endif() +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") + foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_LIBRARIES}) + target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") + endforeach() +endif() + if(MSVC) # Suppress warnings caused by Protobuf (casts) set_source_files_properties(protocol_internal.cc PROPERTIES COMPILE_OPTIONS "/wd4267") diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index 5aaa7d2ed90b..e407a391ac5f 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -115,6 +115,12 @@ add_arrow_lib(arrow_flight_sql_odbc SHARED_PRIVATE_LINK_LIBS ${ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS}) +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") + foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_ODBC_LIBRARIES}) + target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") + endforeach() +endif() + foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_ODBC_LIBRARIES}) target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_FLIGHT_SQL_ODBC_EXPORTING) endforeach() From 009c48bc4a57e2d0a63ad1f1e5d12ce01f89b174 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 21:17:20 -0700 Subject: [PATCH 33/39] more fixes --- cpp/src/arrow/flight/CMakeLists.txt | 4 ++-- cpp/src/arrow/flight/sql/CMakeLists.txt | 11 +++++++++++ .../arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt | 9 +++++++++ cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 6 ++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index 4c8e75a67b1f..0824dd725c05 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -123,9 +123,9 @@ function(arrow_set_generated_proto_files_properties) set(GENERATED_FILES ${ARGN}) set_source_files_properties(${GENERATED_FILES} PROPERTIES GENERATED TRUE) if(MSVC) - # Suppress missing dll-interface warning + # Suppress missing dll-interface warnings set_source_files_properties(${GENERATED_FILES} - PROPERTIES COMPILE_OPTIONS "/wd4251" + PROPERTIES COMPILE_OPTIONS "/wd4251;/wd4275" SKIP_UNITY_BUILD_INCLUSION TRUE) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Disable -Wmissing-declarations diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/CMakeLists.txt index c22afdbc25ca..5e7394ff7c60 100644 --- a/cpp/src/arrow/flight/sql/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/CMakeLists.txt @@ -105,6 +105,9 @@ if(MSVC) endif() foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_LIBRARIES}) target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_FLIGHT_SQL_EXPORTING) + if(MSVC) + target_compile_options(${LIB_TARGET} PRIVATE "/wd4275") + endif() endforeach() if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static" AND ARROW_BUILD_STATIC) @@ -183,6 +186,14 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_EXAMPLES) ARROW_FLIGHT_SQL_STATIC) endforeach() endif() + + if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + foreach(TEST_TARGET arrow-flight-sql-test flight-sql-test-server flight-sql-test-app) + if(TARGET ${TEST_TARGET}) + target_link_options(${TEST_TARGET} PRIVATE "/FORCE:MULTIPLE") + endif() + endforeach() + endif() endif() if(ARROW_FLIGHT_SQL_ODBC) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index a88867e01d72..d2b8f223de7d 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -204,3 +204,12 @@ add_arrow_test(odbc_spi_impl_test ${ODBC_SPI_IMPL_TEST_EXTRA_LIBS} STATIC_LINK_LIBS ${ODBC_SPI_IMPL_TEST_STATIC_LIBS}) + +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + if(TARGET arrow_odbc_spi_impl_cli) + target_link_options(arrow_odbc_spi_impl_cli PRIVATE "/FORCE:MULTIPLE") + endif() + if(TARGET arrow-odbc-spi-impl-test) + target_link_options(arrow-odbc-spi-impl-test PRIVATE "/FORCE:MULTIPLE") + endif() +endif() diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 39d6afe483fd..665a66773c1c 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -94,3 +94,9 @@ target_link_libraries(arrow-flight-sql-odbc-test PRIVATE ODBC::ODBC) # Disable unity build due to sqlite_sql_info.cc conflict with sql.h and sqlext.h headers. set_target_properties(arrow-flight-sql-odbc-test PROPERTIES UNITY_BUILD OFF) + +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + if(TARGET arrow-flight-sql-odbc-test) + target_link_options(arrow-flight-sql-odbc-test PRIVATE "/FORCE:MULTIPLE") + endif() +endif() From 94b4ba1542014533205ad0eac5e05a011143aa9f Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 21:12:15 -0700 Subject: [PATCH 34/39] update comments --- cpp/src/arrow/flight/CMakeLists.txt | 25 +++++++++++++++++--- cpp/src/arrow/flight/sql/CMakeLists.txt | 2 ++ cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 2 ++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index 0824dd725c05..c9a8be409682 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -245,6 +245,7 @@ if(ARROW_BUILD_STATIC AND WIN32) target_compile_definitions(arrow_flight_static PUBLIC ARROW_FLIGHT_STATIC) endif() +# NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" below. if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") foreach(LIB_TARGET ${ARROW_FLIGHT_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") @@ -377,9 +378,27 @@ if(ARROW_BUILD_BENCHMARKS) endif(ARROW_BUILD_BENCHMARKS) -# Workaround for issue found in GH-49585. When building in Debug mode only, the -# linker complains about duplicate absl symbols. This seems to have started -# after GH-48964. Any new Flight tests probably need this. +# NOTE-49585: Workaround for issue found in GH-49585. When building Flight +# targets with the combination of: +# +# - WIN32 +# - Debug +# - /MD linkage +# +# You get linker errors like this: +# +# absl_synchronization.lib(mutex.cc.obj) : error LNK2005: "private: void __cdecl absl::lts_20250814::Mutex::Dtor(void)" (?Dtor +# @Mutex@lts_20250814@absl@@AEAAXXZ) already defined in arrow_flight_static.lib(grpc_client.obj) [C:\path\to\arrow\cpp\static-debug-build\src\arrow\flight\sql\arrow-flight-sql-test.vcxproj] +# C:\path\to\arrow\cpp\static-debug-build\debug\Debug\arrow-flight-sql-test.exe : +# fatal error LNK1169: one or more multiply defined symbols found [C:\path\to\arrow\cpp\static-debug-build\src\arrow\flight\sql\arrow-flight-sql-test.vcxproj] +# Building Custom Rule C:/path/to/arrow/cpp/src/arrow/flight/CMakeLists.txt +# test_server.cc +# absl_synchronization.lib(mutex.cc.obj) : error LNK2005: "private: void __cdecl absl::lts_20250814::Mutex::Dtor(void)" (?Dtor +# @Mutex@lts_20250814@absl@@AEAAXXZ) already defined in arrow_flight_static.lib(protocol_grpc_internal.obj) [C:\path\to\arrow\cpp\static-debug-build\src\arrow\flight\flight-test-server.vcxproj] +# C:\path\to\arrow\cpp\static-debug-build\debug\Debug\flight-test-server.exe : fatal error +# LNK1169: one or more multiply defined symbols found [C:\path\to\arrow\cpp\static-debug-build\src\arrow\flight\flight-test-server.vcxproj] +# +# If you build in Release mode w/ /MD linkage you don't get these errors. if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(FLIGHT_TEST_EXES arrow-flight-internals-test diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/CMakeLists.txt index 5e7394ff7c60..eb103775919f 100644 --- a/cpp/src/arrow/flight/sql/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/CMakeLists.txt @@ -93,6 +93,8 @@ if(ARROW_BUILD_STATIC AND WIN32) target_compile_definitions(arrow_flight_sql_static PUBLIC ARROW_FLIGHT_SQL_STATIC) endif() +# NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in +# ../CMakeLists.txt. if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index e407a391ac5f..fe1b9a148e70 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -115,6 +115,8 @@ add_arrow_lib(arrow_flight_sql_odbc SHARED_PRIVATE_LINK_LIBS ${ARROW_FLIGHT_SQL_ODBC_SHARED_PRIVATE_LINK_LIBS}) +# NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in +# ../../CMakeLists.txt. if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_ODBC_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") From a2eb217d1c79ab616271adb4513ea93f94cdc436 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 21:29:27 -0700 Subject: [PATCH 35/39] update comments --- cpp/src/arrow/flight/CMakeLists.txt | 2 +- cpp/src/arrow/flight/sql/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index c9a8be409682..b40171634b80 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -123,7 +123,7 @@ function(arrow_set_generated_proto_files_properties) set(GENERATED_FILES ${ARGN}) set_source_files_properties(${GENERATED_FILES} PROPERTIES GENERATED TRUE) if(MSVC) - # Suppress missing dll-interface warnings + # Suppress warnings caused by Protobuf (dll-interface) set_source_files_properties(${GENERATED_FILES} PROPERTIES COMPILE_OPTIONS "/wd4251;/wd4275" SKIP_UNITY_BUILD_INCLUSION TRUE) diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/CMakeLists.txt index eb103775919f..a42e2c862f23 100644 --- a/cpp/src/arrow/flight/sql/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/CMakeLists.txt @@ -108,6 +108,7 @@ endif() foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_LIBRARIES}) target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_FLIGHT_SQL_EXPORTING) if(MSVC) + # Suppress warnings caused by Protobuf (dll-interface) target_compile_options(${LIB_TARGET} PRIVATE "/wd4275") endif() endforeach() From 3be869743dc51704603f4fe76bb26a53c93aabe9 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 21:19:38 -0700 Subject: [PATCH 36/39] comments --- cpp/src/arrow/flight/sql/CMakeLists.txt | 2 ++ cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/CMakeLists.txt index a42e2c862f23..cb21b233b1dc 100644 --- a/cpp/src/arrow/flight/sql/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/CMakeLists.txt @@ -190,6 +190,8 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_EXAMPLES) endforeach() endif() + # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in + # ../CMakeLists.txt. if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") foreach(TEST_TARGET arrow-flight-sql-test flight-sql-test-server flight-sql-test-app) if(TARGET ${TEST_TARGET}) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index d2b8f223de7d..441ed567f704 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -205,6 +205,8 @@ add_arrow_test(odbc_spi_impl_test STATIC_LINK_LIBS ${ODBC_SPI_IMPL_TEST_STATIC_LIBS}) +# NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in +# ../../../CMakeLists.txt. if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") if(TARGET arrow_odbc_spi_impl_cli) target_link_options(arrow_odbc_spi_impl_cli PRIVATE "/FORCE:MULTIPLE") From 38d0b1818799f39c42b63d38b4e149eb45fe6f0c Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 22 Apr 2026 21:37:37 -0700 Subject: [PATCH 37/39] guard overrides better --- cpp/src/arrow/flight/CMakeLists.txt | 2 +- cpp/src/arrow/flight/sql/CMakeLists.txt | 2 +- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index b40171634b80..f684517f0dbf 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -246,7 +246,7 @@ if(ARROW_BUILD_STATIC AND WIN32) endif() # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" below. -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") foreach(LIB_TARGET ${ARROW_FLIGHT_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") endforeach() diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/CMakeLists.txt index cb21b233b1dc..b9fb0bb0862b 100644 --- a/cpp/src/arrow/flight/sql/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/CMakeLists.txt @@ -95,7 +95,7 @@ endif() # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in # ../CMakeLists.txt. -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") endforeach() diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index fe1b9a148e70..d3c446525b99 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -117,7 +117,7 @@ add_arrow_lib(arrow_flight_sql_odbc # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in # ../../CMakeLists.txt. -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_ODBC_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") endforeach() From 710ed576e8fc2637bc976c99f7b371416a41a00c Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Thu, 23 Apr 2026 04:55:27 +0000 Subject: [PATCH 38/39] cmake-format --- .github/workflows/cpp_extra.yml | 8 -------- .github/workflows/package_odbc.yml | 11 +++++++---- cpp/src/arrow/flight/CMakeLists.txt | 8 ++++++-- cpp/src/arrow/flight/sql/CMakeLists.txt | 8 ++++++-- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 4 +++- .../arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt | 4 +++- cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt | 4 +++- testing | 2 +- 8 files changed, 29 insertions(+), 20 deletions(-) diff --git a/.github/workflows/cpp_extra.yml b/.github/workflows/cpp_extra.yml index 2c7478f59c4c..18ffb16c90a3 100644 --- a/.github/workflows/cpp_extra.yml +++ b/.github/workflows/cpp_extra.yml @@ -609,14 +609,6 @@ jobs: VCPKG_DEFAULT_TRIPLET: amd64-windows-no-absl-sync-release VCPKG_OVERLAY_TRIPLETS: ${{ github.workspace }}/ci/vcpkg steps: - - name: Disable Crash Dialogs - run: | - reg add ` - "HKCU\SOFTWARE\Microsoft\Windows\Windows Error Reporting" ` - /v DontShowUI ` - /t REG_DWORD ` - /d 1 ` - /f - name: Checkout Arrow uses: actions/checkout@v6 with: diff --git a/.github/workflows/package_odbc.yml b/.github/workflows/package_odbc.yml index a735f25667b4..87872f255f7d 100644 --- a/.github/workflows/package_odbc.yml +++ b/.github/workflows/package_odbc.yml @@ -50,21 +50,24 @@ jobs: permissions: packages: write env: &odbc_msvc_env - ARROW_BUILD_SHARED: ON - ARROW_BUILD_STATIC: OFF + ARROW_BUILD_SHARED: OFF + ARROW_BUILD_STATIC: ON ARROW_BUILD_TESTS: OFF ARROW_BUILD_TYPE: release - # Turn Arrow CSV off to disable `find_package(Arrow)` check on MSVC CI. + # Turn Arrow CSV off to disable `find_package(Arrow)` check on MSVC CI. # GH-49050 TODO: enable `find_package(Arrow)` check on MSVC CI. ARROW_CSV: OFF ARROW_DEPENDENCY_SOURCE: VCPKG + ARROW_DEPENDENCY_USE_SHARED: OFF ARROW_FLIGHT_SQL_ODBC: ON ARROW_FLIGHT_SQL_ODBC_INSTALLER: ON ARROW_HOME: /usr + ARROW_MIMALLOC: OFF + ARROW_USE_STATIC_CRT: OFF CMAKE_GENERATOR: Ninja CMAKE_INSTALL_PREFIX: /usr VCPKG_BINARY_SOURCES: 'clear;nugettimeout,600;nuget,GitHub,readwrite' - VCPKG_DEFAULT_TRIPLET: x64-windows + VCPKG_DEFAULT_TRIPLET: x64-windows-static-md steps: - name: Checkout Arrow uses: actions/checkout@v6 diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt index f684517f0dbf..bac9090e61a4 100644 --- a/cpp/src/arrow/flight/CMakeLists.txt +++ b/cpp/src/arrow/flight/CMakeLists.txt @@ -246,7 +246,9 @@ if(ARROW_BUILD_STATIC AND WIN32) endif() # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" below. -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") +if(WIN32 + AND CMAKE_BUILD_TYPE STREQUAL "Debug" + AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") foreach(LIB_TARGET ${ARROW_FLIGHT_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") endforeach() @@ -399,7 +401,9 @@ endif(ARROW_BUILD_BENCHMARKS) # LNK1169: one or more multiply defined symbols found [C:\path\to\arrow\cpp\static-debug-build\src\arrow\flight\flight-test-server.vcxproj] # # If you build in Release mode w/ /MD linkage you don't get these errors. -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") +if(WIN32 + AND CMAKE_BUILD_TYPE STREQUAL "Debug" + AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") set(FLIGHT_TEST_EXES arrow-flight-internals-test arrow-flight-test diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/CMakeLists.txt index b9fb0bb0862b..6d60481bbfce 100644 --- a/cpp/src/arrow/flight/sql/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/CMakeLists.txt @@ -95,7 +95,9 @@ endif() # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in # ../CMakeLists.txt. -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") +if(WIN32 + AND CMAKE_BUILD_TYPE STREQUAL "Debug" + AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") endforeach() @@ -192,7 +194,9 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_EXAMPLES) # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in # ../CMakeLists.txt. - if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") + if(WIN32 + AND CMAKE_BUILD_TYPE STREQUAL "Debug" + AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") foreach(TEST_TARGET arrow-flight-sql-test flight-sql-test-server flight-sql-test-app) if(TARGET ${TEST_TARGET}) target_link_options(${TEST_TARGET} PRIVATE "/FORCE:MULTIPLE") diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index d3c446525b99..f74697b0744f 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -117,7 +117,9 @@ add_arrow_lib(arrow_flight_sql_odbc # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in # ../../CMakeLists.txt. -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") +if(WIN32 + AND CMAKE_BUILD_TYPE STREQUAL "Debug" + AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_ODBC_LIBRARIES}) target_link_options(${LIB_TARGET} PRIVATE "/FORCE:MULTIPLE") endforeach() diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt index 441ed567f704..ef9c5eb2f6ca 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt @@ -207,7 +207,9 @@ add_arrow_test(odbc_spi_impl_test # NOTE-49585: Workaround for issue found in GH-49585. See "NOTE-49585" in # ../../../CMakeLists.txt. -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") +if(WIN32 + AND CMAKE_BUILD_TYPE STREQUAL "Debug" + AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") if(TARGET arrow_odbc_spi_impl_cli) target_link_options(arrow_odbc_spi_impl_cli PRIVATE "/FORCE:MULTIPLE") endif() diff --git a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt index 665a66773c1c..dd67ebef3506 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/tests/CMakeLists.txt @@ -95,7 +95,9 @@ target_link_libraries(arrow-flight-sql-odbc-test PRIVATE ODBC::ODBC) # Disable unity build due to sqlite_sql_info.cc conflict with sql.h and sqlext.h headers. set_target_properties(arrow-flight-sql-odbc-test PROPERTIES UNITY_BUILD OFF) -if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") +if(WIN32 + AND CMAKE_BUILD_TYPE STREQUAL "Debug" + AND ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static") if(TARGET arrow-flight-sql-odbc-test) target_link_options(arrow-flight-sql-odbc-test PRIVATE "/FORCE:MULTIPLE") endif() diff --git a/testing b/testing index 9bf001b7d6ad..9cfebfef8982 160000 --- a/testing +++ b/testing @@ -1 +1 @@ -Subproject commit 9bf001b7d6ad318e222c06e760bccf480f2f550c +Subproject commit 9cfebfef8982fb8612e0a2c59059752bd32321a3 From 4bc2cf626cf94097f8461ae510afe01ecdd698a2 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 9 Jun 2026 15:44:12 -0700 Subject: [PATCH 39/39] format --- .../arrow/flight/sql/odbc/tests/odbc_test_suite.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc b/cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc index 3fbc1ceb164b..f3c6ba58c89a 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc +++ b/cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc @@ -244,14 +244,16 @@ void ODBCTestBase::TearDownTestSuite() { // When tests are run through CTest (but NOT when run directly from cmd.exe), // SQLFreeHandle(SQL_HANDLE_ENV) crashes during cleanup. The crash occurs only with // static linkage (ARROW_TEST_LINKAGE=static) and happens while freeing the ODBC - // environment handle, which triggers cleanup of statically-linked gRPC/Flight resources. + // environment handle, which triggers cleanup of statically-linked gRPC/Flight + // resources. // - // Root cause appears to be CTest's process management (signal handling, I/O redirection, - // or environment differences) interfering with gRPC cleanup during static destruction. + // Root cause appears to be CTest's process management (signal handling, I/O + // redirection, or environment differences) interfering with gRPC cleanup during + // static destruction. // // This workaround leaks the ODBC handles but allows tests to complete successfully. - // A proper fix would require ensuring gRPC is kept alive until all ODBC handles are freed, - // or switching to dynamic linkage for tests. + // A proper fix would require ensuring gRPC is kept alive until all ODBC handles are + // freed, or switching to dynamic linkage for tests. // // Disconnect(); connected = false;