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/Library | pharvey | 23 Nov |