| 1435 | } |
| 1436 | |
| 1437 | SQLRETURN SQLGetTypeInfo(SQLHSTMT stmt, SQLSMALLINT data_type) { |
| 1438 | // GH-47237 TODO: return SQL_PRED_CHAR and SQL_PRED_BASIC for |
| 1439 | // appropriate data types in `SEARCHABLE` field |
| 1440 | ARROW_LOG(DEBUG) << "SQLGetTypeInfoW called with stmt: " << stmt |
| 1441 | << " data_type: " << data_type; |
| 1442 | |
| 1443 | using ODBC::ODBCStatement; |
| 1444 | return ODBC::ODBCStatement::ExecuteWithDiagnostics(stmt, SQL_ERROR, [=]() { |
| 1445 | ODBCStatement* statement = reinterpret_cast<ODBCStatement*>(stmt); |
| 1446 | |
| 1447 | switch (data_type) { |
| 1448 | case SQL_ALL_TYPES: |
| 1449 | case SQL_CHAR: |
| 1450 | case SQL_VARCHAR: |
| 1451 | case SQL_LONGVARCHAR: |
| 1452 | case SQL_WCHAR: |
| 1453 | case SQL_WVARCHAR: |
| 1454 | case SQL_WLONGVARCHAR: |
| 1455 | case SQL_BIT: |
| 1456 | case SQL_BINARY: |
| 1457 | case SQL_VARBINARY: |
| 1458 | case SQL_LONGVARBINARY: |
| 1459 | case SQL_TINYINT: |
| 1460 | case SQL_SMALLINT: |
| 1461 | case SQL_INTEGER: |
| 1462 | case SQL_BIGINT: |
| 1463 | case SQL_NUMERIC: |
| 1464 | case SQL_DECIMAL: |
| 1465 | case SQL_FLOAT: |
| 1466 | case SQL_REAL: |
| 1467 | case SQL_DOUBLE: |
| 1468 | case SQL_GUID: |
| 1469 | case SQL_DATE: |
| 1470 | case SQL_TYPE_DATE: |
| 1471 | case SQL_TIME: |
| 1472 | case SQL_TYPE_TIME: |
| 1473 | case SQL_TIMESTAMP: |
| 1474 | case SQL_TYPE_TIMESTAMP: |
| 1475 | case SQL_INTERVAL_DAY: |
| 1476 | case SQL_INTERVAL_DAY_TO_HOUR: |
| 1477 | case SQL_INTERVAL_DAY_TO_MINUTE: |
| 1478 | case SQL_INTERVAL_DAY_TO_SECOND: |
| 1479 | case SQL_INTERVAL_HOUR: |
| 1480 | case SQL_INTERVAL_HOUR_TO_MINUTE: |
| 1481 | case SQL_INTERVAL_HOUR_TO_SECOND: |
| 1482 | case SQL_INTERVAL_MINUTE: |
| 1483 | case SQL_INTERVAL_MINUTE_TO_SECOND: |
| 1484 | case SQL_INTERVAL_SECOND: |
| 1485 | case SQL_INTERVAL_YEAR: |
| 1486 | case SQL_INTERVAL_YEAR_TO_MONTH: |
| 1487 | case SQL_INTERVAL_MONTH: |
| 1488 | statement->GetTypeInfo(data_type); |
| 1489 | break; |
| 1490 | default: |
| 1491 | throw DriverException("Invalid SQL data type", "HY004"); |
| 1492 | } |
| 1493 | |
| 1494 | return SQL_SUCCESS; |