Update transaction code.

This commit is contained in:
Alexander K. Hudek 2014-07-24 03:26:15 -04:00
parent 487b3994e9
commit b61d5f00cf
2 changed files with 15 additions and 16 deletions

View file

@ -1,4 +1,4 @@
(defproject views "0.1.0" (defproject views "0.2.0-SNAPSHOT"
:description "You underestimate the power of the SQL side" :description "You underestimate the power of the SQL side"
:url "https://github.com/diligenceengine/views" :url "https://github.com/diligenceengine/views"

View file

@ -35,19 +35,18 @@
(throw e))))) ;; otherwise rethrow (throw e))))) ;; otherwise rethrow
(defmacro with-view-transaction (defmacro with-view-transaction
[config binding & forms] [binding & forms]
(let [tvar (first binding), this-ns (nth binding 2)] (let [tvar (first binding), vc (second binding)]
`(if (:deltas ~(second binding)) ;; check if we are in a nested transaction `(if (:deltas ~vc) ;; check if we are in a nested transaction
(let [~tvar ~(second binding), ~this-ns ~(nth binding 3)] ~@forms) (let [~tvar ~vc] ~@forms)
(do-transaction-fn-with-retries (do-transaction-fn-with-retries
(fn [] (fn []
(let [base-subscribed-views# (:base-subscribed-views ~config) (let [base-subscribed-views# (:base-subscribed-views ~vc)
deltas# (atom []) deltas# (atom [])
result# (j/with-db-transaction [t# ~(second binding) :isolation :serializable] result# (j/with-db-transaction [t# (:db ~vc) :isolation :serializable]
(let [~tvar (assoc t# :deltas deltas#) (let [~tvar (assoc ~vc :deltas deltas# :db t#)]
~this-ns ~(nth binding 3)]
~@forms))] ~@forms))]
(broadcast-deltas base-subscribed-views# @deltas# ~(nth binding 3)) (broadcast-deltas base-subscribed-views# @deltas# (:namespace ~vc))
result#)))))) result#))))))
(defn vexec! (defn vexec!
@ -71,10 +70,10 @@
a collection of view-maps. a collection of view-maps.
- broadcast-deltas takes ... ." - broadcast-deltas takes ... ."
[{:keys [db schema base-subscribed-views templates namespace] :as conf} action-map] [{:keys [db schema base-subscribed-views templates namespace deltas] :as conf} action-map]
(let [subbed-views (subscribed-views base-subscribed-views namespace) (let [subbed-views (subscribed-views base-subscribed-views namespace)
transaction-fn #(vd/do-view-transaction schema db subbed-views action-map templates)] transaction-fn #(vd/do-view-transaction schema db subbed-views action-map templates)]
(if-let [deltas (:deltas db)] ;; inside a transaction we just collect deltas and do not retry (if deltas ;; inside a transaction we just collect deltas and do not retry
(let [{:keys [new-deltas result-set]} (transaction-fn)] (let [{:keys [new-deltas result-set]} (transaction-fn)]
(swap! deltas into new-deltas) (swap! deltas into new-deltas)
result-set) result-set)