You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ma...@apache.org on 2015/10/28 07:40:23 UTC

incubator-kylin git commit: KYLIN-1065 ODBC driver support tableau 9.1

Repository: incubator-kylin
Updated Branches:
  refs/heads/2.x-staging 2725da78a -> 975733630


KYLIN-1065 ODBC driver support tableau 9.1

Signed-off-by: honma <ho...@ebay.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kylin/commit/97573363
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kylin/tree/97573363
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kylin/diff/97573363

Branch: refs/heads/2.x-staging
Commit: 975733630f170435d5818c202dc0bd83a8071066
Parents: 2725da7
Author: lidongsjtu <li...@126.com>
Authored: Wed Oct 28 12:44:47 2015 +0800
Committer: honma <ho...@ebay.com>
Committed: Wed Oct 28 14:44:13 2015 +0800

----------------------------------------------------------------------
 odbc/Driver/KO_DESC.CPP    | 25 ++++++++++++++++++++++++-
 odbc/Driver/KO_DIAG.CPP    |  3 ++-
 odbc/Driver/KO_FETCH.CPP   |  7 ++++---
 odbc/Driver/KO_INFO.CPP    |  5 -----
 odbc/Driver/KO_UTILS.CPP   | 13 ++++++++-----
 odbc/Driver/KylinODBC.H    |  4 ++--
 odbc/Driver/driver.vcxproj |  1 +
 7 files changed, 41 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/97573363/odbc/Driver/KO_DESC.CPP
----------------------------------------------------------------------
diff --git a/odbc/Driver/KO_DESC.CPP b/odbc/Driver/KO_DESC.CPP
index 9d9e14a..3a92e26 100644
--- a/odbc/Driver/KO_DESC.CPP
+++ b/odbc/Driver/KO_DESC.CPP
@@ -2414,8 +2414,31 @@ RETCODE SQL_API _SQLGetIRDItemField ( const pODBCIRD pDesc, const pIRDItem pDesc
             * ( ( Long* ) pDataPtr ) = pDescItem->isAutoIncrement;         // whether a col is auto-incrementing
             break;
             
-        case SQL_DESC_NAME://1011
         case SQL_DESC_LABEL://18
+			s = pDescItem->label.c_str();
+            
+            // transfer col label
+            if ( isANSI )
+            { _SQLCopyCharData ( _DIAGSTMT ( pDesc->Stmt ), pDataPtr, pDataSize, pDataSizePtr, 32, ( ( s ) ? s : "" ), -1 ); }
+            
+            else
+            { _SQLCopyWCharData ( _DIAGSTMT ( pDesc->Stmt ), pDataPtr, pDataSize, pDataSizePtr, 32, ( ( s ) ? s : "" ), -1 ); }
+            
+            break;
+
+        case SQL_DESC_NAME://1011
+			s = pDescItem->label.c_str();
+			if (!s) s = pDescItem->name.c_str();
+            
+            // transfer col desc
+            if ( isANSI )
+            { _SQLCopyCharData ( _DIAGSTMT ( pDesc->Stmt ), pDataPtr, pDataSize, pDataSizePtr, 32, ( ( s ) ? s : "" ), -1 ); }
+            
+            else
+            { _SQLCopyWCharData ( _DIAGSTMT ( pDesc->Stmt ), pDataPtr, pDataSize, pDataSizePtr, 32, ( ( s ) ? s : "" ), -1 ); }
+            
+            break;
+
         case SQL_DESC_BASE_COLUMN_NAME://22
             s = pDescItem->name.c_str();
             

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/97573363/odbc/Driver/KO_DIAG.CPP
----------------------------------------------------------------------
diff --git a/odbc/Driver/KO_DIAG.CPP b/odbc/Driver/KO_DIAG.CPP
index e7cf27e..a74dd9d 100644
--- a/odbc/Driver/KO_DIAG.CPP
+++ b/odbc/Driver/KO_DIAG.CPP
@@ -454,7 +454,8 @@ RETCODE SQL_API SQLGetDiagRecW ( SQLSMALLINT     pHandleType,
     
     // msg
     __ODBCLOG ( _ODBCLogMsg ( LogLevel_DEBUG, "The message is %s", diagrow->Msg ) );
-    _SQLCopyWCharData ( diag, pMsgTxtPtr, pMsgTxtSize, pMsgTxtSizePtr, 16, diagrow->Msg, -1 );
+    _SQLCopyWCharData ( diag, pMsgTxtPtr, pMsgTxtSize, pMsgTxtSizePtr, 16, diagrow->Msg, -1, false );
+
     // debug
     //__ODBCLOG(_ODBCLogMsg(LogLevel_DEBUG,"SQLGetDiagRec msg: %s", pMsgTxtPtr ? ( StrPtr )pMsgTxtPtr : "(unknown)" ));
     RETCODE ret  = ( pMsgTxtSizePtr && ( *pMsgTxtSizePtr ) > pMsgTxtSize ) ? SQL_SUCCESS_WITH_INFO : SQL_SUCCESS;

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/97573363/odbc/Driver/KO_FETCH.CPP
----------------------------------------------------------------------
diff --git a/odbc/Driver/KO_FETCH.CPP b/odbc/Driver/KO_FETCH.CPP
index 99a3ed2..1053e32 100644
--- a/odbc/Driver/KO_FETCH.CPP
+++ b/odbc/Driver/KO_FETCH.CPP
@@ -221,7 +221,9 @@ RETCODE  _SQLColAttribute_basic ( SQLHSTMT        pStmt,
             __ODBCPOPMSG ( _ODBCPopMsg ( "SQLColAttribute unknown attr, ColNum: %d, FldID: %d\n", pColNum, pFldID ) );
             return SQL_ERROR;
     }
-    
+	//unique_ptr<char[]> temp ( wchar2char ( ( wchar_t* ) pDataPtr ) );
+	//__ODBCLOG(_ODBCLogMsg(LogLevel_INFO, "_SQLColAttribute_basic was called - Stmt:%d, ColNum:%d, FldId:%d, pDataStr:%s, pDataSize:%d, pDataSizePtr:%d(n:%d), pNumValPtr:%d",
+	//	pStmt, pColNum, pFldID, temp.get(), pDataSize, pDataSizePtr, n, pNumValuePtr ? *(( Long* )pNumValuePtr):-1));
     return SQL_SUCCESS;
 }
 
@@ -849,8 +851,7 @@ RETCODE SQL_API _SQLColConvert ( pODBCStmt       pStmt,
                                       -1 );
         }
     }
