List:Commits« Previous MessageNext Message »
From:ahristov Date:April 3 2007 12:01pm
Subject:Connector/ODBC 5 commit: r835 - in trunk/SDK: C/Library C/include MYSQLPlus/Library
View as plain text  
Added:
   trunk/SDK/MYSQLPlus/Library/MValidator.cpp
   trunk/SDK/MYSQLPlus/Library/MValidator.h
Modified:
   trunk/SDK/C/Library/MYODBCC.cpp
   trunk/SDK/C/include/MYODBCC.h
   trunk/SDK/MYSQLPlus/Library/CMakeLists.txt
   trunk/SDK/MYSQLPlus/Library/Library.pro
   trunk/SDK/MYSQLPlus/Library/MConnection_props.cpp
   trunk/SDK/MYSQLPlus/Library/MDescriptor.cpp
   trunk/SDK/MYSQLPlus/Library/MDescriptorRecord.cpp
   trunk/SDK/MYSQLPlus/Library/MResult_data_toC.cpp
   trunk/SDK/MYSQLPlus/Library/MStatement.cpp
   trunk/SDK/MYSQLPlus/Library/MYSQLPlusLibrary.vpj
Log:
MYODBCCValidator renamed to MValidator and moved to
SDK/MYSQLPlus, where it is actually only used. It has own header
file which is not part of MInternal.h as not every class needs the validator
This skips build time if MValidator's interface is changed. Currently as single
change in MInternal.h will trigger the rebuild of whole MYSQLPlus.


Modified: trunk/SDK/C/Library/MYODBCC.cpp
===================================================================
--- trunk/SDK/C/Library/MYODBCC.cpp	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/C/Library/MYODBCC.cpp	2007-04-03 12:01:30 UTC (rev 835)
@@ -2663,31 +2663,7 @@
     return src.length() < nDestMaxChars;
 }
 
-BOOL MYODBCCValidator::isQuoteNeededSQL( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_CHAR: 
-        case SQL_VARCHAR:
-        case SQL_LONGVARCHAR:
-        case SQL_WCHAR:
-        case SQL_WVARCHAR:
-        case SQL_WLONGVARCHAR:
-        case SQL_VARBINARY:
-        case SQL_LONGVARBINARY:
-        case SQL_TYPE_DATE:
-        case SQL_TYPE_TIME:
-        case SQL_TYPE_TIMESTAMP:
-        case SQL_GUID:
-        case SQL_DATE:          /* ODBC v2 */
-        case SQL_TIME:          /* ODBC v2 */
-        case SQL_TIMESTAMP:     /* ODBC v2 */
-            return true;
-    }
 
-    return false;
-}
-
 int MYODBCCString::QString_toWString( QString qs, std::wstring *st, int ws_max_chars )
 {
     int size = qs.length();
@@ -2808,1026 +2784,3 @@
     return final;
 }
 
