more generics in the statement protocol
parent
6db0999775
commit
66a4ec5896
|
@ -23,36 +23,24 @@ PRIVATE>
|
||||||
|
|
||||||
: sql-bind-command ( sequence string -- )
|
: sql-bind-command ( sequence string -- )
|
||||||
f f <statement> [
|
f f <statement> [
|
||||||
sqlite-maybe-prepare [
|
prepare-statement
|
||||||
handle>> swap sqlite-bind-sequence
|
[ bind-sequence ] [ statement>result-set drop ] bi
|
||||||
] [
|
|
||||||
>sqlite-result-set drop
|
|
||||||
] bi
|
|
||||||
] with-disposal ;
|
] with-disposal ;
|
||||||
|
|
||||||
: sql-bind-query ( in-sequence string -- out-sequence )
|
: sql-bind-query ( in-sequence string -- out-sequence )
|
||||||
f f <statement> [
|
f f <statement> [
|
||||||
sqlite-maybe-prepare [
|
prepare-statement
|
||||||
handle>> swap sqlite-bind-sequence
|
[ bind-sequence ] [ statement>result-sequence ] bi
|
||||||
] [
|
|
||||||
statement>result-sequence
|
|
||||||
] bi
|
|
||||||
] with-disposal ;
|
] with-disposal ;
|
||||||
|
|
||||||
: sql-bind-typed-command ( in-sequence string -- )
|
: sql-bind-typed-command ( in-sequence string -- )
|
||||||
f f <statement> [
|
f f <statement> [
|
||||||
sqlite-maybe-prepare [
|
prepare-statement
|
||||||
handle>> swap sqlite-bind-typed-sequence
|
[ bind-typed-sequence ] [ statement>result-set drop ] bi
|
||||||
] [
|
|
||||||
>sqlite-result-set drop
|
|
||||||
] bi
|
|
||||||
] with-disposal ;
|
] with-disposal ;
|
||||||
|
|
||||||
: sql-bind-typed-query ( in-sequence string -- out-sequence )
|
: sql-bind-typed-query ( in-sequence string -- out-sequence )
|
||||||
f f <statement> [
|
f f <statement> [
|
||||||
sqlite-maybe-prepare [
|
prepare-statement
|
||||||
handle>> swap sqlite-bind-typed-sequence
|
[ bind-typed-sequence ] [ statement>result-sequence ] bi
|
||||||
] [
|
|
||||||
statement>result-sequence
|
|
||||||
] bi
|
|
||||||
] with-disposal ;
|
] with-disposal ;
|
||||||
|
|
|
@ -114,8 +114,5 @@ IN: db2.sqlite.lib
|
||||||
: sqlite-next ( prepared -- ? )
|
: sqlite-next ( prepared -- ? )
|
||||||
sqlite3_step sqlite-step-has-more-rows? ;
|
sqlite3_step sqlite-step-has-more-rows? ;
|
||||||
|
|
||||||
: sqlite-bind-sequence ( handle sequence -- )
|
|
||||||
[ 1+ swap sqlite-bind-text ] assoc-with each-index ;
|
|
||||||
|
|
||||||
: >sqlite-result-set ( statement -- result-set )
|
: >sqlite-result-set ( statement -- result-set )
|
||||||
sqlite-result-set new-result-set dup advance-row ;
|
sqlite-result-set new-result-set dup advance-row ;
|
||||||
|
|
|
@ -14,8 +14,6 @@ M: sqlite-statement dispose
|
||||||
handle>>
|
handle>>
|
||||||
[ [ sqlite3_reset drop ] [ sqlite-finalize ] bi ] when* ;
|
[ [ sqlite3_reset drop ] [ sqlite-finalize ] bi ] when* ;
|
||||||
|
|
||||||
: sqlite-maybe-prepare ( statement -- statement )
|
M: sqlite-statement prepare-statement* ( statement -- statement )
|
||||||
dup handle>> [
|
|
||||||
db-connection get handle>> over sql>> sqlite-prepare
|
db-connection get handle>> over sql>> sqlite-prepare
|
||||||
>>handle
|
>>handle ;
|
||||||
] unless ;
|
|
||||||
|
|
|
@ -84,5 +84,12 @@ IN: db2.sqlite.types
|
||||||
[ no-sql-type ]
|
[ no-sql-type ]
|
||||||
} case ;
|
} case ;
|
||||||
|
|
||||||
: sqlite-bind-typed-sequence ( handle sequence -- )
|
M: sqlite-statement bind-sequence ( sequence statement -- )
|
||||||
[ 1+ swap first2 swap bind-next-sqlite-type ] assoc-with each-index ;
|
handle>> '[
|
||||||
|
[ _ ] 2dip 1+ swap sqlite-bind-text
|
||||||
|
] each-index ;
|
||||||
|
|
||||||
|
M: sqlite-statement bind-typed-sequence ( sequence statement -- )
|
||||||
|
handle>> '[
|
||||||
|
[ _ ] 2dip 1+ swap first2 swap bind-next-sqlite-type
|
||||||
|
] each-index ;
|
||||||
|
|
|
@ -15,6 +15,9 @@ TUPLE: statement handle sql in out type ;
|
||||||
HOOK: <statement> db-connection ( sql in out -- statement )
|
HOOK: <statement> db-connection ( sql in out -- statement )
|
||||||
GENERIC: statement>result-set* ( statement -- result-set )
|
GENERIC: statement>result-set* ( statement -- result-set )
|
||||||
GENERIC: execute-statement* ( statement type -- )
|
GENERIC: execute-statement* ( statement type -- )
|
||||||
|
GENERIC: prepare-statement* ( statement -- statement' )
|
||||||
|
GENERIC: bind-sequence ( sequence statement -- )
|
||||||
|
GENERIC: bind-typed-sequence ( sequence statement -- )
|
||||||
|
|
||||||
: statement>result-set ( statement -- result-set )
|
: statement>result-set ( statement -- result-set )
|
||||||
[ statement>result-set* ]
|
[ statement>result-set* ]
|
||||||
|
@ -31,6 +34,9 @@ M: object execute-statement* ( statement type -- )
|
||||||
[ [ execute-one-statement ] each ]
|
[ [ execute-one-statement ] each ]
|
||||||
[ execute-one-statement ] if ;
|
[ execute-one-statement ] if ;
|
||||||
|
|
||||||
|
: prepare-statement ( statement -- statement )
|
||||||
|
dup handle>> [ prepare-statement* ] unless ;
|
||||||
|
|
||||||
: statement-each ( statement quot: ( statement -- ) -- )
|
: statement-each ( statement quot: ( statement -- ) -- )
|
||||||
over more-rows?
|
over more-rows?
|
||||||
[ [ call ] 2keep over advance-row statement-each ]
|
[ [ call ] 2keep over advance-row statement-each ]
|
||||||
|
|
Loading…
Reference in New Issue