List:Commits« Previous MessageNext Message »
From:pharvey Date:May 10 2006 4:50pm
Subject:Connector/ODBC 5 commit: r219 - MYSQLPlus/MYSQLPlusLib
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
Log:


Modified: MYSQLPlus/MYSQLPlusLib/MResult.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.cpp	2006-05-10 05:49:16 UTC (rev 218)
+++ MYSQLPlus/MYSQLPlusLib/MResult.cpp	2006-05-10 16:50:09 UTC (rev 219)
@@ -49,7 +49,8 @@
 
     Q_ASSERT( !pStatement );
 
-    nState = STATE_UNINITIALIZED;
+    nState      = STATE_UNINITIALIZED;
+    bReadOnly   = true;
     pStatement->getImpParamDesc()->doClear();
     pStatement->getImpRowDesc()->doClear();
 
@@ -72,6 +73,12 @@
     MYODBCDbgReturn3( "%d", nState );
 }
 
+BOOLEAN MResult::isReadOnly()
+{
+    MYODBCDbgEnter();
+    MYODBCDbgReturn3( "%d", bReadOnly );
+}
+
 BOOLEAN MResult::isValidColumn( uint nColumn )
 {
     BOOLEAN b;
@@ -92,6 +99,15 @@
     MYODBCDbgReturn3( "%d", true );
 }
 
+BOOLEAN MResult::setReadOnly( BOOLEAN bReadOnly )
+{
+    MYODBCDbgEnter();
+
+    this->nReadOnly = nReadOnly;
+
+    MYODBCDbgReturn3( "%d", true );
+}
+
 MStatement *MResult::getStatement()
 {
     MYODBCDbgEnter();

Modified: MYSQLPlus/MYSQLPlusLib/MResult.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.h	2006-05-10 05:49:16 UTC (rev 218)
+++ MYSQLPlus/MYSQLPlusLib/MResult.h	2006-05-10 16:50:09 UTC (rev 219)
@@ -63,6 +63,7 @@
     virtual SQLRETURN doSkip( qlonglong nRows ) = 0;
 
     /* isers */
+    BOOLEAN isReadOnly();
     virtual BOOLEAN isValidColumn( uint nColumn );
     virtual BOOLEAN isValidRow() = 0;
     virtual BOOLEAN isValidRow( qulonglong nRow ) = 0;
@@ -71,6 +72,7 @@
 
     /* setters */
     BOOLEAN setState( STATE nState );
+    BOOLEAN setReadOnly( BOOLEAN bReadOnly );
 
     /* getters */
     MStatement *    getStatement();
@@ -84,8 +86,8 @@
     virtual SQLRETURN doStateRollBack( STATE nState ) = 0;
 
 private:
-    STATE nState; /*!< our state                          */
-
+    STATE       nState;     /*!< our state                                            
 */
+    BOOLEAN     bReadOnly;  /*!< can a caller use methods like setData() and
doAppend() */
 };
 
 #endif

Modified: MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-05-10 05:49:16 UTC (rev 218)
+++ MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-05-10 16:50:09 UTC (rev 219)
@@ -5,7 +5,8 @@
 {
     MYODBCDbgEnter();
 
-    nRow = 0;
+    nRow    = 0;
+    nState  = STATE_INITIALIZED;
 
     MYODBCDbgReturn2();
 }
@@ -14,6 +15,8 @@
 {
     MYODBCDbgEnter();
 
+    doStateRollBack( STATE_UNINITIALIZED );
+
     MYODBCDbgReturn2();
 }
 
@@ -21,6 +24,12 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    if ( isReadOnly() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010, 0,
tr("Resultset is read-only.") ) );
+
     if ( !isValidRow() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"Invalid row." ) );
 
@@ -40,6 +49,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( !isValidRow( nRow ) )
     {
         nRow = 0;
@@ -55,6 +67,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     Q_ASSERT( !pnColumns );
 
     *pnColumns = getImpRowDesc()->getCount();
@@ -66,6 +81,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( !isValidRow() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"Invalid row." ) );
 
@@ -84,6 +102,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     Q_ASSERT( !pnRow );
 
     *pnRow = nRow;
@@ -95,6 +116,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     Q_ASSERT( !pnRow );
 
     *pnRows = listResults.count();
@@ -106,6 +130,12 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    if ( isReadOnly() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010, 0,
tr("Resultset is read-only.") ) );
+
     SQLSMALLINT nColumns = getImpRowDesc()->getCount() - 1;
 
     for ( int nAppended = 0; nAppended < nToAppend; nAppended++  )
@@ -121,10 +151,8 @@
 {
     MYODBCDbgEnter();
 
-    listResults.clear();
-    nRow = 0;
-    getImpParamDesc()->doClear();
-    getImpRowDesc()->doClear();
+    if ( getState() > STATE_INITIALIZED )
+        MYODBCDbgReturn( doStateRollBack( STATE_INITIALIZED ) );
 
     MYODBCDbgReturn( SQL_SUCCESS );
 }
@@ -133,6 +161,12 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    if ( isReadOnly() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010, 0,
tr("Resultset is read-only.") ) );
+
     Q_ASSERT( !isValidRow() );
 
     nRow--;
