List:Commits« Previous MessageNext Message »
From:pharvey Date:November 5 2006 12:05pm
Subject:Connector/ODBC 5 commit: r653 - in trunk/SDK: C/Library C/include Dbg/include MYSQLPlus/Library
View as plain text  
Modified:
   trunk/SDK/C/Library/MYODBCC.cpp
   trunk/SDK/C/include/MYODBCC.h
   trunk/SDK/Dbg/include/MYODBCDbg.h
   trunk/SDK/MYSQLPlus/Library/MResult.cpp
   trunk/SDK/MYSQLPlus/Library/MResult.h
   trunk/SDK/MYSQLPlus/Library/MStatement.cpp
Log:
FIX: SQLBindParameter now handles SQL_C_DEFAULT.

Modified: trunk/SDK/C/Library/MYODBCC.cpp
===================================================================
--- trunk/SDK/C/Library/MYODBCC.cpp	2006-11-04 23:42:03 UTC (rev 652)
+++ trunk/SDK/C/Library/MYODBCC.cpp	2006-11-05 12:05:55 UTC (rev 653)
@@ -2060,6 +2060,153 @@
     return "unknown";
 }
 
+/*!
+    \brief  Returns the SQL_C_* type for the given SQL type.
+
+            This contains the rules for getting the C type when SQL_C_DEFAULT has been
provided.
+*/
+SQLSMALLINT MYODBCC::getCDefault( SQLINTEGER nODBCVersion, SQLSMALLINT nSQLType,
SQLSMALLINT nUnsigned )
+{
+    /*!
+        \internal ODBC RULE
+
+        We use the translation table from the spec under "Converting Data from SQL to C
Data Types".
+
+        \note
+
+        We do not rely on SQL_C_* values synching up with SQL_* values.
+
+        \sa
+
+       
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_data_from_sql_to_c_data_types.asp
+    */
+    switch ( nSQLType )
+    {
+        case SQL_CHAR:
+        case SQL_VARCHAR:
+        case SQL_LONGVARCHAR:
+            return SQL_C_CHAR;
+
+        case SQL_WCHAR:
+        case SQL_WVARCHAR:
+        case SQL_WLONGVARCHAR:
+            return SQL_C_WCHAR;
+
+        case SQL_DECIMAL:
+        case SQL_NUMERIC:
+            /*!
+                \internal ODBC RULE
+
+                This conversion is SQL_C_CHAR, not SQL_C_NUMERIC - as one may otherwise
expect.
+            */
+            return SQL_C_CHAR;
+
+        case SQL_BIT:
+            return SQL_C_BIT;
+
+        case SQL_TINYINT:
+            if ( nUnsigned == SQL_TRUE )
+                return SQL_C_UTINYINT;
+            return SQL_C_STINYINT;
+
+        case SQL_SMALLINT:
+            if ( nUnsigned == SQL_TRUE )
+                return SQL_C_USHORT;
+            return SQL_C_SSHORT;
+
+        case SQL_INTEGER:
+            if ( nUnsigned == SQL_TRUE )
+                return SQL_C_ULONG;
+            return SQL_C_SLONG;
+
+        case SQL_BIGINT:
+            if ( nUnsigned == SQL_TRUE )
+                return SQL_C_UBIGINT;
+            return SQL_C_SBIGINT;
+
+        case SQL_REAL:
+            return SQL_C_FLOAT;
+
+        case SQL_FLOAT:
+            return SQL_C_DOUBLE;
+
+        case SQL_DOUBLE:
+            return SQL_C_DOUBLE;
+
+        case SQL_BINARY:
+        case SQL_VARBINARY:
+        case SQL_LONGVARBINARY:
+            return SQL_C_BINARY;
+
+        case SQL_TYPE_DATE:
+            if ( nODBCVersion == SQL_OV_ODBC2 )
+                return SQL_C_DATE;
+
+            return SQL_C_TYPE_DATE;
+
+        case SQL_TYPE_TIME:
+            if ( nODBCVersion == SQL_OV_ODBC2 )
+                return SQL_C_TIME;
+
+            return SQL_C_TYPE_TIME;
+
+        case SQL_TYPE_TIMESTAMP:
+            if ( nODBCVersion == SQL_OV_ODBC2 )
+                return SQL_C_TIMESTAMP;
+
+            return SQL_C_TYPE_TIMESTAMP;
+
+        case SQL_INTERVAL_MONTH:
+            return SQL_C_INTERVAL_MONTH;
+
+        case SQL_INTERVAL_YEAR:
+            return SQL_C_INTERVAL_YEAR;
+
+        case SQL_INTERVAL_YEAR_TO_MONTH:
+            return SQL_C_INTERVAL_YEAR_TO_MONTH;
+
+        case SQL_INTERVAL_DAY:
+            return SQL_C_INTERVAL_DAY;
+
+        case SQL_INTERVAL_HOUR:
+            return SQL_C_INTERVAL_HOUR;
+
+        case SQL_INTERVAL_MINUTE:
+            return SQL_C_INTERVAL_MINUTE;
+
+        case SQL_INTERVAL_SECOND:
+            return SQL_C_INTERVAL_SECOND;
+
+        case SQL_INTERVAL_DAY_TO_HOUR:
+            return SQL_C_INTERVAL_DAY_TO_HOUR;
+
+        case SQL_INTERVAL_DAY_TO_MINUTE:
+            return SQL_C_INTERVAL_DAY_TO_MINUTE;
+
+        case SQL_INTERVAL_DAY_TO_SECOND:
+            return SQL_C_INTERVAL_DAY_TO_SECOND;
+
+        case SQL_INTERVAL_HOUR_TO_MINUTE:
+            return SQL_C_INTERVAL_HOUR_TO_MINUTE;
+
+        case SQL_INTERVAL_HOUR_TO_SECOND:
+            return SQL_C_INTERVAL_HOUR_TO_SECOND;
+
+        case SQL_INTERVAL_MINUTE_TO_SECOND:
+            return SQL_C_INTERVAL_MINUTE_TO_SECOND;
+
+        case SQL_GUID:
+            /*!
+                \internal ODBC RULE
+
+                This conversion is SQL_C_CHAR, not SQL_C_GUID - as one may otherwise
expect.
+            */
+            return SQL_C_CHAR;
+    }
+
+    return SQL_C_CHAR;
+}
+
 /* this is a temp solution to the sudden realization that findChildren() returns all
objects - probably because we do not use Q_OBJECT */
 QList<QObject*> MYODBCC::getChildren( const QObject *pObject, const QString
&stringObjectName, bool bStartsWith )
 {

Modified: trunk/SDK/C/include/MYODBCC.h
===================================================================
--- trunk/SDK/C/include/MYODBCC.h	2006-11-04 23:42:03 UTC (rev 652)
+++ trunk/SDK/C/include/MYODBCC.h	2006-11-05 12:05:55 UTC (rev 653)
@@ -552,6 +552,8 @@
     static QString getSimulateCursorString( SQLUINTEGER nSimulateCursor );
     static QString getUseBookmarksString( SQLUINTEGER nUseBookmarks );
 
+    static SQLSMALLINT getCDefault( SQLINTEGER nODBCVersion, SQLSMALLINT nSQLType,
SQLSMALLINT nUnsigned = SQL_FALSE );
+
     static QList<QObject*> getChildren( const QObject *pObject, const QString
&stringObjectName, bool bStartsWith = false );
     
     static void *  doMemCpy( void *pDest, const void *pSrc, size_t nBytes );

Modified: trunk/SDK/Dbg/include/MYODBCDbg.h
===================================================================
--- trunk/SDK/Dbg/include/MYODBCDbg.h	2006-11-04 23:42:03 UTC (rev 652)
+++ trunk/SDK/Dbg/include/MYODBCDbg.h	2006-11-05 12:05:55 UTC (rev 653)
@@ -188,9 +188,7 @@
 {\
 if ( gpMYODBCDbg )\
 {\
-    QString stringMessage_;\
-    QTextStream( &stringMessage_ ) << A;\
-    gpMYODBCDbg->doReturn( __FILE__, __LINE__, __FUNCTION__, stringMessage_ );\
+    gpMYODBCDbg->doReturn( __FILE__, __LINE__, __FUNCTION__, QString( "%1" ).arg( A )
);\
 }\
 return ( A );\
 }

Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-11-04 23:42:03 UTC (rev 652)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-11-05 12:05:55 UTC (rev 653)
@@ -3971,7 +3971,7 @@
         /* case SQL_C_DEFAULT: */
     }
 
