List:Commits« Previous MessageNext Message »
From:pharvey Date:November 23 2006 4:36pm
Subject:Connector/ODBC 5 commit: r687 - in trunk: . SDK/MYSQLPlus/Library
View as plain text  
Modified:
   trunk/SDK/MYSQLPlus/Library/MResult.cpp
   trunk/SDK/MYSQLPlus/Library/MResult.h
   trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp
   trunk/SDK/MYSQLPlus/Library/MResultPlus.h
   trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
   trunk/SDK/MYSQLPlus/Library/MResultRes.h
   trunk/SDK/MYSQLPlus/Library/MResultStmt.cpp
   trunk/SDK/MYSQLPlus/Library/MStatement.cpp
   trunk/connector-odbc.vpj
Log:
ENH: Code reorg in prep for SQL_DATA_AT_EXEC support.

Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-11-23 15:36:13 UTC (rev 687)
@@ -21,7 +21,7 @@
 #include "MInternal.h"
 #include <stdlib.h>
 
-MResultGetData::MResultGetData()
+MStateGetData::MStateGetData()
 {
     MYODBCDbgEnter();
 
@@ -30,7 +30,7 @@
     MYODBCDbgReturn2();
 }
 
-void MResultGetData::doClear()
+void MStateGetData::doClear()
 {
     MYODBCDbgEnter();
 
@@ -56,7 +56,7 @@
     MYODBCDbgReturn2();
 }
 
-BOOL MResultGetData::isChunkingRequest( SQLUINTEGER nRow, SQLUSMALLINT nColumn )
+BOOL MStateGetData::isChunkingRequest( SQLUINTEGER nRow, SQLUSMALLINT nColumn )
 {
     MYODBCDbgEnter();
 
@@ -68,7 +68,7 @@
     MYODBCDbgReturn3( "%d", false );
 }
 
-MResultPutData::MResultPutData()
+MStatePutData::MStatePutData()
 {
     MYODBCDbgEnter();
 
@@ -77,7 +77,7 @@
     MYODBCDbgReturn2();
 }
 
-void MResultPutData::doClear()
+void MStatePutData::doClear()
 {
     MYODBCDbgEnter();
 
@@ -88,6 +88,30 @@
     MYODBCDbgReturn2();
 }
 
+MStateExecute::MStateExecute()
+{
+    MYODBCDbgEnter();
+
+    doClear();
+
+    MYODBCDbgReturn2();
+}
+
+void MStateExecute::doClear()
+{
+    MYODBCDbgEnter();
+
+    pDescriptorIPD          = NULL;
+    pDescriptorAPD          = NULL;
+    stringCommand.clear();
+    stringlistCommandSegments.clear();
+    nParameterFirst         = 0;
+    nParameter              = 0;
+    statePutData.doClear();
+
+    MYODBCDbgReturn2();
+}
+
 /*! 
     \brief  Base class for resultset abstraction.
 
@@ -408,8 +432,8 @@
     if ( nRowSetRow > getRowSetRows() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY107, 0,
tr("Requested row exceeds RowSetRows.") ) );
 
-    resultSetData.doClear();
-    resultGetData.doClear();
+    stateExecute.doClear();
+    stateGetData.doClear();
 
     this->nRowSetRow = nRowSetRow;
 
@@ -694,8 +718,8 @@
     if ( !isValidResultSetRow() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_24000 ) );
 
-    resultSetData.doClear();
-    resultGetData.doClear();
+    stateExecute.doClear();
+    stateGetData.doClear();
 
     /* save some cycles by getting this here */
     MDescriptor *pDescriptor = getAppRowDesc();
@@ -792,8 +816,8 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010 ) );
 
-    resultSetData.doClear();
-    resultGetData.doClear();
+    stateExecute.doClear();
+    stateGetData.doClear();
 
     SQLRETURN nReturn = doFirst_();
     if ( !SQL_SUCCEEDED( nReturn ) )
@@ -850,8 +874,8 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010 ) );
 
-    resultSetData.doClear();
-    resultGetData.doClear();
+    stateExecute.doClear();
+    stateGetData.doClear();
 
     SQLRETURN nReturn = doLast_();
     if ( !SQL_SUCCEEDED( nReturn ) )
@@ -939,8 +963,8 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010 ) );
 
-    resultSetData.doClear();
-    resultGetData.doClear();
+    stateExecute.doClear();
+    stateGetData.doClear();
 
     SQLRETURN nReturn = doNext_();
     if ( !SQL_SUCCEEDED( nReturn ) )
@@ -1081,8 +1105,8 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010 ) );
 
-    resultSetData.doClear();
-    resultGetData.doClear();
+    stateExecute.doClear();
+    stateGetData.doClear();
 
     SQLRETURN nReturn = doPrev_();
     if ( !SQL_SUCCEEDED( nReturn ) )
@@ -1238,8 +1262,8 @@
     if ( nRows == 0 )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01000, 0,
tr("doSkip(0) is pointless.") ) );
 
-    resultSetData.doClear();
-    resultGetData.doClear();
+    stateExecute.doClear();
+    stateGetData.doClear();
 
     SQLRETURN nReturn = doSkip_( nRows );
     if ( !SQL_SUCCEEDED( nReturn ) )
@@ -1404,8 +1428,8 @@
     if ( getStatement()->getCursorType() == SQL_CURSOR_FORWARD_ONLY )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("doGoto() not supported when SQL_CURSOR_FORWARD_ONLY") ) );
 
-    resultSetData.doClear();
-    resultGetData.doClear();
+    stateExecute.doClear();
+    stateGetData.doClear();
 
     SQLRETURN nReturn = doGoto_( nRow );
     if ( !SQL_SUCCEEDED( nReturn ) )
@@ -1764,11 +1788,11 @@
         We are chunking data when we get the same row & column being used for more
than 1 successive call
         to here.
     */
