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 -- [email protected]
To unsubscribe send an email to [email protected]