List:Commits« Previous MessageNext Message »
From:pharvey Date:September 27 2006 4:42pm
Subject:Connector/ODBC 5 commit: r556 - in trunk/SDK: MYSQLPlus/Library MYSQLPlus/Tests Tst/Library
View as plain text  
Modified:
   trunk/SDK/MYSQLPlus/Library/MResult.cpp
   trunk/SDK/MYSQLPlus/Library/MResult.h
   trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp
   trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
   trunk/SDK/MYSQLPlus/Library/MStatement.cpp
   trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp
   trunk/SDK/Tst/Library/MYODBCTstGetData.c
Log:
- fixed some bounds/indexing issues
- addressed an assignment issue to QVariant which was not converting data correctly
- now stores MYSQL_TYPE_VAR_STRING as string and not binary (when going into data
conversion hub)

Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-09-25 11:20:29 UTC (rev 555)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-09-27 16:42:52 UTC (rev 556)
@@ -895,19 +895,16 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
 
     resultSetData.doClear();
     resultGetData.doClear();
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     SQLRETURN nReturn = doNext_();
     if ( !SQL_SUCCEEDED( nReturn ) )
         MYODBCDbgReturn( nReturn );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /*!
         \internal ODBC RULE
 
@@ -916,7 +913,6 @@
     if ( !getResultSetRows() )
         MYODBCDbgReturn( setBeforeStart() );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /*!
         \internal ODBC RULE
 
@@ -938,7 +934,6 @@
         MYODBCDbgReturn( SQL_SUCCESS );
     }
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /*!
         \internal ODBC RULE
 
@@ -951,7 +946,6 @@
     if ( isAfterEnd() )
         MYODBCDbgReturn( setAfterEnd() ); // just be sure all vars set
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /*!
         \internal ODBC RULE
 
@@ -973,7 +967,6 @@
         MYODBCDbgReturn( SQL_SUCCESS );
     }
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /*!
         \internal ODBC RULE
 
@@ -986,7 +979,6 @@
     if ( nResultSetRow + nRowSetSize > getResultSetRows() )
         MYODBCDbgReturn( setAfterEnd() );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0, tr("Unknown
condition in doNext().") ) );
 }
 
@@ -1496,7 +1488,7 @@
 
     BOOLEAN b = isValidResultSetRow();
     if ( b )
-        b = !( getRowSetRow() > 0 && ( getRowSetRow() <= getRowSetRows() )
);
+        b = ( getRowSetRow() > 0 && ( getRowSetRow() <= getRowSetRows() )
);
 
     MYODBCDbgReturn3( "%d", b );
 }
@@ -1862,11 +1854,16 @@
     \brief  Get column data from ResultSet/RowSet.
 
             This supports the getData() which operates on RowSetRow AND doRefresh()
(bound array or single row). 
+
+    \param  nRowsIndex  Index into vectorRows. 0-based.
+    \param  nColumn     Index into vectorRows[nRow]. 1-based.
+
 */
 SQLRETURN MResult::getData( SQLUINTEGER nRowsIndex, SQLUSMALLINT nColumn, SQLSMALLINT
nTargetType, SQLPOINTER pTarget, SQLINTEGER nBufferLength, SQLINTEGER *pnLength,
SQLINTEGER *pnIndicator )
 {
     MYODBCDbgEnter();
 
+printf( "[PAH][%s][%s][%d] nRowsIndex=%d nColumn=%d nTargetType=%d\n", __FILE__,
__FUNCTION__, __LINE__, nRowsIndex, nColumn, nTargetType  );
     /*!
         \internal ODBC RULE (implied)
 
@@ -1877,7 +1874,7 @@
     {
         if ( MDescriptorRecordIRD::isVariableLength(
resultGetData.pDescriptorRecordIRD->getConciseType() ) )
         {
-            if  ( resultGetData.nColumn == 0 || *(resultGetData.pnBytesRemaining) == 0 ||
vectorRows[resultGetData.nRow][resultGetData.nColumn].isNull() )
+            if  ( *(resultGetData.pnBytesRemaining) == 0 ||
vectorRows[resultGetData.nRow][resultGetData.nColumn - 1].isNull() )
                 MYODBCDbgReturn( SQL_NO_DATA );
 
             /*!
@@ -1922,7 +1919,7 @@
             resultGetData.pnBytesRemaining = &resultGetData.nBytesRemaining;
 
         /* get indicator value; no need to process further if we are null */
-        if ( vectorRows[resultGetData.nRow][resultGetData.nColumn].isNull() )
+        if ( vectorRows[resultGetData.nRow][resultGetData.nColumn - 1].isNull() )
         {
             resultGetData.nIndicator        = SQL_NULL_DATA;
             *resultGetData.pnBytesRemaining = 0;
@@ -2079,6 +2076,7 @@
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY003 ) );
     }
 
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000 ) );
 }
 