-    if ( resultGetData.isChunkingRequest( nRowsIndex, nColumn ) )
+    if ( stateGetData.isChunkingRequest( nRowsIndex, nColumn ) )
     {
-        if ( MDescriptorRecordIRD::isVariableLength(
resultGetData.pImpRowDescRec->getConciseType() ) )
+        if ( MDescriptorRecordIRD::isVariableLength(
stateGetData.pImpRowDescRec->getConciseType() ) )
         {
-            if  ( resultGetData.nBytesRemaining == 0 ||
vectorRows[resultGetData.nRow][resultGetData.nColumn - 1].isNull() )
+            if  ( stateGetData.nBytesRemaining == 0 ||
vectorRows[stateGetData.nRow][stateGetData.nColumn - 1].isNull() )
                 MYODBCDbgReturn( SQL_NO_DATA );
 
             /*!
@@ -1778,10 +1802,10 @@
                 We assume that nTargetType has not changed!!! In this way we *avoid*
having to convert
                 data & recalc length after the first call.
             */
-            resultGetData.pTarget       = pTarget;
-            resultGetData.nBytesMax     = nBufferLength;
-            resultGetData.pnLength      = pnLength;
-            resultGetData.pnIndicator   = pnIndicator;
+            stateGetData.pTarget       = pTarget;
+            stateGetData.nBytesMax     = nBufferLength;
+            stateGetData.pnLength      = pnLength;
+            stateGetData.pnIndicator   = pnIndicator;
         }
         else
         {
@@ -1797,29 +1821,29 @@
     else
     {
         /* init our get data state (beyond doClear()) */
-        resultGetData.doClear();
-        resultGetData.bInUse                = true;
-        resultGetData.nBytesMax             = nBufferLength;
-        resultGetData.nColumn               = nColumn;
-        resultGetData.nTargetType           = nTargetType;
-        resultGetData.nTargetTypeAdjusted   = nTargetType;
-        resultGetData.pImpRowDescRec        =
(MDescriptorRecordIRD*)getImpRowDesc()->getRecord( nColumn );
-        resultGetData.pnLength              = pnLength;
-        resultGetData.pnIndicator           = pnIndicator;
-        resultGetData.pTarget               = pTarget;
-        resultGetData.nRow                  = nRowsIndex;
-        *resultGetData.pnIndicator          = resultGetData.nIndicator;
+        stateGetData.doClear();
+        stateGetData.bInUse                = true;
+        stateGetData.nBytesMax             = nBufferLength;
+        stateGetData.nColumn               = nColumn;
+        stateGetData.nTargetType           = nTargetType;
+        stateGetData.nTargetTypeAdjusted   = nTargetType;
+        stateGetData.pImpRowDescRec        =
(MDescriptorRecordIRD*)getImpRowDesc()->getRecord( nColumn );
+        stateGetData.pnLength              = pnLength;
+        stateGetData.pnIndicator           = pnIndicator;
+        stateGetData.pTarget               = pTarget;
+        stateGetData.nRow                  = nRowsIndex;
+        *stateGetData.pnIndicator          = stateGetData.nIndicator;
 
         /* get indicator value; no need to process further if we are null */
-        if ( vectorRows[resultGetData.nRow][resultGetData.nColumn - 1].isNull() )
+        if ( vectorRows[stateGetData.nRow][stateGetData.nColumn - 1].isNull() )
         {
-            resultGetData.nIndicator = SQL_NULL_DATA;
+            stateGetData.nIndicator = SQL_NULL_DATA;
 
-            MYODBCCSet( resultGetData.pnLength, 0 );
+            MYODBCCSet( stateGetData.pnLength, 0 );
 
-            if ( resultGetData.pnIndicator ) 
+            if ( stateGetData.pnIndicator ) 
             {
-                *resultGetData.pnIndicator = resultGetData.nIndicator;
+                *stateGetData.pnIndicator = stateGetData.nIndicator;
                 MYODBCDbgReturn( SQL_SUCCESS );
             }
             else
@@ -1864,11 +1888,11 @@
                 TargetType argument of SQL_ARD_TYPE, which will cause the precision and
scale values in 
                 the descriptor fields to be used.
             */
-            resultGetData.pAppRowDescRec        =
(MDescriptorRecordARD*)getAppRowDesc()->getRecord( nColumn );
-            resultGetData.nTargetTypeAdjusted   =
resultGetData.pAppRowDescRec->getConciseType();
+            stateGetData.pAppRowDescRec        =
(MDescriptorRecordARD*)getAppRowDesc()->getRecord( nColumn );
+            stateGetData.nTargetTypeAdjusted   =
stateGetData.pAppRowDescRec->getConciseType();
 
             /* sanity check to prevent 'looping' */
-            if ( resultGetData.nTargetTypeAdjusted == SQL_ARD_TYPE )
+            if ( stateGetData.nTargetTypeAdjusted == SQL_ARD_TYPE )
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000,
0, tr("SQL_ARD_TYPE is invalid target type for ARD") ) );
         }
         /*!
@@ -1892,14 +1916,14 @@
     
                 The logic for selecting the C data type is spelled out in the ODBC
specification.
             */
-            resultGetData.nTargetTypeAdjusted = MYODBCC::getCDefault(
getEnvironment()->getODBCVersion(), resultGetData.pImpRowDescRec->getConciseType(),
resultGetData.pImpRowDescRec->getUnsigned() );
+            stateGetData.nTargetTypeAdjusted = MYODBCC::getCDefault(
getEnvironment()->getODBCVersion(), stateGetData.pImpRowDescRec->getConciseType(),
stateGetData.pImpRowDescRec->getUnsigned() );
         }
     }
 
 #if MYODBC_DBG > 1
-    MYODBCDbgInfo( QString( "cell data (1st 50 chars)=%1" ).arg(
vectorRows[resultGetData.nRow][resultGetData.nColumn - 1].toString().left( 50 ) ) );
-    MYODBCDbgInfo( QString( "resultGetData.pImpRowDescRec->getConciseType()=%1=%2"
).arg( resultGetData.pImpRowDescRec->getConciseType() ).arg(
MYODBCC::getConciseTypeStringSQL( resultGetData.pImpRowDescRec->getConciseType(),
getEnvironment()->getODBCVersion() ) ) );
-    MYODBCDbgInfo( QString( "resultGetData.nTargetTypeAdjusted=%1=%2" ).arg(
resultGetData.nTargetTypeAdjusted ).arg( MYODBCC::getConciseTypeStringC(
resultGetData.nTargetTypeAdjusted, getEnvironment()->getODBCVersion() ) ) );
+    MYODBCDbgInfo( QString( "cell data (1st 50 chars)=%1" ).arg(
vectorRows[stateGetData.nRow][stateGetData.nColumn - 1].toString().left( 50 ) ) );
+    MYODBCDbgInfo( QString( "stateGetData.pImpRowDescRec->getConciseType()=%1=%2"
).arg( stateGetData.pImpRowDescRec->getConciseType() ).arg(
MYODBCC::getConciseTypeStringSQL( stateGetData.pImpRowDescRec->getConciseType(),
getEnvironment()->getODBCVersion() ) ) );
+    MYODBCDbgInfo( QString( "stateGetData.nTargetTypeAdjusted=%1=%2" ).arg(
stateGetData.nTargetTypeAdjusted ).arg( MYODBCC::getConciseTypeStringC(
stateGetData.nTargetTypeAdjusted, getEnvironment()->getODBCVersion() ) ) );
 #endif
 
     /*!
@@ -1907,10 +1931,10 @@
         \note
 
         Ok - we have handled special conditions and we have ensured that we have a viable
-        get data state in resultGetData - including cell data in our variant (data
conversion 'hub'). 
+        get data state in stateGetData - including cell data in our variant (data
conversion 'hub'). 
         Now lets convert the data (select a 'spoke to head out on').
     */
