List:Commits« Previous MessageNext Message »
From:pharvey Date:May 10 2006 5:22am
Subject:Connector/ODBC 5 commit: r217 - in MYSQLPlus: MYSQLPlusLib include
View as plain text  
Modified:
   MYSQLPlus/MYSQLPlusLib/MResult.cpp
   MYSQLPlus/MYSQLPlusLib/MResult.h
   MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
   MYSQLPlus/MYSQLPlusLib/MResultPlus.h
   MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp
   MYSQLPlus/MYSQLPlusLib/MResultStmt.h
   MYSQLPlus/MYSQLPlusLib/MStatement.cpp
   MYSQLPlus/include/MStatement.h
Log:


Modified: MYSQLPlus/MYSQLPlusLib/MResult.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.cpp	2006-05-09 23:14:44 UTC (rev 216)
+++ MYSQLPlus/MYSQLPlusLib/MResult.cpp	2006-05-10 05:22:10 UTC (rev 217)
@@ -49,6 +49,7 @@
 
     Q_ASSERT( !pStatement );
 
+    nState = STATE_UNINITIALIZED;
     pStatement->getImpParamDesc()->doClear();
     pStatement->getImpRowDesc()->doClear();
 
@@ -65,6 +66,12 @@
     MYODBCDbgReturn2();
 }
 
+STATE MResult::getState()
+{
+    MYODBCDbgEnter();
+    MYODBCDbgReturn3( "%d", nState );
+}
+
 BOOLEAN MResult::isValidColumn( uint nColumn )
 {
     BOOLEAN b;
@@ -76,6 +83,15 @@
     MYODBCDbgReturn3( "%d", b );
 }
 
+BOOLEAN MResult::setState( STATE nState )
+{
+    MYODBCDbgEnter();
+
+    this->nState = nState;
+
+    MYODBCDbgReturn3( "%d", true );
+}
+
 MStatement *MResult::getStatement()
 {
     MYODBCDbgEnter();

Modified: MYSQLPlus/MYSQLPlusLib/MResult.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.h	2006-05-09 23:14:44 UTC (rev 216)
+++ MYSQLPlus/MYSQLPlusLib/MResult.h	2006-05-10 05:22:10 UTC (rev 217)
@@ -26,12 +26,24 @@
 class MResult : public QObject
 {
 public:
+    enum STATE
+    {
+        STATE_UNINITIALIZED,
+        STATE_INITIALIZED,
+        STATE_PREPARED,
+        STATE_EXECUTED
+    };
+
     MResult( MStatement *pStatement );
     virtual ~MResult();
 
+    /* setters */
     virtual SQLRETURN setData( uint nColumn, const QVariant &variantData ) = 0;
     virtual SQLRETURN setRow( qulonglong nRow ) = 0;
 
+    /* getters */
+    STATE getState();
+
     virtual SQLRETURN getColumns( uint *pnColumns ) = 0;
     virtual SQLRETURN getData( uint nColumn, QVariant &variantData ) = 0;
     virtual SQLRETURN getRow( qulonglong *pnRow ) = 0;
@@ -57,6 +69,9 @@
 
 protected:
 
+    /* setters */
+    BOOLEAN setState( STATE nState );
+
     /* getters */
     MStatement *    getStatement();
     MDiagnostic *   getDiagnostic();
@@ -65,7 +80,11 @@
     MDescriptor *   getImpParamDesc();
     MDescriptor *   getImpRowDesc();
 
+    /* doers */
+    virtual SQLRETURN doStateRollBack( STATE nState ) = 0;
+
 private:
+    STATE nState; /*!< our state                          */
 
 };
 

Modified: MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-05-09 23:14:44 UTC (rev 216)
+++ MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-05-10 05:22:10 UTC (rev 217)
@@ -404,6 +404,42 @@
     MYODBCDbgReturn3( "%d", b );
 }
 
