我意外地向datomic提交了一个事务,我想"撤消"整个事务.我确切知道它是什么交易,我可以看到它的数据,但我不知道如何从那里得到回滚交易.
Fra*_*ila 21
基本程序:
在Clojure中,您的代码如下所示:
(defn rollback
"Reassert retracted datoms and retract asserted datoms in a transaction,
effectively \"undoing\" the transaction.
WARNING: *very* naive function!"
[conn tx]
(let [tx-log (-> conn d/log (d/tx-range tx nil) first) ; find the transaction
txid (-> tx-log :t d/t->tx) ; get the transaction entity id
newdata (->> (:data tx-log) ; get the datoms from the transaction
(remove #(= (:e %) txid)) ; remove transaction-metadata datoms
; invert the datoms add/retract state.
(map #(do [(if (:added %) :db/retract :db/add) (:e %) (:a %) (:v %)]))
reverse)] ; reverse order of inverted datoms.
@(d/transact conn newdata))) ; commit new datoms.
Run Code Online (Sandbox Code Playgroud)