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/Library | pharvey | 27 Sep |