Modified:
MYSQLPlus/MYSQLPlusLib/MStatement.cpp
Log:
Modified: MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MStatement.cpp 2006-05-06 13:46:13 UTC (rev 194)
+++ MYSQLPlus/MYSQLPlusLib/MStatement.cpp 2006-05-06 15:15:15 UTC (rev 195)
@@ -238,50 +238,75 @@
MYODBCDbgReturn( pDiagnostic->getDiagRec( nRecNumber, psSQLState, pnNativeError,
psMessageText, nBufferLength, pnTextLength ) )
}
-SQLRETURN MStatement::getStmtAttr( SQLINTEGER nAttribute, SQLPOINTER pValuePtr,
SQLINTEGER nBufferLength, SQLINTEGER *pnStringLengthPtr )
+SQLRETURN MStatement::getStmtAttr( SQLINTEGER nAttribute, SQLPOINTER pValue, SQLINTEGER
nBufferLength, SQLINTEGER *pnStringLength )
{
MYODBCDbgEnter();
pDiagnostic->doClear();
- SQLPOINTER * pPointer = (SQLPOINTER*)pValuePtr; /* to reduce clutter
*/
- SQLUINTEGER * pUnsignedInt = (SQLUINTEGER*)pValuePtr; /* to reduce clutter
*/
- SQLINTEGER nStringLengthPtr;
+ /*!
+ \internal ODBC RULE (DM)
+ An asynchronously executing function was called for the StatementHandle and was
+ still executing when this function was called.
+ */
+ if ( getState() == STATE_S11 )
+ MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY010 ) );
+
+ /*!
+ \internal ODBC RULE (DM)
+
+ SQLExecute, SQLExecDirect, SQLBulkOperations, or SQLSetPos was called for the
StatementHandle and
+ returned SQL_NEED_DATA. This function was called before data was sent for all
data-at-execution
+ parameters or columns.
+ */
+ if ( getState() >= STATE_S8 && getState() <= STATE_S10 )
+ MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_HY010 ) );
+
/* pnStringLengthPtr is optional */
- if ( !pnStringLengthPtr )
- pnStringLengthPtr = &nStringLengthPtr;
+ SQLINTEGER nStringLength;
+ if ( !pnStringLength )
+ pnStringLength = &nStringLength;
/* known statement nAttributes */
switch ( nAttribute )
{
case SQL_ATTR_APP_PARAM_DESC:
- *pPointer = pStm->attr_app_param_desc;
+ *((MDescriptor*)pValue) = getAppParamDesc();
break;
+
case SQL_ATTR_APP_ROW_DESC:
- *pPointer = pStm->attr_app_row_desc;
+ *((MDescriptor*)pValue) = getAppRowDesc();
break;
+
case SQL_ATTR_ASYNC_ENABLE:
- *pUnsignedInt = pStm->attr_async_enable;
+ *((SQLUINTEGER*)pValue) = getAsyncEnable();
break;
+
case SQL_ATTR_CONCURRENCY:
- *pUnsignedInt = pStm->attr_concurrency;
+ *((SQLUINTEGER*)pValue) = getConcurrency();
break;
+
case SQL_ATTR_CURSOR_SCROLLABLE:
- *pUnsignedInt = pStm->attr_cursor_scrollable;
+ *((SQLUINTEGER*)pValue) = getCursorScrollable();
break;
+
case SQL_ATTR_CURSOR_SENSITIVITY:
- *pUnsignedInt = pStm->attr_cursor_sensitivity;
+ *((SQLUINTEGER*)pValue) = getCursorSensitivity();
break;
+
case SQL_ATTR_CURSOR_TYPE:
- *pUnsignedInt = pStm->attr_cursor_type;
+ *((SQLUINTEGER*)pValue) = getCursorType();
break;
+
case SQL_ATTR_ENABLE_AUTO_IPD:
- *pUnsignedInt = pStm->attr_enable_auto_ipd;
+ *((SQLUINTEGER*)pValue) = getEnableAutoIPD();
break;
+
case SQL_ATTR_FETCH_BOOKMARK_PTR:
- *pPointer = pStm->attr_fetch_bookmark_ptr;
+ *((SQLPOINTER)pValue) = getFetchBookmarkPtr();
break;
+
case SQL_ATTR_IMP_PARAM_DESC:
*pPointer = pStm->attr_imp_param_desc;
break;
@@ -289,19 +314,19 @@
*pPointer = pStm->attr_imp_row_desc;
break;
case SQL_ATTR_KEYSET_SIZE:
- *pUnsignedInt = pStm->attr_keyset_size;
+ *((SQLUINTEGER*)pValue) = pStm->attr_keyset_size;
break;
case SQL_ATTR_MAX_LENGTH:
- *pUnsignedInt = pStm->attr_max_length;
+ *((SQLUINTEGER*)pValue) = pStm->attr_max_length;
break;
case SQL_ATTR_MAX_ROWS:
- *pUnsignedInt = pStm->attr_max_rows;
+ *((SQLUINTEGER*)pValue) = pStm->attr_max_rows;
break;
case SQL_ATTR_METADATA_ID:
- *pUnsignedInt = pStm->attr_metadata_id;
+ *((SQLUINTEGER*)pValue) = pStm->attr_metadata_id;
break;
case SQL_ATTR_NOSCAN:
- *pUnsignedInt = pStm->attr_noscan;
+ *((SQLUINTEGER*)pValue) = pStm->attr_noscan;
break;
case SQL_ATTR_PARAM_BIND_OFFSET_PTR:
MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_param_desc, -1,
SQL_DESC_BIND_OFFSET_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
@@ -316,10 +341,10 @@
case SQL_ATTR_PARAMSET_SIZE:
MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_param_desc, -1,
SQL_DESC_ARRAY_SIZE, pValuePtr, nBufferLength, pnStringLengthPtr ) );
case SQL_ATTR_QUERY_TIMEOUT:
- *pUnsignedInt = pStm->attr_query_timeout;
+ *((SQLUINTEGER*)pValue) = pStm->attr_query_timeout;
break;
case SQL_ATTR_RETRIEVE_DATA:
- *pUnsignedInt = pStm->attr_retrieve_data;
+ *((SQLUINTEGER*)pValue) = pStm->attr_retrieve_data;
break;
case SQL_ATTR_ROW_ARRAY_SIZE:
MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_ARRAY_SIZE, pValuePtr, nBufferLength, pnStringLengthPtr ) );
@@ -328,7 +353,7 @@
case SQL_ATTR_ROW_BIND_TYPE:
MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_BIND_TYPE, pValuePtr, nBufferLength, pnStringLengthPtr ) );
case SQL_ATTR_ROW_NUMBER:
- *pUnsignedInt = pStm->attr_row_number;
+ *((SQLUINTEGER*)pValue) = pStm->attr_row_number;
break;
case SQL_ATTR_ROW_OPERATION_PTR:
MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
@@ -337,10 +362,10 @@
case SQL_ATTR_ROWS_FETCHED_PTR:
MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_imp_row_desc, -1,
SQL_DESC_ROWS_PROCESSED_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
case SQL_ATTR_SIMULATE_CURSOR:
- *pUnsignedInt = pStm->attr_simulate_cursor;
+ *((SQLUINTEGER*)pValue) = pStm->attr_simulate_cursor;
break;
case SQL_ATTR_USE_BOOKMARKS:
- *pUnsignedInt = pStm->attr_use_bookmarks;
+ *((SQLUINTEGER*)pValue) = pStm->attr_use_bookmarks;
break;
default:
MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_01000, 0,
"Attribute unknown & ignored." ) );
@@ -694,7 +719,7 @@
/*!
\internal ODBC RULE (DM)
- (DM) The Attribute argument was SQL_ATTR_APP_ROW_DESC or
SQL_ATTR_APP_PARAM_DESC, and
+ The Attribute argument was SQL_ATTR_APP_ROW_DESC or SQL_ATTR_APP_PARAM_DESC,
and
the value in ValuePtr was an implicitly allocated descriptor handle other
than the handle
originally allocated for the ARD or APD.
*/
@@ -1399,6 +1424,17 @@
{
MYODBCDbgEnter();
+ /*!
+ \internal ODBC RULE
+
+ The argument Attribute was SQL_ATTR_ROW_NUMBER and the cursor was not open, or
+ the cursor was positioned before the start of the result set or after the end
+ of the result set.
+ */
+ if ( getState() != STATE_S6 && getState() != STATE_S7 )
+ MYODBCDbgReturn( pDiagnostic->doAppend( MDiagnostic::DIA_24000 ) );
+
+
MYODBCDbgReturn3( "%d", nRowNumber );
}
| Thread |
|---|
| • Connector/ODBC 5 commit: r195 - MYSQLPlus/MYSQLPlusLib | pharvey | 6 May |