List:Commits« Previous MessageNext Message »
From:jbalint Date:November 15 2006 6:49am
Subject:Connector/ODBC 5 commit: r675 - trunk/SDK/MYSQLPlus/Library
View as plain text  
Modified:
   trunk/SDK/MYSQLPlus/Library/MResult.cpp
   trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
   trunk/SDK/MYSQLPlus/Library/MResultRes.h
Log:
Corrected retrieval of bit and blob/text fields.
Added field lengths to MResultRes for blob fields.
Updated to correct conversion types sent to variant when retrieving data.

Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-11-14 21:51:16 UTC (rev 674)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-11-15 05:49:38 UTC (rev 675)
@@ -2732,7 +2732,7 @@
     /* convert to string (if possible) */
     if ( pResultGetData->stringData.isNull() )
     {
-        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QString>() )
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert( QVariant::String ) )
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_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();
@@ -2801,7 +2801,7 @@
     /* convert to string (if possible) */
     if ( pResultGetData->stringData.isNull() )
     {
-        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QString>() )
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert( QVariant::String ) )
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_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();
@@ -2858,7 +2858,7 @@
         +--------------+
     */
 
-    pResultGetData->nBytesTotal     = sizeof(short int);
+    pResultGetData->nBytesTotal     = sizeof(short);
     pResultGetData->nBytesRemaining = 0;
 
     /*!
@@ -2869,10 +2869,10 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<int>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::Int ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
-    *((short int *)(pResultGetData->pTarget)) = (short
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt();
+    *((short *)(pResultGetData->pTarget)) =
(short)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt();
 
     MYODBCDbgReturn( SQL_SUCCESS );
 }
@@ -2893,7 +2893,7 @@
 {
     MYODBCDbgEnter();
 
-    pResultGetData->nBytesTotal     = sizeof(unsigned short int);
+    pResultGetData->nBytesTotal     = sizeof(unsigned short);
     pResultGetData->nBytesRemaining = 0;
 
     /*!
@@ -2904,10 +2904,10 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<uint>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::UInt ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
-    *((unsigned short int *)pResultGetData->pTarget) = (unsigned short
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toUInt();
+    *((unsigned short *)pResultGetData->pTarget) = (unsigned
short)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toUInt();
 
     MYODBCDbgReturn( SQL_SUCCESS );
 }
@@ -2928,7 +2928,7 @@
 {
     MYODBCDbgEnter();
 
-    pResultGetData->nBytesTotal     = sizeof(long int);
+    pResultGetData->nBytesTotal     = sizeof(long);
     pResultGetData->nBytesRemaining = 0;
 
     /*!
@@ -2947,17 +2947,17 @@
     */
     if ( MYODBCC::isDateTimeTypeSQL(
pResultGetData->pImpRowDescRec->getConciseType(),
getEnvironment()->getODBCVersion() ) )
     {
-        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QDateTime>() ) 
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert( QVariant::DateTime ) ) 
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
-        *((long int *)pResultGetData->pTarget) = (long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toDateTime().toTime_t();
+        *((unsigned long *)pResultGetData->pTarget) = (unsigned
long)vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toDateTime().toTime_t();
         
     }
     else
     {
-        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<qlonglong>() ) 
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert( QVariant::Int ) ) 
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
-        *((long int *)pResultGetData->pTarget) = (long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toLongLong();
+        *((long *)pResultGetData->pTarget) =
(long)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt();
     }
 
     MYODBCDbgReturn( SQL_SUCCESS );
@@ -2979,7 +2979,7 @@
 {
     MYODBCDbgEnter();
 
-    pResultGetData->nBytesTotal     = sizeof(unsigned long int);
+    pResultGetData->nBytesTotal     = sizeof(unsigned long);
     pResultGetData->nBytesRemaining = 0;
 
     /*!
@@ -2990,17 +2990,11 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    /*!
-        \internal
-        \todo
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::UInt ) ) 
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
-        Why did i comment this out?
-    */
-//    if ( !pResultGetData->variantData.canConvert<unsigned long int>() ) 
-//        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
+    *((unsigned long *)pResultGetData->pTarget) = (unsigned
long)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toUInt();
 
-    *((unsigned long int *)pResultGetData->pTarget) = (unsigned long
int)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toULongLong();
-
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
@@ -3031,7 +3025,7 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<float>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::Double ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
     *((float *)pResultGetData->pTarget) =
(float)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toDouble();
@@ -3066,7 +3060,7 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<double>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::Double ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
     *((double *)pResultGetData->pTarget) =
(double)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toDouble();
@@ -3101,7 +3095,7 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<unsigned char>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::Int ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
     /*!
@@ -3151,7 +3145,7 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<char>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::Int ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
     *((char *)pResultGetData->pTarget) =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt();
@@ -3186,10 +3180,10 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<unsigned char>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::UInt ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
-    *((unsigned char *)pResultGetData->pTarget) =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toInt();
+    *((unsigned char *)pResultGetData->pTarget) =
vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toUInt();
 
     MYODBCDbgReturn( SQL_SUCCESS );
 }
@@ -3221,7 +3215,7 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<qint64>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::LongLong ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
     *((qint64 *)pResultGetData->pTarget) =
(qint64)vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].toLongLong();
@@ -3256,10 +3250,10 @@
     if ( !pResultGetData->pTarget )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 ) );
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<quint64>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::ULongLong ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
-    *((quint64 *)pResultGetData->pTarget) =
(quint64)vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toLongLong();
+    *((quint64 *)pResultGetData->pTarget) =
(quint64)vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toULongLong();
 
     MYODBCDbgReturn( SQL_SUCCESS );
 }
@@ -3283,7 +3277,7 @@
     /* convert to bytearray */
     if ( pResultGetData->bytearrayData.isNull() )
     {
-        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QByteArray>() )
+        if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert( QVariant::ByteArray ) )
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_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 - 1].toByteArray();
@@ -3366,7 +3360,7 @@
 
     SQL_DATE_STRUCT *pDateTarget = (SQL_DATE_STRUCT *)pResultGetData->pTarget;
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QDate>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::Date ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
     QDate d             = vectorRows[pResultGetData->nRow][pResultGetData->nColumn
- 1].toDate();
@@ -3406,7 +3400,7 @@
 
     SQL_TIME_STRUCT *pTimeTarget = (SQL_TIME_STRUCT *)pResultGetData->pTarget;
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QTime>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::Time ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
     QTime t             = vectorRows[pResultGetData->nRow][pResultGetData->nColumn
- 1].toTime();
@@ -3446,7 +3440,7 @@
 
     SQL_TIMESTAMP_STRUCT *pTimeStampTarget = (SQL_TIMESTAMP_STRUCT
*)pResultGetData->pTarget;
 
