mirror of
https://github.com/logseq/logseq.git
synced 2026-05-01 01:16:27 +00:00
perf: refs reactive query
This commit is contained in:
@@ -30,10 +30,10 @@
|
||||
;; ::page<-pages
|
||||
;; get PAGES referencing PAGE
|
||||
(s/def ::page<-pages (s/tuple #(= ::page<-pages %) int?))
|
||||
;; ::page<-blocks-or-block<-blocks
|
||||
;; ::refs
|
||||
;; get BLOCKS referencing PAGE or BLOCK
|
||||
(s/def ::page<-blocks-or-block<-blocks
|
||||
(s/tuple #(= ::page<-blocks-or-block<-blocks %) int?))
|
||||
(s/def ::refs (s/tuple #(= ::refs %) int?))
|
||||
(s/def ::refs-count int?)
|
||||
;; FIXME: this react-query has performance issues
|
||||
(s/def ::page-unlinked-refs (s/tuple #(= ::page-unlinked-refs %) int?))
|
||||
|
||||
@@ -45,7 +45,8 @@
|
||||
:block-and-children ::block-and-children
|
||||
:journals ::journals
|
||||
:page<-pages ::page<-pages
|
||||
:page<-blocks-or-block<-blocks ::page<-blocks-or-block<-blocks
|
||||
:refs ::refs
|
||||
:refs-count ::refs-count
|
||||
:page-unlinked-refs ::page-unlinked-refs
|
||||
:custom ::custom))
|
||||
|
||||
@@ -215,10 +216,11 @@
|
||||
"Get affected queries through transaction datoms."
|
||||
[{:keys [tx-data db-before]}]
|
||||
{:post [(s/valid? ::affected-keys %)]}
|
||||
(def debug-tx-data tx-data)
|
||||
(let [blocks (->> (filter (fn [datom] (contains? #{:block/left :block/parent :block/page} (:a datom))) tx-data)
|
||||
(map :v)
|
||||
(distinct))
|
||||
refs (->> (filter (fn [datom] (= :block/refs (:a datom))) tx-data)
|
||||
refs (->> (filter (fn [datom] (contains? #{:block/refs :block/path-refs} (:a datom))) tx-data)
|
||||
(map :v)
|
||||
(distinct))
|
||||
other-blocks (->> (filter (fn [datom] (= "block" (namespace (:a datom)))) tx-data)
|
||||
@@ -235,26 +237,32 @@
|
||||
(when (:block/name block) (:db/id block))
|
||||
(:db/id (:block/page block)))
|
||||
blocks [[::block (:db/id block)]]
|
||||
path-refs (:block/path-refs block)
|
||||
path-refs' (mapcat (fn [ref]
|
||||
[[::refs-count (:db/id ref)]
|
||||
[::refs (:db/id ref)]]) path-refs)
|
||||
others (when page-id
|
||||
[[::page-blocks page-id]])]
|
||||
(concat blocks others)))))
|
||||
(concat blocks others path-refs')))))
|
||||
blocks)
|
||||
|
||||
(when-let [current-page-id (:db/id (get-current-page))]
|
||||
[[::page<-pages current-page-id]])
|
||||
|
||||
(map (fn [ref]
|
||||
(let [entity (db-utils/entity ref)]
|
||||
(if (:block/name entity) ; page
|
||||
[::page-blocks ref]
|
||||
[::page-blocks (:db/id (:block/page entity))])))
|
||||
(mapcat
|
||||
(fn [ref]
|
||||
(let [entity (db-utils/entity ref)]
|
||||
(conj
|
||||
[[::refs-count (:db/id entity)]
|
||||
[::refs (:db/id entity)]]
|
||||
(if (:block/name entity) ; page
|
||||
[::page-blocks ref]
|
||||
[::page-blocks (:db/id (:block/page entity))]))))
|
||||
refs))
|
||||
others (->>
|
||||
(keys @query-state)
|
||||
(filter (fn [ks]
|
||||
(contains? #{::block-and-children
|
||||
::page<-blocks-or-block<-blocks}
|
||||
(second ks))))
|
||||
(contains? #{::block-and-children} (second ks))))
|
||||
(map (fn [v] (vec (rest v)))))]
|
||||
(->>
|
||||
(util/concat-without-nil
|
||||
|
||||
Reference in New Issue
Block a user