List:Commits« Previous MessageNext Message »
From:pharvey Date:May 29 2006 5:53am
Subject:Connector/ODBC 5 commit: r284 - / MYSQLPlus/MYSQLPlusLib MYSQLPlus/include
View as plain text  
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/includepharvey29 May