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/Library | pharvey | 5 Sep |