Skip to content

Commit

Permalink
Fix varchar max column size in SQLGetTypeInfo
Browse files Browse the repository at this point in the history
In the result set of `SQLGetTypeInfo` function the `COLUMN_SIZE`
column for `VACHAR` type must contain the length value in characters.

This change replaces `-1` value for this column with `MAX_INT` value.
This allows client tools based on Microsoft Power Query to use parameter
binding for `VARCHAR` columns/parameters.

Testing: existing tests, that were checking for `-1` value, are updated
to check for `MAX_INT`.

Fixes: duckdb#66
  • Loading branch information
staticlibs committed Feb 23, 2025
1 parent 4fb88ed commit 87c05be
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 43 deletions.
2 changes: 2 additions & 0 deletions include/api_info.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ struct ApiInfo {

static const vector<OdbcTypeInfo> ODBC_SUPPORTED_SQL_TYPES;

static const SQLINTEGER MAX_COLUMN_SIZE;

static void SetFunctionSupported(SQLUSMALLINT *flags, int function_id);

public:
Expand Down
62 changes: 32 additions & 30 deletions src/api_info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ const std::unordered_set<SQLUSMALLINT> ApiInfo::ODBC3_EXTRA_SUPPORTED_FUNCTIONS
SQL_API_SQLGETDESCREC, SQL_API_SQLPRIMARYKEYS, SQL_API_SQLPROCEDURECOLUMNS, SQL_API_SQLPROCEDURES,
SQL_API_SQLSETDESCREC, SQL_API_SQLSETPOS, SQL_API_SQLTABLEPRIVILEGES};

const SQLINTEGER ApiInfo::MAX_COLUMN_SIZE = std::numeric_limits<SQLINTEGER>::max();