-    switch ( resultGetData.pImpRowDescRec->getConciseType() )
+    switch ( stateGetData.pImpRowDescRec->getConciseType() )
     {
         case SQL_CHAR:
         case SQL_VARCHAR:
@@ -1918,7 +1942,7 @@
         case SQL_WCHAR:
         case SQL_WVARCHAR:
         case SQL_WLONGVARCHAR:
-            nReturn = fromCharacterSQL( &resultGetData );
+            nReturn = fromCharacterSQL( &stateGetData );
             break;
 
         case SQL_DECIMAL:
@@ -1930,45 +1954,45 @@
         case SQL_REAL:
         case SQL_FLOAT:
         case SQL_DOUBLE:
-            nReturn = fromNumericSQL( &resultGetData );
+            nReturn = fromNumericSQL( &stateGetData );
             break;
 
         case SQL_BIT:
-            nReturn = fromBitSQL( &resultGetData );
+            nReturn = fromBitSQL( &stateGetData );
             break;
 
         case SQL_BINARY:
         case SQL_VARBINARY:
         case SQL_LONGVARBINARY:
-            nReturn = fromBinarySQL( &resultGetData );
+            nReturn = fromBinarySQL( &stateGetData );
             break;
 
         case SQL_GUID:
-            nReturn = fromGuidSQL( &resultGetData );
+            nReturn = fromGuidSQL( &stateGetData );
             break;
 
         case SQL_TYPE_DATE:
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC2 )
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY003 )
);
-            nReturn = fromDateSQL( &resultGetData );
+            nReturn = fromDateSQL( &stateGetData );
             break;
 
         case SQL_TYPE_TIME:
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC2 )
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY003 )
);
-            nReturn = fromTimeSQL( &resultGetData );
+            nReturn = fromTimeSQL( &stateGetData );
             break;
 
         case SQL_TYPE_TIMESTAMP:
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC2 )
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY003 )
);
-            nReturn = fromTimeStampSQL( &resultGetData );
+            nReturn = fromTimeStampSQL( &stateGetData );
             break;
 
         case SQL_INTERVAL_YEAR:
         case SQL_INTERVAL_MONTH:
         case SQL_INTERVAL_YEAR_TO_MONTH:
-            nReturn = fromIntervalYearMonthSQL( &resultGetData );
+            nReturn = fromIntervalYearMonthSQL( &stateGetData );
             break;
 
         case SQL_INTERVAL_DAY:
@@ -1981,32 +2005,32 @@
         case SQL_INTERVAL_HOUR_TO_MINUTE:
         case SQL_INTERVAL_HOUR_TO_SECOND:
         case SQL_INTERVAL_MINUTE_TO_SECOND:
-            nReturn = fromIntervalDayTimeSQL( &resultGetData );
+            nReturn = fromIntervalDayTimeSQL( &stateGetData );
             break;
 
         case SQL_DATE:
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC3 )
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY003 )
);
-            nReturn = fromDateSQL( &resultGetData );
+            nReturn = fromDateSQL( &stateGetData );
             break;
 
         case SQL_TIME:
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC3 )
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY003 )
);
-            nReturn = fromTimeSQL( &resultGetData );
+            nReturn = fromTimeSQL( &stateGetData );
             break;
 
         case SQL_TIMESTAMP:
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC3 )
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY003 )
);
-            nReturn = fromTimeStampSQL( &resultGetData );
+            nReturn = fromTimeStampSQL( &stateGetData );
             break;
 
         default:
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY003 ) );
     }
 
-    MYODBCCSet( pnLength, resultGetData.nBytesTotal );
+    MYODBCCSet( pnLength, stateGetData.nBytesTotal );
 
     MYODBCDbgReturn( nReturn );
 }
@@ -2119,14 +2143,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "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( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromCharacterSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2218,14 +2242,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: Numeric"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromNumericSQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromNumericSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2312,14 +2336,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: Bit"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromBitSQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromBitSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2376,14 +2400,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: Binary"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromBinarySQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromBinarySQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2413,14 +2437,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: Date"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromDateSQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromDateSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2456,14 +2480,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: GUID"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromGuidSQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromGuidSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2498,14 +2522,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: Time"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromTimeSQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromTimeSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2541,14 +2565,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: Timestamp"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromTimeStampSQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromTimeStampSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2587,14 +2611,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: Year-Month Intervals"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromIntervalYearMonthSQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromIntervalYearMonthSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2640,14 +2664,14 @@
 
             Converts type as required.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa     getData()
             "SQL to C: Day-Time Intervals"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
 */
-SQLRETURN MResult::fromIntervalDayTimeSQL( MResultGetData *pResultGetData )
+SQLRETURN MResult::fromIntervalDayTimeSQL( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2697,16 +2721,16 @@
 /*!
     \brief  Converts data to SQL_C_CHAR.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toCharC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toCharC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2766,16 +2790,16 @@
 /*!
     \brief  Converts data to SQL_C_WCHAR.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toWCharC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toWCharC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2835,16 +2859,16 @@
 /*!
     \brief  Converts data to SQL_C_SSHORT.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toSShortC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toSShortC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2880,16 +2904,16 @@
 /*!
     \brief  Converts data to SQL_C_USHORT.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toUShortC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toUShortC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2915,16 +2939,16 @@
 /*!
     \brief  Converts data to SQL_C_SLONG.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toSLongC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toSLongC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -2966,16 +2990,16 @@
 /*!
     \brief  Converts data to SQL_C_ULONG.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toULongC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toULongC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3001,16 +3025,16 @@
 /*!
     \brief  Converts data to SQL_C_FLOAT.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toFloatC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toFloatC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3036,16 +3060,16 @@
 /*!
     \brief  Converts data to SQL_C_DOUBLE.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toDoubleC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toDoubleC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3071,16 +3095,16 @@
 /*!
     \brief  Converts data to SQL_C_BIT.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toBitC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toBitC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3121,16 +3145,16 @@
 /*!
     \brief  Converts data to SQL_C_STINYINT.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toSTinyIntC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toSTinyIntC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3156,16 +3180,16 @@
 /*!
     \brief  Converts data to SQL_C_UTINYINT.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toUTinyIntC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toUTinyIntC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3191,16 +3215,16 @@
 /*!
     \brief  Converts data to SQL_C_SBIGINT.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toSBigIntC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toSBigIntC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3226,16 +3250,16 @@
 /*!
     \brief  Converts data to SQL_C_UBIGINT.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toUBigIntC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toUBigIntC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3261,16 +3285,16 @@
 /*!
     \brief  Converts data to SQL_C_BINARY.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toBinaryC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toBinaryC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3312,20 +3336,20 @@
 /*!
     \brief  Converts data to SQL_C_VARBOOKMARK.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
     \note   We may never really use this as bookmark requests will likely get intercepted
higher up
             the 'food chain'. But doing this allows us to put a bookmark into the result
set and 
             subsequently in our data conversion 'hub' - the Variant cell value.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toVarBookmarkC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toVarBookmarkC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( toBinaryC( pResultGetData ) );
@@ -3334,16 +3358,16 @@
 /*!
     \brief  Converts data to SQL_C_TYPE_DATE.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toTypeDateC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toTypeDateC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3374,16 +3398,16 @@
 /*!
     \brief  Converts data to SQL_C_TYPE_TIME.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toTypeTimeC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toTypeTimeC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3414,16 +3438,16 @@
 /*!
     \brief  Converts data to SQL_C_TYPE_TIMESTAMP.
 
-            This method uses information provided in MResultGetData to fill a target
buffer with the 
+            This method uses information provided in MStateGetData to fill a target
buffer with the 
             specified cell data - converted as needed.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toTypeTimestampC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toTypeTimestampC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3467,13 +3491,13 @@
     \note           Not all source data can be converted to a SQL_NUMERIC_STRUCT. There
are ODBC rules
                     which govern this - most of which may have been applied before
getting here.
 
-    \param  pResultGetData  Reference to a MResultGetData. This should be initialized
with cell data etc.
+    \param  pResultGetData  Reference to a MStateGetData. This should be initialized with
cell data etc.
 
     \return SQLRETURN
 
     \sa getData()
 */
-SQLRETURN MResult::toNumericC( MResultGetData *pResultGetData )
+SQLRETURN MResult::toNumericC( MStateGetData *pResultGetData )
 {
     MYODBCDbgEnter();
 
@@ -3607,91 +3631,91 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
-SQLRETURN MResult::toGuidC( MResultGetData * )
+SQLRETURN MResult::toGuidC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalMonthC( MResultGetData * )
+SQLRETURN MResult::toIntervalMonthC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalYearC( MResultGetData * )
+SQLRETURN MResult::toIntervalYearC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalYearToMonthC( MResultGetData * )
+SQLRETURN MResult::toIntervalYearToMonthC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalDayC( MResultGetData * )
+SQLRETURN MResult::toIntervalDayC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalHourC( MResultGetData * )
+SQLRETURN MResult::toIntervalHourC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalMinuteC( MResultGetData * )
+SQLRETURN MResult::toIntervalMinuteC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalSecondC( MResultGetData * )
+SQLRETURN MResult::toIntervalSecondC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalDayToHourC( MResultGetData * )
+SQLRETURN MResult::toIntervalDayToHourC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalDayToMinuteC( MResultGetData * )
+SQLRETURN MResult::toIntervalDayToMinuteC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalDayToSecondC( MResultGetData * )
+SQLRETURN MResult::toIntervalDayToSecondC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalHourToMinuteC( MResultGetData * )
+SQLRETURN MResult::toIntervalHourToMinuteC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalHourToSecondC( MResultGetData * )
+SQLRETURN MResult::toIntervalHourToSecondC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::toIntervalMinuteToSecondC( MResultGetData * )
+SQLRETURN MResult::toIntervalMinuteToSecondC( MStateGetData * )
 {
     MYODBCDbgEnter();
     MYODBCDbgReturn( SQL_ERROR );
 }
 
-SQLRETURN MResult::fromC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -3762,7 +3786,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0, QString(
tr("unknown C data type %1") ).arg(
pResultPutData->pDescriptorRecordAPD->getConciseType() ) ) );
 }
 
