Modified:
MYSQLPlus/MYSQLPlusLib/MDescriptorRecordIRD.h
MYSQLPlus/MYSQLPlusLib/MResult.cpp
MYSQLPlus/MYSQLPlusLib/MResult.h
Log:
Modified: MYSQLPlus/MYSQLPlusLib/MDescriptorRecordIRD.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MDescriptorRecordIRD.h 2006-05-16 20:55:09 UTC (rev 247)
+++ MYSQLPlus/MYSQLPlusLib/MDescriptorRecordIRD.h 2006-05-17 06:10:15 UTC (rev 248)
@@ -13,7 +13,6 @@
SQLRETURN setDescField( SQLSMALLINT nFieldIdentifier, SQLPOINTER pValuePtr,
SQLINTEGER nBufferLength );
protected:
-
/* setters */
SQLRETURN setConciseType( SQLSMALLINT nConciseType );
SQLRETURN setDefault( SQLSMALLINT nConciseType );
Modified: MYSQLPlus/MYSQLPlusLib/MResult.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.cpp 2006-05-16 20:55:09 UTC (rev 247)
+++ MYSQLPlus/MYSQLPlusLib/MResult.cpp 2006-05-17 06:10:15 UTC (rev 248)
@@ -102,6 +102,7 @@
{
MYODBCDbgEnter();
+ /* get our col data from current row (as variant) */
QVariant variantData;
SQLRETURN nReturn = getData( nColumnNumber, variantData );
if ( !SQL_SUCCEEDED(nReturn) )
@@ -598,188 +599,327 @@
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
SQLWCHAR *psTarget, SQLINTEGER nCharsMax, SQLINTEGER *nCharsAvailable )
+/*!
+ \brief Get character column data from current row.
+
+ This enforces the rules from the ODBC specification in a section name
"SQL to C: Character"
+ while attempting to get the column data.
+
+ Converts type as required.
+
+ \param pDescriptorRecordIRD This describes the column in the resultset (SQL
concise type etc).
+ \param pResultDataTarget This describes the
+
+ \sa "SQL to C: Character"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
+*/
+SQLRETURN MResult::fromCharacterSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget )
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<QString>() )
+ /*!
+ \internal ODBC RULE
+
+ The following table shows the ODBC C data types to which character SQL data may
be converted.
+ */
+ switch ( pResultDataTarget->nTargetType )
+ {
+ case SQL_C_CHAR:
+ case SQL_C_WCHAR:
+ case SQL_C_STINYINT:
+ case SQL_C_UTINYINT:
+ case SQL_C_TINYINT:
+ case SQL_C_SBIGINT:
+ case SQL_C_UBIGINT:
+ case SQL_C_SSHORT:
+ case SQL_C_USHORT:
+ case SQL_C_SHORT:
+ case SQL_C_SLONG:
+ case SQL_C_ULONG:
+ case SQL_C_LONG:
+ case SQL_C_NUMERIC:
+ case SQL_C_FLOAT:
+ case SQL_C_DOUBLE:
+ case SQL_C_BIT:
+ case SQL_C_BINARY:
+ case SQL_C_TYPE_DATE:
+ case SQL_C_TYPE_TIME:
+ case SQL_C_TYPE_TIMESTAMP:
+ case SQL_C_INTERVAL_MONTH:
+ case SQL_C_INTERVAL_YEAR:
+ case SQL_C_INTERVAL_YEAR_TO_MONTH:
+ case SQL_C_INTERVAL_DAY:
+ case SQL_C_INTERVAL_HOUR:
+ case SQL_C_INTERVAL_MINUTE:
+ case SQL_C_INTERVAL_SECOND:
+ case SQL_C_INTERVAL_DAY_TO_HOUR:
+ case SQL_C_INTERVAL_DAY_TO_MINUTE:
+ case SQL_C_INTERVAL_DAY_TO_SECOND:
+ case SQL_C_INTERVAL_HOUR_TO_MINUTE:
+ case SQL_C_INTERVAL_HOUR_TO_SECOND:
+ case SQL_C_INTERVAL_MINUTE_TO_SECOND:
+ break;
+ default:
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
+ }
+
+ MYODBCDbgReturn( SQL_SUCCESS );
+}
+
+SQLRETURN MResult::toCharStringC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget )
+{
+ MYODBCDbgEnter();
+
+ /*!
+ \internal ODBC RULE
+
+
+-------------+-------------------------------------+-----------------+-------------------------+----------+
+ | C Type | Test | TargetValuePtr |
StrLen_or_IndPtr | SQLSTATE |
+
+-------------+-------------------------------------+-----------------+-------------------------+----------+
+ | SQL_C_CHAR | Byte length of data < BufferLength | Data | Length
of data in bytes | n/a |
+ | | Byte length of data >= BufferLength | Truncated data | Length
of data in bytes | 01004 |
+
+-------------+-------------------------------------+-----------------+-------------------------+----------+
+ */
+
+ if ( !pResultDataTarget->variantData.canConvert<QString>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- QString stringData = variantData.toString();
- MYODBCC::doStrNCpy( psTarget, nCharsMax, stringData.utf16() );
- if ( nCharsAvailable ) *nCharsAvailable = stringData.length();
+ QString stringData = pResultDataTarget->variantData.toString();
+ if ( pResultDataTarget->pTarget && pResultDataTarget->nBytesOrCharsMax
)
+ {
+ MYODBCC::doStrNCpy( (SQLCHAR*)pResultDataTarget->pTarget,
pResultDataTarget->nBytesOrCharsMax, stringData.toAscii().data() );
+ if ( pResultDataTarget->nBytesOrCharsMax >= stringData.length() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
+ }
+ else
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
+
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = ( stringData.length() + 1 ) -
pResultDataTarget->nBytesOrCharsMax;
+
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
short int *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::toWideCharStringC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget )
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<short int>() )
+ /*!
+ \internal ODBC RULE
+
+
+-------------+------------------------------------------+-----------------+------------------------------+----------+
+ | C Type | Test | TargetValuePtr |
StrLen_or_IndPtr | SQLSTATE |
+
+-------------+------------------------------------------+-----------------+------------------------------+----------+
+ | SQL_C_WCHAR | Character length of data < BufferLength | Data |
Length of data in characters | n/a |
+ | | Character length of data >= BufferLength | Truncated data |
Length of data in characters | 01004 |
+
+-------------+------------------------------------------+-----------------+------------------------------+----------+
+ */
+
+ if ( !pResultDataTarget->variantData.canConvert<QString>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = (short int)variantData.toInt();
- if ( pnLength ) *pnLength = sizeof(short int);
+ QString stringData = pResultDataTarget->variantData.toString();
+ if ( pResultDataTarget->pTarget && pResultDataTarget->nBytesOrCharsMax
)
+ {
+ MYODBCC::doStrNCpy( (SQLWCHAR*)pResultDataTarget->pTarget,
pResultDataTarget->nBytesOrCharsMax, stringData.utf16() );
+ if ( pResultDataTarget->nBytesOrCharsMax >= stringData.length() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
+ }
+ else
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_01004 ) );
+
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = ( stringData.length() + 1 ) -
pResultDataTarget->nBytesOrCharsMax;
+
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
unsigned short int *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::toShortIntC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget )
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<unsigned short int>() )
+ /*!
+ \internal ODBC RULE
+
+ +--------------+
+ | C Type |
+ +--------------+
+ | SQL_C_SSHORT |
+ +--------------+
+ */
+
+ if ( !pResultDataTarget->variantData.canConvert<short int>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = (unsigned short int)variantData.toUInt();
- if ( pnLength ) *pnLength = sizeof(unsigned short int);
+ if ( pResultDataTarget->pTargetValue &&
pResultDataTarget->nBytesOrCharsMax )
+ *((short int*)(pResultDataTarget->pTarget)) = (short
int)pResultDataTarget->variantData.toInt();
+
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(short int);
+
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
long int *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::toUnsignedShortIntC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget )
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<long int>() )
+ if ( !pResultDataTarget->variantData.canConvert<unsigned short int>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = (long int)variantData.toLongLong();
- if ( pnLength ) *pnLength = sizeof(long int);
+ *pResultDataTarget->pTarget = (unsigned short
int)pResultDataTarget->variantData.toUInt();
+
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(unsigned short int);
+
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
unsigned long int *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::toLongIntC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget )
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<unsigned long int>() )
+ if ( !pResultDataTarget->variantData.canConvert<long int>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pTarget = (unsigned long int)variantData.toULongLong();
- if ( pnLength ) *pnLength = sizeof(unsigned long int);
+ *pResultDataTarget->pTarget = (long
int)pResultDataTarget->variantData.toLongLong();
+
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(long int);
+
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
float *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::toUnsignedLongIntC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget )
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<float>() )
+ if ( !pResultDataTarget->variantData.canConvert<unsigned long int>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = (float)variantData.toDouble();
- if ( pnLength ) *pnLength = sizeof(float);
+ *pTarget = (unsigned long int)pResultDataTarget->variantData.toULongLong();
+
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(unsigned long int);
+
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
double *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::toFloatC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget )
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<double>() )
+ if ( !pResultDataTarget->variantData.canConvert<float>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = (double)variantData.toDouble();
- if ( pnLength ) *pnLength = sizeof(double);
+ *pResultDataTarget->pTarget = (float)pResultDataTarget->variantData.toDouble();
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(float);
+
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
char *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, double *pResultDataTarget->pTarget, SQLINTEGER
*pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<char>() )
+ if ( !pResultDataTarget->variantData.canConvert<double>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = variantData.toInt();
- if ( pnLength ) *pnLength = sizeof(char);
+ *pResultDataTarget->pTarget =
(double)pResultDataTarget->variantData.toDouble();
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(double);
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
unsigned char *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, char *pResultDataTarget->pTarget, SQLINTEGER
*pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<unsigned char>() )
+ if ( !pResultDataTarget->variantData.canConvert<char>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = variantData.toInt();
- if ( pnLength ) *pnLength = sizeof(unsigned char);
+ *pResultDataTarget->pTarget = pResultDataTarget->variantData.toInt();
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(char);
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
qint64 *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, unsigned char *pResultDataTarget->pTarget,
SQLINTEGER *pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<qint64>() )
+ if ( !pResultDataTarget->variantData.canConvert<unsigned char>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = (qint64)variantData.toLongLong();
- if ( pnLength ) *pnLength = sizeof(qint64);
+ *pResultDataTarget->pTarget = pResultDataTarget->variantData.toInt();
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(unsigned char);
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
quint64 *pnTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, qint64 *pResultDataTarget->pTarget, SQLINTEGER
*pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<quint64>() )
+ if ( !pResultDataTarget->variantData.canConvert<qint64>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- *pnTarget = (quint64)variantData.toLongLong();
- if ( pnLength ) *pnLength = sizeof(quint64);
+ *pResultDataTarget->pTarget =
(qint64)pResultDataTarget->variantData.toLongLong();
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(qint64);
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
SQLPOINTER pTarget, SQLINTEGER nBytesMax, SQLINTEGER *pnBytesAvailable );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, quint64 *pResultDataTarget->pTarget,
SQLINTEGER *pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
- QByteArray bytearray = variantData.toByteArray();
+ if ( !pResultDataTarget->variantData.canConvert<quint64>() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
+ *pResultDataTarget->pTarget =
(quint64)pResultDataTarget->variantData.toLongLong();
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(quint64);
+ MYODBCDbgReturn( SQL_SUCCESS );
+}
+
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, SQLPOINTER pTarget, SQLINTEGER nBytesMax,
SQLINTEGER *pnBytesAvailable );
+{
+ MYODBCDbgEnter();
+
+ QByteArray bytearray = pResultDataTarget->variantData.toByteArray();
+
MYODBCC::doMemCpy( pTarget, bytearray.constData(), nBytesMax );
if ( pnBytesAvailable ) *pnBytesAvailable = bytearray.size();
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
SQL_DATE_STRUCT *pTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, SQL_DATE_STRUCT *pTarget, SQLINTEGER
*pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<QDate>() )
+ if ( !pResultDataTarget->variantData.canConvert<QDate>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- QDate d = variantData.toDate();
+ QDate d = pResultDataTarget->variantData.toDate();
pTarget->day = d.day();
pTarget->month = d.month();
pTarget->year = d.year();
- if ( pnLength ) *pnLength = sizeof(SQL_DATE_STRUCT);
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(SQL_DATE_STRUCT);
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
SQL_TIME_STRUCT *pTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, SQL_TIME_STRUCT *pTarget, SQLINTEGER
*pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<QTime>() )
+ if ( !pResultDataTarget->variantData.canConvert<QTime>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- QTime t = variantData.toTime();
+ QTime t = pResultDataTarget->variantData.toTime();
pTarget->hour = t.hour();
pTarget->minute = t.minute();
pTarget->second = t.second();
- if ( pnLength ) *pnLength = sizeof(SQL_TIME_STRUCT);
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(SQL_TIME_STRUCT);
MYODBCDbgReturn( SQL_SUCCESS );
}
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
SQL_TIMESTAMP_STRUCT *pTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, SQL_TIMESTAMP_STRUCT *pTarget, SQLINTEGER
*pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
- if ( !variantData.canConvert<QDateTime>() )
+ if ( !pResultDataTarget->variantData.canConvert<QDateTime>() )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006 ) );
- QDateTime t = variantData.toDateTime();
+ QDateTime t = pResultDataTarget->variantData.toDateTime();
pTarget->day = t.date().day();
pTarget->fraction = t.time().msec(); /*! \todo fraction is not same as msec -
look into it */
pTarget->hour = t.time().hour();
@@ -787,7 +927,7 @@
pTarget->month = t.date().month();
pTarget->second = t.time().second();
pTarget->year = t.date().year();
- if ( pnLength ) *pnLength = sizeof(SQL_TIMESTAMP_STRUCT);
+ if ( pResultDataTarget->pnBytesOrCharsRemaining )
*pResultDataTarget->pnBytesOrCharsRemaining = sizeof(SQL_TIMESTAMP_STRUCT);
MYODBCDbgReturn( SQL_SUCCESS );
}
@@ -804,15 +944,15 @@
\note Not all source data can be converted to a SQL_NUMERIC_STRUCT. There
are ODBC rules
which govern this.
- \param variantData Source data.
+ \param pResultDataTarget->variantData Source data.
\param pTarget Pointer to a SQL_NUMERIC_STRUCT. The precision and scale fields
must be valid values.
- \param pnLength Buffer where we can set the length (number of bytes) we have
available.
+ \param pResultDataTarget->pnBytesOrCharsRemaining Buffer where we can set the
length (number of bytes) we have available.
\return SQLRETURN
\sa getData()
*/
-SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant &variantData,
SQL_NUMERIC_STRUCT *pTarget, SQLINTEGER *pnLength );
+SQLRETURN MResult::getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&pResultDataTarget->variantData, SQL_NUMERIC_STRUCT *pTarget, SQLINTEGER
*pResultDataTarget->pnBytesOrCharsRemaining );
{
MYODBCDbgEnter();
Modified: MYSQLPlus/MYSQLPlusLib/MResult.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.h 2006-05-16 20:55:09 UTC (rev 247)
+++ MYSQLPlus/MYSQLPlusLib/MResult.h 2006-05-17 06:10:15 UTC (rev 248)
@@ -12,6 +12,18 @@
#include "MInternal.h"
+typedef struct tMResultDataTarget
+{
+ SQLUSMALLINT nColumn;
+ SQLSMALLINT nTargetType;
+ SQLPOINTER pTarget;
+ SQLINTEGER nBytesOrCharsMax;
+ SQLINTEGER * pnBytesOrCharsRemaining;
+ SQLINTEGER * pnIndicator;
+ QVariant variantData;
+
+} MResultDataTarget;
+
/*!
\brief Result-set.
@@ -86,26 +98,43 @@
MDescriptor * getImpParamDesc();
MDescriptor * getImpRowDesc();
+ /* support for getData: this is called when target C type is SQL_ARD_TYPE (derive
type from ARD) */
SQLRETURN getData( SQLUSMALLINT nColumn, MDescriptorRecordARD
*pDescriptorRecord );
+
+ /* support for getData: this is called when target C type is SQL_C_DEFAULT (derive
type from IRD) */
SQLRETURN getData( SQLUSMALLINT nColumn, MDescriptorRecordIRD
*pDescriptorRecord, SQLPOINTER pTargetValue, SQLINTEGER nBufferLength, SQLINTEGER
*pnLength, SQLINTEGER *pnIndicator );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, SQLWCHAR *psTarget, SQLINTEGER nCharsMax, SQLINTEGER *nCharsAvailable
);
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, short int *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, unsigned short int *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, long int *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, unsigned long int *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, float *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, double *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, char *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, unsigned char *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, qint64 *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, quint64 *pnTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, SQLPOINTER pTarget, SQLINTEGER nBytesMax, SQLINTEGER *pnBytesAvailable
);
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, SQL_DATE_STRUCT *pTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, SQL_TIME_STRUCT *pTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, SQL_TIMESTAMP_STRUCT *pTarget, SQLINTEGER *pnLength );
- SQLRETURN getData( SQLSMALLINT nConciseTypeSQL, const QVariant
&variantData, SQL_NUMERIC_STRUCT *pTarget, SQLINTEGER *pnLength );
+ /* support for getData: these enforce ODBC rules generalized based upon SQL type (ie
see "SQL to C: Character" in odbc spec) */
+ SQLRETURN fromCharacterSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromNumericSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromBitSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromBinarySQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromDateSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromGuidSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromTimeSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromTimeStampSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromIntervalYearMonthSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN fromIntervalDayTimeSQL( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ /* support for getData: these do the conversion */
+ SQLRETURN toCharStringC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toWideCharStringC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toShortIntC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toUnsignedShortIntC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toLongIntC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toUnsignedLongIntC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toFloatC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toDoubleC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toCharC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toUnsignedCharC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toInt64C( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toUnsignedInt64C( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toBinaryC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toDateC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toTimeC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toTimeStampC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+ SQLRETURN toNumericC( MDescriptorRecordIRD *pDescriptorRecordIRD,
MResultDataTarget *pResultDataTarget );
+
/* doers */
virtual SQLRETURN doStateRollBack( STATE nState ) = 0;
| Thread |
|---|
| • Connector/ODBC 5 commit: r248 - MYSQLPlus/MYSQLPlusLib | pharvey | 17 May |