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

Reply via email to