+SQLRETURN MResultPlus::doStateRollBack( STATE nState )
+{
+    MYODBCDbgEnter();
+
+    if ( getState() <= nState  )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01000, 0,
tr("Request to roll back state has no affect.") ) );
+
+    switch ( getState() )
+    {
+        case STATE_UNINITIALIZED:
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Invalid state; no state before STATE_UNINITIALIZED.") ) );
+            break;
+
+        case STATE_INITIALIZED:
+            setState( STATE_UNINITIALIZED );
+            break;
+
+        case STATE_PREPARED:
+            setState(STATE_INITIALIZED );
+            break;
+
+        case STATE_EXECUTED:
+            setState( STATE_PREPARED );
+            break;
+
+        default:
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown state.") ) );
+    }
+
+    /* recurse to roll-back more as needed */
+    if ( getState() > nState  )
+        MYODBCDbgReturn( doStateRollBack( nState ) );
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
 SQLRETURN MResultPlus::doAppendTypeInfo( const QVariant &stringTypeName,
                                              const QVariant &nDataType,
                                              const QVariant &nColumnSize,

Modified: MYSQLPlus/MYSQLPlusLib/MResultPlus.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-05-09 23:14:44 UTC (rev 216)
+++ MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-05-10 05:22:10 UTC (rev 217)
@@ -31,14 +31,17 @@
     MResultPlus( MStatement *pStatement );
     ~MResultPlus();
 
+    /* setters */
     SQLRETURN setData( uint nColumn, const QVariant &variantData );
     SQLRETURN setRow( qulonglong nRow );
 
+    /* getters */
     SQLRETURN getColumns( uint *pnColumns );
     SQLRETURN getData( uint nColumn, QVariant &variantData );
     SQLRETURN getRow( qulonglong *pnRow );
     SQLRETURN getRows( qulonglong *pnRows );
 
+    /* doers */
     SQLRETURN doAppend( int nToAppend = 1 );
     SQLRETURN doClear();
     SQLRETURN doDelete();
@@ -53,10 +56,13 @@
 
     SQLRETURN doGetTypeInfo( SQLSMALLINT nDataType );   /*<! \sa SQLGetTypeInfo */
 
+    /* isers */
     BOOLEAN isValidRow();
     BOOLEAN isValidRow( qulonglong nRow );
 
 protected:
+    /* doers */
+    SQLRETURN doStateRollBack( STATE nState );
 
 private:
     /* Our result set is a list of rows. Each row is a vector of column data. Column data
is a QVariant. */

Modified: MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp	2006-05-09 23:14:44 UTC (rev 216)
+++ MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp	2006-05-10 05:22:10 UTC (rev 217)
@@ -10,15 +10,17 @@
 {
     MYODBCDbgEnter();
 
-    int bUpdateMaxLength = 1;
-
+    nState          = STATE_UNINITIALIZED;
     pbindColumns    = NULL;
     nRow            = 0;
     stringStatement = QString::null;
-    pstm            = mysql_stmt_init(
(MYSQL*)(pStatement->getConnection()->getMySQL()) );
-    Q_ASSERT( !pstm );
-    mysql_stmt_attr_set( pstm, STMT_ATTR_UPDATE_MAX_LENGTH, &bUpdateMaxLength )
 
+    pstm = mysql_stmt_init( (MYSQL*)(pStatement->getConnection()->getMySQL()) );
+    if ( pstm )
+        nState = STATE_INITIALIZED;
+    else
+        pStatement->getDiagnostic()->doAppend( MDiagnostic::DIA_HY001, 0,
"mysql_stmt_init() failed" ) );
+
     MYODBCDbgReturn2();
 }
 
@@ -26,8 +28,7 @@
 {
     MYODBCDbgEnter();
 
-    mysql_stmt_close( pstm );
-    pstm = NULL;
+    doStateRollBack( STATE_UNINITALIZED );
 
     MYODBCDbgReturn2();
 }
@@ -51,6 +52,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( !isValidRow() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"Invalid row." ) );
 
@@ -97,6 +101,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( !isValidRow( nRow ) )
     {
         nRow = 0;
@@ -132,6 +139,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_PREPARED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     Q_ASSERT( !pnColumns );
 
     *pnColumns = getImpRowDesc()->getCount();
@@ -162,6 +172,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( !isValidRow() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"Invalid row." ) );
 
@@ -253,6 +266,9 @@
     SQLINTEGER *    pnIndicator     = pDescriptorRecord->getIndicatorPtr();
     SQLINTEGER *    pnOctetLength   = pDescriptorRecord->getOctetLengthPtr();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( variantData.isNull() )
     {
         if ( pnIndicator ) 
@@ -463,6 +479,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     Q_ASSERT( !pnRow );
 
     *pnRow = nRow;
@@ -488,6 +507,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     Q_ASSERT( !pnRow );
 
     /*!
@@ -534,13 +556,19 @@
 {
     MYODBCDbgEnter();
 
-    pstm;
-    pbindColumns;
-    nRow            = 0;
-    stringStatement = QString::null;
-    getImpParamDesc()->doClear();
-    getImpRowDesc()->doClear();
+    if ( getState() > STATE_INITIALIZED )
+        MYODBCDbgReturn( doStateRollBack( STATE_INITIALIZED ) );
 
+    /* we failed to init in constructor - lets give it another try */
+    if ( getState() == STATE_UNINITIALIZED )
+    {
+        pstm = mysql_stmt_init( (MYSQL*)(pStatement->getConnection()->getMySQL())
);
+        if ( pstm )
+            setState( STATE_INITIALIZED );
+        else
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY001, 0,
"mysql_stmt_init() failed" ) );
+    }
+
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
@@ -561,7 +589,7 @@
 {
     MYODBCDbgEnter();
 
-    if ( getState() < Executed )
+    if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
 
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0, "doDelete
not supported here at this time." ) );
@@ -1105,6 +1133,51 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
+/*                                                              
+    pstm;
+    pbindColumns;
+    nRow            = 0;
+    stringStatement = QString::null;
+    getImpParamDesc()->doClear();
+    getImpRowDesc()->doClear();
+                                                                
+*/
+SQLRETURN MResultStmt::doStateRollBack( STATE nState )
+{
+    MYODBCDbgEnter();
+
+    if ( getState() <= nState  )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01000, 0,
tr("Request to roll back state has no affect.") ) );
+
+    switch ( getState() )
+    {
+        case STATE_UNINITIALIZED:
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Invalid state; no state before STATE_UNINITIALIZED.") ) );
+            break;
+
+        case STATE_INITIALIZED:
+            setState( STATE_UNINITIALIZED );
+            break;
+
+        case STATE_PREPARED:
+            setState(STATE_INITIALIZED );
+            break;
+
+        case STATE_EXECUTED:
+            setState( STATE_PREPARED );
+            break;
+
+        default:
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown state.") ) );
+    }
+
+    /* recurse to roll-back more as needed */
+    if ( getState() > nState  )
+        MYODBCDbgReturn( doStateRollBack( nState ) );
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
 /*! 
     \brief  Loads result-set meta data.
 

Modified: MYSQLPlus/MYSQLPlusLib/MResultStmt.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultStmt.h	2006-05-09 23:14:44 UTC (rev 216)
+++ MYSQLPlus/MYSQLPlusLib/MResultStmt.h	2006-05-10 05:22:10 UTC (rev 217)
@@ -77,6 +77,8 @@
     BOOLEAN isValidRow( qulonglong nRow );
 
 protected:
+    /* doers */
+    SQLRETURN doStateRollBack( STATE nState );
 
 private:
     MYSQL_STMT *    pstm;               /*!< MySQL prepared statement                 
                                                   */