-    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("unknown C data type") ) );
+    MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0, QString(
tr("unknown C data type %1") ).arg(
pResultSetData->pDescriptorRecordAPD->getConciseType() ) ) );
 }
 
 SQLRETURN MResult::fromCharacterC( MResultSetData *pResultSetData )

Modified: trunk/SDK/MYSQLPlus/Library/MResult.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.h	2006-11-04 23:42:03 UTC (rev 652)
+++ trunk/SDK/MYSQLPlus/Library/MResult.h	2006-11-05 12:05:55 UTC (rev 653)
@@ -318,7 +318,7 @@
 
 protected:
     MResultGetData  resultGetData;      /*!< to support getData() (in particular;
chunking)                                                                 */
-    MResultSetData  resultSetData;      /*!< to support doSetData() (in particular;
chunking)                                                               */
+    MResultSetData  resultSetData;      /*!< to support doBindParameter()             
                                                                     */
     SQLUSMALLINT    nRowSetRow;         /*!< Current row in rowset.                   
                                                                     */
     SQLUSMALLINT    nRowSetRows;        /*!< Is RowSetSize but will be less when
RowSet goes beyond ResultSetRows.                                          */
 

Modified: trunk/SDK/MYSQLPlus/Library/MStatement.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2006-11-04 23:42:03 UTC (rev 652)
+++ trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2006-11-05 12:05:55 UTC (rev 653)
@@ -1418,7 +1418,7 @@
     MYODBCDbgEnter();
 
     SQLRETURN   nReturn     = SQL_SUCCESS;
-    BOOL     bHasInfo    = false;
+    BOOL        bHasInfo    = false;
 
     /*!
         \internal
@@ -1473,6 +1473,16 @@
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_07009A ) );
 
     /*!
+        \internal ODBC RULE
+
+        SQL_C_DEFAULT specifies that the parameter value be transferred from 
+        the default C data type for the SQL data type specified with 
+        ParameterType.
+    */
+    if ( nValueType == SQL_C_DEFAULT )
+        nValueType = MYODBCC::getCDefault( getEnvironment()->getODBCVersion(),
nParameterType );
+
+    /*!
         \internal ODBC RULE (DM)
 
         The argument ParameterValuePtr was a null pointer, the argument StrLen_or_IndPtr 

Thread
Connector/ODBC 5 commit: r653 - in trunk/SDK: C/Library C/include Dbg/include MYSQLPlus/Librarypharvey5 Nov
  • Re: Connector/ODBC 5 commit: r653 - in trunk/SDK: C/Library C/include Dbg/include MYSQLPlus/LibraryJess Balint7 Nov