Module: sql-odbc-implementation Author: eec Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND // $HopeName: DBdylan-sql-odbc!odbc-rs-substrate.dylan(trunk.2) $ define abstract sealed class () slot %record :: , required-init-keyword: record:; // Record numbers start at 0. slot %current-record-number :: = -1; end class; define method next-record(result-set :: ) => () let stmt = result-set.%record.statement; let return-code = SQLFetch(stmt.%statement-handle); assert-odbc-goodness(return-code, stmt.connection.dbms.%environment-handle, stmt.connection.%connection-handle, stmt.%statement-handle); result-set.%current-record-number := result-set.%current-record-number + 1; end method; define method next-result-set-state(result-set :: , state :: ) => (next-state :: ) next-record(result-set); state; end method; define method acquire-initial-dbcs-state(result-set :: ) => (initial-state :: ) let initial-state = next-method(); block () next-result-set-state(result-set, initial-state); exception (condition :: ) //++ correct condition initial-state.at-end? := #t; initial-state; end block; end method; define method acquire-dbcs-element(result-set :: , key :: ) => (dbcs-element :: ) while (key > result-set.%current-record-number) next-record(result-set); end while; if (key = result-set.%current-record-number) result-set.liaison(result-set.%record); else // key < result-set.%current-record-number error(make()); end if; end method;