@@ -2297,6 +2295,7 @@
 {
     MYODBCDbgEnter();
 
+printf( "[PAH][%s][%s][%d] %d\n", __FILE__, __FUNCTION__, __LINE__,
pResultGetData->nTargetTypeAdjusted );
     /*!
         \internal ODBC RULE
 
@@ -2326,6 +2325,8 @@
             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 ) );
@@ -2771,6 +2772,7 @@
 {
     MYODBCDbgEnter();
 
+printf( "[PAH][%s][%s][%d] Row: %d Column: %d\n", __FILE__, __FUNCTION__, __LINE__,
pResultGetData->nRow, pResultGetData->nColumn );
     /*!
         \internal ODBC RULE
 
@@ -2793,10 +2795,11 @@
     /* convert to string (if possible) */
     if ( pResultGetData->stringData.isNull() )
     {
-        if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<QString>()
)
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QString>() )
             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].toString();
+        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)? */
@@ -2804,6 +2807,7 @@
     {
         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
@@ -2861,10 +2865,10 @@
     /* convert to string (if possible) */
     if ( pResultGetData->stringData.isNull() )
     {
-        if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<QString>()
)
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QString>() )
             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].toString();
+        pResultGetData->stringData =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toString();
     }
 
     /* do we even need to do the data bit (or just looking for len)? */
@@ -2928,10 +2932,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<short
int>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<short int>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((short int *)(pResultGetData->pTarget)) = (short
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toInt();
+    *((short int *)(pResultGetData->pTarget)) = (short
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -2965,10 +2969,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<unsigned
short int>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<unsigned short int>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((unsigned short int *)pResultGetData->pTarget) = (unsigned short
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toUInt();
+    *((unsigned short int *)pResultGetData->pTarget) = (unsigned short
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toUInt();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -2991,6 +2995,7 @@
 {
     MYODBCDbgEnter();
 
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /*!
         \internal ODBC RULE
 
@@ -3013,17 +3018,19 @@
          pResultGetData->pDescriptorRecordIRD->getConciseType() == SQL_TYPE_DATE   
    ||
          pResultGetData->pDescriptorRecordIRD->getConciseType() ==
SQL_TYPE_TIMESTAMP )
     {
-        if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<QDateTime>()
) 
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QDateTime>() ) 
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-        *((long int *)pResultGetData->pTarget) = (long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toDateTime().toTime_t();
+        *((long int *)pResultGetData->pTarget) = (long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toDateTime().toTime_t();
         
     }
     else
     {
-        if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<qlonglong>()
) 
+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].toLongLong();
+        *((long int *)pResultGetData->pTarget) = (long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toLongLong();
     }
 
     *pResultGetData->pnBytesRemaining = 0;
@@ -3061,7 +3068,7 @@
 //    if ( !pResultGetData->variantData.canConvert<unsigned long int>() ) 
 //        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((unsigned long int *)pResultGetData->pTarget) = (unsigned long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toULongLong();
+    *((unsigned long int *)pResultGetData->pTarget) = (unsigned long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toULongLong();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -3095,10 +3102,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<float>()
) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<float>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((float *)pResultGetData->pTarget) =
(float)vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toDouble();
+    *((float *)pResultGetData->pTarget) =
(float)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toDouble();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -3132,10 +3139,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<double>()
) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<double>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((double *)pResultGetData->pTarget) =
(double)vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toDouble();
+    *((double *)pResultGetData->pTarget) =
(double)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toDouble();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -3169,7 +3176,7 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<unsigned
char>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<unsigned char>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
     /*!
@@ -3179,9 +3186,9 @@
 
         This rule is for compat with v3 - but we issue a warning.
     */
-    if ( vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toInt() == 0 )
+    if ( vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt() == 0
)
         *((unsigned char *)pResultGetData->pTarget) = 0;
-    else if ( vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toInt() ==
1 )
+    else if ( vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt()
== 1 )
         *((unsigned char *)pResultGetData->pTarget) = 1;
     else
     {
@@ -3221,10 +3228,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<char>()
) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<char>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((char *)pResultGetData->pTarget) =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toInt();
+    *((char *)pResultGetData->pTarget) =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -3258,10 +3265,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<unsigned
char>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<unsigned char>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((unsigned char *)pResultGetData->pTarget) =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toInt();
+    *((unsigned char *)pResultGetData->pTarget) =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -3295,10 +3302,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<qint64>()
) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<qint64>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((qint64 *)pResultGetData->pTarget) =
(qint64)vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toLongLong();
+    *((qint64 *)pResultGetData->pTarget) =
(qint64)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toLongLong();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -3332,10 +3339,10 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<quint64>()
) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<quint64>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    *((quint64 *)pResultGetData->pTarget) =
(quint64)vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toLongLong();
+    *((quint64 *)pResultGetData->pTarget) =
(quint64)vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toLongLong();
 
     *pResultGetData->pnBytesRemaining = 0;
 
@@ -3361,10 +3368,10 @@
     /* convert to bytearray */
     if ( pResultGetData->bytearrayData.isNull() )
     {
-        if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<QByteArray>()
)
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QByteArray>() )
             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->bytearrayData =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toByteArray();
+        pResultGetData->bytearrayData =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toByteArray();
     }
 
     /* do we even need to do the data bit (or just looking for len)? */
@@ -3443,10 +3450,10 @@
 
     SQL_DATE_STRUCT *pDateTarget = (SQL_DATE_STRUCT *)pResultGetData->pTarget;
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<QDate>()
) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QDate>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    QDate d             =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toDate();
+    QDate d             = vectorRows[pResultGetData->nRow][pResultGetData->nColumn
- 1].toDate();
     pDateTarget->day    = d.day();
     pDateTarget->month  = d.month();
     pDateTarget->year   = d.year();
