List:Commits« Previous MessageNext Message »
From:pharvey Date:May 17 2006 6:10am
Subject:Connector/ODBC 5 commit: r248 - MYSQLPlus/MYSQLPlusLib
View as plain text  
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/MYSQLPlusLibpharvey17 May