Skip to content

Commit bc78dc8

Browse files
authored
mac changes (#92)
added changes to build in MacOS
1 parent 2e16dd0 commit bc78dc8

File tree

12 files changed

+100
-87
lines changed

12 files changed

+100
-87
lines changed

cpp/cmake_modules/DefineOptions.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ macro(tsort_bool_option_dependencies)
107107
endmacro()
108108

109109
macro(resolve_option_dependencies)
110-
# Arrow Flight SQL ODBC is available only for Windows for now.
111-
if(NOT WIN32)
110+
# Arrow Flight SQL ODBC is available only for Windows and macOS for now.
111+
if(NOT WIN32 AND NOT APPLE)
112112
set(ARROW_FLIGHT_SQL_ODBC OFF)
113113
endif()
114114
if(MSVC_TOOLCHAIN)

cpp/src/arrow/flight/sql/odbc/flight_sql/CMakeLists.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
add_library(arrow_odbc_spi_impl
1919
include/flight_sql/flight_sql_driver.h
20+
include/flight_sql/config/configuration.h
21+
include/flight_sql/config/connection_string_parser.h
2022
accessors/binary_array_accessor.cc
2123
accessors/binary_array_accessor.h
2224
accessors/boolean_array_accessor.cc
@@ -76,8 +78,8 @@ add_library(arrow_odbc_spi_impl
7678
scalar_function_reporter.h
7779
system_trust_store.cc
7880
system_trust_store.h
79-
system_dsn.cc
80-
system_dsn.h
81+
config/configuration.cc
82+
config/connection_string_parser.cc
8183
utils.cc)
8284
target_include_directories(arrow_odbc_spi_impl
8385
PUBLIC include include/flight_sql
@@ -86,26 +88,24 @@ target_include_directories(arrow_odbc_spi_impl PUBLIC ${CMAKE_CURRENT_LIST_DIR})
8688

8789
if(WIN32)
8890
target_sources(arrow_odbc_spi_impl
89-
PRIVATE include/flight_sql/config/configuration.h
90-
include/flight_sql/config/connection_string_parser.h
91-
include/flight_sql/ui/add_property_window.h
91+
PRIVATE include/flight_sql/ui/add_property_window.h
9292
include/flight_sql/ui/custom_window.h
9393
include/flight_sql/ui/dsn_configuration_window.h
9494
include/flight_sql/ui/window.h
95-
config/configuration.cc
96-
config/connection_string_parser.cc
9795
ui/custom_window.cc
9896
ui/window.cc
9997
ui/dsn_configuration_window.cc
10098
ui/add_property_window.cc
101-
win_system_dsn.cc)
99+
win_system_dsn.cc
100+
system_dsn.cc
101+
system_dsn.h)
102102
endif()
103103

104104
target_link_libraries(arrow_odbc_spi_impl PUBLIC odbcabstraction arrow_flight_sql_shared
105105
arrow_compute_shared Boost::locale)
106106

107107
# Link libraries on MINGW64 only
108-
if(MINGW AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
108+
if((MINGW AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR APPLE)
109109
target_link_libraries(arrow_odbc_spi_impl PUBLIC ${ODBCINST})
110110
endif()
111111

cpp/src/arrow/flight/sql/odbc/flight_sql/address_info.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717

1818
#include "arrow/flight/sql/odbc/flight_sql/address_info.h"
19+
#include <cstdint>
1920

2021
namespace driver {
2122

@@ -34,7 +35,7 @@ bool AddressInfo::GetAddressInfo(const std::string& host, char* host_name_info,
3435
}
3536

3637
error = getnameinfo(addrinfo_result_->ai_addr, addrinfo_result_->ai_addrlen,
37-
host_name_info, static_cast<DWORD>(max_host), NULL, 0, 0);
38+
host_name_info, static_cast<uint32_t>(max_host), NULL, 0, 0);
3839
return error == 0;
3940
}
4041

cpp/src/arrow/flight/sql/odbc/flight_sql/include/flight_sql/config/configuration.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@
2222
#include "arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/platform.h"
2323
#include "arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/spi/connection.h"
2424

25+
#if defined _WIN32 || defined _WIN64
2526
// winuser.h needs to be included after windows.h, which is defined in platform.h
26-
#include <winuser.h>
27+
# include <winuser.h>
28+
#endif
29+
2730
namespace driver {
2831
namespace flight_sql {
2932
namespace config {

cpp/src/arrow/flight/sql/odbc/tests/columns_test.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2333,7 +2333,7 @@ TEST_F(FlightSQLODBCMockTestBase, SQLDescribeColValidateInput) {
23332333
SQLUSMALLINT outOfRangeColumn = 4;
23342334
SQLUSMALLINT negativeColumn = -1;
23352335
SQLWCHAR columnName[1024];
2336-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2336+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
23372337
SQLSMALLINT nameLength = 0;
23382338
SQLSMALLINT dataType = 0;
23392339
SQLULEN columnSize = 0;
@@ -2378,7 +2378,7 @@ TEST_F(FlightSQLODBCMockTestBase, SQLDescribeColQueryAllDataTypesMetadata) {
23782378
this->connect();
23792379

23802380
SQLWCHAR columnName[1024];
2381-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2381+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
23822382
SQLSMALLINT nameLength = 0;
23832383
SQLSMALLINT columnDataType = 0;
23842384
SQLULEN columnSize = 0;
@@ -2454,7 +2454,7 @@ TEST_F(FlightSQLODBCRemoteTestBase, SQLDescribeColQueryAllDataTypesMetadata) {
24542454
this->connect();
24552455

24562456
SQLWCHAR columnName[1024];
2457-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2457+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
24582458
SQLSMALLINT nameLength = 0;
24592459
SQLSMALLINT columnDataType = 0;
24602460
SQLULEN columnSize = 0;
@@ -2537,7 +2537,7 @@ TEST_F(FlightSQLODBCRemoteTestBase, SQLDescribeColODBCTestTableMetadata) {
25372537
this->connect();
25382538

25392539
SQLWCHAR columnName[1024];
2540-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2540+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
25412541
SQLSMALLINT nameLength = 0;
25422542
SQLSMALLINT columnDataType = 0;
25432543
SQLULEN columnSize = 0;
@@ -2599,7 +2599,7 @@ TEST_F(FlightSQLODBCRemoteTestBase, SQLDescribeColODBCTestTableMetadataODBC2) {
25992599
this->connect(SQL_OV_ODBC2);
26002600

26012601
SQLWCHAR columnName[1024];
2602-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2602+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
26032603
SQLSMALLINT nameLength = 0;
26042604
SQLSMALLINT columnDataType = 0;
26052605
SQLULEN columnSize = 0;
@@ -2661,7 +2661,7 @@ TEST_F(FlightSQLODBCMockTestBase, SQLDescribeColAllTypesTableMetadata) {
26612661
this->CreateTableAllDataType();
26622662

26632663
SQLWCHAR columnName[1024];
2664-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2664+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
26652665
SQLSMALLINT nameLength = 0;
26662666
SQLSMALLINT columnDataType = 0;
26672667
SQLULEN columnSize = 0;
@@ -2717,7 +2717,7 @@ TEST_F(FlightSQLODBCMockTestBase, SQLDescribeColUnicodeTableMetadata) {
27172717
this->CreateUnicodeTable();
27182718

27192719
SQLWCHAR columnName[1024];
2720-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2720+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
27212721
SQLSMALLINT nameLength = 0;
27222722
SQLSMALLINT columnDataType = 0;
27232723
SQLULEN columnSize = 0;
@@ -2761,7 +2761,7 @@ TYPED_TEST(FlightSQLODBCTestBase, SQLColumnsGetMetadataBySQLDescribeCol) {
27612761
this->connect();
27622762

27632763
SQLWCHAR columnName[1024];
2764-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2764+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
27652765
SQLSMALLINT nameLength = 0;
27662766
SQLSMALLINT columnDataType = 0;
27672767
SQLULEN columnSize = 0;
@@ -2821,7 +2821,7 @@ TYPED_TEST(FlightSQLODBCTestBase, SQLColumnsGetMetadataBySQLDescribeColODBC2) {
28212821
this->connect(SQL_OV_ODBC2);
28222822

28232823
SQLWCHAR columnName[1024];
2824-
constexpr SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
2824+
SQLINTEGER bufCharLen = sizeof(columnName) / ODBC::GetSqlWCharSize();
28252825
SQLSMALLINT nameLength = 0;
28262826
SQLSMALLINT columnDataType = 0;
28272827
SQLULEN columnSize = 0;

cpp/src/arrow/flight/sql/odbc/tests/connection_info_test.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLGetInfoDataSourceName) {
187187
this->disconnect();
188188
}
189189

190+
#ifdef SQL_DRIVER_AWARE_POOLING_SUPPORTED
190191
TYPED_TEST(FlightSQLODBCTestBase, TestSQLGetInfoDriverAwarePoolingSupported) {
191192
// A driver does not need to implement SQL_DRIVER_AWARE_POOLING_SUPPORTED and the
192193
// Driver Manager will not honor to the driver's return value.
@@ -197,6 +198,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLGetInfoDriverAwarePoolingSupported) {
197198

198199
this->disconnect();
199200
}
201+
#endif
200202

201203
// These information types are implemented by the Driver Manager alone.
202204
TYPED_TEST(FlightSQLODBCTestBase, TestSQLGetInfoDriverHdbc) {

cpp/src/arrow/flight/sql/odbc/tests/connection_test.cc

Lines changed: 55 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLDriverConnect) {
379379
EXPECT_EQ(ret, SQL_SUCCESS);
380380
}
381381

382+
#if defined _WIN32 || defined _WIN64
382383
TYPED_TEST(FlightSQLODBCTestBase, TestSQLDriverConnectDsn) {
383384
// ODBC Environment
384385
SQLHENV env;
@@ -452,58 +453,6 @@ TYPED_TEST(FlightSQLODBCTestBase, TestSQLDriverConnectDsn) {
452453
EXPECT_EQ(ret, SQL_SUCCESS);
453454
}
454455

455-
TEST_F(FlightSQLODBCRemoteTestBase, TestSQLDriverConnectInvalidUid) {
456-
// ODBC Environment
457-
SQLHENV env;
458-
SQLHDBC conn;
459-
460-
// Allocate an environment handle
461-
SQLRETURN ret = SQLAllocEnv(&env);
462-
463-
EXPECT_EQ(ret, SQL_SUCCESS);
464-
465-
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
466-
467-
EXPECT_EQ(ret, SQL_SUCCESS);
468-
469-
// Allocate a connection using alloc handle
470-
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &conn);
471-
472-
EXPECT_EQ(ret, SQL_SUCCESS);
473-
474-
// Invalid connect string
475-
std::string connect_str = getInvalidConnectionString();
476-
477-
ASSERT_OK_AND_ASSIGN(std::wstring wconnect_str,
478-
arrow::util::UTF8ToWideString(connect_str));
479-
std::vector<SQLWCHAR> connect_str0(wconnect_str.begin(), wconnect_str.end());
480-
481-
SQLWCHAR outstr[ODBC_BUFFER_SIZE];
482-
SQLSMALLINT outstrlen;
483-
484-
// Connecting to ODBC server.
485-
ret = SQLDriverConnect(conn, NULL, &connect_str0[0],
486-
static_cast<SQLSMALLINT>(connect_str0.size()), outstr,
487-
ODBC_BUFFER_SIZE, &outstrlen, SQL_DRIVER_NOPROMPT);
488-
489-
EXPECT_TRUE(ret == SQL_ERROR);
490-
491-
VerifyOdbcErrorState(SQL_HANDLE_DBC, conn, error_state_28000);
492-
493-
std::string out_connection_string = ODBC::SqlWcharToString(outstr, outstrlen);
494-
EXPECT_TRUE(out_connection_string.empty());
495-
496-
// Free connection handle
497-
ret = SQLFreeHandle(SQL_HANDLE_DBC, conn);
498-
499-
EXPECT_EQ(ret, SQL_SUCCESS);
500-
501-
// Free environment handle
502-
ret = SQLFreeHandle(SQL_HANDLE_ENV, env);
503-
504-
EXPECT_EQ(ret, SQL_SUCCESS);
505-
}
506-
507456
TYPED_TEST(FlightSQLODBCTestBase, TestSQLConnect) {
508457
// ODBC Environment
509458
SQLHENV env;
@@ -791,6 +740,60 @@ TEST_F(FlightSQLODBCRemoteTestBase, TestSQLConnectDSNPrecedence) {
791740
EXPECT_EQ(ret, SQL_SUCCESS);
792741
}
793742

743+
#endif
744+
745+
TEST_F(FlightSQLODBCRemoteTestBase, TestSQLDriverConnectInvalidUid) {
746+
// ODBC Environment
747+
SQLHENV env;
748+
SQLHDBC conn;
749+
750+
// Allocate an environment handle
751+
SQLRETURN ret = SQLAllocEnv(&env);
752+
753+
EXPECT_EQ(ret, SQL_SUCCESS);
754+
755+
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
756+
757+
EXPECT_EQ(ret, SQL_SUCCESS);
758+
759+
// Allocate a connection using alloc handle
760+
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &conn);
761+
762+
EXPECT_EQ(ret, SQL_SUCCESS);
763+
764+
// Invalid connect string
765+
std::string connect_str = getInvalidConnectionString();
766+
767+
ASSERT_OK_AND_ASSIGN(std::wstring wconnect_str,
768+
arrow::util::UTF8ToWideString(connect_str));
769+
std::vector<SQLWCHAR> connect_str0(wconnect_str.begin(), wconnect_str.end());
770+
771+
SQLWCHAR outstr[ODBC_BUFFER_SIZE];
772+
SQLSMALLINT outstrlen;
773+
774+
// Connecting to ODBC server.
775+
ret = SQLDriverConnect(conn, NULL, &connect_str0[0],
776+
static_cast<SQLSMALLINT>(connect_str0.size()), outstr,
777+
ODBC_BUFFER_SIZE, &outstrlen, SQL_DRIVER_NOPROMPT);
778+
779+
EXPECT_TRUE(ret == SQL_ERROR);
780+
781+
VerifyOdbcErrorState(SQL_HANDLE_DBC, conn, error_state_28000);
782+
783+
std::string out_connection_string = ODBC::SqlWcharToString(outstr, outstrlen);
784+
EXPECT_TRUE(out_connection_string.empty());
785+
786+
// Free connection handle
787+
ret = SQLFreeHandle(SQL_HANDLE_DBC, conn);
788+
789+
EXPECT_EQ(ret, SQL_SUCCESS);
790+
791+
// Free environment handle
792+
ret = SQLFreeHandle(SQL_HANDLE_ENV, env);
793+
794+
EXPECT_EQ(ret, SQL_SUCCESS);
795+
}
796+
794797
TEST(SQLDisconnect, TestSQLDisconnectWithoutConnection) {
795798
// ODBC Environment
796799
SQLHENV env;

cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,9 @@ std::string GetOdbcErrorMessage(SQLSMALLINT handle_type, SQLHANDLE handle) {
396396
return res;
397397
}
398398

399+
// TODO: once RegisterDsn is implemented in Mac and Linux, the following can be
400+
// re-enabled.
401+
#if defined _WIN32 || defined _WIN64
399402
bool writeDSN(std::string connection_str) {
400403
Connection::ConnPropertyMap properties;
401404

@@ -420,6 +423,7 @@ bool writeDSN(Connection::ConnPropertyMap properties) {
420423
std::wstring wDriver = arrow::util::UTF8ToWideString(driver).ValueOr(L"");
421424
return RegisterDsn(config, wDriver.c_str());
422425
}
426+
#endif
423427

424428
std::wstring ConvertToWString(const std::vector<SQLWCHAR>& strVal, SQLSMALLINT strLen) {
425429
std::wstring attrStr;

0 commit comments

Comments
 (0)