Modified:
trunk/SDK/MYSQLPlus/Library/MConnection_props.cpp
trunk/SDK/MYSQLPlus/include/MConnection.h
Log:
Updated SQLGetInfo() to get string lengths without data (mostly seen from ADO and Access).
Modified: trunk/SDK/MYSQLPlus/Library/MConnection_props.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MConnection_props.cpp 2007-02-08 00:34:35 UTC (rev 788)
+++ trunk/SDK/MYSQLPlus/Library/MConnection_props.cpp 2007-02-08 01:21:12 UTC (rev 789)
@@ -322,12 +322,10 @@
if ( getCurrentCatalog().isNull() )
MYODBCDbgReturn( SQL_NO_DATA );
- /* copy string */
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pValue, nBufferLength /
sizeof(SQLWCHAR), getCurrentCatalog(), pnLen );
- /* because we have char len but we want byte len */
- *pnLen = *pnLen * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ SQLSMALLINT smallLen;
+ MYODBCDbgReturn( getInfoFillString( (wchar_t *)pValue,
+ nBufferLength, &smallLen, getCurrentCatalog() ) );
+ *pnLen = smallLen;
break;
case SQL_ATTR_LOGIN_TIMEOUT:
@@ -459,17 +457,26 @@
MYODBCDbgInfo( QString( "nInfoType=%1=%2" ).arg( nInfoType).arg(
MYODBCC::getInfoTypeString( nInfoType ) ) );
#endif
+ /* this is above, as it CAN be NULL */
+ SQLWCHAR * pszSQLWCHAR = (SQLWCHAR *)pInfoValue;
/* cast here to make code below a little cleaner */
SQLUSMALLINT * pnSQLUSMALLINT = (SQLUSMALLINT *)pInfoValue;
SQLSMALLINT * pnSQLSMALLINT = (SQLSMALLINT *)pInfoValue;
SQLUINTEGER * pnSQLUINTEGER = (SQLUINTEGER *)pInfoValue;
- SQLWCHAR * pszSQLWCHAR = (SQLWCHAR *)pInfoValue;
/* pnStringLengthBytes is optional so provide dummy to make code below a little
cleaner */
SQLSMALLINT nStringLengthBytes;
SQLSMALLINT * pnStringLengthBytes = pnStringLengthBytesPtr;
- SQLINTEGER nStringLengthChars;
- BOOL bCopyOk;
+ /* dummy value to use for non-strings */
+ SQLUINTEGER dummy = 0xcdcdcdcd;
+
+ if ( !pInfoValue )
+ {
+ pnSQLUSMALLINT = (SQLUSMALLINT *)&dummy;
+ pnSQLSMALLINT = (SQLSMALLINT *)&dummy;
+ pnSQLUINTEGER = (SQLUINTEGER *)&dummy;
+ }
+
/*!
\internal ODBC RULE
@@ -497,14 +504,6 @@
/*!
\internal MYODBC RULE
- We DO NOT consider pInfoValue to be optional.
- */
- if ( !pInfoValue )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0,
tr("buffer, to return value, must be provided") ) );
-
- /*!
- \internal MYODBC RULE
-
The following ODBC Rule makes pnStringLength optional.
*/
/*!
@@ -562,16 +561,12 @@
switch ( nInfoType )
{
case SQL_ACCESSIBLE_PROCEDURES:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoAccessibleProcedures(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoAccessibleProcedures() ) );
break;
case SQL_ACCESSIBLE_TABLES:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoAccessibleTables(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoAccessibleTables() ) );
break;
case SQL_ACTIVE_ENVIRONMENTS:
*pnSQLUSMALLINT = getInfoActiveEnvironments();
@@ -603,37 +598,27 @@
*pnStringLengthBytes = sizeof(SQLUSMALLINT);
break;
case SQL_CATALOG_NAME:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoCatalogName(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoCatalogName() ) );
break;
case SQL_CATALOG_NAME_SEPARATOR:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoCatalogNameSeparator(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoCatalogNameSeparator() ) );
break;
case SQL_CATALOG_TERM:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoCatalogTerm(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoCatalogTerm() ) );
break;
case SQL_CATALOG_USAGE:
*pnSQLUINTEGER = getInfoCatalogUsage();
break;
case SQL_COLLATION_SEQ:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoCollationSeq(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoCollationSeq() ) );
break;
case SQL_COLUMN_ALIAS:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoColumnAlias(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoColumnAlias() ) );
break;
case SQL_CONCAT_NULL_BEHAVIOR:
*pnSQLUSMALLINT = getInfoConcatNullBehavior();
@@ -750,37 +735,27 @@
*pnSQLUINTEGER = getInfoCursorSensitivity();
break;
case SQL_DATA_SOURCE_NAME:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoDataSourceName(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDataSourceName() ) );
break;
case SQL_DATA_SOURCE_READ_ONLY:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoDataSourceReadOnly(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDataSourceReadOnly() ) );
break;
case SQL_DATABASE_NAME:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoDatabaseName(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDatabaseName() ) );
break;
case SQL_DATETIME_LITERALS:
*pnSQLUINTEGER = getInfoDatetimeLiterals();
break;
case SQL_DBMS_NAME:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoDbmsName(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDbmsName() ) );
break;
case SQL_DBMS_VER:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoDbmsVer(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDbmsVer() ) );
break;
case SQL_DDL_INDEX:
*pnSQLUINTEGER = getInfoDdlIndex();
@@ -789,16 +764,12 @@
*pnSQLUINTEGER = getInfoDefaultTxnIsolation();
break;
case SQL_DESCRIBE_PARAMETER:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoDescribeParameter(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDescribeParameter() ) );
break;
case SQL_DM_VER:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoDmVer(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDmVer() ) );
break;
case SQL_DRIVER_HDBC:
if ( !pInfoValue )
@@ -877,22 +848,16 @@
*/
break;
case SQL_DRIVER_NAME:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoDriverName(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDriverName() ) );
break;
case SQL_DRIVER_ODBC_VER:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoDriverOdbcVer(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDriverOdbcVer() ) );
break;
case SQL_DRIVER_VER:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoDriverVer(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoDriverVer() ) );
break;
case SQL_DROP_ASSERTION:
*pnSQLUINTEGER = getInfoDropAssertion();
@@ -925,10 +890,8 @@
*pnSQLUINTEGER = getInfoDynamicCursorAttributes2();
break;
case SQL_EXPRESSIONS_IN_ORDERBY:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoExpressionsInOrderby(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoExpressionsInOrderby() ) );
break;
case SQL_FILE_USAGE:
*pnSQLUSMALLINT = getInfoFileUsage();
@@ -952,10 +915,8 @@
*pnStringLengthBytes = sizeof(SQLUSMALLINT);
break;
case SQL_IDENTIFIER_QUOTE_CHAR:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoIdentifierQuoteChar(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoIdentifierQuoteChar() ) );
break;
case SQL_INDEX_KEYWORDS:
*pnSQLUINTEGER = getInfoIndexKeywords();
@@ -967,10 +928,8 @@
*pnSQLUINTEGER = getInfoInsertStatement();
break;
case SQL_INTEGRITY:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoIntegrity(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoIntegrity() ) );
break;
case SQL_KEYSET_CURSOR_ATTRIBUTES1:
*pnSQLUINTEGER = getInfoKeysetCursorAttributes1();
@@ -979,16 +938,12 @@
*pnSQLUINTEGER = getInfoKeysetCursorAttributes2();
break;
case SQL_KEYWORDS:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoKeywords(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoKeywords() ) );
break;
case SQL_LIKE_ESCAPE_CLAUSE:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoLikeEscapeClause(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoLikeEscapeClause() ) );
break;
case SQL_MAX_ASYNC_CONCURRENT_STATEMENTS:
*pnSQLUINTEGER = getInfoMaxAsyncConcurrentStatements();
@@ -1054,10 +1009,8 @@
*pnSQLUINTEGER = getInfoMaxRowSize();
break;
case SQL_MAX_ROW_SIZE_INCLUDES_LONG:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoMaxRowSizeIncludesLong(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoMaxRowSizeIncludesLong() ) );
break;
case SQL_MAX_SCHEMA_NAME_LEN:
*pnSQLUSMALLINT = getInfoMaxSchemaNameLen();
@@ -1079,22 +1032,16 @@
*pnStringLengthBytes = sizeof(SQLUSMALLINT);
break;
case SQL_MULT_RESULT_SETS:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoMultiResultSets(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoMultiResultSets() ) );
break;
case SQL_MULTIPLE_ACTIVE_TXN:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoMultipleActiveTxn(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoMultipleActiveTxn() ) );
break;
case SQL_NEED_LONG_DATA_LEN:
- bCopyOk = MYODBCC::doStringCopyOut( (SQLWCHAR*)pInfoValue, nBufferLength,
getInfoNeedLongDataLen(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoNeedLongDataLen() ) );
break;
case SQL_NON_NULLABLE_COLUMNS:
*pnSQLUSMALLINT = getInfoNonNullableColumns();
@@ -1111,19 +1058,15 @@
*pnSQLUINTEGER = getInfoOdbcInterfaceConformance();
break;
case SQL_ODBC_VER:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoOdbcVer(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoOdbcVer() ) );
break;
case SQL_OJ_CAPABILITIES:
*pnSQLUINTEGER = getInfoOjCapabilities();
break;
case SQL_ORDER_BY_COLUMNS_IN_SELECT:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoOrderByColumnsInSelect(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoOrderByColumnsInSelect() ) );
break;
case SQL_PARAM_ARRAY_ROW_COUNTS:
*pnSQLUINTEGER = getInfoParamArrayRowCounts();
@@ -1132,32 +1075,24 @@
*pnSQLUINTEGER = getInfoParamArraySelects();
break;
case SQL_PROCEDURE_TERM:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoProcedureTerm() , &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoProcedureTerm() ) );
break;
case SQL_PROCEDURES:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoProcedures(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoProcedures() ) );
break;
case SQL_QUOTED_IDENTIFIER_CASE:
*pnSQLUSMALLINT = getInfoQuotedIdentifierCase();
*pnStringLengthBytes = sizeof(SQLUSMALLINT);
break;
case SQL_ROW_UPDATES:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoRowUpdates(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoRowUpdates() ) );
break;
case SQL_SCHEMA_TERM:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoSchemaTerm(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoSchemaTerm() ) );
break;
case SQL_SCHEMA_USAGE:
*pnSQLUINTEGER = getInfoSchemaUsage();
@@ -1166,22 +1101,16 @@
*pnSQLUINTEGER = getInfoScrollOptions();
break;
case SQL_SEARCH_PATTERN_ESCAPE:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoSearchPatternEscape(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoSearchPatternEscape() ) );
break;
case SQL_SERVER_NAME:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoServerName(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoServerName() ) );
break;
case SQL_SPECIAL_CHARACTERS:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoSpecialCharacters(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoSpecialCharacters() ) );
break;
case SQL_SQL_CONFORMANCE:
*pnSQLUINTEGER = getInfoSqlConformance();
@@ -1238,10 +1167,8 @@
*pnSQLUINTEGER = getInfoSystemFunctions();
break;
case SQL_TABLE_TERM:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoTableTerm(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoTableTerm() ) );
break;
case SQL_TIMEDATE_ADD_INTERVALS:
*pnSQLUINTEGER = getInfoTimedateAddIntervals();
@@ -1263,16 +1190,12 @@
*pnSQLUINTEGER = getInfoUnion();
break;
case SQL_USER_NAME:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoUserName(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoUserName() ) );
break;
case SQL_XOPEN_CLI_YEAR:
- bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR, nBufferLength /
sizeof(SQLWCHAR), getInfoXopenCliYear(), &nStringLengthChars );
- *pnStringLengthBytes = nStringLengthChars * sizeof(SQLWCHAR);
- if ( !bCopyOk )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_01004 )
);
+ MYODBCDbgReturn( getInfoFillString( pszSQLWCHAR, nBufferLength,
+ pnStringLengthBytes, getInfoXopenCliYear() ) );
break;
default:
if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC2 )
@@ -1321,9 +1244,41 @@
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HYC00 )
);
}
+ /*!
+ \internal MYODBC RULE
+
+ If we actually used the dummy value, it's invalid.
+ */
+ if ( dummy != 0xcdcdcdcd )
+ MYODBCDbgReturn( getDiagnostic()->doAppend(
+ MDiagnostic::STATE_HY000, 0,
+ tr("buffer, to return value, must be provided") ) );
+
MYODBCDbgReturn( SQL_SUCCESS );
}
+SQLRETURN MConnection::getInfoFillString( wchar_t *pszSQLWCHAR,
+ SQLSMALLINT nBufferLength, SQLSMALLINT *pnStringLengthBytes,
+ QString val)
+{
+ MYODBCDbgEnter();
+
+ SQLINTEGER nStringLengthChars;
+
+ if ( pszSQLWCHAR )
+ {
+ BOOL bCopyOk = MYODBCC::doStringCopyOut( pszSQLWCHAR,
+ nBufferLength / sizeof(SQLWCHAR),
+ val, &nStringLengthChars );
+ if ( !bCopyOk )
+ MYODBCDbgReturn( getDiagnostic()->
+ doAppend( MDiagnostic::STATE_01004 ) );
+ }
+ *pnStringLengthBytes = val.size() * sizeof(SQLWCHAR);
+
+ MYODBCDbgReturn( SQL_SUCCESS );
+}
+
MConnection::STATEMENT_TYPE MConnection::getStatementType()
{
MYODBCDbgEnter();
Modified: trunk/SDK/MYSQLPlus/include/MConnection.h
===================================================================
--- trunk/SDK/MYSQLPlus/include/MConnection.h 2007-02-08 00:34:35 UTC (rev 788)
+++ trunk/SDK/MYSQLPlus/include/MConnection.h 2007-02-08 01:21:12 UTC (rev 789)
@@ -61,6 +61,9 @@
SQLRETURN getDiagField( SQLSMALLINT nRecNumber, SQLSMALLINT nDiagIdentifier,
SQLPOINTER pDiagInfoPtr, SQLSMALLINT nBufferLength, SQLSMALLINT *pnStringLengthPtr );
SQLRETURN getDiagRec( SQLSMALLINT nRecNumber, SQLWCHAR *psSQLState, SQLINTEGER
*pnNativeErrorPtr, SQLWCHAR *psMessageText, SQLSMALLINT nBufferLength, SQLSMALLINT
*pnTextLengthPtr );
SQLRETURN getInfo( SQLUSMALLINT nInfoType, SQLPOINTER pInfoValue, SQLSMALLINT
nBufferLength, SQLSMALLINT *pnStringLength );
+ SQLRETURN getInfoFillString( wchar_t *pszSQLWCHAR,
+ SQLSMALLINT nBufferLength,
+ SQLSMALLINT *pnStringLengthBytes, QString val );
STATE getState();
STATEMENT_TYPE getStatementType();
| Thread |
|---|
| • Connector/ODBC 5 commit: r789 - in trunk/SDK/MYSQLPlus: Library include | jbalint | 8 Feb |