Merge branch 'master' of git://factorcode.org/git/factor
commit
73d928fa93
|
@ -177,7 +177,8 @@ M: db <select-by-slots-statement> ( tuple class -- statement )
|
||||||
[ offset>> [ do-offset ] [ drop ] if* ]
|
[ offset>> [ do-offset ] [ drop ] if* ]
|
||||||
} 2cleave ;
|
} 2cleave ;
|
||||||
|
|
||||||
M: db make-query ( tuple class query -- tuple )
|
M: db query>statement ( query -- tuple )
|
||||||
|
[ tuple>> dup class ] keep
|
||||||
[ <select-by-slots-statement> ] dip make-query* ;
|
[ <select-by-slots-statement> ] dip make-query* ;
|
||||||
|
|
||||||
! select ID, NAME, SCORE from EXAM limit 1 offset 3
|
! select ID, NAME, SCORE from EXAM limit 1 offset 3
|
||||||
|
@ -194,9 +195,8 @@ M: db make-query ( tuple class query -- tuple )
|
||||||
>r >r parse-sql 4drop r> r>
|
>r >r parse-sql 4drop r> r>
|
||||||
<simple-statement> maybe-make-retryable do-select ;
|
<simple-statement> maybe-make-retryable do-select ;
|
||||||
|
|
||||||
M: db <count-statement> ( tuple class groups -- statement )
|
M: db <count-statement> ( query -- statement )
|
||||||
\ query new
|
[ tuple>> dup class ] keep
|
||||||
swap >>group
|
|
||||||
[ [ "select count(*) from " 0% 0% where-clause ] query-make ]
|
[ [ "select count(*) from " 0% 0% where-clause ] query-make ]
|
||||||
dip make-query* ;
|
dip make-query* ;
|
||||||
|
|
||||||
|
|
|
@ -357,7 +357,7 @@ TUPLE: exam id name score ;
|
||||||
T{ exam } select-tuples
|
T{ exam } select-tuples
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
[ 4 ] [ T{ exam } f count-tuples ] unit-test ;
|
[ 4 ] [ T{ exam } count-tuples ] unit-test ;
|
||||||
|
|
||||||
TUPLE: bignum-test id m n o ;
|
TUPLE: bignum-test id m n o ;
|
||||||
: <bignum-test> ( m n o -- obj )
|
: <bignum-test> ( m n o -- obj )
|
||||||
|
|
|
@ -6,16 +6,6 @@ math.parser io prettyprint db.types continuations
|
||||||
destructors mirrors sets ;
|
destructors mirrors sets ;
|
||||||
IN: db.tuples
|
IN: db.tuples
|
||||||
|
|
||||||
TUPLE: query tuple group order offset limit ;
|
|
||||||
|
|
||||||
: <query> ( -- query ) \ query new ;
|
|
||||||
|
|
||||||
GENERIC: >query ( object -- query )
|
|
||||||
|
|
||||||
M: query >query ;
|
|
||||||
|
|
||||||
M: tuple >query <query> swap >>tuple ;
|
|
||||||
|
|
||||||
! returns a sequence of prepared-statements
|
! returns a sequence of prepared-statements
|
||||||
HOOK: create-sql-statement db ( class -- object )
|
HOOK: create-sql-statement db ( class -- object )
|
||||||
HOOK: drop-sql-statement db ( class -- object )
|
HOOK: drop-sql-statement db ( class -- object )
|
||||||
|
@ -25,8 +15,8 @@ HOOK: <insert-user-assigned-statement> db ( class -- object )
|
||||||
HOOK: <update-tuple-statement> db ( class -- object )
|
HOOK: <update-tuple-statement> db ( class -- object )
|
||||||
HOOK: <delete-tuples-statement> db ( tuple class -- object )
|
HOOK: <delete-tuples-statement> db ( tuple class -- object )
|
||||||
HOOK: <select-by-slots-statement> db ( tuple class -- tuple )
|
HOOK: <select-by-slots-statement> db ( tuple class -- tuple )
|
||||||
HOOK: <count-statement> db ( tuple class groups -- statement )
|
HOOK: <count-statement> db ( query -- statement )
|
||||||
HOOK: make-query db ( tuple class query -- statement )
|
HOOK: query>statement db ( query -- statement )
|
||||||
|
|
||||||
HOOK: insert-tuple* db ( tuple statement -- )
|
HOOK: insert-tuple* db ( tuple statement -- )
|
||||||
|
|
||||||
|
@ -93,6 +83,35 @@ GENERIC: eval-generator ( singleton -- object )
|
||||||
with-disposal
|
with-disposal
|
||||||
] if ; inline
|
] if ; inline
|
||||||
|
|
||||||
|
: insert-db-assigned-statement ( tuple -- )
|
||||||
|
dup class
|
||||||
|
db get insert-statements>> [ <insert-db-assigned-statement> ] cache
|
||||||
|
[ bind-tuple ] 2keep insert-tuple* ;
|
||||||
|
|
||||||
|
: insert-user-assigned-statement ( tuple -- )
|
||||||
|
dup class
|
||||||
|
db get insert-statements>> [ <insert-user-assigned-statement> ] cache
|
||||||
|
[ bind-tuple ] keep execute-statement ;
|
||||||
|
|
||||||
|
: do-select ( exemplar-tuple statement -- tuples )
|
||||||
|
[ [ bind-tuple ] [ query-tuples ] 2bi ] with-disposal ;
|
||||||
|
|
||||||
|
: do-count ( exemplar-tuple statement -- tuples )
|
||||||
|
[ [ bind-tuple ] [ nip default-query ] 2bi ] with-disposal ;
|
||||||
|
|
||||||
|
! High level
|
||||||
|
|
||||||
|
TUPLE: query tuple group order offset limit ;
|
||||||
|
|
||||||
|
: <query> ( -- query ) \ query new ;
|
||||||
|
|
||||||
|
GENERIC: >query ( object -- query )
|
||||||
|
|
||||||
|
M: query >query clone ;
|
||||||
|
|
||||||
|
M: tuple >query <query> swap >>tuple ;
|
||||||
|
|
||||||
|
|
||||||
: create-table ( class -- )
|
: create-table ( class -- )
|
||||||
create-sql-statement [ execute-statement ] with-disposals ;
|
create-sql-statement [ execute-statement ] with-disposals ;
|
||||||
|
|
||||||
|
@ -105,21 +124,9 @@ GENERIC: eval-generator ( singleton -- object )
|
||||||
] curry ignore-errors
|
] curry ignore-errors
|
||||||
] [ create-table ] bi ;
|
] [ create-table ] bi ;
|
||||||
|
|
||||||
: ensure-table ( class -- )
|
: ensure-table ( class -- ) [ create-table ] curry ignore-errors ;
|
||||||
[ create-table ] curry ignore-errors ;
|
|
||||||
|
|
||||||
: ensure-tables ( classes -- )
|
: ensure-tables ( classes -- ) [ ensure-table ] each ;
|
||||||
[ ensure-table ] each ;
|
|
||||||
|
|
||||||
: insert-db-assigned-statement ( tuple -- )
|
|
||||||
dup class
|
|
||||||
db get insert-statements>> [ <insert-db-assigned-statement> ] cache
|
|
||||||
[ bind-tuple ] 2keep insert-tuple* ;
|
|
||||||
|
|
||||||
: insert-user-assigned-statement ( tuple -- )
|
|
||||||
dup class
|
|
||||||
db get insert-statements>> [ <insert-user-assigned-statement> ] cache
|
|
||||||
[ bind-tuple ] keep execute-statement ;
|
|
||||||
|
|
||||||
: insert-tuple ( tuple -- )
|
: insert-tuple ( tuple -- )
|
||||||
dup class db-columns find-primary-key db-assigned-id-spec?
|
dup class db-columns find-primary-key db-assigned-id-spec?
|
||||||
|
@ -135,26 +142,14 @@ GENERIC: eval-generator ( singleton -- object )
|
||||||
[ bind-tuple ] keep execute-statement
|
[ bind-tuple ] keep execute-statement
|
||||||
] with-disposal ;
|
] with-disposal ;
|
||||||
|
|
||||||
: do-select ( exemplar-tuple statement -- tuples )
|
: select-tuples ( query/tuple -- tuples )
|
||||||
[ [ bind-tuple ] [ query-tuples ] 2bi ] with-disposal ;
|
>query [ tuple>> ] [ query>statement ] bi do-select ;
|
||||||
|
|
||||||
: query ( tuple query -- tuples )
|
: select-tuple ( query/tuple -- tuple/f )
|
||||||
[ dup dup class ] dip make-query do-select ;
|
>query 1 >>limit [ tuple>> ] [ query>statement ] bi do-select
|
||||||
|
|
||||||
|
|
||||||
: select-tuples ( tuple -- tuples )
|
|
||||||
dup dup class <select-by-slots-statement> do-select ;
|
|
||||||
|
|
||||||
: select-tuple ( tuple -- tuple/f )
|
|
||||||
dup dup class \ query new 1 >>limit make-query do-select
|
|
||||||
[ f ] [ first ] if-empty ;
|
[ f ] [ first ] if-empty ;
|
||||||
|
|
||||||
: do-count ( exemplar-tuple statement -- tuples )
|
: count-tuples ( query/tuple -- n )
|
||||||
[
|
>query [ tuple>> ] [ <count-statement> ] bi do-count
|
||||||
[ bind-tuple ] [ nip default-query ] 2bi
|
|
||||||
] with-disposal ;
|
|
||||||
|
|
||||||
: count-tuples ( tuple groups -- n )
|
|
||||||
>r dup dup class r> <count-statement> do-count
|
|
||||||
dup length 1 =
|
dup length 1 =
|
||||||
[ first first string>number ] [ [ first string>number ] map ] if ;
|
[ first first string>number ] [ [ first string>number ] map ] if ;
|
||||||
|
|
|
@ -90,7 +90,7 @@ M: comment entity-url
|
||||||
|
|
||||||
: list-posts ( -- posts )
|
: list-posts ( -- posts )
|
||||||
f <post> "author" value >>author
|
f <post> "author" value >>author
|
||||||
select-tuples [ dup id>> f <comment> f count-tuples >>comments ] map
|
select-tuples [ dup id>> f <comment> count-tuples >>comments ] map
|
||||||
reverse-chronological-order ;
|
reverse-chronological-order ;
|
||||||
|
|
||||||
: <list-posts-action> ( -- action )
|
: <list-posts-action> ( -- action )
|
||||||
|
|
Loading…
Reference in New Issue