@@ -152,6 +186,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( !listResults.count() )
     {
         nRow = 0;
@@ -167,8 +204,12 @@
 {
     MYODBCDbgEnter();
 
-    /*! \todo inserts mess up the use of nRow for bookmarks */
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
 
+    if ( isReadOnly() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010, 0,
tr("Resultset is read-only.") ) );
+
     if ( nRow == 0 )
     {
         listResults.insert( nRow, QVector<QVariant>( getImpRowDesc()->getCount()
- 1 ) );
@@ -184,6 +225,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     nRow = listResults.count();
     if ( !isValidRow() )
         MYODBCDbgReturn( SQL_NO_DATA );
@@ -195,6 +239,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( !isValidRow() )
         MYODBCDbgReturn( doFirst() );
 
@@ -208,7 +255,6 @@
 SQLRETURN MResultPlus::doPrepare( const QString & )
 {
     MYODBCDbgEnter();
-
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0, "Prepare a
statement is not relevant for driver generated resultsets." ) );
 }
 
@@ -216,6 +262,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     if ( !isValidRow() )
         MYODBCDbgReturn( doLast() );
 
@@ -230,6 +279,9 @@
 {
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     Q_ASSERT( nRows == 0 );
 
     if ( !isValidRow( nRow + nRows ) )
@@ -250,6 +302,9 @@
     MDescriptor *pDescriptor;
 
     doClear();
+    setState( STATE_EXECUTED );
+    setReadOnly( false );
+
     pDescriptor = getImpRowDesc();
 
     /* columns */
@@ -292,6 +347,8 @@
         case SQL_WCHAR:
         case SQL_WVARCHAR:
         case SQL_WLONGVARCHAR:
+            /*! \todo */
+            doClear();
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"Not supported at this time." ) );
             break;
         case SQL_DECIMAL:
@@ -358,6 +415,8 @@
         case SQL_INTERVAL_HOUR_TO_SECOND:
         case SQL_INTERVAL_MINUTE_TO_SECOND:
         case SQL_GUID:
+            /*! \todo */
+            doClear();
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
"Not supported at this time." ) );
             break;
         default:
@@ -373,11 +432,13 @@
                 We only support calling with standard, ODBC, SQL data type or
                 SQL_ALL_TYPES.
             */
+            doClear();
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY004, 0,
NULL ) );
     }
 
     /* we should be at last record so next will make us eof and a subsequent next will be
first record */
     doNext();
+    setReadOnly( true );
 
     MYODBCDbgReturn( SQL_SUCCESS );
 }
@@ -388,6 +449,9 @@
 
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     b = isValidRow( nRow );
 
     MYODBCDbgReturn3( "%d", b );
@@ -399,6 +463,9 @@
 
     MYODBCDbgEnter();
 
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
     b = ( nRow > 0 && nRow <= listResults.count() );
 
     MYODBCDbgReturn3( "%d", b );
@@ -422,11 +489,16 @@
             break;
 
         case STATE_PREPARED:
-            setState(STATE_INITIALIZED );
+            setState( STATE_INITIALIZED );
             break;
 
         case STATE_EXECUTED:
-            setState( STATE_PREPARED );
+            listResults.clear();
+            nRow = 0;
+            getImpParamDesc()->doClear();
+            getImpRowDesc()->doClear();
+            setReadOnly( true );
+            setState( STATE_INITIALIZED ); /* we do not use a 'prepared' state */
             break;
 
         default:

Modified: MYSQLPlus/MYSQLPlusLib/MResultPlus.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-05-10 05:49:16 UTC (rev 218)
+++ MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-05-10 16:50:09 UTC (rev 219)
@@ -22,7 +22,14 @@
                 - SQLStatistics
                 - SQLTablePrivileges
 
+    \note   Currently, the resultset is always readonly so we could probably put the data
modifying methods
+            in 'protected'. Alternatively we could let callers control the read-only
attribute (and thereby
+            allow data modification) by putting a setReadOnly() in 'public'. For now;
either route can easily
+            be taken but neither is. The resultset is simply created by high level calls
such as 
+            doGetTypeInfo().
+
     \sa     MResult
+            MResultRes
             MResultStmt
 */
 class MResultPlus : public MResult
@@ -67,8 +74,12 @@
 private:
     /* Our result set is a list of rows. Each row is a vector of column data. Column data
is a QVariant. */
     QList<QVector<QVariant>>    listResults;
-    qulonglong                  nRow; /* 1 -based (0 as BOS) */
+    qulonglong                  nRow; /* 1 -based (0 as BOS/EOS) */
 
+    /*                                                              
+        These, doAppendTypeInfo*(), methods are not terribly efficient but are unlikely
to 
+        be a source of performance issues. Hopefully they are easy to
understand/maintain.
+    */
     SQLRETURN doAppendTypeInfo( const QVariant &stringTypeName,
                                 const QVariant &nDataType,
                                 const QVariant &nColumnSize,

Modified: MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp	2006-05-10 05:49:16 UTC (rev 218)
+++ MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp	2006-05-10 16:50:09 UTC (rev 219)
@@ -1058,15 +1058,6 @@
     MYODBCDbgReturn3( "%d", ( nRow > 0 && nRow <= nRows ) );
 }
 
-BOOLEAN MResultStmt::setState( STATE nState )
-{
-    MYODBCDbgEnter();
-
-    this->nState > nState;
-
-    MYODBCDbgReturn3( "%d", true );
-}
-
 /*! 
     \brief  Set the state.
 

Thread
Connector/ODBC 5 commit: r219 - MYSQLPlus/MYSQLPlusLibpharvey10 May