List:Commits« Previous MessageNext Message »
From:pharvey Date:May 28 2006 5:35pm
Subject:Connector/ODBC 5 commit: r282 - MYODBCC/MYODBCCLib MYODBCC/include MYSQLPlus/MYSQLPlusLib MYSQLPlus/include
View as plain text  
Modified:
   MYODBCC/MYODBCCLib/MYODBCC.cpp
   MYODBCC/include/MYODBCC.h
   MYSQLPlus/MYSQLPlusLib/MConnection.cpp
   MYSQLPlus/include/MConnection.h
Log:


Modified: MYODBCC/MYODBCCLib/MYODBCC.cpp
===================================================================
--- MYODBCC/MYODBCCLib/MYODBCC.cpp	2006-05-28 16:04:54 UTC (rev 281)
+++ MYODBCC/MYODBCCLib/MYODBCC.cpp	2006-05-28 17:35:19 UTC (rev 282)
@@ -1436,43 +1436,48 @@
 
                 1. the dest string is always null terminated (unless buffer is not
provided)
                 2. considers truncation
+                3. optionally returns the number of chars (not bytes) in pszSrc
 
+    \param      pszDest             The target buffer.
+    \param      nDestMaxChars       The max chars we can hold in pszDest (inlcuding null
terminator)
+    \param      pszSrc              The source string. This must be null terminated.
+    \param      pnSrcLenCharsPtr    Optional buffer to return the string length (in
chars) of pszSrc.
+
     \return     BOOLEAN
 
     \retval     true    Copy completed with no warnings/errors
                 false   Copy completed but result was truncated due to lack of space in
dest buffer 
 */
-BOOLEAN MYODBCC::doStringCopyOut( SQLWCHAR *pszDest, SQLINTEGER nDestMaxChars, SQLWCHAR
*pszSrc )
+BOOLEAN MYODBCC::doStringCopyOut( SQLWCHAR *pszDest, SQLINTEGER nDestMaxChars, SQLWCHAR
*pszSrc, SQLINTEGER *pnSrcLenCharsPtr )
 {
-    SQLINTEGER nIndex = 0;
+    SQLINTEGER  nSrcLenChars    = 0;
+    SQLINTEGER *pnSrcLenChars   = pnSrcLenCharsPtr;
 
-    /* sanity checks */
-    if ( !pszDest || nDestMaxChars < 1 )
-    {
-        if ( *pszSrc )
-            return false;
-        return true;
-    }
+    if ( !pnSrcLenCharsPtr )
+        pnSrcLenChars = &nSrcLenChars;
 
     if ( !pszSrc )
     {
-        *pszDest = '\0';
-        return true; /* ok - but nothing to copy */
+        if ( pszDest && nDestMaxChars > 0 )
+            *pszDest = '\0';
+
+        return true;
     }
 
-    /* copy chars while room in pszDest or end of pszSrc */
-    for ( nIndex = 0; nIndex < nDestMaxChars; nIndex++ )
+    *pnSrcLenChars = wcslen( pszSrc );
+
+    if ( !pszDest || nDestMaxChars < 1 )
+        return false;
+
+    wcsncpy( pszDest, pszSrc, min( nDestMaxChars, *pnSrcLenChars ) );
+
+    if ( *pnSrcLenChars >= nDestMaxChars )
     {
-        pszDest[nIndex] = pszSrc[nIndex];
-        if ( pszSrc[nIndex] == '\0' )
-            return true;
+        pszDest[nDestMaxChars - 1] = '\0';
+        return false;
     }
 
-    /* pszDest full - ensure last char is null terminator */
-    pszDest[nIndex-1] = '\0';
-
-    /* results are truncated */
-    return false;
+    return true;
 }
 
 

Modified: MYODBCC/include/MYODBCC.h
===================================================================
--- MYODBCC/include/MYODBCC.h	2006-05-28 16:04:54 UTC (rev 281)
+++ MYODBCC/include/MYODBCC.h	2006-05-28 17:35:19 UTC (rev 282)
@@ -242,9 +242,9 @@
     static QString getIntervalCodeString( SQLSMALLINT nCode );
     static QString getInstallerErrorString( RETCODE nRetCode );
 
