alinaliBQ commented on code in PR #48054:
URL: https://github.com/apache/arrow/pull/48054#discussion_r2670265793
##########
.github/workflows/cpp_extra.yml:
##########
@@ -433,7 +434,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"
Review Comment:
Yea, fixed
##########
.github/workflows/cpp_extra.yml:
##########
@@ -433,7 +434,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
Review Comment:
yup, removed `${{ github.workspace }}`
##########
cpp/src/arrow/flight/sql/odbc/CMakeLists.txt:
##########
@@ -38,10 +36,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")
Review Comment:
Yup, fixed
##########
cpp/src/arrow/flight/sql/odbc/CMakeLists.txt:
##########
@@ -38,10 +36,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")
Review Comment:
Yes, I have changed these values to corresponding `arrow_VERSION_*`.
##########
cpp/src/arrow/flight/sql/odbc/README.md:
##########
Review Comment:
Yes. Done
##########
cpp/src/arrow/flight/sql/odbc/CMakeLists.txt:
##########
@@ -75,3 +91,73 @@ 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")
Review Comment:
Yes email addresses are needed. I have changed it to
`[email protected]`, thanks!
##########
cpp/src/arrow/flight/sql/odbc/install/windows/versioninfo.rc.in:
##########
@@ -0,0 +1,54 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#define VER_FILEVERSION @VER_FILEVERSION@
+#define VER_FILEVERSION_STR "@VER_FILEVERSION_STR@\0"
Review Comment:
Yes I think so, I think it's because a null-terminated string is expected. I
got it (`\0`) from Msft example
[here](https://learn.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource?redirectedfrom=MSDN#examples).
##########
cpp/src/arrow/flight/sql/odbc/CMakeLists.txt:
##########
@@ -75,3 +91,73 @@ 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 `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(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
+ DESTINATION bin
+ COMPONENT arrow_flight_sql_odbc)
+ 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 arrow_flight_sql_odbc)
+
+ set(CPACK_WIX_EXTRA_SOURCES
+
"${CMAKE_CURRENT_SOURCE_DIR}/install/windows/arrow-flight-sql-odbc.wxs")
+ set(CPACK_WIX_PATCH_FILE
+
"${CMAKE_CURRENT_SOURCE_DIR}/install/windows/arrow-flight-sql-odbc-patch.xml")
+
+ set(CPACK_WIX_UI_BANNER
+ "${CMAKE_CURRENT_SOURCE_DIR}/install/windows/arrow-wix-banner.bmp")
+ endif()
+
+ get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS)
+ set(CPACK_COMPONENTS_ALL "arrow_flight_sql_odbc")
+
+ 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(arrow_flight_sql_odbc
+ DISPLAY_NAME "ODBC library"
+ DESCRIPTION "ODBC library bin, required to install"
Review Comment:
Yes `DESCRIPTION` is used, and I have included "Apache Arrow Flight SQL". I
don't hold a strong opinion on the `DESCRIPTION` value.
This is what it looks like in the installer :
<img width="1517" height="1090" alt="image"
src="https://github.com/user-attachments/assets/d01ff268-f7ed-4e70-8499-3257a338406f"
/>
##########
cpp/src/arrow/flight/sql/odbc/README:
##########
@@ -0,0 +1,63 @@
+<!---
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+## 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 <path\to\repo> with actual path to repository in the
commands.
+
+ i. `cd to repo.`
+ ii. `cd <path\to\repo>`
+ 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
<path\to\repo>\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`
Review Comment:
Done
##########
cpp/src/arrow/flight/sql/odbc/install/windows/arrow-flight-sql-odbc.wxs:
##########
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="windows-1252"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
+ <Fragment>
+ <DirectoryRef Id="TARGETDIR">
+ <Component Id="ODBCRegistryEntries"
Guid="C348B9F7-5E8D-415D-A001-D92F2D4EA013">
+ <RegistryValue Root='HKLM' Key='Software\ODBC\ODBCINST.INI\ODBC
Drivers' Name='Apache Arrow Flight SQL ODBC Driver' Type='string'
Value='Installed'/>
+
+ <RegistryKey Root="HKLM"
+ Key="Software\ODBC\ODBCINST.INI\Apache Arrow Flight SQL
ODBC Driver">
+ <!-- CM_FP_arrow_flight_sql_odbc.bin.arrow_flight_sql_odbc.dll
is a generated variable value from build\_CPack_Packages\win64\WIX\files.wxs -->
+ <RegistryValue Type="string" Name="DriverODBCVer"
Value="03.00"/>
Review Comment:
`DriverODBCVer` refers to the ODBC API version which is
[3.0](https://learn.microsoft.com/en-us/sql/odbc/reference/develop-app/types-of-drivers?view=sql-server-ver17)
for Flight SQL ODBC. The Flight SQL ODBC driver version is set by
`ODBC_PACKAGE_VERSION_*` variables in CMake
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]