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/include | pharvey | 25 Jun |