Skip to content

Commit 65391da

Browse files
alinaliBQjusting-bq
andcommitted
Address code review comments
Co-Authored-By: justing-bq <[email protected]>
1 parent f427703 commit 65391da

File tree

2 files changed

+96
-28
lines changed

2 files changed

+96
-28
lines changed

cpp/src/arrow/flight/sql/odbc/odbc_api.cc

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ SQLRETURN SQLGetEnvAttr(SQLHENV env, SQLINTEGER attr, SQLPOINTER value_ptr,
101101
<< ", value_ptr: " << value_ptr << ", buffer_length: " << buffer_length
102102
<< ", str_len_ptr: " << static_cast<const void*>(str_len_ptr);
103103

104-
using driver::odbcabstraction::DriverException;
105104
using ODBC::ODBCEnvironment;
106105

107106
ODBCEnvironment* environment = reinterpret_cast<ODBCEnvironment*>(env);
@@ -159,7 +158,6 @@ SQLRETURN SQLSetEnvAttr(SQLHENV env, SQLINTEGER attr, SQLPOINTER value_ptr,
159158
ARROW_LOG(DEBUG) << "SQLSetEnvAttr called with env: " << env << ", attr: " << attr
160159
<< ", value_ptr: " << value_ptr << ", str_len: " << str_len;
161160

162-
using driver::odbcabstraction::DriverException;
163161
using ODBC::ODBCEnvironment;
164162

165163
ODBCEnvironment* environment = reinterpret_cast<ODBCEnvironment*>(env);

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

Lines changed: 96 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,67 +16,137 @@
1616
// under the License.
1717
#include "arrow/flight/sql/odbc/tests/odbc_test_suite.h"
1818

19-
#ifdef _WIN32
20-
# include <windows.h>
21-
#endif
19+
#include "arrow/flight/sql/odbc/odbc_impl/platform.h"
2220

2321
#include <sql.h>
2422
#include <sqltypes.h>
2523
#include <sqlucode.h>
2624

27-
#include "gmock/gmock.h"
28-
#include "gtest/gtest.h"
25+
#include <gtest/gtest.h>
2926

3027
namespace arrow::flight::sql::odbc {
3128

29+
template <typename T>
30+
class ConnectionTest : public T {
31+
public:
32+
using List = std::list<T>;
33+
};
34+
35+
class ConnectionRemoteTest : public FlightSQLODBCRemoteTestBase {};
36+
using TestTypes = ::testing::Types<FlightSQLODBCMockTestBase, ConnectionRemoteTest>;
37+
TYPED_TEST_SUITE(ConnectionTest, TestTypes);
38+
3239
TEST(SQLGetEnvAttr, TestSQLGetEnvAttrODBCVersion) {
33-
// ODBC Environment
3440
SQLHENV env;
3541

3642
SQLINTEGER version;
3743

3844
// Allocate an environment handle
39-
SQLRETURN return_env = SQLAllocEnv(&env);
40-
41-
EXPECT_EQ(SQL_SUCCESS, return_env);
45+
ASSERT_EQ(SQL_SUCCESS, SQLAllocEnv(&env));
4246

43-
SQLRETURN return_get = SQLGetEnvAttr(env, SQL_ATTR_ODBC_VERSION, &version, 0, 0);
47+
ASSERT_EQ(SQL_SUCCESS, SQLGetEnvAttr(env, SQL_ATTR_ODBC_VERSION, &version, 0, 0));
4448

45-
EXPECT_EQ(SQL_SUCCESS, return_get);
49+
ASSERT_EQ(SQL_OV_ODBC2, version);
4650

47-
EXPECT_EQ(SQL_OV_ODBC2, version);
51+
ASSERT_EQ(SQL_SUCCESS, SQLFreeEnv(env));
4852
}
4953

5054
TEST(SQLSetEnvAttr, TestSQLSetEnvAttrODBCVersionValid) {
51-
// ODBC Environment
5255
SQLHENV env;
5356

5457
// Allocate an environment handle
55-
SQLRETURN return_env = SQLAllocEnv(&env);
58+
ASSERT_EQ(SQL_SUCCESS, SQLAllocEnv(&env));
5659

57-
EXPECT_EQ(SQL_SUCCESS, return_env);
60+
// Attempt to set to supported version
61+
ASSERT_EQ(SQL_SUCCESS, SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION,
62+
reinterpret_cast<void*>(SQL_OV_ODBC2), 0));
5863

59-
// Attempt to set to unsupported version
60-
SQLRETURN return_set =
61-
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, reinterpret_cast<void*>(SQL_OV_ODBC2), 0);
64+
SQLINTEGER version;
65+
// Check ODBC version is set
66+
ASSERT_EQ(SQL_SUCCESS, SQLGetEnvAttr(env, SQL_ATTR_ODBC_VERSION, &version, 0, 0));
6267

63-
EXPECT_EQ(SQL_SUCCESS, return_set);
68+
ASSERT_EQ(SQL_OV_ODBC2, version);
69+
70+
ASSERT_EQ(SQL_SUCCESS, SQLFreeEnv(env));
6471
}
6572

6673
TEST(SQLSetEnvAttr, TestSQLSetEnvAttrODBCVersionInvalid) {
67-
// ODBC Environment
6874
SQLHENV env;
6975

7076
// Allocate an environment handle
71-
SQLRETURN return_env = SQLAllocEnv(&env);
72-
73-
EXPECT_EQ(SQL_SUCCESS, return_env);
77+
ASSERT_EQ(SQL_SUCCESS, SQLAllocEnv(&env));
7478

7579
// Attempt to set to unsupported version
76-
SQLRETURN return_set =
77-
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, reinterpret_cast<void*>(1), 0);
80+
ASSERT_EQ(SQL_ERROR,
81+
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, reinterpret_cast<void*>(1), 0));
82+
83+
ASSERT_EQ(SQL_SUCCESS, SQLFreeEnv(env));
84+
}
85+
86+
TYPED_TEST(ConnectionTest, TestSQLGetEnvAttrOutputNTS) {
87+
SQLINTEGER output_nts;
88+
89+
ASSERT_EQ(SQL_SUCCESS,
90+
SQLGetEnvAttr(this->env, SQL_ATTR_OUTPUT_NTS, &output_nts, 0, 0));
91+
92+
ASSERT_EQ(SQL_TRUE, output_nts);
93+
}
94+
95+
TYPED_TEST(ConnectionTest, DISABLED_TestSQLGetEnvAttrGetLength) {
96+
// Test is disabled because call to SQLGetEnvAttr is handled by the driver manager on
97+
// Windows. Windows driver manager ignores the length pointer.
98+
// This test case can be potentially used on macOS/Linux
99+
SQLINTEGER length;
100+
ASSERT_EQ(SQL_SUCCESS,
101+
SQLGetEnvAttr(this->env, SQL_ATTR_ODBC_VERSION, nullptr, 0, &length));
102+
103+
EXPECT_EQ(sizeof(SQLINTEGER), length);
104+
}
105+
106+
TYPED_TEST(ConnectionTest, DISABLED_TestSQLGetEnvAttrNullValuePointer) {
107+
// Test is disabled because call to SQLGetEnvAttr is handled by the driver manager on
108+
// Windows. The Windows driver manager doesn't error out when null pointer is passed.
109+
// This test case can be potentially used on macOS/Linux
110+
ASSERT_EQ(SQL_ERROR,
111+
SQLGetEnvAttr(this->env, SQL_ATTR_ODBC_VERSION, nullptr, 0, nullptr));
112+
}
113+
114+
TEST(SQLSetEnvAttr, TestSQLSetEnvAttrOutputNTSValid) {
115+
SQLHENV env;
116+
117+
// Allocate an environment handle
118+
ASSERT_EQ(SQL_SUCCESS, SQLAllocEnv(&env));
119+
120+
// Attempt to set to output nts to supported version
121+
ASSERT_EQ(SQL_SUCCESS, SQLSetEnvAttr(env, SQL_ATTR_OUTPUT_NTS,
122+
reinterpret_cast<void*>(SQL_TRUE), 0));
123+
124+
ASSERT_EQ(SQL_SUCCESS, SQLFreeEnv(env));
125+
}
126+
127+
TEST(SQLSetEnvAttr, TestSQLSetEnvAttrOutputNTSInvalid) {
128+
SQLHENV env;
129+
130+
// Allocate an environment handle
131+
ASSERT_EQ(SQL_SUCCESS, SQLAllocEnv(&env));
132+
133+
// Attempt to set to output nts to unsupported false
134+
ASSERT_EQ(SQL_ERROR, SQLSetEnvAttr(env, SQL_ATTR_OUTPUT_NTS,
135+
reinterpret_cast<void*>(SQL_FALSE), 0));
136+
137+
ASSERT_EQ(SQL_SUCCESS, SQLFreeEnv(env));
138+
}
139+
140+
TEST(SQLSetEnvAttr, TestSQLSetEnvAttrNullValuePointer) {
141+
SQLHENV env;
142+
143+
// Allocate an environment handle
144+
ASSERT_EQ(SQL_SUCCESS, SQLAllocEnv(&env));
145+
146+
// Attempt to set using bad data pointer
147+
ASSERT_EQ(SQL_ERROR, SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, nullptr, 0));
78148

79-
EXPECT_EQ(SQL_ERROR, return_set);
149+
ASSERT_EQ(SQL_SUCCESS, SQLFreeEnv(env));
80150
}
81151

82152
} // namespace arrow::flight::sql::odbc

0 commit comments

Comments
 (0)