List:Commits« Previous MessageNext Message »
From:pharvey Date:September 27 2006 9:10pm
Subject:Connector/ODBC 5 commit: r557 - in trunk/SDK/MYSQLPlus: Library Tests
View as plain text  
Modified:
   trunk/SDK/MYSQLPlus/Library/MResult.cpp
   trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
   trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp
Log:
adjusted tests;
- added missing call to doFetch()
- do not expect row count (ResultSetRows) to be accurate because, by default, we are using
non-buffered ResultSet

Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-09-27 16:42:52 UTC (rev 556)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-09-27 19:10:30 UTC (rev 557)
@@ -1863,7 +1863,6 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d] nRowsIndex=%d nColumn=%d nTargetType=%d\n", __FILE__,
__FUNCTION__, __LINE__, nRowsIndex, nColumn, nTargetType  );
     /*!
         \internal ODBC RULE (implied)
 
@@ -2076,7 +2075,6 @@
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY003 ) );
     }
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000 ) );
 }
 
@@ -2295,7 +2293,6 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d] %d\n", __FILE__, __FUNCTION__, __LINE__,
pResultGetData->nTargetTypeAdjusted );
     /*!
         \internal ODBC RULE
 
@@ -2325,8 +2322,6 @@
             MYODBCDbgReturn( toUShortC( pResultGetData ) );
         case SQL_C_LONG:
         case SQL_C_SLONG:
-
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             MYODBCDbgReturn( toSLongC( pResultGetData ) );
         case SQL_C_ULONG:
             MYODBCDbgReturn( toULongC( pResultGetData ) );
@@ -2772,7 +2767,6 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d] Row: %d Column: %d\n", __FILE__, __FUNCTION__, __LINE__,
pResultGetData->nRow, pResultGetData->nColumn );
     /*!
         \internal ODBC RULE
 
@@ -2799,7 +2793,6 @@
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
         /* make a copy we can easily work with (avoid re-convert) in case of chunking
(optimize this later) */
         pResultGetData->stringData =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toString();
-printf( "[PAH][%s][%s][%d] pResultGetData->stringData = %s\n", __FILE__, __FUNCTION__,
__LINE__, pResultGetData->stringData.toLatin1().data() );
     }
 
     /* do we even need to do the data bit (or just looking for len)? */
