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/Library | jbalint | 15 Nov |