List:Commits« Previous MessageNext Message »
From:pharvey Date:June 25 2006 7:44pm
Subject:Connector/ODBC 5 commit: r388 - in trunk: MYODBCDriver/MYODBCDriverLib MYSQLPlus/MYSQLPlusLib MYSQLPlus/include
View as plain text  
Modified:
   trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp
   trunk/MYSQLPlus/MYSQLPlusLib/MConnection.cpp
   trunk/MYSQLPlus/include/MConnection.h
Log:
added support for SQLNativeSql but needs to be revisited as time permits (currently does
not add very much value as we have very limited SQL parsing in driver)

Modified: trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp
===================================================================
--- trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp	2006-06-25 07:16:56 UTC (rev
387)
+++ trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp	2006-06-25 19:44:48 UTC (rev
388)
@@ -84,7 +84,7 @@
 /*  SQL_API_SQLEXTENDEDFETCH,       */
 /*  SQL_API_SQLFOREIGNKEYS,         */
 /*  SQL_API_SQLMORERESULTS,         */
-/*  SQL_API_SQLNATIVESQL,           */
+    SQL_API_SQLNATIVESQL,
 /*  SQL_API_SQLNUMPARAMS,           */
 /*  SQL_API_SQLPARAMOPTIONS,        */
 /*  SQL_API_SQLPRIMARYKEYS,         */

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MConnection.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MConnection.cpp	2006-06-25 07:16:56 UTC (rev 387)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MConnection.cpp	2006-06-25 19:44:48 UTC (rev 388)
@@ -122,7 +122,7 @@
         returned SQL_SUCCESS_WITH_INFO or SQL_SUCCESS.
     */      
     if ( getState() == STATE_C3 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY010 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
 
     switch ( nAttribute )
     {
@@ -133,13 +133,13 @@
             MYODBCDbgReturn( setAsyncEnable( (SQLUINTEGER)pValue ) );
 
         case SQL_ATTR_AUTO_IPD:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
 
         case SQL_ATTR_AUTOCOMMIT:
             MYODBCDbgReturn( setAutocommit( (SQLUINTEGER)pValue ) );
 
         case SQL_ATTR_CONNECTION_DEAD:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
 
         case SQL_ATTR_CONNECTION_TIMEOUT:
             MYODBCDbgReturn( setConnectionTimeout( (SQLUINTEGER)pValue ) );
@@ -153,7 +153,7 @@
                     but not equal to SQL_NTS.
                 */
                 if ( nStringLength < 0 && nStringLength != SQL_NTS )
-                    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 )
);
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090
) );
 
                 QString stringCurrentCatalog;
                 if ( nStringLength == SQL_NTS )
@@ -191,7 +191,7 @@
                     but not equal to SQL_NTS.
                 */
                 if ( nStringLength < 0 && nStringLength != SQL_NTS )
-                    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 )
);
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090
) );
 
                 QString stringTracefile;
                 if ( nStringLength == SQL_NTS )
@@ -211,7 +211,7 @@
                     but not equal to SQL_NTS.
                 */
                 if ( nStringLength < 0 && nStringLength != SQL_NTS )
-                    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 )
);
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090
) );
 
                 QString stringTranslateLib;
                 if ( nStringLength == SQL_NTS )
@@ -229,7 +229,7 @@
             MYODBCDbgReturn( setTxnIsolation( (qint32)pValue ) );
 
         default:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
     }
 
     MYODBCDbgReturn( SQL_SUCCESS );
@@ -273,7 +273,7 @@
         returned SQL_SUCCESS_WITH_INFO or SQL_SUCCESS.
     */      
     if ( getState() == STATE_C3 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY010 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
 
     switch ( nAttribute )
     {
@@ -320,7 +320,7 @@
                 We mst have a the length at pValue.
             */
             if ( nBufferLength < 1 )
-                MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 ) );
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 )
);
 
             *pnLen = 0;
 