-    static void *  doMemCpy( void *pDest, const void *pSrc, size_t nBytes );
+    static void *  doMemCpy( void *pDest, const void *pSrc, size_t nBytes );    
     static BOOLEAN doStringCopyOut( SQLCHAR *pszDest, SQLINTEGER nDestMaxChars, SQLCHAR
*pszSrc );
-    static BOOLEAN doStringCopyOut( SQLWCHAR *pszDest, SQLINTEGER nDestMaxChars, SQLWCHAR
*pszSrc );
+    static BOOLEAN doStringCopyOut( SQLWCHAR *pszDest, SQLINTEGER nDestMaxChars, SQLWCHAR
*pszSrc, SQLINTEGER *pnSrcLenChars = NULL );
     static void    doFree( void *p );
 
     static BOOLEAN isConnectAttr( SQLINTEGER nAttribute );

Modified: MYSQLPlus/MYSQLPlusLib/MConnection.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MConnection.cpp	2006-05-28 16:04:54 UTC (rev 281)
+++ MYSQLPlus/MYSQLPlusLib/MConnection.cpp	2006-05-28 17:35:19 UTC (rev 282)
@@ -448,88 +448,81 @@
     MYODBCDbgReturn( pDiagnostic->getDiagRec( nRecNumber, psSQLState, pnNativeError,
psMessageText, nBufferLength, pnTextLength ) )
 }
 
-SQLRETURN MConnection::getInfo( SQLUSMALLINT nInfoType, SQLPOINTER pInfoValuePtr,
SQLSMALLINT nBufferLength, SQLSMALLINT *pnStringLengthPtr )
+SQLRETURN MConnection::getInfo( SQLUSMALLINT nInfoType, SQLPOINTER pInfoValue,
SQLSMALLINT nBufferLength /* bytes */, SQLSMALLINT *pnStringLengthBytesPtr )
 {
     MYODBCDbgEnter();
 
+    /* cast here to make code below a little cleaner */
+    SQLUSMALLINT *      pnSQLUSMALLINT  = (SQLUSMALLINT *)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;
+    BOOLEAN             bCopyOk;
+
     /*!
         \internal ODBC RULE
 
         We clear diagnostic each time an ODBC API call is made (with exceptions).
     */
-    pDiagnostic->doClear();
+    getDiagnostic()->doClear();
 
-    MYODBC_DRV_DBC_PTR  pDbc = (MYODBC_DRV_DBC_PTR)hDbc;
-    /* cast here to make code below a little cleaner */
-    SQLUSMALLINT *      pnSQLUSMALLINT  = (SQLUSMALLINT *)pInfoValuePtr;
-    SQLUINTEGER *       pnSQLUINTEGER   = (SQLUINTEGER *)pInfoValuePtr;
-    SQLCHAR *           pszSQLCHAR      = (SQLCHAR *)pInfoValuePtr;
-    SQLSMALLINT *       pnSQLSMALLINT   = pnStringLengthPtr;
-    /* pnStringLengthPtr is optional so provide dummy to make code below a little cleaner
*/
-    SQLSMALLINT         nStringLength;
-    SQLSMALLINT *       pnStringLength  = pnStringLengthPtr;
+    /*!
+        \internal ODBC RULE (DM)
 
-    MYODBCDbgEnter( "SQLGetInfo" );
-#if MYODBC_DBG > 1
-    MYODBCDbgPrint2( "\thDbc=%p\n", hDbc );
-    MYODBCDbgPrint2( "\tnInfoType=%d", nInfoType );
-    MYODBCDbgPrint2( " %s\n", MYODBCDbgInfoTypeString( nInfoType ) );
-    MYODBCDbgPrint2( "\tpInfoValuePtr=%p\n", pInfoValuePtr );
-    MYODBCDbgPrint2( "\tnBufferLength=%d\n", nBufferLength );
-    MYODBCDbgPrint2( "\tpnStringLengthPtr=%p\n", pnStringLengthPtr );
-#endif
+        The value specified for argument BufferLength was less than 0. 
+    */
+    if ( nBufferLength < 0 )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
 
-#if MYODBC_DEV > 0
-    /* sanity check on args as we are an entry point */
-    if ( !hDbc )
-        MYODBCDbgReturn( SQL_INVALID_HANDLE );
-    if ( MYODBCRttiType( hDbc ) != MYODBC_RTTI_DBC )
-        MYODBCDbgReturn( SQL_INVALID_HANDLE );
-#endif
-
-    /* delete any pending messages for handle */
-    MYODBCDiaClear( pDbc->hDia );
-
     /*!
-        \internal ODBC Rule
+        \internal ODBC RULE (DM)
 
-        (DM) The value specified for argument BufferLength was less than 0. 
+        If *InfoValuePtr is a Unicode string (when calling SQLGetInfoW), the BufferLength
argument must be 
+        an even number; if not, SQLSTATE HY090 (Invalid string or buffer length) is
returned.
     */
-    if ( nBufferLength < 0 )
-        MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_HY090, 0, NULL ) );
+    if ( nBufferLength )
+    {
+        double nInteger;
+        if ( modf( nBufferLength, &nInteger ) != 0 )
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+    }
 
     /*!
-        \internal MYODBC Rule
+        \internal MYODBC RULE
 
-        We DO NOT consider pInfoValuePtr to be optional.
+        We DO NOT consider pInfoValue to be optional.
     */
