Modified:
MYSQLPlus/MYSQLPlusLib/MStatement.cpp
Log:
Modified: MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- MYSQLPlus/MYSQLPlusLib/MStatement.cpp 2006-05-06 05:03:19 UTC (rev 190)
+++ MYSQLPlus/MYSQLPlusLib/MStatement.cpp 2006-05-06 05:17:57 UTC (rev 191)
@@ -70,7 +70,149 @@
pDiagnostic->doClear();
- MYODBCDbgReturn( SQL_ERROR );
+ SQLUINTEGER pUnsignedInt = (SQLUINTEGER)pValue; /* to reduce clutter
*/
+
+ /* known statement attributes */
+ switch ( nAttribute )
+ {
+ case SQL_ATTR_APP_PARAM_DESC:
+ if ( !MYODBCDrvAssociateDes( pStm, (MYODBC_DES_PTR)pValue,
MYODBC_RTTI_DES_APD ) )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HY000, 0,
NULL ) );
+ break;
+ case SQL_ATTR_APP_ROW_DESC:
+ if ( !MYODBCDrvAssociateDes( pStm, (MYODBC_DES_PTR)pValue,
MYODBC_RTTI_DES_ARD ) )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HY000, 0,
NULL ) );
+ break;
+ case SQL_ATTR_ASYNC_ENABLE:
+ if ( pUnsignedInt != SQL_ASYNC_ENABLE_ON )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_CONCURRENCY:
+ if ( pUnsignedInt != SQL_CONCUR_READ_ONLY )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_CURSOR_SCROLLABLE:
+ if ( pUnsignedInt == SQL_NONSCROLLABLE && pStm->attr_cursor_type
!= SQL_CURSOR_FORWARD_ONLY )
+ pStm->attr_cursor_type = SQL_CURSOR_FORWARD_ONLY;
+ else if ( pUnsignedInt == SQL_SCROLLABLE && pStm->attr_cursor_type
== SQL_CURSOR_FORWARD_ONLY )
+ pStm->attr_cursor_type = SQL_CURSOR_STATIC;
+ break;
+ case SQL_ATTR_CURSOR_SENSITIVITY:
+ if ( pUnsignedInt != SQL_UNSPECIFIED )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_CURSOR_TYPE:
+ if ( pStm->pDbc->nFlag & MYODBC_FLAG_FORWARD_CURSOR )
+ {
+ pStm->attr_cursor_type = SQL_CURSOR_FORWARD_ONLY;
+ if ( pUnsignedInt != SQL_CURSOR_FORWARD_ONLY )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_01S02, 0,
NULL ) );
+ }
+ else if ( pStm->pDbc->nFlag & MYODBC_FLAG_DYNAMIC_CURSOR )
+ {
+ if ( pUnsignedInt != SQL_CURSOR_KEYSET_DRIVEN )
+ pStm->attr_cursor_type = pUnsignedInt;
+ else
+ {
+ pStm->attr_cursor_type = SQL_CURSOR_STATIC;
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_01S02, 0,
"Option value changed to default static cursor" ) );
+ }
+ }
+ else
+ {
+ if ( pUnsignedInt == SQL_CURSOR_FORWARD_ONLY || pUnsignedInt ==
SQL_CURSOR_STATIC )
+ pStm->attr_cursor_type = pUnsignedInt;
+ else
+ {
+ pStm->attr_cursor_type = SQL_CURSOR_STATIC;
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_01S02, 0,
"Option value changed to default static cursor" ) );
+ }
+ }
+ break;
+ case SQL_ATTR_ENABLE_AUTO_IPD:
+ if ( pUnsignedInt != SQL_FALSE )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_FETCH_BOOKMARK_PTR:
+ if ( pValue )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_IMP_PARAM_DESC:
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HY000, 0, NULL )
);
+ break;
+ case SQL_ATTR_IMP_ROW_DESC:
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HY000, 0, NULL )
);
+ break;
+ case SQL_ATTR_KEYSET_SIZE:
+ if ( pUnsignedInt != 0 )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_MAX_LENGTH:
+ pStm->attr_max_length = pUnsignedInt;
+ break;
+ case SQL_ATTR_MAX_ROWS:
+ pStm->attr_max_rows = pUnsignedInt;
+ break;
+ case SQL_ATTR_METADATA_ID:
+ if ( pUnsignedInt != SQL_FALSE )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_NOSCAN:
+ if ( pUnsignedInt != SQL_NOSCAN_ON )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_PARAM_BIND_OFFSET_PTR:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_param_desc, -1,
SQL_DESC_BIND_OFFSET_PTR, pValue, nStringLength ) );
+ case SQL_ATTR_PARAM_BIND_TYPE:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_param_desc, -1,
SQL_DESC_BIND_TYPE, pValue, nStringLength ) );
+ case SQL_ATTR_PARAM_OPERATION_PTR:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_param_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValue, nStringLength ) );
+ case SQL_ATTR_PARAM_STATUS_PTR:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_imp_param_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValue, nStringLength ) );
+ case SQL_ATTR_PARAMS_PROCESSED_PTR:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_imp_param_desc, -1,
SQL_DESC_ROWS_PROCESSED_PTR, pValue, nStringLength ) );
+ case SQL_ATTR_PARAMSET_SIZE:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_param_desc, -1,
SQL_DESC_ARRAY_SIZE, pValue, nStringLength ) );
+ case SQL_ATTR_QUERY_TIMEOUT:
+ if ( pUnsignedInt != SQL_QUERY_TIMEOUT_DEFAULT )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_RETRIEVE_DATA:
+ if ( pUnsignedInt != SQL_RD_DEFAULT )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_ROW_ARRAY_SIZE:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_ARRAY_SIZE, pValue, nStringLength ) );
+
+ case SQL_ROWSET_SIZE:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_ARRAY_SIZE, pValue, nStringLength ) );
+
+ case SQL_ATTR_ROW_BIND_OFFSET_PTR:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_BIND_OFFSET_PTR, pValue, nStringLength ) );
+ case SQL_ATTR_ROW_BIND_TYPE:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_BIND_TYPE, pValue, nStringLength ) );
+ case SQL_ATTR_ROW_NUMBER:
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0, NULL )
);
+ case SQL_ATTR_ROW_OPERATION_PTR:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValue, nStringLength ) );
+ case SQL_ATTR_ROW_STATUS_PTR:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_imp_row_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValue, nStringLength ) );
+ case SQL_ATTR_ROWS_FETCHED_PTR:
+ MYODBCDbgReturn( MYODBCDrvSetDescField( pStm->attr_imp_row_desc, -1,
SQL_DESC_ROWS_PROCESSED_PTR, pValue, nStringLength ) );
+ case SQL_ATTR_SIMULATE_CURSOR:
+ if ( pUnsignedInt != SQL_SC_TRY_UNIQUE )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ case SQL_ATTR_USE_BOOKMARKS:
+ if ( pUnsignedInt != pStm->attr_use_bookmarks )
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HYC00, 0,
NULL ) );
+ break;
+ default:
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_01000, 0,
"Attribute unknown & ignored." ) );
+ /* MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HY092, 0, NULL
) ); */
+ }
+
+ MYODBCDbgReturn( SQL_SUCCESS );
}
@@ -110,7 +252,110 @@
pDiagnostic->doClear();
- MYODBCDbgReturn( SQL_ERROR );
+ SQLPOINTER * pPointer = (SQLPOINTER*)pValuePtr; /* to reduce clutter
*/
+ SQLUINTEGER * pUnsignedInt = (SQLUINTEGER*)pValuePtr; /* to reduce clutter
*/
+ SQLINTEGER nStringLengthPtr;
+
+ /* pnStringLengthPtr is optional */
+ if ( !pnStringLengthPtr )
+ pnStringLengthPtr = &nStringLengthPtr;
+
+ /* known statement nAttributes */
+ switch ( nAttribute )
+ {
+ case SQL_ATTR_APP_PARAM_DESC:
+ *pPointer = pStm->attr_app_param_desc;
+ break;
+ case SQL_ATTR_APP_ROW_DESC:
+ *pPointer = pStm->attr_app_row_desc;
+ break;
+ case SQL_ATTR_ASYNC_ENABLE:
+ *pUnsignedInt = pStm->attr_async_enable;
+ break;
+ case SQL_ATTR_CONCURRENCY:
+ *pUnsignedInt = pStm->attr_concurrency;
+ break;
+ case SQL_ATTR_CURSOR_SCROLLABLE:
+ *pUnsignedInt = pStm->attr_cursor_scrollable;
+ break;
+ case SQL_ATTR_CURSOR_SENSITIVITY:
+ *pUnsignedInt = pStm->attr_cursor_sensitivity;
+ break;
+ case SQL_ATTR_CURSOR_TYPE:
+ *pUnsignedInt = pStm->attr_cursor_type;
+ break;
+ case SQL_ATTR_ENABLE_AUTO_IPD:
+ *pUnsignedInt = pStm->attr_enable_auto_ipd;
+ break;
+ case SQL_ATTR_FETCH_BOOKMARK_PTR:
+ *pPointer = pStm->attr_fetch_bookmark_ptr;
+ break;
+ case SQL_ATTR_IMP_PARAM_DESC:
+ *pPointer = pStm->attr_imp_param_desc;
+ break;
+ case SQL_ATTR_IMP_ROW_DESC:
+ *pPointer = pStm->attr_imp_row_desc;
+ break;
+ case SQL_ATTR_KEYSET_SIZE:
+ *pUnsignedInt = pStm->attr_keyset_size;
+ break;
+ case SQL_ATTR_MAX_LENGTH:
+ *pUnsignedInt = pStm->attr_max_length;
+ break;
+ case SQL_ATTR_MAX_ROWS:
+ *pUnsignedInt = pStm->attr_max_rows;
+ break;
+ case SQL_ATTR_METADATA_ID:
+ *pUnsignedInt = pStm->attr_metadata_id;
+ break;
+ case SQL_ATTR_NOSCAN:
+ *pUnsignedInt = 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 ) );
+ case SQL_ATTR_PARAM_BIND_TYPE:
+ MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_param_desc, -1,
SQL_DESC_BIND_TYPE, pValuePtr, nBufferLength, pnStringLengthPtr ) );
+ case SQL_ATTR_PARAM_OPERATION_PTR:
+ MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_param_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
+ case SQL_ATTR_PARAM_STATUS_PTR:
+ MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_imp_param_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
+ case SQL_ATTR_PARAMS_PROCESSED_PTR:
+ MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_imp_param_desc, -1,
SQL_DESC_ROWS_PROCESSED_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
+ 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;
+ break;
+ case SQL_ATTR_RETRIEVE_DATA:
+ *pUnsignedInt = 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 ) );
+ case SQL_ATTR_ROW_BIND_OFFSET_PTR:
+ MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_BIND_OFFSET_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
+ 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;
+ break;
+ case SQL_ATTR_ROW_OPERATION_PTR:
+ MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_app_row_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
+ case SQL_ATTR_ROW_STATUS_PTR:
+ MYODBCDbgReturn( MYODBCDrvGetDescField( pStm->attr_imp_row_desc, -1,
SQL_DESC_ARRAY_STATUS_PTR, pValuePtr, nBufferLength, pnStringLengthPtr ) );
+ 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;
+ break;
+ case SQL_ATTR_USE_BOOKMARKS:
+ *pUnsignedInt = pStm->attr_use_bookmarks;
+ break;
+ default:
+ MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_01000, 0,
"Attribute unknown & ignored." ) );
+ /* MYODBCDbgReturn( MYODBCDiaAppend( pStm->hDia, MYODBC_DIA_HY092, 0, NULL
) ); */
+ }
+
+ MYODBCDbgReturn( SQL_SUCCESS );
}
SQLRETURN MStatement::getTypeInfo( SQLSMALLINT nDataType )
| Thread |
|---|
| • Connector/ODBC 5 commit: r191 - MYSQLPlus/MYSQLPlusLib | pharvey | 6 May |