From afda2161a1994eb1d0625a3b15ae11410ece3e91 Mon Sep 17 00:00:00 2001 From: Victor Tsang Date: Mon, 1 Dec 2025 16:28:18 -0800 Subject: [PATCH 1/3] Mac Setup ODBC ini Script * added setup script for mac and platform folders Co-Authored-By: Alina (Xi) Li Co-Authored-By: vic-tsang Update install_odbc.sh --- .../sql/odbc/install/mac/install_odbc.sh | 76 +++++++++++++++++ .../sql/odbc/install/mac/install_odbc_ini.sh | 82 +++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh create mode 100755 cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh diff --git a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh new file mode 100644 index 00000000000..0916bff0845 --- /dev/null +++ b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh @@ -0,0 +1,76 @@ +#!/bin/sh +# +# 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. + +# Used by macOS ODBC installer script and macOS ODBC testing + +ODBC_64BIT="$1" + +if [[ -z "$ODBC_64BIT" ]]; then + echo "error: 64-bit driver is not specified. Call format: install_odbc abs_path_to_64_bit_driver" + exit 1 +fi + +if [ ! -f $ODBC_64BIT ]; then + echo "64-bit driver can not be found: $ODBC_64BIT" + echo "Call format: install_odbc abs_path_to_64_bit_driver" + exit 1 +fi + +USER_ODBCINST_FILE="$HOME/Library/ODBC/odbcinst.ini" +DRIVER_NAME="Apache Arrow Flight SQL ODBC Driver" +DSN_NAME="Apache Arrow Flight SQL ODBC DSN" + +mkdir -p $HOME/Library/ODBC + +touch "$USER_ODBCINST_FILE" + +# Admin privilege is needed to add ODBC driver registration +if [ $EUID -ne 0 ]; then + echo "Please run this script with sudo" + exit 1 +fi + +if grep -q "^\[$DRIVER_NAME\]" "$USER_ODBCINST_FILE"; then + echo "Driver [$DRIVER_NAME] already exists in odbcinst.ini" +else + echo "Adding [$DRIVER_NAME] to odbcinst.ini..." + echo " +[$DRIVER_NAME] +Description=An ODBC Driver for Apache Arrow Flight SQL +Driver=$ODBC_64BIT +" >> "$USER_ODBCINST_FILE" +fi + +# Check if [ODBC Drivers] section exists +if grep -q '^\[ODBC Drivers\]' "$USER_ODBCINST_FILE"; then + # Section exists: check if driver entry exists + if ! grep -q "^${DRIVER_NAME}=" "$USER_ODBCINST_FILE"; then + # Driver entry does not exist, add under [ODBC Drivers] + sed -i '' "/^\[ODBC Drivers\]/a\\ +${DRIVER_NAME}=Installed +" "$USER_ODBCINST_FILE" + fi +else + # Section doesn't exist, append both section and driver entry at end + { + echo "" + echo "[ODBC Drivers]" + echo "${DRIVER_NAME}=Installed" + } >> "$USER_ODBCINST_FILE" +fi diff --git a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh new file mode 100755 index 00000000000..cfc9729ed7e --- /dev/null +++ b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh @@ -0,0 +1,82 @@ +#!/bin/sh +# +# 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. + +# GH-47876 TODO: create macOS ODBC Installer. +# Script for installing macOS ODBC driver, to be used for macOS installer. + +source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +odbc_install_script="${source_dir}/install_odbc.sh" + +chmod +x "$odbc_install_script" +. "$odbc_install_script" /Library/Apache/ArrowFlightSQLODBC/lib/libarrow_flight_sql_odbc.dylib + +USER_ODBC_FILE="$HOME/Library/ODBC/odbc.ini" +DRIVER_NAME="Apache Arrow Flight SQL ODBC Driver" +DSN_NAME="Apache Arrow Flight SQL ODBC DSN" + +touch "$USER_ODBC_FILE" + +if [ $EUID -ne 0 ]; then + echo "Please run this script with sudo" + exit 1 +fi + +if grep -q "^\[$DSN_NAME\]" "$USER_ODBC_FILE"; then + echo "DSN [$DSN_NAME] already exists in $USER_ODBC_FILE" +else + echo "Adding [$DSN_NAME] to $USER_ODBC_FILE..." + cat >> "$USER_ODBC_FILE" < "${USER_ODBC_FILE}.tmp" && mv "${USER_ODBC_FILE}.tmp" "$USER_ODBC_FILE" + fi +else + # Section doesn't exist, append section and DSN entry at end + { + echo "" + echo "[ODBC Data Sources]" + echo "${DSN_NAME}=${DRIVER_NAME}" + } >> "$USER_ODBC_FILE" +fi + From c64342b4ab8622545bc3b617916f803f2988155f Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Tue, 6 Jan 2026 15:14:06 -0800 Subject: [PATCH 2/3] Apply suggestions from David - Moved admin check upwards - removed sourcing of script that isn't required --- .../flight/sql/odbc/install/mac/install_odbc.sh | 16 +++++++++------- .../sql/odbc/install/mac/install_odbc_ini.sh | 17 ++++++++++------- 2 files changed, 19 insertions(+), 14 deletions(-) mode change 100644 => 100755 cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh diff --git a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh old mode 100644 new mode 100755 index 0916bff0845..cf96255b715 --- a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh +++ b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh @@ -17,7 +17,15 @@ # specific language governing permissions and limitations # under the License. -# Used by macOS ODBC installer script and macOS ODBC testing +# Used by macOS ODBC installer script `install_odbc_ini.sh` and macOS ODBC testing + +set -euo pipefail + +# Admin privilege is needed to add ODBC driver registration +if [ $EUID -ne 0 ]; then + echo "Please run this script with sudo" + exit 1 +fi ODBC_64BIT="$1" @@ -40,12 +48,6 @@ mkdir -p $HOME/Library/ODBC touch "$USER_ODBCINST_FILE" -# Admin privilege is needed to add ODBC driver registration -if [ $EUID -ne 0 ]; then - echo "Please run this script with sudo" - exit 1 -fi - if grep -q "^\[$DRIVER_NAME\]" "$USER_ODBCINST_FILE"; then echo "Driver [$DRIVER_NAME] already exists in odbcinst.ini" else diff --git a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh index cfc9729ed7e..0385453a720 100755 --- a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh +++ b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh @@ -19,13 +19,21 @@ # GH-47876 TODO: create macOS ODBC Installer. # Script for installing macOS ODBC driver, to be used for macOS installer. +# This script assumes ODBC driver is at +# /Library/ODBC/arrow-odbc/libarrow_flight_sql_odbc.dylib + +set -euo pipefail + +if [ $EUID -ne 0 ]; then + echo "Please run this script with sudo" + exit 1 +fi source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" odbc_install_script="${source_dir}/install_odbc.sh" -chmod +x "$odbc_install_script" -. "$odbc_install_script" /Library/Apache/ArrowFlightSQLODBC/lib/libarrow_flight_sql_odbc.dylib +"$odbc_install_script" /Library/ODBC/arrow-odbc/libarrow_flight_sql_odbc.dylib USER_ODBC_FILE="$HOME/Library/ODBC/odbc.ini" DRIVER_NAME="Apache Arrow Flight SQL ODBC Driver" @@ -33,11 +41,6 @@ DSN_NAME="Apache Arrow Flight SQL ODBC DSN" touch "$USER_ODBC_FILE" -if [ $EUID -ne 0 ]; then - echo "Please run this script with sudo" - exit 1 -fi - if grep -q "^\[$DSN_NAME\]" "$USER_ODBC_FILE"; then echo "DSN [$DSN_NAME] already exists in $USER_ODBC_FILE" else From 3d97d657e4700ab0501b1002ddc5c82ce51114c7 Mon Sep 17 00:00:00 2001 From: "Alina (Xi) Li" Date: Wed, 7 Jan 2026 14:12:36 -0800 Subject: [PATCH 3/3] Use `#!/bin/bash` for scripts The scripts assume bash shells on macOS are used. --- cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh | 2 +- cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh index cf96255b715..0e2e626b79f 100755 --- a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh +++ b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file diff --git a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh index 0385453a720..652034f4946 100755 --- a/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh +++ b/cpp/src/arrow/flight/sql/odbc/install/mac/install_odbc_ini.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file