Skip to content

Commit 76d06af

Browse files
committed
Update errors_test.cc
1 parent 17f2ff9 commit 76d06af

1 file changed

Lines changed: 42 additions & 23 deletions

File tree

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

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,12 @@ TYPED_TEST(ErrorsHandleTest, TestSQLGetDiagFieldWForConnectFailure) {
9292
SQLWCHAR message_text[kOdbcBufferSize];
9393
SQLSMALLINT message_text_length;
9494

95-
EXPECT_EQ(SQL_SUCCESS,
96-
SQLGetDiagField(SQL_HANDLE_DBC, this->conn, RECORD_1, SQL_DIAG_MESSAGE_TEXT,
97-
message_text, kOdbcBufferSize, &message_text_length));
95+
SQLRETURN ret =
96+
SQLGetDiagField(SQL_HANDLE_DBC, this->conn, RECORD_1, SQL_DIAG_MESSAGE_TEXT,
97+
message_text, kOdbcBufferSize, &message_text_length);
98+
99+
// dependent on the size of the message it could output SQL_SUCCESS_WITH_INFO
100+
EXPECT_TRUE(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO);
98101

99102
EXPECT_GT(message_text_length, 100);
100103

@@ -116,8 +119,7 @@ TYPED_TEST(ErrorsHandleTest, TestSQLGetDiagFieldWForConnectFailure) {
116119
EXPECT_EQ(
117120
SQL_SUCCESS,
118121
SQLGetDiagField(SQL_HANDLE_DBC, this->conn, RECORD_1, SQL_DIAG_SQLSTATE, sql_state,
119-
sql_state_size * arrow::flight::sql::odbc::GetSqlWCharSize(),
120-
&sql_state_length));
122+
sql_state_size * GetSqlWCharSize(), &sql_state_length));
121123

122124
EXPECT_EQ(kErrorState28000, SqlWcharToString(sql_state));
123125
}
@@ -158,6 +160,8 @@ TYPED_TEST(ErrorsHandleTest, DISABLED_TestSQLGetDiagFieldWForConnectFailureNTS)
158160
EXPECT_GT(message_text_length, 100);
159161
}
160162

163+
// iODBC does not support application allocated descriptors.
164+
#ifndef __APPLE__
161165
TYPED_TEST(ErrorsTest, TestSQLGetDiagFieldWForDescriptorFailureFromDriverManager) {
162166
SQLHDESC descriptor;
163167

@@ -254,6 +258,7 @@ TYPED_TEST(ErrorsTest, TestSQLGetDiagRecForDescriptorFailureFromDriverManager) {
254258
// Free descriptor handle
255259
EXPECT_EQ(SQL_SUCCESS, SQLFreeHandle(SQL_HANDLE_DESC, descriptor));
256260
}
261+
#endif // __APPLE__
257262

258263
TYPED_TEST(ErrorsHandleTest, TestSQLGetDiagRecForConnectFailure) {
259264
// Invalid connect string
@@ -307,11 +312,17 @@ TYPED_TEST(ErrorsTest, TestSQLGetDiagRecInputData) {
307312
nullptr, 0, nullptr));
308313

309314
// Invalid handle
315+
#ifdef __APPLE__
316+
// MacOS ODBC driver manager requires connection handle
317+
EXPECT_EQ(SQL_INVALID_HANDLE,
318+
SQLGetDiagRec(0, this->conn, 1, nullptr, nullptr, nullptr, 0, nullptr));
319+
#else
310320
EXPECT_EQ(SQL_INVALID_HANDLE,
311321
SQLGetDiagRec(0, nullptr, 0, nullptr, nullptr, nullptr, 0, nullptr));
322+
#endif // __APPLE__
312323
}
313324

