List:Commits« Previous MessageNext Message »
From:pharvey Date:June 12 2006 10:46pm
Subject:Connector/ODBC 5 commit: r327 - in trunk: MYODBCC/MYODBCCLib MYODBCC/include MYSQLPlus/MYSQLPlusLib
View as plain text  
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/MYSQLPlusLibpharvey13 Jun