-    if ( !pInfoValuePtr )
-        MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_HY000, 0, NULL ) );
+    if ( !pInfoValue )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("buffer, to return value, must be provided") ) );
 
     /*!
-        \internal MYODBC Rule
+        \internal MYODBC RULE
 
-        The following ODBC Rule makes pnStringLengthPtr optional.
+        The following ODBC Rule makes pnStringLength optional.
     */
     /*!
-        \internal ODBC Rule
+        \internal ODBC RULE
 
         For all other types (other than string) of data, the value of BufferLength is
ignored 
         and the driver assumes the size of *InfoValuePtr is SQLUSMALLINT or SQLUINTEGER,
depending 
         on the InfoType.
     */
-    if ( !pnStringLengthPtr )
-        pnStringLength = &nStringLength;
+    if ( !pnStringLengthBytesPtr )
+        pnStringLengthBytes = &nStringLengthBytesPtr;
 
     /*!
-        \internal ODBC Rule
+        \internal ODBC RULE (DM)
 
-        (DM) The type of information requested in InfoType requires an open connection.
Of the 
+        The type of information requested in InfoType requires an open connection. Of the

         information types reserved by ODBC, only SQL_ODBC_VER can be returned without an
open 
         connection.
     */
-    if ( pDbc->nState < MYODBC_DRV_STATE_C4 && (nInfoType != SQL_ODBC_VER
&& nInfoType != SQL_DRIVER_ODBC_VER) )
-        MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_08003, 0, NULL ) );
+    if ( getState() < STATE_C4 && (nInfoType != SQL_ODBC_VER &&
nInfoType != SQL_DRIVER_ODBC_VER) )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_08003 ) );
 
     /*!
         \todo
@@ -558,12 +551,16 @@
         case 30002:
             break;
         case SQL_ACCESSIBLE_PROCEDURES:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "Y",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"Y", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_ACCESSIBLE_TABLES:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "Y",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"Y", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_ACTIVE_ENVIRONMENTS:
             *pnSQLUSMALLINT = 0;
@@ -606,16 +603,22 @@
             *pnSQLUSMALLINT = SQL_CL_START;
             break;
         case SQL_CATALOG_NAME:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "Y",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"Y", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_CATALOG_NAME_SEPARATOR:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, ".",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L".", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_CATALOG_TERM:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "database",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"database", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_CATALOG_USAGE:
             *pnSQLUINTEGER  = (SQL_CU_DML_STATEMENTS |
@@ -625,12 +628,16 @@
                                SQL_CU_PRIVILEGE_DEFINITION);
             break;
         case SQL_COLLATION_SEQ:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_COLUMN_ALIAS:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "Y",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"Y", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_CONCAT_NULL_BEHAVIOR:
             *pnSQLUSMALLINT = SQL_CB_NULL;
@@ -791,18 +798,24 @@
         case SQL_DATA_SOURCE_NAME:
             if ( pDbc->pszDataSourceName )
             {
-                if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength,
pDbc->pszDataSourceName, (SQLINTEGER*)pnStringLength ) )
-                    MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+                bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), pDbc->pszDataSourceName, &nStringLengthChars );
+                *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+                if ( !bCopyOk )
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004
) );
             }
             else
             {
-                if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "",
(SQLINTEGER*)pnStringLength ) )
-                    MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+                bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"", &nStringLengthChars );
+                *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+                if ( !bCopyOk )
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004
) );
             }
             break;
         case SQL_DATA_SOURCE_READ_ONLY:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "N",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"N", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_DATABASE_NAME:
             {
@@ -827,13 +840,17 @@
                 /* return the current catalog */
                 if ( pDbc->attr_current_catalog )
                 {
-                    if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength,
pDbc->attr_current_catalog, (SQLINTEGER*)pnStringLength ) )
-                        MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia,
MYODBC_DIA_01004, 0, NULL ) );
+                    bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), pDbc->attr_current_catalog, &nStringLengthChars );
+                    *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+                    if ( !bCopyOk )
+                        MYODBCDbgReturn( getDiagnostic()->doAppend(
MDiagnostic::DIA_01004 ) );
                 }
                 else
                 {
-                    if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "",
(SQLINTEGER*)pnStringLength ) )
-                        MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia,
MYODBC_DIA_01004, 0, NULL ) );
+                    bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"", &nStringLengthChars );
+                    *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+                    if ( !bCopyOk )
+                        MYODBCDbgReturn( getDiagnostic()->doAppend(
MDiagnostic::DIA_01004 ) );
                 }
             }
             break;
