List:Commits« Previous MessageNext Message »
From:pharvey Date:May 12 2006 7:06am
Subject:Connector/ODBC 5 commit: r226 - MYODBCDbg/include MYSQLPlus/MYSQLPlusLib
View as plain text  
Modified:
   MYODBCDbg/include/MYODBCDbg.h
   MYSQLPlus/MYSQLPlusLib/MResult.h
   MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
   MYSQLPlus/MYSQLPlusLib/MResultPlus.h
   MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp
   MYSQLPlus/MYSQLPlusLib/MResultStmt.h
Log:


Modified: MYODBCDbg/include/MYODBCDbg.h
===================================================================
--- MYODBCDbg/include/MYODBCDbg.h	2006-05-12 05:04:38 UTC (rev 225)
+++ MYODBCDbg/include/MYODBCDbg.h	2006-05-12 07:06:26 UTC (rev 226)
@@ -180,6 +180,7 @@
 }\
 }
 
+/* WARNING !!! B gets evaluated 2 times */
 #define MYODBCDbgReturn3(A,B)\
 {\
 if ( gpMYODBCDbg )\

Modified: MYSQLPlus/MYSQLPlusLib/MResult.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.h	2006-05-12 05:04:38 UTC (rev 225)
+++ MYSQLPlus/MYSQLPlusLib/MResult.h	2006-05-12 07:06:26 UTC (rev 226)
@@ -50,7 +50,7 @@
     virtual SQLRETURN getRows( qulonglong *pnRows ) = 0;
 
     /* doers */
-    virtual SQLRETURN doAppend( int nToAppend = 1 ) = 0;
+    virtual SQLRETURN doAppend() = 0;
     virtual SQLRETURN doClear() = 0;
     virtual SQLRETURN doDelete() = 0;
     virtual SQLRETURN doExecute() = 0;

Modified: MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-05-12 05:04:38 UTC (rev 225)
+++ MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-05-12 07:06:26 UTC (rev 226)
@@ -137,7 +137,7 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
-SQLRETURN MResultPlus::doAppend( int nToAppend )
+SQLRETURN MResultPlus::doAppend()
 {
     MYODBCDbgEnter();
 
@@ -156,13 +156,9 @@
     }
 
     SQLSMALLINT nColumns = getImpRowDesc()->getCount() - 1;
+    listResults.append( QVector<QVariant>( nColumns ) );
+    nRow = listResults.count();
 
-    for ( int nAppended = 0; nAppended < nToAppend; nAppended++  )
-    {
-        listResults.append( QVector<QVariant>( nColumns ) );
-        nRow = listResults.count();
-    }
-
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 

Modified: MYSQLPlus/MYSQLPlusLib/MResultPlus.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-05-12 05:04:38 UTC (rev 225)
+++ MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-05-12 07:06:26 UTC (rev 226)
@@ -49,7 +49,7 @@
     SQLRETURN getRows( qulonglong *pnRows );
 
     /* doers */
-    SQLRETURN doAppend( int nToAppend = 1 );
+    SQLRETURN doAppend();
     SQLRETURN doClear();
     SQLRETURN doDelete();
     SQLRETURN doExecute();

Modified: MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp	2006-05-12 05:04:38 UTC (rev 225)
+++ MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp	2006-05-12 07:06:26 UTC (rev 226)
@@ -14,6 +14,11 @@
     pbindColumns    = NULL;
     nRow            = 0;
 
+    if ( pStatement->getCursorType() == SQL_CURSOR_FORWARD_ONLY ) /* this also implies
SQL_ATTR_CURSOR_SCROLLABLE = SQL_NONSCROLLABLE */
+        setBuffered( false );
+    else
+        setBuffered( true );
+
     /* init pstm */
     pstm = mysql_stmt_init( (MYSQL*)(pStatement->getConnection()->getMySQL()) );
     if ( pstm )
@@ -120,15 +125,26 @@
     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("setRow() not supported when SQL_CURSOR_FORWARD_ONLY") ) );
