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.
---

Reply via email to