-BOOL MYODBCCValidator::isConnectAttr( SQLINTEGER nAttribute )
-{
-    switch ( nAttribute )
-    {
-        case SQL_ATTR_ACCESS_MODE:
-        case SQL_ATTR_ASYNC_ENABLE:
-        case SQL_ATTR_AUTO_IPD:
-        case SQL_ATTR_AUTOCOMMIT:
-        case SQL_ATTR_CONNECTION_DEAD:
-        case SQL_ATTR_CONNECTION_TIMEOUT:
-        case SQL_ATTR_CURRENT_CATALOG:
-        case SQL_ATTR_LOGIN_TIMEOUT:
-        case SQL_ATTR_METADATA_ID:
-        case SQL_ATTR_ODBC_CURSORS:
-        case SQL_ATTR_PACKET_SIZE:
-        case SQL_ATTR_QUIET_MODE:
-        case SQL_ATTR_TRACE:
-        case SQL_ATTR_TRACEFILE:
-        case SQL_ATTR_TRANSLATE_LIB:
-        case SQL_ATTR_TRANSLATE_OPTION:
-        case SQL_ATTR_TXN_ISOLATION:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isConnectOption( SQLUSMALLINT nOption )
-{
-    switch ( nOption )
-    {
-        case SQL_ACCESS_MODE:
-        case SQL_AUTOCOMMIT:
-        case SQL_CURRENT_QUALIFIER:
-        case SQL_LOGIN_TIMEOUT:
-        case SQL_ODBC_CURSORS:
-        case SQL_OPT_TRACE:
-        case SQL_OPT_TRACEFILE:
-        case SQL_PACKET_SIZE:
-        case SQL_QUIET_MODE:
-        case SQL_TRANSLATE_DLL:
-        case SQL_TRANSLATE_OPTION:
-        case SQL_TXN_ISOLATION:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDiagField( SQLSMALLINT nDiagField )
-{
-    switch ( nDiagField )
-    {
-        case SQL_DIAG_CURSOR_ROW_COUNT:
-        case SQL_DIAG_DYNAMIC_FUNCTION:
-        case SQL_DIAG_DYNAMIC_FUNCTION_CODE:
-        case SQL_DIAG_NUMBER:
-        case SQL_DIAG_RETURNCODE:
-        case SQL_DIAG_ROW_COUNT:
-        case SQL_DIAG_CLASS_ORIGIN:
-        case SQL_DIAG_COLUMN_NUMBER:
-        case SQL_DIAG_CONNECTION_NAME:
-        case SQL_DIAG_MESSAGE_TEXT:
-        case SQL_DIAG_NATIVE:
-        case SQL_DIAG_ROW_NUMBER:
-        case SQL_DIAG_SERVER_NAME:
-        case SQL_DIAG_SQLSTATE:
-        case SQL_DIAG_SUBCLASS_ORIGIN:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isEnvAttr( SQLINTEGER nAttribute )
-{
-    switch ( nAttribute )
-    {
-        case SQL_ATTR_CONNECTION_POOLING:
-        case SQL_ATTR_CP_MATCH:
-        case SQL_ATTR_ODBC_VERSION:
-        case SQL_ATTR_OUTPUT_NTS:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isFunctions( SQLUSMALLINT nFunction )
-{
-    switch ( nFunction )
-    {
-        case SQL_API_ALL_FUNCTIONS:
-        case SQL_API_SQLALLOCCONNECT:
-        case SQL_API_SQLALLOCENV:
-        case SQL_API_SQLALLOCHANDLE:
-        case SQL_API_SQLALLOCSTMT:
-        case SQL_API_SQLBINDCOL:
-        case SQL_API_SQLCANCEL:
-        case SQL_API_SQLCLOSECURSOR:
-/* Same value as SQL_API_SQLCOLATTRIBUTES...
-        case SQL_API_SQLCOLATTRIBUTE:
-            return "SQL_API_SQLCOLATTRIBUTE";
-*/
-        case SQL_API_SQLCOLUMNS:
-        case SQL_API_SQLCONNECT:
-        case SQL_API_SQLCOPYDESC:
-        case SQL_API_SQLDATASOURCES:
-        case SQL_API_SQLDESCRIBECOL:
-        case SQL_API_SQLDISCONNECT:
-        case SQL_API_SQLENDTRAN:
-        case SQL_API_SQLERROR:
-        case SQL_API_SQLEXECDIRECT:
-        case SQL_API_SQLEXECUTE:
-        case SQL_API_SQLFETCH:
-        case SQL_API_SQLFETCHSCROLL:
-        case SQL_API_SQLFREECONNECT:
-        case SQL_API_SQLFREEENV:
-        case SQL_API_SQLFREEHANDLE:
-        case SQL_API_SQLFREESTMT:
-        case SQL_API_SQLGETCONNECTATTR:
-        case SQL_API_SQLGETCONNECTOPTION:
-        case SQL_API_SQLGETCURSORNAME:
-        case SQL_API_SQLGETDATA:
-        case SQL_API_SQLGETDESCFIELD:
-        case SQL_API_SQLGETDESCREC:
-        case SQL_API_SQLGETDIAGFIELD:
-        case SQL_API_SQLGETDIAGREC:
-        case SQL_API_SQLGETENVATTR:
-        case SQL_API_SQLGETFUNCTIONS:
-        case SQL_API_SQLGETINFO:
-        case SQL_API_SQLGETSTMTATTR:
-        case SQL_API_SQLGETSTMTOPTION:
-        case SQL_API_SQLGETTYPEINFO:
-        case SQL_API_SQLNUMRESULTCOLS:
-        case SQL_API_SQLPARAMDATA:
-        case SQL_API_SQLPREPARE:
-        case SQL_API_SQLPUTDATA:
-        case SQL_API_SQLROWCOUNT:
-        case SQL_API_SQLSETCONNECTATTR:
-        case SQL_API_SQLSETCONNECTOPTION:
-        case SQL_API_SQLSETCURSORNAME:
-        case SQL_API_SQLSETDESCFIELD:
-        case SQL_API_SQLSETDESCREC:
-        case SQL_API_SQLSETENVATTR:
-        case SQL_API_SQLSETSTMTATTR:
-        case SQL_API_SQLSETSTMTOPTION:
-        case SQL_API_SQLSPECIALCOLUMNS:
-        case SQL_API_SQLSTATISTICS:
-        case SQL_API_SQLTABLES:
-        case SQL_API_SQLTRANSACT:
-        case SQL_API_SQLBULKOPERATIONS:
-        case SQL_API_SQLBINDPARAMETER:
-        case SQL_API_SQLBROWSECONNECT:
-        case SQL_API_SQLCOLATTRIBUTES:
-        case SQL_API_SQLCOLUMNPRIVILEGES :
-        case SQL_API_SQLDESCRIBEPARAM:
-        case SQL_API_SQLDRIVERCONNECT:
-        case SQL_API_SQLDRIVERS:
-        case SQL_API_SQLEXTENDEDFETCH:
-        case SQL_API_SQLFOREIGNKEYS:
-        case SQL_API_SQLMORERESULTS:
-        case SQL_API_SQLNATIVESQL:
-        case SQL_API_SQLNUMPARAMS:
-        case SQL_API_SQLPARAMOPTIONS:
-        case SQL_API_SQLPRIMARYKEYS:
-        case SQL_API_SQLPROCEDURECOLUMNS:
-        case SQL_API_SQLPROCEDURES:
-        case SQL_API_SQLSETPOS:
-        case SQL_API_SQLSETSCROLLOPTIONS:
-        case SQL_API_SQLTABLEPRIVILEGES:
-        case SQL_API_ODBC3_ALL_FUNCTIONS:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isHandleType( SQLSMALLINT nHandleType )
-{
-    switch ( nHandleType )
-    {
-        case SQL_HANDLE_ENV:
-        case SQL_HANDLE_DBC:
-        case SQL_HANDLE_STMT:
-        case SQL_HANDLE_DESC:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isInfoType( SQLUSMALLINT nInfoType )
-{
-    switch ( nInfoType )
-    {
-        case SQL_ACCESSIBLE_PROCEDURES:
-        case SQL_ACCESSIBLE_TABLES:
-        case SQL_ACTIVE_ENVIRONMENTS:
-        case SQL_AGGREGATE_FUNCTIONS:
-        case SQL_ALTER_DOMAIN:
-        case SQL_ALTER_TABLE:
-        case SQL_ASYNC_MODE:
-        case SQL_BATCH_ROW_COUNT:
-        case SQL_BATCH_SUPPORT:
-        case SQL_BOOKMARK_PERSISTENCE:
-        case SQL_CATALOG_LOCATION:
-        case SQL_CATALOG_NAME:
-        case SQL_CATALOG_NAME_SEPARATOR:
-        case SQL_CATALOG_TERM:
-        case SQL_CATALOG_USAGE:
-        case SQL_COLLATION_SEQ:
-        case SQL_COLUMN_ALIAS:
-        case SQL_CONCAT_NULL_BEHAVIOR:
-        case SQL_CONVERT_BIGINT:
-        case SQL_CONVERT_BINARY:
-        case SQL_CONVERT_BIT:
-        case SQL_CONVERT_CHAR:
-#ifdef SQL_CONVERT_GUID
-        case SQL_CONVERT_GUID:
-#endif
-        case SQL_CONVERT_DATE:
-        case SQL_CONVERT_DECIMAL:
-        case SQL_CONVERT_DOUBLE:
-        case SQL_CONVERT_FLOAT:
-        case SQL_CONVERT_INTEGER:
-        case SQL_CONVERT_INTERVAL_YEAR_MONTH:
-        case SQL_CONVERT_INTERVAL_DAY_TIME:
-        case SQL_CONVERT_LONGVARBINARY:
-        case SQL_CONVERT_LONGVARCHAR:
-        case SQL_CONVERT_NUMERIC:
-        case SQL_CONVERT_REAL:
-        case SQL_CONVERT_SMALLINT:
-        case SQL_CONVERT_TIME:
-        case SQL_CONVERT_TIMESTAMP:
-        case SQL_CONVERT_TINYINT:
-        case SQL_CONVERT_VARBINARY:
-        case SQL_CONVERT_VARCHAR:
-        case SQL_CONVERT_FUNCTIONS:
-        case SQL_CORRELATION_NAME:
-        case SQL_CREATE_ASSERTION:
-        case SQL_CREATE_CHARACTER_SET:
-        case SQL_CREATE_COLLATION:
-        case SQL_CREATE_DOMAIN:
-        case SQL_CREATE_SCHEMA:
-        case SQL_CREATE_TABLE:
-        case SQL_CREATE_TRANSLATION:
-        case SQL_CREATE_VIEW:
-        case SQL_CURSOR_COMMIT_BEHAVIOR:
-        case SQL_CURSOR_ROLLBACK_BEHAVIOR:
-        case SQL_CURSOR_SENSITIVITY:
-        case SQL_DATA_SOURCE_NAME:
-        case SQL_DATA_SOURCE_READ_ONLY:
-        case SQL_DATABASE_NAME:
-        case SQL_DATETIME_LITERALS:
-        case SQL_DBMS_NAME:
-        case SQL_DBMS_VER:
-        case SQL_DDL_INDEX:
-        case SQL_DEFAULT_TXN_ISOLATION:
-        case SQL_DESCRIBE_PARAMETER:
-        case SQL_DM_VER:
-        case SQL_DRIVER_HDBC:
-        case SQL_DRIVER_HENV:
-        case SQL_DRIVER_HDESC:
-        case SQL_DRIVER_HLIB:
-        case SQL_DRIVER_HSTMT:
-        case SQL_DRIVER_NAME:
-        case SQL_DRIVER_ODBC_VER:
-        case SQL_DRIVER_VER:
-        case SQL_DROP_ASSERTION:
-        case SQL_DROP_CHARACTER_SET:
-        case SQL_DROP_COLLATION:
-        case SQL_DROP_DOMAIN:
-        case SQL_DROP_SCHEMA:
-        case SQL_DROP_TABLE:
-        case SQL_DROP_TRANSLATION:
-        case SQL_DROP_VIEW:
-        case SQL_DYNAMIC_CURSOR_ATTRIBUTES1:
-        case SQL_DYNAMIC_CURSOR_ATTRIBUTES2:
-        case SQL_EXPRESSIONS_IN_ORDERBY:
-        case SQL_FILE_USAGE:
-        case SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1:
-        case SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2:
-        case SQL_GETDATA_EXTENSIONS:
-        case SQL_GROUP_BY:
-        case SQL_IDENTIFIER_CASE:
-        case SQL_IDENTIFIER_QUOTE_CHAR:
-        case SQL_INDEX_KEYWORDS:
-        case SQL_INFO_SCHEMA_VIEWS:
-        case SQL_INSERT_STATEMENT:
-        case SQL_INTEGRITY:
-        case SQL_KEYSET_CURSOR_ATTRIBUTES1:
-        case SQL_KEYSET_CURSOR_ATTRIBUTES2:
-        case SQL_KEYWORDS:
-        case SQL_LIKE_ESCAPE_CLAUSE:
-        case SQL_MAX_ASYNC_CONCURRENT_STATEMENTS:
-        case SQL_MAX_BINARY_LITERAL_LEN:
-        case SQL_MAX_CATALOG_NAME_LEN:
-        case SQL_MAX_CHAR_LITERAL_LEN:
-        case SQL_MAX_COLUMN_NAME_LEN:
-        case SQL_MAX_COLUMNS_IN_GROUP_BY:
-        case SQL_MAX_COLUMNS_IN_INDEX:
-        case SQL_MAX_COLUMNS_IN_ORDER_BY:
-        case SQL_MAX_COLUMNS_IN_SELECT:
-        case SQL_MAX_COLUMNS_IN_TABLE:
-        case SQL_MAX_CONCURRENT_ACTIVITIES:
-        case SQL_MAX_CURSOR_NAME_LEN:
-        case SQL_MAX_DRIVER_CONNECTIONS:
-        case SQL_MAX_IDENTIFIER_LEN:
-        case SQL_MAX_INDEX_SIZE:
-        case SQL_MAX_PROCEDURE_NAME_LEN:
-        case SQL_MAX_ROW_SIZE:
-        case SQL_MAX_ROW_SIZE_INCLUDES_LONG:
-        case SQL_MAX_SCHEMA_NAME_LEN:
-        case SQL_MAX_STATEMENT_LEN:
-        case SQL_MAX_TABLE_NAME_LEN:
-        case SQL_MAX_TABLES_IN_SELECT:
-        case SQL_MAX_USER_NAME_LEN:
-        case SQL_MULT_RESULT_SETS:
-        case SQL_MULTIPLE_ACTIVE_TXN:
-        case SQL_NEED_LONG_DATA_LEN:
-        case SQL_NON_NULLABLE_COLUMNS:
-        case SQL_NULL_COLLATION:
-        case SQL_NUMERIC_FUNCTIONS:
-        case SQL_ODBC_API_CONFORMANCE:
-        case SQL_ODBC_INTERFACE_CONFORMANCE:
-        case SQL_ODBC_VER:
-        case SQL_OJ_CAPABILITIES:
-        case SQL_ORDER_BY_COLUMNS_IN_SELECT:
-        case SQL_PARAM_ARRAY_ROW_COUNTS:
-        case SQL_PARAM_ARRAY_SELECTS:
-        case SQL_PROCEDURE_TERM:
-        case SQL_PROCEDURES:
-        case SQL_POS_OPERATIONS:
-        case SQL_QUOTED_IDENTIFIER_CASE:
-        case SQL_ROW_UPDATES:
-        case SQL_SCHEMA_TERM:
-        case SQL_SCHEMA_USAGE:
-        case SQL_SCROLL_OPTIONS:
-        case SQL_SEARCH_PATTERN_ESCAPE:
-        case SQL_SERVER_NAME:
-        case SQL_SPECIAL_CHARACTERS:
-        case SQL_SQL_CONFORMANCE:
-        case SQL_SQL92_DATETIME_FUNCTIONS:
-        case SQL_SQL92_FOREIGN_KEY_DELETE_RULE:
-        case SQL_SQL92_FOREIGN_KEY_UPDATE_RULE:
-        case SQL_SQL92_GRANT:
-        case SQL_SQL92_NUMERIC_VALUE_FUNCTIONS:
-        case SQL_SQL92_PREDICATES:
-        case SQL_SQL92_RELATIONAL_JOIN_OPERATORS:
-        case SQL_SQL92_REVOKE:
-        case SQL_SQL92_ROW_VALUE_CONSTRUCTOR:
-        case SQL_SQL92_STRING_FUNCTIONS:
-        case SQL_SQL92_VALUE_EXPRESSIONS:
-        case SQL_STANDARD_CLI_CONFORMANCE:
-        case SQL_STATIC_CURSOR_ATTRIBUTES1:
-        case SQL_STATIC_CURSOR_ATTRIBUTES2:
-        case SQL_STRING_FUNCTIONS:
-        case SQL_SUBQUERIES:
-        case SQL_SYSTEM_FUNCTIONS:
-        case SQL_TABLE_TERM:
-        case SQL_TIMEDATE_ADD_INTERVALS:
-        case SQL_TIMEDATE_DIFF_INTERVALS:
-        case SQL_TIMEDATE_FUNCTIONS:
-        case SQL_TXN_CAPABLE:
-        case SQL_TXN_ISOLATION_OPTION:
-        case SQL_UNION:
-        case SQL_USER_NAME:
-        case SQL_XOPEN_CLI_YEAR:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isReturn( SQLRETURN nReturn )
-{
-    switch ( nReturn )
-    {
-        case SQL_SUCCESS:
-        case SQL_SUCCESS_WITH_INFO:
-#if (ODBCVER >= 0x0300)
-        case SQL_NO_DATA:
-#endif
-        case SQL_ERROR:
-        case SQL_INVALID_HANDLE:
-        case SQL_STILL_EXECUTING:
-        case SQL_NEED_DATA:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isStmtAttr( SQLINTEGER nAttribute )
-{
-    switch ( nAttribute )
-    {
-        case SQL_ATTR_APP_ROW_DESC:
-        case SQL_ATTR_ASYNC_ENABLE:
-        case SQL_ATTR_CONCURRENCY:
-        case SQL_ATTR_CURSOR_SCROLLABLE:
-        case SQL_ATTR_CURSOR_SENSITIVITY:
-        case SQL_ATTR_CURSOR_TYPE:
-        case SQL_ATTR_ENABLE_AUTO_IPD:
-        case SQL_ATTR_FETCH_BOOKMARK_PTR:
-        case SQL_ATTR_IMP_PARAM_DESC:
-        case SQL_ATTR_IMP_ROW_DESC:
-        case SQL_ATTR_KEYSET_SIZE:
-        case SQL_ATTR_MAX_LENGTH:
-        case SQL_ATTR_MAX_ROWS:
-        case SQL_ATTR_METADATA_ID:
-        case SQL_ATTR_NOSCAN:
-        case SQL_ATTR_PARAM_BIND_OFFSET_PTR:
-        case SQL_ATTR_PARAM_BIND_TYPE:
-        case SQL_ATTR_PARAM_OPERATION_PTR:
-        case SQL_ATTR_PARAM_STATUS_PTR:
-        case SQL_ATTR_PARAMS_PROCESSED_PTR:
-        case SQL_ATTR_PARAMSET_SIZE:
-        case SQL_ATTR_QUERY_TIMEOUT:
-        case SQL_ATTR_RETRIEVE_DATA:
-        case SQL_ATTR_ROW_ARRAY_SIZE:
-        case SQL_ATTR_ROW_BIND_OFFSET_PTR:
-        case SQL_ATTR_ROW_BIND_TYPE:
-        case SQL_ATTR_ROW_NUMBER:
-        case SQL_ATTR_ROW_OPERATION_PTR:
-        case SQL_ATTR_ROW_STATUS_PTR:
-        case SQL_ATTR_ROWS_FETCHED_PTR:
-        case SQL_ATTR_SIMULATE_CURSOR:
-        case SQL_ATTR_USE_BOOKMARKS:
-            return true;
-    }
-
-    /* fall back to odbc 2 statement option */
-    return isStmtOption( nAttribute );
-}
-
-BOOL MYODBCCValidator::isStmtOption( SQLUSMALLINT nOption )
-{
-    switch ( nOption )
-    {
-        case SQL_ASYNC_ENABLE:
-        case SQL_BIND_TYPE:
-        case SQL_CONCURRENCY:
-        case SQL_CURSOR_TYPE:
-        case SQL_GET_BOOKMARK:
-        case SQL_KEYSET_SIZE:
-        case SQL_MAX_LENGTH:
-        case SQL_MAX_ROWS:
-        case SQL_NOSCAN:
-        case SQL_QUERY_TIMEOUT:
-        case SQL_RETRIEVE_DATA:
-        case SQL_ROWSET_SIZE:
-        case SQL_ROW_NUMBER:
-        case SQL_SIMULATE_CURSOR:
-        case SQL_USE_BOOKMARKS:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isTypeC( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_C_CHAR:              /*              1 */
-        case SQL_C_WCHAR:
-        case SQL_C_SSHORT:            /*  5 + -20 = -15 */
-        case SQL_C_USHORT:            /*  5 + -22 = -17 */
-        case SQL_C_SLONG:             /*  4 + -20 = -16 */
-        case SQL_C_ULONG:             /*  4 + -22 = -18 */   
-        case SQL_C_FLOAT:             /*              7 */
-        case SQL_C_DOUBLE:            /*              8 */
-        case SQL_C_BIT:               /*             -7 */
-        case SQL_C_STINYINT:          /* -6 + -20 = -26 */ 
-        case SQL_C_UTINYINT:          /* -6 + -22 = -28 */ 
-        case SQL_C_SBIGINT:           /* -5 + -20 = -25 */
-        case SQL_C_UBIGINT:           /* -5 + -22 = -27 */
-        case SQL_C_BINARY:            /*             -2 */
-     /* case SQL_C_VARBOOKMARK: */    /*   SQL_C_BINARY */
-        case SQL_C_NUMERIC:           /*              2 */
-        case SQL_C_GUID:              /*            -11 */
-        case SQL_C_DEFAULT:           /*             99 */
-        case SQL_DATETIME:            /*              9 */
-        case SQL_INTERVAL:            /*             10 */
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isTypeSQL( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_CHAR:
-        case SQL_VARCHAR:
-        case SQL_LONGVARCHAR:
-        case SQL_WCHAR:
-        case SQL_WVARCHAR:
-        case SQL_WLONGVARCHAR:
-        case SQL_DECIMAL:
-        case SQL_NUMERIC:
-        case SQL_SMALLINT:
-        case SQL_INTEGER:
-        case SQL_REAL:
-        case SQL_FLOAT:
-        case SQL_DOUBLE:
-        case SQL_BIT:
-        case SQL_TINYINT:
-        case SQL_BIGINT:
-        case SQL_BINARY:
-        case SQL_VARBINARY:
-        case SQL_LONGVARBINARY:
-        case SQL_DATETIME:
-        case SQL_INTERVAL:
-        case SQL_GUID:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isConciseTypeC( SQLSMALLINT nType, SQLINTEGER nODBCVersion )
-{
-    /*! 
-        \internal ODBC RULE
-
-        The SQL_ATTR_ODBC_VERSION attribute affects three different aspects of an 
-        ODBC 3.x driver's behavior: 
-
-        - SQLSTATEs 
-        - Data types for date, time, and timestamp 
-        - The CatalogName argument.
-
-        \note
-
-        We could put all of the ODBC v3 types and the supported ODBC v2 types in one
switch
-        but separating them is more accurate as it is often an error to use wrong type.
-    */
-    if ( nODBCVersion == SQL_OV_ODBC3 )
-    {
-        switch ( nType )
-        {
-            case SQL_C_TYPE_DATE:
-            case SQL_C_TYPE_TIME:
-            case SQL_C_TYPE_TIMESTAMP:
-                return true;
-        }
-    }
-    else if ( nODBCVersion == SQL_OV_ODBC2 )
-    {
-        /*!
-            \note   We need to support ODBC v3 date/time types here even when we are told
to be an ODBC v2
-                    driver because the DM will map it to ODBC v3. We support the ODBC v2
datetime types for
-                    the case where an app links to us directly. 
-        */
-        switch ( nType )
-        {
-            case SQL_C_DATE:        
-            case SQL_C_TIME:        
-            case SQL_C_TIMESTAMP:   
-            case SQL_C_TYPE_DATE:
-            case SQL_C_TYPE_TIME:
-            case SQL_C_TYPE_TIMESTAMP:
-                return true;
-        }
-    }
-
-    /* */
-    switch ( nType )
-    {                                 /* MS VALUES      */
-        case SQL_C_CHAR:              /*              1 */
-        case SQL_C_NUMERIC:           /*              2 */
-        case SQL_C_FLOAT:             /*              7 */
-        case SQL_C_DOUBLE:            /*              8 */
-        case SQL_C_WCHAR:             /*             -8 */
-        case SQL_C_SHORT:             /*              5 */
-        case SQL_C_SSHORT:            /*  5 + -20 = -15 */
-        case SQL_C_USHORT:            /*  5 + -22 = -17 */
-        case SQL_C_LONG:              /*              4 */
-        case SQL_C_SLONG:             /*  4 + -20 = -16 */
-        case SQL_C_ULONG:             /*  4 + -22 = -18 */   
-        case SQL_C_BIT:               /*             -7 */
-        case SQL_C_TINYINT:           /*             -6 */
-        case SQL_C_STINYINT:          /* -6 + -20 = -26 */ 
-        case SQL_C_UTINYINT:          /* -6 + -22 = -28 */ 
-        case SQL_C_SBIGINT:           /* -5 + -20 = -25 */
-        case SQL_C_UBIGINT:           /* -5 + -22 = -27 */
-        case SQL_C_BINARY:            /*             -2 */
-     /* case SQL_C_VARBOOKMARK: */    /*   SQL_C_BINARY */
-        case SQL_C_GUID:              /*            -11 */
-        case SQL_C_DEFAULT:           /*             99 */
-        case SQL_C_INTERVAL_MONTH:                    /* 102  */
-        case SQL_C_INTERVAL_YEAR:                     /* 101  */
-        case SQL_C_INTERVAL_YEAR_TO_MONTH:            /* 107  */
-        case SQL_C_INTERVAL_DAY:                      /* 103  */
-        case SQL_C_INTERVAL_HOUR:                     /* 104  */
-        case SQL_C_INTERVAL_MINUTE:                   /* 105  */
-        case SQL_C_INTERVAL_SECOND:                   /* 106  */
-        case SQL_C_INTERVAL_DAY_TO_HOUR:              /* 108  */
-        case SQL_C_INTERVAL_DAY_TO_MINUTE:            /* 109  */  
-        case SQL_C_INTERVAL_DAY_TO_SECOND:            /* 110  */
-        case SQL_C_INTERVAL_HOUR_TO_MINUTE:           /* 111  */
-        case SQL_C_INTERVAL_HOUR_TO_SECOND:           /* 112  */
-        case SQL_C_INTERVAL_MINUTE_TO_SECOND:         /* 113  */
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isConciseTypeSQL( SQLSMALLINT nType, SQLINTEGER nODBCVersion )
-{
-    /*! 
-        \internal ODBC RULE
-
-        The SQL_ATTR_ODBC_VERSION attribute affects three different aspects of an 
-        ODBC 3.x driver's behavior: 
-
-        - SQLSTATEs 
-        - Data types for date, time, and timestamp 
-        - The CatalogName argument.
-
-        \note
-
-        We could put all of the ODBC v3 types and the supported ODBC v2 types in one
switch
-        but separating them is more accurate as it is often an error to use wrong type.
-    */
-    if ( nODBCVersion == SQL_OV_ODBC3 )
-    {
-        switch ( nType )
-        {
-            case SQL_TYPE_DATE:
-            case SQL_TYPE_TIME:
-            case SQL_TYPE_TIMESTAMP:
-                return true;
-        }
-    }
-    else if ( nODBCVersion == SQL_OV_ODBC2 )
-    {
-        switch ( nType )
-        {
-            case SQL_DATE:        
-            case SQL_TIME:        
-            case SQL_TIMESTAMP:   
-                return true;
-        }
-    }
-
-    /* */
-    switch ( nType )
-    {
-        case SQL_CHAR:                              /*   1  */
-        case SQL_VARCHAR:                           /*  12  */
-        case SQL_LONGVARCHAR:                       /*  -1  */
-        case SQL_WCHAR:                             /*  -8  */
-        case SQL_WVARCHAR:                          /*  -9  */
-        case SQL_WLONGVARCHAR:                      /* -10  */
-        case SQL_DECIMAL:                           /*   3  */
-        case SQL_NUMERIC:                           /*   2  */
-        case SQL_SMALLINT:                          /*   5  */
-        case SQL_INTEGER:                           /*   4  */
-        case SQL_REAL:                              /*   7  */
-        case SQL_FLOAT:                             /*   6  */
-        case SQL_DOUBLE:                            /*   8  */
-        case SQL_BIT:                               /*  -7  */
-        case SQL_TINYINT:                           /*  -6  */
-        case SQL_BIGINT:                            /*  -5  */
-        case SQL_BINARY:                            /*  -2  */
-        case SQL_VARBINARY:                         /*  -3  */
-        case SQL_LONGVARBINARY:                     /*  -4  */
-        case SQL_INTERVAL_MONTH:                    /* 102  */
-        case SQL_INTERVAL_YEAR:                     /* 101  */
-        case SQL_INTERVAL_YEAR_TO_MONTH:            /* 107  */
-        case SQL_INTERVAL_DAY:                      /* 103  */
-        case SQL_INTERVAL_HOUR:                     /* 104  */
-        case SQL_INTERVAL_MINUTE:                   /* 105  */
-        case SQL_INTERVAL_SECOND:                   /* 106  */
-        case SQL_INTERVAL_DAY_TO_HOUR:              /* 108  */
-        case SQL_INTERVAL_DAY_TO_MINUTE:            /* 109  */  
-        case SQL_INTERVAL_DAY_TO_SECOND:            /* 110  */
-        case SQL_INTERVAL_HOUR_TO_MINUTE:           /* 111  */
-        case SQL_INTERVAL_HOUR_TO_SECOND:           /* 112  */
-        case SQL_INTERVAL_MINUTE_TO_SECOND:         /* 113  */
-        case SQL_GUID:                              /* -11  */
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isIntervalConciseTypeC( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_C_INTERVAL_MONTH:                    /* 102  */
-        case SQL_C_INTERVAL_YEAR:                     /* 101  */
-        case SQL_C_INTERVAL_YEAR_TO_MONTH:            /* 107  */
-        case SQL_C_INTERVAL_DAY:                      /* 103  */
-        case SQL_C_INTERVAL_HOUR:                     /* 104  */
-        case SQL_C_INTERVAL_MINUTE:                   /* 105  */
-        case SQL_C_INTERVAL_SECOND:                   /* 106  */
-        case SQL_C_INTERVAL_DAY_TO_HOUR:              /* 108  */
-        case SQL_C_INTERVAL_DAY_TO_MINUTE:            /* 109  */  
-        case SQL_C_INTERVAL_DAY_TO_SECOND:            /* 110  */
-        case SQL_C_INTERVAL_HOUR_TO_MINUTE:           /* 111  */
-        case SQL_C_INTERVAL_HOUR_TO_SECOND:           /* 112  */
-        case SQL_C_INTERVAL_MINUTE_TO_SECOND:         /* 113  */
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isIntervalConciseTypeSQL( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_INTERVAL_MONTH:                    /* 102  */
-        case SQL_INTERVAL_YEAR:                     /* 101  */
-        case SQL_INTERVAL_YEAR_TO_MONTH:            /* 107  */
-        case SQL_INTERVAL_DAY:                      /* 103  */
-        case SQL_INTERVAL_HOUR:                     /* 104  */
-        case SQL_INTERVAL_MINUTE:                   /* 105  */
-        case SQL_INTERVAL_SECOND:                   /* 106  */
-        case SQL_INTERVAL_DAY_TO_HOUR:              /* 108  */
-        case SQL_INTERVAL_DAY_TO_MINUTE:            /* 109  */  
-        case SQL_INTERVAL_DAY_TO_SECOND:            /* 110  */
-        case SQL_INTERVAL_HOUR_TO_MINUTE:           /* 111  */
-        case SQL_INTERVAL_HOUR_TO_SECOND:           /* 112  */
-        case SQL_INTERVAL_MINUTE_TO_SECOND:         /* 113  */
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDateTimeCode( SQLSMALLINT nCode )
-{
-    switch ( nCode )
-    {
-        case SQL_CODE_DATE:
-        case SQL_CODE_TIME:
-        case SQL_CODE_TIMESTAMP:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isIntervalCode( SQLSMALLINT nCode )
-{
-    switch ( nCode )
-    {
-        case SQL_CODE_YEAR:
-        case SQL_CODE_MONTH:
-        case SQL_CODE_DAY:
-        case SQL_CODE_HOUR:
-        case SQL_CODE_MINUTE:
-        case SQL_CODE_SECOND:
-        case SQL_CODE_YEAR_TO_MONTH:
-        case SQL_CODE_DAY_TO_HOUR:
-        case SQL_CODE_DAY_TO_MINUTE:
-        case SQL_CODE_DAY_TO_SECOND:
-        case SQL_CODE_HOUR_TO_MINUTE:
-        case SQL_CODE_HOUR_TO_SECOND:
-        case SQL_CODE_MINUTE_TO_SECOND:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isCharTypeSQL( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_CHAR:
-        case SQL_VARCHAR:
-        case SQL_LONGVARCHAR:
-        case SQL_WCHAR:
-        case SQL_WVARCHAR:
-        case SQL_WLONGVARCHAR:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isBinTypeSQL( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_BINARY:
-        case SQL_VARBINARY:
-        case SQL_LONGVARBINARY:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDateTimeTypeSQL( SQLSMALLINT nType, SQLINTEGER nODBCVersion )
-{
-    /*! 
-        \internal ODBC RULE
-
-        The SQL_ATTR_ODBC_VERSION attribute affects three different aspects of an 
-        ODBC 3.x driver's behavior: 
-
-        - SQLSTATEs 
-        - Data types for date, time, and timestamp 
-        - The CatalogName argument.
-
-        \note
-
-        We could put all of the ODBC v3 types and the supported ODBC v2 types in one
switch
-        but separating them is more accurate as it is often an error to use wrong type.
-    */
-    if ( nODBCVersion == SQL_OV_ODBC3 )
-    {
-        switch ( nType )
-        {
-            case SQL_TYPE_DATE:
-            case SQL_TYPE_TIME:
-            case SQL_TYPE_TIMESTAMP:
-                return true;
-        }
-    }
-    else if ( nODBCVersion == SQL_OV_ODBC2 )
-    {
-        switch ( nType )
-        {
-            case SQL_DATE:        
-            case SQL_TIME:        
-            case SQL_TIMESTAMP:   
-                return true;
-        }
-    }
-
-    return false;
-}
-
-
-BOOL MYODBCCValidator::isCharTypeC( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_C_CHAR:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isBinTypeC( SQLSMALLINT nType )
-{
-    switch ( nType )
-    {
-        case SQL_C_BINARY:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isBooleanValue( SQLINTEGER nValue )
-{
-    switch ( nValue )
-    {
-        case SQL_TRUE:
-        case SQL_FALSE:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDescField( SQLSMALLINT nField )
-{
-    switch ( nField )
-    {
-        /* header */
-        case SQL_DESC_ALLOC_TYPE:
-        case SQL_DESC_ARRAY_SIZE:
-        case SQL_DESC_ARRAY_STATUS_PTR:
-        case SQL_DESC_BIND_OFFSET_PTR:
-        case SQL_DESC_BIND_TYPE:
-        case SQL_DESC_COUNT:
-        case SQL_DESC_ROWS_PROCESSED_PTR:
-        /* footer */
-        case SQL_DESC_AUTO_UNIQUE_VALUE:
-        case SQL_DESC_BASE_COLUMN_NAME:
-        case SQL_DESC_BASE_TABLE_NAME:
-        case SQL_DESC_CASE_SENSITIVE:
-        case SQL_DESC_CATALOG_NAME:
-        case SQL_DESC_CONCISE_TYPE:
-        case SQL_DESC_DATA_PTR:
-        case SQL_DESC_DATETIME_INTERVAL_CODE:
-        case SQL_DESC_DATETIME_INTERVAL_PRECISION:
-        case SQL_DESC_DISPLAY_SIZE:
-        case SQL_DESC_FIXED_PREC_SCALE:
-        case SQL_DESC_INDICATOR_PTR:
-        case SQL_DESC_LABEL:
-        case SQL_DESC_LENGTH:
-        case SQL_DESC_LITERAL_PREFIX:
-        case SQL_DESC_LITERAL_SUFFIX:
-        case SQL_DESC_LOCAL_TYPE_NAME:
-        case SQL_DESC_NAME:
-        case SQL_DESC_NULLABLE:
-        case SQL_DESC_OCTET_LENGTH:
-        case SQL_DESC_OCTET_LENGTH_PTR:
-        case SQL_DESC_PARAMETER_TYPE:
-        case SQL_DESC_PRECISION:
-        case SQL_DESC_ROWVER:
-        case SQL_DESC_SCALE:
-        case SQL_DESC_SCHEMA_NAME:
-        case SQL_DESC_SEARCHABLE:
-        case SQL_DESC_TABLE_NAME:
-        case SQL_DESC_TYPE:
-        case SQL_DESC_TYPE_NAME:
-        case SQL_DESC_UNNAMED:
-        case SQL_DESC_UNSIGNED:
-        case SQL_DESC_UPDATABLE:
-            return true;
-    }   
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDescAllocType( SQLSMALLINT nAllocType )
-{
-    switch ( nAllocType )
-    {
-        case SQL_DESC_ALLOC_AUTO:
-        case SQL_DESC_ALLOC_USER:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDescBindType( SQLINTEGER nBindType )
-{
-    /*! \todo these values look suspect... */
-    switch ( nBindType )
-    {
-        case SQL_BIND_BY_COLUMN:
-        case SQL_ATTR_ROW_BIND_TYPE:
-        case SQL_ATTR_PARAM_BIND_TYPE:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDescNullable( SQLSMALLINT nNullable )
-{
-    switch ( nNullable )
-    {
-        case SQL_NULLABLE:
-        case SQL_NO_NULLS:
-        case SQL_NULLABLE_UNKNOWN:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDescParameterType( SQLSMALLINT nParameterType )
-{
-    switch ( nParameterType )
-    {
-        case SQL_PARAM_INPUT:
-        case SQL_PARAM_INPUT_OUTPUT:
-        case SQL_PARAM_OUTPUT:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDescSearchable( SQLSMALLINT nSearchable )
-{
-    switch ( nSearchable )
-    {
-        case SQL_PRED_NONE:
-        case SQL_PRED_CHAR:
-        case SQL_PRED_BASIC:
-        case SQL_PRED_SEARCHABLE:
-            return true;
-    }
-
-    return false;
-}
-    
-BOOL MYODBCCValidator::isDescUnnamed( SQLSMALLINT nUnnamed )
-{
-    switch ( nUnnamed )
-    {
-        case SQL_NAMED:
-        case SQL_UNNAMED:
-            return true;
-    }
-
-    return false;
-}
-
-BOOL MYODBCCValidator::isDescUpdatable( SQLSMALLINT nUpdatable )
-{
-    switch ( nUpdatable )
-    {
-        case SQL_ATTR_READONLY:
-        case SQL_ATTR_WRITE:
-        case SQL_ATTR_READWRITE_UNKNOWN:
-            return true;
-    }
-
-    return false;
-}
-

Modified: trunk/SDK/C/include/MYODBCC.h
===================================================================
--- trunk/SDK/C/include/MYODBCC.h	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/C/include/MYODBCC.h	2007-04-03 12:01:30 UTC (rev 835)
@@ -561,61 +561,6 @@
     static SQLINTEGER getStmtAttrFromOption( SQLUSMALLINT nOption );
 };
 
-class MYODBCCValidator
-{
-public:
-    static BOOL    isQuoteNeededSQL( SQLSMALLINT nType );
 
-    /*!
-        \name   Method argument/attribute value validators.
-
-        These are used to validate that a value is valid - where the value is restricted
to a 
-        set of "#define" values.
-
-        The simplest example is isBooleanValue() which returns true if the given value is
either
-        SQL_FALSE or SQL_TRUE.
-
-        \note
-
-        In some cases this type of validation is implied by other processing - negating
-        a need to call these.
-    */
-    /*@{*/
-    static BOOL isConnectAttr( SQLINTEGER nAttribute );
-    static BOOL isConnectOption( SQLUSMALLINT nOption );
-    static BOOL isDiagField( SQLSMALLINT nDiagField );
-    static BOOL isEnvAttr( SQLINTEGER nAttribute );
-    static BOOL isFunctions( SQLUSMALLINT nFunction );
-    static BOOL isHandleType( SQLSMALLINT nHandleType );
-    static BOOL isInfoType( SQLUSMALLINT nInfoType );
-    static BOOL isReturn( SQLRETURN nReturn );
-    static BOOL isStmtAttr( SQLINTEGER nAttribute );
-    static BOOL isStmtOption( SQLUSMALLINT nOption );
-    static BOOL isTypeC( SQLSMALLINT nType );
-    static BOOL isTypeSQL( SQLSMALLINT nType );
-    static BOOL isConciseTypeC( SQLSMALLINT nType, SQLINTEGER nODBCVersion = SQL_OV_ODBC3
);
-    static BOOL isConciseTypeSQL( SQLSMALLINT nType, SQLINTEGER nODBCVersion =
SQL_OV_ODBC3 );
-    static BOOL isIntervalConciseTypeC( SQLSMALLINT nType );
-    static BOOL isIntervalConciseTypeSQL( SQLSMALLINT nType );
-    static BOOL isDateTimeCode( SQLSMALLINT nCode );
-    static BOOL isIntervalCode( SQLSMALLINT nCode );
-    static BOOL isCharTypeSQL( SQLSMALLINT nType );
-    static BOOL isBinTypeSQL( SQLSMALLINT nType );
-    static BOOL isDateTimeTypeSQL( SQLSMALLINT nType, SQLINTEGER nODBCVersion =
SQL_OV_ODBC3 );
-    static BOOL isCharTypeC( SQLSMALLINT nType );
-    static BOOL isBinTypeC( SQLSMALLINT nType );
-    static BOOL isBooleanValue( SQLINTEGER nValue );
-    static BOOL isDescField( SQLSMALLINT nField );
-    static BOOL isDescAllocType( SQLSMALLINT nAllocType );
-    static BOOL isDescBindType( SQLINTEGER nBindType );
-    static BOOL isDescNullable( SQLSMALLINT nNullable );
-    static BOOL isDescParameterType( SQLSMALLINT nParameterType );
-    static BOOL isDescSearchable( SQLSMALLINT nSearchable );
-    static BOOL isDescUnnamed( SQLSMALLINT nUnnamed );
-    static BOOL isDescUpdatable( SQLSMALLINT nUpdatable );    
-    /*@}*/
-
-};
-
 #endif
 

Modified: trunk/SDK/MYSQLPlus/Library/CMakeLists.txt
===================================================================
--- trunk/SDK/MYSQLPlus/Library/CMakeLists.txt	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/CMakeLists.txt	2007-04-03 12:01:30 UTC (rev 835)
@@ -46,6 +46,8 @@
 	MStatement.cpp
 	MStatement_catalog.cpp
 	MStatement_props.cpp
+	MValidator.cpp
+	MValidator.h
 )
 
 INCLUDE_DIRECTORIES(

Modified: trunk/SDK/MYSQLPlus/Library/Library.pro
===================================================================
--- trunk/SDK/MYSQLPlus/Library/Library.pro	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/Library.pro	2007-04-03 12:01:30 UTC (rev 835)
@@ -39,6 +39,7 @@
                 MDescriptorRecordIRD.h \
                 MDiagnostic.h \
                 MDiagnosticRecord.h \
+                MValidator.h \
                 MInternal.h
 
 SOURCES		= \
@@ -66,7 +67,8 @@
                 MDescriptorRecordIPD.cpp \
                 MDescriptorRecordIRD.cpp \
                 MDiagnostic.cpp \
-                MDiagnosticRecord.cpp
+                MDiagnosticRecord.cpp \
+                MValidator.cpp
 
 ResultPlus {
         DEFINES += RESULTPLUS

Modified: trunk/SDK/MYSQLPlus/Library/MConnection_props.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MConnection_props.cpp	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/MConnection_props.cpp	2007-04-03 12:01:30 UTC (rev 835)
@@ -3,6 +3,7 @@
  */
 
 #include "MInternal.h"
+#include "MValidator.h"
 
 SQLRETURN MConnection::setConnectAttr( SQLINTEGER nAttribute, SQLPOINTER pValue,
SQLINTEGER nStringLength )
 {
@@ -4077,7 +4078,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isDescBindType(nBindType))
+    if (!MValidator::isDescBindType(nBindType))
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY092B ) );
 
     this->nBindType = nBindType;

Modified: trunk/SDK/MYSQLPlus/Library/MDescriptor.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MDescriptor.cpp	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/MDescriptor.cpp	2007-04-03 12:01:30 UTC (rev 835)
@@ -1,4 +1,5 @@
 #include "MInternal.h"
+#include "MValidator.h"
 
 /*!
     \brief  Initializes a new MDescriptor.
@@ -307,7 +308,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isDescBindType(nBindType))
+    if (!MValidator::isDescBindType(nBindType))
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY092B ) );
 
     this->nBindType = nBindType;

Modified: trunk/SDK/MYSQLPlus/Library/MDescriptorRecord.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MDescriptorRecord.cpp	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/MDescriptorRecord.cpp	2007-04-03 12:01:30 UTC (rev 835)
@@ -1,4 +1,5 @@
 #include "MInternal.h"
+#include "MValidator.h"
 
 /*!
     \brief  Allocate a descriptor record.
@@ -149,7 +150,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isBooleanValue(nAutoUniqueValue))
+    if (!MValidator::isBooleanValue(nAutoUniqueValue))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
 
     this->nAutoUniqueValue = nAutoUniqueValue;
@@ -179,7 +180,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isBooleanValue(nCaseSensitive))
+    if (!MValidator::isBooleanValue(nCaseSensitive))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
 
     this->nCaseSensitive = nCaseSensitive;
@@ -322,7 +323,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isDescNullable(nNullable))
+    if (!MValidator::isDescNullable(nNullable))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
 
     this->nNullable = nNullable;
@@ -371,7 +372,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isDescParameterType(nParameterType))
+    if (!MValidator::isDescParameterType(nParameterType))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
     
     this->nParameterType = nParameterType;
@@ -392,7 +393,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isBooleanValue(nRowver))
+    if (!MValidator::isBooleanValue(nRowver))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
 
     this->nRowver = nRowver;
@@ -422,7 +423,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isDescSearchable(nSearchable))
+    if (!MValidator::isDescSearchable(nSearchable))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
 
     this->nSearchable = nSearchable;
@@ -461,7 +462,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isDescUnnamed(nUnnamed))
+    if (!MValidator::isDescUnnamed(nUnnamed))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
 
     this->nUnnamed = nUnnamed;
@@ -473,7 +474,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isBooleanValue(nUnsigned))
+    if (!MValidator::isBooleanValue(nUnsigned))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
 
     this->nUnsigned = nUnsigned;
@@ -485,7 +486,7 @@
 {
     MYODBCDbgEnter();
 
-    if (!MYODBCCValidator::isDescUpdatable(nUpdatable))
+    if (!MValidator::isDescUpdatable(nUpdatable))
         MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::STATE_HY092B ) );
 
     this->nUpdatable = nUpdatable;

Modified: trunk/SDK/MYSQLPlus/Library/MResult_data_toC.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult_data_toC.cpp	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/MResult_data_toC.cpp	2007-04-03 12:01:30 UTC (rev 835)
@@ -7,6 +7,7 @@
 #include "MInternal.h"
 
 #include "MDataConvert.h"
+#include "MValidator.h"
 
 MStateGetData::MStateGetData()
 {
@@ -104,7 +105,7 @@
 
         The argument TargetType was neither a valid data type, SQL_C_DEFAULT, nor
SQL_ARD_TYPE.
     */
-    if (!MYODBCCValidator::isConciseTypeC(nTargetType,
getEnvironment()->getODBCVersion()) &&
+    if (!MValidator::isConciseTypeC(nTargetType, getEnvironment()->getODBCVersion())
&&
         nTargetType != SQL_C_DEFAULT &&
         nTargetType != SQL_ARD_TYPE )
     {

Modified: trunk/SDK/MYSQLPlus/Library/MStatement.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2007-04-03 12:01:30 UTC (rev 835)
@@ -1,4 +1,5 @@
 #include "MInternal.h"
+#include "MValidator.h"
 
 /*!
     \brief  Construct a MStatement.
@@ -917,8 +918,8 @@
     */
     if (nInputOutputType == SQL_PARAM_OUTPUT &&
         !pParameterValue &&
-        (MYODBCCValidator::isCharTypeC(nValueType) ||
-         MYODBCCValidator::isBinTypeC(nValueType)) &&
+        (MValidator::isCharTypeC(nValueType) ||
+         MValidator::isBinTypeC(nValueType)) &&
         nBufferLength > 0 )
     {
         MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY009 ) );

Added: trunk/SDK/MYSQLPlus/Library/MValidator.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MValidator.cpp	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/MValidator.cpp	2007-04-03 12:01:30 UTC (rev 835)
@@ -0,0 +1,1077 @@
+/*! 
+    \file     MYODBCC.cpp
+    \author   Peter Harvey <pharvey@stripped>
+              Copyright (C) MySQL AB 2004-2007, Released under GPL.
+    \version  Connector/ODBC v5
+    \date       2007
+    \brief    Code to provide some enhancements to C/C++.
+    
+    \license  Copyright (C) 2004-2007 MySQL AB
+
+              This program is free software; you can redistribute it and/or modify
+              it under the terms of the GNU General Public License as published by
+              the Free Software Foundation; either version 2 of the License, or
+              (at your option) any later version.
+            
+              There are special exceptions to the terms and conditions of the GPL as it
+              is applied to this software. View the full text of the exception in file
+              EXCEPTIONS in the directory of this software distribution.
+            
+              This program is distributed in the hope that it will be useful,
+              but WITHOUT ANY WARRANTY; without even the implied warranty of
+              MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+              GNU General Public License for more details.
+            
+              You should have received a copy of the GNU General Public License
+              along with this program; if not, write to the Free Software
+              Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+#include "MValidator.h"
+
+BOOL MValidator::isQuoteNeededSQL( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_CHAR: 
+        case SQL_VARCHAR:
+        case SQL_LONGVARCHAR:
+        case SQL_WCHAR:
+        case SQL_WVARCHAR:
+        case SQL_WLONGVARCHAR:
+        case SQL_VARBINARY:
+        case SQL_LONGVARBINARY:
+        case SQL_TYPE_DATE:
+        case SQL_TYPE_TIME:
+        case SQL_TYPE_TIMESTAMP:
+        case SQL_GUID:
+        case SQL_DATE:          /* ODBC v2 */
+        case SQL_TIME:          /* ODBC v2 */
+        case SQL_TIMESTAMP:     /* ODBC v2 */
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isConnectAttr( SQLINTEGER nAttribute )
+{
+    switch ( nAttribute )
+    {
+        case SQL_ATTR_ACCESS_MODE:
+        case SQL_ATTR_ASYNC_ENABLE:
+        case SQL_ATTR_AUTO_IPD:
+        case SQL_ATTR_AUTOCOMMIT:
+        case SQL_ATTR_CONNECTION_DEAD:
+        case SQL_ATTR_CONNECTION_TIMEOUT:
+        case SQL_ATTR_CURRENT_CATALOG:
+        case SQL_ATTR_LOGIN_TIMEOUT:
+        case SQL_ATTR_METADATA_ID:
+        case SQL_ATTR_ODBC_CURSORS:
+        case SQL_ATTR_PACKET_SIZE:
+        case SQL_ATTR_QUIET_MODE:
+        case SQL_ATTR_TRACE:
+        case SQL_ATTR_TRACEFILE:
+        case SQL_ATTR_TRANSLATE_LIB:
+        case SQL_ATTR_TRANSLATE_OPTION:
+        case SQL_ATTR_TXN_ISOLATION:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isConnectOption( SQLUSMALLINT nOption )
+{
+    switch ( nOption )
+    {
+        case SQL_ACCESS_MODE:
+        case SQL_AUTOCOMMIT:
+        case SQL_CURRENT_QUALIFIER:
+        case SQL_LOGIN_TIMEOUT:
+        case SQL_ODBC_CURSORS:
+        case SQL_OPT_TRACE:
+        case SQL_OPT_TRACEFILE:
+        case SQL_PACKET_SIZE:
+        case SQL_QUIET_MODE:
+        case SQL_TRANSLATE_DLL:
+        case SQL_TRANSLATE_OPTION:
+        case SQL_TXN_ISOLATION:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDiagField( SQLSMALLINT nDiagField )
+{
+    switch ( nDiagField )
+    {
+        case SQL_DIAG_CURSOR_ROW_COUNT:
+        case SQL_DIAG_DYNAMIC_FUNCTION:
+        case SQL_DIAG_DYNAMIC_FUNCTION_CODE:
+        case SQL_DIAG_NUMBER:
+        case SQL_DIAG_RETURNCODE:
+        case SQL_DIAG_ROW_COUNT:
+        case SQL_DIAG_CLASS_ORIGIN:
+        case SQL_DIAG_COLUMN_NUMBER:
+        case SQL_DIAG_CONNECTION_NAME:
+        case SQL_DIAG_MESSAGE_TEXT:
+        case SQL_DIAG_NATIVE:
+        case SQL_DIAG_ROW_NUMBER:
+        case SQL_DIAG_SERVER_NAME:
+        case SQL_DIAG_SQLSTATE:
+        case SQL_DIAG_SUBCLASS_ORIGIN:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isEnvAttr( SQLINTEGER nAttribute )
+{
+    switch ( nAttribute )
+    {
+        case SQL_ATTR_CONNECTION_POOLING:
+        case SQL_ATTR_CP_MATCH:
+        case SQL_ATTR_ODBC_VERSION:
+        case SQL_ATTR_OUTPUT_NTS:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isFunctions( SQLUSMALLINT nFunction )
+{
+    switch ( nFunction )
+    {
+        case SQL_API_ALL_FUNCTIONS:
+        case SQL_API_SQLALLOCCONNECT:
+        case SQL_API_SQLALLOCENV:
+        case SQL_API_SQLALLOCHANDLE:
+        case SQL_API_SQLALLOCSTMT:
+        case SQL_API_SQLBINDCOL:
+        case SQL_API_SQLCANCEL:
+        case SQL_API_SQLCLOSECURSOR:
+/* Same value as SQL_API_SQLCOLATTRIBUTES...
+        case SQL_API_SQLCOLATTRIBUTE:
+            return "SQL_API_SQLCOLATTRIBUTE";
+*/
+        case SQL_API_SQLCOLUMNS:
+        case SQL_API_SQLCONNECT:
+        case SQL_API_SQLCOPYDESC:
+        case SQL_API_SQLDATASOURCES:
+        case SQL_API_SQLDESCRIBECOL:
+        case SQL_API_SQLDISCONNECT:
+        case SQL_API_SQLENDTRAN:
+        case SQL_API_SQLERROR:
+        case SQL_API_SQLEXECDIRECT:
+        case SQL_API_SQLEXECUTE:
+        case SQL_API_SQLFETCH:
+        case SQL_API_SQLFETCHSCROLL:
+        case SQL_API_SQLFREECONNECT:
+        case SQL_API_SQLFREEENV:
+        case SQL_API_SQLFREEHANDLE:
+        case SQL_API_SQLFREESTMT:
+        case SQL_API_SQLGETCONNECTATTR:
+        case SQL_API_SQLGETCONNECTOPTION:
+        case SQL_API_SQLGETCURSORNAME:
+        case SQL_API_SQLGETDATA:
+        case SQL_API_SQLGETDESCFIELD:
+        case SQL_API_SQLGETDESCREC:
+        case SQL_API_SQLGETDIAGFIELD:
+        case SQL_API_SQLGETDIAGREC:
+        case SQL_API_SQLGETENVATTR:
+        case SQL_API_SQLGETFUNCTIONS:
+        case SQL_API_SQLGETINFO:
+        case SQL_API_SQLGETSTMTATTR:
+        case SQL_API_SQLGETSTMTOPTION:
+        case SQL_API_SQLGETTYPEINFO:
+        case SQL_API_SQLNUMRESULTCOLS:
+        case SQL_API_SQLPARAMDATA:
+        case SQL_API_SQLPREPARE:
+        case SQL_API_SQLPUTDATA:
+        case SQL_API_SQLROWCOUNT:
+        case SQL_API_SQLSETCONNECTATTR:
+        case SQL_API_SQLSETCONNECTOPTION:
+        case SQL_API_SQLSETCURSORNAME:
+        case SQL_API_SQLSETDESCFIELD:
+        case SQL_API_SQLSETDESCREC:
+        case SQL_API_SQLSETENVATTR:
+        case SQL_API_SQLSETSTMTATTR:
+        case SQL_API_SQLSETSTMTOPTION:
+        case SQL_API_SQLSPECIALCOLUMNS:
+        case SQL_API_SQLSTATISTICS:
+        case SQL_API_SQLTABLES:
+        case SQL_API_SQLTRANSACT:
+        case SQL_API_SQLBULKOPERATIONS:
+        case SQL_API_SQLBINDPARAMETER:
+        case SQL_API_SQLBROWSECONNECT:
+        case SQL_API_SQLCOLATTRIBUTES:
+        case SQL_API_SQLCOLUMNPRIVILEGES :
+        case SQL_API_SQLDESCRIBEPARAM:
+        case SQL_API_SQLDRIVERCONNECT:
+        case SQL_API_SQLDRIVERS:
+        case SQL_API_SQLEXTENDEDFETCH:
+        case SQL_API_SQLFOREIGNKEYS:
+        case SQL_API_SQLMORERESULTS:
+        case SQL_API_SQLNATIVESQL:
+        case SQL_API_SQLNUMPARAMS:
+        case SQL_API_SQLPARAMOPTIONS:
+        case SQL_API_SQLPRIMARYKEYS:
+        case SQL_API_SQLPROCEDURECOLUMNS:
+        case SQL_API_SQLPROCEDURES:
+        case SQL_API_SQLSETPOS:
+        case SQL_API_SQLSETSCROLLOPTIONS:
+        case SQL_API_SQLTABLEPRIVILEGES:
+        case SQL_API_ODBC3_ALL_FUNCTIONS:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isHandleType( SQLSMALLINT nHandleType )
+{
+    switch ( nHandleType )
+    {
+        case SQL_HANDLE_ENV:
+        case SQL_HANDLE_DBC:
+        case SQL_HANDLE_STMT:
+        case SQL_HANDLE_DESC:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isInfoType( SQLUSMALLINT nInfoType )
+{
+    switch ( nInfoType )
+    {
+        case SQL_ACCESSIBLE_PROCEDURES:
+        case SQL_ACCESSIBLE_TABLES:
+        case SQL_ACTIVE_ENVIRONMENTS:
+        case SQL_AGGREGATE_FUNCTIONS:
+        case SQL_ALTER_DOMAIN:
+        case SQL_ALTER_TABLE:
+        case SQL_ASYNC_MODE:
+        case SQL_BATCH_ROW_COUNT:
+        case SQL_BATCH_SUPPORT:
+        case SQL_BOOKMARK_PERSISTENCE:
+        case SQL_CATALOG_LOCATION:
+        case SQL_CATALOG_NAME:
+        case SQL_CATALOG_NAME_SEPARATOR:
+        case SQL_CATALOG_TERM:
+        case SQL_CATALOG_USAGE:
+        case SQL_COLLATION_SEQ:
+        case SQL_COLUMN_ALIAS:
+        case SQL_CONCAT_NULL_BEHAVIOR:
+        case SQL_CONVERT_BIGINT:
+        case SQL_CONVERT_BINARY:
+        case SQL_CONVERT_BIT:
+        case SQL_CONVERT_CHAR:
+#ifdef SQL_CONVERT_GUID
+        case SQL_CONVERT_GUID:
+#endif
+        case SQL_CONVERT_DATE:
+        case SQL_CONVERT_DECIMAL:
+        case SQL_CONVERT_DOUBLE:
+        case SQL_CONVERT_FLOAT:
+        case SQL_CONVERT_INTEGER:
+        case SQL_CONVERT_INTERVAL_YEAR_MONTH:
+        case SQL_CONVERT_INTERVAL_DAY_TIME:
+        case SQL_CONVERT_LONGVARBINARY:
+        case SQL_CONVERT_LONGVARCHAR:
+        case SQL_CONVERT_NUMERIC:
+        case SQL_CONVERT_REAL:
+        case SQL_CONVERT_SMALLINT:
+        case SQL_CONVERT_TIME:
+        case SQL_CONVERT_TIMESTAMP:
+        case SQL_CONVERT_TINYINT:
+        case SQL_CONVERT_VARBINARY:
+        case SQL_CONVERT_VARCHAR:
+        case SQL_CONVERT_FUNCTIONS:
+        case SQL_CORRELATION_NAME:
+        case SQL_CREATE_ASSERTION:
+        case SQL_CREATE_CHARACTER_SET:
+        case SQL_CREATE_COLLATION:
+        case SQL_CREATE_DOMAIN:
+        case SQL_CREATE_SCHEMA:
+        case SQL_CREATE_TABLE:
+        case SQL_CREATE_TRANSLATION:
+        case SQL_CREATE_VIEW:
+        case SQL_CURSOR_COMMIT_BEHAVIOR:
+        case SQL_CURSOR_ROLLBACK_BEHAVIOR:
+        case SQL_CURSOR_SENSITIVITY:
+        case SQL_DATA_SOURCE_NAME:
+        case SQL_DATA_SOURCE_READ_ONLY:
+        case SQL_DATABASE_NAME:
+        case SQL_DATETIME_LITERALS:
+        case SQL_DBMS_NAME:
+        case SQL_DBMS_VER:
+        case SQL_DDL_INDEX:
+        case SQL_DEFAULT_TXN_ISOLATION:
+        case SQL_DESCRIBE_PARAMETER:
+        case SQL_DM_VER:
+        case SQL_DRIVER_HDBC:
+        case SQL_DRIVER_HENV:
+        case SQL_DRIVER_HDESC:
+        case SQL_DRIVER_HLIB:
+        case SQL_DRIVER_HSTMT:
+        case SQL_DRIVER_NAME:
+        case SQL_DRIVER_ODBC_VER:
+        case SQL_DRIVER_VER:
+        case SQL_DROP_ASSERTION:
+        case SQL_DROP_CHARACTER_SET:
+        case SQL_DROP_COLLATION:
+        case SQL_DROP_DOMAIN:
+        case SQL_DROP_SCHEMA:
+        case SQL_DROP_TABLE:
+        case SQL_DROP_TRANSLATION:
+        case SQL_DROP_VIEW:
+        case SQL_DYNAMIC_CURSOR_ATTRIBUTES1:
+        case SQL_DYNAMIC_CURSOR_ATTRIBUTES2:
+        case SQL_EXPRESSIONS_IN_ORDERBY:
+        case SQL_FILE_USAGE:
+        case SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1:
+        case SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2:
+        case SQL_GETDATA_EXTENSIONS:
+        case SQL_GROUP_BY:
+        case SQL_IDENTIFIER_CASE:
+        case SQL_IDENTIFIER_QUOTE_CHAR:
+        case SQL_INDEX_KEYWORDS:
+        case SQL_INFO_SCHEMA_VIEWS:
+        case SQL_INSERT_STATEMENT:
+        case SQL_INTEGRITY:
+        case SQL_KEYSET_CURSOR_ATTRIBUTES1:
+        case SQL_KEYSET_CURSOR_ATTRIBUTES2:
+        case SQL_KEYWORDS:
+        case SQL_LIKE_ESCAPE_CLAUSE:
+        case SQL_MAX_ASYNC_CONCURRENT_STATEMENTS:
+        case SQL_MAX_BINARY_LITERAL_LEN:
+        case SQL_MAX_CATALOG_NAME_LEN:
+        case SQL_MAX_CHAR_LITERAL_LEN:
+        case SQL_MAX_COLUMN_NAME_LEN:
+        case SQL_MAX_COLUMNS_IN_GROUP_BY:
+        case SQL_MAX_COLUMNS_IN_INDEX:
+        case SQL_MAX_COLUMNS_IN_ORDER_BY:
+        case SQL_MAX_COLUMNS_IN_SELECT:
+        case SQL_MAX_COLUMNS_IN_TABLE:
+        case SQL_MAX_CONCURRENT_ACTIVITIES:
+        case SQL_MAX_CURSOR_NAME_LEN:
+        case SQL_MAX_DRIVER_CONNECTIONS:
+        case SQL_MAX_IDENTIFIER_LEN:
+        case SQL_MAX_INDEX_SIZE:
+        case SQL_MAX_PROCEDURE_NAME_LEN:
+        case SQL_MAX_ROW_SIZE:
+        case SQL_MAX_ROW_SIZE_INCLUDES_LONG:
+        case SQL_MAX_SCHEMA_NAME_LEN:
+        case SQL_MAX_STATEMENT_LEN:
+        case SQL_MAX_TABLE_NAME_LEN:
+        case SQL_MAX_TABLES_IN_SELECT:
+        case SQL_MAX_USER_NAME_LEN:
+        case SQL_MULT_RESULT_SETS:
+        case SQL_MULTIPLE_ACTIVE_TXN:
+        case SQL_NEED_LONG_DATA_LEN:
+        case SQL_NON_NULLABLE_COLUMNS:
+        case SQL_NULL_COLLATION:
+        case SQL_NUMERIC_FUNCTIONS:
+        case SQL_ODBC_API_CONFORMANCE:
+        case SQL_ODBC_INTERFACE_CONFORMANCE:
+        case SQL_ODBC_VER:
+        case SQL_OJ_CAPABILITIES:
+        case SQL_ORDER_BY_COLUMNS_IN_SELECT:
+        case SQL_PARAM_ARRAY_ROW_COUNTS:
+        case SQL_PARAM_ARRAY_SELECTS:
+        case SQL_PROCEDURE_TERM:
+        case SQL_PROCEDURES:
+        case SQL_POS_OPERATIONS:
+        case SQL_QUOTED_IDENTIFIER_CASE:
+        case SQL_ROW_UPDATES:
+        case SQL_SCHEMA_TERM:
+        case SQL_SCHEMA_USAGE:
+        case SQL_SCROLL_OPTIONS:
+        case SQL_SEARCH_PATTERN_ESCAPE:
+        case SQL_SERVER_NAME:
+        case SQL_SPECIAL_CHARACTERS:
+        case SQL_SQL_CONFORMANCE:
+        case SQL_SQL92_DATETIME_FUNCTIONS:
+        case SQL_SQL92_FOREIGN_KEY_DELETE_RULE:
+        case SQL_SQL92_FOREIGN_KEY_UPDATE_RULE:
+        case SQL_SQL92_GRANT:
+        case SQL_SQL92_NUMERIC_VALUE_FUNCTIONS:
+        case SQL_SQL92_PREDICATES:
+        case SQL_SQL92_RELATIONAL_JOIN_OPERATORS:
+        case SQL_SQL92_REVOKE:
+        case SQL_SQL92_ROW_VALUE_CONSTRUCTOR:
+        case SQL_SQL92_STRING_FUNCTIONS:
+        case SQL_SQL92_VALUE_EXPRESSIONS:
+        case SQL_STANDARD_CLI_CONFORMANCE:
+        case SQL_STATIC_CURSOR_ATTRIBUTES1:
+        case SQL_STATIC_CURSOR_ATTRIBUTES2:
+        case SQL_STRING_FUNCTIONS:
+        case SQL_SUBQUERIES:
+        case SQL_SYSTEM_FUNCTIONS:
+        case SQL_TABLE_TERM:
+        case SQL_TIMEDATE_ADD_INTERVALS:
+        case SQL_TIMEDATE_DIFF_INTERVALS:
+        case SQL_TIMEDATE_FUNCTIONS:
+        case SQL_TXN_CAPABLE:
+        case SQL_TXN_ISOLATION_OPTION:
+        case SQL_UNION:
+        case SQL_USER_NAME:
+        case SQL_XOPEN_CLI_YEAR:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isReturn( SQLRETURN nReturn )
+{
+    switch ( nReturn )
+    {
+        case SQL_SUCCESS:
+        case SQL_SUCCESS_WITH_INFO:
+#if (ODBCVER >= 0x0300)
+        case SQL_NO_DATA:
+#endif
+        case SQL_ERROR:
+        case SQL_INVALID_HANDLE:
+        case SQL_STILL_EXECUTING:
+        case SQL_NEED_DATA:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isStmtAttr( SQLINTEGER nAttribute )
+{
+    switch ( nAttribute )
+    {
+        case SQL_ATTR_APP_ROW_DESC:
+        case SQL_ATTR_ASYNC_ENABLE:
+        case SQL_ATTR_CONCURRENCY:
+        case SQL_ATTR_CURSOR_SCROLLABLE:
+        case SQL_ATTR_CURSOR_SENSITIVITY:
+        case SQL_ATTR_CURSOR_TYPE:
+        case SQL_ATTR_ENABLE_AUTO_IPD:
+        case SQL_ATTR_FETCH_BOOKMARK_PTR:
+        case SQL_ATTR_IMP_PARAM_DESC:
+        case SQL_ATTR_IMP_ROW_DESC:
+        case SQL_ATTR_KEYSET_SIZE:
+        case SQL_ATTR_MAX_LENGTH:
+        case SQL_ATTR_MAX_ROWS:
+        case SQL_ATTR_METADATA_ID:
+        case SQL_ATTR_NOSCAN:
+        case SQL_ATTR_PARAM_BIND_OFFSET_PTR:
+        case SQL_ATTR_PARAM_BIND_TYPE:
+        case SQL_ATTR_PARAM_OPERATION_PTR:
+        case SQL_ATTR_PARAM_STATUS_PTR:
+        case SQL_ATTR_PARAMS_PROCESSED_PTR:
+        case SQL_ATTR_PARAMSET_SIZE:
+        case SQL_ATTR_QUERY_TIMEOUT:
+        case SQL_ATTR_RETRIEVE_DATA:
+        case SQL_ATTR_ROW_ARRAY_SIZE:
+        case SQL_ATTR_ROW_BIND_OFFSET_PTR:
+        case SQL_ATTR_ROW_BIND_TYPE:
+        case SQL_ATTR_ROW_NUMBER:
+        case SQL_ATTR_ROW_OPERATION_PTR:
+        case SQL_ATTR_ROW_STATUS_PTR:
+        case SQL_ATTR_ROWS_FETCHED_PTR:
+        case SQL_ATTR_SIMULATE_CURSOR:
+        case SQL_ATTR_USE_BOOKMARKS:
+            return true;
+    }
+
+    /* fall back to odbc 2 statement option */
+    return isStmtOption( nAttribute );
+}
+
+BOOL MValidator::isStmtOption( SQLUSMALLINT nOption )
+{
+    switch ( nOption )
+    {
+        case SQL_ASYNC_ENABLE:
+        case SQL_BIND_TYPE:
+        case SQL_CONCURRENCY:
+        case SQL_CURSOR_TYPE:
+        case SQL_GET_BOOKMARK:
+        case SQL_KEYSET_SIZE:
+        case SQL_MAX_LENGTH:
+        case SQL_MAX_ROWS:
+        case SQL_NOSCAN:
+        case SQL_QUERY_TIMEOUT:
+        case SQL_RETRIEVE_DATA:
+        case SQL_ROWSET_SIZE:
+        case SQL_ROW_NUMBER:
+        case SQL_SIMULATE_CURSOR:
+        case SQL_USE_BOOKMARKS:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isTypeC( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_C_CHAR:              /*              1 */
+        case SQL_C_WCHAR:
+        case SQL_C_SSHORT:            /*  5 + -20 = -15 */
+        case SQL_C_USHORT:            /*  5 + -22 = -17 */
+        case SQL_C_SLONG:             /*  4 + -20 = -16 */
+        case SQL_C_ULONG:             /*  4 + -22 = -18 */   
+        case SQL_C_FLOAT:             /*              7 */
+        case SQL_C_DOUBLE:            /*              8 */
+        case SQL_C_BIT:               /*             -7 */
+        case SQL_C_STINYINT:          /* -6 + -20 = -26 */ 
+        case SQL_C_UTINYINT:          /* -6 + -22 = -28 */ 
+        case SQL_C_SBIGINT:           /* -5 + -20 = -25 */
+        case SQL_C_UBIGINT:           /* -5 + -22 = -27 */
+        case SQL_C_BINARY:            /*             -2 */
+     /* case SQL_C_VARBOOKMARK: */    /*   SQL_C_BINARY */
+        case SQL_C_NUMERIC:           /*              2 */
+        case SQL_C_GUID:              /*            -11 */
+        case SQL_C_DEFAULT:           /*             99 */
+        case SQL_DATETIME:            /*              9 */
+        case SQL_INTERVAL:            /*             10 */
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isTypeSQL( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_CHAR:
+        case SQL_VARCHAR:
+        case SQL_LONGVARCHAR:
+        case SQL_WCHAR:
+        case SQL_WVARCHAR:
+        case SQL_WLONGVARCHAR:
+        case SQL_DECIMAL:
+        case SQL_NUMERIC:
+        case SQL_SMALLINT:
+        case SQL_INTEGER:
+        case SQL_REAL:
+        case SQL_FLOAT:
+        case SQL_DOUBLE:
+        case SQL_BIT:
+        case SQL_TINYINT:
+        case SQL_BIGINT:
+        case SQL_BINARY:
+        case SQL_VARBINARY:
+        case SQL_LONGVARBINARY:
+        case SQL_DATETIME:
+        case SQL_INTERVAL:
+        case SQL_GUID:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isConciseTypeC( SQLSMALLINT nType, SQLINTEGER nODBCVersion )
+{
+    /*! 
+        \internal ODBC RULE
+
+        The SQL_ATTR_ODBC_VERSION attribute affects three different aspects of an 
+        ODBC 3.x driver's behavior: 
+
+        - SQLSTATEs 
+        - Data types for date, time, and timestamp 
+        - The CatalogName argument.
+
+        \note
+
+        We could put all of the ODBC v3 types and the supported ODBC v2 types in one
switch
+        but separating them is more accurate as it is often an error to use wrong type.
+    */
+    if ( nODBCVersion == SQL_OV_ODBC3 )
+    {
+        switch ( nType )
+        {
+            case SQL_C_TYPE_DATE:
+            case SQL_C_TYPE_TIME:
+            case SQL_C_TYPE_TIMESTAMP:
+                return true;
+        }
+    }
+    else if ( nODBCVersion == SQL_OV_ODBC2 )
+    {
+        /*!
+            \note   We need to support ODBC v3 date/time types here even when we are told
to be an ODBC v2
+                    driver because the DM will map it to ODBC v3. We support the ODBC v2
datetime types for
+                    the case where an app links to us directly. 
+        */
+        switch ( nType )
+        {
+            case SQL_C_DATE:        
+            case SQL_C_TIME:        
+            case SQL_C_TIMESTAMP:   
+            case SQL_C_TYPE_DATE:
+            case SQL_C_TYPE_TIME:
+            case SQL_C_TYPE_TIMESTAMP:
+                return true;
+        }
+    }
+
+    /* */
+    switch ( nType )
+    {                                 /* MS VALUES      */
+        case SQL_C_CHAR:              /*              1 */
+        case SQL_C_NUMERIC:           /*              2 */
+        case SQL_C_FLOAT:             /*              7 */
+        case SQL_C_DOUBLE:            /*              8 */
+        case SQL_C_WCHAR:             /*             -8 */
+        case SQL_C_SHORT:             /*              5 */
+        case SQL_C_SSHORT:            /*  5 + -20 = -15 */
+        case SQL_C_USHORT:            /*  5 + -22 = -17 */
+        case SQL_C_LONG:              /*              4 */
+        case SQL_C_SLONG:             /*  4 + -20 = -16 */
+        case SQL_C_ULONG:             /*  4 + -22 = -18 */   
+        case SQL_C_BIT:               /*             -7 */
+        case SQL_C_TINYINT:           /*             -6 */
+        case SQL_C_STINYINT:          /* -6 + -20 = -26 */ 
+        case SQL_C_UTINYINT:          /* -6 + -22 = -28 */ 
+        case SQL_C_SBIGINT:           /* -5 + -20 = -25 */
+        case SQL_C_UBIGINT:           /* -5 + -22 = -27 */
+        case SQL_C_BINARY:            /*             -2 */
+     /* case SQL_C_VARBOOKMARK: */    /*   SQL_C_BINARY */
+        case SQL_C_GUID:              /*            -11 */
+        case SQL_C_DEFAULT:           /*             99 */
+        case SQL_C_INTERVAL_MONTH:                    /* 102  */
+        case SQL_C_INTERVAL_YEAR:                     /* 101  */
+        case SQL_C_INTERVAL_YEAR_TO_MONTH:            /* 107  */
+        case SQL_C_INTERVAL_DAY:                      /* 103  */
+        case SQL_C_INTERVAL_HOUR:                     /* 104  */
+        case SQL_C_INTERVAL_MINUTE:                   /* 105  */
+        case SQL_C_INTERVAL_SECOND:                   /* 106  */
+        case SQL_C_INTERVAL_DAY_TO_HOUR:              /* 108  */
+        case SQL_C_INTERVAL_DAY_TO_MINUTE:            /* 109  */  
+        case SQL_C_INTERVAL_DAY_TO_SECOND:            /* 110  */
+        case SQL_C_INTERVAL_HOUR_TO_MINUTE:           /* 111  */
+        case SQL_C_INTERVAL_HOUR_TO_SECOND:           /* 112  */
+        case SQL_C_INTERVAL_MINUTE_TO_SECOND:         /* 113  */
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isConciseTypeSQL( SQLSMALLINT nType, SQLINTEGER nODBCVersion )
+{
+    /*! 
+        \internal ODBC RULE
+
+        The SQL_ATTR_ODBC_VERSION attribute affects three different aspects of an 
+        ODBC 3.x driver's behavior: 
+
+        - SQLSTATEs 
+        - Data types for date, time, and timestamp 
+        - The CatalogName argument.
+
+        \note
+
+        We could put all of the ODBC v3 types and the supported ODBC v2 types in one
switch
+        but separating them is more accurate as it is often an error to use wrong type.
+    */
+    if ( nODBCVersion == SQL_OV_ODBC3 )
+    {
+        switch ( nType )
+        {
+            case SQL_TYPE_DATE:
+            case SQL_TYPE_TIME:
+            case SQL_TYPE_TIMESTAMP:
+                return true;
+        }
+    }
+    else if ( nODBCVersion == SQL_OV_ODBC2 )
+    {
+        switch ( nType )
+        {
+            case SQL_DATE:        
+            case SQL_TIME:        
+            case SQL_TIMESTAMP:   
+                return true;
+        }
+    }
+
+    /* */
+    switch ( nType )
+    {
+        case SQL_CHAR:                              /*   1  */
+        case SQL_VARCHAR:                           /*  12  */
+        case SQL_LONGVARCHAR:                       /*  -1  */
+        case SQL_WCHAR:                             /*  -8  */
+        case SQL_WVARCHAR:                          /*  -9  */
+        case SQL_WLONGVARCHAR:                      /* -10  */
+        case SQL_DECIMAL:                           /*   3  */
+        case SQL_NUMERIC:                           /*   2  */
+        case SQL_SMALLINT:                          /*   5  */
+        case SQL_INTEGER:                           /*   4  */
+        case SQL_REAL:                              /*   7  */
+        case SQL_FLOAT:                             /*   6  */
+        case SQL_DOUBLE:                            /*   8  */
+        case SQL_BIT:                               /*  -7  */
+        case SQL_TINYINT:                           /*  -6  */
+        case SQL_BIGINT:                            /*  -5  */
+        case SQL_BINARY:                            /*  -2  */
+        case SQL_VARBINARY:                         /*  -3  */
+        case SQL_LONGVARBINARY:                     /*  -4  */
+        case SQL_INTERVAL_MONTH:                    /* 102  */
+        case SQL_INTERVAL_YEAR:                     /* 101  */
+        case SQL_INTERVAL_YEAR_TO_MONTH:            /* 107  */
+        case SQL_INTERVAL_DAY:                      /* 103  */
+        case SQL_INTERVAL_HOUR:                     /* 104  */
+        case SQL_INTERVAL_MINUTE:                   /* 105  */
+        case SQL_INTERVAL_SECOND:                   /* 106  */
+        case SQL_INTERVAL_DAY_TO_HOUR:              /* 108  */
+        case SQL_INTERVAL_DAY_TO_MINUTE:            /* 109  */  
+        case SQL_INTERVAL_DAY_TO_SECOND:            /* 110  */
+        case SQL_INTERVAL_HOUR_TO_MINUTE:           /* 111  */
+        case SQL_INTERVAL_HOUR_TO_SECOND:           /* 112  */
+        case SQL_INTERVAL_MINUTE_TO_SECOND:         /* 113  */
+        case SQL_GUID:                              /* -11  */
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isIntervalConciseTypeC( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_C_INTERVAL_MONTH:                    /* 102  */
+        case SQL_C_INTERVAL_YEAR:                     /* 101  */
+        case SQL_C_INTERVAL_YEAR_TO_MONTH:            /* 107  */
+        case SQL_C_INTERVAL_DAY:                      /* 103  */
+        case SQL_C_INTERVAL_HOUR:                     /* 104  */
+        case SQL_C_INTERVAL_MINUTE:                   /* 105  */
+        case SQL_C_INTERVAL_SECOND:                   /* 106  */
+        case SQL_C_INTERVAL_DAY_TO_HOUR:              /* 108  */
+        case SQL_C_INTERVAL_DAY_TO_MINUTE:            /* 109  */  
+        case SQL_C_INTERVAL_DAY_TO_SECOND:            /* 110  */
+        case SQL_C_INTERVAL_HOUR_TO_MINUTE:           /* 111  */
+        case SQL_C_INTERVAL_HOUR_TO_SECOND:           /* 112  */
+        case SQL_C_INTERVAL_MINUTE_TO_SECOND:         /* 113  */
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isIntervalConciseTypeSQL( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_INTERVAL_MONTH:                    /* 102  */
+        case SQL_INTERVAL_YEAR:                     /* 101  */
+        case SQL_INTERVAL_YEAR_TO_MONTH:            /* 107  */
+        case SQL_INTERVAL_DAY:                      /* 103  */
+        case SQL_INTERVAL_HOUR:                     /* 104  */
+        case SQL_INTERVAL_MINUTE:                   /* 105  */
+        case SQL_INTERVAL_SECOND:                   /* 106  */
+        case SQL_INTERVAL_DAY_TO_HOUR:              /* 108  */
+        case SQL_INTERVAL_DAY_TO_MINUTE:            /* 109  */  
+        case SQL_INTERVAL_DAY_TO_SECOND:            /* 110  */
+        case SQL_INTERVAL_HOUR_TO_MINUTE:           /* 111  */
+        case SQL_INTERVAL_HOUR_TO_SECOND:           /* 112  */
+        case SQL_INTERVAL_MINUTE_TO_SECOND:         /* 113  */
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDateTimeCode( SQLSMALLINT nCode )
+{
+    switch ( nCode )
+    {
+        case SQL_CODE_DATE:
+        case SQL_CODE_TIME:
+        case SQL_CODE_TIMESTAMP:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isIntervalCode( SQLSMALLINT nCode )
+{
+    switch ( nCode )
+    {
+        case SQL_CODE_YEAR:
+        case SQL_CODE_MONTH:
+        case SQL_CODE_DAY:
+        case SQL_CODE_HOUR:
+        case SQL_CODE_MINUTE:
+        case SQL_CODE_SECOND:
+        case SQL_CODE_YEAR_TO_MONTH:
+        case SQL_CODE_DAY_TO_HOUR:
+        case SQL_CODE_DAY_TO_MINUTE:
+        case SQL_CODE_DAY_TO_SECOND:
+        case SQL_CODE_HOUR_TO_MINUTE:
+        case SQL_CODE_HOUR_TO_SECOND:
+        case SQL_CODE_MINUTE_TO_SECOND:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isCharTypeSQL( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_CHAR:
+        case SQL_VARCHAR:
+        case SQL_LONGVARCHAR:
+        case SQL_WCHAR:
+        case SQL_WVARCHAR:
+        case SQL_WLONGVARCHAR:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isBinTypeSQL( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_BINARY:
+        case SQL_VARBINARY:
+        case SQL_LONGVARBINARY:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDateTimeTypeSQL( SQLSMALLINT nType, SQLINTEGER nODBCVersion )
+{
+    /*! 
+        \internal ODBC RULE
+
+        The SQL_ATTR_ODBC_VERSION attribute affects three different aspects of an 
+        ODBC 3.x driver's behavior: 
+
+        - SQLSTATEs 
+        - Data types for date, time, and timestamp 
+        - The CatalogName argument.
+
+        \note
+
+        We could put all of the ODBC v3 types and the supported ODBC v2 types in one
switch
+        but separating them is more accurate as it is often an error to use wrong type.
+    */
+    if ( nODBCVersion == SQL_OV_ODBC3 )
+    {
+        switch ( nType )
+        {
+            case SQL_TYPE_DATE:
+            case SQL_TYPE_TIME:
+            case SQL_TYPE_TIMESTAMP:
+                return true;
+        }
+    }
+    else if ( nODBCVersion == SQL_OV_ODBC2 )
+    {
+        switch ( nType )
+        {
+            case SQL_DATE:        
+            case SQL_TIME:        
+            case SQL_TIMESTAMP:   
+                return true;
+        }
+    }
+
+    return false;
+}
+
+
+BOOL MValidator::isCharTypeC( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_C_CHAR:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isBinTypeC( SQLSMALLINT nType )
+{
+    switch ( nType )
+    {
+        case SQL_C_BINARY:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isBooleanValue( SQLINTEGER nValue )
+{
+    switch ( nValue )
+    {
+        case SQL_TRUE:
+        case SQL_FALSE:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDescField( SQLSMALLINT nField )
+{
+    switch ( nField )
+    {
+        /* header */
+        case SQL_DESC_ALLOC_TYPE:
+        case SQL_DESC_ARRAY_SIZE:
+        case SQL_DESC_ARRAY_STATUS_PTR:
+        case SQL_DESC_BIND_OFFSET_PTR:
+        case SQL_DESC_BIND_TYPE:
+        case SQL_DESC_COUNT:
+        case SQL_DESC_ROWS_PROCESSED_PTR:
+        /* footer */
+        case SQL_DESC_AUTO_UNIQUE_VALUE:
+        case SQL_DESC_BASE_COLUMN_NAME:
+        case SQL_DESC_BASE_TABLE_NAME:
+        case SQL_DESC_CASE_SENSITIVE:
+        case SQL_DESC_CATALOG_NAME:
+        case SQL_DESC_CONCISE_TYPE:
+        case SQL_DESC_DATA_PTR:
+        case SQL_DESC_DATETIME_INTERVAL_CODE:
+        case SQL_DESC_DATETIME_INTERVAL_PRECISION:
+        case SQL_DESC_DISPLAY_SIZE:
+        case SQL_DESC_FIXED_PREC_SCALE:
+        case SQL_DESC_INDICATOR_PTR:
+        case SQL_DESC_LABEL:
+        case SQL_DESC_LENGTH:
+        case SQL_DESC_LITERAL_PREFIX:
+        case SQL_DESC_LITERAL_SUFFIX:
+        case SQL_DESC_LOCAL_TYPE_NAME:
+        case SQL_DESC_NAME:
+        case SQL_DESC_NULLABLE:
+        case SQL_DESC_OCTET_LENGTH:
+        case SQL_DESC_OCTET_LENGTH_PTR:
+        case SQL_DESC_PARAMETER_TYPE:
+        case SQL_DESC_PRECISION:
+        case SQL_DESC_ROWVER:
+        case SQL_DESC_SCALE:
+        case SQL_DESC_SCHEMA_NAME:
+        case SQL_DESC_SEARCHABLE:
+        case SQL_DESC_TABLE_NAME:
+        case SQL_DESC_TYPE:
+        case SQL_DESC_TYPE_NAME:
+        case SQL_DESC_UNNAMED:
+        case SQL_DESC_UNSIGNED:
+        case SQL_DESC_UPDATABLE:
+            return true;
+    }   
+
+    return false;
+}
+
+BOOL MValidator::isDescAllocType( SQLSMALLINT nAllocType )
+{
+    switch ( nAllocType )
+    {
+        case SQL_DESC_ALLOC_AUTO:
+        case SQL_DESC_ALLOC_USER:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDescBindType( SQLINTEGER nBindType )
+{
+    /*! \todo these values look suspect... */
+    switch ( nBindType )
+    {
+        case SQL_BIND_BY_COLUMN:
+        case SQL_ATTR_ROW_BIND_TYPE:
+        case SQL_ATTR_PARAM_BIND_TYPE:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDescNullable( SQLSMALLINT nNullable )
+{
+    switch ( nNullable )
+    {
+        case SQL_NULLABLE:
+        case SQL_NO_NULLS:
+        case SQL_NULLABLE_UNKNOWN:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDescParameterType( SQLSMALLINT nParameterType )
+{
+    switch ( nParameterType )
+    {
+        case SQL_PARAM_INPUT:
+        case SQL_PARAM_INPUT_OUTPUT:
+        case SQL_PARAM_OUTPUT:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDescSearchable( SQLSMALLINT nSearchable )
+{
+    switch ( nSearchable )
+    {
+        case SQL_PRED_NONE:
+        case SQL_PRED_CHAR:
+        case SQL_PRED_BASIC:
+        case SQL_PRED_SEARCHABLE:
+            return true;
+    }
+
+    return false;
+}
+    
+BOOL MValidator::isDescUnnamed( SQLSMALLINT nUnnamed )
+{
+    switch ( nUnnamed )
+    {
+        case SQL_NAMED:
+        case SQL_UNNAMED:
+            return true;
+    }
+
+    return false;
+}
+
+BOOL MValidator::isDescUpdatable( SQLSMALLINT nUpdatable )
+{
+    switch ( nUpdatable )
+    {
+        case SQL_ATTR_READONLY:
+        case SQL_ATTR_WRITE:
+        case SQL_ATTR_READWRITE_UNKNOWN:
+            return true;
+    }
+
+    return false;
+}

Added: trunk/SDK/MYSQLPlus/Library/MValidator.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MValidator.h	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/MValidator.h	2007-04-03 12:01:30 UTC (rev 835)
@@ -0,0 +1,93 @@
+#ifndef MVALIDATOR_H
+#define MVALIDATOR_H
+/*! 
+    \file     MYODBCC.cpp
+    \author   Peter Harvey <pharvey@stripped>
+              Copyright (C) MySQL AB 2004-2007, Released under GPL.
+    \version  Connector/ODBC v5
+    \date       2007
+    \brief    Code to provide some enhancements to C/C++.
+    
+    \license  Copyright (C) 2004-2007 MySQL AB
+
+              This program is free software; you can redistribute it and/or modify
+              it under the terms of the GNU General Public License as published by
+              the Free Software Foundation; either version 2 of the License, or
+              (at your option) any later version.
+            
+              There are special exceptions to the terms and conditions of the GPL as it
+              is applied to this software. View the full text of the exception in file
+              EXCEPTIONS in the directory of this software distribution.
+            
+              This program is distributed in the hope that it will be useful,
+              but WITHOUT ANY WARRANTY; without even the implied warranty of
+              MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+              GNU General Public License for more details.
+            
+              You should have received a copy of the GNU General Public License
+              along with this program; if not, write to the Free Software
+              Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+/* standard ODBC includes */
+#include <sqltypes.h>
+#include <odbcinst.h>
+#include <sqlext.h>
+
+class MValidator
+{
+public:
+    static BOOL isQuoteNeededSQL(SQLSMALLINT nType);
+
+    /*!
+        \name   Method argument/attribute value validators.
+
+        These are used to validate that a value is valid - where the value is restricted
to a 
+        set of "#define" values.
+
+        The simplest example is isBooleanValue() which returns true if the given value is
either
+        SQL_FALSE or SQL_TRUE.
+
+        \note
+
+        In some cases this type of validation is implied by other processing - negating
+        a need to call these.
+    */
+    /*@{*/
+    static BOOL isConnectAttr(SQLINTEGER nAttribute);
+    static BOOL isConnectOption(SQLUSMALLINT nOption);
+    static BOOL isDiagField(SQLSMALLINT nDiagField);
+    static BOOL isEnvAttr(SQLINTEGER nAttribute);
+    static BOOL isFunctions(SQLUSMALLINT nFunction);
+    static BOOL isHandleType(SQLSMALLINT nHandleType);
+    static BOOL isInfoType(SQLUSMALLINT nInfoType);
+    static BOOL isReturn(SQLRETURN nReturn);
+    static BOOL isStmtAttr(SQLINTEGER nAttribute);
+    static BOOL isStmtOption(SQLUSMALLINT nOption);
+    static BOOL isTypeC(SQLSMALLINT nType);
+    static BOOL isTypeSQL(SQLSMALLINT nType);
+    static BOOL isConciseTypeC(SQLSMALLINT nType, SQLINTEGER nODBCVersion =
SQL_OV_ODBC3);
+    static BOOL isConciseTypeSQL(SQLSMALLINT nType, SQLINTEGER nODBCVersion =
SQL_OV_ODBC3);
+    static BOOL isIntervalConciseTypeC(SQLSMALLINT nType);
+    static BOOL isIntervalConciseTypeSQL(SQLSMALLINT nType);
+    static BOOL isDateTimeCode(SQLSMALLINT nCode);
+    static BOOL isIntervalCode(SQLSMALLINT nCode);
+    static BOOL isCharTypeSQL(SQLSMALLINT nType);
+    static BOOL isBinTypeSQL(SQLSMALLINT nType);
+    static BOOL isDateTimeTypeSQL(SQLSMALLINT nType, SQLINTEGER nODBCVersion =
SQL_OV_ODBC3);
+    static BOOL isCharTypeC(SQLSMALLINT nType);
+    static BOOL isBinTypeC(SQLSMALLINT nType);
+    static BOOL isBooleanValue(SQLINTEGER nValue);
+    static BOOL isDescField(SQLSMALLINT nField);
+    static BOOL isDescAllocType(SQLSMALLINT nAllocType);
+    static BOOL isDescBindType(SQLINTEGER nBindType);
+    static BOOL isDescNullable(SQLSMALLINT nNullable);
+    static BOOL isDescParameterType(SQLSMALLINT nParameterType);
+    static BOOL isDescSearchable(SQLSMALLINT nSearchable);
+    static BOOL isDescUnnamed(SQLSMALLINT nUnnamed);
+    static BOOL isDescUpdatable(SQLSMALLINT nUpdatable);    
+    /*@}*/
+
+};
+
+#endif /* MVALIDATOR_H */

Modified: trunk/SDK/MYSQLPlus/Library/MYSQLPlusLibrary.vpj
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MYSQLPlusLibrary.vpj	2007-04-03 11:18:36 UTC (rev 834)
+++ trunk/SDK/MYSQLPlus/Library/MYSQLPlusLibrary.vpj	2007-04-03 12:01:30 UTC (rev 835)
@@ -74,6 +74,7 @@
 			<F N="MResultRes.cpp"/>
 			<F N="MResultStmt.cpp"/>
 			<F N="MStatement.cpp"/>
+			<F N="MValidator.cpp"/>
 		</Folder>
 		<Folder
 			Name="Header Files"
@@ -96,6 +97,7 @@
 			<F N="MResultPlus.h"/>
 			<F N="MResultRes.h"/>
 			<F N="MResultStmt.h"/>
+			<F N="MValidator.h"/>
 		</Folder>
 		<Folder
 			Name="Resource Files"

Thread
Connector/ODBC 5 commit: r835 - in trunk/SDK: C/Library C/include MYSQLPlus/Libraryahristov3 Apr