-SQLRETURN MResult::fromCharacterC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromCharacterC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -3823,7 +3847,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromNumericC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromNumericC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -3926,7 +3950,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromBitC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromBitC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -3967,7 +3991,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromBinaryC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromBinaryC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -4085,7 +4109,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromDateC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromDateC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -4138,7 +4162,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromGuidC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromGuidC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -4174,7 +4198,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromTimeC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromTimeC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -4240,7 +4264,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromTimeStampC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromTimeStampC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -4327,7 +4351,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromIntervalYearMonthC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromIntervalYearMonthC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 
@@ -4387,7 +4411,7 @@
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07006 ) );
 }
 
-SQLRETURN MResult::fromIntervalDayTimeC( MResultPutData *pResultPutData )
+SQLRETURN MResult::fromIntervalDayTimeC( MStatePutData *pResultPutData )
 {
     MYODBCDbgEnter();
 

Modified: trunk/SDK/MYSQLPlus/Library/MResult.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.h	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/SDK/MYSQLPlus/Library/MResult.h	2006-11-23 15:36:13 UTC (rev 687)
@@ -22,10 +22,10 @@
 
                 We package the entire getData call in here and then some.
 */
-class MResultGetData
+class MStateGetData
 {
 public:
-    MResultGetData();
+    MStateGetData();
 
     void doClear();
     
@@ -62,10 +62,10 @@
                 - parameter data to be used in a call to SQLExecute or SQLExecDirect
                 - column data to be used when a row is updated or added by a call to
SQLBulkOperations or is updated by a call to SQLSetPos
 */
-class MResultPutData
+class MStatePutData
 {
 public:
-    MResultPutData();
+    MStatePutData();
 
     void doClear();
 
@@ -80,6 +80,24 @@
     MDescriptorRecordAPD *  pDescriptorRecordAPD;   /*!< bound parameter (C data type
info)                                 */
 };
 
+
+class MStateExecute
+{
+public:
+    MStateExecute();
+
+    void doClear();
+
+    MDescriptorIPD *pDescriptorIPD;             /*!< current IPD                      
                                 */
+    MDescriptorAPD *pDescriptorAPD;             /*!< current APD                      
                                 */
+    QString         stringCommand;              /*!< command we will submit to server 
                                 */
+    QStringList     stringlistCommandSegments;  /*!< command split on parameter
markers                                 */
+    SQLUSMALLINT    nParameterFirst;            /*!< offset because parameters may be
spread out over multiple commands */
+    int             nParameter;                 /*!< current parameter                
                                 */
+    MStatePutData   statePutData;               /*!< state to support doPutData       
                                 */
+};
+
+
 /*!
     \brief  ResultSet abstraction.
 
@@ -317,10 +335,10 @@
     virtual BOOL isValidRowSetRow();
 
 protected:
-    MResultGetData  resultGetData;      /*!< to support getData() (in particular;
chunking)                                                                 */
-    MResultPutData  resultSetData;      /*!< to support doBindParameter()             
                                                                     */
-    SQLUSMALLINT    nRowSetRow;         /*!< Current row in rowset.                   
                                                                     */
-    SQLUSMALLINT    nRowSetRows;        /*!< Is RowSetSize but will be less when
RowSet goes beyond ResultSetRows.                                          */
+    MStateGetData   stateGetData;       /*!< to allow getData to support chunking data
out (via successive getData calls on same colum)             */
+    MStateExecute   stateExecute;       /*!< to allow doExecute to support chunking
data in (via doParamData & doPutData)                           */
+    SQLUSMALLINT    nRowSetRow;         /*!< Current row in rowset.                   
                                                             */
+    SQLUSMALLINT    nRowSetRows;        /*!< Is RowSetSize but will be less when
RowSet goes beyond ResultSetRows.                                  */
 
     /*!
         \name   vectorRows
@@ -405,6 +423,8 @@
     virtual SQLRETURN   doRefresh( SQLUINTEGER nRowSetRow );
     virtual SQLRETURN   doRefreshArray( SQLUINTEGER nRowSetRow );
     virtual SQLRETURN   doRefreshArray( SQLUINTEGER nRowSetRow, SQLUINTEGER nLength );
+    virtual SQLRETURN   doSubmitCommand( MStateExecute *pStateExecute ) = 0;
+    virtual SQLRETURN   doSubmitCommand( const QString &stringCommand ) = 0;
 
     /*!
         \name   Cursor methods.
@@ -438,7 +458,7 @@
     /*!
         \name   from*SQL
 
-        These are used to convert/copy data into an initialized MResultGetData. These
methods also enforce ODBC rules 
+        These are used to convert/copy data into an initialized MStateGetData. These
methods also enforce ODBC rules 
         generalized based upon SQL type - hence fewer methods than SQL types.
 
         \sa 
@@ -446,16 +466,16 @@
         "Converting Data from SQL to C Data Types"
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
     */
     /*@{*/
-    SQLRETURN       fromCharacterSQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromNumericSQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromBitSQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromBinarySQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromDateSQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromGuidSQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromTimeSQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromTimeStampSQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromIntervalYearMonthSQL( MResultGetData *pResultGetData );
-    SQLRETURN       fromIntervalDayTimeSQL( MResultGetData *pResultGetData );
+    SQLRETURN       fromCharacterSQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromNumericSQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromBitSQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromBinarySQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromDateSQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromGuidSQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromTimeSQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromTimeStampSQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromIntervalYearMonthSQL( MStateGetData *pResultGetData );
+    SQLRETURN       fromIntervalDayTimeSQL( MStateGetData *pResultGetData );
     /*@}*/
 
     /*!
@@ -472,46 +492,46 @@
         "C Data Types"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcc_data_types.asp
     */
     /*@{*/
-    SQLRETURN       toCharC( MResultGetData  *pResultGetData );                        
/*!< SQL_C_CHAR 	        SQLCHAR * 	            unsigned char *     */
-    SQLRETURN       toWCharC( MResultGetData  *pResultGetData );                       
/*!< SQL_C_WCHAR 	        SQLWCHAR * 	            wchar_t *           */
-    SQLRETURN       toSShortC( MResultGetData  *pResultGetData );                      
/*!< SQL_C_SSHORT 	        SQLSMALLINT 	        short int           */
-    SQLRETURN       toUShortC( MResultGetData  *pResultGetData );                      
/*!< SQL_C_USHORT 	        SQLUSMALLINT 	        unsigned short int  */
-    SQLRETURN       toSLongC( MResultGetData  *pResultGetData );                       
/*!< SQL_C_SLONG 	        SQLINTEGER 	            long int            */
-    SQLRETURN       toULongC( MResultGetData  *pResultGetData );                       
/*!< SQL_C_ULONG 	        SQLUINTEGER	            unsigned long int   */
-    SQLRETURN       toFloatC( MResultGetData  *pResultGetData );                       
/*!< SQL_C_FLOAT 	        SQLREAL 	            float               */
-    SQLRETURN       toDoubleC( MResultGetData  *pResultGetData );                      
/*!< SQL_C_DOUBLE 	        SQLDOUBLE,SQLFLOAT      double              */
-    SQLRETURN       toBitC( MResultGetData  *pResultGetData );                         
/*!< SQL_C_BIT 	            SQLCHAR 	            unsigned char       */
-    SQLRETURN       toSTinyIntC( MResultGetData  *pResultGetData );                    
/*!< SQL_C_STINYINT	        SQLSCHAR 	            signed char         */
-    SQLRETURN       toUTinyIntC( MResultGetData  *pResultGetData );                    
/*!< SQL_C_UTINYINT	        SQLCHAR 	            unsigned char       */
-    SQLRETURN       toSBigIntC( MResultGetData  *pResultGetData );                     
/*!< SQL_C_SBIGINT 	        SQLBIGINT 	            _int64              */
-    SQLRETURN       toUBigIntC( MResultGetData  *pResultGetData );                     
/*!< SQL_C_UBIGINT 	        SQLUBIGINT 	            unsigned _int64     */
-    SQLRETURN       toBinaryC( MResultGetData  *pResultGetData );                      
/*!< SQL_C_BINARY 	        SQLCHAR * 	            unsigned char *     */
-    SQLRETURN       toVarBookmarkC( MResultGetData  *pResultGetData );                 
/*!< SQL_C_VARBOOKMARK 	    SQLCHAR * 	            unsigned char *     */
-    SQLRETURN       toTypeDateC( MResultGetData  *pResultGetData );                    
/*!< SQL_C_TYPE_DATE 	    SQL_DATE_STRUCT         DATE_STRUCT         */
-    SQLRETURN       toTypeTimeC( MResultGetData  *pResultGetData );                    
/*!< SQL_C_TYPE_TIME 	    SQL_TIME_STRUCT         TIME_STRUCT         */
-    SQLRETURN       toTypeTimestampC( MResultGetData  *pResultGetData );               
/*!< SQL_C_TYPE_TIMESTAMP 	SQL_TIMESTAMP_STRUCT    TIMESTAMP_STRUCT    */
-    SQLRETURN       toNumericC( MResultGetData  *pResultGetData );                     
/*!< SQL_C_NUMERIC 	        SQL_NUMERIC_STRUCT      SQL_NUMERIC_STRUCT  */
-    SQLRETURN       toGuidC( MResultGetData  *pResultGetData );                        
/*!< SQL_C_GUID 	        SQLGUID                 SQLGUID             */
-    SQLRETURN       toIntervalMonthC( MResultGetData  *pResultGetData );               
/*!< interval type          SQL_INTERVAL_STRUCT     SQL_INTERVAL_STRUCT */
-    SQLRETURN       toIntervalYearC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalYearToMonthC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalDayC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalHourC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalMinuteC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalSecondC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalDayToHourC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalDayToMinuteC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalDayToSecondC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalHourToMinuteC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalHourToSecondC( MResultGetData  *pResultGetData );
-    SQLRETURN       toIntervalMinuteToSecondC( MResultGetData  *pResultGetData );
+    SQLRETURN       toCharC( MStateGetData  *pResultGetData );                        
/*!< SQL_C_CHAR 	        SQLCHAR * 	            unsigned char *     */
+    SQLRETURN       toWCharC( MStateGetData  *pResultGetData );                       
/*!< SQL_C_WCHAR 	        SQLWCHAR * 	            wchar_t *           */
+    SQLRETURN       toSShortC( MStateGetData  *pResultGetData );                      
/*!< SQL_C_SSHORT 	        SQLSMALLINT 	        short int           */
+    SQLRETURN       toUShortC( MStateGetData  *pResultGetData );                      
/*!< SQL_C_USHORT 	        SQLUSMALLINT 	        unsigned short int  */
+    SQLRETURN       toSLongC( MStateGetData  *pResultGetData );                       
/*!< SQL_C_SLONG 	        SQLINTEGER 	            long int            */
+    SQLRETURN       toULongC( MStateGetData  *pResultGetData );                       
/*!< SQL_C_ULONG 	        SQLUINTEGER	            unsigned long int   */
+    SQLRETURN       toFloatC( MStateGetData  *pResultGetData );                       
/*!< SQL_C_FLOAT 	        SQLREAL 	            float               */
+    SQLRETURN       toDoubleC( MStateGetData  *pResultGetData );                      
/*!< SQL_C_DOUBLE 	        SQLDOUBLE,SQLFLOAT      double              */
+    SQLRETURN       toBitC( MStateGetData  *pResultGetData );                         
/*!< SQL_C_BIT 	            SQLCHAR 	            unsigned char       */
+    SQLRETURN       toSTinyIntC( MStateGetData  *pResultGetData );                    
/*!< SQL_C_STINYINT	        SQLSCHAR 	            signed char         */
+    SQLRETURN       toUTinyIntC( MStateGetData  *pResultGetData );                    
/*!< SQL_C_UTINYINT	        SQLCHAR 	            unsigned char       */
+    SQLRETURN       toSBigIntC( MStateGetData  *pResultGetData );                     
/*!< SQL_C_SBIGINT 	        SQLBIGINT 	            _int64              */
+    SQLRETURN       toUBigIntC( MStateGetData  *pResultGetData );                     
/*!< SQL_C_UBIGINT 	        SQLUBIGINT 	            unsigned _int64     */
+    SQLRETURN       toBinaryC( MStateGetData  *pResultGetData );                      
/*!< SQL_C_BINARY 	        SQLCHAR * 	            unsigned char *     */
+    SQLRETURN       toVarBookmarkC( MStateGetData  *pResultGetData );                 
/*!< SQL_C_VARBOOKMARK 	    SQLCHAR * 	            unsigned char *     */
+    SQLRETURN       toTypeDateC( MStateGetData  *pResultGetData );                    
/*!< SQL_C_TYPE_DATE 	    SQL_DATE_STRUCT         DATE_STRUCT         */
+    SQLRETURN       toTypeTimeC( MStateGetData  *pResultGetData );                    
/*!< SQL_C_TYPE_TIME 	    SQL_TIME_STRUCT         TIME_STRUCT         */
+    SQLRETURN       toTypeTimestampC( MStateGetData  *pResultGetData );               
/*!< SQL_C_TYPE_TIMESTAMP 	SQL_TIMESTAMP_STRUCT    TIMESTAMP_STRUCT    */
+    SQLRETURN       toNumericC( MStateGetData  *pResultGetData );                     
/*!< SQL_C_NUMERIC 	        SQL_NUMERIC_STRUCT      SQL_NUMERIC_STRUCT  */
+    SQLRETURN       toGuidC( MStateGetData  *pResultGetData );                        
/*!< SQL_C_GUID 	        SQLGUID                 SQLGUID             */
+    SQLRETURN       toIntervalMonthC( MStateGetData  *pResultGetData );               
/*!< interval type          SQL_INTERVAL_STRUCT     SQL_INTERVAL_STRUCT */
+    SQLRETURN       toIntervalYearC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalYearToMonthC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalDayC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalHourC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalMinuteC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalSecondC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalDayToHourC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalDayToMinuteC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalDayToSecondC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalHourToMinuteC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalHourToSecondC( MStateGetData  *pResultGetData );
+    SQLRETURN       toIntervalMinuteToSecondC( MStateGetData  *pResultGetData );
     /*@}*/
 
 
     /*!
         \name   from*C
 
-        These are used to convert/copy data into an initialized MResultPutData. These
methods also enforce ODBC rules 
+        These are used to convert/copy data into an initialized MStatePutData. These
methods also enforce ODBC rules 
         generalized based upon C type.
 
         \sa 
@@ -519,17 +539,17 @@
         "Converting Data from C to SQL Data Types"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_c_to_sql_data_types.asp
     */
     /*@{*/
-    SQLRETURN       fromC( MResultPutData  *pResultPutData );
-    SQLRETURN       fromCharacterC( MResultPutData *pResultPutData );
-    SQLRETURN       fromNumericC( MResultPutData *pResultPutData );
-    SQLRETURN       fromBitC( MResultPutData *pResultPutData );
-    SQLRETURN       fromBinaryC( MResultPutData *pResultPutData );
-    SQLRETURN       fromDateC( MResultPutData *pResultPutData );
-    SQLRETURN       fromGuidC( MResultPutData *pResultPutData );
-    SQLRETURN       fromTimeC( MResultPutData *pResultPutData );
-    SQLRETURN       fromTimeStampC( MResultPutData *pResultPutData );
-    SQLRETURN       fromIntervalYearMonthC( MResultPutData *pResultPutData );
-    SQLRETURN       fromIntervalDayTimeC( MResultPutData *pResultPutData );
+    SQLRETURN       fromC( MStatePutData  *pResultPutData );
+    SQLRETURN       fromCharacterC( MStatePutData *pResultPutData );
+    SQLRETURN       fromNumericC( MStatePutData *pResultPutData );
+    SQLRETURN       fromBitC( MStatePutData *pResultPutData );
+    SQLRETURN       fromBinaryC( MStatePutData *pResultPutData );
+    SQLRETURN       fromDateC( MStatePutData *pResultPutData );
+    SQLRETURN       fromGuidC( MStatePutData *pResultPutData );
+    SQLRETURN       fromTimeC( MStatePutData *pResultPutData );
+    SQLRETURN       fromTimeStampC( MStatePutData *pResultPutData );
+    SQLRETURN       fromIntervalYearMonthC( MStatePutData *pResultPutData );
+    SQLRETURN       fromIntervalDayTimeC( MStatePutData *pResultPutData );
     /*@}*/
 
 private:

Modified: trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp	2006-11-23 15:36:13 UTC (rev 687)
@@ -57,7 +57,7 @@
     if (  nColumn == 0 )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("Invalid column. Bookmark column is read-only.") ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     vectorRows[getRowSetRowIndex()].replace( nColumn - 1, variantData );
 
@@ -88,7 +88,7 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010, 0,
tr("Resultset is read-only.") ) );
     }
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     /*!
         \internal
@@ -144,7 +144,7 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010 ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("Resultset is read-only.") ) );
 }
@@ -156,7 +156,7 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010 ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("Resultset is read-only.") ) );
 }
@@ -1056,8 +1056,8 @@
             setBeforeStart();
 //            getImpParamDesc()->doClear();
             getImpRowDesc()->doClear();
-            resultGetData.doClear();
-            resultSetData.doClear();
+            stateGetData.doClear();
+            stateExecute.doClear();
             setState( STATE_INITIALIZED ); /* we do not use a 'prepared' state */
             break;
 

