From: jbalint Date: November 13 2006 10:34pm Subject: Connector/ODBC 5 commit: r667 - trunk/SDK/MYSQLPlus/Library List-Archive: http://lists.mysql.com/commits/15275 Message-Id: <200611132234.kADMYKoj032073@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modified: trunk/SDK/MYSQLPlus/Library/MConnection.cpp trunk/SDK/MYSQLPlus/Library/MDiagnostic.cpp trunk/SDK/MYSQLPlus/Library/MDiagnosticRecord.cpp Log: Fixed string length to chars, not bytes, returned by SQLGetDiagRec. Fixed using wrong pointer for SQL_MAX_DRIVER_CONNECTIONS in SQLGetInfo. Modified: trunk/SDK/MYSQLPlus/Library/MConnection.cpp =================================================================== --- trunk/SDK/MYSQLPlus/Library/MConnection.cpp 2006-11-13 20:20:16 UTC (rev 666) +++ trunk/SDK/MYSQLPlus/Library/MConnection.cpp 2006-11-13 22:34:19 UTC (rev 667) @@ -565,12 +565,11 @@ SQLSMALLINT * pnSQLSMALLINT = (SQLSMALLINT *)pInfoValue; SQLUINTEGER * pnSQLUINTEGER = (SQLUINTEGER *)pInfoValue; SQLWCHAR * pszSQLWCHAR = (SQLWCHAR *)pInfoValue; - /* SQLSMALLINT * pnSQLSMALLINT = (SQLSMALLINT *)pInfoValue; */ /* pnStringLengthBytes is optional so provide dummy to make code below a little cleaner */ SQLSMALLINT nStringLengthBytes; SQLSMALLINT * pnStringLengthBytes = pnStringLengthBytesPtr; SQLINTEGER nStringLengthChars; - BOOL bCopyOk; + BOOL bCopyOk; /*! \internal ODBC RULE @@ -1138,7 +1137,8 @@ *pnStringLengthBytes = sizeof(SQLUSMALLINT); break; case SQL_MAX_DRIVER_CONNECTIONS: - *pnSQLUINTEGER = getInfoMaxDriverConnections(); + *pnSQLUSMALLINT = getInfoMaxDriverConnections(); + *pnStringLengthBytes = sizeof(SQLUSMALLINT); break; case SQL_MAX_IDENTIFIER_LEN: *pnSQLUSMALLINT = getInfoMaxIdentifierLen(); Modified: trunk/SDK/MYSQLPlus/Library/MDiagnostic.cpp =================================================================== --- trunk/SDK/MYSQLPlus/Library/MDiagnostic.cpp 2006-11-13 20:20:16 UTC (rev 666) +++ trunk/SDK/MYSQLPlus/Library/MDiagnostic.cpp 2006-11-13 22:34:19 UTC (rev 667) @@ -171,6 +171,10 @@ } nReturn = getDiagField( nRecNumber, SQL_DIAG_MESSAGE_TEXT, pszMessageText, nBufferCharLength, pnTextByteLength ); + /* we need char length for getDiagRec, + * not byte length which is what getDiagField returns */ + if ( pnTextByteLength ) + *pnTextByteLength /= 2; if ( nReturn == SQL_SUCCESS_WITH_INFO ) nReturnHolistic = SQL_SUCCESS_WITH_INFO; if ( !SQL_SUCCEEDED( nReturn ) ) Modified: trunk/SDK/MYSQLPlus/Library/MDiagnosticRecord.cpp =================================================================== --- trunk/SDK/MYSQLPlus/Library/MDiagnosticRecord.cpp 2006-11-13 20:20:16 UTC (rev 666) +++ trunk/SDK/MYSQLPlus/Library/MDiagnosticRecord.cpp 2006-11-13 22:34:19 UTC (rev 667) @@ -97,7 +97,7 @@ MYODBCDbgReturn( SQL_SUCCESS ); } -SQLRETURN MDiagnosticRecord::getDiagRec( SQLWCHAR *psSqlstate, SQLINTEGER *pnNativeErrorPtr, SQLWCHAR *pszMessageText, SQLSMALLINT nBufferCharLength, SQLSMALLINT *pnTextByteLength ) +SQLRETURN MDiagnosticRecord::getDiagRec( SQLWCHAR *psSqlstate, SQLINTEGER *pnNativeErrorPtr, SQLWCHAR *pszMessageText, SQLSMALLINT nBufferCharLength, SQLSMALLINT *pnTextCharLength ) { SQLRETURN nReturn; BOOL bHasInfo = false; @@ -118,7 +118,9 @@ MYODBCDbgReturn( nReturn ); nReturn = getDiagField( SQL_DIAG_MESSAGE_TEXT, pszMessageText, nBufferCharLength, &nByteLength ); - if ( pnTextByteLength ) *pnTextByteLength = nByteLength; + /* we need char length for getDiagRec, + * not byte length which is what getDiagField returns */ + if ( pnTextCharLength ) *pnTextCharLength = nByteLength / 2; if ( nReturn == SQL_SUCCESS_WITH_INFO ) bHasInfo = true; if ( !SQL_SUCCEEDED( nReturn ) )