cache statements in db

db4
Doug Coleman 2008-02-27 19:30:31 -06:00
parent 3fcac9bd3d
commit 78266a3fc8
2 changed files with 28 additions and 29 deletions

View File

@ -5,10 +5,14 @@ namespaces sequences sequences.lib tuples words strings
tools.walker ; tools.walker ;
IN: db IN: db
TUPLE: db handle ; TUPLE: db
! TUPLE: db handle insert-statements update-statements delete-statements ; handle
insert-statements
update-statements
delete-statements ;
: <db> ( handle -- obj ) : <db> ( handle -- obj )
! H{ } clone H{ } clone H{ } clone H{ } clone H{ } clone H{ } clone
db construct-boa ; db construct-boa ;
GENERIC: make-db* ( seq class -- db ) GENERIC: make-db* ( seq class -- db )
@ -21,9 +25,9 @@ HOOK: db-close db ( handle -- )
: dispose-db ( db -- ) : dispose-db ( db -- )
dup db [ dup db [
! dup db-insert-statements dispose-statements dup db-insert-statements dispose-statements
! dup db-update-statements dispose-statements dup db-update-statements dispose-statements
! dup db-delete-statements dispose-statements dup db-delete-statements dispose-statements
db-handle db-close db-handle db-close
] with-variable ; ] with-variable ;
@ -50,7 +54,6 @@ GENERIC# row-column 1 ( result-set n -- obj )
GENERIC: advance-row ( result-set -- ) GENERIC: advance-row ( result-set -- )
GENERIC: more-rows? ( result-set -- ? ) GENERIC: more-rows? ( result-set -- ? )
! must be called from within with-disposal
: execute-statement ( statement -- ) : execute-statement ( statement -- )
dup sequence? [ dup sequence? [
[ execute-statement ] each [ execute-statement ] each
@ -101,7 +104,6 @@ GENERIC: more-rows? ( result-set -- ? )
: do-bound-command ( obj query -- ) : do-bound-command ( obj query -- )
[ bind-statement ] keep execute-statement ; [ bind-statement ] keep execute-statement ;
SYMBOL: in-transaction SYMBOL: in-transaction
HOOK: begin-transaction db ( -- ) HOOK: begin-transaction db ( -- )
HOOK: commit-transaction db ( -- ) HOOK: commit-transaction db ( -- )

View File

@ -26,14 +26,14 @@ IN: db.tuples
HOOK: create-sql-statement db ( class -- obj ) HOOK: create-sql-statement db ( class -- obj )
HOOK: drop-sql-statement db ( class -- obj ) HOOK: drop-sql-statement db ( class -- obj )
HOOK: <insert-native-statement> db ( tuple -- obj ) HOOK: <insert-native-statement> db ( class -- obj )
HOOK: <insert-assigned-statement> db ( tuple -- obj ) HOOK: <insert-assigned-statement> db ( class -- obj )
HOOK: <update-tuple-statement> db ( tuple -- obj ) HOOK: <update-tuple-statement> db ( class -- obj )
HOOK: <update-tuples-statement> db ( tuple -- obj ) HOOK: <update-tuples-statement> db ( class -- obj )
HOOK: <delete-tuple-statement> db ( tuple -- obj ) HOOK: <delete-tuple-statement> db ( class -- obj )
HOOK: <delete-tuples-statement> db ( tuple -- obj ) HOOK: <delete-tuples-statement> db ( class -- obj )
HOOK: <select-by-slots-statement> db ( tuple -- tuple ) HOOK: <select-by-slots-statement> db ( tuple -- tuple )
@ -73,14 +73,14 @@ HOOK: insert-tuple* db ( tuple statement -- )
drop-sql-statement [ execute-statement ] with-disposals ; drop-sql-statement [ execute-statement ] with-disposals ;
: insert-native ( tuple -- ) : insert-native ( tuple -- )
dup class <insert-native-statement> [ dup class
[ bind-tuple ] 2keep dup . insert-tuple* db get db-insert-statements [ <insert-native-statement> ] cache
] with-disposal ; [ bind-tuple ] 2keep insert-tuple* ;
: insert-assigned ( tuple -- ) : insert-assigned ( tuple -- )
dup class <insert-assigned-statement> [ dup class
[ bind-tuple ] keep execute-statement db get db-insert-statements [ <insert-assigned-statement> ] cache
] with-disposal ; [ bind-tuple ] keep execute-statement ;
: insert-tuple ( tuple -- ) : insert-tuple ( tuple -- )
dup class db-columns find-primary-key assigned-id? [ dup class db-columns find-primary-key assigned-id? [
@ -90,17 +90,14 @@ HOOK: insert-tuple* db ( tuple statement -- )
] if ; ] if ;
: update-tuple ( tuple -- ) : update-tuple ( tuple -- )
dup class <update-tuple-statement> [ dup class
[ bind-tuple ] keep execute-statement db get db-update-statements [ <update-tuple-statement> ] cache
] with-disposal ; [ bind-tuple ] keep execute-statement ;
! : update-tuples ( seq -- )
! <update-tuples-statement> execute-statement ;
: delete-tuple ( tuple -- ) : delete-tuple ( tuple -- )
dup class <delete-tuple-statement> [ dup class
[ bind-tuple ] keep execute-statement db get db-delete-statements [ <delete-tuple-statement> ] cache
] with-disposal ; [ bind-tuple ] keep execute-statement ;
: select-tuples ( tuple -- tuple ) : select-tuples ( tuple -- tuple )
dup dup class <select-by-slots-statement> [ dup dup class <select-by-slots-statement> [