From 2650285d59b97c3e1f3c1ac848cdd597e34fc48c Mon Sep 17 00:00:00 2001 From: lidongsjtu Date: Wed, 4 Nov 2015 10:05:53 +0800 Subject: [PATCH] KYLIN-596 Support PowerBI desktop (ver.2.28.4190.122) --- odbc/Common/JDBCODBC.cpp | 8 +++--- odbc/Driver/KO_ATTR.CPP | 5 ++++ odbc/Driver/KO_DESC.CPP | 2 +- odbc/Driver/KO_FETCH.CPP | 8 ++++-- odbc/Driver/KO_INFO.CPP | 72 ++++++++++++++++++++++++++++++++++++++++++++---- odbc/Driver/KO_UTILS.CPP | 2 +- 6 files changed, 84 insertions(+), 13 deletions(-) diff --git a/odbc/Common/JDBCODBC.cpp b/odbc/Common/JDBCODBC.cpp index 8753fd2..a3b056e 100644 --- a/odbc/Common/JDBCODBC.cpp +++ b/odbc/Common/JDBCODBC.cpp @@ -68,13 +68,13 @@ ODBCTypes JDBC2ODBC ( int jtype ) { break; case JDBC_CHAR: - //return ODBCTypes::ODBC_Char; - return ODBCTypes::ODBC_WChar;//it's a unicode dirver + return ODBCTypes::ODBC_Char; + //return ODBCTypes::ODBC_WChar;//it's a unicode dirver break; case JDBC_VARCHAR: - //return ODBCTypes::ODBC_VarChar; - return ODBCTypes::ODBC_WChar;//it's a unicode dirver + return ODBCTypes::ODBC_VarChar; + //return ODBCTypes::ODBC_WChar;//it's a unicode dirver break; case 2000://"ANY" type in KYLIN diff --git a/odbc/Driver/KO_ATTR.CPP b/odbc/Driver/KO_ATTR.CPP index 7cfae45..3f21108 100644 --- a/odbc/Driver/KO_ATTR.CPP +++ b/odbc/Driver/KO_ATTR.CPP @@ -431,6 +431,11 @@ RETCODE SQL_API SQLSetStmtAttrW ( SQLHSTMT pStmt, _SQLFreeDiag ( _DIAGSTMT ( pStmt ) ); switch ( pAttr ) { + case 1226:/* MS SQL Server Extension */ + case 1227: + case 1228: + break; + case SQL_ATTR_APP_PARAM_DESC: __ODBCPOPMSG ( _ODBCPopMsg ( "SQL_ATTR_APP_PARAM_DESC - Cannot set descriptor" ) ); return SQL_ERROR; diff --git a/odbc/Driver/KO_DESC.CPP b/odbc/Driver/KO_DESC.CPP index 3a92e26..b72deab 100644 --- a/odbc/Driver/KO_DESC.CPP +++ b/odbc/Driver/KO_DESC.CPP @@ -2477,7 +2477,7 @@ RETCODE SQL_API _SQLGetIRDItemField ( const pODBCIRD pDesc, const pIRDItem pDesc case SQL_DESC_TYPE://1002 case SQL_DESC_CONCISE_TYPE://2 - * ( ( Long* ) pDataPtr ) = pDescItem->columnType; + * ( ( SQLLEN* ) pDataPtr ) = pDescItem->columnType; break; case SQL_DESC_DATETIME_INTERVAL_CODE://1007 diff --git a/odbc/Driver/KO_FETCH.CPP b/odbc/Driver/KO_FETCH.CPP index 1053e32..39f0915 100644 --- a/odbc/Driver/KO_FETCH.CPP +++ b/odbc/Driver/KO_FETCH.CPP @@ -251,7 +251,10 @@ RETCODE SQL_API SQLColAttribute ( SQLHSTMT pStmt, SQLSMALLINT* pDataSizePtr, SQLLEN* pNumValuePtr ) { __ODBCLOG ( _ODBCLogMsg ( LogLevel_DEBUG, "SQLColAttributeW called, ColNum: %d, FldID: %d", pColNum, pFldID ) ); - return _SQLColAttribute_basic ( pStmt, pColNum, pFldID, pDataPtr, pDataSize, pDataSizePtr, pNumValuePtr, true ); + RETCODE code = _SQLColAttribute_basic ( pStmt, pColNum, pFldID, pDataPtr, pDataSize, pDataSizePtr, pNumValuePtr, + true ); + __ODBCLOG ( _ODBCLogMsg ( LogLevel_DEBUG, "the return code is %d", code ) ); + return code; } #else @@ -494,6 +497,7 @@ RETCODE SQL_API SQLBindCol ( SQLHSTMT pStmt, ardcol = new ARDItem; // reset _SQLSetARDItemFieldsDefault ( ardcol, pColNum ); + // set all values - bind _SQLSetARDItemField ( ard, ardcol, pColNum, SQL_DESC_DATA_PTR, pDataPtr, -1 ); _SQLSetARDItemField ( ard, ardcol, pColNum, SQL_DESC_CONCISE_TYPE, ( void* ) pDataType, -1 ); @@ -949,7 +953,7 @@ RETCODE SQL_API _SQLFetchCol ( pODBCStmt pStmt, // move both data and size ptr in the array //TODO find out where the pARDCol->DataSize if set tgtdataptr = ( void* ) ( ( ( Char* ) ( pARDCol->DataPtr ) ) + j + ( i * pARDCol->DataSize ) ); // use based on data type - tgtsizeptr = ( Long* ) ( ( ( Char* ) ( pARDCol->SizePtr ) ) + j + ( i * sizeof ( Long ) ) ); + tgtsizeptr = ( Long* ) ( ( ( Char* ) ( pARDCol->SizePtr ) ) + j + ( i * sizeof ( SQLLEN ) ) ); } // PRECAUTION diff --git a/odbc/Driver/KO_INFO.CPP b/odbc/Driver/KO_INFO.CPP index d8287b0..a90c1de 100644 --- a/odbc/Driver/KO_INFO.CPP +++ b/odbc/Driver/KO_INFO.CPP @@ -72,6 +72,31 @@ RETCODE SQL_API SQLGetInfoW ( SQLHDBC pConn, break; case SQL_CONVERT_FUNCTIONS ://48 called + case SQL_CONVERT_BIGINT: + case SQL_CONVERT_BINARY: + case SQL_CONVERT_BIT: + case SQL_CONVERT_CHAR: + case SQL_CONVERT_GUID: + case SQL_CONVERT_DATE: + case SQL_CONVERT_DECIMAL: + case SQL_CONVERT_DOUBLE: + case SQL_CONVERT_FLOAT: + case SQL_CONVERT_INTEGER: + case SQL_CONVERT_INTERVAL_YEAR_MONTH: + case SQL_CONVERT_INTERVAL_DAY_TIME: + case SQL_CONVERT_LONGVARBINARY: + case SQL_CONVERT_LONGVARCHAR: + case SQL_CONVERT_NUMERIC: + case SQL_CONVERT_REAL: + case SQL_CONVERT_SMALLINT: + case SQL_CONVERT_TIME: + case SQL_CONVERT_TIMESTAMP: + case SQL_CONVERT_TINYINT: + case SQL_CONVERT_VARBINARY: + case SQL_CONVERT_VARCHAR: + case SQL_CONVERT_WCHAR: + case SQL_CONVERT_WLONGVARCHAR: + case SQL_CONVERT_WVARCHAR: break; case SQL_MAX_IDENTIFIER_LEN : //10005 called @@ -210,12 +235,15 @@ RETCODE SQL_API SQLGetInfoW ( SQLHDBC pConn, break; + case SQL_DTC_TRANSITION_COST: // 1750 + break; + case SQL_DATA_SOURCE_READ_ONLY: // 25 //MessageBox ( GetDesktopWindow(), "SQL_DATA_SOURCE_READ_ONLY", "SQLGetInfo", MB_OK ); _SQLCopyWCharData ( _DIAGCONN ( pConn ), pInfoValuePtr, pBufferLength, pStringLengthPtr, 16, "N", -1 ); break; - case SQL_DRIVER_NAME: // 6 //called by tb + case SQL_DRIVER_NAME: // 6 //MessageBox ( GetDesktopWindow(), "SQL_DRIVER_NAME", "SQLGetInfo", MB_OK ); _SQLCopyWCharData ( _DIAGCONN ( pConn ), pInfoValuePtr, pBufferLength, pStringLengthPtr, 16, "driver.DLL", -1 ); break; @@ -275,11 +303,11 @@ RETCODE SQL_API SQLGetInfoW ( SQLHDBC pConn, _SQLCopyWCharData ( _DIAGCONN ( pConn ), pInfoValuePtr, pBufferLength, pStringLengthPtr, 16, "\"", -1 ); break; - case SQL_MAX_SCHEMA_NAME_LEN: + case SQL_MAX_SCHEMA_NAME_LEN: // 32 * ( ( short* ) pInfoValuePtr ) = 128; break; - case SQL_USER_NAME: + case SQL_USER_NAME: // 47 _SQLCopyWCharData ( _DIAGCONN ( pConn ), pInfoValuePtr, pBufferLength, pStringLengthPtr, 16, "default", -1 ); break; @@ -399,6 +427,9 @@ RETCODE SQL_API SQLGetInfoW ( SQLHDBC pConn, //__ODBCPOPMSG(_ODBCPopMsg("SQLGetInfo, SQL_CATALOG_LOCATION" )); break; + case SQL_CATALOG_NAME: // 10003 + break; + case SQL_CONCAT_NULL_BEHAVIOR: // 22 * ( ( Word* ) pInfoValuePtr ) = SQL_CB_NULL; //__ODBCPOPMSG(_ODBCPopMsg("SQLGetInfo, SQL_CONCAT_NULL_BEHAVIOR" )); @@ -612,6 +643,31 @@ RETCODE SQL_API SQLGetInfo ( SQLHDBC pConn, break; case SQL_CONVERT_FUNCTIONS ://48 called + case SQL_CONVERT_BIGINT: + case SQL_CONVERT_BINARY: + case SQL_CONVERT_BIT: + case SQL_CONVERT_CHAR: + case SQL_CONVERT_GUID: + case SQL_CONVERT_DATE: + case SQL_CONVERT_DECIMAL: + case SQL_CONVERT_DOUBLE: + case SQL_CONVERT_FLOAT: + case SQL_CONVERT_INTEGER: + case SQL_CONVERT_INTERVAL_YEAR_MONTH: + case SQL_CONVERT_INTERVAL_DAY_TIME: + case SQL_CONVERT_LONGVARBINARY: + case SQL_CONVERT_LONGVARCHAR: + case SQL_CONVERT_NUMERIC: + case SQL_CONVERT_REAL: + case SQL_CONVERT_SMALLINT: + case SQL_CONVERT_TIME: + case SQL_CONVERT_TIMESTAMP: + case SQL_CONVERT_TINYINT: + case SQL_CONVERT_VARBINARY: + case SQL_CONVERT_VARCHAR: + case SQL_CONVERT_WCHAR: + case SQL_CONVERT_WLONGVARCHAR: + case SQL_CONVERT_WVARCHAR: break; case SQL_MAX_IDENTIFIER_LEN : //10005 called @@ -621,7 +677,7 @@ RETCODE SQL_API SQLGetInfo ( SQLHDBC pConn, break; case SQL_SQL_CONFORMANCE: //118 called - break; + break; /* An SQLUINTEGER bitmask enumerating the SQL-92 datetime literals supported by the data source. Note that these are the datetime literals listed in the SQL-92 specification and are separate from the datetime literal escape clauses defined by ODBC. For more information about the ODBC datetime literal escape clauses, see Date, Time, and Timestamp Literals. @@ -748,6 +804,9 @@ RETCODE SQL_API SQLGetInfo ( SQLHDBC pConn, if ( pInfoValuePtr ) { * ( ( Word* ) pInfoValuePtr ) = SQL_OAC_NONE; } // for MS Access break; + + case SQL_DTC_TRANSITION_COST: // 1750 + break; case SQL_DATA_SOURCE_READ_ONLY: // 25 //MessageBox ( GetDesktopWindow(), "SQL_DATA_SOURCE_READ_ONLY", "SQLGetInfo", MB_OK ); @@ -937,7 +996,10 @@ RETCODE SQL_API SQLGetInfo ( SQLHDBC pConn, * ( ( Word* ) pInfoValuePtr ) = SQL_CL_START; //__ODBCPOPMSG(_ODBCPopMsg("SQLGetInfo, SQL_CATALOG_LOCATION" )); break; - + + case SQL_CATALOG_NAME: // 10003 + break; + case SQL_CONCAT_NULL_BEHAVIOR: // 22 * ( ( Word* ) pInfoValuePtr ) = SQL_CB_NULL; //__ODBCPOPMSG(_ODBCPopMsg("SQLGetInfo, SQL_CONCAT_NULL_BEHAVIOR" )); diff --git a/odbc/Driver/KO_UTILS.CPP b/odbc/Driver/KO_UTILS.CPP index ea7ccf7..d46deff 100644 --- a/odbc/Driver/KO_UTILS.CPP +++ b/odbc/Driver/KO_UTILS.CPP @@ -274,7 +274,7 @@ RETCODE SQL_API _SQLCopyWCharDataW ( pODBCDiag pDiag, void* pTgtDataPtr, Long pD else { * ( ( Long* ) pSizePtr ) = pPtrSizeBuf; } - __ODBCLOG ( _ODBCLogMsg ( LogLevel_DEBUG, "pSizePtr is set to %d", n ) ); + __ODBCLOG ( _ODBCLogMsg ( LogLevel_DEBUG, "pSizePtr %d is set to %d", pSizePtr, * ( ( SQLLEN* ) pSizePtr ) ) ); } // check if src data but no size holder -- 1.9.5.msysgit.1