314-
TYPED_TEST(ErrorsTest, TestSQLErrorInputData) {
325+
TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorInputData) {
315326
// Test ODBC 2.0 API SQLError. Driver manager maps SQLError to SQLGetDiagRec.
316327
// SQLError does not post diagnostic records for itself.
317328

@@ -322,8 +333,13 @@ TYPED_TEST(ErrorsTest, TestSQLErrorInputData) {
322333
EXPECT_EQ(SQL_NO_DATA, SQLError(nullptr, this->conn, nullptr, nullptr, nullptr, nullptr,
323334
0, nullptr));
324335

336+
#ifdef __APPLE__
337+
EXPECT_EQ(SQL_NO_DATA, SQLError(SQL_NULL_HENV, this->conn, this->stmt, nullptr, nullptr,
338+
nullptr, 0, nullptr));
339+
#else
325340
EXPECT_EQ(SQL_NO_DATA, SQLError(nullptr, nullptr, this->stmt, nullptr, nullptr, nullptr,
326341
0, nullptr));
342+
#endif // __APPLE__
327343

328344
// Invalid handle
329345
EXPECT_EQ(SQL_INVALID_HANDLE,
@@ -364,9 +380,8 @@ TYPED_TEST(ErrorsTest, TestSQLErrorConnError) {
364380
// DM passes 512 as buffer length to SQLError.
365381

366382
// Attempt to set unsupported attribute
367-
SQLRETURN ret = SQLGetConnectAttr(this->conn, SQL_ATTR_TXN_ISOLATION, 0, 0, nullptr);
368-
369-
ASSERT_EQ(SQL_ERROR, ret);
383+
ASSERT_EQ(SQL_ERROR,
384+
SQLGetConnectAttr(this->conn, SQL_ATTR_TXN_ISOLATION, 0, 0, nullptr));
370385

371386
SQLWCHAR sql_state[6] = {0};
372387
SQLINTEGER native_error = 0;
@@ -401,8 +416,10 @@ TYPED_TEST(ErrorsTest, TestSQLErrorStmtError) {
401416
SQLINTEGER native_error = 0;
402417
SQLWCHAR message[SQL_MAX_MESSAGE_LENGTH] = {0};
403418
SQLSMALLINT message_length = 0;
404-
ASSERT_EQ(SQL_SUCCESS, SQLError(nullptr, nullptr, this->stmt, sql_state, &native_error,
405-
message, SQL_MAX_MESSAGE_LENGTH, &message_length));
419+
SQLRETURN ret = SQLError(nullptr, this->conn, this->stmt, sql_state, &native_error,
420+
message, SQL_MAX_MESSAGE_LENGTH, &message_length);
421+
422+
EXPECT_TRUE(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO);
406423

407424
EXPECT_GT(message_length, 70);
408425

@@ -436,8 +453,9 @@ TYPED_TEST(ErrorsTest, TestSQLErrorStmtWarning) {
436453
SQLINTEGER native_error = 0;
437454
SQLWCHAR message[SQL_MAX_MESSAGE_LENGTH] = {0};
438455
SQLSMALLINT message_length = 0;
439-
ASSERT_EQ(SQL_SUCCESS, SQLError(nullptr, nullptr, this->stmt, sql_state, &native_error,
440-
message, SQL_MAX_MESSAGE_LENGTH, &message_length));
456+
ASSERT_EQ(SQL_SUCCESS,
457+
SQLError(SQL_NULL_HENV, this->conn, this->stmt, sql_state, &native_error,
458+
message, SQL_MAX_MESSAGE_LENGTH, &message_length));
441459

442460
EXPECT_GT(message_length, 50);
443461

@@ -449,7 +467,7 @@ TYPED_TEST(ErrorsTest, TestSQLErrorStmtWarning) {
449467
EXPECT_FALSE(std::wstring(message).empty());
450468
}
451469

452-
TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorEnvErrorODBCVer2FromDriverManager) {
470+
TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorEnvErrorFromDriverManager) {
453471
// Test ODBC 2.0 API SQLError with ODBC ver 2.
454472
// Known Windows Driver Manager (DM) behavior:
455473
// When application passes buffer length greater than SQL_MAX_MESSAGE_LENGTH (512),
@@ -516,25 +534,25 @@ TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorConnError) {
516534
}
517535
#endif // __APPLE__
518536

519-
TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorStmtErrorODBCVer2) {
537+
TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorStmtError) {
520538
// Test ODBC 2.0 API SQLError with ODBC ver 2.
521539
// Known Windows Driver Manager (DM) behavior:
522540
// When application passes buffer length greater than SQL_MAX_MESSAGE_LENGTH (512),
523541
// DM passes 512 as buffer length to SQLError.
524542

525-
std::wstring wsql = L"1";
543+
std::wstring wsql = L"SELECT * from non_existent_table;";
526544
std::vector<SQLWCHAR> sql0(wsql.begin(), wsql.end());
527545

528546
ASSERT_EQ(SQL_ERROR,
529547
SQLExecDirect(this->stmt, &sql0[0], static_cast<SQLINTEGER>(sql0.size())));
530548

531549
SQLWCHAR sql_state[6] = {0};
532550
SQLINTEGER native_error = 0;
533-
SQLWCHAR message[SQL_MAX_MESSAGE_LENGTH] = {0};
534551
SQLSMALLINT message_length = 0;
535-
ASSERT_EQ(SQL_SUCCESS, SQLError(nullptr, nullptr, this->stmt, sql_state, &native_error,
536-
message, SQL_MAX_MESSAGE_LENGTH, &message_length));
537-
552+
SQLWCHAR message[SQL_MAX_MESSAGE_LENGTH] = {0};
553+
ASSERT_EQ(SQL_SUCCESS,
554+
SQLError(SQL_NULL_HENV, this->conn, this->stmt, sql_state, &native_error,
555+
message, SQL_MAX_MESSAGE_LENGTH, &message_length));
538556
EXPECT_GT(message_length, 70);
539557

540558
EXPECT_EQ(100, native_error);
@@ -545,7 +563,7 @@ TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorStmtErrorODBCVer2) {
545563
EXPECT_FALSE(std::wstring(message).empty());
546564
}
547565

548-
TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorStmtWarningODBCVer2) {
566+
TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorStmtWarning) {
549567
// Test ODBC 2.0 API SQLError.
550568

551569
std::wstring wsql = L"SELECT 'VERY LONG STRING here' AS string_col;";
@@ -568,8 +586,9 @@ TYPED_TEST(ErrorsOdbcV2Test, TestSQLErrorStmtWarningODBCVer2) {
568586
SQLINTEGER native_error = 0;
569587
SQLWCHAR message[SQL_MAX_MESSAGE_LENGTH] = {0};
570588
SQLSMALLINT message_length = 0;
571-
ASSERT_EQ(SQL_SUCCESS, SQLError(nullptr, nullptr, this->stmt, sql_state, &native_error,
572-
message, SQL_MAX_MESSAGE_LENGTH, &message_length));
589+
ASSERT_EQ(SQL_SUCCESS,
590+
SQLError(SQL_NULL_HENV, this->conn, this->stmt, sql_state, &native_error,
591+
message, SQL_MAX_MESSAGE_LENGTH, &message_length));
573592

574593
EXPECT_GT(message_length, 50);
575594

0 commit comments

Comments
 (0)