Modified: trunk/SDK/MYSQLPlus/Library/MResultPlus.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultPlus.h	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/SDK/MYSQLPlus/Library/MResultPlus.h	2006-11-23 15:36:13 UTC (rev 687)
@@ -83,6 +83,8 @@
     SQLRETURN doStateRollBack( STATE nState );
     SQLRETURN doApplyCursorRestrictions();
     SQLRETURN doAppendVarChar();
+    SQLRETURN doSubmitCommand( MStateExecute * ) { MYODBCDbgEnter(); MYODBCDbgReturn(
SQL_SUCCESS ); }
+    SQLRETURN doSubmitCommand( const QString & ) { MYODBCDbgEnter(); MYODBCDbgReturn(
SQL_SUCCESS ); }
 
     /*!
         \name   Cursor methods.

Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.cpp	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.cpp	2006-11-23 15:36:13 UTC (rev 687)
@@ -191,10 +191,8 @@
     if ( getState() > STATE_PREPARED )
         doStateRollBack( STATE_PREPARED );
 
-    MDescriptorIPD *pDescriptorIPD  = (MDescriptorIPD*)getImpParamDesc();
-    MDescriptorAPD *pDescriptorAPD  = (MDescriptorAPD*)getAppParamDesc();
-    SQLRETURN       nReturn         = SQL_SUCCESS;
-    SQLRETURN       nReturnInternal;
+    stateExecute.pDescriptorIPD = (MDescriptorIPD*)getImpParamDesc();
+    stateExecute.pDescriptorAPD = (MDescriptorAPD*)getAppParamDesc();
 
     /*!
         \internal ODBC RULE
@@ -213,8 +211,8 @@
 
         In other words; all parameters markers must have bound data.
     */