@@ -3485,10 +3492,10 @@
 
     SQL_TIME_STRUCT *pTimeTarget = (SQL_TIME_STRUCT *)pResultGetData->pTarget;
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<QTime>()
) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QTime>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    QTime t             =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toTime();
+    QTime t             = vectorRows[pResultGetData->nRow][pResultGetData->nColumn
- 1].toTime();
     pTimeTarget->hour   = t.hour();
     pTimeTarget->minute = t.minute();
     pTimeTarget->second = t.second();
@@ -3527,10 +3534,10 @@
 
     SQL_TIMESTAMP_STRUCT *pTimeStampTarget = (SQL_TIMESTAMP_STRUCT
*)pResultGetData->pTarget;
 
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<QDateTime>()
) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QDateTime>() ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
 
-    QDateTime t =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toDateTime();
+    QDateTime t = vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toDateTime();
     pTimeStampTarget->day        = t.date().day();
     pTimeStampTarget->fraction   = t.time().msec(); /*! \todo fraction is not same as
msec - look into it */
     pTimeStampTarget->hour       = t.time().hour();
@@ -3578,7 +3585,7 @@
     /* our high precision stuff (DECIMAL) is stored as a string and all other numerics
can be turned into a string 
        so lets use a string as our starting point - in this way we hope to catch &
report any possible loss of 
        precision/scale :) */
-    if (
!vectorRows[pResultGetData->nRow][pResultGetData->nColumn].canConvert<QString>()
)
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QString>() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006, 0,
tr("Variant (data conversion hub) could not convert to a string.") ) );
 
     /*!
@@ -3592,7 +3599,7 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
     }
 
-    QString stringData =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn].toString().trimmed();
+    QString stringData = vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toString().trimmed();
 
     /*!
         \internal ODBC RULE

Modified: trunk/SDK/MYSQLPlus/Library/MResult.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.h	2006-09-25 11:20:29 UTC (rev 555)
+++ trunk/SDK/MYSQLPlus/Library/MResult.h	2006-09-27 16:42:52 UTC (rev 556)
@@ -364,9 +364,12 @@
 
                 At some point block-cursors may be supported in the server. If this
happens we may need to
                 abstract ourself from this - but for now its a handy solution which meets
our needs.
+
+                Index 0 is NOT reserved for any bookmark - it is the 1st column of data.
     */
     /*@{*/