// clang-format off
/*
* 1. TYPE_NAME
Expand All @@ -111,36 +113,36 @@ const std::unordered_set<SQLUSMALLINT> ApiInfo::ODBC3_EXTRA_SUPPORTED_FUNCTIONS
* 19. INTERVAL_PRECISION
*/
const vector<duckdb::OdbcTypeInfo> ApiInfo::ODBC_SUPPORTED_SQL_TYPES = {
// | 1 | 2 | 3| 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14| 15| 16 | 17 | 18| 19|
{ "'CHAR'", SQL_CHAR, 1, "''''", "''''", "'length'", SQL_NULLABLE, SQL_TRUE, SQL_SEARCHABLE, -1, SQL_FALSE, SQL_FALSE, "NULL", -1, -1, SQL_CHAR, -1, -1, -1},
{ "'BOOLEAN'", SQL_BIT, 1, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_TRUE, SQL_TRUE, SQL_FALSE, "'boolean'", -1, -1, SQL_BIT, -1, -1, -1},
{ "'TINYINT'", SQL_TINYINT, 3, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_TINYINT, -1, 2, -1},
{ "'SMALLINT'", SQL_SMALLINT, 5, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_SMALLINT, -1, 2, -1},
{ "'INTEGER'", SQL_INTEGER, 10, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_INTEGER, -1, 2, -1},
{ "'BIGINT'", SQL_BIGINT, 19, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_BIGINT, -1, 2, -1},
{ "'DATE'", SQL_TYPE_DATE, 10, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", -1, -1, SQL_TYPE_DATE, SQL_CODE_DATE, -1, -1},
{ "'TIME'", SQL_TYPE_TIME, 8, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_TYPE_TIME, SQL_CODE_TIME, -1, -1},
{ "'TIMESTAMP'", SQL_TYPE_TIMESTAMP, 26, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_TYPE_TIMESTAMP, SQL_CODE_TIMESTAMP, -1, -1},
{ "'DECIMAL'", SQL_DECIMAL, 38, "''''", "''''", "'precision,scale'", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", 0, 38, SQL_DECIMAL, -1, 10, -1},
{ "'NUMERIC'", SQL_NUMERIC, 38, "''''", "''''", "'precision,scale'", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", 0, 38, SQL_NUMERIC, -1, 10, -1},
{ "'FLOAT'", SQL_FLOAT, 24, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_FLOAT, -1, 2, -1},
{ "'DOUBLE'", SQL_DOUBLE, 53, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_DOUBLE, -1, 2, -1},
{ "'VARCHAR'", SQL_VARCHAR, -1, "''''", "''''", "'length'", SQL_NULLABLE, SQL_TRUE, SQL_SEARCHABLE, -1, SQL_FALSE, -1, "NULL", -1, -1, SQL_VARCHAR, -1, -1, -1},
{ "'BLOB'", SQL_VARBINARY, -1, "'x'''", "''''", "'length'", SQL_NULLABLE, SQL_TRUE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", -1, -1, SQL_VARBINARY, -1, -1, -1},
{ "'UUID'", SQL_UNKNOWN_TYPE, -1, "''''", "''''", "'length'", SQL_NULLABLE, SQL_TRUE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", -1, -1, SQL_VARCHAR, -1, -1, -1},
{ "'INTERVAL YEAR'", SQL_INTERVAL_YEAR, 9, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_YEAR, -1, -1},
{ "'INTERVAL MONTH'", SQL_INTERVAL_MONTH, 10, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_MONTH, -1, -1},
{ "'INTERVAL DAY'", SQL_INTERVAL_DAY, 5, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_DAY, -1, -1},
{ "'INTERVAL HOUR'", SQL_INTERVAL_HOUR, 6, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_HOUR, -1, -1},
{ "'INTERVAL MINUTE'", SQL_INTERVAL_MINUTE, 8, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_MINUTE, -1, -1},
{ "'INTERVAL SECOND'", SQL_INTERVAL_SECOND, 10, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_SECOND, -1, -1},
{ "'INTERVAL YEAR TO MONTH'", SQL_INTERVAL_YEAR_TO_MONTH, 12, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_YEAR_TO_MONTH, -1, -1},
{ "'INTERVAL DAY TO HOUR'", SQL_INTERVAL_DAY_TO_HOUR, 8, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_DAY_TO_HOUR, -1, -1},
{ "'INTERVAL DAY TO MINUTE'", SQL_INTERVAL_DAY_TO_MINUTE, 11, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_DAY_TO_MINUTE, -1, -1},
{ "'INTERVAL DAY TO SECOND'", SQL_INTERVAL_DAY_TO_SECOND, 14, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_DAY_TO_SECOND, -1, -1},
{ "'INTERVAL HOUR TO MINUTE'", SQL_INTERVAL_HOUR_TO_MINUTE, 9, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_HOUR_TO_MINUTE, -1, -1},
{ "'INTERVAL HOUR TO SECOND'", SQL_INTERVAL_HOUR_TO_SECOND, 12, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_HOUR_TO_SECOND, -1, -1},
{"'INTERVAL MINUTE TO SECOND'", SQL_INTERVAL_MINUTE_TO_SECOND, 12, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_MINUTE_TO_SECOND, -1, -1}
// | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14| 15| 16 | 17 | 18| 19|
{ "'CHAR'", SQL_CHAR, 1, "''''", "''''", "'length'", SQL_NULLABLE, SQL_TRUE, SQL_SEARCHABLE, -1, SQL_FALSE, SQL_FALSE, "NULL", -1, -1, SQL_CHAR, -1, -1, -1},
{ "'BOOLEAN'", SQL_BIT, 1, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_TRUE, SQL_TRUE, SQL_FALSE, "'boolean'", -1, -1, SQL_BIT, -1, -1, -1},
{ "'TINYINT'", SQL_TINYINT, 3, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_TINYINT, -1, 2, -1},
{ "'SMALLINT'", SQL_SMALLINT, 5, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_SMALLINT, -1, 2, -1},
{ "'INTEGER'", SQL_INTEGER, 10, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_INTEGER, -1, 2, -1},
{ "'BIGINT'", SQL_BIGINT, 19, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_BIGINT, -1, 2, -1},
{ "'DATE'", SQL_TYPE_DATE, 10, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", -1, -1, SQL_TYPE_DATE, SQL_CODE_DATE, -1, -1},
{ "'TIME'", SQL_TYPE_TIME, 8, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_TYPE_TIME, SQL_CODE_TIME, -1, -1},
{ "'TIMESTAMP'", SQL_TYPE_TIMESTAMP, 26, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_TYPE_TIMESTAMP, SQL_CODE_TIMESTAMP, -1, -1},
{ "'DECIMAL'", SQL_DECIMAL, 38, "''''", "''''", "'precision,scale'", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", 0, 38, SQL_DECIMAL, -1, 10, -1},
{ "'NUMERIC'", SQL_NUMERIC, 38, "''''", "''''", "'precision,scale'", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", 0, 38, SQL_NUMERIC, -1, 10, -1},
{ "'FLOAT'", SQL_FLOAT, 24, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_FLOAT, -1, 2, -1},
{ "'DOUBLE'", SQL_DOUBLE, 53, "NULL", "NULL", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, SQL_FALSE, SQL_FALSE, SQL_FALSE, "NULL", 0, 0, SQL_DOUBLE, -1, 2, -1},
{ "'VARCHAR'", SQL_VARCHAR, ApiInfo::MAX_COLUMN_SIZE, "''''", "''''", "'length'", SQL_NULLABLE, SQL_TRUE, SQL_SEARCHABLE, -1, SQL_FALSE, -1, "NULL", -1, -1, SQL_VARCHAR, -1, -1, -1},
{ "'BLOB'", SQL_VARBINARY, ApiInfo::MAX_COLUMN_SIZE, "'x'''", "''''", "'length'", SQL_NULLABLE, SQL_TRUE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", -1, -1, SQL_VARBINARY, -1, -1, -1},
{ "'UUID'", SQL_UNKNOWN_TYPE, ApiInfo::MAX_COLUMN_SIZE, "''''", "''''", "'length'", SQL_NULLABLE, SQL_TRUE, SQL_PRED_BASIC, -1, SQL_FALSE, SQL_FALSE, "NULL", -1, -1, SQL_VARCHAR, -1, -1, -1},
{ "'INTERVAL YEAR'", SQL_INTERVAL_YEAR, 9, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_YEAR, -1, -1},
{ "'INTERVAL MONTH'", SQL_INTERVAL_MONTH, 10, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_MONTH, -1, -1},
{ "'INTERVAL DAY'", SQL_INTERVAL_DAY, 5, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_DAY, -1, -1},
{ "'INTERVAL HOUR'", SQL_INTERVAL_HOUR, 6, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_HOUR, -1, -1},
{ "'INTERVAL MINUTE'", SQL_INTERVAL_MINUTE, 8, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_MINUTE, -1, -1},
{ "'INTERVAL SECOND'", SQL_INTERVAL_SECOND, 10, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_SECOND, -1, -1},
{ "'INTERVAL YEAR TO MONTH'", SQL_INTERVAL_YEAR_TO_MONTH, 12, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_YEAR_TO_MONTH, -1, -1},
{ "'INTERVAL DAY TO HOUR'", SQL_INTERVAL_DAY_TO_HOUR, 8, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_DAY_TO_HOUR, -1, -1},
{ "'INTERVAL DAY TO MINUTE'", SQL_INTERVAL_DAY_TO_MINUTE, 11, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_DAY_TO_MINUTE, -1, -1},
{ "'INTERVAL DAY TO SECOND'", SQL_INTERVAL_DAY_TO_SECOND, 14, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_DAY_TO_SECOND, -1, -1},
{ "'INTERVAL HOUR TO MINUTE'", SQL_INTERVAL_HOUR_TO_MINUTE, 9, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_HOUR_TO_MINUTE, -1, -1},
{ "'INTERVAL HOUR TO SECOND'", SQL_INTERVAL_HOUR_TO_SECOND, 12, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_HOUR_TO_SECOND, -1, -1},
{"'INTERVAL MINUTE TO SECOND'", SQL_INTERVAL_MINUTE_TO_SECOND, 12, "''''", "''''", "NULL", SQL_NULLABLE, SQL_FALSE, SQL_PRED_BASIC, -1, SQL_FALSE, -1, "NULL", 0, 0, SQL_VARCHAR, SQL_CODE_MINUTE_TO_SECOND, -1, -1}
};
// clang-format on

Expand Down
32 changes: 21 additions & 11 deletions test/tests/catalog_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,27 @@ void TestGetTypeInfo(HSTMT &hstmt, std::map<SQLSMALLINT, SQLULEN> &types_map) {

EXECUTE_AND_CHECK("SQLFetch", SQLFetch, hstmt);

std::vector<std::pair<MetadataData, std::string>> expected_data = {
{{"TYPE_NAME", SQL_VARCHAR}, "VARCHAR"}, {{"DATA_TYPE", SQL_SMALLINT}, "12"},
{{"COLUMN_SIZE", SQL_INTEGER}, "-1"}, {{"LITERAL_PREFIX", SQL_VARCHAR}, "'"},
{{"LITERAL_SUFFIX", SQL_VARCHAR}, "'"}, {{"CREATE_PARAMS", SQL_VARCHAR}, "length"},
{{"NULLABLE", SQL_SMALLINT}, "1"}, {{"CASE_SENSITIVE", SQL_SMALLINT}, "1"},
{{"SEARCHABLE", SQL_SMALLINT}, "3"}, {{"UNSIGNED_ATTRIBUTE", SQL_SMALLINT}, "-1"},
{{"FIXED_PREC_SCALE", SQL_SMALLINT}, "0"}, {{"AUTO_UNIQUE_VALUE", SQL_SMALLINT}, "-1"},
{{"LOCAL_TYPE_NAME", SQL_VARCHAR}, ""}, {{"MINIMUM_SCALE", SQL_SMALLINT}, "-1"},
{{"MAXIMUM_SCALE", SQL_SMALLINT}, "-1"}, {{"SQL_DATA_TYPE", SQL_SMALLINT}, "12"},
{{"SQL_DATETIME_SUB", SQL_SMALLINT}, "-1"}, {{"NUM_PREC_RADIX", SQL_INTEGER}, "-1"},
{{"INTERVAL_PRECISION", SQL_SMALLINT}, "-1"}};
std::string max_col_size = std::to_string(std::numeric_limits<SQLINTEGER>::max());

std::vector<std::pair<MetadataData, std::string>> expected_data = {{{"TYPE_NAME", SQL_VARCHAR}, "VARCHAR"},
{{"DATA_TYPE", SQL_SMALLINT}, "12"},
{{"COLUMN_SIZE", SQL_INTEGER}, max_col_size},
{{"LITERAL_PREFIX", SQL_VARCHAR}, "'"},
{{"LITERAL_SUFFIX", SQL_VARCHAR}, "'"},
{{"CREATE_PARAMS", SQL_VARCHAR}, "length"},
{{"NULLABLE", SQL_SMALLINT}, "1"},
{{"CASE_SENSITIVE", SQL_SMALLINT}, "1"},
{{"SEARCHABLE", SQL_SMALLINT}, "3"},
{{"UNSIGNED_ATTRIBUTE", SQL_SMALLINT}, "-1"},
{{"FIXED_PREC_SCALE", SQL_SMALLINT}, "0"},
{{"AUTO_UNIQUE_VALUE", SQL_SMALLINT}, "-1"},
{{"LOCAL_TYPE_NAME", SQL_VARCHAR}, ""},
{{"MINIMUM_SCALE", SQL_SMALLINT}, "-1"},
{{"MAXIMUM_SCALE", SQL_SMALLINT}, "-1"},
{{"SQL_DATA_TYPE", SQL_SMALLINT}, "12"},
{{"SQL_DATETIME_SUB", SQL_SMALLINT}, "-1"},
{{"NUM_PREC_RADIX", SQL_INTEGER}, "-1"},
{{"INTERVAL_PRECISION", SQL_SMALLINT}, "-1"}};

for (int i = 0; i < col_count; i++) {
auto &entry = expected_data[i].first;
Expand Down
Loading

0 comments on commit 87c05be

Please sign in to comment.