2008-02-01 18:43:44 -05:00
|
|
|
! Copyright (C) 2005, 2008 Chris Double, Doug Coleman.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-02-03 00:28:33 -05:00
|
|
|
USING: alien arrays assocs classes compiler db db.sql
|
|
|
|
hashtables io.files kernel math math.parser namespaces
|
|
|
|
prettyprint sequences strings tuples alien.c-types
|
|
|
|
continuations db.sqlite.lib db.sqlite.ffi ;
|
2008-02-01 18:43:44 -05:00
|
|
|
IN: db.sqlite
|
|
|
|
|
|
|
|
TUPLE: sqlite-db path ;
|
|
|
|
C: <sqlite-db> sqlite-db
|
|
|
|
|
|
|
|
M: sqlite-db db-open ( db -- )
|
|
|
|
dup sqlite-db-path sqlite-open <db>
|
|
|
|
swap set-delegate ;
|
|
|
|
|
|
|
|
M: sqlite-db dispose ( obj -- )
|
|
|
|
dup db-handle sqlite-close
|
|
|
|
f over set-db-handle
|
|
|
|
f swap set-delegate ;
|
|
|
|
|
|
|
|
: with-sqlite ( path quot -- )
|
|
|
|
>r <sqlite-db> r> with-db ; inline
|
|
|
|
|
|
|
|
TUPLE: sqlite-statement ;
|
|
|
|
C: <sqlite-statement> sqlite-statement
|
|
|
|
|
2008-02-03 00:28:33 -05:00
|
|
|
TUPLE: sqlite-result-set ;
|
|
|
|
: <sqlite-result-set> ( query -- sqlite-result-set )
|
|
|
|
dup statement-handle sqlite-result-set <result-set> ;
|
|
|
|
|
2008-02-01 18:43:44 -05:00
|
|
|
M: sqlite-db <simple-statement> ( str -- obj )
|
|
|
|
<prepared-statement> ;
|
|
|
|
|
|
|
|
M: sqlite-db <prepared-statement> ( str -- obj )
|
|
|
|
db get db-handle over sqlite-prepare
|
|
|
|
{ set-statement-sql set-statement-handle } statement construct
|
|
|
|
<sqlite-statement> [ set-delegate ] keep ;
|
|
|
|
|
|
|
|
M: sqlite-statement dispose ( statement -- )
|
|
|
|
statement-handle sqlite-finalize ;
|
|
|
|
|
2008-02-03 00:28:33 -05:00
|
|
|
M: sqlite-result-set dispose ( result-set -- )
|
|
|
|
f swap set-result-set-handle ;
|
|
|
|
|
2008-02-01 18:43:44 -05:00
|
|
|
M: sqlite-statement bind-statement* ( assoc statement -- )
|
|
|
|
statement-handle swap sqlite-bind-assoc ;
|
|
|
|
|
|
|
|
M: sqlite-statement rebind-statement ( assoc statement -- )
|
2008-02-03 00:28:33 -05:00
|
|
|
dup statement-handle sqlite-reset
|
2008-02-01 18:43:44 -05:00
|
|
|
statement-handle swap sqlite-bind-assoc ;
|
|
|
|
|
2008-02-03 00:28:33 -05:00
|
|
|
M: sqlite-statement execute-statement ( statement -- )
|
|
|
|
statement-handle sqlite-next drop ;
|
|
|
|
|
|
|
|
M: sqlite-result-set #columns ( result-set -- n )
|
|
|
|
result-set-handle sqlite-#columns ;
|
|
|
|
|
|
|
|
M: sqlite-result-set row-column ( result-set n -- obj )
|
|
|
|
>r result-set-handle r> sqlite-column ;
|
2008-02-01 18:43:44 -05:00
|
|
|
|
2008-02-03 00:28:33 -05:00
|
|
|
M: sqlite-result-set advance-row ( result-set -- handle ? )
|
|
|
|
result-set-handle sqlite-next ;
|
2008-02-01 18:43:44 -05:00
|
|
|
|
2008-02-03 00:28:33 -05:00
|
|
|
M: sqlite-statement query-results ( query -- result-set )
|
|
|
|
dup statement-handle sqlite-result-set <result-set> ;
|
2008-02-01 18:43:44 -05:00
|
|
|
|
|
|
|
M: sqlite-db begin-transaction ( -- )
|
2008-02-03 00:28:33 -05:00
|
|
|
"BEGIN" sql-command ;
|
2008-02-01 18:43:44 -05:00
|
|
|
|
|
|
|
M: sqlite-db commit-transaction ( -- )
|
2008-02-03 00:28:33 -05:00
|
|
|
"COMMIT" sql-command ;
|
2008-02-01 18:43:44 -05:00
|
|
|
|
|
|
|
M: sqlite-db rollback-transaction ( -- )
|
2008-02-03 00:28:33 -05:00
|
|
|
"ROLLBACK" sql-command ;
|