+    if ( nRow == this->nRow )
+        MYODBCDbgReturn( SQL_SUCCESS );
 
     if ( !isBuffered() )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("setRow() not supported for unbuffered resultset") ) );
+    {
+        if ( nRow < this->nRow )
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("setRow() not fully supported for unbuffered resultset") ) );
 
+        MYODBCDbgReturn( doSkip( this->nRow - nRow ) );
+    }
+
+    if ( nRow < this->nRow )
+    {
+        if ( getStatement()->getCursorType() == SQL_CURSOR_FORWARD_ONLY )
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("setRow() not supported when SQL_CURSOR_FORWARD_ONLY") ) );
+    }
+
     if ( nRow == 0 )
     {
-        this->nRow = nRow;
+        this->nRow = 0;
         MYODBCDbgReturn( SQL_SUCCESS );
     }
     else if ( !isValidRow( nRow ) )
@@ -137,8 +153,6 @@
         MYODBCDbgReturn( SQL_NO_DATA );
     }
 
-    Q_ASSERT( !pstm );
-
     MYODBCDbgReturn( doSeek( nRow ) );
 }
 
@@ -521,26 +535,7 @@
         MYODBCDbgReturn( SQL_NO_DATA );
     }
 
-    /*!
-        \internal MYSQL RULE
-
-        mysql_stmt_data_seek() does not provide any error information or status. 
-
-        \note
-
-        We check for errors just in case it works ;)
-    */
-    mysql_stmt_data_seek( pstm, nRow - 1 ); 
-    if ( mysql_stmt_errno( pstm ) )
-    {
-        nRow = 0;
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_stmt_errno( pstm ), mysql_stmt_error( pstm ) ) );
-    }
-
-    nRow = 1;
-    doRefresh();
-
-    MYODBCDbgReturn( SQL_SUCCESS );
+    MYODBCDbgReturn( doSeek( 1 ) );
 }
 
 /*! 
@@ -566,6 +561,12 @@
     if ( getStatement()->getConcurrency() == SQL_CONCUR_READ_ONLY )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Resultset is read-only.") ) );
 
+    /*!
+        \internal
+        \todo
+
+        Implement.
+    */
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("doInsert not supported here at this time.") ) );
 }
 
@@ -596,9 +597,6 @@
     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("doLast() not supported when SQL_CURSOR_FORWARD_ONLY") ) );
-
     if ( !isBuffered() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("doLast() not supported for unbuffered resultset") ) );
 
@@ -610,23 +608,7 @@
         MYODBCDbgReturn( SQL_NO_DATA );
     }
 
