List:Commits« Previous MessageNext Message »
From:pharvey Date:September 4 2006 11:35pm
Subject:Connector/ODBC 5 commit: r518 - trunk/SDK/MYSQLPlus/Library
View as plain text  
Modified:
   trunk/SDK/MYSQLPlus/Library/MResult.cpp
   trunk/SDK/MYSQLPlus/Library/MResult.h
   trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp
   trunk/SDK/MYSQLPlus/Library/MResultPlus.h
Log:
- more work for implementing forward-only, read-only block/noblock cursor support


Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-09-04 17:53:10 UTC (rev 517)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-09-04 23:35:24 UTC (rev 518)
@@ -62,7 +62,7 @@
     MYODBCDbgReturn3( "%d", false );
 }
 
-MResultPutData::MResultPutData()
+MResultSetData::MResultSetData()
 {
     MYODBCDbgEnter();
 
@@ -71,7 +71,7 @@
     MYODBCDbgReturn2();
 }
 
-void MResultPutData::doClear()
+void MResultSetData::doClear()
 {
     MYODBCDbgEnter();
 
@@ -99,6 +99,12 @@
 {
     MYODBCDbgEnter();
 
+    /*!
+        \internal
+        \todo
+
+        Decouple MResult from MStatement more not less.
+    */
     Q_ASSERT( pStatement );
 
     nState              = STATE_UNINITIALIZED;              // our state
@@ -111,6 +117,8 @@
     nKeySetSize         = 0;                                // cache keys for all rows
     nMaxLength          = 0;                                // get all column data for
large data types
     nMaxRows            = 0;                                // get all rows for resultset
+    nRowSetRow          = 1;                                // First row in RowSet (we
must always be 1 - RowSetSize and pref. 1 - RowSetRows).
+    nRowSetRows         = 1;                                // same as nRowSetSize
     nRowSetSize         = 1;                                // single row cursor
     nSimulateCursor     = SIMULATE_CURSOR_TRY_UNIQUE;       // we try to ensure pos
update/delete affects 1 row but in case of no unique row id - we may affect more than 1
row 
     bResultSetRowsKnown = false;
@@ -237,6 +245,7 @@
     if ( nRowSetRow > getRowSetRows() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY107, 0,
tr("Requested row exceeds RowSetRows.") ) );
 
+    resultSetData.doClear();
     resultGetData.doClear();
 
     this->nRowSetRow = nRowSetRow;
@@ -583,6 +592,12 @@
     MYODBCDbgReturn3( "%d", nRowSetRow );
 }
 
+SQLUINTEGER MResult::getRowSetRows()
+{
+    MYODBCDbgEnter();
+    MYODBCDbgReturn3( "%d", nRowSetRows );
+}
+
 SQLUINTEGER MResult::getRowSetSize()
 {
     MYODBCDbgEnter();
@@ -601,6 +616,192 @@
     MYODBCDbgReturn3( "%d", nState );
 }
 
