! Copyright (C) 2008 Doug Coleman.
! Copyright (C) 2018 Alexander Ilin.
! See http://factorcode.org/license.txt for BSD license.
-USING: arrays assocs classes db kernel namespaces
-classes.tuple words sequences slots math accessors
-math.parser io prettyprint continuations
-destructors mirrors sets db.types db.private fry
-combinators.short-circuit db.errors ;
+USING: accessors assocs classes classes.tuple
+combinators.short-circuit continuations db db.errors db.types
+destructors kernel math.parser namespaces sequences sets words ;
IN: db.tuples
HOOK: create-sql-statement db-connection ( class -- object )
: with-disposals ( object quotation -- )
over sequence? [
- over '[ _ dispose-each ] [ ] cleanup
+ over '[ _ dispose-each ] finally
] [
with-disposal
] if ; inline
drop-sql-statement [ execute-statement ] with-disposals ;
: recreate-table ( class -- )
- ensure-defined-persistent
- [
- '[
- [
- _ drop-sql-statement [ execute-statement ] with-disposals
- ] ignore-table-missing
- ] ignore-function-missing
- ] [ create-table ] bi ;
+ [ '[ [ _ drop-table ] ignore-table-missing ] ignore-function-missing ]
+ [ create-table ] bi ;
: ensure-table ( class -- )
- ensure-defined-persistent
'[ [ _ create-table ] ignore-table-exists ] ignore-function-exists ;
: ensure-tables ( classes -- ) [ ensure-table ] each ;
: update-tuples ( query/tuple quot: ( tuple -- tuple'/f ) -- )
'[ @ [ update-tuple ] when* ] each-tuple ; inline
+
+: reject-tuples ( query/tuple quot: ( tuple -- ? ) -- )
+ '[ dup @ [ delete-tuples ] [ drop ] if ] each-tuple ; inline