-    if ( pDescriptorIPD->getCount() < pCommand->getParameterMarkerCount() )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07002, 0,
QString( tr("number of IPD records (%1) must be >= number of parameter markers (%2)")
).arg( pDescriptorIPD->getCount() ).arg( pCommand->getParameterMarkerCount() ) ) );
+    if ( stateExecute.pDescriptorIPD->getCount() <
pCommand->getParameterMarkerCount() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07002, 0,
QString( tr("number of IPD records (%1) must be >= number of parameter markers (%2)")
).arg( stateExecute.pDescriptorIPD->getCount() ).arg(
pCommand->getParameterMarkerCount() ) ) );
 
     /*!
         \internal MYODBC RULE
@@ -222,85 +220,158 @@
         APD's can be swapped out by the app between/after SQLBindParameter etc and as
such get out of 
         sync. It should be sufficient to catch the case where we have too few APD
records.
     */
-    if ( pDescriptorAPD->getCount() < pCommand->getParameterMarkerCount() )
-        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07002, 0,
QString( tr("number of APD records (%1) must be >= number of parameter markers (%2)")
).arg( pDescriptorAPD->getCount() ).arg( pCommand->getParameterMarkerCount() ) ) );
+    if ( stateExecute.pDescriptorAPD->getCount() <
pCommand->getParameterMarkerCount() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07002, 0,
QString( tr("number of APD records (%1) must be >= number of parameter markers (%2)")
).arg( stateExecute.pDescriptorAPD->getCount() ).arg(
pCommand->getParameterMarkerCount() ) ) );
 
