/* * Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). */ #include "h2odbc.h" SQLRETURN SQL_API SQLGetStmtAttr(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER* StringLength) { trace("SQLGetStmtAttr"); Statement* stat=Statement::cast(StatementHandle); if(stat==0) { return SQL_INVALID_HANDLE; } stat->setError(0); switch(Attribute) { case SQL_ATTR_APP_ROW_DESC: trace(" SQL_ATTR_APP_ROW_DESC"); returnPointer(Value,stat->getAppRowDesc()); break; case SQL_ATTR_APP_PARAM_DESC: trace(" SQL_ATTR_APP_PARAM_DESC"); returnPointer(Value,stat->getAppParamDesc()); break; case SQL_ATTR_IMP_ROW_DESC: trace(" SQL_ATTR_IMP_ROW_DESC"); returnPointer(Value,stat->getImpRowDesc()); break; case SQL_ATTR_IMP_PARAM_DESC: trace(" SQL_ATTR_IMP_PARAM_DESC"); returnPointer(Value,stat->getImpParamDesc()); break; case SQL_ATTR_QUERY_TIMEOUT: trace(" SQL_ATTR_QUERY_TIMEOUT"); returnInt(Value,StringLength,0); break; case SQL_ATTR_ASYNC_ENABLE: trace(" SQL_ATTR_ASYNC_ENABLE TODO"); break; case SQL_ATTR_CONCURRENCY: trace(" SQL_ATTR_CONCURRENCY"); returnInt(Value, SQL_CONCUR_READ_ONLY); break; case SQL_ATTR_CURSOR_SCROLLABLE: trace(" SQL_ATTR_CURSOR_SCROLLABLE TODO"); break; case SQL_ATTR_CURSOR_SENSITIVITY: trace(" SQL_ATTR_CURSOR_SENSITIVITY"); returnInt(Value, SQL_INSENSITIVE); break; case SQL_ATTR_CURSOR_TYPE: trace(" SQL_ATTR_CURSOR_TYPE"); returnInt(Value, SQL_CURSOR_FORWARD_ONLY); break; case SQL_ATTR_ENABLE_AUTO_IPD: trace(" SQL_ATTR_ENABLE_AUTO_IPD TODO"); break; case SQL_ATTR_FETCH_BOOKMARK_PTR: trace(" SQL_ATTR_FETCH_BOOKMARK_PTR TODO"); break; case SQL_ATTR_KEYSET_SIZE: trace(" SQL_ATTR_KEYSET_SIZE TODO"); break; case SQL_ATTR_MAX_LENGTH: trace(" SQL_ATTR_MAX_LENGTH TODO"); break; case SQL_ATTR_MAX_ROWS: trace(" SQL_ATTR_MAX_ROWS TODO"); break; case SQL_ATTR_METADATA_ID: trace(" SQL_ATTR_METADATA_ID TODO"); break; case SQL_ATTR_NOSCAN: trace(" SQL_ATTR_NOSCAN TODO"); break; case SQL_ATTR_PARAM_BIND_OFFSET_PTR: trace(" SQL_ATTR_PARAM_BIND_OFFSET_PTR TODO"); break; case SQL_ATTR_PARAM_BIND_TYPE: trace(" SQL_ATTR_PARAM_BIND_TYPE TODO"); break; case SQL_ATTR_PARAM_OPERATION_PTR: trace(" SQL_ATTR_PARAM_OPERATION_PTR TODO"); break; case SQL_ATTR_PARAM_STATUS_PTR: trace(" SQL_ATTR_PARAM_STATUS_PTR TODO"); break; case SQL_ATTR_PARAMS_PROCESSED_PTR: trace(" SQL_ATTR_PARAMS_PROCESSED_PTR TODO"); break; case SQL_ATTR_PARAMSET_SIZE: trace(" SQL_ATTR_PARAMSET_SIZE TODO"); break; case SQL_ATTR_RETRIEVE_DATA: trace(" SQL_ATTR_RETRIEVE_DATA TODO"); break; case SQL_ATTR_ROW_ARRAY_SIZE: trace(" SQL_ATTR_ROW_ARRAY_SIZE TODO"); break; case SQL_ATTR_ROW_BIND_OFFSET_PTR: trace(" SQL_ATTR_ROW_BIND_OFFSET_PTR TODO"); break; case SQL_ATTR_ROW_BIND_TYPE: trace(" SQL_ATTR_ROW_BIND_TYPE TODO"); break; case SQL_ATTR_ROW_NUMBER: { trace(" SQL_ATTR_ROW_NUMBER"); returnInt(Value, stat->getRowId()); break; } case SQL_ATTR_ROW_OPERATION_PTR: trace(" SQL_ATTR_ROW_OPERATION_PTR TODO"); break; case SQL_ATTR_ROW_STATUS_PTR: trace(" SQL_ATTR_ROW_STATUS_PTR"); returnInt(Value, (int)stat->getAppRowDesc()->getStatusPointer()); break; case SQL_ATTR_ROWS_FETCHED_PTR: trace(" SQL_ATTR_ROWS_FETCHED_PTR TODO"); break; case SQL_ATTR_SIMULATE_CURSOR: trace(" SQL_ATTR_SIMULATE_CURSOR TODO"); break; case SQL_ATTR_USE_BOOKMARKS: trace(" SQL_ATTR_USE_BOOKMARKS"); returnInt(Value, stat->getUseBookmarks() ? SQL_UB_VARIABLE : SQL_UB_OFF); break; default: trace(" ? %d TODO",(int)Attribute); return SQL_ERROR; } return SQL_SUCCESS; }