@@ -331,7 +331,7 @@
             bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pValue, nBufferLength /
sizeof(SQLWCHAR), (SQLWCHAR*)getCurrentCatalog().utf16(), pnLen );
             *pnLen = *pnLen * sizeof(SQLWCHAR); /* because we have char len but we want
byte len */
             if ( !bCopyOk )
-                MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_01004 ) );
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
 
         case SQL_ATTR_LOGIN_TIMEOUT:
@@ -377,7 +377,7 @@
                 We mst have a the length at pValue.
             */
             if ( nBufferLength < 1 )
-                MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 ) );
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 )
);
 
             *pnLen = 0;
 
@@ -388,7 +388,7 @@
             bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pValue, nBufferLength /
sizeof(SQLWCHAR), (SQLWCHAR*)getTracefile().utf16(), pnLen );
             *pnLen = *pnLen * sizeof(SQLWCHAR); /* because we have char len but we want
byte len */
             if ( !bCopyOk )
-                MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_01004 ) );
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
 
         case SQL_ATTR_TRANSLATE_LIB:
@@ -398,7 +398,7 @@
                 We mst have a the length at pValue.
             */
             if ( nBufferLength < 1 )
-                MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 ) );
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 )
);
 
             *pnLen = 0;
 
@@ -409,7 +409,7 @@
             bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pValue, nBufferLength /
sizeof(SQLWCHAR), (SQLWCHAR*)getTranslateLib().utf16(), pnLen );
             *pnLen = *pnLen * sizeof(SQLWCHAR); /* because we have char len but we want
byte len */
             if ( !bCopyOk )
-                MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_01004 ) );
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
             break;
 
         case SQL_ATTR_TRANSLATE_OPTION:
@@ -425,7 +425,7 @@
             break;
 
         default:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
     }
 
     MYODBCDbgReturn( SQL_SUCCESS );
@@ -1684,7 +1684,7 @@
 
         We clear diagnostic each time an ODBC API call is made (with exceptions).
     */
-    pDiagnostic->doClear();
+    getDiagnostic()->doClear();
 
     MYODBCDbgReturn( SQL_ERROR );
 }
@@ -1698,7 +1698,7 @@
 
         We clear diagnostic each time an ODBC API call is made (with exceptions).
     */
-    pDiagnostic->doClear();
+    getDiagnostic()->doClear();
 
     /*!
         \internal ODBC RULE (DM)
@@ -1711,7 +1711,7 @@
         directly to driver.
     */
     if ( getState() != STATE_C2 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_08002 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_08002 ) );
 
     /*! 
         \internal ODBC RULE (DM)
@@ -1722,7 +1722,7 @@
     if ( (nNameLength1 < 0 && nNameLength1 != SQL_NTS) || 
          (nNameLength2 < 0 && nNameLength2 != SQL_NTS) || 
          (nNameLength3 < 0 && nNameLength3 != SQL_NTS) )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
 
     /*!
         \internal ODBC RULE (DM)
@@ -1731,7 +1731,7 @@
         maximum length for a data source name.
     */
     if ( nNameLength1 > SQL_MAX_DSN_LENGTH )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
 
     QString stringServerName;
     QString stringUserName;
