Github user selvaganesang commented on a diff in the pull request:
https://github.com/apache/incubator-trafodion/pull/584#discussion_r69965301
--- 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 --
I think we are confusing the compile time defines ODBCVER with run time
ODBC application version SQL_ATTR_ODBC_VERSION. By default sql.h sets the
ODBCVER to 0x351. The trafodion code is not redefining it. Hence, Trafodion
ODBC driver conforms to 3.5 version and ODBC driver should be returning
SQL_TYPE_DATE, SQL_TYPE_TIME and SQL_TYPE_TIMESTAMP. It is the responsibility
of the driver manager to do the needed mapping to ODBC 2.0 and ODBC 3.0
applications. See " Datetime Data Type Changes" in ODBC 3.x specification
I have copied the portion of it here
In ODBC 3.x, the identifiers for date, time, and timestamp SQL data types
have changed from SQL_DATE,
SQL_TIME, and SQL_TIMESTAMP (with instances of #define in the header file
of 9, 10, and 11) to SQL_TYPE_DATE,
SQL_TYPE_TIME, and SQL_TYPE_TIMESTAMP (with instances of #define in the
header file of 91, 92, and 93),
respectively. The corresponding C type identifiers have changed from
SQL_C_DATE, SQL_C_TIME, and
SQL_C_TIMESTAMP to SQL_C_TYPE_DATE, SQL_C_TYPE_TIME, and
SQL_C_TYPE_TIMESTAMP, respectively.
The column size and decimal digits returned for the SQL datetime data types
in ODBC 3.x are the same as the
precision and scale returned for them in ODBC 2.x. These values are
different than the values in the
SQL_DESC_PRECISION and SQL_DESC_SCALE descriptor fields. (For more
information, see Column Size, Decimal
Digits, Transfer Octet Length, and Display Size.)
These changes affect SQLDescribeCol, SQLDescribeParam, and SQLColAttribute;
SQLBindCol,
SQLBindParameter, and SQLGetData; and SQLColumns, SQLGetTypeInfo,
SQLProcedureColumns,
SQLStatistics, and SQLSpecialColumns.
The following table shows how the ODBC 3.x Driver Manager performs mapping
of the date, time, and timestamp C data types entered in the TargetType
arguments of SQLBindCol and SQLGetData or in the ValueType arguments.
I didn't copy the table here. The table shows how the DriverManager maps it
ODBC 2.0 or ODBC 3.0 application from ODBC 3.x driver.
---
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.
---