List:Commits« Previous MessageNext Message »
From:pharvey Date:May 15 2006 8:39pm
Subject:Connector/ODBC 5 commit: r242 - MYSQLPlus/MYSQLPlusLib doc/Project
View as plain text  
Modified:
   MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.h
   MYSQLPlus/MYSQLPlusLib/MResult.cpp
   MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
   MYSQLPlus/MYSQLPlusLib/MResultPlus.h
   MYSQLPlus/MYSQLPlusLib/MResultRes.h
   MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp
   MYSQLPlus/MYSQLPlusLib/MResultStmt.h
   MYSQLPlus/MYSQLPlusLib/MStatement.cpp
   doc/Project/SituationReport-20060519.ods
Log:


Modified: MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.h	2006-05-15 17:51:52 UTC (rev 241)
+++ MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.h	2006-05-15 20:39:22 UTC (rev 242)
@@ -31,6 +31,7 @@
 class MDescriptorRecord : public QObject
 {
     friend class MDescriptor;
+    friend class MResult;
     friend class MResultStmt;
 //    friend class MResultRes;
 public:

Modified: MYSQLPlus/MYSQLPlusLib/MResult.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResult.cpp	2006-05-15 17:51:52 UTC (rev 241)
+++ MYSQLPlus/MYSQLPlusLib/MResult.cpp	2006-05-15 20:39:22 UTC (rev 242)
@@ -78,7 +78,7 @@
     MYODBCDbgEnter();
 
     QVariant    variantData;
-    SQLRETURN   nReturn = getData( nColumnNumber, &variantData );
+    SQLRETURN   nReturn = getData( nColumnNumber, variantData );
     if ( !SQL_SUCCEEDED(nReturn) )
         MYODBCDbgReturn( nReturn );
 
@@ -249,11 +249,48 @@
             break;
         case SQL_C_NUMERIC:
             {
-                SQL_NUMERIC_STRUCT *p = (SQL_NUMERIC_STRUCT *)pTargetValue;
+                SQL_NUMERIC_STRUCT *pNumericStruct      = (SQL_NUMERIC_STRUCT
*)pTargetValue;
+                MDescriptorRecord * pDescriptorRecord   = getImpRowDesc()->getRecord(
nColumn );
 
-                if ( !variantData.canConvert<QDateTime>() ) 
-                    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07006
) );
-                QDateTime t     = variantData.toDateTime();
+                /*!
+                    \internal ODBC RULE
+
+                    The precision and scale fields of the SQL_C_NUMERIC data type are
never used for input from 
+                    an application, only for output from the driver to the application.
When the driver writes a 
+                    numeric value into the SQL_NUMERIC_STRUCT, it will use its own
driver-specific default as the 
+                    value for the precision field, and it will use the value in the
SQL_DESC_SCALE field of the 
+                    application descriptor (which defaults to 0) for the scale field. An
application can provide 
+                    its own values for precision and scale by setting the
SQL_DESC_PRECISION and SQL_DESC_SCALE 
+                    fields of the application descriptor.
+                */
+                pNumericStruct->precision   = pDescriptorRecord->getPrecision();
+                pNumericStruct->scale       = pDescriptorRecord->getScale();
+
+                /*!
+                    \internal ODBC RULE
+
+                    The sign field is 1 if positive, 0 if negative.
+                */
+                if ( pDescriptorRecord->getUnsigned() )
+                    pNumericStruct->sign = 1;
+                else
+                    pNumericStruct->sign = ?;
+
+                /*!
+                    \internal ODBC RULE
+
+                    A number is stored in the val field of the SQL_NUMERIC_STRUCT
structure as a scaled integer, 
+                    in little endian mode (the leftmost byte being the least-significant
byte). For example, the 
+                    number 10.001 base 10, with a scale of 4, is scaled to an integer of
100010. Because this is 
+                    186AA in hexadecimal format, the value in SQL_NUMERIC_STRUCT would be
"AA 86 01 00 00 ... 00", 
+                    with the number of bytes defined by the SQL_MAX_NUMERIC_LEN #define.
+                */
+                pNumericStruct->val = ?;
+
+                switch ()
+                {
+                }
+
                 if ( pnLength ) *pnLength = sizeof(SQL_NUMERIC_STRUCT);
             }
             break;

