factor/extra/db2/statements/statements.factor

41 lines
1.2 KiB
Factor

! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors continuations destructors fry kernel
sequences db2.result-sets db2.connections ;
IN: db2.statements
TUPLE: statement handle sql in out ;
: new-statement ( sql in out class -- statement )
new
swap >>out
swap >>in
swap >>sql ;
HOOK: <statement> db-connection ( sql in out -- statement )
GENERIC: execute-statement* ( statement type -- )
GENERIC: statement>result-set ( statement -- result-set )
M: object execute-statement* ( statement type -- )
drop '[ _ statement>result-set dispose ]
[ parse-db-error rethrow ] recover ;
: execute-one-statement ( statement -- )
dup type>> execute-statement* ;
: execute-statement ( statement -- )
dup sequence?
[ [ execute-one-statement ] each ]
[ execute-one-statement ] if ;
: statement-each ( statement quot: ( statement -- ) -- )
over more-rows?
[ [ call ] 2keep over advance-row statement-each ]
[ 2drop ] if ; inline recursive
: statement-map ( statement quot -- sequence )
accumulator [ statement-each ] dip { } like ; inline
: statement>result-sequence ( statement -- sequence )
statement>result-set [ [ sql-row ] statement-map ] with-disposal ;