Modified: MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-05-09 23:14:44 UTC (rev 216)
+++ MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-05-10 05:22:10 UTC (rev 217)
@@ -224,6 +224,13 @@
 }
 
 
+MStatement::STATE MStatement::getState()
+{
+    MYODBCDbgEnter();
+
+    MYODBCDbgReturn3( "%d", nState );
+}
+
 SQLRETURN MStatement::getCursorName( SQLWCHAR *psCursorName, SQLSMALLINT nBufferLength,
SQLSMALLINT *pnNameLengthPtr )
 {
     MYODBCDbgEnter();
@@ -1670,6 +1677,15 @@
     MYODBCDbgReturn3( "%d", false );
 }
 
+BOOLEAN MStatement::setState( STATE nState )
+{
+    MYODBCDbgEnter();
+
+    this->nState = nState;
+
+    MYODBCDbgReturn3( "%d", true );
+}
+
 SQLRETURN MStatement::setAppParamDesc( MDescriptor *pDescriptor )
 {
     MYODBCDbgEnter();
@@ -2158,13 +2174,6 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
-MStatement::STATE MStatement::getState()
-{
-    MYODBCDbgEnter();
-
-    MYODBCDbgReturn3( "%d", nState );
-}
-
 MConnection *MStatement::getConnection()
 {
     MYODBCDbgEnter();

Modified: MYSQLPlus/include/MStatement.h
===================================================================
--- MYSQLPlus/include/MStatement.h	2006-05-09 23:14:44 UTC (rev 216)
+++ MYSQLPlus/include/MStatement.h	2006-05-10 05:22:10 UTC (rev 217)
@@ -35,6 +35,8 @@
     SQLRETURN setStmtAttr( SQLINTEGER nAttribute, SQLPOINTER pValue, SQLINTEGER
nStringLength );
 
     /* getters */
+    STATE     getState();
+
     SQLRETURN getCursorName( SQLWCHAR *psCursorName, SQLSMALLINT nBufferLength,
SQLSMALLINT *pnNameLengthPtr );
     SQLRETURN getData( SQLUSMALLINT nColumnNumber, SQLSMALLINT nTargetType, SQLPOINTER
pTargetValuePtr, SQLINTEGER nBufferLength, SQLINTEGER *pnStrLenOrIndPtr );
     SQLRETURN getDiagField( SQLSMALLINT nRecNumber, SQLSMALLINT nDiagIdentifier,
SQLPOINTER pDiagInfoPtr, SQLSMALLINT nBufferLength, SQLSMALLINT *pnStringLengthPtr );
@@ -82,6 +84,8 @@
 protected:
 
     /* setters */
+    BOOLEAN   setState( STATE nState );
+
     SQLRETURN setAppParamDesc( MDescriptor *pDescriptor );                  /*!<
SQL_ATTR_APP_PARAM_DESC                                            */
     SQLRETURN setAppRowDesc( MDescriptor *pDescriptor );                    /*!<
SQL_ATTR_APP_ROW_DESC                                              */       
     SQLRETURN setAsyncEnable( SQLUINTEGER nAsyncEnable );                   /*!<
SQL_ATTR_ASYNC_ENABLE                                              */
@@ -114,7 +118,6 @@
     SQLRETURN setUseBookmarks( SQLUINTEGER nUseBookmarks );                 /*!<
SQL_ATTR_USE_BOOKMARKS                                             */
 
     /* getters */
-    STATE           getState();
     MConnection *   getConnection();                
     MDiagnostic *   getDiagnostic();
 

Thread
Connector/ODBC 5 commit: r217 - in MYSQLPlus: MYSQLPlusLib includepharvey10 May