SQLRETURN SQL_API SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset) { ODBCStmt *stmt = (ODBCStmt *) StatementHandle; #ifdef ODBCDEBUG ODBCLOG("SQLFetchScroll %p %s " LENFMT "\n", StatementHandle, translateFetchOrientation(FetchOrientation), LENCAST FetchOffset); #endif if (!isValidStmt(stmt)) return SQL_INVALID_HANDLE; clearStmtErrors(stmt); /* check statement cursor state, query should be executed */ if (stmt->State < EXECUTED0 || stmt->State == EXTENDEDFETCHED) { /* Function sequence error */ addStmtError(stmt, "HY010", NULL, 0); return SQL_ERROR; } if (stmt->State == EXECUTED0) { /* Invalid cursor state */ addStmtError(stmt, "24000", NULL, 0); return SQL_ERROR; } return MNDBFetchScroll(stmt, FetchOrientation, FetchOffset, stmt->ImplRowDescr->sql_desc_array_status_ptr); }
SQLRETURN SQL_API SQLExtendedFetch(SQLHSTMT StatementHandle, SQLUSMALLINT FetchOrientation, SQLLEN FetchOffset, #ifdef BUILD_REAL_64_BIT_MODE /* note: only defined on Debian Lenny */ SQLUINTEGER *RowCountPtr, #else SQLULEN *RowCountPtr, #endif SQLUSMALLINT *RowStatusArray) { ODBCStmt *stmt = (ODBCStmt *) StatementHandle; SQLRETURN rc; #ifdef ODBCDEBUG ODBCLOG("SQLExtendedFetch " PTRFMT " %s " LENFMT " " PTRFMT " " PTRFMT "\n", PTRFMTCAST StatementHandle, translateFetchOrientation(FetchOrientation), LENCAST FetchOffset, PTRFMTCAST RowCountPtr, PTRFMTCAST RowStatusArray); #endif if (!isValidStmt(stmt)) return SQL_INVALID_HANDLE; clearStmtErrors(stmt); /* check statement cursor state, query should be executed */ if (stmt->State < EXECUTED0 || stmt->State == FETCHED) { /* Function sequence error */ addStmtError(stmt, "HY010", NULL, 0); return SQL_ERROR; } if (stmt->State == EXECUTED0) { /* Invalid cursor state */ addStmtError(stmt, "24000", NULL, 0); return SQL_ERROR; } rc = MNDBFetchScroll(stmt, FetchOrientation, FetchOffset, RowStatusArray); if (SQL_SUCCEEDED(rc) || rc == SQL_NO_DATA) stmt->State = EXTENDEDFETCHED; if (SQL_SUCCEEDED(rc) && RowCountPtr) { #ifdef BUILD_REAL_64_BIT_MODE /* note: only defined on Debian Lenny */ WriteValue(RowCountPtr, (SQLUINTEGER) stmt->rowSetSize); #else WriteValue(RowCountPtr, (SQLULEN) stmt->rowSetSize); #endif } return rc; }