Skip to content

Commit eb7732b

Browse files
committed
Address feedback
1 parent fdaf063 commit eb7732b

3 files changed

Lines changed: 38 additions & 18 deletions

File tree

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ set(ARROW_FLIGHT_SQL_ODBC_TEST_SRCS
4242
# GH-46889: move protobuf_test_util to a more common location
4343
../../../../engine/substrait/protobuf_test_util.cc)
4444

45-
# Resolve segmentation fault error on Windows platform due to Arrow Compute Library Initialization
46-
if(WIN32)
47-
list(APPEND ARROW_FLIGHT_SQL_ODBC_TEST_SRCS ../../../../compute/test_env.cc)
48-
endif()
49-
5045
# GH-49651 Link ODBC tests statically on Linux and dynamically on macOS/Windows
5146
if(WIN32 OR APPLE)
5247
set(ARROW_FLIGHT_SQL_ODBC_TEST_LINK_LIBS arrow_flight_sql_odbc_shared

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

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
// with windows.h
2020
#include "arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h"
2121

22+
#include "arrow/compute/api.h"
2223
#include "arrow/flight/sql/odbc/tests/odbc_test_suite.h"
2324

2425
// For DSN registration
@@ -82,12 +83,28 @@ class OdbcTestEnvironment : public ::testing::Environment {
8283
}
8384
};
8485

86+
#ifdef _WIN32
87+
// A global test "environment", to ensure Arrow compute kernel functions are registered
88+
class ComputeKernelEnvironment : public ::testing::Environment {
89+
public:
90+
void SetUp() override { ASSERT_OK(arrow::compute::Initialize()); }
91+
};
92+
93+
::testing::Environment* compute_kernel_env =
94+
::testing::AddGlobalTestEnvironment(new ComputeKernelEnvironment);
95+
#endif // _WIN32
96+
8597
::testing::Environment* mock_server_env =
8698
::testing::AddGlobalTestEnvironment(new MockServerEnvironment);
8799

88100
::testing::Environment* odbc_test_env =
89101
::testing::AddGlobalTestEnvironment(new OdbcTestEnvironment);
90102

103+
SQLHENV FlightSQLOdbcEnvConnHandleRemoteTestBase::env_h = SQL_NULL_HENV;
104+
SQLHDBC FlightSQLOdbcEnvConnHandleRemoteTestBase::conn_h = SQL_NULL_HDBC;
105+
SQLHENV FlightSQLOdbcEnvConnHandleMockTestBase::env_h = SQL_NULL_HENV;
106+
SQLHDBC FlightSQLOdbcEnvConnHandleMockTestBase::conn_h = SQL_NULL_HDBC;
107+
91108
void ODBCTestBase::AllocEnvConnHandles(SQLHENV& env_handle, SQLHDBC& conn_handle,
92109
SQLINTEGER odbc_ver) {
93110
// Allocate an environment handle
@@ -250,20 +267,19 @@ void FlightSQLOdbcEnvConnHandleRemoteTestBase::SetUpTestSuite() {
250267
return;
251268
}
252269

253-
AllocEnvConnHandles(remote_non_connection_handles.env,
254-
remote_non_connection_handles.conn);
255-
env = remote_non_connection_handles.env;
256-
conn = remote_non_connection_handles.conn;
257-
stmt = remote_non_connection_handles.stmt;
270+
env_h = SQL_NULL_HENV;
271+
conn_h = SQL_NULL_HDBC;
272+
AllocEnvConnHandles(env_h, conn_h);
273+
env = env_h;
274+
conn = conn_h;
258275
}
259276

260277
void FlightSQLOdbcEnvConnHandleRemoteTestBase::TearDownTestSuite() {
261278
if (!RunningRemoteTests()) {
262279
return;
263280
}
264281

265-
FreeEnvConnHandles(remote_non_connection_handles.env,
266-
remote_non_connection_handles.conn);
282+
FreeEnvConnHandles(env_h, conn_h);
267283
}
268284

269285
std::string FindTokenInCallHeaders(const CallHeaders& incoming_headers) {
@@ -446,14 +462,15 @@ void FlightSQLOdbcV2MockTestBase::SetUpTestSuite() {
446462
}
447463

448464
void FlightSQLOdbcEnvConnHandleMockTestBase::SetUpTestSuite() {
449-
AllocEnvConnHandles(mock_non_connection_handles.env, mock_non_connection_handles.conn);
450-
env = mock_non_connection_handles.env;
451-
conn = mock_non_connection_handles.conn;
452-
stmt = mock_non_connection_handles.stmt;
465+
env_h = SQL_NULL_HENV;
466+
conn_h = SQL_NULL_HDBC;
467+
AllocEnvConnHandles(env_h, conn_h);
468+
env = env_h;
469+
conn = conn_h;
453470
}
454471

455472
void FlightSQLOdbcEnvConnHandleMockTestBase::TearDownTestSuite() {
456-
FreeEnvConnHandles(mock_non_connection_handles.env, mock_non_connection_handles.conn);
473+
FreeEnvConnHandles(env_h, conn_h);
457474
}
458475

459476
bool CompareConnPropertyMap(Connection::ConnPropertyMap map1,

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ inline OdbcHandles mock_odbcv3_handles;
7373
inline OdbcHandles mock_odbcv2_handles;
7474
inline OdbcHandles mock_non_connection_handles;
7575

76-
// These handles are meant to point to to the relevant handle above
76+
// These handles are meant to point to the relevant handle above
7777
// depending on the test fixture.
7878
inline SQLHENV env = SQL_NULL_HENV;
7979
inline SQLHDBC conn = SQL_NULL_HDBC;
@@ -142,6 +142,10 @@ class FlightSQLOdbcEnvConnHandleRemoteTestBase : public FlightSQLODBCRemoteTestB
142142
static void TearDownTestSuite();
143143
void SetUp() override {}
144144
void TearDown() override {}
145+
146+
private:
147+
static SQLHENV env_h;
148+
static SQLHDBC conn_h;
145149
};
146150

147151
static constexpr std::string_view kAuthorizationHeader = "authorization";
@@ -233,6 +237,10 @@ class FlightSQLOdbcEnvConnHandleMockTestBase : public FlightSQLODBCMockTestBase
233237
static void TearDownTestSuite();
234238
void SetUp() override {}
235239
void TearDown() override {}
240+
241+
private:
242+
static SQLHENV env_h;
243+
static SQLHDBC conn_h;
236244
};
237245

238246
/** ODBC read buffer size. */

0 commit comments

Comments
 (0)