Changeset: f00b380acf9f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/f00b380acf9f Modified Files: clients/odbc/driver/SQLGetTypeInfo.c clients/odbc/tests/ODBCmetadata.c Branch: Dec2023 Log Message:
Correcting the LITERAL_PREFIX and LITERAL_SUFFIX values returned by ODBC API function SQLGetTypeInfo() for the interval types. diffs (250 lines): diff --git a/clients/odbc/driver/SQLGetTypeInfo.c b/clients/odbc/driver/SQLGetTypeInfo.c --- a/clients/odbc/driver/SQLGetTypeInfo.c +++ b/clients/odbc/driver/SQLGetTypeInfo.c @@ -716,8 +716,8 @@ static const struct types { .type_name = "interval year", .data_type = SQL_INTERVAL_YEAR, /* 101 */ .column_size = 9, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' year'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -737,8 +737,8 @@ static const struct types { .type_name = "interval month", .data_type = SQL_INTERVAL_MONTH, /* 102 */ .column_size = 10, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' month'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -758,8 +758,8 @@ static const struct types { .type_name = "interval day", .data_type = SQL_INTERVAL_DAY, /* 103 */ .column_size = 5, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' day'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -779,8 +779,8 @@ static const struct types { .type_name = "interval hour", .data_type = SQL_INTERVAL_HOUR, /* 104 */ .column_size = 6, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' hour'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -800,8 +800,8 @@ static const struct types { .type_name = "interval minute", .data_type = SQL_INTERVAL_MINUTE, /* 105 */ .column_size = 8, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' minute'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -821,9 +821,9 @@ static const struct types { .type_name = "interval second", .data_type = SQL_INTERVAL_SECOND, /* 106 */ .column_size = 10, - .literal_prefix = "''''", - .literal_suffix = "''''", - .create_params = "'precision'", + .literal_prefix = "'interval '''", + .literal_suffix = "''' second'", + .create_params = "'scale'", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, .searchable = SQL_PRED_BASIC, @@ -842,8 +842,8 @@ static const struct types { .type_name = "interval year to month", .data_type = SQL_INTERVAL_YEAR_TO_MONTH, /* 107 */ .column_size = 12, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' year to month'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -863,8 +863,8 @@ static const struct types { .type_name = "interval day to hour", .data_type = SQL_INTERVAL_DAY_TO_HOUR, /* 108 */ .column_size = 8, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' day to hour'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -884,8 +884,8 @@ static const struct types { .type_name = "interval day to minute", .data_type = SQL_INTERVAL_DAY_TO_MINUTE, /* 109 */ .column_size = 11, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' day to minute'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -905,9 +905,9 @@ static const struct types { .type_name = "interval day to second", .data_type = SQL_INTERVAL_DAY_TO_SECOND, /* 110 */ .column_size = 14, - .literal_prefix = "''''", - .literal_suffix = "''''", - .create_params = "'precision'", + .literal_prefix = "'interval '''", + .literal_suffix = "''' day to second'", + .create_params = "'scale'", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, .searchable = SQL_PRED_BASIC, @@ -926,8 +926,8 @@ static const struct types { .type_name = "interval hour to minute", .data_type = SQL_INTERVAL_HOUR_TO_MINUTE, /* 111 */ .column_size = 9, - .literal_prefix = "''''", - .literal_suffix = "''''", + .literal_prefix = "'interval '''", + .literal_suffix = "''' hour to minute'", .create_params = "NULL", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, @@ -947,9 +947,9 @@ static const struct types { .type_name = "interval hour to second", .data_type = SQL_INTERVAL_HOUR_TO_SECOND, /* 112 */ .column_size = 12, - .literal_prefix = "''''", - .literal_suffix = "''''", - .create_params = "'precision'", + .literal_prefix = "'interval '''", + .literal_suffix = "''' hour to second'", + .create_params = "'scale'", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, .searchable = SQL_PRED_BASIC, @@ -968,9 +968,9 @@ static const struct types { .type_name = "interval minute to second", .data_type = SQL_INTERVAL_MINUTE_TO_SECOND, /* 113 */ .column_size = 13, - .literal_prefix = "''''", - .literal_suffix = "''''", - .create_params = "'precision'", + .literal_prefix = "'interval '''", + .literal_suffix = "''' minute to second'", + .create_params = "'scale'", .nullable = SQL_NULLABLE, .case_sensitive = SQL_FALSE, .searchable = SQL_PRED_BASIC, @@ -1037,7 +1037,7 @@ MNDBGetTypeInfo(ODBCStmt *stmt, { const struct types *t; int i; - char query[4352]; + char query[4400]; switch (DataType) { case SQL_ALL_TYPES: diff --git a/clients/odbc/tests/ODBCmetadata.c b/clients/odbc/tests/ODBCmetadata.c --- a/clients/odbc/tests/ODBCmetadata.c +++ b/clients/odbc/tests/ODBCmetadata.c @@ -1397,7 +1397,7 @@ main(int argc, char **argv) "Resultset with 19 columns\n" "Resultset with 44 rows\n" "TYPE_NAME DATA_TYPE COLUMN_SIZE LITERAL_PREFIX LITERAL_SUFFIX CREATE_PARAMS NULLABLE CASE_SENSITIVE SEARCHABLE UNSIGNED_ATTRIBUTE FIXED_PREC_SCALE AUTO_UNIQUE_VALUE LOCAL_TYPE_NAME MINIMUM_SCALE MAXIMUM_SCALE SQL_DATA_TYPE SQL_DATETIME_SUB NUM_PREC_RADIX INTERVAL_PRECISION\n" - "WCHAR(128) SMALLINT INTEGER WCHAR(11) WCHAR(1) WCHAR(15) SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT WCHAR(16) SMALLINT SMALLINT SMALLINT SMALLINT INTEGER SMALLINT\n" + "WCHAR(128) SMALLINT INTEGER WCHAR(11) WCHAR(18) WCHAR(15) SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT WCHAR(16) SMALLINT SMALLINT SMALLINT SMALLINT INTEGER SMALLINT\n" "uuid -11 36 uuid ' ' NULL 1 0 2 -1 0 -1 uuid -1 -1 -11 -1 -1 -1\n" "character large object -10 1000000 ' ' NULL 1 1 3 -1 0 0 NULL -1 -1 -10 -1 -1 -1\n" "json -10 1000000 json ' ' NULL 1 1 3 -1 0 0 json -1 -1 -10 -1 -1 -1\n" @@ -1429,19 +1429,19 @@ main(int argc, char **argv) "time(precision) 92 15 time ' ' precision 1 0 2 -1 0 -1 NULL 0 6 9 2 -1 -1\n" "timestamp 93 19 timestamp ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 9 3 -1 -1\n" "timestamp(precision) 93 26 timestamp ' ' precision 1 0 2 -1 0 -1 NULL 0 6 9 3 -1 -1\n" - "interval year 101 9 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 1 -1 9\n" - "interval month 102 10 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 2 -1 10\n" - "interval day 103 5 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 3 -1 5\n" - "interval hour 104 6 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 4 -1 6\n" - "interval minute 105 8 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 5 -1 8\n" - "interval second 106 10 ' ' precision 1 0 2 -1 0 -1 NULL 0 0 10 6 -1 10\n" - "interval year to month 107 12 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 7 -1 9\n" - "interval day to hour 108 8 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 8 -1 5\n" - "interval day to minute 109 11 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 9 -1 5\n" - "interval day to second 110 14 ' ' precision 1 0 2 -1 0 -1 NULL 0 0 10 10 -1 5\n" - "interval hour to minute 111 9 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 11 -1 6\n" - "interval hour to second 112 12 ' ' precision 1 0 2 -1 0 -1 NULL 0 0 10 12 -1 6\n" - "interval minute to second 113 13 ' ' precision 1 0 2 -1 0 -1 NULL 0 0 10 13 -1 10\n"); + "interval year 101 9 interval ' ' year NULL 1 0 2 -1 0 -1 NULL 0 0 10 1 -1 9\n" + "interval month 102 10 interval ' ' month NULL 1 0 2 -1 0 -1 NULL 0 0 10 2 -1 10\n" + "interval day 103 5 interval ' ' day NULL 1 0 2 -1 0 -1 NULL 0 0 10 3 -1 5\n" + "interval hour 104 6 interval ' ' hour NULL 1 0 2 -1 0 -1 NULL 0 0 10 4 -1 6\n" + "interval minute 105 8 interval ' ' minute NULL 1 0 2 -1 0 -1 NULL 0 0 10 5 -1 8\n" + "interval second 106 10 interval ' ' second scale 1 0 2 -1 0 -1 NULL 0 0 10 6 -1 10\n" + "interval year to month 107 12 interval ' ' year to month NULL 1 0 2 -1 0 -1 NULL 0 0 10 7 -1 9\n" + "interval day to hour 108 8 interval ' ' day to hour NULL 1 0 2 -1 0 -1 NULL 0 0 10 8 -1 5\n" + "interval day to minute 109 11 interval ' ' day to minute NULL 1 0 2 -1 0 -1 NULL 0 0 10 9 -1 5\n" + "interval day to second 110 14 interval ' ' day to second scale 1 0 2 -1 0 -1 NULL 0 0 10 10 -1 5\n" + "interval hour to minute 111 9 interval ' ' hour to minute NULL 1 0 2 -1 0 -1 NULL 0 0 10 11 -1 6\n" + "interval hour to second 112 12 interval ' ' hour to second scale 1 0 2 -1 0 -1 NULL 0 0 10 12 -1 6\n" + "interval minute to second 113 13 interval ' ' minute to second scale 1 0 2 -1 0 -1 NULL 0 0 10 13 -1 10\n"); /* MonetDB specific type "hugeint" is currently not returned by SQLGetTypeInfo(SQL_ALL_TYPES). However it can be queried when requested explicitly. Test it. */ ret = SQLGetTypeInfo(stmt, SQL_HUGEINT); @@ -1458,7 +1458,7 @@ main(int argc, char **argv) "Resultset with 19 columns\n" "Resultset with 45 rows\n" "TYPE_NAME DATA_TYPE COLUMN_SIZE LITERAL_PREFIX LITERAL_SUFFIX CREATE_PARAMS NULLABLE CASE_SENSITIVE SEARCHABLE UNSIGNED_ATTRIBUTE FIXED_PREC_SCALE AUTO_UNIQUE_VALUE LOCAL_TYPE_NAME MINIMUM_SCALE MAXIMUM_SCALE SQL_DATA_TYPE SQL_DATETIME_SUB NUM_PREC_RADIX INTERVAL_PRECISION\n" - "WCHAR(128) SMALLINT INTEGER WCHAR(11) WCHAR(1) WCHAR(15) SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT WCHAR(16) SMALLINT SMALLINT SMALLINT SMALLINT INTEGER SMALLINT\n" + "WCHAR(128) SMALLINT INTEGER WCHAR(11) WCHAR(18) WCHAR(15) SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT WCHAR(16) SMALLINT SMALLINT SMALLINT SMALLINT INTEGER SMALLINT\n" "uuid -11 36 uuid ' ' NULL 1 0 2 -1 0 -1 uuid -1 -1 -11 -1 -1 -1\n" "character large object -10 1000000 ' ' NULL 1 1 3 -1 0 0 NULL -1 -1 -10 -1 -1 -1\n" "json -10 1000000 json ' ' NULL 1 1 3 -1 0 0 json -1 -1 -10 -1 -1 -1\n" @@ -1490,19 +1490,19 @@ main(int argc, char **argv) "time(precision) 92 15 time ' ' precision 1 0 2 -1 0 -1 NULL 0 6 9 2 -1 -1\n" "timestamp 93 19 timestamp ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 9 3 -1 -1\n" "timestamp(precision) 93 26 timestamp ' ' precision 1 0 2 -1 0 -1 NULL 0 6 9 3 -1 -1\n" - "interval year 101 9 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 1 -1 9\n" - "interval month 102 10 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 2 -1 10\n" - "interval day 103 5 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 3 -1 5\n" - "interval hour 104 6 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 4 -1 6\n" - "interval minute 105 8 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 5 -1 8\n" - "interval second 106 10 ' ' precision 1 0 2 -1 0 -1 NULL 0 0 10 6 -1 10\n" - "interval year to month 107 12 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 7 -1 9\n" - "interval day to hour 108 8 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 8 -1 5\n" - "interval day to minute 109 11 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 9 -1 5\n" - "interval day to second 110 14 ' ' precision 1 0 2 -1 0 -1 NULL 0 0 10 10 -1 5\n" - "interval hour to minute 111 9 ' ' NULL 1 0 2 -1 0 -1 NULL 0 0 10 11 -1 6\n" - "interval hour to second 112 12 ' ' precision 1 0 2 -1 0 -1 NULL 0 0 10 12 -1 6\n" - "interval minute to second 113 13 ' ' precision 1 0 2 -1 0 -1 NULL 0 0 10 13 -1 10\n" + "interval year 101 9 interval ' ' year NULL 1 0 2 -1 0 -1 NULL 0 0 10 1 -1 9\n" + "interval month 102 10 interval ' ' month NULL 1 0 2 -1 0 -1 NULL 0 0 10 2 -1 10\n" + "interval day 103 5 interval ' ' day NULL 1 0 2 -1 0 -1 NULL 0 0 10 3 -1 5\n" + "interval hour 104 6 interval ' ' hour NULL 1 0 2 -1 0 -1 NULL 0 0 10 4 -1 6\n" + "interval minute 105 8 interval ' ' minute NULL 1 0 2 -1 0 -1 NULL 0 0 10 5 -1 8\n" + "interval second 106 10 interval ' ' second scale 1 0 2 -1 0 -1 NULL 0 0 10 6 -1 10\n" + "interval year to month 107 12 interval ' ' year to month NULL 1 0 2 -1 0 -1 NULL 0 0 10 7 -1 9\n" + "interval day to hour 108 8 interval ' ' day to hour NULL 1 0 2 -1 0 -1 NULL 0 0 10 8 -1 5\n" + "interval day to minute 109 11 interval ' ' day to minute NULL 1 0 2 -1 0 -1 NULL 0 0 10 9 -1 5\n" + "interval day to second 110 14 interval ' ' day to second scale 1 0 2 -1 0 -1 NULL 0 0 10 10 -1 5\n" + "interval hour to minute 111 9 interval ' ' hour to minute NULL 1 0 2 -1 0 -1 NULL 0 0 10 11 -1 6\n" + "interval hour to second 112 12 interval ' ' hour to second scale 1 0 2 -1 0 -1 NULL 0 0 10 12 -1 6\n" + "interval minute to second 113 13 interval ' ' minute to second scale 1 0 2 -1 0 -1 NULL 0 0 10 13 -1 10\n" "hugeint 16384 38 NULL NULL NULL 1 0 2 0 0 0 NULL 0 0 16384 -1 10 -1\n"); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org