List:Commits« Previous MessageNext Message »
From:pharvey Date:May 15 2006 3:58pm
Subject:Connector/ODBC 5 commit: r240 - MYSQLPlus/MYSQLPlusLib
View as plain text  
Modified:
   MYSQLPlus/MYSQLPlusLib/MResult.cpp
   MYSQLPlus/MYSQLPlusLib/MResult.h
   MYSQLPlus/MYSQLPlusLib/MStatement.cpp
Log:


Modified: MYSQLPlus/MYSQLPlusLib/MResult.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.cpp	2006-05-15 15:42:46 UTC (rev 239)
+++ MYSQLPlus/MYSQLPlusLib/MResult.cpp	2006-05-15 15:58:20 UTC (rev 240)
@@ -73,6 +73,219 @@
     MYODBCDbgReturn3( "%d", nState );
 }
 
+SQLRETURN MResult::getData( SQLUSMALLINT nColumnNumber, SQLSMALLINT nTargetType,
SQLPOINTER pTargetValue, SQLINTEGER nBufferLength, SQLINTEGER *pnStrLenOrInd )
+{
+    MYODBCDbgEnter();
+
+    QVariant    variantData;
+    SQLRETURN   nReturn = getData( nColumnNumber, &variantData );
+    if ( !SQL_SUCCEEDED(nReturn) )
+        MYODBCDbgReturn( nReturn );
+
+    SQLRETURN       nReturn         = getData( nColumn, variantData );
+    SQLPOINTER      pdata           = pDescriptorRecord->getDataPtr();
+    SQLINTEGER *    pnIndicator     = pDescriptorRecord->getIndicatorPtr();
+    SQLINTEGER *    pnOctetLength   = pDescriptorRecord->getOctetLengthPtr();
+
+    if ( getState() < STATE_EXECUTED )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    if ( variantData.isNull() )
+    {
+        if ( pnIndicator ) 
+        {
+            *pnIndicator = SQL_NULL_DATA;
+            MYODBCDbgReturn( SQL_SUCCESS );
+        }
+        else
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_22002 ) );
+    }
+
+    if ( pnIndicator ) *pnIndicator = 0;
+
+    switch ( pDescriptorRecord->getConciseType() )
+    {
+        case SQL_C_CHAR:
+            {
+                if ( !variantData.canConvert<QString>() )
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                QString stringData = variantData.toString();
+                MYODBCC::doStrNCpy( (SQLWCHAR*)pdata,
pDescriptorRecord->getOctetLength() / sizeof(SQLWCHAR), stringData.utf16() );
+                if ( pnOctetLength ) *pnOctetLength = stringData.length() *
sizeof(SQLWCHAR);
+            }
+            break;
+        case SQL_C_SSHORT:
+            {
+                if ( !variantData.canConvert<short int>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((short int*)pdata) = (short int)variantData.toInt();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(short int);
+            }
+            break;
+        case SQL_C_USHORT:
+            {
+                if ( !variantData.canConvert<unsigned short int>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((unsigned short int*)pdata) = (unsigned short int)variantData.toUInt();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(unsigned short int);
+            }
+            break;
+        case SQL_C_SLONG:
+            {
+                if ( !variantData.canConvert<long int>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((long int*)pdata) = (long int)variantData.toLongLong();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(long int);
+            }
+            break;
+        case SQL_C_ULONG:
+            {
+                if ( !variantData.canConvert<unsigned long int>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((unsigned long int*)pdata) = (unsigned long
int)variantData.toULongLong();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(unsigned long int);
+            }
+            break;
+        case SQL_C_FLOAT:
+            {
+                if ( !variantData.canConvert<float>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((float *)pdata) = (float)variantData.toDouble();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(float);
+            }
+            break;
+        case SQL_C_DOUBLE:
+            {
+                if ( !variantData.canConvert<double>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((double *)pdata) = (double)variantData.toDouble();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(double);
+            }
+            break;
+        case SQL_C_BIT:
+            {
+                if ( !variantData.canConvert<unsigned char>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((unsigned char *)pdata) = variantData.toInt();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(unsigned char);
+            }
+            break;
+        case SQL_C_STINYINT:
+            {
+                if ( !variantData.canConvert<char>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((char *)pdata) = variantData.toInt();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(char);
+            }
+            break;
+        case SQL_C_UTINYINT:
+            {
+                if ( !variantData.canConvert<unsigned char>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((unsigned char *)pdata) = variantData.toUInt();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(unsigned char);
+            }
+            break;
+        case SQL_C_SBIGINT:
+            {
+                if ( !variantData.canConvert<qint64>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((qint64*)pdata) = (qint64)variantData.toLongLong();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(qint64);
+            }
+            break;
+        case SQL_C_UBIGINT:
+            {
+                if ( !variantData.canConvert<quint64>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                *((quint64*)pdata) = (quint64)variantData.toULongLong();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(quint64);
+            }
+            break;
+        case SQL_C_BINARY:
+            {
+                QByteArray bytearray = variantData.toByteArray();
+
+                MYODBCC::doMemCpy( pdata, bytearray.constData(),
pDescriptorRecord->getOctetLength() );
+                if ( pnOctetLength ) *pnOctetLength = bytearray.size();
+            }
+            break;
+        case SQL_C_TYPE_DATE:
+            {
+                SQL_DATE_STRUCT *pdate = (SQL_DATE_STRUCT *)pdata;
+
+                if ( !variantData.canConvert<QDate>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                QDate d         = variantData.toDate();
+                pdate->day      = d.day();
+                pdate->month    = d.month();
+                pdate->year     = d.year();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(SQL_DATE_STRUCT);
+            }
+            break;
+        case SQL_C_TYPE_TIME:
+            {
+                SQL_TIME_STRUCT *ptime = (SQL_TIME_STRUCT *)pdata;
+
+                if ( !variantData.canConvert<QTime>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                QTime t         = variantData.toTime();
+                ptime->hour     = t.hour();
+                ptime->minute   = t.minute();
+                ptime->second   = t.second();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(SQL_TIME_STRUCT);
+            }
+            break;
+        case SQL_C_TYPE_TIMESTAMP:
+            {
+                SQL_TIMESTAMP_STRUCT *p = (SQL_TIMESTAMP_STRUCT *)pdata;
+
+                if ( !variantData.canConvert<QDateTime>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                QDateTime t     = variantData.toDateTime();
+                p->day          = t.date().day();
+                p->fraction     = t.time().msec(); /* \todo fraction is not same as
msec - look into it */
+                p->hour         = t.time().hour();
+                p->minute       = t.time().minute();
+                p->month        = t.date().month();
+                p->second       = t.time().second();
+                p->year         = t.date().year();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(SQL_TIMESTAMP_STRUCT);
+            }
+            break;
+        case SQL_C_NUMERIC:
+            {
+                SQL_NUMERIC_STRUCT *p = (SQL_NUMERIC_STRUCT *)pdata;
+
+                if ( !variantData.canConvert<QDateTime>() ) 
+                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
+                QDateTime t     = variantData.toDateTime();
+                if ( pnOctetLength ) *pnOctetLength = sizeof(SQL_NUMERIC_STRUCT);
+            }
+            break;
+        case SQL_C_GUID:
+        case SQL_C_DEFAULT:
+        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_HY000, 0,
tr("unsupported concise type") ) );
+    }
+
+    MYODBCDbgReturn( nReturn );
+}
+
 BOOLEAN MResult::isBuffered()
 {
     MYODBCDbgEnter();

Modified: MYSQLPlus/MYSQLPlusLib/MResult.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.h	2006-05-15 15:42:46 UTC (rev 239)
+++ MYSQLPlus/MYSQLPlusLib/MResult.h	2006-05-15 15:58:20 UTC (rev 240)
@@ -47,6 +47,7 @@
 
     virtual SQLRETURN getColumns( uint *pnColumns ) = 0;
     virtual SQLRETURN getData( uint nColumn, QVariant &variantData ) = 0;
+    virtual SQLRETURN getData( SQLUSMALLINT nColumnNumber, SQLSMALLINT nTargetType,
SQLPOINTER pTargetValue, SQLINTEGER nBufferLength, SQLINTEGER *pnStrLenOrInd );
     virtual SQLRETURN getRow( qulonglong *pnRow ) = 0;
     virtual SQLRETURN getRows( qulonglong *pnRows ) = 0;
 

Modified: MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-05-15 15:42:46 UTC (rev 239)
+++ MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-05-15 15:58:20 UTC (rev 240)
@@ -245,7 +245,7 @@
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MStatement::getData( SQLUSMALLINT nColumnNumber, SQLSMALLINT nTargetType,
SQLPOINTER pTargetValuePtr, SQLINTEGER nBufferLength, SQLINTEGER *pnStrLenOrIndPtr )
+SQLRETURN MStatement::getData( SQLUSMALLINT nColumnNumber, SQLSMALLINT nTargetType,
SQLPOINTER pTargetValue, SQLINTEGER nBufferLength, SQLINTEGER *pnStrLenOrInd )
 {
     MYODBCDbgEnter();
 
@@ -427,14 +427,7 @@
     // if ( nColumnNumber == 0 && nBufferLength < 4 && ODBCVER <
0x0300 && ODBCVER >= 0x0200 )
     //    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 ) );
 
-    /* do it */
-    QVariant    variantData;
-    SQLRETURN   nReturn = pResult->getData( nColumnNumber, &variantData );
-
-    if ( !SQL_SUCCEEDED( nReturn ) )
-        MYODBCDbgReturn( nReturn );
-
-    MYODBCDbgReturn(  );
+    MYODBCDbgReturn( pResult->getData( nColumnNumber, nTargetType, pTargetValue,
nBufferLength, pnStrLenOrInd ) );
 }
 
 SQLRETURN MStatement::getDiagField( SQLSMALLINT nRecNumber, SQLSMALLINT nDiagIdentifier,
SQLPOINTER pDiagInfo, SQLSMALLINT nBufferLength, SQLSMALLINT *pnStringLength )

Thread
Connector/ODBC 5 commit: r240 - MYSQLPlus/MYSQLPlusLibpharvey15 May