@@ -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__
161165TYPED_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
258263TYPED_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