! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors continuations destructors fry kernel
-namespaces sequences strings db2.statements ;
+USING: accessors continuations db2.result-sets db2.sqlite.lib
+db2.sqlite.result-sets db2.sqlite.statements db2.statements
+destructors fry kernel math namespaces sequences strings ;
IN: db2
<PRIVATE
: sql-query ( sql -- sequence )
f f <statement> [ statement>result-sequence ] with-disposal ;
+: sql-bind-command ( sequence string -- )
+ f f <statement> [
+ sqlite-maybe-prepare [
+ handle>> '[ [ _ ] 2dip 1+ swap sqlite-bind-text ] each-index
+ ] [
+ sqlite-result-set new-result-set advance-row
+ ] bi
+ ] with-disposal ;
+
+: sql-bind-query ( in-sequence string -- out-sequence )
+ f f <statement> [
+ sqlite-maybe-prepare [
+ handle>> '[ [ _ ] 2dip 1+ swap sqlite-bind-text ] each-index
+ ] [
+ statement>result-sequence
+ ] bi
+ ] with-disposal ;
! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors kernel sequences ;
+USING: accessors kernel sequences combinators ;
IN: db2.result-sets
TUPLE: result-set sql in out handle n max ;
dup #rows >>max
0 >>n ;
-: new-result-set ( query handle class -- result-set )
+: new-result-set ( query class -- result-set )
new
- swap >>handle
- swap [ sql>> >>sql ] [ in>> >>in ] [ out>> >>out ] tri ;
+ swap {
+ [ handle>> >>handle ]
+ [ sql>> >>sql ]
+ [ in>> >>in ]
+ [ out>> >>out ]
+ } cleave ;
: sql-row ( result-set -- seq )
dup #columns [ column ] with map ;
M: sqlite-statement statement>result-set*
sqlite-maybe-prepare
- dup handle>> sqlite-result-set new-result-set
+ sqlite-result-set new-result-set
dup advance-row ;
M: sqlite-result-set advance-row ( result-set -- )
! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: tools.test db2.statements kernel db2 db2.tester
-continuations db2.errors ;
+continuations db2.errors accessors ;
IN: db2.statements.tests
{ 1 0 } [ [ drop ] statement-each ] must-infer-as
: test-sql-command ( -- )
[ "drop table computer;" sql-command ] ignore-errors
+ [ "drop table computer;" sql-command ]
+ [ [ sql-table-missing? ] [ table>> "computer" = ] bi and ] must-fail-with
+
[ ] [
"create table computer(name varchar, os varchar);"
sql-command
[ "selectt" sql-query ]
[ sql-syntax-error? ] must-fail-with
+ [ ] [
+ { "clubber" "windows" }
+ "insert into computer (name, os) values(?, ?);"
+ sql-bind-command
+ ] unit-test
+
+ [ { { "windows" } } ] [
+ { "clubber" }
+ "select os from computer where name = ?;" sql-bind-query
+ ] unit-test
+
;
[ test-sql-command ] test-dbs
-