Modified:
MYSQLPlus/MYSQLPlusLib/MConnection.cpp
MYSQLPlus/include/MConnection.h
defines.pri
Log:
Modified: MYSQLPlus/MYSQLPlusLib/MConnection.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MConnection.cpp 2006-05-29 04:11:59 UTC (rev 283)
+++ MYSQLPlus/MYSQLPlusLib/MConnection.cpp 2006-05-29 05:53:13 UTC (rev 284)
@@ -490,7 +490,7 @@
on the InfoType.
*/
if ( !pnStringLengthBytesPtr )
- pnStringLengthBytes = &nStringLengthBytesPtr;
+ pnStringLengthBytes = &nStringLengthBytes;
/*!
\internal ODBC RULE (DM)
@@ -774,16 +774,16 @@
*pnSQLUINTEGER = SQL_UNSPECIFIED;
break;
case SQL_DATA_SOURCE_NAME:
- if ( pDbc->pszDataSourceName )
+ if ( getDataSourceName().isEmpty() )
{
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), pDbc->pszDataSourceName, &nStringLengthChars );
+ bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"", &nStringLengthChars );
*pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
if ( !bCopyOk )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004
) );
}
else
{
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"", &nStringLengthChars );
+ bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), (SQLWCHAR*)getDataSourceName().utf16(), &nStringLengthChars );
*pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
if ( !bCopyOk )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004
) );
@@ -822,7 +822,7 @@
}
else
{
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), stringDatabaseName.utf16(), &nStringLengthChars );
+ bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), (SQLWCHAR*)stringDatabaseName.utf16(), &nStringLengthChars );
*pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
if ( !bCopyOk )
MYODBCDbgReturn( getDiagnostic()->doAppend(
MDiagnostic::DIA_01004 ) );
@@ -840,11 +840,15 @@
if ( !bCopyOk )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
break;
- case SQL_DBMS_VER:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), pDbc->pMySQL->server_version, &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
+ case SQL_DBMS_VER:
+ {
+ QString stringServerVersion( ((MYSQL*)getMySQL())->server_version );
+
+ bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), (SQLWCHAR*)stringServerVersion.utf16(), &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);
@@ -865,30 +869,41 @@
We are not, of course, a Driver Manager. However; applications may link
to
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.
+
+ We use a hardcoded version but we could use SQL_SPEC_STRING to be
smarter.
*/
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L(SQL_SPEC_STRING ".0000.0000"), &nStringLengthChars );
+ bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), L"03.52.0000.0000", &nStringLengthChars );
*pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
if ( !bCopyOk )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
break;
-+++++++++++++++
case SQL_DRIVER_HDBC:
+ if ( !pInfoValue )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY024 )
);
/*!
- \internal MYODBC Rule
+ \internal
+ \note
- We are not, of course, a Driver Manager. However; applications may link
to
- us directly so lets handle this.
+ The request is to get the *drivers* connection handle.
+
+ The only way we would get this request is if the app linked directly to
the driver - if there
+ is no driver manager in the equation.
*/
- *pnSQLUINTEGER = (SQLUINTEGER)pDbc;
+ *pnSQLUINTEGER = (SQLUINTEGER)this;
break;
case SQL_DRIVER_HENV:
+ if ( !pInfoValue )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY024 )
);
/*!
- \internal MYODBC Rule
+ \internal
+ \note
- We are not, of course, a Driver Manager. However; applications may link
to
- us directly so lets handle this.
+ The request is to get the *drivers* environment handle for this
connection.
+
+ The only way we would get this request is if the app linked directly to
the driver - if there
+ is no driver manager in the equation.
*/
- *pnSQLUINTEGER = (SQLUINTEGER)pDbc->pEnv;
+ *pnSQLUINTEGER = (SQLUINTEGER)parent();
break;
case SQL_DRIVER_HDESC:
/*!
@@ -932,26 +947,39 @@
break;
case SQL_DRIVER_HSTMT:
/*!
- \internal MYODBC Rule
+ \internal ODBC RULE (DM)
- We are not, of course, a Driver Manager. However; applications may link
to
- us directly so lets handle this.
+ The InfoType argument was SQL_DRIVER_HSTMT, and the value pointed to by
+ InfoValuePtr was not a valid statement handle.
+
+ \note
+
+ We can not validate the handle type so we assume any non-null is valid.
*/
+ if ( !pInfoValue )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY024 )
);
+
/*!
- \internal ODBC Rule
+ \internal
+ \note
- (DM) The InfoType argument was SQL_DRIVER_HSTMT, and the value pointed to
by
- InfoValuePtr was not a valid statement handle.
+ The request is to get the *drivers* statement handle for the given
*driver managers* statement
+ handle.
+
+ The only way we would get this request is if the app linked directly to
the driver - if there
+ is no driver manager in the equation. With this in mind we must have been
passed our own
+ descriptor handle so we just return success.
*/
- if ( !pInfoValue || MYODBCRttiType( pInfoValue ) != MYODBC_RTTI_STM )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY024 )
);
- *pnSQLUINTEGER = (SQLUINTEGER)pInfoValue;
break;
case SQL_DRIVER_NAME:
- bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength,
MYODBC_DRIVER_NAME, &nStringLengthCharsPtr ) )
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 )
);
+ {
+ QString stringDriverName( MYODBC_DRIVER_NAME );
+
+ bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength,
(SQLWCHAR*)stringDriverName.utf16(), &nStringLengthCharsPtr ) )
+ *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
+ if ( !bCopyOk )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004
) );
+ }
break;
case SQL_DRIVER_ODBC_VER:
bCopyOk = MYODBCC::doStringCopyOut( pInfoValue, nBufferLength,
MYODBC_DRIVER_ODBC_VER, &nStringLengthCharsPtr ) )
@@ -1465,19 +1493,22 @@
SQL_FN_TD_MONTHNAME);
break;
case SQL_TXN_CAPABLE:
- if ( MYODBCDrvSupportTransactions( pDbc ) && !(pDbc->nFlag &
MYODBC_FLAG_NO_TRANSACTIONS) )
- *pnSQLUSMALLINT = SQL_TC_ALL;
- else
- *pnSQLUSMALLINT = SQL_TC_NONE;
+ /*!
+ \internal
+ \todo
+
+ Implement transaction support.
+ */
+ *pnSQLUSMALLINT = SQL_TC_NONE;
break;
case SQL_TXN_ISOLATION_OPTION:
- if ( !MYODBCDrvSupportTransactions( pDbc ) || (pDbc->nFlag &
MYODBC_FLAG_NO_TRANSACTIONS) )
- *pnSQLUINTEGER = SQL_TXN_READ_COMMITTED;
- else
- *pnSQLUINTEGER = (SQL_TXN_READ_COMMITTED |
- SQL_TXN_READ_UNCOMMITTED |
- SQL_TXN_REPEATABLE_READ |
- SQL_TXN_SERIALIZABLE);
+ /*!
+ \internal
+ \todo
+
+ Implement transaction support.
+ */
+ *pnSQLUINTEGER = SQL_TXN_READ_COMMITTED;
break;
case SQL_UNION:
*pnSQLUINTEGER = 0L;
@@ -1736,6 +1767,7 @@
if ( !datasource.getDATABASE().isEmpty() )
stringCurrentCatalog = datasource.getDATABASE();
+ setDataSourceName( stringDSN );
setState( STATE_C4 );
MYODBCDbgReturn( SQL_SUCCESS );
@@ -1889,8 +1921,8 @@
mysql_close( (MYSQL*)pMySQL );
pMySQL = NULL;
- stringCurrentCatalog = QString::null;
-
+ setCurrentCatalog( QString::null );
+ setDataSourceName( QString::null );
setState( STATE_C2 );
MYODBCDbgReturn( SQL_SUCCESS );
@@ -1941,6 +1973,15 @@
MYODBCDbgReturn3( "%d", true );
}
+BOOLEAN MConnection::setDataSourceName( const QString &stringDataSourceName )
+{
+ MYODBCDbgEnter();
+
+ this->stringDataSourceName = stringDataSourceName;
+
+ MYODBCDbgReturn3( "%d", true );
+}
+
SQLRETURN MConnection::setAccessMode( SQLUINTEGER nAccessMode )
{
MYODBCDbgEnter();
@@ -2367,6 +2408,13 @@
MYODBCDbgReturn3( "%d", nServerAliveSanityCheckInterval );
}
+QString MConnection::getDataSourceName()
+{
+ MYODBCDbgEnter();
+
+ MYODBCDbgReturn1( stringDataSourceName );
+}
+
SQLUINTEGER MConnection::getAccessMode()
{
MYODBCDbgEnter();
@@ -2453,10 +2501,11 @@
if ( getState() > STATE_C3 )
{
QString stringDatabase;
+ MYSQL * pMySQL = (MYSQL*)getMySQL();
- if ( !mysql_query( getMySQL(), "SELECT database()" ) )
+ if ( !mysql_query( pMySQL, "SELECT database()" ) )
{
- MYSQL_RES *pResult = mysql_use_result( getMySQL() );
+ MYSQL_RES *pResult = mysql_use_result( pMySQL );
if ( pResult )
{
MYSQL_ROW pRow = mysql_fetch_row( pResult );
@@ -2466,10 +2515,10 @@
mysql_free_result( pResult );
}
else
- getDiagnotsic()->doAppend( MDiagnostic::DIA_HY000, mysql_errno(
getMySQL() ), mysql_error( getMySQL() ) );
+ getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, mysql_errno( pMySQL
), mysql_error( pMySQL ) );
}
else
- getDiagnotsic()->doAppend( MDiagnostic::DIA_HY000, mysql_errno( getMySQL()
), mysql_error( getMySQL() ) );
+ getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, mysql_errno( pMySQL ),
mysql_error( pMySQL ) );
if ( !stringDatabase.isEmpty() )
MYODBCDbgReturn3( "%s", stringDatabase );
Modified: MYSQLPlus/include/MConnection.h
===================================================================
--- MYSQLPlus/include/MConnection.h 2006-05-29 04:11:59 UTC (rev 283)
+++ MYSQLPlus/include/MConnection.h 2006-05-29 05:53:13 UTC (rev 284)
@@ -60,6 +60,7 @@
/* setters */
BOOLEAN setState( STATE nState );
BOOLEAN setServerAliveSanityCheckInterval( int nMilliseconds );
+ BOOLEAN setDataSourceName( const QString &stringDataSourceName );
SQLRETURN setAccessMode( SQLUINTEGER nAccessMode );
SQLRETURN setAsyncEnable( SQLUINTEGER nAsyncEnable );
@@ -81,6 +82,7 @@
MDiagnostic * getDiagnostic();
ulong getClientFlag( ulong nOptions, const QString &stringSTMT );
int getServerAliveSanityCheckInterval();
+ QString getDataSourceName();
SQLUINTEGER getAccessMode();
SQLUINTEGER getAsyncEnable();
@@ -114,8 +116,7 @@
MDiagnostic * pDiagnostic; /*!< our diagnostic information
*/
SQLHANDLE pMySQL; /*!< SQLHANDLE instead of MYSQL* so we can
avoid *forcing* someone to include mysql headers */
STATEMENT_TYPE nStatementType; /*!< tells us which MStatement based class
we are going to work with */
- QTime timeLastQuery; /*!< part of ensuring we keep our
connection */
- int nServerAliveSanityCheckInterval; /*!< milliseconds between queries
which we consider a connection check needed */
+ QString stringDataSourceName;
SQLUINTEGER nAccessMode; /*!< SQL_ATTR_ACCESS_MODE */
SQLUINTEGER nAsyncEnable; /*!< SQL_ATTR_ASYNC_ENABLE */
@@ -134,6 +135,10 @@
QString stringTranslateLib; /*!< SQL_ATTR_TRANSLATE_LIB */
qint32 nTranslateOption; /*!< SQL_ATTR_TRANSLATE_OPTION */
qint32 nTxnIsolation; /*!< SQL_ATTR_TXN_ISOLATION */
+
+ QTime timeLastQuery; /*!< part of ensuring we keep our
connection */
+ int nServerAliveSanityCheckInterval; /*!< milliseconds between queries
which we consider a connection check needed */
+
};
#endif
Modified: defines.pri
===================================================================
--- defines.pri 2006-05-29 04:11:59 UTC (rev 283)
+++ defines.pri 2006-05-29 05:53:13 UTC (rev 284)
@@ -13,6 +13,7 @@
DEFINES += MYODBC_VENDOR=\"MySQL\"
DEFINES += MYODBC_NAME=\"MyODBC\"
DEFINES += MYODBC_DRIVER_VER=\"05.00.0002\"
+DEFINES += MYODBC_DRIVER_NAME=\"MYODBCDriver5.dll\"
# #########################################################
# Set this to the majour version number.
| Thread |
|---|
| • Connector/ODBC 5 commit: r284 - / MYSQLPlus/MYSQLPlusLib MYSQLPlus/include | pharvey | 29 May |