: drop-table-sql ( table -- statement )
[
- "drop table " 0% 0% ";" 0% drop
+ "drop table " 0% 0% drop
] query-make ;
M: postgresql-db drop-sql-statement ( class -- seq )
number>string " limit " prepend append
] curry change-sql drop ;
-: make-advanced-statement ( tuple advanced -- )
+: make-advanced-statement ( tuple advanced -- tuple' )
+ dupd
{
[ group>> [ do-group ] [ drop ] if* ]
[ order>> [ do-order ] [ drop ] if* ]
[ offset>> [ do-offset ] [ drop ] if* ]
} 2cleave ;
-M: db <advanced-select-statement> ( tuple class advanced -- tuple )
- >r <select-by-slots-statement> r>
- dupd make-advanced-statement ;
+M: db <advanced-select-statement> ( tuple class group order limit offset -- tuple )
+ advanced-statement boa
+ [ <select-by-slots-statement> ] dip make-advanced-statement ;
HOOK: <delete-tuples-statement> db ( tuple class -- obj )
HOOK: <select-by-slots-statement> db ( tuple class -- tuple )
TUPLE: advanced-statement group order offset limit ;
-HOOK: <advanced-select-statement> db ( tuple class advanced -- tuple )
+HOOK: <advanced-select-statement> db ( tuple class group order offset limit -- tuple )
HOOK: insert-tuple* db ( tuple statement -- )
[ bind-tuple ] keep execute-statement
] with-disposal ;
+: do-select ( exemplar-tuple statement -- tuples )
+ [ [ bind-tuple ] [ query-tuples ] 2bi ] with-disposal ;
+
: select-tuples ( tuple -- tuples )
- dup dup class <select-by-slots-statement> [
- [ bind-tuple ] [ query-tuples ] 2bi
- ] with-disposal ;
+ dup dup class <select-by-slots-statement> do-select ;
-: select-tuple ( tuple -- tuple/f ) select-tuples ?first ;
+: select-tuple ( tuple -- tuple/f )
+ dup dup class f f f 1 <advanced-select-statement>
+ do-select ?first ;