Przeglądaj źródła

refactor: avoid redundant computation on db-rebuild-block-refs

rcmerci 2 miesięcy temu
rodzic
commit
d05be857f0

+ 7 - 6
deps/outliner/src/logseq/outliner/pipeline.cljs

@@ -153,12 +153,13 @@
     (let [day (date-time-util/ms->journal-day v)]
       (:e (first (d/datoms db :avet :block/journal-day day))))))
 
+
+(def ^:private private-built-in-props (set (keep (fn [[k v]] (when-not (get-in v [:schema :public?]) k))
+                                                 db-property/built-in-properties)))
 (defn db-rebuild-block-refs
   "Rebuild block refs for DB graphs"
   [db block]
-  (let [private-built-in-props (set (keep (fn [[k v]] (when-not (get-in v [:schema :public?]) k))
-                                          db-property/built-in-properties))
-        ;; explicit lookup in order to be nbb compatible
+  (let [;; explicit lookup in order to be nbb compatible
         properties (->
                     (->> (entity-plus/lookup-kv-then-entity (d/entity db (:db/id block)) :block/properties)
                          (into {}))
@@ -178,12 +179,12 @@
         property-value-refs (->> properties
                                  (mapcat (fn [[property v]]
                                            (cond
-                                             (page-or-object? v)
-                                             [(:db/id v)]
-
                                              (and (coll? v) (every? page-or-object? v))
                                              (map :db/id v)
 
+                                             (page-or-object? v)
+                                             [(:db/id v)]
+
                                              (contains? #{:logseq.property/scheduled :logseq.property/deadline} (:db/ident (d/entity db property)))
                                              (when-let [journal-day (get-journal-day-from-long db v)]
                                                [journal-day])

+ 9 - 7
src/main/frontend/worker/rtc/full_upload_download_graph.cljs

@@ -227,19 +227,21 @@
     (let [db @conn
           ;; get all the block datoms
           datoms (d/datoms db :avet :block/uuid)
-          refs-tx (keep
+          refs-tx (mapcat
                    (fn [d]
                      (let [block (d/entity @conn (:e d))
                            refs (outliner-pipeline/db-rebuild-block-refs @conn block)]
-                       (when (seq refs)
-                         {:db/id (:db/id block)
-                          :block/refs refs})))
+                       (map
+                        (fn [ref]
+                          [:db/add (:db/id block) :block/refs ref])
+                        refs)))
                    datoms)]
       (rtc-log-and-state/rtc-log :rtc.log/download {:sub-type :transact-graph-data-to-db-5
                                                     :message (str "transacting block-refs(" (count refs-tx) ")")
                                                     :graph-uuid graph-uuid})
-      (ldb/transact! conn refs-tx (cond-> {:outliner-op :rtc-download-rebuild-block-refs}
-                                    rtc-const/RTC-E2E-TEST (assoc :frontend.worker.pipeline/skip-store-conn true))))))
+      (doseq [refs-tx* (partition-all 1000 refs-tx)]
+        (ldb/transact! conn refs-tx* (cond-> {:outliner-op :rtc-download-rebuild-block-refs}
+                                       rtc-const/RTC-E2E-TEST (assoc :frontend.worker.pipeline/skip-store-conn true)))))))
 
 (defn- block->schema-map
   [block]
@@ -564,7 +566,7 @@
    (prn :xxx4 (js/Date.))
    (transact-remote-schema-version! repo)
    (prn :xxx5 (js/Date.))
-   (transact-block-refs! repo)
+   (transact-block-refs! repo nil)
    (prn :xxx6 (js/Date.)))
 
   (p/do!