@@ -843,12 +860,16 @@
                                SQL_DL_SQL92_TIMESTAMP);
             break;
         case SQL_DBMS_NAME:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "MySQL",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"MySQL", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_DBMS_VER:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength,
pDbc->pMySQL->server_version, (SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), pDbc->pMySQL->server_version, &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_DDL_INDEX:
             *pnSQLUINTEGER  = (SQL_DI_CREATE_INDEX | SQL_DI_DROP_INDEX);
@@ -857,8 +878,10 @@
             *pnSQLUINTEGER  = SQL_TXN_READ_COMMITTED;
             break;
         case SQL_DESCRIBE_PARAMETER:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "N",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"N", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_DM_VER:
             /*!
@@ -868,8 +891,10 @@
                 us directly. I suppose that someone could even use us as a replacement
for 
                 a DM (say on a lean machine). So lets fake it. Applications mileage may
vary.
             */
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, (SQL_SPEC_STRING
".0000.0000"), (SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L(SQL_SPEC_STRING ".0000.0000"), &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_DRIVER_HDBC:
             /*!
@@ -902,9 +927,9 @@
                 (DM) The InfoType argument was SQL_DRIVER_HDESC, and the value pointed to
by 
                 InfoValuePtr was not a valid descriptor handle.
             */
-            if ( !pInfoValuePtr || MYODBCRttiType( pInfoValuePtr ) != MYODBC_RTTI_DES )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_HY024, 0,
NULL ) );
-            *pnSQLUINTEGER  = (SQLUINTEGER)pInfoValuePtr;
+            if ( !pInfoValue || MYODBCRttiType( pInfoValue ) != MYODBC_RTTI_DES )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY024 )
);
+            *pnSQLUINTEGER  = (SQLUINTEGER)pInfoValue;
             break;
         case SQL_DRIVER_HLIB:
             /*!
@@ -918,7 +943,7 @@
 
                 We can get this (see dll.c in 3.51 driver).
             */
-            MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_HYC00, 0, NULL )
);
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HYC00 ) );
             break;
         case SQL_DRIVER_HSTMT:
             /*!
@@ -933,21 +958,27 @@
                 (DM) The InfoType argument was SQL_DRIVER_HSTMT, and the value pointed to
by 
                 InfoValuePtr was not a valid statement handle.
             */