@@ -1752,7 +1752,7 @@
         ServerName was longer than SQL_MAX_DSN_LENGTH characters.
     */
     if ( psServerName && nNameLength1 == SQL_NTS &&
stringServerName.length() > SQL_MAX_DSN_LENGTH )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_IM010 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_IM010 ) );
 
     /*!
         \internal MYODBC RULE
@@ -1760,9 +1760,9 @@
         psUserName was longer than SQL_MAX_OPTION_STRING_LENGTH characters.
     */
     if ( psUserName && nNameLength2 == SQL_NTS && stringUserName.length()
> SQL_MAX_OPTION_STRING_LENGTH )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000, 0, "psUserName
is too long"));
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"psUserName is too long"));
     if ( psUserName && nNameLength2 != SQL_NTS && nNameLength2 >
SQL_MAX_OPTION_STRING_LENGTH )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000, 0, "psUserName
is too long"));
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"psUserName is too long"));
 
     /*!
         \internal MYODBC RULE
@@ -1770,9 +1770,9 @@
         psAuthentication was longer than SQL_MAX_OPTION_STRING_LENGTH characters.
     */
     if ( psAuthentication && nNameLength3 == SQL_NTS &&
stringAuthentication.length() > SQL_MAX_OPTION_STRING_LENGTH )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000, 0,
"pszAuthentication is too long" ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"pszAuthentication is too long" ) );
     if ( psAuthentication && nNameLength3 != SQL_NTS && nNameLength3 >
SQL_MAX_OPTION_STRING_LENGTH )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000, 0,
"pszAuthentication is too long" ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"pszAuthentication is too long" ) );
 
     /*! 
         \internal ODBC RULE (DM)
@@ -1791,7 +1791,7 @@
     datasource.setMode( MYODBCInsDataSource::DATASOURCE_MODE_DSN_VIEW );
     datasource.setScope( MYODBCInsDataSource::DATASOURCE_SCOPE_BOTH );
     if ( !datasource.doRead( stringDSN ) )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_IM002 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_IM002 ) );
     
     /*!
      \internal ODBC RULE
@@ -1828,7 +1828,7 @@
 
         We clear diagnostic each time an ODBC API call is made (with exceptions).
     */
-    pDiagnostic->doClear();
+    getDiagnostic()->doClear();
 
     /*!
         \internal ODBC RULE (DM)
@@ -1841,7 +1841,7 @@
         directly to driver.
     */
     if ( getState() != STATE_C2 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_08002 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_08002 ) );
 
     /* do it */
     MYODBCDbgReturn( doConnectInternal( pDataSource ) );
@@ -1856,7 +1856,7 @@
 
         We clear diagnostic each time an ODBC API call is made (with exceptions).
     */
-    pDiagnostic->doClear();
+    getDiagnostic()->doClear();
 
     /* save some cycles - get this once */
     STATE nState = getState();
@@ -1868,7 +1868,7 @@
         was not open.
     */
     if ( nState < STATE_C4 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_08003 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_08003 ) );
 
     /*
         \internal ODBC RULE
@@ -1877,7 +1877,7 @@
         by the argument ConnectionHandle. The transaction remains active.
     */
     if ( nState == STATE_C6 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_08003 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_08003 ) );
 
     /*
         \internal ODBC RULE (DM)
@@ -1891,7 +1891,7 @@
         a SQLSTATE value of HY010 (Function sequence error).
     */
     if ( isAsyncInProgress() )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY010 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
 
     /*
         \internal ODBC RULE (DM)
@@ -1902,7 +1902,7 @@
         was sent for all data-at-execution parameters or columns.
     */
     if ( isDataNeeded() )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY010 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
 
     /*
         \internal ODBC RULE (DM)
@@ -2234,18 +2234,127 @@
 {
     MYODBCDbgEnter();
 
-    pDiagnostic->doClear();
+    /*!
+        \internal ODBC RULE
 
+        We clear diagnostic each time an ODBC API call is made (with exceptions).
+    */
+    getDiagnostic()->doClear();
+
     MYODBCDbgReturn( SQL_ERROR );
 }
 
