Github user ryzuo commented on a diff in the pull request:
https://github.com/apache/incubator-trafodion/pull/584#discussion_r69941060
--- Diff: core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp ---
@@ -4503,78 +4504,107 @@ odbc_SQLSvc_GetSQLCatalogs_sme_(
}
break;
case SQL_API_SQLGETTYPEINFO :
- // strcpy((char *)catStmtLabel,
"SQL_GETTYPEINFO_UNICODE_Q1");
- snprintf(CatalogQuery,sizeof(CatalogQuery),
- "select distinct TYPE_NAME TYPE_NAME,"
- "DATA_TYPE DATA_TYPE,PREC COLUMN_SIZE,"
- "LITERAL_PREFIX LITERAL_PREFIX,"
- "LITERAL_SUFFIX LITERAL_SUFFIX,"
- "CREATE_PARAMS CREATE_PARAMS,"
- "IS_NULLABLE NULLABLE,"
- "CASE_SENSITIVE CASE_SENSITIVE,"
- "SEARCHABLE SEARCHABLE,"
- "UNSIGNED_ATTRIBUTE UNSIGNED_ATTRIBUTE,"
- "FIXED_PREC_SCALE FIXED_PREC_SCALE,"
- "AUTO_UNIQUE_VALUE AUTO_UNIQUE_VALUE,"
- "LOCAL_TYPE_NAME LOCAL_TYPE_NAME,"
- "MINIMUM_SCALE MINIMUM_SCALE,"
- "MAXIMUM_SCALE MAXIMUM_SCALE,"
- "SQL_DATA_TYPE SQL_DATA_TYPE,"
- "SQL_DATETIME_SUB SQL_DATETIME_SUB,"
- "NUM_PREC_RADIX NUM_PREC_RADIX,"
- "INTERVAL_PRECISION INTERVAL_PRECISION "
- " from "
- " (VALUES "
- "(cast('BIGINT' as varchar(128)),cast(-5 as
smallint), cast(19 as integer), cast (NULL as varchar(128)), cast (NULL as
varchar(128)),"
- "cast (NULL as varchar(128)), cast(1 as
smallint), cast(0 as smallint), cast(2 as smallint) , cast(0 as smallint),
cast(0 as smallint),"
- "cast(0 as smallint), cast('LARGEINT' as
varchar(128)), cast(NULL as smallint), cast(NULL as smallint), cast('LARGEINT'
as varchar(128)),"
- "cast(10 as smallint), cast(19 as integer),
cast(20 as integer), cast(-402 as smallint), cast(NULL as smallint), cast(NULL
as smallint),"
- "cast(0 as smallint), cast(0 as smallint),
cast(3 as smallint), cast(0 as smallint)),"
- "('BIGINT SIGNED', -5, 19, NULL, NULL,
NULL, 1, 0, 2, 0, 0, 0, 'LARGEINT', NULL, NULL, 'SIGNED LARGEINT', 10, 19, 20,
-402, NULL, NULL, 0, 0, 3, 0),"
- "('CHAR', 1, 32000, '''', '''', 'max
length', 1, 1, 3, NULL, 0, NULL, 'CHARACTER', NULL, NULL, 'CHARACTER', NULL,
-1, -1, 1, NULL, NULL, 0, 0, 3, 0),"
- "('DATE', 9, 10, '{d ''', '''}', NULL, 1,
0, 2, NULL, 0, NULL, 'DATE', NULL, NULL, 'DATE', NULL, 10, 6, 9, 1, NULL, 1, 3,
3, 0),"
- "('DECIMAL', 3, 18, NULL, NULL,
'precision,scale', 1, 0, 2, 0, 0, 0, 'DECIMAL', 0, 18, 'DECIMAL', 10, -2, -3,
3, NULL, NULL, 0, 0, 3, 0),"
- "('DECIMAL UNSIGNED', 3, 18, NULL, NULL,
'precision,scale', 1, 0, 2, 1, 0, 0, 'DECIMAL', 0, 18, 'UNSIGNED DECIMAL', 10,
-2, -3, -301, NULL, NULL, 0, 0, 3, 0),"
- "('DOUBLE PRECISION', 8, 15, NULL, NULL,
NULL, 1, 0, 2, 0, 0, 0, 'DOUBLE', NULL, NULL, 'DOUBLE PRECISION', 2, 54, -1, 8,
NULL, NULL, 0, 0, 3, 0),"
- "('DOUBLE PRECISION', 8, 15, NULL, NULL,
NULL, 1, 0, 2, 0, 0, 0, 'DOUBLE', NULL, NULL, 'DOUBLE', 2, 54, -1, 8, NULL,
NULL, 0, 0, 3, 0),"
- "('FLOAT', 6, 15, NULL, NULL, NULL, 1, 0,
2, 0, 0, 0, 'FLOAT', NULL, NULL, 'FLOAT', 2, -2, -1, 6, NULL, NULL, 0, 0, 3,
0),"
- "('INTEGER', 4, 10, NULL, NULL, NULL, 1, 0,
2, 0, 0, 0, 'INTEGER', NULL, NULL, 'INTEGER', 10, 10, -1, 4, NULL, NULL, 0, 0,
3, 0),"
- "('INTEGER UNSIGNED', 4, 10, NULL, NULL,
NULL, 1, 0, 2, 1, 0, 0, 'INTEGER', NULL, NULL, 'UNSIGNED INTEGER', 10, 10, -1,
-401, NULL, NULL, 0, 0, 3, 0),"
- "('INTERVAL', 113, 0, '{INTERVAL ''', '''
MINUTE TO SECOND}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL',
NULL, 3, 34, 100, 13, 2, 5, 6, 3, 0),"
- "('INTERVAL', 105, 0, '{INTERVAL ''', '''
MINUTE}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL, 0, 34,
100, 5, 2, 5, 5, 3, 0),"
- "('INTERVAL', 101, 0, '{INTERVAL ''', '''
YEAR}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL, 0, 34,
100, 1, 2, 1, 1, 3, 0),"
- "('INTERVAL', 106, 0, '{INTERVAL ''', '''
SECOND}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL, 0, 34,
100, 6, 2, 6, 6, 3, 0),"
- "('INTERVAL', 104, 0, '{INTERVAL ''', '''
HOUR}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL, 0, 34,
100, 4, 2, 4, 4, 3, 0),"
- "('INTERVAL', 107, 0, '{INTERVAL ''', '''
YEAR TO MONTH}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL,
3, 34, 100, 7, 2, 1, 2, 3, 0),"
- "('INTERVAL', 108, 0, '{INTERVAL ''', '''
DAY TO HOUR}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL,
3, 34, 100, 8, 2, 3, 4, 3, 0),"
- "('INTERVAL', 102, 0, '{INTERVAL ''', '''
MONTH}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL, 0, 34,
100, 2, 2, 2, 2, 3, 0),"
- "('INTERVAL', 111, 0, '{INTERVAL ''', '''
HOUR TO MINUTE}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL',
NULL, 3, 34, 100, 11, 2, 4, 5, 3, 0),"
- "('INTERVAL', 112, 0, '{INTERVAL ''', '''
HOUR TO SECOND}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL',
NULL, 6, 34, 100, 12, 2, 4, 6, 3, 0),"
- "('INTERVAL', 110, 0, '{INTERVAL ''', '''
DAY TO SECOND}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL,
9, 34, 100, 10, 2, 3, 6, 3, 0),"
- "('INTERVAL', 109, 0, '{INTERVAL ''', '''
DAY TO MINUTE}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL,
6, 34, 100, 9, 2, 3, 5, 3, 0),"
- "('INTERVAL', 103, 0, '{INTERVAL ''', '''
DAY}', NULL, 1, 0, 2, 0, 0, NULL, 'INTERVAL', 0, 0, 'INTERVAL', NULL, 0, 34,
100, 3, 2, 3, 3, 3, 0),"
- "('NUMERIC', 2, 128, NULL, NULL,
'precision,scale', 1, 0, 2, 0, 0, 0, 'NUMERIC', 0, 128, 'NUMERIC', 10, -2, -3,
2, NULL, NULL, 0, 0, 3, 0),"
- "('NUMERIC UNSIGNED', 2, 128, NULL, NULL,
'precision,scale', 1, 0, 2, 1, 0, 0, 'NUMERIC', 0, 128, 'UNSIGNED NUMERIC', 10,
-2, -3, 2, NULL, NULL, 0, 0, 3, 0),"
- "('REAL', 7, 7, NULL, NULL, NULL, 1, 0, 2,
0, 0, 0, 'REAL', NULL, NULL, 'REAL', 2, 22, -1, 7, NULL, NULL, 0, 0, 3, 0),"
- "('SMALLINT', 5, 5, NULL, NULL, NULL, 1, 0,
2, 0, 0, 0, 'SMALLINT', NULL, NULL, 'SMALLINT', 10, 5, -1, 5, NULL, NULL, 0, 0,
3, 0),"
- "('SMALLINT UNSIGNED', 5, 5, NULL, NULL,
NULL, 1, 0, 2, 1, 0, 0, 'SMALLINT', NULL, NULL, 'UNSIGNED SMALLINT', 10, 5, -1,
-502, NULL, NULL, 0, 0, 3, 0),"
- "('TIME', 10, 8, '{t ''', '''}', NULL, 1,
0, 2, NULL, 0, NULL, 'TIME', NULL, NULL, 'TIME', NULL, 8, 6, 9, 2, NULL, 4, 6,
3, 0),"
- "('TIMESTAMP', 11, 26, '{ts ''', '''}',
NULL, 1, 0, 2, NULL, 0, NULL, 'TIMESTAMP', 0, 6, 'TIMESTAMP', NULL, 19, 16, 9,
3, NULL, 1, 6, 3, 0),"
- "('VARCHAR', 12, 32000, '''', '''', 'max
length', 1, 1, 3, NULL, 0, NULL, 'VARCHAR', NULL, NULL, 'VARCHAR', NULL, -1,
-1, 12, NULL, NULL, 0, 0, 3, 0)"
- " ) "
- " dt(\"TYPE_NAME\", \"DATA_TYPE\",
\"PREC\", \"LITERAL_PREFIX\", \"LITERAL_SUFFIX\", \"CREATE_PARAMS\",
\"IS_NULLABLE\", \"CASE_SENSITIVE\", \"SEARCHABLE\","
- "\"UNSIGNED_ATTRIBUTE\",
\"FIXED_PREC_SCALE\", \"AUTO_UNIQUE_VALUE\", \"LOCAL_TYPE_NAME\",
\"MINIMUM_SCALE\", \"MAXIMUM_SCALE\", \"SQL_TYPE_NAME\","
- "\"NUM_PREC_RADIX\", \"USEPRECISION\",
\"USELENGTH\", \"SQL_DATA_TYPE\", \"SQL_DATETIME_SUB\", \"INTERVAL_PRECISION\",
\"DATETIMESTARTFIELD\","
+ case SQL_API_SQLGETTYPEINFO_JDBC :
+ {
+ SQLSMALLINT SqlTypeCode_Date;
+ SQLSMALLINT SqlTypeCode_Time;
+ SQLSMALLINT SqlTypeCode_TimeStamp;
+ char condExpression[20] = {0};
+
+ if(APIType == SQL_API_SQLGETTYPEINFO_JDBC)
+ {
+ SqlTypeCode_Date = 91;
+ SqlTypeCode_Time = 92;
+ SqlTypeCode_TimeStamp = 93;
+ }
+ else
+ {
+ SqlTypeCode_Date = SQL_DATE;
--- End diff --
@selvaganesang You are right about this. But our driver driver will convert
old definition to version 3 value. Basically it is compatible with ODBC 3.0 and
2.1, but relying on how the environment attribute SQL_ATTR_ODBC_VERSION is set
by application. This problem was detected by Coast test cases, and Coast
expects old value. So I did not realize if there would be any impact by
returning the old value. We don't have plenty test cases now to test all
considerable conditions, however the coast just looks fine now.
I don't know is there any application is running on our ODBC, which relies
on this catalog API now, and it might be running into this compatibility
problem. If the SQL_ATTR_ODBC_VERSION is not set properly, it might. If there's
any app has the problem, I'd like to know then I will see what I can do about
it.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---