-            if ( !pInfoValuePtr || MYODBCRttiType( pInfoValuePtr ) != MYODBC_RTTI_STM )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_HY024, 0,
NULL ) );
-            *pnSQLUINTEGER  = (SQLUINTEGER)pInfoValuePtr;
+            if ( !pInfoValue || MYODBCRttiType( pInfoValue ) != MYODBC_RTTI_STM )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY024 )
);
+            *pnSQLUINTEGER  = (SQLUINTEGER)pInfoValue;
             break;
         case SQL_DRIVER_NAME:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, MYODBC_DRIVER_NAME,
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength,
MYODBC_DRIVER_NAME, &nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_DRIVER_ODBC_VER:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength,
MYODBC_DRIVER_ODBC_VER, (SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength,
MYODBC_DRIVER_ODBC_VER, &nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_DRIVER_VER:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, MYODBC_DRIVER_VER,
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength,
MYODBC_DRIVER_VER, &nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_DROP_ASSERTION:
         case SQL_DROP_CHARACTER_SET:
@@ -992,8 +1023,10 @@
                                  SQL_CA2_SIMULATE_TRY_UNIQUE);
             break;
         case SQL_EXPRESSIONS_IN_ORDERBY:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, "Y",
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength, L"Y",
&nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_FETCH_DIRECTION: /* for compat. with 2.x */
             *pnSQLUINTEGER = (SQL_FD_FETCH_NEXT | 
@@ -1038,8 +1071,10 @@
             *pnSQLUSMALLINT = SQL_IC_MIXED;
             break;
         case SQL_IDENTIFIER_QUOTE_CHAR:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, "`",
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength, L"`",
&nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_INDEX_KEYWORDS:
             *pnSQLUINTEGER  = SQL_IK_NONE;
@@ -1053,20 +1088,26 @@
                                SQL_IS_SELECT_INTO);
             break;
         case SQL_INTEGRITY:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, "N",
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength, L"N",
&nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_KEYSET_CURSOR_ATTRIBUTES1:
         case SQL_KEYSET_CURSOR_ATTRIBUTES2:
             *pnSQLUINTEGER  = 0L;
             break;
         case SQL_KEYWORDS:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, MYODBC_DRV_KEYWORDS,
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength,
MYODBC_DRV_KEYWORDS, &nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_LIKE_ESCAPE_CLAUSE:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, "Y",
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength, L"Y",
&nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_LOCK_TYPES: /* for compat with 2.x */
         case SQL_MAX_ASYNC_CONCURRENT_STATEMENTS:
@@ -1111,8 +1152,10 @@
             *pnSQLUINTEGER  = 0L;
             break;
         case SQL_MAX_ROW_SIZE_INCLUDES_LONG:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, "Y",
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength, L"Y",
&nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_MAX_SCHEMA_NAME_LEN:
             *pnSQLUSMALLINT = NAME_LEN;
@@ -1131,12 +1174,16 @@
             break;
         case SQL_MULT_RESULT_SETS:
         case SQL_MULTIPLE_ACTIVE_TXN:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, "Y",
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength, L"Y",
&nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_NEED_LONG_DATA_LEN:
-            if ( !MYODBCCStrCopyOut( pInfoValuePtr, nBufferLength, "N",
(SQLINTEGER*)pnStringLengthPtr ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength, L"N",
&nStringLengthCharsPtr ) )
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_NON_NULLABLE_COLUMNS:
             *pnSQLUSMALLINT = SQL_NNC_NON_NULL;
@@ -1194,8 +1241,10 @@
                 are the major version and the next two digits are the minor version. This

                 is implemented solely in the Driver Manager.            
             */
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, (SQL_SPEC_STRING
".0000"), (SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L(SQL_SPEC_STRING ".0000"), &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_OJ_CAPABILITIES:
             *pnSQLUINTEGER  = (SQL_OJ_LEFT | 
@@ -1206,8 +1255,10 @@
                                SQL_OJ_RIGHT);
             break;
         case SQL_ORDER_BY_COLUMNS_IN_SELECT:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "Y",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"Y", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_PARAM_ARRAY_ROW_COUNTS:
             *pnSQLUINTEGER  = SQL_PARC_NO_BATCH;
@@ -1216,12 +1267,16 @@
             *pnSQLUINTEGER  = SQL_PAS_NO_SELECT;
             break;
         case SQL_PROCEDURE_TERM:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "procedure",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"procedure", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_PROCEDURES:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "Y",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"Y", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_POS_OPERATIONS:
             *pnSQLUINTEGER   = (SQL_POS_POSITION |
@@ -1238,12 +1293,16 @@
             *pnSQLUSMALLINT = SQL_IC_SENSITIVE;
             break;
         case SQL_ROW_UPDATES:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "N",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"N", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_SCHEMA_TERM:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "schema",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"schema", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_SCHEMA_USAGE:
             *pnSQLUINTEGER  = 0L;
@@ -1259,16 +1318,22 @@
                                SQL_SO_DYNAMIC);
             break;
         case SQL_SEARCH_PATTERN_ESCAPE:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "\\",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"\\", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_SERVER_NAME:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength,
pDbc->pMySQL->host_info, (SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), pDbc->pMySQL->host_info, &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_SPECIAL_CHARACTERS:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, MYODBC_DRV_VALID_CHARS,
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), MYODBC_DRV_VALID_CHARS, &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_SQL_CONFORMANCE:
             *pnSQLUINTEGER  = SQL_SC_SQL92_INTERMEDIATE;