-    /*!
-        \internal ODBC RULE
-        \todo
+#if MYODBC_DBG > 1
+    MYODBCDbgInfo( QString( "Command Raw=%1" ).arg( pCommand->getCommand() ) );
+#endif
 
-        SQLBindParameter was called with ParameterValuePtr set to a null pointer,
StrLen_or_IndPtr not set to SQL_NULL_DATA 
-        or SQL_DATA_AT_EXEC, and InputOutputType not set to SQL_PARAM_OUTPUT, so that the
number of parameters specified in 
-        SQLBindParameter was greater than the number of parameters in the SQL statement
contained in *StatementText.
-    */
+    stateExecute.stringlistCommandSegments  = pCommand->getSegments();
+    stateExecute.nParameterFirst            = pCommand->getParameterFirst(); /* we
offset the parameter because this may be the 2nd or more command in a batch */
 
+    SQLRETURN nReturn = doSubmitCommand( &stateExecute );
 
+    MYODBCDbgReturn( nReturn );
+}
+
+/*! 
+    \brief  Use this to insert a new, blank, row.
+
+            This will insert a new blank row before the current row and make
+            the new row current.
+
+    \return SQLRETURN
+    
+    \sa     doDelete
+            doInsert
+*/
+SQLRETURN MResultRes::doInsert()
+{
+    MYODBCDbgEnter();
+
     /*!
         \internal
         \todo
 
-        Handle binary data.
+        Implement. 
+
+        \sa MResultStmt::doInsert
     */
 
+    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("doInsert() not supported in this context") ) );
+}
 
+BOOL MResultRes::isResultSetPossible()
+{ 
+    MYODBCDbgEnter();  
+
+    if ( pCommand )
+        MYODBCDbgReturn3( "%d", pCommand->isResultSetPossible() ); 
+
+    MYODBCDbgReturn3( "%d", false ); 
+}
+
+/*!
+    \brief  Inserts any bound parameters into command and submits it to the server.
+
+            This call is used to support doExecute. This call also supports doParamData
+            for case when a bound parameter is SQL_LEN_DATA_AT_EXEC.
+
+    \param  pStateExecute  Ref. to a viable MStateExecute.
+
+    \return SQLRETURN
+
+    \retval SQL_SUCCESS
+    \retval SQL_SUCCESS_WITH_INFO
+    \retval SQL_NEED_DATA
+    \retval SQL_ERROR
+*/
+SQLRETURN MResultRes::doSubmitCommand( MStateExecute *pStateExecute )
+{
+    MYODBCDbgEnter();
+
+    SQLRETURN nReturn = SQL_SUCCESS;
+    SQLRETURN nReturnInternal;
+
     /*!
-        \internal
+        \internal ODBC RULE
         \todo
 
-        Support data at execution; 
-
-        \sa SQLPutData 
-            SQLParamData
+        SQLBindParameter was called with ParameterValuePtr set to a null pointer,
StrLen_or_IndPtr not set to SQL_NULL_DATA 
+        or SQL_DATA_AT_EXEC, and InputOutputType not set to SQL_PARAM_OUTPUT, so that the
number of parameters specified in 
+        SQLBindParameter was greater than the number of parameters in the SQL statement
contained in *StatementText.
     */
-
     /* Insert any parameters */
-    QString     stringStatement;
-    QStringList stringlistStatement = pCommand->getSegments();
 
-#if MYODBC_DBG > 1
-    MYODBCDbgInfo( QString( "Command Raw=%1" ).arg( pCommand->getCommand() ) );
-#endif
-
+    pStateExecute->nParameter = 1;
+    for ( int nCommandSegment = 0; nCommandSegment <
pStateExecute->stringlistCommandSegments.count(); nCommandSegment++ )
     {
-        /* we offset the parameter because this may be the 2nd or more command in a batch
*/
-        SQLUSMALLINT    nParameterFirst = pCommand->getParameterFirst();
-        int             nParameter      = 1;
-        for ( int nStatementSegment = 0; nStatementSegment <
stringlistStatement.count(); nStatementSegment++ )
+        /* parameter marker? */
+        if ( pStateExecute->stringlistCommandSegments.at( nCommandSegment ) == "?" )
         {
-            /* parameter marker? */
-            if ( stringlistStatement.at( nStatementSegment ) == "?" )
+            pStateExecute->statePutData.doClear();
+            pStateExecute->statePutData.pDescriptorRecordIPD =
(MDescriptorRecordIPD*)pStateExecute->pDescriptorIPD->getRecord(
pStateExecute->nParameterFirst + pStateExecute->nParameter );
+            pStateExecute->statePutData.pDescriptorRecordAPD =
(MDescriptorRecordAPD*)pStateExecute->pDescriptorAPD->getRecord(
pStateExecute->nParameterFirst + pStateExecute->nParameter );
+
+            nReturnInternal = fromC( &pStateExecute->statePutData );
+            switch ( nReturnInternal )
             {
-                resultSetData.doClear();
-                resultSetData.pDescriptorRecordIPD =
(MDescriptorRecordIPD*)pDescriptorIPD->getRecord( nParameterFirst + nParameter );
-                resultSetData.pDescriptorRecordAPD =
(MDescriptorRecordAPD*)pDescriptorAPD->getRecord( nParameterFirst + nParameter );
-
-                nReturnInternal = fromC( &resultSetData );
-                switch ( nReturnInternal )
-                {
-                    case SQL_SUCCESS:
-                        break;
-                    case SQL_SUCCESS_WITH_INFO:
-                        nReturn = nReturnInternal;
-                        break;
-                    case SQL_ERROR:
-                    default:
-                        doStateRollBack( STATE_INITIALIZED );
-                        MYODBCDbgReturn( nReturnInternal );
-                }
+                case SQL_SUCCESS:
+                    break;
+                case SQL_SUCCESS_WITH_INFO:
+                    nReturn = nReturnInternal;
+                    break;
+                case SQL_ERROR:
+                default:
+                    doStateRollBack( STATE_INITIALIZED );
+                    MYODBCDbgReturn( nReturnInternal );
+            }
 #if MYODBC_DBG > 1
-    MYODBCDbgInfo( QString( "variantData.isNull=%1" ).arg(
resultSetData.variantData.isNull() ) );
-    MYODBCDbgInfo( QString( "variantData=%1" ).arg( resultSetData.variantData.toString()
) );
+MYODBCDbgInfo( QString( "variantData.isNull=%1" ).arg(
pStateExecute->statePutData.variantData.isNull() ) );
+MYODBCDbgInfo( QString( "variantData=%1" ).arg(
pStateExecute->statePutData.variantData.toString() ) );
 #endif
-                stringStatement += resultSetData.variantData.toString();
-                nParameter++;
-                continue;
-            }
+            pStateExecute->stringCommand +=
pStateExecute->statePutData.variantData.toString();
+            pStateExecute->nParameter++;
+            continue;
+        }
 
-            /* plain statement segment */
-            stringStatement += stringlistStatement.at( nStatementSegment );
-        }
+        /* plain statement segment */
+        pStateExecute->stringCommand +=
pStateExecute->stringlistCommandSegments.at( nCommandSegment );
     }
 
