Modified:
trunk/MYODBCC/MYODBCCLib/MYODBCC.cpp
trunk/MYODBCC/include/MYODBCC.h
trunk/MYSQLPlus/MYSQLPlusLib/MResult.cpp
trunk/MYSQLPlus/MYSQLPlusLib/MResult.h
trunk/MYSQLPlus/MYSQLPlusLib/MResultRes.cpp
Log:
- work on SQLBindParameter
Modified: trunk/MYODBCC/MYODBCCLib/MYODBCC.cpp
===================================================================
--- trunk/MYODBCC/MYODBCCLib/MYODBCC.cpp 2006-06-12 08:00:09 UTC (rev 326)
+++ trunk/MYODBCC/MYODBCCLib/MYODBCC.cpp 2006-06-12 22:45:59 UTC (rev 327)
@@ -2181,6 +2181,49 @@
return false;
}
+BOOLEAN MYODBCC::isCharTypeSQL( SQLSMALLINT nType )
+{
+ switch ( nType )
+ {
+ case SQL_CHAR:
+ case SQL_VARCHAR:
+ case SQL_LONGVARCHAR:
+ case SQL_WCHAR:
+ case SQL_WVARCHAR:
+ case SQL_WLONGVARCHAR:
+ return true;
+ }
+
+ return false;
+}
+
+BOOLEAN MYODBCC::isBinTypeSQL( SQLSMALLINT nType )
+{
+ switch ( nType )
+ {
+ case SQL_BINARY:
+ case SQL_VARBINARY:
+ case SQL_LONGVARBINARY:
+ return true;
+ }
+
+ return false;
+}
+
+BOOLEAN MYODBCC::isDateTimeTypeSQL( SQLSMALLINT nType )
+{
+ switch ( nType )
+ {
+ case SQL_TYPE_DATE:
+ case SQL_TYPE_TIME:
+ case SQL_TYPE_TIMESTAMP:
+ return true;
+ }
+
+ return false;
+}
+
+
BOOLEAN MYODBCC::isCharTypeC( SQLSMALLINT nType )
{
switch ( nType )
@@ -2203,3 +2246,26 @@
return false;
}
+BOOLEAN MYODBCC::isQuoteNeededSQL( SQLSMALLINT nType )
+{
+ switch ( nType )
+ {
+ case SQL_CHAR:
+ case SQL_VARCHAR:
+ case SQL_LONGVARCHAR:
+ case SQL_WCHAR:
+ case SQL_WVARCHAR:
+ case SQL_WLONGVARCHAR:
+ case SQL_VARBINARY:
+ case SQL_LONGVARBINARY:
+ case SQL_TYPE_DATE:
+ case SQL_TYPE_TIME:
+ case SQL_TYPE_TIMESTAMP:
+ case SQL_GUID:
+ return true;
+ }
+
+ return false;
+}
+
+
Modified: trunk/MYODBCC/include/MYODBCC.h
===================================================================
--- trunk/MYODBCC/include/MYODBCC.h 2006-06-12 08:00:09 UTC (rev 326)
+++ trunk/MYODBCC/include/MYODBCC.h 2006-06-12 22:45:59 UTC (rev 327)
@@ -267,8 +267,12 @@
static BOOLEAN isIntervalConciseTypeSQL( SQLSMALLINT nType );
static BOOLEAN isDateTimeCode( SQLSMALLINT nCode );
static BOOLEAN isIntervalCode( SQLSMALLINT nCode );
+ static BOOLEAN isCharTypeSQL( SQLSMALLINT nType );
+ static BOOLEAN isBinTypeSQL( SQLSMALLINT nType );
+ static BOOLEAN isDateTimeTypeSQL( SQLSMALLINT nType );
static BOOLEAN isCharTypeC( SQLSMALLINT nType );
static BOOLEAN isBinTypeC( SQLSMALLINT nType );
+ static BOOLEAN isQuoteNeededSQL( SQLSMALLINT nType );
};
#endif
Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResult.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResult.cpp 2006-06-12 08:00:09 UTC (rev 326)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResult.cpp 2006-06-12 22:45:59 UTC (rev 327)
@@ -2442,6 +2442,260 @@
MYODBCDbgReturn( SQL_ERROR );
}
+SQLRETURN MResult::fromC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+
+ switch ( pResultPutData->pDescriptorRecordIPD->getConciseType() )
+ {
+ case SQL_CHAR:
+ case SQL_VARCHAR:
+ case SQL_LONGVARCHAR:
+ case SQL_WCHAR:
+ case SQL_WVARCHAR:
+ case SQL_WLONGVARCHAR:
+ case SQL_DECIMAL:
+ case SQL_NUMERIC:
+ case SQL_SMALLINT:
+ case SQL_INTEGER:
+ case SQL_REAL:
+ case SQL_FLOAT:
+ case SQL_DOUBLE:
+ case SQL_BIT:
+ case SQL_TINYINT:
+ case SQL_BIGINT:
+ case SQL_BINARY:
+ case SQL_VARBINARY:
+ case SQL_LONGVARBINARY:
+ case SQL_TYPE_DATE:
+ case SQL_TYPE_TIME:
+ case SQL_TYPE_TIMESTAMP:
+ case SQL_INTERVAL_MONTH:
+ case SQL_INTERVAL_YEAR:
+ case SQL_INTERVAL_YEAR_TO_MONTH:
+ case SQL_INTERVAL_DAY:
+ case SQL_INTERVAL_HOUR:
+ case SQL_INTERVAL_MINUTE:
+ case SQL_INTERVAL_SECOND:
+ case SQL_INTERVAL_DAY_TO_HOUR:
+ case SQL_INTERVAL_DAY_TO_MINUTE:
+ case SQL_INTERVAL_DAY_TO_SECOND:
+ case SQL_INTERVAL_HOUR_TO_MINUTE:
+ case SQL_INTERVAL_HOUR_TO_SECOND:
+ case SQL_INTERVAL_MINUTE_TO_SECOND:
+ case SQL_GUID:
+ }
+
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+
+SQLRETURN MResult::fromCharC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+
+SQLRETURN MResult::fromWCharC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromSShortC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromUShortC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromSLongC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromULongC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromFloatC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromDoubleC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromBitC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromSTinyIntC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromUTinyIntC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromSBigIntC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromUBigIntC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromBinaryC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromXmlC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromVarBookmarkC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromTypeDateC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromTypeTimeC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromTypeTimestampC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromNumericC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromGuidC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalMonthC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalYearC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalYearToMonthC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalDayC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalHourC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalMinuteC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalSecondC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalDayToHourC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalDayToMinuteC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalDayToSecondC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalHourToMinuteC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalHourToSecondC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+SQLRETURN MResult::fromIntervalMinuteToSecondC( MResultPutData *pResultPutData )
+{
+ MYODBCDbgEnter();
+ MYODBCDbgReturn( SQL_ERROR );
+}
+
+
/*!
\brief Appends an IRD record describing the given field.
Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResult.h
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResult.h 2006-06-12 08:00:09 UTC (rev 326)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResult.h 2006-06-12 22:45:59 UTC (rev 327)
@@ -50,6 +50,11 @@
/*!
\brief Data to support doPutData.
+
+ doPutData can be used to supply data-at-execution data for two uses:
+
+ - 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
{
@@ -58,7 +63,7 @@
void doClear();
- QVariant variantData; /*!< parameter data (may be
partially full depending upon state) */
+ QVariant variantData; /*!< data (may be partially full
depending upon state) */
MDescriptorRecordIPD * pDescriptorRecordIPD; /*!< bound parameter
*/
};
@@ -251,6 +256,7 @@
"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 fromCharC( MResultPutData *pResultPutData );
/*!< SQL_C_CHAR SQLCHAR * unsigned char * */
SQLRETURN fromWCharC( MResultPutData *pResultPutData );
/*!< SQL_C_WCHAR SQLWCHAR * wchar_t * */
SQLRETURN fromSShortC( MResultPutData *pResultPutData );
/*!< SQL_C_SSHORT SQLSMALLINT short int */
@@ -287,26 +293,6 @@
SQLRETURN fromIntervalMinuteToSecondC( MResultPutData *pResultPutData );
/*@}*/
- /*!
- \name to*SQL
-
- \sa
-
- "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 toCharacterSQL( MResultPutData *pResultPutData );
- SQLRETURN toNumericSQL( MResultPutData *pResultPutData );
- SQLRETURN toBitSQL( MResultPutData *pResultPutData );
- SQLRETURN toBinarySQL( MResultPutData *pResultPutData );
- SQLRETURN toDateSQL( MResultPutData *pResultPutData );
- SQLRETURN toGuidSQL( MResultPutData *pResultPutData );
- SQLRETURN toTimeSQL( MResultPutData *pResultPutData );
- SQLRETURN toTimeStampSQL( MResultPutData *pResultPutData );
- SQLRETURN toIntervalYearMonthSQL( MResultPutData *pResultPutData );
- SQLRETURN toIntervalDayTimeSQL( MResultPutData *pResultPutData );
- /*@}*/
-
/* doers */
virtual SQLRETURN doStateRollBack( STATE nState ) = 0;
SQLRETURN doLoadMetaDataField( unsigned int nField, MYSQL_FIELD *pField,
MDescriptorIRD *pDescriptor );
Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResultRes.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResultRes.cpp 2006-06-12 08:00:09 UTC (rev 326)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResultRes.cpp 2006-06-12 22:45:59 UTC (rev 327)
@@ -432,7 +432,9 @@
if ( getState() > STATE_PREPARED )
doStateRollBack( STATE_PREPARED );
- MDescriptor *pDescriptor = getImpParamDesc();
+ MDescriptorIPD *pDescriptorIPD = (MDescriptorIPD*)getImpParamDesc();
+ SQLRETURN nReturn = SQL_SUCCESS;
+ SQLRETURN nReturnInternal;
/*!
\internal ODBC RULE
@@ -451,7 +453,7 @@
In other words; all parameters markers must have bound data.
*/
- if ( pDescriptor->count() < nParameterMarkers )
+ if ( pDescriptorIPD->count() < nParameterMarkers )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07002 ) );
/*!
@@ -464,7 +466,7 @@
*/
/*!
- \internal MYODBNC RULE
+ \internal MYODBC RULE
A statement never starts with a parameter marker.
*/
@@ -474,9 +476,26 @@
{
for ( int nParameter = 1; nParameter <= nParameterMarkers; nParameter++ )
{
- MDescriptorRecord * pDescriptorRecord = pDescriptor->getRecord( nParameter
);
+ resultPutData.doClear();
+ resultPutData.pDescriptorRecordIPD =
(MDescriptorRecordIPD*)pDescriptorIPD->getRecord( nParameter );
- stringStatement +=
+ nReturnInternal = fromC( &resultPutData );
+ switch ( nReturnInternal )
+ {
+ case SQL_SUCCESS;
+ break;
+ case SQL_SUCCESS_WITH_INFO:
+ nReturn = nReturnInternal;
+ break;
+ case SQL_ERROR:
+ default:
+ doStateRollBack( STATE_INITIALIZED );
+ MYODBCDbgReturn( nReturnInternal );
+ }
+
+ stringStatement += resultPutData.variantData.toString();
+ if ( stringlistStatement.count() > nParameter )
+ stringStatement += stringlistStatement.at( nParameter );
}
}
@@ -495,11 +514,18 @@
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
/* get result-set meta-data */
- SQLRETURN nReturn = doLoadMetaData();
- if ( !SQL_SUCCEEDED( nReturn ) )
+ nReturnInternal = doLoadMetaData();
+ switch ( nReturnInternal )
{
- doStateRollBack( STATE_INITIALIZED );
- MYODBCDbgReturn( nReturn );
+ case SQL_SUCCESS;
+ break;
+ case SQL_SUCCESS_WITH_INFO:
+ nReturn = nReturnInternal;
+ break;
+ case SQL_ERROR:
+ default:
+ doStateRollBack( STATE_INITIALIZED );
+ MYODBCDbgReturn( nReturnInternal );
}
/*!
@@ -534,7 +560,7 @@
getDiagnostic()->setRowCount( nRows );
break;
case STATEMENT_TYPE_NULL:
- getDiagnostic()->doAppend( MDiagnostic::DIA_01000, 0,
tr("STATEMENT_TYPE_NULL should not happen here") );
+ nReturn = getDiagnostic()->doAppend( MDiagnostic::DIA_01000, 0,
tr("STATEMENT_TYPE_NULL should not happen here") );
case STATEMENT_TYPE_MULTI:
case STATEMENT_TYPE_OTHER:
setRowsAffected( mysql_affected_rows( getMySQL() ) );
@@ -544,7 +570,7 @@
setState( STATE_EXECUTED );
- MYODBCDbgReturn( SQL_SUCCESS );
+ MYODBCDbgReturn( nReturn );
}
/*!
| Thread |
|---|
| • Connector/ODBC 5 commit: r327 - in trunk: MYODBCC/MYODBCCLib MYODBCC/include MYSQLPlus/MYSQLPlusLib | pharvey | 13 Jun |