Modified: MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-05-15 17:51:52 UTC (rev 241)
+++ MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-05-15 20:39:22 UTC (rev 242)
@@ -88,7 +88,7 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
-SQLRETURN MResultPlus::getData( uint nColumn, QVariant &variantData )
+SQLRETURN MResultPlus::getData( SQLUSMALLINT nColumn, QVariant &variantData )
 {
     MYODBCDbgEnter();
 

Modified: MYSQLPlus/MYSQLPlusLib/MResultPlus.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-05-15 17:51:52 UTC (rev 241)
+++ MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-05-15 20:39:22 UTC (rev 242)
@@ -50,7 +50,7 @@
 
     /* getters */
     SQLRETURN getColumns( uint *pnColumns );
-    SQLRETURN getData( uint nColumn, QVariant &variantData );
+    SQLRETURN getData( SQLUSMALLINT nColumn, QVariant &variantData );
     SQLRETURN getRow( qulonglong *pnRow );
     SQLRETURN getRows( qulonglong *pnRows );
 

Modified: MYSQLPlus/MYSQLPlusLib/MResultRes.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultRes.h	2006-05-15 17:51:52 UTC (rev 241)
+++ MYSQLPlus/MYSQLPlusLib/MResultRes.h	2006-05-15 20:39:22 UTC (rev 242)
@@ -27,7 +27,7 @@
     SQLRETURN setRow( qulonglong nRow );
 
     SQLRETURN getColumns( uint *pnColumns );
-    SQLRETURN getData( uint nColumn, QVariant &variantData );
+    SQLRETURN getData( SQLUSMALLINT nColumn, QVariant &variantData );
     SQLRETURN getRow( qulonglong *pnRow );
     SQLRETURN getRows( qulonglong *pnRows );
 

Modified: MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp	2006-05-15 17:51:52 UTC (rev 241)
+++ MYSQLPlus/MYSQLPlusLib/MResultStmt.cpp	2006-05-15 20:39:22 UTC (rev 242)
@@ -203,7 +203,7 @@
             doBindCol
             doRefresh
 */
-SQLRETURN MResultStmt::getData( uint nColumn, QVariant &variantData )
+SQLRETURN MResultStmt::getData( SQLUSMALLINT nColumn, QVariant &variantData )
 {
     MYODBCDbgEnter();
 

Modified: MYSQLPlus/MYSQLPlusLib/MResultStmt.h
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MResultStmt.h	2006-05-15 17:51:52 UTC (rev 241)
+++ MYSQLPlus/MYSQLPlusLib/MResultStmt.h	2006-05-15 20:39:22 UTC (rev 242)
@@ -56,7 +56,7 @@
     SQLRETURN setRow( qulonglong nRow );
 
     SQLRETURN getColumns( uint *pnColumns );
-    SQLRETURN getData( uint nColumn, QVariant &variantData );
+    SQLRETURN getData( SQLUSMALLINT nColumn, QVariant &variantData );
     SQLRETURN getRow( qulonglong *pnRow );
     SQLRETURN getRows( qulonglong *pnRows );
 

Modified: MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-05-15 17:51:52 UTC (rev 241)
+++ MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-05-15 20:39:22 UTC (rev 242)
@@ -427,7 +427,32 @@
     // if ( nColumnNumber == 0 && nBufferLength < 4 && ODBCVER <
0x0300 && ODBCVER >= 0x0200 )
     //    MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY090 ) );
 
-    MYODBCDbgReturn( pResult->getData( nColumnNumber, nTargetType, pTargetValue,
nBufferLength, pnStrLenOrInd ) );
+    /* get data */
+    SQLINTEGER  nLength;
+    SQLINTEGER  nIndicator;
+    SQLRETURN   nReturn = pResult->getData( nColumnNumber, nTargetType, pTargetValue,
nBufferLength, &nLength, &nIndicator );
+
+    if ( !SQL_SUCCEEDED(nReturn) )
+        MYODBCDbgReturn( nReturn );
+
+    /* merge nLength and nIndicator */
+    if ( pnStrLenOrInd )
+    { 
+        if ( nIndicator == SQL_NULL_DATA || nIndicator == SQL_NO_TOTAL )
+            *pnStrLenOrInd = nIndicator;
+        else
+            *pnStrLenOrInd = nLength;
+    }
+    /*!
+        \internal ODBC RULE
+
+        If the data is NULL and StrLen_or_IndPtr was a null pointer, SQLGetData returns
SQLSTATE 22002 
+        (Indicator variable required but not supplied).
+    */
+    else if ( nIndicator != SQL_NULL_DATA )
+        MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_22002 ) );
+
+    MYODBCDbgReturn( nReturn );
 }
 
 SQLRETURN MStatement::getDiagField( SQLSMALLINT nRecNumber, SQLSMALLINT nDiagIdentifier,
SQLPOINTER pDiagInfo, SQLSMALLINT nBufferLength, SQLSMALLINT *pnStringLength )

Modified: doc/Project/SituationReport-20060519.ods
===================================================================
(Binary files differ)

Thread
Connector/ODBC 5 commit: r242 - MYSQLPlus/MYSQLPlusLib doc/Projectpharvey15 May