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/Project | pharvey | 15 May |