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 Tests | pharvey | 27 Sep |