-    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].canConvert<QDateTime>() ) 
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::DateTime ) ) 
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 
     QDateTime t = vectorRows[pResultGetData->nRow][pResultGetData->nColumn -
1].toDateTime();
@@ -3498,7 +3492,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 -
1].canConvert<QString>() )
+    if ( !vectorRows[pResultGetData->nRow][pResultGetData->nColumn - 1].canConvert(
QVariant::String ) )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006, 0,
tr("Variant (data conversion hub) could not convert to a string.") ) );
 
     /*!

Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.cpp	2006-11-14 21:51:16 UTC (rev 674)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.cpp	2006-11-15 05:49:38 UTC (rev 675)
@@ -916,6 +916,7 @@
                 while ( nRowSetRow < getRowSetSize() )
                 {
                     MYSQL_ROW pRow = mysql_fetch_row( pRes );
+                    pFieldLengths = NULL;
                     if ( pRow )
                     {
                         vectorStatus[nRowSetRow] = getRowSetRowData( pRow, nRowSetRow );
@@ -1001,6 +1002,8 @@
                     vectorRows[nRow][nColumn].clear();
                     break;
                 case MYSQL_TYPE_BIT:
+                    vectorRows[nRow][nColumn] = (int)*pRow[nColumn];
+                    break;
                 case MYSQL_TYPE_TINY:
                 case MYSQL_TYPE_SHORT: 
                 case MYSQL_TYPE_LONG:
@@ -1028,7 +1031,15 @@
                 case MYSQL_TYPE_BLOB:
                 case MYSQL_TYPE_MEDIUM_BLOB:
                 case MYSQL_TYPE_LONG_BLOB:
-                    vectorRows[nRow][nColumn].setValue( QByteArray( (const char
*)pRow[nColumn], pField->max_length ) );
+                    if ( pFieldLengths == NULL )
+                        pFieldLengths = mysql_fetch_lengths( pRes );
+                    if ( pFieldLengths == NULL )
+                        MYODBCDbgReturn( getDiagnostic()->doAppend(
+                                    MDiagnostic::STATE_HY000, 0,
+                                    tr("mysql_fetch_lengths failed.") ) );
+                    vectorRows[nRow][nColumn].setValue(
+                            QByteArray( (const char *)pRow[nColumn],
+                                pFieldLengths[nColumn] ) );
                     break;
                 default:
                     {

Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.h	2006-11-14 21:51:16 UTC (rev 674)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.h	2006-11-15 05:49:38 UTC (rev 675)
@@ -78,8 +78,9 @@
     SQLRETURN doStateRollBack( STATE nState );
 
 private:
-    MCommand *      pCommand;           /*!< the command we are supporting            
                                     */
-    MYSQL_RES *     pRes;               /*!< current resultset as per
mysql_use_result() / mysql_store_result()             */
+    MCommand *      pCommand;           /*!< the command we are supporting            
                         */
+    MYSQL_RES *     pRes;               /*!< current resultset as per
mysql_use_result() / mysql_store_result() */
+    unsigned long * pFieldLengths;      /*!< field lengths for current row            
                         */
 
     /* setters */
 
@@ -88,7 +89,7 @@
     SQLUSMALLINT    getRowSetRowData( MYSQL_ROW pRow, qulonglong nRow );
 
     /* doers */
-    SQLRETURN doLoadMetaData();     /* load resultset meta data (IRD)                  
*/
+    SQLRETURN doLoadMetaData();     /* load resultset meta data (IRD) */
 };
 
 #endif

Thread
Connector/ODBC 5 commit: r675 - trunk/SDK/MYSQLPlus/Libraryjbalint15 Nov