SQLRETURN SQL_API SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER ValuePtr) { ODBCStmt *stmt = (ODBCStmt *) StatementHandle; SQLULEN v; SQLRETURN r; #ifdef ODBCDEBUG ODBCLOG("SQLGetStmtOption " PTRFMT " %s " PTRFMT "\n", PTRFMTCAST StatementHandle, translateStmtOption(Option), PTRFMTCAST ValuePtr); #endif if (!isValidStmt(stmt)) return SQL_INVALID_HANDLE; clearStmtErrors(stmt); /* only the ODBC 1.0 and ODBC 2.0 options */ switch (Option) { case SQL_ASYNC_ENABLE: case SQL_CONCURRENCY: case SQL_CURSOR_TYPE: case SQL_NOSCAN: case SQL_QUERY_TIMEOUT: case SQL_RETRIEVE_DATA: case SQL_SIMULATE_CURSOR: case SQL_USE_BOOKMARKS: case SQL_ROW_NUMBER: /* SQLGetStmtAttr returns 64 bit value, but we need to * return 32 bit value */ r = MNDBGetStmtAttr(stmt, Option, &v, 0, NULL); if (SQL_SUCCEEDED(r)) WriteData(ValuePtr, (SQLUINTEGER) v, SQLUINTEGER); return r; case SQL_BIND_TYPE: case SQL_KEYSET_SIZE: case SQL_MAX_LENGTH: case SQL_MAX_ROWS: case SQL_ROWSET_SIZE: /* case SQL_GET_BOOKMARKS: is deprecated in ODBC 3.0+ */ /* use mapping as described in ODBC 3.0 SDK Help */ return MNDBGetStmtAttr(stmt, Option, ValuePtr, 0, NULL); default: /* Invalid attribute/option identifier */ addStmtError(stmt, "HY092", NULL, 0); break; } return SQL_ERROR; }
SQLRETURN SQL_API SQLGetStmtAttrW(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER *StringLengthPtr) { #ifdef ODBCDEBUG ODBCLOG("SQLGetStmtAttrW " PTRFMT " %s " PTRFMT " %d " PTRFMT "\n", PTRFMTCAST StatementHandle, translateStmtAttribute(Attribute), PTRFMTCAST ValuePtr, (int) BufferLength, PTRFMTCAST StringLengthPtr); #endif if (!isValidStmt((ODBCStmt *) StatementHandle)) return SQL_INVALID_HANDLE; clearStmtErrors((ODBCStmt *) StatementHandle); /* there are no string-valued attributes */ return MNDBGetStmtAttr((ODBCStmt *) StatementHandle, Attribute, ValuePtr, BufferLength, StringLengthPtr); }