@@ -2807,7 +2800,6 @@
     {
         if ( MYODBCC::doStringCopyOut( (SQLCHAR*)pResultGetData->pTarget,
pResultGetData->nBytesMax, (SQLCHAR*)pResultGetData->stringData.toAscii().data() )
)
         {
-printf( "[PAH][%s][%s][%d] pResultGetData->pTarget = %s\n", __FILE__, __FUNCTION__,
__LINE__, pResultGetData->pTarget );
             *pResultGetData->pnBytesRemaining = 0;
         }
         else
@@ -2995,7 +2987,6 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /*!
         \internal ODBC RULE
 
@@ -3026,8 +3017,6 @@
     }
     else
     {
-printf( "[PAH][%s][%s][%d] null = %d length = %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].isNull(),
vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toByteArray().length() );
-printf( "[PAH][%s][%s][%d] Row: %d Column: %d Value: %s\n", __FILE__, __FUNCTION__,
__LINE__, pResultGetData->nRow, pResultGetData->nColumn,
vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toString().toLatin1().data() );
         if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<qlonglong>() ) 
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
         *((long int *)pResultGetData->pTarget) = (long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toLongLong();

Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.cpp	2006-09-27 16:42:52 UTC (rev 556)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.cpp	2006-09-27 19:10:30 UTC (rev 557)
@@ -256,6 +256,8 @@
 
         Submit command to server as utf8. We probably want to be smarter about what
encoding we use here.
     */
+
+printf( "[PAH][%s][%s][%d] Command: %s\n", __FILE__, __FUNCTION__, __LINE__,
stringStatement.toLatin1().data() );
     if ( mysql_real_query( getMySQL(), stringStatement.toUtf8().constData(),
stringStatement.length() ) )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
 
@@ -331,10 +333,18 @@
         has been called since the SQL_DIAG_ROW_COUNT field was set, the value returned by
SQLRowCount might be different from the 
         value in the SQL_DIAG_ROW_COUNT field because the SQL_DIAG_ROW_COUNT field is
reset to 0 by any function call.                
     */
-    if ( pCommand->isResultSetPossible() )
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
+    /*
+        We have a ResultSet if the doLoadMetaData() call turned up 1 or more columns.
This is more 
+        reliable than isResultSetPossible().
+    */        
+    // if ( pCommand->isResultSetPossible() )
+    if ( getColumns() )
     {
         qulonglong nRows = 0;
 
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
         if ( getBuffered() == BUFFERED_MYSQL_CLIENT )
         {
             /*!
@@ -347,6 +357,8 @@
 
                 We try to report error anyway ;)
             */
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             nRows = mysql_num_rows( pRes );
             if ( mysql_errno( getMySQL() ) )
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
@@ -359,6 +371,8 @@
     }
     else
     {
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
         qulonglong nRows = mysql_affected_rows( getMySQL() );
         setRowsAffected( nRows );
     }
@@ -968,16 +982,13 @@
 
     for ( nColumn = 0; nColumn < nColumns; nColumn++ )
     {
-printf( "[PAH][%s][%s][%d] nColumn = %d\n", __FILE__, __FUNCTION__, __LINE__, nColumn );
         if ( pRow[nColumn] )
         {
             MYSQL_FIELD *pField = mysql_fetch_field_direct( pRes, nColumn );
 
-printf( "[PAH][%s][%s][%d] pField->type = %d\n", __FILE__, __FUNCTION__, __LINE__,
pField->type );
             switch ( pField->type )
             {
                 case MYSQL_TYPE_NULL:
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
                     vectorRows[nRow][nColumn].clear();
                     break;
                 case MYSQL_TYPE_BIT:
@@ -1003,18 +1014,15 @@
                 case MYSQL_TYPE_VAR_STRING:
                 case MYSQL_TYPE_GEOMETRY:
                     vectorRows[nRow][nColumn] = pRow[nColumn];
-printf( "[PAH][%s][%s][%d] Value: (%s) should be (%s)\n", __FILE__, __FUNCTION__,
__LINE__, vectorRows[nRow][nColumn].toString().toLatin1().data(), pRow[nColumn] );
                     break;
                 case MYSQL_TYPE_TINY_BLOB:
                 case MYSQL_TYPE_BLOB:
                 case MYSQL_TYPE_MEDIUM_BLOB:
                 case MYSQL_TYPE_LONG_BLOB:
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
                     vectorRows[nRow][nColumn].setValue( QByteArray( (const char
*)pRow[nColumn], pField->max_length ) );
                     break;
                 default:
                     {
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
                         getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Invalid column data type.") );
                         MYODBCDbgReturn( SQL_ROW_ERROR );
                     }
@@ -1022,7 +1030,6 @@
         }
         else
         {
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             vectorRows[nRow][nColumn].clear();
         }
     }

Modified: trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp	2006-09-27 16:42:52 UTC (rev 556)
+++ trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp	2006-09-27 19:10:30 UTC (rev 557)
@@ -481,27 +481,46 @@
         textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
     QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
 
-    /* we should have 1 row and 1 col with value = 1 */
-    nReturn = statement.getDiagField( 0, SQL_DIAG_CURSOR_ROW_COUNT, &nRowCount, 0,
NULL );
-    if ( nReturn != SQL_SUCCESS )
-        textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
-    QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
-    QCOMPARE( nRowCount, (SQLINTEGER)1 );
+    /* 1st Result (we should have 1 row and 1 col with value = 1)... */
+    {
+        /* we are not buffering so we get 0 rows... */
+        nReturn = statement.getDiagField( 0, SQL_DIAG_CURSOR_ROW_COUNT, &nRowCount,
0, NULL );
+        if ( nReturn != SQL_SUCCESS )
+            textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+        QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+        QCOMPARE( nRowCount, (SQLINTEGER)0 );
 
-    nReturn = statement.doNumResultCols( &nNumResultCols );
-    if ( nReturn != SQL_SUCCESS )
-        textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
-    QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
-    QVERIFY( nNumResultCols == 1 );
+        nReturn = statement.doNumResultCols( &nNumResultCols );
+        if ( nReturn != SQL_SUCCESS )
+            textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+        QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+        QVERIFY( nNumResultCols == 1 );
 
-    nReturn = statement.getData( 1, SQL_C_LONG, &nCount, 0, &nStrLenOrIndCount );
-    if ( nReturn != SQL_SUCCESS )
-        textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
-    QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
-    QVERIFY( nCount == 1 );
-    QVERIFY( nStrLenOrIndCount == 0 );
+        /* go to first row... */
+        nReturn = statement.doFetch();
+        QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
 
-    /* do more */
+        /* get our data... */
+        nReturn = statement.getData( 1, SQL_C_LONG, &nCount, 0,
&nStrLenOrIndCount );
+        if ( nReturn != SQL_SUCCESS )
+            textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+        QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+        QVERIFY( nCount == 1 );
+        QVERIFY( nStrLenOrIndCount == 0 );
+
+        /* no more rows... */
+        nReturn = statement.doFetch();
+        QCOMPARE( nReturn, (SQLRETURN)SQL_NO_DATA );
+
+        /* we have read all rows so we should know our row count now... */
+        nReturn = statement.getDiagField( 0, SQL_DIAG_CURSOR_ROW_COUNT, &nRowCount,
0, NULL );
+        if ( nReturn != SQL_SUCCESS )
+            textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+        QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+        QCOMPARE( nRowCount, (SQLINTEGER)1 );
+    }
+
+    /* more results... */
     int nResultCount = 1;
     while ( 1 )
     {
@@ -548,6 +567,10 @@
                 QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
                 QVERIFY( nNumResultCols == 1 );
 
+                /* go to first row... */
+                nReturn = statement.doFetch();
+                QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+
                 *szCreatedResult = '\0';
                 nReturn = statement.getData( 1, SQL_C_CHAR, &szCreatedResult, 100,
&nStrLenOrIndCreatedResult );
                 QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );

Thread
Connector/ODBC 5 commit: r557 - in trunk/SDK/MYSQLPlus: Library Testspharvey27 Sep