2424
2525#include < gtest/gtest.h>
2626
27+ // Many tests are disabled for MacOS due to iODBC limitations.
28+
2729namespace arrow ::flight::sql::odbc {
2830
2931template <typename T>
@@ -237,6 +239,7 @@ void CheckSQLColAttribute(SQLHSTMT stmt, SQLUSMALLINT idx,
237239 EXPECT_EQ (expected_unsigned_column, unsigned_col);
238240}
239241
242+ #ifndef __APPLE__
240243void CheckSQLColAttributes (SQLHSTMT stmt, SQLUSMALLINT idx,
241244 const std::wstring& expected_column_name,
242245 SQLLEN expected_data_type, SQLLEN expected_display_size,
@@ -306,6 +309,7 @@ void CheckSQLColAttributes(SQLHSTMT stmt, SQLUSMALLINT idx,
306309 EXPECT_EQ (expected_searchable, searchable);
307310 EXPECT_EQ (expected_unsigned_column, unsigned_col);
308311}
312+ #endif // __APPLE__
309313
310314void GetSQLColAttributeString (SQLHSTMT stmt, const std::wstring& wsql, SQLUSMALLINT idx,
311315 SQLUSMALLINT field_identifier, std::wstring& value) {
@@ -364,6 +368,7 @@ void GetSQLColAttributeNumeric(SQLHSTMT stmt, const std::wstring& wsql, SQLUSMAL
364368 SQLColAttribute (stmt, idx, field_identifier, 0 , 0 , nullptr , value));
365369}
366370
371+ #ifndef __APPLE__
367372void GetSQLColAttributesNumeric (SQLHSTMT stmt, const std::wstring& wsql, SQLUSMALLINT idx,
368373 SQLUSMALLINT field_identifier, SQLLEN * value) {
369374 // Execute query and check SQLColAttribute numeric attribute
@@ -377,7 +382,7 @@ void GetSQLColAttributesNumeric(SQLHSTMT stmt, const std::wstring& wsql, SQLUSMA
377382 ASSERT_EQ (SQL_SUCCESS ,
378383 SQLColAttributes (stmt, idx, field_identifier, 0 , 0 , nullptr , value));
379384}
380-
385+ # endif // __APPLE__
381386} // namespace
382387
383388TYPED_TEST (ColumnsTest, SQLColumnsTestInputData) {
@@ -1387,7 +1392,9 @@ TEST_F(ColumnsMockTest, TestSQLColAttributeAllTypes) {
13871392 SQL_FALSE ); // expected_unsigned_column
13881393}
13891394
1390- TEST_F (ColumnsOdbcV2MockTest, TestSQLColAttributesAllTypesODBCVer2) {
1395+ // iODBC does not support SQLColAttributes for ODBC 3.0 attributes.
1396+ #ifndef __APPLE__
1397+ TEST_F (ColumnsOdbcV2MockTest, TestSQLColAttributesAllTypes) {
13911398 // Tests ODBC 2.0 API SQLColAttributes
13921399 this ->CreateTableAllDataType ();
13931400
@@ -1446,6 +1453,7 @@ TEST_F(ColumnsOdbcV2MockTest, TestSQLColAttributesAllTypesODBCVer2) {
14461453 SQL_PRED_NONE , // expected_searchable
14471454 SQL_FALSE ); // expected_unsigned_column
14481455}
1456+ #endif // __APPLE__
14491457
14501458TEST_F (ColumnsRemoteTest, TestSQLColAttributeAllTypes) {
14511459 // Test assumes there is a table $scratch.ODBCTest in remote server
@@ -1612,7 +1620,9 @@ TEST_F(ColumnsRemoteTest, TestSQLColAttributeAllTypes) {
16121620 SQL_TRUE ); // expected_unsigned_column
16131621}
16141622
1615- TEST_F (ColumnsOdbcV2RemoteTest, TestSQLColAttributeAllTypesODBCVer2) {
1623+ // iODBC does not support SQLColAttribute in ODBC 2.0 mode.
1624+ #ifndef __APPLE__
1625+ TEST_F (ColumnsOdbcV2RemoteTest, TestSQLColAttributeAllTypes) {
16161626 // Test assumes there is a table $scratch.ODBCTest in remote server
16171627 std::wstring wsql = L" SELECT * from $scratch.ODBCTest;" ;
16181628 std::vector<SQLWCHAR > sql0 (wsql.begin (), wsql.end ());
@@ -1776,7 +1786,8 @@ TEST_F(ColumnsOdbcV2RemoteTest, TestSQLColAttributeAllTypesODBCVer2) {
17761786 SQL_TRUE ); // expected_unsigned_column
17771787}
17781788
1779- TEST_F (ColumnsOdbcV2RemoteTest, TestSQLColAttributesAllTypesODBCVer2) {
1789+ // iODBC does not support SQLColAttributes for ODBC 3.0 attributes.
1790+ TEST_F (ColumnsOdbcV2RemoteTest, TestSQLColAttributesAllTypes) {
17801791 // Tests ODBC 2.0 API SQLColAttributes
17811792 // Test assumes there is a table $scratch.ODBCTest in remote server
17821793 std::wstring wsql = L" SELECT * from $scratch.ODBCTest;" ;
@@ -1895,6 +1906,7 @@ TEST_F(ColumnsOdbcV2RemoteTest, TestSQLColAttributesAllTypesODBCVer2) {
18951906 SQL_SEARCHABLE , // expected_searchable
18961907 SQL_TRUE ); // expected_unsigned_column
18971908}
1909+ #endif // __APPLE__
18981910
18991911TYPED_TEST (ColumnsTest, TestSQLColAttributeCaseSensitive) {
19001912 // Arrow limitation: returns SQL_FALSE for case sensitive column
@@ -1910,6 +1922,8 @@ TYPED_TEST(ColumnsTest, TestSQLColAttributeCaseSensitive) {
19101922 ASSERT_EQ (SQL_FALSE , value);
19111923}
19121924
1925+ // iODBC does not support SQLColAttributes for ODBC 3.0 attributes.
1926+ #ifndef __APPLE__
19131927TYPED_TEST (ColumnsOdbcV2Test, TestSQLColAttributesCaseSensitive) {
19141928 // Arrow limitation: returns SQL_FALSE for case sensitive column
19151929 // Tests ODBC 2.0 API SQLColAttributes
@@ -1924,6 +1938,7 @@ TYPED_TEST(ColumnsOdbcV2Test, TestSQLColAttributesCaseSensitive) {
19241938 GetSQLColAttributesNumeric (this ->stmt , wsql, 28 , SQL_COLUMN_CASE_SENSITIVE , &value);
19251939 ASSERT_EQ (SQL_FALSE , value);
19261940}
1941+ #endif // __APPLE__
19271942
19281943TEST_F (ColumnsMockTest, TestSQLColAttributeUniqueValue) {
19291944 // Mock server limitation: returns false for auto-increment column
@@ -1935,6 +1950,8 @@ TEST_F(ColumnsMockTest, TestSQLColAttributeUniqueValue) {
19351950 ASSERT_EQ (SQL_FALSE , value);
19361951}
19371952
1953+ // iODBC does not support SQLColAttributes for ODBC 3.0 attributes.
1954+ #ifndef __APPLE__
19381955TEST_F (ColumnsOdbcV2MockTest, TestSQLColAttributesAutoIncrement) {
19391956 // Tests ODBC 2.0 API SQLColAttributes
19401957 // Mock server limitation: returns false for auto-increment column
@@ -1945,6 +1962,7 @@ TEST_F(ColumnsOdbcV2MockTest, TestSQLColAttributesAutoIncrement) {
19451962 GetSQLColAttributeNumeric (this ->stmt , wsql, 1 , SQL_COLUMN_AUTO_INCREMENT , &value);
19461963 ASSERT_EQ (SQL_FALSE , value);
19471964}
1965+ #endif // __APPLE__
19481966
19491967TEST_F (ColumnsMockTest, TestSQLColAttributeBaseTableName) {
19501968 this ->CreateTableAllDataType ();
@@ -1955,6 +1973,8 @@ TEST_F(ColumnsMockTest, TestSQLColAttributeBaseTableName) {
19551973 ASSERT_EQ (std::wstring (L" AllTypesTable" ), value);
19561974}
19571975
1976+ // iODBC does not support SQLColAttributes for ODBC 3.0 attributes.
1977+ #ifndef __APPLE__
19581978TEST_F (ColumnsOdbcV2MockTest, TestSQLColAttributesTableName) {
19591979 // Tests ODBC 2.0 API SQLColAttributes
19601980 this ->CreateTableAllDataType ();
@@ -1964,6 +1984,7 @@ TEST_F(ColumnsOdbcV2MockTest, TestSQLColAttributesTableName) {
19641984 GetSQLColAttributesString (this ->stmt , wsql, 1 , SQL_COLUMN_TABLE_NAME , value);
19651985 ASSERT_EQ (std::wstring (L" AllTypesTable" ), value);
19661986}
1987+ #endif // __APPLE__
19671988
19681989TEST_F (ColumnsMockTest, TestSQLColAttributeCatalogName) {
19691990 // Mock server limitattion: mock doesn't return catalog for result metadata,
@@ -1985,6 +2006,8 @@ TEST_F(ColumnsRemoteTest, TestSQLColAttributeCatalogName) {
19852006 ASSERT_EQ (std::wstring (L" " ), value);
19862007}
19872008
2009+ // iODBC does not support SQLColAttribute in ODBC 2.0 mode.
2010+ #ifndef __APPLE__
19882011TEST_F (ColumnsOdbcV2MockTest, TestSQLColAttributesQualifierName) {
19892012 // Mock server limitattion: mock doesn't return catalog for result metadata,
19902013 // and the defautl catalog should be 'main'
@@ -2005,6 +2028,7 @@ TEST_F(ColumnsOdbcV2RemoteTest, TestSQLColAttributesQualifierName) {
20052028 GetSQLColAttributeString (this ->stmt , wsql, 1 , SQL_COLUMN_QUALIFIER_NAME , value);
20062029 ASSERT_EQ (std::wstring (L" " ), value);
20072030}
2031+ #endif // __APPLE__
20082032
20092033TYPED_TEST (ColumnsTest, TestSQLColAttributeCount) {
20102034 std::wstring wsql = this ->GetQueryAllDataTypes ();
@@ -2050,6 +2074,8 @@ TEST_F(ColumnsRemoteTest, TestSQLColAttributeSchemaName) {
20502074 ASSERT_EQ (std::wstring (L" " ), value);
20512075}
20522076
2077+ // iODBC does not support SQLColAttributes for ODBC 3.0 attributes.
2078+ #ifndef __APPLE__
20532079TEST_F (ColumnsOdbcV2MockTest, TestSQLColAttributesOwnerName) {
20542080 // Tests ODBC 2.0 API SQLColAttributes
20552081 this ->CreateTableAllDataType ();
@@ -2071,6 +2097,7 @@ TEST_F(ColumnsOdbcV2RemoteTest, TestSQLColAttributesOwnerName) {
20712097 GetSQLColAttributesString (this ->stmt , wsql, 1 , SQL_COLUMN_OWNER_NAME , value);
20722098 ASSERT_EQ (std::wstring (L" " ), value);
20732099}
2100+ #endif // __APPLE__
20742101
20752102TEST_F (ColumnsMockTest, TestSQLColAttributeTableName) {
20762103 this ->CreateTableAllDataType ();
@@ -2119,6 +2146,8 @@ TEST_F(ColumnsRemoteTest, TestSQLColAttributeTypeName) {
21192146 ASSERT_EQ (std::wstring (L" TIMESTAMP" ), value);
21202147}
21212148
2149+ // iODBC does not support SQLColAttributes for ODBC 3.0 attributes.
2150+ #ifndef __APPLE__
21222151TEST_F (ColumnsOdbcV2MockTest, TestSQLColAttributesTypeName) {
21232152 // Tests ODBC 2.0 API SQLColAttributes
21242153 this ->CreateTableAllDataType ();
@@ -2159,6 +2188,7 @@ TEST_F(ColumnsOdbcV2RemoteTest, TestSQLColAttributesTypeName) {
21592188 GetSQLColAttributesString (this ->stmt , L" " , 9 , SQL_COLUMN_TYPE_NAME , value);
21602189 ASSERT_EQ (std::wstring (L" TIMESTAMP" ), value);
21612190}
2191+ #endif // __APPLE__
21622192
21632193TYPED_TEST (ColumnsTest, TestSQLColAttributeUnnamed) {
21642194 std::wstring wsql = this ->GetQueryAllDataTypes ();
@@ -2175,6 +2205,8 @@ TYPED_TEST(ColumnsTest, TestSQLColAttributeUpdatable) {
21752205 ASSERT_EQ (SQL_ATTR_READWRITE_UNKNOWN , value);
21762206}
21772207
2208+ // iODBC does not support SQLColAttributes for ODBC 3.0 attributes.
2209+ #ifndef __APPLE__
21782210TYPED_TEST (ColumnsOdbcV2Test, TestSQLColAttributesUpdatable) {
21792211 // Tests ODBC 2.0 API SQLColAttributes
21802212 std::wstring wsql = this ->GetQueryAllDataTypes ();
@@ -2183,6 +2215,7 @@ TYPED_TEST(ColumnsOdbcV2Test, TestSQLColAttributesUpdatable) {
21832215 GetSQLColAttributesNumeric (this ->stmt , wsql, 1 , SQL_COLUMN_UPDATABLE , &value);
21842216 ASSERT_EQ (SQL_ATTR_READWRITE_UNKNOWN , value);
21852217}
2218+ #endif // __APPLE__
21862219
21872220TEST_F (ColumnsMockTest, SQLDescribeColValidateInput) {
21882221 this ->CreateTestTables ();
0 commit comments