List:Commits« Previous MessageNext Message »
From:Jess Balint Date:November 7 2006 4:34pm
Subject:Re: Connector/ODBC 5 commit: r653 - in trunk/SDK: C/Library C/include Dbg/include MYSQLPlus/Library
View as plain text  
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
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