parent
41a9bb9ac4
commit
a7afae250d
|
@ -35,7 +35,7 @@ HOOK: db-close db ( handle -- )
|
|||
handle>> db-close
|
||||
] with-variable ;
|
||||
|
||||
TUPLE: statement handle sql in-params out-params bind-params bound? type ;
|
||||
TUPLE: statement handle sql in-params out-params bind-params bound? type retries ;
|
||||
TUPLE: simple-statement < statement ;
|
||||
TUPLE: prepared-statement < statement ;
|
||||
|
||||
|
@ -89,7 +89,7 @@ M: object execute-statement* ( statement type -- )
|
|||
swap >>out-params
|
||||
swap >>in-params
|
||||
swap >>sql ;
|
||||
|
||||
|
||||
: sql-row ( result-set -- seq )
|
||||
dup #columns [ row-column ] with map ;
|
||||
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors kernel math namespaces sequences random
|
||||
strings math.parser math.intervals combinators
|
||||
math.bitfields.lib namespaces.lib db db.tuples db.types ;
|
||||
math.bitfields.lib namespaces.lib db db.tuples db.types
|
||||
sequences.lib ;
|
||||
IN: db.queries
|
||||
|
||||
GENERIC: where ( specs obj -- )
|
||||
|
@ -99,16 +100,15 @@ M: string where ( spec obj -- ) object-where ;
|
|||
] with filter ;
|
||||
|
||||
: where-clause ( tuple specs -- )
|
||||
dupd filter-slots
|
||||
dup empty? [
|
||||
2drop
|
||||
dupd filter-slots [
|
||||
drop
|
||||
] [
|
||||
" where " 0% [
|
||||
" and " 0%
|
||||
] [
|
||||
2dup slot-name>> swap get-slot-named where
|
||||
] interleave drop
|
||||
] if ;
|
||||
] if-empty ;
|
||||
|
||||
M: db <delete-tuples-statement> ( tuple table -- sql )
|
||||
[
|
||||
|
|
|
@ -5,7 +5,9 @@ IN: db.sql
|
|||
|
||||
SYMBOLS: insert update delete select distinct columns from as
|
||||
where group-by having order-by limit offset is-null desc all
|
||||
any count avg table values ;
|
||||
any count avg table values ? ;
|
||||
|
||||
! Output an s-exp sql statement and an alist of keys/values
|
||||
|
||||
: input-spec, 1, ;
|
||||
: output-spec, 2, ;
|
||||
|
|
|
@ -55,6 +55,7 @@ SINGLETON: retryable
|
|||
[ make-retryable ] map
|
||||
] [
|
||||
retryable >>type
|
||||
10 >>retries
|
||||
] if ;
|
||||
|
||||
: regenerate-params ( statement -- statement )
|
||||
|
@ -69,12 +70,13 @@ SINGLETON: retryable
|
|||
] 2map >>bind-params ;
|
||||
|
||||
M: retryable execute-statement* ( statement type -- )
|
||||
drop
|
||||
[
|
||||
[ query-results dispose t ]
|
||||
[ ]
|
||||
[ regenerate-params bind-statement* f ] cleanup
|
||||
] curry 10 retry drop ;
|
||||
drop [
|
||||
[
|
||||
[ query-results dispose t ]
|
||||
[ ]
|
||||
[ regenerate-params bind-statement* f ] cleanup
|
||||
] curry
|
||||
] [ retries>> ] bi retry drop ;
|
||||
|
||||
: resulting-tuple ( class row out-params -- tuple )
|
||||
rot class new [
|
||||
|
|
Loading…
Reference in New Issue