@@ -1388,8 +1453,10 @@
                                SQL_FN_SYS_USERNAME);
             break;
         case SQL_TABLE_TERM:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "table",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"table", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         case SQL_TIMEDATE_ADD_INTERVALS:
         case SQL_TIMEDATE_DIFF_INTERVALS:
@@ -1433,21 +1500,27 @@
         case SQL_USER_NAME:
             if ( pDbc->pszUser )
             {
-                if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, pDbc->pszUser,
(SQLINTEGER*)pnStringLength ) )
-                    MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+                bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), pDbc->pszUser, &nStringLengthChars );
+                *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+                if ( !bCopyOk )
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004
) );
             }
             else
             {
-                if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "",
(SQLINTEGER*)pnStringLength ) )
-                    MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+                bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"", &nStringLengthChars );
+                *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+                if ( !bCopyOk )
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004
) );
             }
             break;
         case SQL_XOPEN_CLI_YEAR:
-            if ( !MYODBCCStrCopyOut( pszSQLCHAR, nBufferLength, "1992",
(SQLINTEGER*)pnStringLength ) )
-                MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_01004, 0,
NULL ) );
+            bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"1992", &nStringLengthChars );
+            *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+            if ( !bCopyOk )
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
         default:
-            MYODBCDbgReturn( MYODBCDiaAppend( pDbc->hDia, MYODBC_DIA_HYC00, 0, NULL )
);
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HYC00 ) );
     }
 
     MYODBCDbgReturn( SQL_SUCCESS );

Modified: MYSQLPlus/include/MConnection.h
===================================================================
--- MYSQLPlus/include/MConnection.h	2006-05-28 16:04:54 UTC (rev 281)
+++ MYSQLPlus/include/MConnection.h	2006-05-28 17:35:19 UTC (rev 282)
@@ -37,7 +37,7 @@
     SQLRETURN getConnectAttr( SQLINTEGER nAttribute, SQLPOINTER pValuePtr, SQLINTEGER
nBufferLength, SQLINTEGER *pnStringLengthPtr );
     SQLRETURN getDiagField( SQLSMALLINT nRecNumber, SQLSMALLINT nDiagIdentifier,
SQLPOINTER pDiagInfoPtr, SQLSMALLINT nBufferLength, SQLSMALLINT *pnStringLengthPtr );
     SQLRETURN getDiagRec( SQLSMALLINT nRecNumber, SQLWCHAR *psSQLState, SQLINTEGER
*pnNativeErrorPtr, SQLWCHAR *psMessageText, SQLSMALLINT nBufferLength, SQLSMALLINT
*pnTextLengthPtr );
-    SQLRETURN getInfo( SQLUSMALLINT nInfoType, SQLPOINTER pInfoValuePtr, SQLSMALLINT
nBufferLength, SQLSMALLINT *pnStringLengthPtr );
+    SQLRETURN getInfo( SQLUSMALLINT nInfoType, SQLPOINTER pInfoValue, SQLSMALLINT
nBufferLength, SQLSMALLINT *pnStringLength );
 
     STATE           getState();
     STATEMENT_TYPE  getStatementType();

Thread
Connector/ODBC 5 commit: r282 - MYODBCC/MYODBCCLib MYODBCC/include MYSQLPlus/MYSQLPlusLib MYSQLPlus/includepharvey28 May