-    
-    if ( pTgtDataType == SQL_WCHAR || pTgtDataType == SQL_WVARCHAR ) {
+    else if ( pTgtDataType == SQL_WCHAR || pTgtDataType == SQL_WVARCHAR ) {
         return _SQLCopyWCharDataW ( _DIAGSTMT ( pStmt ), pTgtDataPtr, pARDCol->DataSize, pTgtDataSizePtr, 32, pSrcColData, -1 );
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/97573363/odbc/Driver/KO_INFO.CPP
----------------------------------------------------------------------
diff --git a/odbc/Driver/KO_INFO.CPP b/odbc/Driver/KO_INFO.CPP
index 5a36508..d8287b0 100644
--- a/odbc/Driver/KO_INFO.CPP
+++ b/odbc/Driver/KO_INFO.CPP
@@ -593,11 +593,6 @@ RETCODE SQL_API SQLGetInfoW ( SQLHDBC                    pConn,
                                       pBufferLength, pStringLengthPtr ) );
     }
     
-	//// *2 is already done in _SQLCopyWCharData()
-    /*if ( pStringLengthPtr ) {
-        *pStringLengthPtr = ( *pStringLengthPtr ) * 2;
-    }*/
-    
     return SQL_SUCCESS;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/97573363/odbc/Driver/KO_UTILS.CPP