-    /*!
-        \internal MYSQL RULE
-
-        mysql_stmt_data_seek() has no return value and produces no errors - joy.
-
-        \note
-
-        We check for errors anyway :)
-    */
-    nRow = nRows;
-    mysql_stmt_data_seek( pstm, nRow - 1 ); 
-    if ( mysql_stmt_errno( pstm ) )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_stmt_errno( pstm ), mysql_stmt_error( pstm ) ) );
-
-    doRefresh();
-
-    MYODBCDbgReturn( SQL_SUCCESS );
+    MYODBCDbgReturn( doSeek( nRows ) );
 }
 
 /*! 
@@ -659,27 +641,39 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
 
-    int n = mysql_stmt_fetch( pstm );
-    switch ( n )
+    if ( isBuffered() )
     {
-        case 0:
-            nRow++;
-            MYODBCDbgReturn( doRefresh() );
-
-        case 1:
-            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_stmt_errno( pstm ), mysql_stmt_error( pstm ) ) );
-
-        case MYSQL_NO_DATA:
+        if ( !isValidRow( nRow + 1 ) )
+        {
             nRow = 0;
             MYODBCDbgReturn( SQL_NO_DATA );
+        }
+        MYODBCDbgReturn( doSeek( nRow + 1 ) );
+    }
+    else
+    {
+        int n = mysql_stmt_fetch( pstm );
+        switch ( n )
+        {
+            case 0:
+                nRow++;
+                MYODBCDbgReturn( doRefresh() );
 
-        case MYSQL_DATA_TRUNCATED:
-            nRow++;
-            doRefresh();
-            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_22001,
mysql_stmt_errno( pstm ), mysql_stmt_error( pstm ) ) );
+            case 1:
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_stmt_errno( pstm ), mysql_stmt_error( pstm ) ) );
 
-        default:
-            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, n,
tr("unknown return code from mysql_stmt_fetch()") ) );
+            case MYSQL_NO_DATA:
+                nRow = 0;
+                MYODBCDbgReturn( SQL_NO_DATA );
+
+            case MYSQL_DATA_TRUNCATED:
+                nRow++;
+                doRefresh();
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_22001,
mysql_stmt_errno( pstm ), mysql_stmt_error( pstm ) ) );
+
+            default:
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, n,
tr("unknown return code from mysql_stmt_fetch()") ) );
+        }
     }
 
     MYODBCDbgReturn( SQL_SUCCESS );
@@ -756,21 +750,19 @@
     if ( getStatement()->getCursorType() == SQL_CURSOR_FORWARD_ONLY )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("doPrev() not supported when SQL_CURSOR_FORWARD_ONLY") ) );
 
+    if ( !isBuffered() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("doPrev() not supported for unbuffered resultset") ) );
+
     if ( !isValidRow() )
         MYODBCDbgReturn( doLast() );
 
-    nRow--;
-    if ( !isValidRow() )
+    if ( !isValidRow( nRow - 1 ) )
     {
         nRow = 0;
         MYODBCDbgReturn( SQL_NO_DATA );
     }
 
-    mysql_stmt_data_seek( pstm, nRow - 1 ); 
-
-    doRefresh();
-
-    MYODBCDbgReturn( SQL_SUCCESS );
+    MYODBCDbgReturn( doSeek( nRow - 1 ) );
 }
 
 /*! 
@@ -805,19 +797,35 @@
     if ( nRows == 0 )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01000, 0,
tr("doSkip 0 records is meaningless.") ) );
 
-    if ( getStatement()->getCursorType() == SQL_CURSOR_FORWARD_ONLY && nRows
< 0 )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("doSkip() not fully supported when SQL_CURSOR_FORWARD_ONLY") ) );
+    if ( nRows < 0 )
+    {
+        if ( getStatement()->getCursorType() == SQL_CURSOR_FORWARD_ONLY )
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("doSkip() not fully supported when SQL_CURSOR_FORWARD_ONLY") ) );
+    }
 
-    if ( !isValidRow( nRow + nRows ) )
+    if ( isBuffered() )
     {
-        nRow = 0;
-        MYODBCDbgReturn( SQL_NO_DATA );
+        if ( (nRow + nRows) <= 0 || !isValidRow( nRow + nRows ) )
+        {
+            nRow = 0;
+            MYODBCDbgReturn( SQL_NO_DATA );
+        }
+
+        MYODBCDbgReturn( doSeek( nRow + nRows ) );
     }
+    else
+    {
+        SQLRETURN nReturn;
 
-    nRow += nRows;
-    mysql_stmt_data_seek( pstm, nRow - 1 ); 
-    doRefresh();
+        for ( qulonglong n = 0; n < nRows; n++ )
+        {
+            nReturn = doNext();
+            if ( !SQL_SUCCEEDED( nReturn ) )
+                MYODBCDbgReturn( nReturn );
+        }
 
+    }
+
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
@@ -866,11 +874,7 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn3( "%d", false );
 
-    /* eof/bof */
-    if ( nRow == 0 )
-        MYODBCDbgReturn3( "%d", false );
-
-    MYODBCDbgReturn3( "%d", true );
+    MYODBCDbgReturn3( "%d", ( nRow != 0 ) );
 }
 
 /*! 
@@ -898,6 +902,9 @@
     if ( nRow == 0 )
         MYODBCDbgReturn3( "%d", false );
 
+    if ( nRow <= this->nRow )
+        MYODBCDbgReturn3( "%d", true );
+
     nReturn = getRows( &nRows );
     if ( !SQL_SUCCEEDED( nReturn ) )
         MYODBCDbgReturn3( "%d", false );
@@ -980,7 +987,7 @@
             break;
 
         default:
-            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown state.") ) );
+            Q_ASSERT( true );
     }
 
     /* recurse to roll-back more as needed */