+/*!
+    \brief  Get a, driver modified, version of the given SQL.
+
+            The ODBC specification states a common SQL language to support in order to
increase portability. The server does not support 
+            all of this specification. This forces the driver to modify the incoming SQL
in some cases.
+
+            The driver may also need to modify the incoming SQL to make it more friendly
for transmission or for the server.
+
+            The driver often needs to modify the incoming SQL to handle bound parameters
but in this case we simply leave the parameter
+            markers in the SQL.
+
+            So this allows an app to gain insight into what the driver does to the given
SQL before sending it to the server. In other
+            words what the driver actually sends to the server.
+
+    \note   This call starts by clearing the diagnostic information for the connection.
+
+    \param  psInStatementText
+    \param  nTextLength1
+    \param  psOutStatementText
+    \param  nBufferLength
+    \param  pnTextLength2
+
+    \return SQLRETURN
+
+    \retval SQL_SUCCESS
+    \retval SQL_SUCCESS_WITH_INFO
+    \retval SQL_ERROR
+*/
 SQLRETURN MConnection::doNativeSql( SQLWCHAR *psInStatementText, SQLINTEGER nTextLength1,
SQLWCHAR *psOutStatementText, SQLINTEGER nBufferLength, SQLINTEGER *pnTextLength2 )
 {
     MYODBCDbgEnter();
 
-    pDiagnostic->doClear();
+    /*!
+        \internal
+        \todo
 
-    MYODBCDbgReturn( SQL_ERROR );
+        We probably need to pass this off to a method in an MResult based class. In this
+        way we can use some of the same code (or at least logic) actually used by
doPrepare() for 
+        example.
+
+        If we go to an extreme here we could possibly show the SQL created to handle
positioned
+        update/delete when it is done by the driver. This may mean returning multiple
statements
+        in psOutStatementText. On the other hand; one can do an odbc trace to get this
stuff.
+
+        For now; we just return the incoming SQL unaltered.
+    */
+
+    /*!
+        \internal ODBC RULE
+
+        We clear diagnostic each time an ODBC API call is made (with exceptions).
+    */
+    getDiagnostic()->doClear();
+
+    /*!
+        \internal ODBC RULE (DM)
+
+        *InStatementText was a null pointer.
+    */
+    if ( !psInStatementText )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY009 ) );
+
+    /*!
+        \internal ODBC RULE (DM)
+
+        The argument TextLength1 was less than 0, but not equal to SQL_NTS.
+    */
+    if ( nTextLength1 < 0 && nTextLength1 != SQL_NTS )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY009 ) );
+
+    /*!
+        \internal ODBC RULE (DM)
+
+        The argument BufferLength was less than 0 and the argument OutStatementText was
not a 
+        null pointer.
+    */
+    if ( nBufferLength < 0 && psOutStatementText )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY009 ) );
+
+    /*!
+        \internal ODBC RULE
+
+        The ConnectionHandle was not in a connected state.
+    */
+    if ( !isConnected() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_08003 ) );
+
+    QString     stringText;
+    SQLINTEGER  nCharsOut       = 0;
+    SQLINTEGER  nCharsMaxOut    = nBufferLength / sizeof(SQLWCHAR);
+    BOOLEAN     bTruncated      = false;
+
+    if ( nBufferLength == SQL_NTS )
+        stringText = QString::fromUtf16( psInStatementText );
+    else
+        stringText = QString::fromUtf16( psInStatementText, nTextLength1 );
+
+    /* add more value here as time permits */
+
+    bTruncated = !MYODBCC::doStringCopyOut( psOutStatementText, nCharsMaxOut,
(SQLWCHAR*)stringText.utf16(), &nCharsOut );
+
+    if ( pnTextLength2 )
+        *pnTextLength2 = nCharsOut * sizeof(SQLWCHAR);
+
+    if ( bTruncated )
+    {
+        getDiagnostic()->doAppend( MDiagnostic::DIA_01004 );
+        MYODBCDbgReturn( SQL_SUCCESS_WITH_INFO );
+    }
+
+    MYODBCDbgReturn( SQL_SUCCESS );
 }
 
 BOOLEAN MConnection::setState( STATE nState )
@@ -2294,7 +2403,7 @@
         case SQL_MODE_READ_WRITE:
             break;
         default:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
     }
 
     this->nAccessMode = nAccessMode;