+/*!
+    \brief  Aligns the RowSet with the first row in ResultSet.
+
+            ResultSetRow is set to the first row in ResultSet. ResultSetRow, and
+            entire RowSet is invalid if there are no rows in ResultSet and 
+            SQL_NO_DATA is returned.
+
+            RowSetRow is set to the first row in RowSet.
+
+            RowSet will be truncated if it exceeds ResultSetRows. 
+
+            RowSetRows will indicate exactly how many RowSet rows are viable. This
+            will be 0 - RowSetSize.
+
+            Any pending getData()/setData() is cleared.
+
+    \return SQLRETURN
+
+    \retval SQL_SUCCESS
+            SQL_NO_DATA - ResultSet is empty.
+            SQL_ERROR   - State < STATE_EXECUTED
+*/
+SQLRETURN MResult::doFirst()
+{
+    MYODBCDbgEnter();
+
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    resultSetData.doClear();
+    resultGetData.doClear();
+
+    if ( !nResultSetRows )
+    {
+        nResultSetRow   = 0;
+        nRowSetRow      = 1;
+        MYODBCDbgReturn( SQL_NO_DATA );
+    }
+
+    nResultSetRow = 1;
+    nRowSetRow    = 1;
+    nRowSetRows   = min( nRowSetSize, nResultSetRows );
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
+/*!
+    \brief  Aligns the RowSet with ResultSetRows - RowSetSize.
+
+            <B>ResultSetRow</B> is set to ResultSetRows - RowSetSize.
ResultSetRow, and
+            entire RowSet is invalid if there are no rows in ResultSet and 
+            SQL_NO_DATA is returned. ResultSetRow is aligned with first row and RowSet
+            will be truncated if ResultSetRows < RowSetSize.
+
+            <B>RowSet</B> will be truncated if it exceeds ResultSetRows. 
+
+            <B>RowSetRow</B> is set to the first row in RowSet.
+
+            <B>RowSetRows</B> will indicate exactly how many RowSet rows are
viable. This
+            will be 0 - RowSetSize.
+
+            Any pending getData()/setData() is cleared.
+
+    \return SQLRETURN
+
+    \retval SQL_SUCCESS
+            SQL_NO_DATA - ResultSet is empty.
+            SQL_ERROR   - State < STATE_EXECUTED
+*/
+SQLRETURN MResult::doLast()
+{
+    MYODBCDbgEnter();
+
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    // ResultSet is smaller than RowSet (RowSetSize is always 1 or more)?
+    if ( getResultSetRows() < getRowSetSize() )
+        MYODBCDbgReturn( doFirst() );
+
+    resultSetData.doClear();
+    resultGetData.doClear();
+
+    nResultSetRow = getResultSetRows() - getRowSetSize() + 1;
+    nRowSetRow    = 1;
+    nRowSetRows   = min( nRowSetSize, nResultSetRows );
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
+SQLRETURN MResult::doNext()
+{
+    MYODBCDbgEnter();
+
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    // do we need to wrap around to first?
+    if ( !isValidResultSetRow() )
+        MYODBCDbgReturn( doFirst() );
+
+    // ResultSet is smaller than RowSet (RowSetSize is always 1 or more)?
+//    if ( getResultSetRows() < getRowSetSize() )
+//        MYODBCDbgReturn( doFirst() );
+
+    resultSetData.doClear();
+    resultGetData.doClear();
+
+    nResultSetRow += getRowSetSize();
+    nRowSetRow = 1;
+
+    if ( !isValidResultSetRow() )
+        MYODBCDbgReturn( SQL_NO_DATA );
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
+SQLRETURN MResult::doPrev()
+{
+    MYODBCDbgEnter();
+
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    // do we need to wrap around to prev?
+    if ( !isValidResultSetRow() )
+        MYODBCDbgReturn( doLast() );
+
+    resultSetData.doClear();
+    resultGetData.doClear();
+
+    nResultSetRow -= getRowSetSize();
+
+    if ( !isValidRowSetRow() )
+        MYODBCDbgReturn( SQL_NO_DATA );
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
+SQLRETURN MResult::doSkip( qlonglong nRows )
+{
+    MYODBCDbgEnter();
+
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    Q_ASSERT( nRows != 0 );
+
+    resultSetData.doClear();
+    resultGetData.doClear();
+
+    if ( !isValidRowSetRow( nRow + nRows ) )
+    {
+        nRow = 0;
+        MYODBCDbgReturn( SQL_NO_DATA );
+    }
+
+    nRow += nRows;
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
+SQLRETURN MResult::doGoto( qulonglong nRow )
+{
+    MYODBCDbgEnter();
+
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    if ( getStatement()->getCursorType() == SQL_CURSOR_FORWARD_ONLY )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("doGoto() not supported when SQL_CURSOR_FORWARD_ONLY") ) );
+
+    resultSetData.doClear();
+    resultGetData.doClear();
+
+    if ( !isValidRowSetRow( nRow ) )
+    {
+        nRow = 0;
+        MYODBCDbgReturn( SQL_NO_DATA );
+    }
+
+    this->nRow = nRow;
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
 BOOLEAN MResult::isValidColumn( SQLUSMALLINT nColumn )
 {
     MYODBCDbgEnter();
@@ -656,33 +857,7 @@
     MYODBCDbgReturn3( "%d", bResultSetRowsKnown );
 }
 
-void MResult::setResultSetRowsKnown( BOOLEAN bResultSetRowsKnown )
-{
-    MYODBCDbgEnter();
 
-    this->bResultSetRowsKnown = bResultSetRowsKnown;
-
-    MYODBCDbgReturn2();
-}
-
-SQLRETURN MResult::setRowsAffected( qulonglong nRowsAffected )
-{
-    MYODBCDbgEnter();
-
-    this->nRowsAffected = nRowsAffected;
-
-    MYODBCDbgReturn( SQL_SUCCESS );
-}
-
-BOOLEAN MResult::setState( STATE nState )
-{
-    MYODBCDbgEnter();
-
-    this->nState = nState;
-
-    MYODBCDbgReturn3( "%d", true );
-}
-
 /*!
     \brief      Gets data based upon the type information in the data source.
 

Modified: trunk/SDK/MYSQLPlus/Library/MResult.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.h	2006-09-04 17:53:10 UTC (rev 517)
+++ trunk/SDK/MYSQLPlus/Library/MResult.h	2006-09-04 23:35:24 UTC (rev 518)
@@ -56,10 +56,10 @@
                 - parameter data to be used in a call to SQLExecute or SQLExecDirect
                 - column data to be used when a row is updated or added by a call to
SQLBulkOperations or is updated by a call to SQLSetPos
 */
-class MResultPutData
+class MResultSetData
 {
 public:
-    MResultPutData();
+    MResultSetData();
 
     void doClear();
 
@@ -142,7 +142,8 @@
 
             The RowSetRow is the current row in the RowSet. When the Cursor/RowSet is
moved 
             the RowSetRow is always set to the first row in the RowSet. getData/setData
can be 
-            used to get/set column data for the RowSetRow. RowSetRow is moved using
setRowSetRow.
+            used to get/set column data for the RowSetRow. RowSetRow is moved using
doGoto, 
+            doSkip, etc.
 
     \sa     MResultPlus
             MResultRes
@@ -228,7 +229,7 @@
     virtual qulonglong          getResultSetRows( bool bReal = false ) = 0; /*!< Rows
in the ResultSet (or rows loaded thus far).   */
     virtual qulonglong          getRowsAffected();
     virtual SQLUSMALLINT        getRowSetRow();
-    virtual SQLUINTEGER         getRowSetRows() = 0;
+    virtual SQLUINTEGER         getRowSetRows();
     virtual SQLUINTEGER         getRowSetSize();
     virtual SIMULATE_CURSOR     getSimulateCursor();
     STATE                       getState();
@@ -239,13 +240,13 @@
     virtual SQLRETURN doAppend() = 0;
     virtual SQLRETURN doClear() = 0;
     virtual SQLRETURN doDelete() = 0;                       /*!< Operates on
RowSetRow.                                     */
-    virtual SQLRETURN doFirst() = 0;                        /*!< Moves cursor/rowset
to start of resultset.                 */
+    virtual SQLRETURN doFirst();                            /*!< Moves cursor/rowset
to start of resultset.                 */
     virtual SQLRETURN doInsert() = 0;                       /*!< Operates on
RowSetRow.                                     */
-    virtual SQLRETURN doLast() = 0;                         /*!< Moves cursor/rowset
to end of resultset.                   */
-    virtual SQLRETURN doNext() = 0;                         /*!< Moves cursor/rowset
forward by 1 rowset size.              */
-    virtual SQLRETURN doPrev() = 0;                         /*!< Moves cursor/rowset
back by 1 rowset size.                 */ 
-    virtual SQLRETURN doSkip( qlonglong nRowSets ) = 0;     /*!< Moves cursor/rowset
relative to current row in resultset.  */
-    virtual SQLRETURN doGoto( qulonglong nRow ) = 0;        /*!< Moves cursor/rowset
relative to first row of resultset.    */
+    virtual SQLRETURN doLast();                             /*!< Moves cursor/rowset
to end of resultset.                   */
+    virtual SQLRETURN doNext();                             /*!< Moves cursor/rowset
forward by 1 rowset size.              */
+    virtual SQLRETURN doPrev();                             /*!< Moves cursor/rowset
back by 1 rowset size.                 */ 
+    virtual SQLRETURN doSkip( qlonglong nRowSets );         /*!< Moves cursor/rowset
relative to current row in resultset.  */
+    virtual SQLRETURN doGoto( qulonglong nRow );            /*!< Moves cursor/rowset
relative to first row of resultset.    */
     virtual SQLRETURN doCommit() = 0;                       
     virtual SQLRETURN doRefresh() = 0;                      /*!< Load/refreshs bound
buffers provided by application.       */
 
@@ -258,13 +259,37 @@
     virtual BOOLEAN isResultSetRowsKnown();
 
 protected:
-    MResultGetData  resultGetData;      /*!< to support getData()                     
                             */
-    MResultPutData  resultPutData;      /*!< to support doPutData()                   
                             */
+    MResultGetData  resultGetData;      /*!< to support getData() (in particular;
chunking)                                                                 */
+    MResultPutData  resultPutData;      /*!< to support doPutData() (in particular;
chunking)                                                               */
+    BOOLEAN         bResultSetRowsKnown;/*!< True if we know real value. False if we
are working with highest ResultSetRow we know about but not always all.*/
+    qulonglong      nRowsAffected;      /*!< number of rows affected by a non-SELECT
statement (catalog and SHOW statements count as SELECT in this case)   */
+    SQLUSMALLINT    nRowSetRow;         /*!< Current row in rowset.                   
                                                                     */
+    SQLUSMALLINT    nRowSetRows;        /*!< Is RowSetSize but will be less when
RowSet goes beyond ResultSetRows.                                          */            
                                                                           */
+    STATE           nState;             /*!< our state                                
                                                                     */
 
+    /*!
+        \name Statement attributes.
+
+        We duplicate these because; 
+
+        1. we want loose coupling with MStatement
+        2. we may change these due to operation/implemention details (but we do not want
to 
+           change in MStatement)
+    */
+    /*@{*/
+    CONCURENCY          nConcurrency;       /*!< SQL_ATTR_CONCURRENCY           */
+    CURSOR_SCROLLABLE   nCursorScrollable;  /*!< SQL_ATTR_CURSOR_SCROLLABLE     */ 
+    CURSOR_SENSITIVITY  nCursorSensitivity; /*!< SQL_ATTR_CURSOR_SENSITIVITY    */
+    CURSOR_TYPE         nCursorType;        /*!< SQL_ATTR_CURSOR_TYPE           */
+    SQLUINTEGER         nKeySetSize;        /*!< SQL_ATTR_KEYSET_SIZE           */
+    SQLUINTEGER         nMaxLength;         /*!< SQL_ATTR_MAX_LENGTH            */
+    SQLUINTEGER         nMaxRows;           /*!< SQL_ATTR_MAX_ROWS              */
+    qulonglong          nResultSetRow;      /*!< SQL_ATTR_ROW_NUMBER            */
+    SQLUINTEGER         nRowSetSize;        /*!< SQL_ATTR_ROW_ARRAY_SIZE        */
+    SIMULATE_CURSOR     nSimulateCursor;    /*!< SQL_ATTR_SIMULATE_CURSOR       */
+    /*@}*/
+
     /* setters */
-    void        setResultSetRowsKnown( BOOLEAN bResultSetRowsKnown );
-    SQLRETURN   setRowsAffected( qulonglong nRowsAffected );
-    BOOLEAN     setState( STATE nState );
     SQLRETURN   setGetDataDefault(); // support for getData: this is called when target C
type is SQL_C_DEFAULT  (derive type from IRD)
 
     /* getters */
@@ -380,32 +405,6 @@
     SQLRETURN doLoadMetaDataField( unsigned int nField, MYSQL_FIELD *pField,
MDescriptorIRD *pDescriptor );
 
 private:
-    BOOLEAN         bResultSetRowsKnown;/*!< True is we know real value. False if we
are working with highest ResultSetRow we know about but not all.       */
-    qulonglong      nRowsAffected;      /*!< number of rows affected by a non-SELECT
statement (catalog and SHOW statements count as SELECT in this case)   */
-    SQLUSMALLINT    nRowSetRow;         /*!< Current row in rowset.                   
                                 */
-    STATE           nState;             /*!< our state                                
                                                                     */
-
-    /*!
-        \name Statement attributes.
-
-        We duplicate these because; 
-
-        1. we want loose coupling with MStatement
-        2. we may change these due to operation/implemention details (but we do not want
to 
-           change in MStatement)
-    */
-    /*@{*/
-    CONCURENCY          nConcurrency;       /*!< SQL_ATTR_CONCURRENCY           */
-    CURSOR_SCROLLABLE   nCursorScrollable;  /*!< SQL_ATTR_CURSOR_SCROLLABLE     */ 
-    CURSOR_SENSITIVITY  nCursorSensitivity; /*!< SQL_ATTR_CURSOR_SENSITIVITY    */
-    CURSOR_TYPE         nCursorType;        /*!< SQL_ATTR_CURSOR_TYPE           */
-    SQLUINTEGER         nKeySetSize;        /*!< SQL_ATTR_KEYSET_SIZE           */
-    SQLUINTEGER         nMaxLength;         /*!< SQL_ATTR_MAX_LENGTH            */
-    SQLUINTEGER         nMaxRows;           /*!< SQL_ATTR_MAX_ROWS              */
-    qulonglong          nResultSetRow;      /*!< SQL_ATTR_ROW_NUMBER            */
-    SQLUINTEGER         nRowSetSize;        /*!< SQL_ATTR_ROW_ARRAY_SIZE        */
-    SIMULATE_CURSOR     nSimulateCursor;    /*!< SQL_ATTR_SIMULATE_CURSOR       */
-    /*@}*/
 };
 
 #endif

Modified: trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp	2006-09-04 17:53:10 UTC (rev 517)
+++ trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp	2006-09-04 23:35:24 UTC (rev 518)
@@ -173,28 +173,6 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Resultset is read-only.") ) );
 }
 
-SQLRETURN MResultPlus::doFirst()
-{
-    MYODBCDbgEnter();
-
-    if ( getState() < STATE_EXECUTED )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
-
-    resultGetData.doClear();
-
-    if ( !getResultSetRows() )
-    {
-        nResultSetRow   = 0;
-        nRowSetRow      = 1;
-        MYODBCDbgReturn( SQL_NO_DATA );
-    }
-
-    nResultSetRow = 1;
-    nRowSetRow    = 1;
-
-    MYODBCDbgReturn( SQL_SUCCESS );
-}
-
 SQLRETURN MResultPlus::doInsert()
 {
     MYODBCDbgEnter();
@@ -207,117 +185,6 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Resultset is read-only.") ) );
 }
 
-SQLRETURN MResultPlus::doLast()
-{
-    MYODBCDbgEnter();
-
-    if ( getState() < STATE_EXECUTED )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
-
-    // ResultSet is smaller than RowSet (RowSetSize is always 1 or more)?
-    if ( getResultSetRows() < getRowSetSize() )
-        MYODBCDbgReturn( doFirst() );
-
-    resultGetData.doClear();
-
-    nResultSetRow = getResultSetRows() - getRowSetSize() + 1;
-    nRowSetRow    = 1;
-
-    MYODBCDbgReturn( SQL_SUCCESS );
-}
-
-SQLRETURN MResultPlus::doNext()
-{
-    MYODBCDbgEnter();
-
-    if ( getState() < STATE_EXECUTED )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
-
-    // do we need to wrap around to first?
-    if ( !isValidResultSetRow() )
-        MYODBCDbgReturn( doFirst() );
-
-    // ResultSet is smaller than RowSet (RowSetSize is always 1 or more)?
-//    if ( getResultSetRows() < getRowSetSize() )
-//        MYODBCDbgReturn( doFirst() );
-
-    resultGetData.doClear();
-
-    nResultSetRow += getRowSetSize();
-    nRowSetRow = 1;
-
-    if ( !isValidResultSetRow() )
-        MYODBCDbgReturn( SQL_NO_DATA );
-
-    MYODBCDbgReturn( SQL_SUCCESS );
-}
-
-SQLRETURN MResultPlus::doPrev()
-{
-    MYODBCDbgEnter();
-
-    if ( getState() < STATE_EXECUTED )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
-
-    // do we need to wrap around to prev?
-    if ( !isValidResultSetRow() )
-        MYODBCDbgReturn( doLast() );
-
-    resultGetData.doClear();
-
-    nResultSetRow -= getRowSetSize();
-
-    if ( !isValidRowSetRow() )
-        MYODBCDbgReturn( SQL_NO_DATA );
-
-    MYODBCDbgReturn( SQL_SUCCESS );
-}
-
-SQLRETURN MResultPlus::doSkip( qlonglong nRows )
-{
-    MYODBCDbgEnter();
-
-    if ( getState() < STATE_EXECUTED )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
-
-    Q_ASSERT( nRows != 0 );
-
-    resultGetData.doClear();
-
-    if ( !isValidRowSetRow( nRow + nRows ) )
-    {
-        nRow = 0;
-        MYODBCDbgReturn( SQL_NO_DATA );
-    }
-
-    nRow += nRows;
-
-    MYODBCDbgReturn( SQL_SUCCESS );
-}
-
-SQLRETURN MResultPlus::doGoto( qulonglong nRow )
-{
-    MYODBCDbgEnter();
-
-    if ( getState() < STATE_EXECUTED )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
-
-    if ( getStatement()->getCursorType() == SQL_CURSOR_FORWARD_ONLY )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("doGoto() not supported when SQL_CURSOR_FORWARD_ONLY") ) );
-
-    resultGetData.doClear();
-
-    if ( !isValidRowSetRow( nRow ) )
-    {
-        nRow = 0;
-        MYODBCDbgReturn( SQL_NO_DATA );
-    }
-
-    this->nRow = nRow;
-
-    MYODBCDbgReturn( SQL_SUCCESS );
-}
-
 SQLRETURN MResultPlus::doCommit()
 {
     MYODBCDbgEnter();
@@ -412,6 +279,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     if ( !SQL_SUCCEEDED(nReturn) )
@@ -498,6 +366,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     if ( !SQL_SUCCEEDED(nReturn) )
@@ -664,6 +533,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     MYODBCDbgReturn( nReturn2 );
@@ -741,6 +611,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     MYODBCDbgReturn( nReturn2 );
@@ -816,6 +687,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     if ( !SQL_SUCCEEDED(nReturn) )
@@ -935,6 +807,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     MYODBCDbgReturn( nReturn );
@@ -1034,6 +907,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     if ( !SQL_SUCCEEDED( nReturn ) )
@@ -1133,6 +1007,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     MYODBCDbgReturn( nReturn );
@@ -1215,6 +1090,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     MYODBCDbgReturn( nReturn );
@@ -1301,6 +1177,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     MYODBCDbgReturn( nReturn );
@@ -1404,6 +1281,7 @@
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     setState( STATE_EXECUTED );
+    setResultSetRowsKnown( true );
     doNext();
 
     MYODBCDbgReturn( nReturn );

Modified: trunk/SDK/MYSQLPlus/Library/MResultPlus.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultPlus.h	2006-09-04 17:53:10 UTC (rev 517)
+++ trunk/SDK/MYSQLPlus/Library/MResultPlus.h	2006-09-04 23:35:24 UTC (rev 518)
@@ -97,7 +97,6 @@
 #endif
 
     QStringList                 stringlistTableTypesPossible;   /*!< supports
SQLTables */
-    qulonglong                  nResultSetRow;                  /*!<
SQL_ATTR_ROW_NUMBER */
 
     QStringList getTableTypes( const QString &stringFilter );
     QStringList getCatalogs( const QString &stringFilter );

Thread
Connector/ODBC 5 commit: r518 - trunk/SDK/MYSQLPlus/Librarypharvey5 Sep