From 0e661dfafd48f3b61125adba802fa7963dd20f18 Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Fri, 28 Nov 2025 15:15:52 -0800 Subject: [PATCH 1/9] Extract ODBC installer Need to add `component` to other parts to be able to select the ODBC components Add product ID to Windows installer With stable product and upgrade id, Windows will be able to properly recognize ODBC installer as the same product, and prevent double-installation from happening. Update README Co-Authored-By: alinalibq --- .gitignore | 3 + ci/scripts/cpp_build.sh | 1 + cpp/CMakeLists.txt | 8 +- cpp/CMakePresets.json | 1 + cpp/cmake_modules/BuildUtils.cmake | 17 +++- cpp/cmake_modules/ThirdpartyToolchain.cmake | 13 ++- cpp/src/arrow/CMakeLists.txt | 13 ++- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 93 +++++++++++++++++- cpp/src/arrow/flight/sql/odbc/README | 63 ++++++++++++ .../install/arrow-flight-sql-odbc-patch.xml | 22 +++++ .../odbc/install/arrow-flight-sql-odbc.wxs | 37 +++++++ .../sql/odbc/install/arrow-wix-banner.bmp | Bin 0 -> 29930 bytes .../flight/sql/odbc/install/versioninfo.rc.in | 54 ++++++++++ 13 files changed, 310 insertions(+), 15 deletions(-) create mode 100644 cpp/src/arrow/flight/sql/odbc/README create mode 100644 cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc-patch.xml create mode 100644 cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc.wxs create mode 100644 cpp/src/arrow/flight/sql/odbc/install/arrow-wix-banner.bmp create mode 100644 cpp/src/arrow/flight/sql/odbc/install/versioninfo.rc.in diff --git a/.gitignore b/.gitignore index 8354aa8f816..9f0d37a756f 100644 --- a/.gitignore +++ b/.gitignore @@ -107,3 +107,6 @@ java/.mvn/.develocity/ # rat filtered_rat.txt rat.txt + +# rc +*.rc diff --git a/ci/scripts/cpp_build.sh b/ci/scripts/cpp_build.sh index 2f02f8c1496..57594b124e1 100755 --- a/ci/scripts/cpp_build.sh +++ b/ci/scripts/cpp_build.sh @@ -213,6 +213,7 @@ else -DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \ -DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \ -DARROW_FLIGHT_SQL_ODBC=${ARROW_FLIGHT_SQL_ODBC:-OFF} \ + -DARROW_FLIGHT_SQL_ODBC_INSTALLER=${ARROW_FLIGHT_SQL_ODBC_INSTALLER:-OFF} \ -DARROW_FUZZING=${ARROW_FUZZING:-OFF} \ -DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \ -DARROW_GANDIVA=${ARROW_GANDIVA:-OFF} \ diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index c9f026f926a..aeffedab03e 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -720,9 +720,13 @@ endif() install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE.txt ${CMAKE_CURRENT_SOURCE_DIR}/../NOTICE.txt - ${CMAKE_CURRENT_SOURCE_DIR}/README.md DESTINATION "${ARROW_DOC_DIR}") + ${CMAKE_CURRENT_SOURCE_DIR}/README.md + DESTINATION "${ARROW_DOC_DIR}" + COMPONENT arrow_doc) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/gdb_arrow.py DESTINATION "${ARROW_GDB_DIR}") +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/gdb_arrow.py + DESTINATION "${ARROW_GDB_DIR}" + COMPONENT arrow_gdb) # # Validate and print out Arrow configuration options diff --git a/cpp/CMakePresets.json b/cpp/CMakePresets.json index e6c2e7e43a6..e2904db0de6 100644 --- a/cpp/CMakePresets.json +++ b/cpp/CMakePresets.json @@ -180,6 +180,7 @@ "ARROW_BUILD_EXAMPLES": "ON", "ARROW_BUILD_UTILITIES": "ON", "ARROW_FLIGHT_SQL_ODBC": "ON", + "ARROW_FLIGHT_SQL_ODBC_INSTALLER": "ON", "ARROW_TENSORFLOW": "ON", "PARQUET_BUILD_EXAMPLES": "ON", "PARQUET_BUILD_EXECUTABLES": "ON" diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake index db760400f7c..305546572c4 100644 --- a/cpp/cmake_modules/BuildUtils.cmake +++ b/cpp/cmake_modules/BuildUtils.cmake @@ -178,10 +178,12 @@ function(arrow_install_cmake_package PACKAGE_NAME EXPORT_NAME) write_basic_package_version_file("${BUILT_CONFIG_VERSION_CMAKE}" COMPATIBILITY SameMajorVersion) install(FILES "${BUILT_CONFIG_CMAKE}" "${BUILT_CONFIG_VERSION_CMAKE}" - DESTINATION "${ARROW_CMAKE_DIR}/${PACKAGE_NAME}") + DESTINATION "${ARROW_CMAKE_DIR}/${PACKAGE_NAME}" + COMPONENT config_cmake_file) set(TARGETS_CMAKE "${PACKAGE_NAME}Targets.cmake") install(EXPORT ${EXPORT_NAME} DESTINATION "${ARROW_CMAKE_DIR}/${PACKAGE_NAME}" + COMPONENT config_cmake_export NAMESPACE "${PACKAGE_NAME}::" FILE "${TARGETS_CMAKE}") endfunction() @@ -403,8 +405,11 @@ function(ADD_ARROW_LIB LIB_NAME) install(TARGETS ${LIB_NAME}_shared ${INSTALL_IS_OPTIONAL} EXPORT ${LIB_NAME}_targets ARCHIVE DESTINATION ${INSTALL_ARCHIVE_DIR} + COMPONENT ${LIB_NAME}_shared_archive LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} + COMPONENT ${LIB_NAME}_shared_library RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} + COMPONENT ${LIB_NAME}_shared_runtime INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) endif() @@ -471,8 +476,11 @@ function(ADD_ARROW_LIB LIB_NAME) install(TARGETS ${LIB_NAME}_static ${INSTALL_IS_OPTIONAL} EXPORT ${LIB_NAME}_targets ARCHIVE DESTINATION ${INSTALL_ARCHIVE_DIR} + COMPONENT ${LIB_NAME}_static_library LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} + COMPONENT ${LIB_NAME}_static_library RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} + COMPONENT ${LIB_NAME}_static_library INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) endif() @@ -934,7 +942,9 @@ function(ARROW_INSTALL_ALL_HEADERS PATH) endif() list(APPEND PUBLIC_HEADERS ${HEADER}) endforeach() - install(FILES ${PUBLIC_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PATH}") + install(FILES ${PUBLIC_HEADERS} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PATH}" + COMPONENT ${HEADER}_header) endfunction() function(ARROW_ADD_PKG_CONFIG MODULE) @@ -944,7 +954,8 @@ function(ARROW_ADD_PKG_CONFIG MODULE) OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/$/${MODULE}.pc" INPUT "${CMAKE_CURRENT_BINARY_DIR}/${MODULE}.pc.generate.in") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$/${MODULE}.pc" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/" + COMPONENT ${MODULE}_pkg_config) endfunction() # Implementations of lisp "car" and "cdr" functions diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index aa5c426aff3..4711b3b59a6 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -236,7 +236,8 @@ function(provide_cmake_module MODULE_NAME ARROW_CMAKE_PACKAGE_NAME) message(STATUS "Providing CMake module for ${MODULE_NAME} as part of ${ARROW_CMAKE_PACKAGE_NAME} CMake package" ) install(FILES "${module}" - DESTINATION "${ARROW_CMAKE_DIR}/${ARROW_CMAKE_PACKAGE_NAME}") + DESTINATION "${ARROW_CMAKE_DIR}/${ARROW_CMAKE_PACKAGE_NAME}" + COMPONENT ${MODULE_NAME}_module) endif() endfunction() @@ -2442,20 +2443,22 @@ function(build_gtest) endforeach() install(DIRECTORY "${googletest_SOURCE_DIR}/googlemock/include/" "${googletest_SOURCE_DIR}/googletest/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + COMPONENT gtest_dir) add_library(arrow::GTest::gtest_headers INTERFACE IMPORTED) target_include_directories(arrow::GTest::gtest_headers INTERFACE "${googletest_SOURCE_DIR}/googlemock/include/" "${googletest_SOURCE_DIR}/googletest/include/") install(TARGETS gmock gmock_main gtest gtest_main EXPORT arrow_testing_targets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT gtest_runtime + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT gtest_archive + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT gtest_library) if(MSVC) install(FILES $ $ $ $ DESTINATION "${CMAKE_INSTALL_BINDIR}" + COMPONENT gtest_pdb OPTIONAL) endif() add_library(arrow::GTest::gmock ALIAS gmock) diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt index deb6db3cdd3..f7143067613 100644 --- a/cpp/src/arrow/CMakeLists.txt +++ b/cpp/src/arrow/CMakeLists.txt @@ -349,7 +349,8 @@ string(REPLACE "${CMAKE_BINARY_DIR}" "" REDACTED_CXX_FLAGS configure_file("util/config.h.cmake" "util/config.h" ESCAPE_QUOTES) configure_file("util/config_internal.h.cmake" "util/config_internal.h" ESCAPE_QUOTES) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/util/config.h" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/arrow/util") + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/arrow/util" + COMPONENT arrow_config) set(ARROW_SRCS builder.cc @@ -1051,7 +1052,8 @@ if(ARROW_BUILD_BUNDLED_DEPENDENCIES) get_target_property(arrow_bundled_dependencies_path arrow_bundled_dependencies IMPORTED_LOCATION) install(FILES ${arrow_bundled_dependencies_path} ${INSTALL_IS_OPTIONAL} - DESTINATION ${CMAKE_INSTALL_LIBDIR}) + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT arrow_bundled_dependencies) string(PREPEND ARROW_PC_LIBS_PRIVATE " -larrow_bundled_dependencies") list(INSERT ARROW_STATIC_INSTALL_INTERFACE_LIBS 0 "Arrow::arrow_bundled_dependencies") endif() @@ -1168,6 +1170,7 @@ if(ARROW_BUILD_SHARED AND NOT WIN32) if(ARROW_GDB_AUTO_LOAD_LIBARROW_GDB_INSTALL) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libarrow_gdb.py" DESTINATION "${ARROW_GDB_AUTO_LOAD_LIBARROW_GDB_DIR}" + COMPONENT arrow_gdb RENAME "$-gdb.py") endif() endif() @@ -1231,11 +1234,13 @@ arrow_install_all_headers("arrow") config_summary_cmake_setters("${CMAKE_CURRENT_BINARY_DIR}/ArrowOptions.cmake") install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ArrowOptions.cmake - DESTINATION "${ARROW_CMAKE_DIR}/Arrow") + DESTINATION "${ARROW_CMAKE_DIR}/Arrow" + COMPONENT arrow_options_cmake) # For backward compatibility for find_package(arrow) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/arrow-config.cmake - DESTINATION "${ARROW_CMAKE_DIR}/Arrow") + DESTINATION "${ARROW_CMAKE_DIR}/Arrow" + COMPONENT arrow_config_cmake) # # Unit tests diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index ac18a9bc7cd..b1747894105 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -38,10 +38,28 @@ add_subdirectory(tests) arrow_install_all_headers("arrow/flight/sql/odbc") +# ODBC Release information +set(ODBC_PACKAGE_VERSION_MAJOR "1") +set(ODBC_PACKAGE_VERSION_MINOR "0") +set(ODBC_PACKAGE_VERSION_PATCH "0") +set(ODBC_PACKAGE_NAME "Apache Arrow Flight SQL ODBC") +set(ODBC_PACKAGE_VENDOR "Apache Arrow") + set(ARROW_FLIGHT_SQL_ODBC_SRCS entry_points.cc odbc_api.cc) if(WIN32) - list(APPEND ARROW_FLIGHT_SQL_ODBC_SRCS odbc.def) + set(VER_FILEVERSION + "${ODBC_PACKAGE_VERSION_MAJOR},${ODBC_PACKAGE_VERSION_MINOR},${ODBC_PACKAGE_VERSION_PATCH},0" + ) + set(VER_FILEVERSION_STR + ${ODBC_PACKAGE_VERSION_MAJOR}.${ODBC_PACKAGE_VERSION_MINOR}.${ODBC_PACKAGE_VERSION_PATCH} + ) + set(VER_COMPANYNAME_STR ${ODBC_PACKAGE_VENDOR}) + set(VER_PRODUCTNAME_STR ${ODBC_PACKAGE_NAME}) + + configure_file("install/versioninfo.rc.in" "install/versioninfo.rc" @ONLY) + + list(APPEND ARROW_FLIGHT_SQL_ODBC_SRCS odbc.def install/versioninfo.rc) endif() add_arrow_lib(arrow_flight_sql_odbc @@ -75,3 +93,76 @@ add_arrow_lib(arrow_flight_sql_odbc foreach(LIB_TARGET ${ARROW_FLIGHT_SQL_ODBC_LIBRARIES}) target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_FLIGHT_SQL_ODBC_EXPORTING) endforeach() + +# Construct ODBC Windows installer. Only Release installer is supported +if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) + + include(InstallRequiredSystemLibraries) + + set(CPACK_RESOURCE_FILE_LICENSE + "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../LICENSE.txt") + # Tentative version 1.0.0 + set(CPACK_PACKAGE_VERSION_MAJOR ${ODBC_PACKAGE_VERSION_MAJOR}) + set(CPACK_PACKAGE_VERSION_MINOR ${ODBC_PACKAGE_VERSION_MINOR}) + set(CPACK_PACKAGE_VERSION_PATCH ${ODBC_PACKAGE_VERSION_PATCH}) + + set(CPACK_PACKAGE_NAME ${ODBC_PACKAGE_NAME}) + set(CPACK_PACKAGE_VENDOR ${ODBC_PACKAGE_VENDOR}) + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Apache Arrow Flight SQL ODBC Driver") + set(CPACK_PACKAGE_CONTACT "#GH-47787 TODO arrow maintainers") + + # GH-47876 TODO: set up `flight_sql_odbc_lib` component for macOS Installer + # GH-47877 TODO: set up `flight_sql_odbc_lib` component for Linux Installer + if(WIN32) + install(DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}${CMAKE_BUILD_TYPE}/" + DESTINATION bin + COMPONENT flight_sql_odbc_lib + FILES_MATCHING + # Use regex for dll name patterns with versions + PATTERN "abseil_dll.dll" + PATTERN "arrow.dll" + PATTERN "arrow_compute.dll" + PATTERN "arrow_flight.dll" + PATTERN "arrow_flight_sql.dll" + PATTERN "arrow_flight_sql_odbc.dll" + PATTERN "boost_locale*.dll" + PATTERN "cares.dll" + PATTERN "libcrypto*.dll" + PATTERN "libprotobuf.dll" + PATTERN "libssl*.dll" + PATTERN "re2.dll" + PATTERN "utf8proc.dll" + PATTERN "zlib1.dll") + + set(CPACK_WIX_EXTRA_SOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-flight-sql-odbc.wxs") + set(CPACK_WIX_PATCH_FILE + "${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-flight-sql-odbc-patch.xml") + + set(CPACK_WIX_UI_BANNER "${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-wix-banner.bmp") + endif() + + get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) + set(CPACK_COMPONENTS_ALL Unspecified) + list(APPEND CPACK_COMPONENTS_ALL "flight_sql_odbc_lib") + + if(WIN32) + # WiX msi installer on Windows + # CPack is compatible with WiX V.5 and V.6 + set(CPACK_GENERATOR "WIX") + set(CPACK_WIX_VERSION 4) + + # Upgrade GUID is required to be unchanged for ODBC installer to upgrade + set(CPACK_WIX_UPGRADE_GUID "DBF27A18-F8BF-423F-9E3A-957414D52C4B") + set(CPACK_WIX_PRODUCT_GUID "279D087B-93B5-4DC3-BA69-BCF485022A26") + endif() + # GH-47876 TODO: create macOS Installer using cpack + # GH-47877 TODO: create Linux Installer using cpack + + # Load CPack after all CPACK* variables are set + include(CPack) + cpack_add_component(flight_sql_odbc_lib + DISPLAY_NAME "ODBC library" + DESCRIPTION "ODBC library bin, required to install" + REQUIRED) +endif() diff --git a/cpp/src/arrow/flight/sql/odbc/README b/cpp/src/arrow/flight/sql/odbc/README new file mode 100644 index 00000000000..1ba24b3f764 --- /dev/null +++ b/cpp/src/arrow/flight/sql/odbc/README @@ -0,0 +1,63 @@ + + +## Steps to Register the 64-bit Apache Arrow ODBC driver on Windows + +After the build succeeds, the ODBC DLL will be located in +`build\debug\Debug` for a debug build and `build\release\Release` for a release build. + +1. Open Windows Power Shell as administrator. + +2. Register your ODBC DLL: + Need to replace with actual path to repository in the commands. + + i. `cd to repo.` + ii. `cd ` + iii. Run script to register your ODBC DLL as Apache Arrow Flight SQL ODBC Driver + `.\cpp\src\arrow\flight\sql\odbc\tests\install_odbc.cmd \cpp\build\< release | debug >\< Release | Debug>\arrow_flight_sql_odbc.dll` + Example command for reference: + `.\cpp\src\arrow\flight\sql\odbc\tests\install_odbc.cmd C:\path\to\arrow\cpp\build\release\Release\arrow_flight_sql_odbc.dll` + +If the registration is successful, then Apache Arrow Flight SQL ODBC Driver +should show as an available ODBC driver in the x64 ODBC Driver Manager. + +## Steps to Generate Windows Installer +1. Install WiX toolset v6 from [GitHub](https://github.com/wixtoolset/wix/releases/). +2. Build with `ARROW_FLIGHT_SQL_ODBC=ON` and `ARROW_FLIGHT_SQL_ODBC_INSTALLER=ON`. +3. `cd` to `build` folder. +4. Run `cpack`. + +If the generation is successful, you will find `Apache Arrow Flight SQL ODBC--win64.msi` generated under the `build` folder. + + +## Steps to Enable Logging +Arrow Flight SQL ODBC driver uses Arrow's internal logging framework. By default, the log messages are printed to the terminal. +1. Set environment variable `ARROW_ODBC_LOG_LEVEL` to any of the following valid values to enable logging. If `ARROW_ODBC_LOG_LEVEL` is set to a non-empty string that does not match any of the following values, `DEBUG` level is used by default. + +The characters are case-insensitive. +- TRACE +- DEBUG +- INFO +- WARNING +- ERROR +- FATAL + +The Windows ODBC driver currently does not support writing log files. `ARROW_USE_GLOG` is required to write log files, and `ARROW_USE_GLOG` is disabled on Windows platform since plasma using `glog` is not fully tested on windows. + +Note: GH-47670 running more than 1 tests with logging enabled is not fully supported. diff --git a/cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc-patch.xml b/cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc-patch.xml new file mode 100644 index 00000000000..f1a63ce5d3b --- /dev/null +++ b/cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc-patch.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc.wxs b/cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc.wxs new file mode 100644 index 00000000000..bd0216aa766 --- /dev/null +++ b/cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc.wxs @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/cpp/src/arrow/flight/sql/odbc/install/arrow-wix-banner.bmp b/cpp/src/arrow/flight/sql/odbc/install/arrow-wix-banner.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0c82036f4ecfc1e8c34fcb7eae56ccd7d9be4731 GIT binary patch literal 29930 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 MS>rLo%F*-te Date: Wed, 17 Dec 2025 12:59:28 -0800 Subject: [PATCH 2/9] Enable ODBC installer build in ODBC Workflow --- .github/workflows/cpp_extra.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cpp_extra.yml b/.github/workflows/cpp_extra.yml index b56b74c9a29..26e33ca139f 100644 --- a/.github/workflows/cpp_extra.yml +++ b/.github/workflows/cpp_extra.yml @@ -346,6 +346,7 @@ jobs: ARROW_BUILD_TYPE: release ARROW_DEPENDENCY_SOURCE: VCPKG ARROW_FLIGHT_SQL_ODBC: ON + ARROW_FLIGHT_SQL_ODBC_INSTALLER: ON ARROW_SIMD_LEVEL: AVX2 CMAKE_CXX_STANDARD: "17" CMAKE_GENERATOR: Ninja @@ -434,7 +435,24 @@ jobs: # GH-48269 TODO: Enable Flight & Flight SQL testing in MSVC CI # GH-48547 TODO: enable ODBC tests after GH-48270 and GH-48269 are resolved. - # GH-47787 TODO: Build ODBC installer + - name: Install WiX Toolset + shell: pwsh + run: | + Invoke-WebRequest -Uri https://github.com/wixtoolset/wix/releases/download/v6.0.0/wix-cli-x64.msi -OutFile wix-cli-x64.msi + Start-Process -FilePath wix-cli-x64.msi -ArgumentList '/quiet', 'Include_freethreaded=1' -Wait + echo "C:\Program Files\WiX Toolset v6.0\bin\" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + - name: Build MSI ODBC installer + shell: pwsh + run: | + # Verify WiX version + wix --version + cd "${{ github.workspace }}\build\cpp" + cpack + - name: Upload the artifacts to the job + uses: actions/upload-artifact@v6 + with: + name: flight-sql-odbc-msi-installer + path: ${{ github.workspace }}\build\cpp\Apache Arrow Flight SQL ODBC-1.0.0-win64.msi report-extra-cpp: if: github.event_name == 'schedule' && always() From 218746f5682128e9741b284fe962edfa5bc7021e Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Wed, 17 Dec 2025 13:38:22 -0800 Subject: [PATCH 3/9] Move path for Windows install files Co-Authored-By: vic-tsang --- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 9 +++++---- .../{ => windows}/arrow-flight-sql-odbc-patch.xml | 0 .../install/{ => windows}/arrow-flight-sql-odbc.wxs | 0 .../odbc/install/{ => windows}/arrow-wix-banner.bmp | Bin .../odbc/install/{ => windows}/versioninfo.rc.in | 0 5 files changed, 5 insertions(+), 4 deletions(-) rename cpp/src/arrow/flight/sql/odbc/install/{ => windows}/arrow-flight-sql-odbc-patch.xml (100%) rename cpp/src/arrow/flight/sql/odbc/install/{ => windows}/arrow-flight-sql-odbc.wxs (100%) rename cpp/src/arrow/flight/sql/odbc/install/{ => windows}/arrow-wix-banner.bmp (100%) rename cpp/src/arrow/flight/sql/odbc/install/{ => windows}/versioninfo.rc.in (100%) diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index b1747894105..5570c5c474b 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -57,7 +57,7 @@ if(WIN32) set(VER_COMPANYNAME_STR ${ODBC_PACKAGE_VENDOR}) set(VER_PRODUCTNAME_STR ${ODBC_PACKAGE_NAME}) - configure_file("install/versioninfo.rc.in" "install/versioninfo.rc" @ONLY) + configure_file("install/windows/versioninfo.rc.in" "install/versioninfo.rc" @ONLY) list(APPEND ARROW_FLIGHT_SQL_ODBC_SRCS odbc.def install/versioninfo.rc) endif() @@ -135,11 +135,12 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) PATTERN "zlib1.dll") set(CPACK_WIX_EXTRA_SOURCES - "${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-flight-sql-odbc.wxs") + "${CMAKE_CURRENT_SOURCE_DIR}/install/windows/arrow-flight-sql-odbc.wxs") set(CPACK_WIX_PATCH_FILE - "${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-flight-sql-odbc-patch.xml") + "${CMAKE_CURRENT_SOURCE_DIR}/install/windows/arrow-flight-sql-odbc-patch.xml") - set(CPACK_WIX_UI_BANNER "${CMAKE_CURRENT_SOURCE_DIR}/install/arrow-wix-banner.bmp") + set(CPACK_WIX_UI_BANNER + "${CMAKE_CURRENT_SOURCE_DIR}/install/windows/arrow-wix-banner.bmp") endif() get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) diff --git a/cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc-patch.xml b/cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc-patch.xml similarity index 100% rename from cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc-patch.xml rename to cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc-patch.xml diff --git a/cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc.wxs b/cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc.wxs similarity index 100% rename from cpp/src/arrow/flight/sql/odbc/install/arrow-flight-sql-odbc.wxs rename to cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc.wxs diff --git a/cpp/src/arrow/flight/sql/odbc/install/arrow-wix-banner.bmp b/cpp/src/arrow/flight/sql/odbc/install/windows/arrow-wix-banner.bmp similarity index 100% rename from cpp/src/arrow/flight/sql/odbc/install/arrow-wix-banner.bmp rename to cpp/src/arrow/flight/sql/odbc/install/windows/arrow-wix-banner.bmp diff --git a/cpp/src/arrow/flight/sql/odbc/install/versioninfo.rc.in b/cpp/src/arrow/flight/sql/odbc/install/windows/versioninfo.rc.in similarity index 100% rename from cpp/src/arrow/flight/sql/odbc/install/versioninfo.rc.in rename to cpp/src/arrow/flight/sql/odbc/install/windows/versioninfo.rc.in From 2804f856e32e976115354c7551806d9183866c45 Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Wed, 17 Dec 2025 16:14:34 -0800 Subject: [PATCH 4/9] Add ODBC Installer definitions --- ci/scripts/cpp_build.sh | 1 + cpp/cmake_modules/DefineOptions.cmake | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/ci/scripts/cpp_build.sh b/ci/scripts/cpp_build.sh index 57594b124e1..c25d441a07e 100755 --- a/ci/scripts/cpp_build.sh +++ b/ci/scripts/cpp_build.sh @@ -65,6 +65,7 @@ if [ "${ARROW_ENABLE_THREADING:-ON}" = "OFF" ]; then ARROW_FLIGHT=OFF ARROW_FLIGHT_SQL=OFF ARROW_FLIGHT_SQL_ODBC=OFF + ARROW_FLIGHT_SQL_ODBC_INSTALLER=OFF ARROW_GCS=OFF ARROW_JEMALLOC=OFF ARROW_MIMALLOC=OFF diff --git a/cpp/cmake_modules/DefineOptions.cmake b/cpp/cmake_modules/DefineOptions.cmake index 0f6674c7143..2e5e3b60662 100644 --- a/cpp/cmake_modules/DefineOptions.cmake +++ b/cpp/cmake_modules/DefineOptions.cmake @@ -347,6 +347,12 @@ takes precedence over ccache if a storage backend is configured" ON) ARROW_FLIGHT_SQL ARROW_COMPUTE) + define_option(ARROW_FLIGHT_SQL_ODBC_INSTALLER + "Build the Arrow Flight SQL ODBC installer" + OFF + DEPENDS + ARROW_FLIGHT_SQL_ODBC) + define_option(ARROW_GANDIVA "Build the Gandiva libraries" OFF From 0e4d03ca92bab338e9a056e40416a98d50c0c841 Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Wed, 17 Dec 2025 16:26:25 -0800 Subject: [PATCH 5/9] Attempt to fix CI ODBC msi Add debug message for odbc bin install path --- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index 5570c5c474b..1030ca5b730 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -114,7 +114,12 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) # GH-47876 TODO: set up `flight_sql_odbc_lib` component for macOS Installer # GH-47877 TODO: set up `flight_sql_odbc_lib` component for Linux Installer if(WIN32) - install(DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}${CMAKE_BUILD_TYPE}/" + # -AL- note: below change may break local build if the odbc location is different. + # `cpp_build.sh` sets build_dir=${2}/cpp. + message(STATUS "-AL- BUILD_OUTPUT_ROOT_DIRECTORY CMAKE_BUILD_TYPE/: ${BUILD_OUTPUT_ROOT_DIRECTORY}${CMAKE_BUILD_TYPE}/") + message(STATUS "-AL- BUILD_OUTPUT_ROOT_DIRECTORY cpp/CMAKE_BUILD_TYPE/: ${BUILD_OUTPUT_ROOT_DIRECTORY}cpp/${CMAKE_BUILD_TYPE}/") + # install(DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}${CMAKE_BUILD_TYPE}/" + install(DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}cpp/${CMAKE_BUILD_TYPE}/" DESTINATION bin COMPONENT flight_sql_odbc_lib FILES_MATCHING From 423546d15bf0637160fe0b788b2d2e93c24f5cac Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Thu, 18 Dec 2025 10:35:30 -0800 Subject: [PATCH 6/9] Use targets instead of hard-coded dll regex Add `RUNTIME ` removes `.lib` file Clean up --- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 39 +++++++------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index 1030ca5b730..4ffd5bf224f 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -19,8 +19,6 @@ # GH-44792: Arrow will switch to C++ 20 set(CMAKE_CXX_STANDARD 20) -add_custom_target(arrow_flight_sql_odbc) - if(WIN32) if(MSVC_VERSION GREATER_EQUAL 1900) set(ODBCINST legacy_stdio_definitions odbccp32 shlwapi) @@ -114,30 +112,19 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) # GH-47876 TODO: set up `flight_sql_odbc_lib` component for macOS Installer # GH-47877 TODO: set up `flight_sql_odbc_lib` component for Linux Installer if(WIN32) - # -AL- note: below change may break local build if the odbc location is different. - # `cpp_build.sh` sets build_dir=${2}/cpp. - message(STATUS "-AL- BUILD_OUTPUT_ROOT_DIRECTORY CMAKE_BUILD_TYPE/: ${BUILD_OUTPUT_ROOT_DIRECTORY}${CMAKE_BUILD_TYPE}/") - message(STATUS "-AL- BUILD_OUTPUT_ROOT_DIRECTORY cpp/CMAKE_BUILD_TYPE/: ${BUILD_OUTPUT_ROOT_DIRECTORY}cpp/${CMAKE_BUILD_TYPE}/") - # install(DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}${CMAKE_BUILD_TYPE}/" - install(DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}cpp/${CMAKE_BUILD_TYPE}/" - DESTINATION bin - COMPONENT flight_sql_odbc_lib - FILES_MATCHING - # Use regex for dll name patterns with versions - PATTERN "abseil_dll.dll" - PATTERN "arrow.dll" - PATTERN "arrow_compute.dll" - PATTERN "arrow_flight.dll" - PATTERN "arrow_flight_sql.dll" - PATTERN "arrow_flight_sql_odbc.dll" - PATTERN "boost_locale*.dll" - PATTERN "cares.dll" - PATTERN "libcrypto*.dll" - PATTERN "libprotobuf.dll" - PATTERN "libssl*.dll" - PATTERN "re2.dll" - PATTERN "utf8proc.dll" - PATTERN "zlib1.dll") + # Install ODBC and its Arrow dependencies + install(TARGETS arrow_shared + arrow_compute_shared + arrow_flight_shared + arrow_flight_sql_shared + arrow_flight_sql_odbc_shared + RUNTIME_DEPENDENCIES + PRE_EXCLUDE_REGEXES + "api-ms-.*" + "ext-ms-.*" + POST_EXCLUDE_REGEXES + ".*system32/.*\\.dll" + RUNTIME DESTINATION bin COMPONENT flight_sql_odbc_lib) set(CPACK_WIX_EXTRA_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/install/windows/arrow-flight-sql-odbc.wxs") From 2bf96a3c5a2ac0dbf4548c276e002928a58514fc Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Mon, 22 Dec 2025 13:39:29 -0800 Subject: [PATCH 7/9] Add component name for `ARROW_BUILD_UTILITIES` * change component name for Flight SQL ODBC to be more consistent --- cpp/cmake_modules/BuildUtils.cmake | 4 ++-- cpp/src/arrow/ipc/CMakeLists.txt | 3 ++- cpp/tools/parquet/CMakeLists.txt | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake index 305546572c4..d66547315b0 100644 --- a/cpp/cmake_modules/BuildUtils.cmake +++ b/cpp/cmake_modules/BuildUtils.cmake @@ -179,11 +179,11 @@ function(arrow_install_cmake_package PACKAGE_NAME EXPORT_NAME) COMPATIBILITY SameMajorVersion) install(FILES "${BUILT_CONFIG_CMAKE}" "${BUILT_CONFIG_VERSION_CMAKE}" DESTINATION "${ARROW_CMAKE_DIR}/${PACKAGE_NAME}" - COMPONENT config_cmake_file) + COMPONENT ${EXPORT_NAME}_config_cmake_files) set(TARGETS_CMAKE "${PACKAGE_NAME}Targets.cmake") install(EXPORT ${EXPORT_NAME} DESTINATION "${ARROW_CMAKE_DIR}/${PACKAGE_NAME}" - COMPONENT config_cmake_export + COMPONENT ${EXPORT_NAME}_target_export NAMESPACE "${PACKAGE_NAME}::" FILE "${TARGETS_CMAKE}") endfunction() diff --git a/cpp/src/arrow/ipc/CMakeLists.txt b/cpp/src/arrow/ipc/CMakeLists.txt index 6e73c71d897..0bcb649cb3d 100644 --- a/cpp/src/arrow/ipc/CMakeLists.txt +++ b/cpp/src/arrow/ipc/CMakeLists.txt @@ -59,7 +59,8 @@ if(ARROW_BUILD_UTILITIES OR ARROW_BUILD_INTEGRATION) if(ARROW_BUILD_UTILITIES) install(TARGETS arrow-file-to-stream arrow-stream-to-file ${INSTALL_IS_OPTIONAL} - DESTINATION ${CMAKE_INSTALL_BINDIR}) + DESTINATION ${CMAKE_INSTALL_BINDIR} + COMPONENT arrow_ipc_utilities) endif() if(ARROW_BUILD_INTEGRATION) diff --git a/cpp/tools/parquet/CMakeLists.txt b/cpp/tools/parquet/CMakeLists.txt index 5aaa456dcae..dd479ef561c 100644 --- a/cpp/tools/parquet/CMakeLists.txt +++ b/cpp/tools/parquet/CMakeLists.txt @@ -34,7 +34,7 @@ if(PARQUET_BUILD_EXECUTABLES) # Avoid unsetting RPATH when installing set_target_properties(${TOOL} PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) install(TARGETS ${TOOL} ${INSTALL_IS_OPTIONAL} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT parquet_${TOOL}) endforeach(TOOL) add_dependencies(parquet ${PARQUET_TOOLS}) From edee9aeb5923ca786e816622ba204dd9c99bc1ef Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Mon, 22 Dec 2025 13:39:48 -0800 Subject: [PATCH 8/9] Change Arrow odbc component name to `arrow_flight_sql_odbc` --- cpp/src/arrow/flight/sql/odbc/CMakeLists.txt | 10 +++++----- .../sql/odbc/install/windows/arrow-flight-sql-odbc.wxs | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt index 4ffd5bf224f..4144b3df890 100644 --- a/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/CMakeLists.txt @@ -109,8 +109,8 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Apache Arrow Flight SQL ODBC Driver") set(CPACK_PACKAGE_CONTACT "#GH-47787 TODO arrow maintainers") - # GH-47876 TODO: set up `flight_sql_odbc_lib` component for macOS Installer - # GH-47877 TODO: set up `flight_sql_odbc_lib` component for Linux Installer + # GH-47876 TODO: set up `arrow_flight_sql_odbc` component for macOS Installer + # GH-47877 TODO: set up `arrow_flight_sql_odbc` component for Linux Installer if(WIN32) # Install ODBC and its Arrow dependencies install(TARGETS arrow_shared @@ -124,7 +124,7 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) "ext-ms-.*" POST_EXCLUDE_REGEXES ".*system32/.*\\.dll" - RUNTIME DESTINATION bin COMPONENT flight_sql_odbc_lib) + RUNTIME DESTINATION bin COMPONENT arrow_flight_sql_odbc) set(CPACK_WIX_EXTRA_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/install/windows/arrow-flight-sql-odbc.wxs") @@ -137,7 +137,7 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) set(CPACK_COMPONENTS_ALL Unspecified) - list(APPEND CPACK_COMPONENTS_ALL "flight_sql_odbc_lib") + list(APPEND CPACK_COMPONENTS_ALL "arrow_flight_sql_odbc") if(WIN32) # WiX msi installer on Windows @@ -154,7 +154,7 @@ if(ARROW_FLIGHT_SQL_ODBC_INSTALLER) # Load CPack after all CPACK* variables are set include(CPack) - cpack_add_component(flight_sql_odbc_lib + cpack_add_component(arrow_flight_sql_odbc DISPLAY_NAME "ODBC library" DESCRIPTION "ODBC library bin, required to install" REQUIRED) diff --git a/cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc.wxs b/cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc.wxs index bd0216aa766..6607731efce 100644 --- a/cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc.wxs +++ b/cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc.wxs @@ -25,10 +25,10 @@ - + - - + + From 9c2491026aa73e07818409fc9f590848919d06b1 Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Mon, 22 Dec 2025 14:13:05 -0800 Subject: [PATCH 9/9] Minor fix for DSN Window So ODBC installed by installer works as intended --- .../arrow/flight/sql/odbc/odbc_impl/config/configuration.cc | 4 ++-- .../arrow/flight/sql/odbc/odbc_impl/config/configuration.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc b/cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc index df61f1247c7..866749e7e0f 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc @@ -186,12 +186,12 @@ const Connection::ConnPropertyMap& Configuration::GetProperties() const { return this->properties_; } -std::vector Configuration::GetCustomKeys() const { +std::vector Configuration::GetCustomKeys() const { Connection::ConnPropertyMap copy_props(properties_); for (auto& key : FlightSqlConnection::ALL_KEYS) { copy_props.erase(std::string(key)); } - std::vector keys; + std::vector keys; boost::copy(copy_props | boost::adaptors::map_keys, std::back_inserter(keys)); return keys; } diff --git a/cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h b/cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h index 0390a57e52f..9b59f346b29 100644 --- a/cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h +++ b/cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h @@ -60,7 +60,7 @@ class Configuration { */ const Connection::ConnPropertyMap& GetProperties() const; - std::vector GetCustomKeys() const; + std::vector GetCustomKeys() const; private: Connection::ConnPropertyMap properties_;