@@ -2322,9 +2431,9 @@
         case SQL_ASYNC_ENABLE_OFF:
             break;
         case SQL_ASYNC_ENABLE_ON:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HYC00 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HYC00 ) );
         default:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
     }
 
     this->nAsyncEnable = nAsyncEnable;
@@ -2342,10 +2451,10 @@
             if ( getState() >= STATE_C4 )
             {
                 if ( !isTransactionSupport() )
-                    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HYC00, 0,
tr("Server does not support transactions.") ) );
+                    MYODBCDbgReturn( getDiagnostic()->doAppend(
MDiagnostic::DIA_HYC00, 0, tr("Server does not support transactions.") ) );
 
                 if ( !SQL_SUCCEEDED( doSubmitCommand( "SET AUTOCOMMIT=1" ) ) )
-                    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000 )
);
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000
) );
             }
             break;
 
@@ -2353,12 +2462,12 @@
             if ( getState() >= STATE_C4 )
             {
                 if ( !SQL_SUCCEEDED( doSubmitCommand( "SET AUTOCOMMIT=0" ) ) )
-                    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000 )
);
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000
) );
             }
             break;
 
         default:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
     }
 
     this->nAutocommit = nAutocommit;
@@ -2378,7 +2487,7 @@
     if ( nConnectionTimeout > 120 )
     {
         this->nConnectionTimeout = 120;
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_01S02 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01S02 ) );
     }
 
     this->nConnectionTimeout = nConnectionTimeout;
@@ -2391,7 +2500,7 @@
     MYODBCDbgEnter();
 
 //    if ( stringCurrentCatalog.isEmpty() )
-//        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090, 0,
tr("Missing database name.") ) );
+//        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090, 0,
tr("Missing database name.") ) );
 
     /* are we connected? */
     if ( getState() > STATE_C3 )
@@ -2404,11 +2513,11 @@
         */
         /* do we have statement which is prepared (or better)? */
         if ( isStatementActive() )
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_24000 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_24000 ) );
 
         /* try to switch databases */
         if ( mysql_select_db( (MYSQL*)getMySQL(), stringCurrentCatalog.toUtf8().data() )
)
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_3D000,
mysql_errno( (MYSQL*)getMySQL() ), mysql_error( (MYSQL*)getMySQL() ) ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_3D000,
mysql_errno( (MYSQL*)getMySQL() ), mysql_error( (MYSQL*)getMySQL() ) ) );
     }
 
     this->stringCurrentCatalog = stringCurrentCatalog;
@@ -2439,7 +2548,7 @@
         case SQL_FALSE:
             break;
         default:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
     }
 
     this->nMetadataID = nMetadataID;
@@ -2458,7 +2567,7 @@
         driver was already connected to the data source.
     */    
     if ( getState() >= STATE_C4 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_08002 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_08002 ) );
 
     /*!
         \internal MYODBC RULE
@@ -2469,11 +2578,11 @@
     {
         case SQL_CUR_USE_IF_NEEDED:
         case SQL_CUR_USE_ODBC:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HYC00 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HYC00 ) );
         case SQL_CUR_USE_DRIVER:
             break;
         default:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
     }
 
     this->nODBCCursors = nODBCCursors;
@@ -2492,13 +2601,13 @@
         made, the driver will return SQLSTATE HY011 (Attribute cannot be set now).
     */
     if ( getState() > STATE_C3 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY011 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY011 ) );
 
     /*!
         \internal
         \todo       We can probably make use of this.
     */
-    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HYC00 ) );
+    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HYC00 ) );
 
     this->nPacketSize = nPacketSize;
 
@@ -2538,9 +2647,9 @@
         case SQL_OPT_TRACE_OFF:
             break;
         case SQL_OPT_TRACE_ON:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HYC00 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HYC00 ) );
         default:
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
     }
 
     this->nTrace = nTrace;