-    MResultRows             vectorRows;
+    QVector<MResultColumns> vectorRows;
+//    MResultRows             vectorRows;
     /*@}*/
 
     /*!

Modified: trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp	2006-09-25 11:20:29 UTC (rev 555)
+++ trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp	2006-09-27 16:42:52 UTC (rev 556)
@@ -53,7 +53,7 @@
 
     resultGetData.doClear();
 
-    vectorRows[getResultSetRow() - 1 + getRowSetRow() - 1].replace( nColumn - 1,
variantData );
+    vectorRows[getRowSetRowIndex()].replace( nColumn - 1, variantData );
 
     MYODBCDbgReturn( SQL_SUCCESS );
 }

Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.cpp	2006-09-25 11:20:29 UTC (rev 555)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.cpp	2006-09-27 16:42:52 UTC (rev 556)
@@ -292,25 +292,30 @@
             MYODBCDbgReturn( nReturnInternal );
     }
 
-    switch ( getBuffered() )
+    /* do we have a ResultSet? */
+    if ( getColumns() )
     {
-        case BUFFERED_UNBUFFERED:
-            // *we* will buffer RowSet only
-            for ( SQLUINTEGER n = 0; n < getRowSetSize(); n++ ) { vectorRows.append(
MResultColumns( getColumns() ) ); }    
-            vectorStatus.resize( getRowSetSize() );
-            break;
-        case BUFFERED_MYSQL_PLUS:
-            // *we* will buffer ResultSet but only as needed/used
-            vectorRows.resize( 0 );
-            vectorStatus.resize( getRowSetSize() );
-            break;
-        case BUFFERED_MYSQL_CLIENT:
-            // *we* will buffer RowSet only
-            for ( SQLUINTEGER n = 0; n < getRowSetSize(); n++ ) { vectorRows.append(
MResultColumns( getColumns() ) ); }
-            vectorStatus.resize( getRowSetSize() );
-            break;
-        default:
-            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown buffer type.") ) );
+        /* what kind of ResultSet buffering are we using? */
+        switch ( getBuffered() )
+        {
+            case BUFFERED_UNBUFFERED:
+                // *we* will buffer RowSet only
+                for ( SQLUINTEGER n = 0; n < getRowSetSize(); n++ ) {
vectorRows.append( MResultColumns( getColumns() ) ); }    
+                vectorStatus.resize( getRowSetSize() );
+                break;
+            case BUFFERED_MYSQL_PLUS:
+                // *we* will buffer ResultSet but only as needed/used
+                vectorRows.resize( 0 );
+                vectorStatus.resize( getRowSetSize() );
+                break;
+            case BUFFERED_MYSQL_CLIENT:
+                // *we* will buffer RowSet only
+                for ( SQLUINTEGER n = 0; n < getRowSetSize(); n++ ) {
vectorRows.append( MResultColumns( getColumns() ) ); }
+                vectorStatus.resize( getRowSetSize() );
+                break;
+            default:
+                MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown buffer type.") ) );
+        }
     }
 
     /* we need STATE_EXECUTED here so getRows() will work */
@@ -442,19 +447,16 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     SQLRETURN nReturn1 = SQL_SUCCESS;
 
     switch ( getBuffered() )
     {
         case BUFFERED_UNBUFFERED:
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY106 ) );
 
         case BUFFERED_MYSQL_PLUS:
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             if ( !isResultSetRowsKnown() )
             {
                 if ( getResultSetRows() < getRowSetSize() )
@@ -464,7 +466,6 @@
 
         case BUFFERED_MYSQL_CLIENT:
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             if ( getResultSetRows() )
             {
                 mysql_data_seek( pRes, 0 );
@@ -476,7 +477,6 @@
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown buffer type.") ) );
     }
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     MYODBCDbgReturn( nReturn1 );
 }
 
