db.tuples[-docs]: add each-tuple

windows-high-dpi
Alexander Iljin 2018-02-14 15:26:28 +01:00 committed by John Benediktsson
parent e077aad163
commit 16be5d0353
2 changed files with 22 additions and 4 deletions

View File

@ -130,6 +130,12 @@ HELP: delete-tuples
{ insert-tuple update-tuple delete-tuples } related-words { 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 HELP: select-tuple
{ $values { $values
{ "query/tuple" tuple } { "query/tuple" tuple }
@ -148,7 +154,7 @@ HELP: count-tuples
{ "n" integer } } { "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 } "." } ; { $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
@ -183,6 +189,7 @@ ARTICLE: "db-tuples-words" "High-level tuple/database words"
{ $subsections delete-tuples } { $subsections delete-tuples }
"Querying tuples:" "Querying tuples:"
{ $subsections { $subsections
each-tuple
select-tuple select-tuple
select-tuples select-tuples
count-tuples count-tuples

View File

@ -33,10 +33,13 @@ GENERIC: eval-generator ( singleton -- object )
'[ slot-name>> _ set-slot-named ] 2each '[ slot-name>> _ set-slot-named ] 2each
] keep ; ] 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 ) : query-tuples ( exemplar-tuple statement -- seq )
[ out-params>> ] keep query-results [ [ ] collector [ query-tuples-each ] dip { } like ;
[ sql-row-typed swap resulting-tuple ] 2with query-map
] with-disposal ;
: query-modify-tuple ( tuple statement -- ) : query-modify-tuple ( tuple statement -- )
[ query-results [ sql-row-typed ] with-disposal ] keep [ query-results [ sql-row-typed ] with-disposal ] keep
@ -61,6 +64,10 @@ GENERIC: eval-generator ( singleton -- object )
[ <insert-user-assigned-statement> ] cache [ <insert-user-assigned-statement> ] cache
[ bind-tuple ] keep execute-statement ; [ 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 ) : do-select ( exemplar-tuple statement -- tuples )
[ [ bind-tuple ] [ query-tuples ] 2bi ] with-disposal ; [ [ bind-tuple ] [ query-tuples ] 2bi ] with-disposal ;
@ -155,3 +162,7 @@ ERROR: no-defined-persistent object ;
: count-tuples ( query/tuple -- n ) : count-tuples ( query/tuple -- n )
>query [ tuple>> ] [ <count-statement> ] bi do-count >query [ tuple>> ] [ <count-statement> ] bi do-count
[ first string>number ] map dup length 1 = [ first ] when ; [ 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