+    /* All parameters have been resolved so submit command to server... */
+    nReturn = doSubmitCommand( pStateExecute->stringCommand );
+
+    MYODBCDbgReturn( nReturn );
+}
+
+/*!
+    \brief  Submits command to the server.
+
+            This call is used to support doSubmitCommand( MStatePutData ). This call
+            assumes that the given command has all bound parameter values in place, 
+            checks that the server is still around (as needed) and then submits the 
+            command to the server. 
+
+            The state will be fully updated upon return as per doExecute.
+
+    \param  stringCommand   A command string ready to be sent to the server.
+
+    \return SQLRETURN
+
+    \retval SQL_SUCCESS
+    \retval SQL_SUCCESS_WITH_INFO
+    \retval SQL_NEED_DATA
+    \retval SQL_ERROR
+*/
+SQLRETURN MResultRes::doSubmitCommand( const QString &stringCommand )
+{
+    MYODBCDbgEnter();
+
+    SQLRETURN nReturn = SQL_SUCCESS;
+    SQLRETURN nReturnInternal;
+
     /*!
         \internal
         \todo
@@ -308,11 +379,11 @@
         Submit command to server as utf8. We probably want to be smarter about what
encoding we use here.
     */
 #if MYODBC_DBG > 1
-    MYODBCDbgInfo( QString( "Command Complete=%1" ).arg( stringStatement ) );
+    MYODBCDbgInfo( QString( "Command Complete=%1" ).arg( stringCommand ) );
 #endif
 
 // printf( "[PAH][%s][%s][%d] Command: %s\n", __FILE__, __FUNCTION__, __LINE__,
stringStatement.toLatin1().data() );
-    if ( mysql_real_query( getMySQL(), stringStatement.toUtf8().constData(),
stringStatement.length() ) )
+    if ( mysql_real_query( getMySQL(), stringCommand.toUtf8().constData(),
stringCommand.length() ) )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000,
mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
 
     switch ( getBuffered() )
@@ -428,43 +499,6 @@
     MYODBCDbgReturn( nReturn );
 }
 
-/*! 
-    \brief  Use this to insert a new, blank, row.
-
-            This will insert a new blank row before the current row and make
-            the new row current.
-
-    \return SQLRETURN
-    
-    \sa     doDelete
-            doInsert
-*/
-SQLRETURN MResultRes::doInsert()
-{
-    MYODBCDbgEnter();
-
-    /*!
-        \internal
-        \todo
-
-        Implement. 
-
-        \sa MResultStmt::doInsert
-    */
-
-    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("doInsert() not supported in this context") ) );
-}
-
-BOOL MResultRes::isResultSetPossible()
-{ 
-    MYODBCDbgEnter();  
-
-    if ( pCommand )
-        MYODBCDbgReturn3( "%d", pCommand->isResultSetPossible() ); 
-
-    MYODBCDbgReturn3( "%d", false ); 
-}
-
 /*!
     \brief  Prepares for a \sa doFirst.
 */
@@ -868,8 +902,8 @@
             setResultSetRows( 0, true );
             setRowsAffected( 0 );
             setBeforeStart();
-            resultGetData.doClear();
-            resultSetData.doClear();
+            stateGetData.doClear();
+            stateExecute.doClear();
             setState( STATE_PREPARED );
             break;
 

Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.h	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.h	2006-11-23 15:36:13 UTC (rev 687)
@@ -43,6 +43,9 @@
 protected:
 
     /* doers */
+    virtual SQLRETURN   doSubmitCommand( MStateExecute *pStateExecute );
+    virtual SQLRETURN   doSubmitCommand( const QString &stringCommand );
+
     /*!
         \name   Cursor methods.
 

Modified: trunk/SDK/MYSQLPlus/Library/MResultStmt.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultStmt.cpp	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/SDK/MYSQLPlus/Library/MResultStmt.cpp	2006-11-23 15:36:13 UTC (rev 687)
@@ -87,7 +87,7 @@
     if (  nColumn == 0 )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("Invalid column. Bookmark column is read-only.") ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     /*! \internal
         \todo 
@@ -233,7 +233,7 @@
     if ( getStatement()->getConcurrency() == SQL_CONCUR_READ_ONLY )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("Resultset is read-only.") ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     /*!
         \internal
@@ -291,7 +291,7 @@
     if ( getStatement()->getConcurrency() == SQL_CONCUR_READ_ONLY )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("Resultset is read-only.") ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     /*!
         \internal
@@ -410,7 +410,7 @@
     if ( !isBuffered() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("doFirst() not supported for unbuffered resultset") ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     if ( !isValidRow( 1 ) )
     {
@@ -444,7 +444,7 @@
     if ( getStatement()->getConcurrency() == SQL_CONCUR_READ_ONLY )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("Resultset is read-only.") ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     /*!
         \internal
@@ -485,7 +485,7 @@
     if ( !isBuffered() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("doLast() not supported for unbuffered resultset") ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     qulonglong nRows = 0;
     getRows( &nRows );
@@ -528,7 +528,7 @@
     if ( getState() < STATE_EXECUTED )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010 ) );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     if ( isBuffered() )
     {
@@ -652,7 +652,7 @@
     if ( !isValidRow() )
         MYODBCDbgReturn( doLast() );
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     if ( !isValidRow( nRow - 1 ) )
     {
@@ -704,7 +704,7 @@
             MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("doSkip() not fully supported when unbuffered resultset") ) );
     }
 
-    resultGetData.doClear();
+    stateGetData.doClear();
 
     if ( isBuffered() )
     {
@@ -816,7 +816,7 @@
                 MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000,
mysql_stmt_errno( pstm ), mysql_stmt_error( pstm ) ) );
             nRow = 0;
             setRowsAffected( 0 );
-            resultGetData.doClear();
+            stateGetData.doClear();
             setState( STATE_PREPARED );
             break;
 

Modified: trunk/SDK/MYSQLPlus/Library/MStatement.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2006-11-23 15:36:13 UTC (rev 687)
@@ -4520,6 +4520,15 @@
     */
     pDiagnostic->doClear();
 
+    /*!
+        \internal ODBC RULE
+
+        An application can use SQLPutData to send data in parts only when sending
character 
+        C data to a column with a character, binary, or data source+        when sending binary C data to a column with a character, binary, or data 
+        source+    */
+
     MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_IM001 ) );
 }
 

Modified: trunk/connector-odbc.vpj
===================================================================
--- trunk/connector-odbc.vpj	2006-11-21 00:32:38 UTC (rev 686)
+++ trunk/connector-odbc.vpj	2006-11-23 15:36:13 UTC (rev 687)
@@ -22,7 +22,7 @@
 				CaptureOutputWith="ProcessBuffer"
 				SaveOption="SaveWorkspaceFiles"
 				RunFromDir="%rw">
-				<Exec/>
+				<Exec CmdLine="make"/>
 			</Target>
 			<Target
 				Name="Rebuild"

Thread
Connector/ODBC 5 commit: r687 - in trunk: . SDK/MYSQLPlus/Librarypharvey23 Nov