diff --git a/cpp/cmake_modules/DefineOptions.cmake b/cpp/cmake_modules/DefineOptions.cmake index 1b28f70f4ce0..234b9b177cb2 100644 --- a/cpp/cmake_modules/DefineOptions.cmake +++ b/cpp/cmake_modules/DefineOptions.cmake @@ -107,8 +107,8 @@ macro(tsort_bool_option_dependencies) endmacro() macro(resolve_option_dependencies) - # Arrow Flight SQL ODBC is available only for Windows for now. - if(NOT WIN32) + # Arrow Flight SQL ODBC is available only for Windows and macOS for now. + if(NOT WIN32 AND NOT APPLE) set(ARROW_FLIGHT_SQL_ODBC OFF) endif() if(MSVC_TOOLCHAIN) diff --git a/cpp/src/arrow/flight/sql/odbc/flight_sql/CMakeLists.txt b/cpp/src/arrow/flight/sql/odbc/flight_sql/CMakeLists.txt index bd876804279c..73e80b4570f2 100644 --- a/cpp/src/arrow/flight/sql/odbc/flight_sql/CMakeLists.txt +++ b/cpp/src/arrow/flight/sql/odbc/flight_sql/CMakeLists.txt @@ -17,6 +17,8 @@ add_library(arrow_odbc_spi_impl include/flight_sql/flight_sql_driver.h + include/flight_sql/config/configuration.h + include/flight_sql/config/connection_string_parser.h accessors/binary_array_accessor.cc accessors/binary_array_accessor.h accessors/boolean_array_accessor.cc @@ -76,8 +78,8 @@ add_library(arrow_odbc_spi_impl scalar_function_reporter.h system_trust_store.cc system_trust_store.h - system_dsn.cc - system_dsn.h + config/configuration.cc + config/connection_string_parser.cc utils.cc) target_include_directories(arrow_odbc_spi_impl PUBLIC include include/flight_sql @@ -86,26 +88,24 @@ target_include_directories(arrow_odbc_spi_impl PUBLIC ${CMAKE_CURRENT_LIST_DIR}) if(WIN32) target_sources(arrow_odbc_spi_impl - PRIVATE include/flight_sql/config/configuration.h - include/flight_sql/config/connection_string_parser.h - include/flight_sql/ui/add_property_window.h + PRIVATE include/flight_sql/ui/add_property_window.h include/flight_sql/ui/custom_window.h include/flight_sql/ui/dsn_configuration_window.h include/flight_sql/ui/window.h - config/configuration.cc - config/connection_string_parser.cc ui/custom_window.cc ui/window.cc ui/dsn_configuration_window.cc ui/add_property_window.cc - win_system_dsn.cc) + win_system_dsn.cc + system_dsn.cc + system_dsn.h) endif() target_link_libraries(arrow_odbc_spi_impl PUBLIC odbcabstraction arrow_flight_sql_shared arrow_compute_shared Boost::locale) # Link libraries on MINGW64 only -if(MINGW AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +if((MINGW AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR APPLE) target_link_libraries(arrow_odbc_spi_impl PUBLIC ${ODBCINST}) endif() diff --git a/cpp/src/arrow/flight/sql/odbc/flight_sql/address_info.cc b/cpp/src/arrow/flight/sql/odbc/flight_sql/address_info.cc index 9d782c57e961..4ee03bfec85f 100644 --- a/cpp/src/arrow/flight/sql/odbc/flight_sql/address_info.cc +++ b/cpp/src/arrow/flight/sql/odbc/flight_sql/address_info.cc @@ -16,6 +16,7 @@ // under the License. #include "arrow/flight/sql/odbc/flight_sql/address_info.h" +#include namespace driver { @@ -34,7 +35,7 @@ bool AddressInfo::GetAddressInfo(const std::string& host, char* host_name_info, } error = getnameinfo(addrinfo_result_->ai_addr, addrinfo_result_->ai_addrlen, - host_name_info, static_cast(max_host), NULL, 0, 0); + host_name_info, static_cast(max_host), NULL, 0, 0); return error == 0; } diff --git a/cpp/src/arrow/flight/sql/odbc/flight_sql/include/flight_sql/config/configuration.h b/cpp/src/arrow/flight/sql/odbc/flight_sql/include/flight_sql/config/configuration.h index c94cc5b78328..91471db0cbb1 100644 --- a/cpp/src/arrow/flight/sql/odbc/flight_sql/include/flight_sql/config/configuration.h +++ b/cpp/src/arrow/flight/sql/odbc/flight_sql/include/flight_sql/config/configuration.h @@ -22,8 +22,11 @@ #include "arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/platform.h" #include "arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/spi/connection.h" +#if defined _WIN32 || defined _WIN64 // winuser.h needs to be included after windows.h, which is defined in platform.h -#include +# include +#endif + namespace driver { namespace flight_sql { namespace config { diff --git a/cpp/src/arrow/flight/sql/odbc/tests/columns_test.cc b/cpp/src/arrow/flight/sql/odbc/tests/columns_test.cc index 60a8e2515760..4c6611ac1e19 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/columns_test.cc +++ b/cpp/src/arrow/flight/sql/odbc/tests/columns_test.cc @@ -2333,7 +2333,7 @@ TEST_F(FlightSQLODBCMockTestBase, SQLDescribeColValidateInput) { SQLUSMALLINT outOfRangeColumn = 4; SQLUSMALLINT negativeColumn = -1; SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT dataType = 0; SQLULEN columnSize = 0; @@ -2378,7 +2378,7 @@ TEST_F(FlightSQLODBCMockTestBase, SQLDescribeColQueryAllDataTypesMetadata) { this->connect(); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; @@ -2454,7 +2454,7 @@ TEST_F(FlightSQLODBCRemoteTestBase, SQLDescribeColQueryAllDataTypesMetadata) { this->connect(); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; @@ -2537,7 +2537,7 @@ TEST_F(FlightSQLODBCRemoteTestBase, SQLDescribeColODBCTestTableMetadata) { this->connect(); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; @@ -2599,7 +2599,7 @@ TEST_F(FlightSQLODBCRemoteTestBase, SQLDescribeColODBCTestTableMetadataODBC2) { this->connect(SQL_OV_ODBC2); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; @@ -2661,7 +2661,7 @@ TEST_F(FlightSQLODBCMockTestBase, SQLDescribeColAllTypesTableMetadata) { this->CreateTableAllDataType(); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; @@ -2717,7 +2717,7 @@ TEST_F(FlightSQLODBCMockTestBase, SQLDescribeColUnicodeTableMetadata) { this->CreateUnicodeTable(); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; @@ -2761,7 +2761,7 @@ TYPED_TEST(FlightSQLODBCTestBase, SQLColumnsGetMetadataBySQLDescribeCol) { this->connect(); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; @@ -2821,7 +2821,7 @@ TYPED_TEST(FlightSQLODBCTestBase, SQLColumnsGetMetadataBySQLDescribeColODBC2) { this->connect(SQL_OV_ODBC2); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; diff --git a/cpp/src/arrow/flight/sql/odbc/tests/connection_info_test.cc b/cpp/src/arrow/flight/sql/odbc/tests/connection_info_test.cc index 39bf7e1440b1..6bd4a37490d0 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/connection_info_test.cc +++ b/cpp/src/arrow/flight/sql/odbc/tests/connection_info_test.cc @@ -187,6 +187,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLGetInfoDataSourceName) { this->disconnect(); } +#ifdef SQL_DRIVER_AWARE_POOLING_SUPPORTED TYPED_TEST(FlightSQLODBCTestBase, TestSQLGetInfoDriverAwarePoolingSupported) { // A driver does not need to implement SQL_DRIVER_AWARE_POOLING_SUPPORTED and the // Driver Manager will not honor to the driver's return value. @@ -197,6 +198,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLGetInfoDriverAwarePoolingSupported) { this->disconnect(); } +#endif // These information types are implemented by the Driver Manager alone. TYPED_TEST(FlightSQLODBCTestBase, TestSQLGetInfoDriverHdbc) { diff --git a/cpp/src/arrow/flight/sql/odbc/tests/connection_test.cc b/cpp/src/arrow/flight/sql/odbc/tests/connection_test.cc index 5bf737d55182..21d4ef4f8b5f 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/connection_test.cc +++ b/cpp/src/arrow/flight/sql/odbc/tests/connection_test.cc @@ -379,6 +379,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLDriverConnect) { EXPECT_EQ(ret, SQL_SUCCESS); } +#if defined _WIN32 || defined _WIN64 TYPED_TEST(FlightSQLODBCTestBase, TestSQLDriverConnectDsn) { // ODBC Environment SQLHENV env; @@ -452,58 +453,6 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLDriverConnectDsn) { EXPECT_EQ(ret, SQL_SUCCESS); } -TEST_F(FlightSQLODBCRemoteTestBase, TestSQLDriverConnectInvalidUid) { - // ODBC Environment - SQLHENV env; - SQLHDBC conn; - - // Allocate an environment handle - SQLRETURN ret = SQLAllocEnv(&env); - - EXPECT_EQ(ret, SQL_SUCCESS); - - ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); - - EXPECT_EQ(ret, SQL_SUCCESS); - - // Allocate a connection using alloc handle - ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &conn); - - EXPECT_EQ(ret, SQL_SUCCESS); - - // Invalid connect string - std::string connect_str = getInvalidConnectionString(); - - ASSERT_OK_AND_ASSIGN(std::wstring wconnect_str, - arrow::util::UTF8ToWideString(connect_str)); - std::vector connect_str0(wconnect_str.begin(), wconnect_str.end()); - - SQLWCHAR outstr[ODBC_BUFFER_SIZE]; - SQLSMALLINT outstrlen; - - // Connecting to ODBC server. - ret = SQLDriverConnect(conn, NULL, &connect_str0[0], - static_cast(connect_str0.size()), outstr, - ODBC_BUFFER_SIZE, &outstrlen, SQL_DRIVER_NOPROMPT); - - EXPECT_TRUE(ret == SQL_ERROR); - - VerifyOdbcErrorState(SQL_HANDLE_DBC, conn, error_state_28000); - - std::string out_connection_string = ODBC::SqlWcharToString(outstr, outstrlen); - EXPECT_TRUE(out_connection_string.empty()); - - // Free connection handle - ret = SQLFreeHandle(SQL_HANDLE_DBC, conn); - - EXPECT_EQ(ret, SQL_SUCCESS); - - // Free environment handle - ret = SQLFreeHandle(SQL_HANDLE_ENV, env); - - EXPECT_EQ(ret, SQL_SUCCESS); -} - TYPED_TEST(FlightSQLODBCTestBase, TestSQLConnect) { // ODBC Environment SQLHENV env; @@ -791,6 +740,60 @@ TEST_F(FlightSQLODBCRemoteTestBase, TestSQLConnectDSNPrecedence) { EXPECT_EQ(ret, SQL_SUCCESS); } +#endif + +TEST_F(FlightSQLODBCRemoteTestBase, TestSQLDriverConnectInvalidUid) { + // ODBC Environment + SQLHENV env; + SQLHDBC conn; + + // Allocate an environment handle + SQLRETURN ret = SQLAllocEnv(&env); + + EXPECT_EQ(ret, SQL_SUCCESS); + + ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); + + EXPECT_EQ(ret, SQL_SUCCESS); + + // Allocate a connection using alloc handle + ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &conn); + + EXPECT_EQ(ret, SQL_SUCCESS); + + // Invalid connect string + std::string connect_str = getInvalidConnectionString(); + + ASSERT_OK_AND_ASSIGN(std::wstring wconnect_str, + arrow::util::UTF8ToWideString(connect_str)); + std::vector connect_str0(wconnect_str.begin(), wconnect_str.end()); + + SQLWCHAR outstr[ODBC_BUFFER_SIZE]; + SQLSMALLINT outstrlen; + + // Connecting to ODBC server. + ret = SQLDriverConnect(conn, NULL, &connect_str0[0], + static_cast(connect_str0.size()), outstr, + ODBC_BUFFER_SIZE, &outstrlen, SQL_DRIVER_NOPROMPT); + + EXPECT_TRUE(ret == SQL_ERROR); + + VerifyOdbcErrorState(SQL_HANDLE_DBC, conn, error_state_28000); + + std::string out_connection_string = ODBC::SqlWcharToString(outstr, outstrlen); + EXPECT_TRUE(out_connection_string.empty()); + + // Free connection handle + ret = SQLFreeHandle(SQL_HANDLE_DBC, conn); + + EXPECT_EQ(ret, SQL_SUCCESS); + + // Free environment handle + ret = SQLFreeHandle(SQL_HANDLE_ENV, env); + + EXPECT_EQ(ret, SQL_SUCCESS); +} + TEST(SQLDisconnect, TestSQLDisconnectWithoutConnection) { // ODBC Environment SQLHENV env; 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 bb92bee0713d..c8623887ae29 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 @@ -396,6 +396,9 @@ std::string GetOdbcErrorMessage(SQLSMALLINT handle_type, SQLHANDLE handle) { return res; } +// TODO: once RegisterDsn is implemented in Mac and Linux, the following can be +// re-enabled. +#if defined _WIN32 || defined _WIN64 bool writeDSN(std::string connection_str) { Connection::ConnPropertyMap properties; @@ -420,6 +423,7 @@ bool writeDSN(Connection::ConnPropertyMap properties) { std::wstring wDriver = arrow::util::UTF8ToWideString(driver).ValueOr(L""); return RegisterDsn(config, wDriver.c_str()); } +#endif std::wstring ConvertToWString(const std::vector& strVal, SQLSMALLINT strLen) { std::wstring attrStr; diff --git a/cpp/src/arrow/flight/sql/odbc/tests/statement_test.cc b/cpp/src/arrow/flight/sql/odbc/tests/statement_test.cc index 0d255101db39..aca7880ba784 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/statement_test.cc +++ b/cpp/src/arrow/flight/sql/odbc/tests/statement_test.cc @@ -347,7 +347,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLExecDirectDataQuery) { // WChar SQLWCHAR wchar_val[2]; - constexpr size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); + size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); buf_len = wchar_size * 2; ret = SQLGetData(this->stmt, 26, SQL_C_WCHAR, &wchar_val, buf_len, &ind); @@ -618,7 +618,7 @@ TEST_F(FlightSQLODBCRemoteTestBase, TestSQLExecDirectDataQueryDefaultType) { // Char will be fetched as wchar by default SQLWCHAR wchar_val[2]; - constexpr size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); + size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); buf_len = wchar_size * 2; ret = SQLGetData(this->stmt, 25, SQL_C_DEFAULT, &wchar_val, buf_len, &ind); @@ -1066,7 +1066,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLExecDirectWVarcharTruncation) { const int len = 28; SQLWCHAR wchar_val[len]; - constexpr size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); + size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); SQLLEN buf_len = wchar_size * len; SQLLEN ind; @@ -1267,7 +1267,7 @@ TEST_F(FlightSQLODBCMockTestBase, TestSQLExecDirectTruncationQueryNullIndicator) // WChar const int len2 = 28; SQLWCHAR wchar_val[len2]; - constexpr size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); + size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); buf_len = wchar_size * len2; ret = SQLGetData(this->stmt, 3, SQL_C_WCHAR, &wchar_val, buf_len, 0); @@ -1691,7 +1691,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLBindColDataQuery) { EXPECT_EQ(ret, SQL_SUCCESS); SQLWCHAR wchar_val[2]; - constexpr size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); + size_t wchar_size = driver::odbcabstraction::GetSqlWCharSize(); buf_len = wchar_size * 2; ret = SQLBindCol(this->stmt, 26, SQL_C_WCHAR, &wchar_val, buf_len, &ind); @@ -2270,7 +2270,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLNativeSqlReturnsInputString) { this->connect(); SQLWCHAR buf[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(buf) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(buf) / ODBC::GetSqlWCharSize(); SQLWCHAR inputStr[] = L"SELECT * FROM mytable WHERE id == 1"; SQLINTEGER inputCharLen = static_cast(wcslen(inputStr)); SQLINTEGER outputCharLen = 0; @@ -2295,7 +2295,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLNativeSqlReturnsNTSInputString) { this->connect(); SQLWCHAR buf[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(buf) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(buf) / ODBC::GetSqlWCharSize(); SQLWCHAR inputStr[] = L"SELECT * FROM mytable WHERE id == 1"; SQLINTEGER inputCharLen = static_cast(wcslen(inputStr)); SQLINTEGER outputCharLen = 0; @@ -2345,7 +2345,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLNativeSqlReturnsTruncatedString) { const SQLINTEGER smallBufSizeInChar = 11; SQLWCHAR smallBuf[smallBufSizeInChar]; - constexpr SQLINTEGER smallBufCharLen = sizeof(smallBuf) / ODBC::GetSqlWCharSize(); + SQLINTEGER smallBufCharLen = sizeof(smallBuf) / ODBC::GetSqlWCharSize(); SQLWCHAR inputStr[] = L"SELECT * FROM mytable WHERE id == 1"; SQLINTEGER inputCharLen = static_cast(wcslen(inputStr)); SQLINTEGER outputCharLen = 0; @@ -2376,7 +2376,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLNativeSqlReturnsErrorOnBadInputs) { this->connect(); SQLWCHAR buf[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(buf) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(buf) / ODBC::GetSqlWCharSize(); SQLWCHAR inputStr[] = L"SELECT * FROM mytable WHERE id == 1"; SQLINTEGER inputCharLen = static_cast(wcslen(inputStr)); SQLINTEGER outputCharLen = 0; diff --git a/cpp/src/arrow/flight/sql/odbc/tests/tables_test.cc b/cpp/src/arrow/flight/sql/odbc/tests/tables_test.cc index a6cbd38f8814..f9ac829dfaf4 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/tables_test.cc +++ b/cpp/src/arrow/flight/sql/odbc/tests/tables_test.cc @@ -579,7 +579,7 @@ TYPED_TEST(FlightSQLODBCTestBase, SQLTablesGetMetadataBySQLDescribeCol) { this->connect(); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; @@ -630,7 +630,7 @@ TYPED_TEST(FlightSQLODBCTestBase, SQLTablesGetMetadataBySQLDescribeColODBC2) { this->connect(SQL_OV_ODBC2); SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; diff --git a/cpp/src/arrow/flight/sql/odbc/tests/type_info_test.cc b/cpp/src/arrow/flight/sql/odbc/tests/type_info_test.cc index 29d737c38d6b..daffd4978720 100644 --- a/cpp/src/arrow/flight/sql/odbc/tests/type_info_test.cc +++ b/cpp/src/arrow/flight/sql/odbc/tests/type_info_test.cc @@ -37,7 +37,7 @@ void checkSQLDescribeCol(SQLHSTMT stmt, const SQLUSMALLINT columnIndex, const SQLSMALLINT& expectedDecimalDigits, const SQLSMALLINT& expectedNullable) { SQLWCHAR columnName[1024]; - constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); + SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize(); SQLSMALLINT nameLength = 0; SQLSMALLINT columnDataType = 0; SQLULEN columnSize = 0; diff --git a/cpp/src/arrow/vendored/whereami/whereami.cc b/cpp/src/arrow/vendored/whereami/whereami.cc index 945226193f99..94437361ec0c 100644 --- a/cpp/src/arrow/vendored/whereami/whereami.cc +++ b/cpp/src/arrow/vendored/whereami/whereami.cc @@ -159,7 +159,7 @@ WAI_NOINLINE WAI_FUNCSPEC int WAI_PREFIX(getModulePath)(char* out, int capacity, return length; } -#elif defined(__linux__) || defined(__CYGWIN__) || defined(__sun) || \ +#elif defined(__APPLE__) || defined(__linux__) || defined(__CYGWIN__) || defined(__sun) || \ defined(WAI_USE_PROC_SELF_EXE) # include