|
|
@@ -9,10 +9,7 @@
|
|
|
[logseq.db.frontend.content :as db-content]
|
|
|
[clojure.set :as set]
|
|
|
[logseq.db.frontend.rules :as rules]
|
|
|
- [logseq.db.frontend.entity-plus]
|
|
|
- [promesa.core :as p]
|
|
|
- [clojure.core.async :as async]
|
|
|
- [clojure.core.async.interop :refer [p->c]]))
|
|
|
+ [logseq.db.frontend.entity-plus]))
|
|
|
|
|
|
;; Use it as an input argument for datalog queries
|
|
|
(def block-attrs
|
|
|
@@ -51,36 +48,6 @@
|
|
|
[f]
|
|
|
(when f (reset! *transact-fn f)))
|
|
|
|
|
|
-(defonce *request-id (atom 0))
|
|
|
-(defonce requests (async/chan 1000))
|
|
|
-(defonce *unfinished-request-ids (atom #{}))
|
|
|
-
|
|
|
-(defn request-finished?
|
|
|
- "Whether any DB transaction request has been finished"
|
|
|
- []
|
|
|
- (empty? @*unfinished-request-ids))
|
|
|
-
|
|
|
-(async/go-loop []
|
|
|
- (when-let [{:keys [id request response]} (async/<! requests)]
|
|
|
- (let [result (async/<! (p->c (request)))]
|
|
|
- (p/resolve! response result)
|
|
|
- (swap! *unfinished-request-ids disj id))
|
|
|
- (recur)))
|
|
|
-
|
|
|
-(defn get-next-request-id
|
|
|
- []
|
|
|
- (swap! *request-id inc))
|
|
|
-
|
|
|
-(defn add-request!
|
|
|
- [request-id request-f]
|
|
|
- (let [resp (p/deferred)
|
|
|
- new-request {:id request-id
|
|
|
- :request request-f
|
|
|
- :response resp}]
|
|
|
- (swap! *unfinished-request-ids conj request-id)
|
|
|
- (async/go (async/>! requests new-request))
|
|
|
- resp))
|
|
|
-
|
|
|
(defn transact!
|
|
|
"`repo-or-conn`: repo for UI thread and conn for worker/node"
|
|
|
([repo-or-conn tx-data]
|
|
|
@@ -95,15 +62,8 @@
|
|
|
;; (prn :debug :transact :sync? (= d/transact! (or @*transact-fn d/transact!)))
|
|
|
;; (cljs.pprint/pprint tx-data)
|
|
|
|
|
|
- (let [f (or @*transact-fn d/transact!)
|
|
|
- sync? (= f d/transact!)
|
|
|
- request-id (when-not sync? (get-next-request-id))
|
|
|
- tx-meta' (cond-> tx-meta
|
|
|
- (not sync?)
|
|
|
- (assoc :request-id request-id))]
|
|
|
- (if sync?
|
|
|
- (f repo-or-conn tx-data tx-meta')
|
|
|
- (add-request! request-id #(f repo-or-conn tx-data tx-meta'))))))))
|
|
|
+ (let [f (or @*transact-fn d/transact!)]
|
|
|
+ (f repo-or-conn tx-data tx-meta))))))
|
|
|
|
|
|
(defn build-default-pages-tx
|
|
|
[]
|