@@ -596,21 +596,14 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
-if ( vectorRows.count() )
-    printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
-
     if ( isAfterEnd() )
         MYODBCDbgReturn( SQL_SUCCESS );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     SQLRETURN nReturn1 = SQL_SUCCESS;
 
     switch ( getBuffered() )
     {
         case BUFFERED_UNBUFFERED:
-
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             nReturn1 = getRowSetData();
             break;
 
@@ -618,7 +611,6 @@
             if ( isBeforeStart() )
                 MYODBCDbgReturn( doFirst_() );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             while ( !isResultSetRowsKnown() && getResultSetRow() +
getRowSetSize() >= getResultSetRows() )
             {
                 nReturn1 = getRowSetData();
@@ -631,7 +623,6 @@
             if ( isBeforeStart() )
                 MYODBCDbgReturn( doFirst_() );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             if ( getResultSetRow() + getRowSetSize() < getResultSetRows() )
             {
                 mysql_data_seek( pRes, getResultSetRow() + getRowSetSize() );
@@ -643,7 +634,6 @@
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown buffer type.") ) );
     }
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     MYODBCDbgReturn( nReturn1 );
 }
 
@@ -889,10 +879,6 @@
 
     SQLUSMALLINT nRowSetRow = 0;
 
-printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
-if ( vectorRows.count() )
-    printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
-
     if ( getRowSetSize() < 1 )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("RowSetSize < 1") ) );
 
@@ -901,23 +887,19 @@
         case BUFFERED_UNBUFFERED:
         case BUFFERED_MYSQL_CLIENT:
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             /* load next RowSetRows from res - replace RowSet */
             {
                 // vectorRows.clear();
                 while ( nRowSetRow < getRowSetSize() )
                 {
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
                     MYSQL_ROW pRow = mysql_fetch_row( pRes );
                     if ( pRow )
                     {
-printf( "[PAH][%s][%s][%d] %d %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorStatus.count(), nRowSetRow );
                         vectorStatus[nRowSetRow] = getRowSetRowData( pRow, nRowSetRow );
                         nRowSetRow++;
                     }
                     else
                     {
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
                         if ( getBuffered() == BUFFERED_UNBUFFERED )
                             setResultSetRows( getResultSetRows() + nRowSetRow, true );
                         MYODBCDbgReturn( SQL_SUCCESS );
@@ -926,8 +908,6 @@
                 if ( getBuffered() == BUFFERED_UNBUFFERED )
                     setResultSetRows( getResultSetRows() + nRowSetRow );
             }
-
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             break;
 
         case BUFFERED_MYSQL_PLUS:
@@ -983,27 +963,21 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
-if ( vectorRows.count() )
-    printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
-
     SQLUSMALLINT nColumns  = getColumns();
     SQLUSMALLINT nColumn   = 0;
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     for ( nColumn = 0; nColumn < nColumns; nColumn++ )
     {
-printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
-if ( vectorRows.count() )
-    printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
-
+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:
@@ -1026,30 +1000,31 @@
                 case MYSQL_TYPE_ENUM:
                 case MYSQL_TYPE_SET:
                 case MYSQL_TYPE_STRING:
+                case MYSQL_TYPE_VAR_STRING:
                 case MYSQL_TYPE_GEOMETRY:
-printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
-if ( vectorRows.count() )
-    printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
-
-                    vectorRows[nRow][nColumn].setValue( QString( (const char
*)pRow[nColumn] ) );
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
+                    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_VAR_STRING:
                 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 );
                     }
             }
         }
         else
+        {
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             vectorRows[nRow][nColumn].clear();
+        }
     }
 
     MYODBCDbgReturn( SQL_ROW_SUCCESS );

Modified: trunk/SDK/MYSQLPlus/Library/MStatement.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2006-09-25 11:20:29 UTC (rev 555)
+++ trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2006-09-27 16:42:52 UTC (rev 556)
@@ -764,7 +764,7 @@
     // if ( nColumnNumber == 0 && nBufferLength < 4 && ODBCVER <
0x0300 && ODBCVER >= 0x0200 )
     //    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
 