----------------------------------------------------------------------
diff --git a/odbc/Driver/KO_UTILS.CPP b/odbc/Driver/KO_UTILS.CPP
index 275c93b..ea7ccf7 100644
--- a/odbc/Driver/KO_UTILS.CPP
+++ b/odbc/Driver/KO_UTILS.CPP
@@ -234,13 +234,13 @@ RETCODE SQL_API _SQLCopyCharData ( pODBCDiag pDiag, void* pTgtDataPtr, Long pDat
 }
 
 RETCODE SQL_API _SQLCopyWCharData ( pODBCDiag pDiag, void* pTgtDataPtr, Long pDataBufSize, void* pSizePtr,
-                                    Word pSizePtrSize, CStrPtr pSrcData, Long pSrcDataSize ) {
+                                    Word pSizePtrSize, CStrPtr pSrcData, Long pSrcDataSize , bool returnByteSize) {
     unique_ptr<wchar_t[]> pWCS ( char2wchar ( pSrcData ) );
-    return _SQLCopyWCharDataW ( pDiag,  pTgtDataPtr,  pDataBufSize,  pSizePtr,  pSizePtrSize,  pWCS.get(),  pSrcDataSize );
+    return _SQLCopyWCharDataW ( pDiag,  pTgtDataPtr,  pDataBufSize,  pSizePtr,  pSizePtrSize,  pWCS.get(),  pSrcDataSize, returnByteSize);
 }
 //mhb added, for those ard that accept wchar
 RETCODE SQL_API _SQLCopyWCharDataW ( pODBCDiag pDiag, void* pTgtDataPtr, Long pDataBufSize, void* pSizePtr,
-                                     Word pSizePtrSize, const wchar_t* pSrcData, Long pSrcDataSize ) {
+                                     Word pSizePtrSize, const wchar_t* pSrcData, Long pSrcDataSize, bool returnByteSize ) {
     __ODBCLOG ( _ODBCLogMsg ( LogLevel_DEBUG, "_SQLCopyWCharDataW called, pTgtDataPtr is null? %d, pSizePtr == null? %d",
                               pTgtDataPtr == NULL, pSizePtr == NULL ) );
     __ODBCLOG ( _ODBCLogMsg ( LogLevel_DEBUG, "_SQLCopyWCharDataW called, the src string is :" ) );
@@ -265,11 +265,14 @@ RETCODE SQL_API _SQLCopyWCharDataW ( pODBCDiag pDiag, void* pTgtDataPtr, Long pD
         // set size as per ptr type 16-bt or 32-bit
         
         //should be number of characters
+		Long pPtrSizeBuf = n;
+		if (returnByteSize) { pPtrSizeBuf = 2 * n; }
+
         if ( pSizePtrSize == 16 )
-        { * ( ( Word* ) pSizePtr ) = ( Word ) ( 2 * n ); }
+        { * ( ( Word* ) pSizePtr ) = ( Word ) pPtrSizeBuf; }
         
         else
-        { * ( ( Long* ) pSizePtr ) = ( 2 * n ); }
+        { * ( ( Long* ) pSizePtr ) = pPtrSizeBuf; }
         
         __ODBCLOG ( _ODBCLogMsg ( LogLevel_DEBUG, "pSizePtr is set to %d", n ) );
     }

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/97573363/odbc/Driver/KylinODBC.H
----------------------------------------------------------------------
diff --git a/odbc/Driver/KylinODBC.H b/odbc/Driver/KylinODBC.H
index 534a04e..896c9e9 100644
--- a/odbc/Driver/KylinODBC.H
+++ b/odbc/Driver/KylinODBC.H
@@ -642,9 +642,9 @@ eGoodBad            PutRespToStmt ( pODBCStmt pStmt, std::unique_ptr<SQLResponse
 RETCODE SQL_API     _SQLCopyCharData ( pODBCDiag pDiag, void* pDataPtr, Long pDataBufSize, void* pSizePtr,
                                        Word pSizePtrSize, CStrPtr pSrcData, Long pSrcDataSize );
 RETCODE SQL_API     _SQLCopyWCharData ( pODBCDiag pDiag, void* pDataPtr, Long pDataBufSize, void* pSizePtr,
-                                        Word pSizePtrSize, CStrPtr pSrcData, Long pSrcDataSize );
+                                        Word pSizePtrSize, CStrPtr pSrcData, Long pSrcDataSize, bool returnByteSize = true );
 RETCODE SQL_API     _SQLCopyWCharDataW ( pODBCDiag pDiag, void* pDataPtr, Long pDataBufSize, void* pSizePtr,
-                                         Word pSizePtrSize, const wchar_t* pSrcData, Long pSrcDataSize );
+                                         Word pSizePtrSize, const wchar_t* pSrcData, Long pSrcDataSize, bool returnByteSize = true  );
 Word                _SQLCopyNumData ( pODBCDiag pDiag, void* pTgtDataPtr, Word pTgtDataType, CStrPtr pSrcData,
                                       Word pSrcDataType, Long* pTgtDataSizePtr );
 Word                _SQLCopyDateTimeData ( pODBCDiag pDiag, void* pTgtDataPtr, Word pTgtDataType, CStrPtr pSrcData,

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/97573363/odbc/Driver/driver.vcxproj
----------------------------------------------------------------------
diff --git a/odbc/Driver/driver.vcxproj b/odbc/Driver/driver.vcxproj
index e98f79f..bbc1c3e 100644
--- a/odbc/Driver/driver.vcxproj
+++ b/odbc/Driver/driver.vcxproj
@@ -168,6 +168,7 @@
       <AdditionalDependencies>odbccp32.lib;odbc32.lib;mswsock.lib;ws2_32.lib;winhttp.lib;cpprest110_2_0.lib;Common.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ModuleDefinitionFile>.\driver.DEF</ModuleDefinitionFile>
       <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
     </Link>
     <PostBuildEvent>
       <Command>