{ insert-tuple update-tuple delete-tuples } related-words
+HELP: each-tuple
+{ $values
+ { "query/tuple" tuple }
+ { "quot" { $quotation ( tuple -- ) } } }
+{ $description "An SQL query is constructed from the slots of the exemplar tuple that are not " { $link f } ". The " { $snippet "quot" } " is applied to each tuple from the database that matches the query constructed from the exemplar tuple." } ;
+
HELP: select-tuple
{ $values
{ "query/tuple" tuple }
{ "n" integer } }
{ $description "Returns the number of items that would be returned if the query were a select query. Counting the tuples with this word is more efficient than calling " { $link length } " on the result of " { $link select-tuples } "." } ;
-{ select-tuple select-tuples count-tuples } related-words
+{ each-tuple select-tuple select-tuples count-tuples } related-words
{ $subsections delete-tuples }
"Querying tuples:"
{ $subsections
+ each-tuple
select-tuple
select-tuples
count-tuples
'[ slot-name>> _ set-slot-named ] 2each
] keep ;
+: query-tuples-each ( exemplar-tuple statement quot: ( tuple -- ) -- )
+ [ [ out-params>> ] keep query-results ] dip '[
+ [ sql-row-typed swap resulting-tuple @ ] 2with query-each
+ ] with-disposal ; inline
+
: query-tuples ( exemplar-tuple statement -- seq )
- [ out-params>> ] keep query-results [
- [ sql-row-typed swap resulting-tuple ] 2with query-map
- ] with-disposal ;
+ [ ] collector [ query-tuples-each ] dip { } like ;
: query-modify-tuple ( tuple statement -- )
[ query-results [ sql-row-typed ] with-disposal ] keep
[ <insert-user-assigned-statement> ] cache
[ bind-tuple ] keep execute-statement ;
+: do-each-tuple ( exemplar-tuple statement quot: ( tuple -- ) -- tuples )
+ '[ [ bind-tuple ] [ _ query-tuples-each ] 2bi ] with-disposal
+ ; inline
+
: do-select ( exemplar-tuple statement -- tuples )
[ [ bind-tuple ] [ query-tuples ] 2bi ] with-disposal ;
: count-tuples ( query/tuple -- n )
>query [ tuple>> ] [ <count-statement> ] bi do-count
[ first string>number ] map dup length 1 = [ first ] when ;
+
+: each-tuple ( query/tuple quot: ( tuple -- ) -- )
+ [ >query [ tuple>> ] [ query>statement ] bi ] dip do-each-tuple
+ ; inline