@@ -990,7 +997,7 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
-SQLRETURN MResultStmt::doSeek( qulonglong nRow )
+SQLRETURN MResultStmt::doSeek( qulonglong nRow /* 1-based */ )
 {
     MYODBCDbgEnter();
 
@@ -1011,10 +1018,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_stmt_errno( pstm ), mysql_stmt_error( pstm ) ) );
 
     SQLRETURN nReturn = doRefresh();
-    if ( !SQL_SUCCEEDED( nReturn ) )
+    if ( SQL_SUCCEEDED( nReturn ) )
         this->nRow = nRow;
     else
-        this->nRow = nRow;
+        this->nRow = 0;
 
     MYODBCDbgReturn( nReturn );
 }
@@ -1063,7 +1070,7 @@
                 if ( !variantData.canConvert<QString>() )
                     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
                 QString stringData = variantData.asString();
-                MYODBCC::doStrNCpy( (SQLWCHAR)pdata,
pDescriptorRecord->getOctetLength() / sizeof(SQLWCHAR), stringData.utf16() );
+                MYODBCC::doStrNCpy( (SQLWCHAR*)pdata,
pDescriptorRecord->getOctetLength() / sizeof(SQLWCHAR), stringData.utf16() );
                 if ( pnOctetLength ) *pnOctetLength = stringData.length() *
sizeof(SQLWCHAR);
             }
             break;
@@ -1364,7 +1371,7 @@
         for ( nField = 0; nField < nFields; nField++ )
         {
             pField  = mysql_fetch_field( pMetaData );
-            nReturn = doLoadMetaDataField( nField + 1, pField );
+            SQLRETURN nReturn = doLoadMetaDataField( nField + 1, pField );
             if ( !SQL_SUCCEEDED( nReturn ) )
             {
                 mysql_free_result( pMetaData );
@@ -1447,7 +1454,7 @@
 /*  pDescriptorRecord->setliteral_prefix;               - type specific     */
 /*  pDescriptorRecord->setliteral_suffix;               - type specific     */
     pDescriptorRecord->setLocalTypeName( "" );
-    pDescriptorRecord->setName( nField pField->name );
+    pDescriptorRecord->setName( pField->name );
     pDescriptorRecord->setNullable( ((pField->flags && NOT_NULL_FLAG) ?
SQL_NO_NULLS : SQL_NULLABLE) );
 /*  pDescriptorRecord->setnum_prec_radix;               - type specific     */   
 /*  pDescriptorRecord->setoctet_length;                 - type specific     */

Modified: MYSQLPlus/MYSQLPlusLib/MResultStmt.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultStmt.h	2006-05-12 05:04:38 UTC (rev 225)
+++ MYSQLPlus/MYSQLPlusLib/MResultStmt.h	2006-05-12 07:06:26 UTC (rev 226)
@@ -59,7 +59,7 @@
     SQLRETURN getRow( qulonglong *pnRow );
     SQLRETURN getRows( qulonglong *pnRows );
 
-    SQLRETURN doAppend( int nToAppend = 1 );
+    SQLRETURN doAppend();
     SQLRETURN doClear();
     SQLRETURN doDelete();
     SQLRETURN doExecute();

Thread
Connector/ODBC 5 commit: r226 - MYODBCDbg/include MYSQLPlus/MYSQLPlusLibpharvey12 May