@@ -2586,7 +2695,7 @@
         to the data source.
     */
     if ( getState() < STATE_C4 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY011 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY011 ) );
 
     /*!
         \internal 
@@ -2608,7 +2717,7 @@
         to the data source.
     */
     if ( getState() < STATE_C4 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY011 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY011 ) );
 
     /*!
         \internal 
@@ -2631,10 +2740,10 @@
         this option.
     */
     if ( getState() == STATE_C6 )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY011 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY011 ) );
 
     if ( !isTransactionSupport() )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HYC00, 0, tr("Server
does not support transactions.") ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HYC00, 0,
tr("Server does not support transactions.") ) );
 
     QString stringStatement;
 
@@ -2647,13 +2756,13 @@
     else if ( nTxnIsolation & SQL_TXN_READ_UNCOMMITTED )
         stringStatement = "SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED";
     else
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY092 ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY092 ) );
 
     /* Connected so do it now */
     if ( getState() >= STATE_C4 )
     {
         if ( !SQL_SUCCEEDED( doSubmitCommand( stringStatement.toUtf8().data() ) ) )
-            MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000 ) );
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000 ) );
     }
 
     this->nTxnIsolation = nTxnIsolation;
@@ -2787,7 +2896,7 @@
                 pDiagnostic->doAppend( MDiagnostic::DIA_01000, nReturn,
"CR_SERVER_LOST" );
                 break;
             default:
-                MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000,
nReturn, tr("Unhandled return code from mysql_ping()") ) );
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
nReturn, tr("Unhandled return code from mysql_ping()") ) );
         }
     }
 
@@ -3049,7 +3158,7 @@
     MYODBCDbgEnter();
 
     if ( !doServerAliveSanityCheck() || mysql_real_query( (MYSQL*)pMySQL,
stringCommand.toUtf8().data(), stringCommand.length() ) )
-        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY000, mysql_errno(
(MYSQL*)pMySQL ), mysql_error( (MYSQL*)pMySQL ) ) );
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_errno( (MYSQL*)pMySQL ), mysql_error( (MYSQL*)pMySQL ) ) );
 
     MYODBCDbgReturn( SQL_SUCCESS );
 }
@@ -3065,6 +3174,33 @@
     MYODBCDbgReturn3( "%d", true );
 }
 
+/*!
+    \brief      Convenience method for checking if the state 'is connected'.
+
+                This is a convenience method which, hopefully, makes the calling code
+                a little easier to understand.
+
+                This does not check if the connection is alive, it simply reports the
+                state without verification.
+                 
+    \return     BOOLEAN 
+
+    \retval     true    We are not in a connected state.
+    \retval     false   We are in a connected state.
+
+    \sa         doServerAliveSanityCheck
+                getConnectionDead
+*/
+BOOLEAN MConnection::isConnected()
+{
+    MYODBCDbgEnter();
+
+    if ( getState() >= STATE_C4 )
+        MYODBCDbgReturn3( "%d", true );
+
+    MYODBCDbgReturn3( "%d", false );
+}
+
 BOOLEAN MConnection::isTransactionSupport()
 {
     MYODBCDbgEnter();

Modified: trunk/MYSQLPlus/include/MConnection.h
===================================================================
--- trunk/MYSQLPlus/include/MConnection.h	2006-06-25 07:16:56 UTC (rev 387)
+++ trunk/MYSQLPlus/include/MConnection.h	2006-06-25 19:44:48 UTC (rev 388)
@@ -117,6 +117,7 @@
     BOOLEAN     doServerAliveSanityCheck();
 
     /* iser */
+    BOOLEAN     isConnected();
     BOOLEAN     isTransactionSupport();
     BOOLEAN     isAsyncInProgress();
     BOOLEAN     isStatementActive();

Thread
Connector/ODBC 5 commit: r388 - in trunk: MYODBCDriver/MYODBCDriverLib MYSQLPlus/MYSQLPlusLib MYSQLPlus/includepharvey25 Jun