-    /* get data */
+
     SQLINTEGER  nLength;
     SQLINTEGER  nIndicator;
     SQLRETURN   nReturn = pResult->getData( nColumnNumber, nTargetType, pTargetValue,
nBufferLength, &nLength, &nIndicator );
@@ -2870,7 +2870,6 @@
 {
     MYODBCDbgEnter();
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /*!
         \internal ODBC RULE
 
@@ -2966,7 +2965,6 @@
     if ( nFetchOrientation == SQL_FETCH_BOOKMARK && getFetchBookmarkPtr() == NULL
)
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY111 ) );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     setState( STATE_S6 );
 
     switch ( nFetchOrientation )
@@ -3790,7 +3788,6 @@
         goto doPrepareExit1;
     }
 
-
     /* first command is current by default - this is the one we will prepare for execute
now */
     nReturn = doPrepare( pCommands->getCommand() );
     if ( !SQL_SUCCEEDED( nReturn ) )

Modified: trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp	2006-09-25 11:20:29 UTC (rev 555)
+++ trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp	2006-09-27 16:42:52 UTC (rev 556)
@@ -241,18 +241,15 @@
     SQLWCHAR    szNameWide[100];
     SQLINTEGER  nStrLenOrInd;
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /* this *should* error out so we do not show diag message - diagnostics will be
cleared by next call */
     nReturn = statement.doNumResultCols( &nCols );
     QCOMPARE( nReturn, (SQLRETURN)SQL_ERROR );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     nReturn = statement.doExecDirect( TEXT("SELECT * FROM tbMyODBCTest"), SQL_NTS );
     if ( nReturn != SQL_SUCCESS )
         textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
     QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /* ResultSetRows... */
     nReturn = statement.getDiagField( 0, SQL_DIAG_CURSOR_ROW_COUNT, &nRows,
SQL_IS_INTEGER, NULL );
     if ( nReturn != SQL_SUCCESS )
@@ -260,7 +257,6 @@
     QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
     QCOMPARE( nRows, (SQLINTEGER)0 ); /* 0 not 3 (as one may expect) because we are by
default using a non-buffered result */
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /* RowsAffected... */
     nReturn = statement.doRowCount( &nRows );
     if ( nReturn != SQL_SUCCESS )
@@ -268,7 +264,6 @@
     QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
     QCOMPARE( nRows, (SQLINTEGER)0 );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /* Columns... */
     nReturn = statement.doNumResultCols( &nCols );
     if ( nReturn != SQL_SUCCESS )
@@ -276,12 +271,10 @@
     QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
     QCOMPARE( nCols, (SQLSMALLINT)3 );
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
     /* ResultSet data... */
     nRows = 0;
     while ( 1 )
     {
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
         nReturn = statement.doFetch();
         if ( nReturn == SQL_NO_DATA )
             break;
@@ -290,7 +283,6 @@
 
         nRows++;
 
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
         nReturn = statement.getData( 1, SQL_C_LONG, &nUserID, 0, &nStrLenOrInd );
         if ( nReturn != SQL_SUCCESS )
             textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
@@ -299,7 +291,6 @@
 
         if ( nRows == 1 )
         {
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             nReturn = statement.getData( 2, SQL_C_CHAR, &szName, 100,
&nStrLenOrInd );
             QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
             QVERIFY( nStrLenOrInd == 0 );
@@ -307,7 +298,6 @@
         }
         else if ( nRows == 2 )
         {
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             nReturn = statement.getData( 2, SQL_C_WCHAR, &szNameWide, 100,
&nStrLenOrInd );
             QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
             QVERIFY( nStrLenOrInd == 0 );
@@ -315,7 +305,6 @@
         }
         else if ( nRows == 3 )
         {
-printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
             nReturn = statement.getData( 2, SQL_C_CHAR, &szName, 100,
&nStrLenOrInd );
             QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
             QVERIFY( nStrLenOrInd == 0 );

Modified: trunk/SDK/Tst/Library/MYODBCTstGetData.c
===================================================================
--- trunk/SDK/Tst/Library/MYODBCTstGetData.c	2006-09-25 11:20:29 UTC (rev 555)
+++ trunk/SDK/Tst/Library/MYODBCTstGetData.c	2006-09-27 16:42:52 UTC (rev 556)
@@ -54,7 +54,7 @@
             break;
 
         case SQL_INVALID_HANDLE:
-            MYODBCTstFilePrint( stderr, _T("[%s][%d] SQL_INVALID_HANDLE\n") );
+            MYODBCTstFilePrint( stderr, _T("[%s][%d] SQL_INVALID_HANDLE\n"),
_T(__FILE__), __LINE__ );
             break;
 
         case SQL_NO_DATA_FOUND:

Thread
Connector/ODBC 5 commit: r556 - in trunk/SDK: MYSQLPlus/Library MYSQLPlus/Tests Tst/Librarypharvey27 Sep