List:Commits« Previous MessageNext Message »
From:jbalint Date:February 7 2007 3:03am
Subject:Connector/ODBC 5 commit: r787 - trunk/SDK/MYSQLPlus/Library
View as plain text  
Modified:
   trunk/SDK/MYSQLPlus/Library/MDescriptorRecord.cpp
   trunk/SDK/MYSQLPlus/Library/MResult.cpp
   trunk/SDK/MYSQLPlus/Library/MResult_data_toC.cpp
   trunk/SDK/MYSQLPlus/Library/MStatement.cpp
Log:
Changed default nType of MDescriptorRecord to SQL_VARCHAR so SQLDescribeParam() would
work.
Fixed to MResult.doRefresh() to allow a NULL strlen/ind ptr and fixed assignments to use
null-safe set macro.
Fixed MStatement.doBindCol() to still set the ARD's SQL_DESC_LENGTH even on SQL_C_DEFAULT.
Fixed MStatement.doBindParameter() to use SQL_VARCHAR if SQL_DEFAULT is given.
Fixed MStatement.doNumParams() to all being called after it's prepared.
Fixed MStatement.doPrepare() to allocate the IPDs up front so we can call SQLNumParams().
Fixed MStatement.doDescribeParam() to properly propagate diagnostics into the statement
instead of the descriptor.

Modified: trunk/SDK/MYSQLPlus/Library/MDescriptorRecord.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MDescriptorRecord.cpp	2007-02-02 22:58:01 UTC (rev 786)
+++ trunk/SDK/MYSQLPlus/Library/MDescriptorRecord.cpp	2007-02-07 02:03:32 UTC (rev 787)
@@ -24,8 +24,8 @@
     pDataPtr            = NULL;
     pnIndicatorPtr      = NULL;
     pnOctetLengthPtr    = NULL;
-    nParameterType       = SQL_PARAM_INPUT;
-    nType               = SQL_C_DEFAULT;
+    nParameterType      = SQL_PARAM_INPUT;
+    nType               = SQL_VARCHAR;
 
     MYODBCDbgReturn2();
 }

Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp	2007-02-02 22:58:01 UTC (rev 786)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp	2007-02-07 02:03:32 UTC (rev 787)
@@ -1530,7 +1530,8 @@
             SQLINTEGER *pnIndicatorPtr  = pAppRowDescRec->getIndicatorPtr();
 
             if ( (pnOctetLengthPtr && *pnOctetLengthPtr != SQL_COLUMN_IGNORE) ||
-                 (pnIndicatorPtr && *pnIndicatorPtr != SQL_COLUMN_IGNORE) )
+                 (pnIndicatorPtr && *pnIndicatorPtr != SQL_COLUMN_IGNORE) || 
+                !(pnOctetLengthPtr || pnIndicatorPtr) )
             {
                 SQLRETURN nReturn = MResult::getData( nRowsIndex,
                                                       nColumn, 

Modified: trunk/SDK/MYSQLPlus/Library/MResult_data_toC.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult_data_toC.cpp	2007-02-02 22:58:01 UTC (rev 786)
+++ trunk/SDK/MYSQLPlus/Library/MResult_data_toC.cpp	2007-02-07 02:03:32 UTC (rev 787)
@@ -204,7 +204,7 @@
         stateGetData.pnIndicator           = pnIndicator;
         stateGetData.pTarget               = pTarget;
         stateGetData.nRow                  = nRowsIndex;
-        *stateGetData.pnIndicator          = stateGetData.nIndicator;
+        MYODBCCSet( stateGetData.pnIndicator, stateGetData.nIndicator );
 
         /* get indicator value; no need to process further if we are null */
         if ( vectorRows[stateGetData.nRow][stateGetData.nColumn - 1].isNull() )
@@ -215,7 +215,7 @@
 
             if ( stateGetData.pnIndicator ) 
             {
-                *stateGetData.pnIndicator = stateGetData.nIndicator;
+                MYODBCCSet( stateGetData.pnIndicator, stateGetData.nIndicator );
                 MYODBCDbgReturn( SQL_SUCCESS );
             }
             else

Modified: trunk/SDK/MYSQLPlus/Library/MStatement.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2007-02-02 22:58:01 UTC (rev 786)
+++ trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2007-02-07 02:03:32 UTC (rev 787)
@@ -718,7 +718,10 @@
         
         We use defaults for everything except; char and binary. 
     */
-    if ( nTargetType == SQL_C_CHAR || nTargetType == SQL_C_BINARY )
+    /*! \todo what are the effects of setting this....? */
+    if ( nTargetType == SQL_C_CHAR ||
+            nTargetType == SQL_C_BINARY ||
+            nTargetType == SQL_C_DEFAULT)
     {
         nReturn = pAppRowDesc->setDescField( nColumnNumber, SQL_DESC_LENGTH,
(SQLPOINTER)nBufferLength, SQL_IS_INTEGER );
         switch ( nReturn )
@@ -898,6 +901,12 @@
 #endif
     }
 
+    /* if we are using a default db-type make it a string */
+    if ( nParameterType == SQL_DEFAULT)
+    {
+        nParameterType = SQL_VARCHAR;
+    }
+
     /*!
         \internal ODBC RULE (DM)
 
@@ -1848,6 +1857,8 @@
 {
     MYODBCDbgEnter();
 
+    SQLRETURN rc;
+
     /*!
         \internal ODBC RULE
 
@@ -1927,7 +1938,21 @@
     if ( pnNullablePtr )
         *pnNullablePtr = pDescriptorRecord->getNullable();
 
-    MYODBCDbgReturn( pDescriptorRecord->getColumnSizeSQL( pnParameterSizePtr,
pnDecimalDigitsPtr ) );
+    /*!
+        \internal
+        \note
+
+        We redirect diagnostic messages in MDescriptor to our diagnostic. This is
imperfect ...
+
+        !!! WE MUST TURN THIS OFF WHEN WE ARE DONE !!!
+    */
+    pDescriptor->setDiagnostic( getDiagnostic() );
+
+    rc = pDescriptorRecord->getColumnSizeSQL( pnParameterSizePtr, pnDecimalDigitsPtr
);
+
+    pImpParamDesc->setDiagnostic( NULL );
+
+    MYODBCDbgReturn( rc );
 }
 
 SQLRETURN MStatement::doExecDirect( SQLWCHAR *psStatementText, SQLINTEGER nTextLength )
@@ -2649,7 +2674,7 @@
         The function was called prior to calling SQLPrepare, SQLExecute, or a catalog
function on 
         the statement handle.
     */
-    if ( !isExecuted() )
+    if ( !isPrepared() )
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY010 ) );
 
     /*!
@@ -2934,6 +2959,9 @@
         goto doPrepareExit1;
     }
 
+    /* Allocate the IPDs */
+    pImpParamDesc->setCount( pCommands->getParameterMarkerCount() );
+
     /* Prepare for first MCommand... */
     pCommand = pCommands->getCommandCurrent();
     nReturn = pCommand->getResult()->doPrepare();

Thread
Connector/ODBC 5 commit: r787 - trunk/SDK/MYSQLPlus/Libraryjbalint7 Feb