these three look ok
On Sun, Nov 05, 2006 at 01:05:56PM +0100, pharvey@stripped wrote:
> 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
>
>
> --
> MySQL Code Commits Mailing List
> For list archives: http://lists.mysql.com/commits
> To unsubscribe: http://lists.mysql.com/commits?unsub=1
--
Jess Balint, Developer
MySQL Inc, www.mysql.com
Office: +1 773 915 3175
Are you MySQL certified? www.mysql.com/certification