浏览代码

fix: entity-util/{journal?,whiteboard?,page?} calls

Split up fns of these checks into entity-util, file-entity-util and
common-entity-util so that we have explicit fns for checking in single
or multi-graph contexts. By doing this, were were able to fix more than
20+ fns that were calling general fns in a single graph context e.g.
checking for :block/type in DB graph only namespaces. Some of these
calls were happening on every :block/title lookup so there may be
some perf enhancements
Gabriel Horner 8 月之前
父节点
当前提交
e92b107b5b

+ 5 - 3
.clj-kondo/config.edn

@@ -166,25 +166,27 @@
              logseq.common.util.namespace ns-util
              logseq.common.util.page-ref page-ref
              logseq.db ldb
+             logseq.db.common.entity-util common-entity-util
+             logseq.db.common.order db-order
+             logseq.db.common.property-util db-property-util
+             logseq.db.common.sqlite sqlite-common-db
              logseq.db.file-based.rules file-rules
              logseq.db.file-based.schema file-schema
+             logseq.db.file-based.entity-util file-entity-util
              logseq.db.frontend.class db-class
              logseq.db.frontend.content db-content
              logseq.db.frontend.db-ident db-ident
              logseq.db.frontend.entity-plus entity-plus
              logseq.db.frontend.entity-util entity-util
              logseq.db.frontend.inputs db-inputs
-             logseq.db.common.order db-order
              logseq.db.frontend.property db-property
              logseq.db.frontend.property.build db-property-build
              logseq.db.frontend.property.type db-property-type
-             logseq.db.common.property-util db-property-util
              logseq.db.frontend.rules rules
              logseq.db.frontend.schema db-schema
              logseq.db.frontend.validate db-validate
              logseq.db.sqlite.build sqlite-build
              logseq.db.sqlite.cli sqlite-cli
-             logseq.db.common.sqlite sqlite-common-db
              logseq.db.sqlite.create-graph sqlite-create-graph
              logseq.db.sqlite.export sqlite-export
              logseq.db.sqlite.util sqlite-util

+ 5 - 3
deps/db/.clj-kondo/config.edn

@@ -9,24 +9,26 @@
   :consistent-alias
   {:aliases {clojure.string string
              logseq.db ldb
+             logseq.db.common.entity-util common-entity-util
+             logseq.db.common.order db-order
+             logseq.db.common.property-util db-property-util
+             logseq.db.common.sqlite sqlite-common-db
              logseq.db.frontend.content db-content
              logseq.db.frontend.class db-class
              logseq.db.frontend.db-ident db-ident
              logseq.db.frontend.inputs db-inputs
-             logseq.db.common.order db-order
              logseq.db.frontend.property db-property
              logseq.db.frontend.property.build db-property-build
              logseq.db.frontend.property.type db-property-type
-             logseq.db.common.property-util db-property-util
              logseq.db.file-based.rules file-rules
              logseq.db.file-based.schema file-schema
+             logseq.db.file-based.entity-util file-entity-util
              logseq.db.frontend.entity-plus entity-plus
              logseq.db.frontend.rules rules
              logseq.db.frontend.schema db-schema
              logseq.db.frontend.validate db-validate
              logseq.db.sqlite.build sqlite-build
              logseq.db.sqlite.cli sqlite-cli
-             logseq.db.common.sqlite sqlite-common-db
              logseq.db.sqlite.create-graph sqlite-create-graph
              logseq.db.sqlite.export sqlite-export
              logseq.db.sqlite.util sqlite-util}}}

+ 4 - 3
deps/db/src/logseq/db.cljs

@@ -17,6 +17,7 @@
             [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.rules :as rules]
+            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.common.sqlite :as sqlite-common-db]
             [logseq.db.sqlite.util :as sqlite-util]
             [logseq.db.file-based.rules :as file-rules])
@@ -90,13 +91,13 @@
              (prn :debug-tx-data tx-data)
              (throw e))))))))
 
-(def page? entity-util/page?)
+(def page? common-entity-util/page?)
 (def internal-page? entity-util/internal-page?)
 (def class? entity-util/class?)
 (def property? entity-util/property?)
 (def closed-value? entity-util/closed-value?)
-(def whiteboard? entity-util/whiteboard?)
-(def journal? entity-util/journal?)
+(def whiteboard? common-entity-util/whiteboard?)
+(def journal? common-entity-util/journal?)
 (def hidden? entity-util/hidden?)
 (def object? entity-util/object?)
 (def asset? entity-util/asset?)

+ 2 - 1
deps/db/src/logseq/db/common/delete_blocks.cljs

@@ -5,6 +5,7 @@
             [logseq.common.util :as common-util]
             [logseq.common.util.block-ref :as block-ref]
             [logseq.common.util.page-ref :as page-ref]
+            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.frontend.entity-plus :as entity-plus]
             [logseq.db.frontend.entity-util :as entity-util]))
 
@@ -54,7 +55,7 @@
                                                     (contains? #{:db.fn/retractEntity :db/retractEntity} (first tx)))
                                            (second tx))) txs)
                                  (filter (fn [id]
-                                           (not (entity-util/page? (d/entity db id))))))]
+                                           (not (common-entity-util/page? (d/entity db id))))))]
     (when (seq retracted-block-ids)
       (let [retracted-blocks (map #(d/entity db %) retracted-block-ids)
             retracted-tx (build-retracted-tx retracted-blocks)

+ 19 - 0
deps/db/src/logseq/db/common/entity_util.cljs

@@ -0,0 +1,19 @@
+(ns logseq.db.common.entity-util
+  "Lower level entity util fns for DB and file graphs"
+  (:require [logseq.db.file-based.entity-util :as file-entity-util]
+            [logseq.db.frontend.entity-util :as entity-util]))
+
+(defn whiteboard?
+  [entity]
+  (or (entity-util/whiteboard? entity)
+      (file-entity-util/whiteboard? entity)))
+
+(defn journal?
+  [entity]
+  (or (entity-util/journal? entity)
+      (file-entity-util/journal? entity)))
+
+(defn page?
+  [entity]
+  (or (entity-util/page? entity)
+      (file-entity-util/page? entity)))

+ 4 - 3
deps/db/src/logseq/db/common/sqlite.cljs

@@ -10,6 +10,7 @@
             [logseq.common.util.date-time :as date-time-util]
             [logseq.db.frontend.entity-plus :as entity-plus]
             [logseq.db.frontend.entity-util :as entity-util]
+            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.common.order :as db-order]
             [logseq.db.sqlite.util :as sqlite-util]))
 
@@ -30,7 +31,7 @@
   (->> (d/datoms db :avet :block/title page-name)
        (filter (fn [d]
                  (let [e (d/entity db (:e d))]
-                   (entity-util/page? e))))
+                   (common-entity-util/page? e))))
        (map :e)
        sort
        first))
@@ -143,9 +144,9 @@
   (let [block (d/entity db (if (uuid? id)
                              [:block/uuid id]
                              id))
-        page? (entity-util/page? block)
+        page? (common-entity-util/page? block)
         get-children (fn [block children]
-                       (let [long-page? (and (> (count children) 500) (not (entity-util/whiteboard? block)))]
+                       (let [long-page? (and (> (count children) 500) (not (common-entity-util/whiteboard? block)))]
                          (if long-page?
                            (->> (map (fn [e]
                                        (select-keys e [:db/id :block/uuid :block/page :block/order :block/parent :block/collapsed? :block/link]))

+ 14 - 0
deps/db/src/logseq/db/file_based/entity_util.cljs

@@ -0,0 +1,14 @@
+(ns logseq.db.file-based.entity-util
+  "Lower level entity util fns for file graphs")
+
+(defn whiteboard?
+  [entity]
+  (identical? "whiteboard" (:block/type entity)))
+
+(defn journal?
+  [entity]
+  (identical? "journal" (:block/type entity)))
+
+(defn page?
+  [entity]
+  (contains? #{"page" "journal" "whiteboard"} (:block/type entity)))

+ 8 - 21
deps/db/src/logseq/db/frontend/entity_util.cljs

@@ -1,5 +1,5 @@
 (ns logseq.db.frontend.entity-util
-  "Lower level entity util fns used across db namespaces"
+  "Lower level entity util fns for DB graphs"
   (:require [clojure.string :as string]
             [datascript.db]
             [datascript.impl.entity :as de])
@@ -33,11 +33,7 @@
 (defn whiteboard?
   "Given a page entity or map, check if it is a whiteboard page"
   [entity]
-  (or
-   ;; db based graph
-   (has-tag? entity :logseq.class/Whiteboard)
-   ;; file based graph
-   (identical? "whiteboard" (:block/type entity))))
+  (has-tag? entity :logseq.class/Whiteboard))
 
 (defn closed-value?
   [entity]
@@ -46,24 +42,15 @@
 (defn journal?
   "Given a page entity or map, check if it is a journal page"
   [entity]
-  (or
-   ;; db based graph
-   (has-tag? entity :logseq.class/Journal)
-   ;; file based graph
-   (identical? "journal" (:block/type entity))))
+  (has-tag? entity :logseq.class/Journal))
 
 (defn page?
   [entity]
-  (or
-   ;; db based graph
-   (internal-page? entity)
-   (class? entity)
-   (property? entity)
-   (whiteboard? entity)
-   (journal? entity)
-
-   ;; file based graph
-   (contains? #{"page" "journal" "whiteboard"} (:block/type entity))))
+  (or (internal-page? entity)
+      (class? entity)
+      (property? entity)
+      (whiteboard? entity)
+      (journal? entity)))
 
 (defn asset?
   "Given an entity or map, check if it is an asset block"

+ 3 - 1
scripts/src/logseq/tasks/dev/db_and_file_graphs.clj

@@ -77,7 +77,9 @@
 
 (defn- validate-multi-graph-fns-not-in-file-or-db
   []
-  (let [multi-graph-fns ["config/db-based-graph\\?" "sqlite-util/db-based-graph\\?"]
+  (let [multi-graph-fns ["config/db-based-graph\\?" "sqlite-util/db-based-graph\\?"
+                         ;; Use file-entity-util and entity-util when in a single graph context
+                         "ldb/whiteboard\\?" "ldb/journal\\?" "ldb/page\\?"]
         res (apply shell {:out :string :continue true}
                    "git grep -E" (str "(" (string/join "|" multi-graph-fns) ")")
                    (into file-graph-paths db-graph-paths))]

+ 5 - 4
src/main/frontend/components/objects.cljs

@@ -19,6 +19,7 @@
             [logseq.common.config :as common-config]
             [logseq.db :as ldb]
             [logseq.db.frontend.property :as db-property]
+            [logseq.db.frontend.entity-util :as entity-util]
             [logseq.outliner.property :as outliner-property]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
@@ -187,8 +188,8 @@
                                                                              :class-schema? true}]))
                    :on-delete-rows (fn [table selected-rows]
                                      ;; Built-in objects must not be deleted e.g. Tag, Property and Root
-                                     (let [pages (->> selected-rows (filter ldb/page?) (remove :logseq.property/built-in?))
-                                           blocks (->> selected-rows (remove ldb/page?) (remove :logseq.property/built-in?))]
+                                     (let [pages (->> selected-rows (filter entity-util/page?) (remove :logseq.property/built-in?))
+                                           blocks (->> selected-rows (remove entity-util/page?) (remove :logseq.property/built-in?))]
                                        (p/do!
                                         (when-let [f (get-in table [:data-fns :set-row-selection!])]
                                           (f {}))
@@ -267,8 +268,8 @@
                    ;; Relationships with built-in properties must not be deleted e.g. built-in? or parent
                    :on-delete-rows (when-not (:logseq.property/built-in? property)
                                      (fn [table selected-rows]
-                                       (let [pages (->> selected-rows (filter ldb/page?) (remove :logseq.property/built-in?))
-                                             blocks (->> selected-rows (remove ldb/page?) (remove :logseq.property/built-in?))]
+                                       (let [pages (->> selected-rows (filter entity-util/page?) (remove :logseq.property/built-in?))
+                                             blocks (->> selected-rows (remove entity-util/page?) (remove :logseq.property/built-in?))]
                                          (p/do!
                                           (set-data! (get-property-related-objects (state/get-current-repo) property))
                                           (when-let [f (get-in table [:data-fns :set-row-selection!])]

+ 3 - 2
src/main/frontend/components/property.cljs

@@ -26,6 +26,7 @@
             [frontend.util :as util]
             [logseq.db :as ldb]
             [logseq.db.common.order :as db-order]
+            [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property.type :as db-property-type]
             [logseq.outliner.core :as outliner-core]
@@ -355,7 +356,7 @@
         *show-new-property-config? (::show-new-property-config? state)
         *show-class-select? (::show-class-select? state)
         *property-schema (::property-schema state)
-        page? (ldb/page? block)
+        page? (entity-util/page? block)
         block-types (let [types (ldb/get-entity-types block)]
                       (cond-> types
                         (and page? (not (contains? types :page)))
@@ -675,7 +676,7 @@
             properties' (remove (fn [[k _v]] (contains? remove-properties k)) full-properties)
             properties'' (->> properties'
                               (remove (fn [[k _v]] (= k :logseq.property.class/properties))))
-            page? (ldb/page? block)]
+            page? (entity-util/page? block)]
         [:div.ls-properties-area
          {:id id
           :class (util/classnames [{:ls-page-properties page?}])

+ 5 - 4
src/main/frontend/components/property/value.cljs

@@ -33,6 +33,7 @@
             [lambdaisland.glogi :as log]
             [logseq.common.util.macro :as macro-util]
             [logseq.db :as ldb]
+            [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property.type :as db-property-type]
             [logseq.outliner.property :as outliner-property]
@@ -604,7 +605,7 @@
     "hash"
     (ldb/property? node)
     "letter-p"
-    (ldb/page? node)
+    (entity-util/page? node)
     "page"
     :else
     "letter-n"))
@@ -732,7 +733,7 @@
                                                   (when-not (string/blank? (string/trim chosen))
                                                     (p/let [result (<create-page-if-not-exists! block property classes' chosen)]
                                                       [result true])))
-                                      _ (when (and (integer? id) (not (ldb/page? (db/entity id))))
+                                      _ (when (and (integer? id) (not (entity-util/page? (db/entity id))))
                                           (db-async/<get-block repo id))]
                                 (p/do!
                                  (if id
@@ -947,7 +948,7 @@
               (property-normal-block-value block property v-block)
 
               ;; page/class/etc.
-              (ldb/page? v-block)
+              (entity-util/page? v-block)
               (rum/with-key
                 (page-cp {:disable-preview? true
                           :tag? class?} v-block)
@@ -997,7 +998,7 @@
        closed-values?
        (closed-value-item value opts)
 
-       (or (ldb/page? value)
+       (or (entity-util/page? value)
            (and (seq (:block/tags value))
                 ;; FIXME: page-cp should be renamed to node-cp and
                 ;; support this case and maybe other complex cases.

+ 3 - 2
src/main/frontend/components/query/view.cljs

@@ -7,6 +7,7 @@
             [frontend.modules.outliner.ui :as ui-outliner-tx]
             [frontend.state]
             [logseq.db :as ldb]
+            [logseq.db.frontend.entity-util :as entity-util]
             [promesa.core :as p]
             [rum.core :as rum]))
 
@@ -54,8 +55,8 @@
                   :set-data! set-data!
                   :columns columns'
                   :on-delete-rows (fn [table selected-rows]
-                                    (let [pages (filter ldb/page? selected-rows)
-                                          blocks (remove ldb/page? selected-rows)
+                                    (let [pages (filter entity-util/page? selected-rows)
+                                          blocks (remove entity-util/page? selected-rows)
                                           selected (set (map :id (remove :logseq.property/built-in? selected-rows)))
                                           data' (remove (fn [row] (contains? selected (:id row))) (:data table))]
                                       (p/do!

+ 4 - 3
src/main/frontend/worker/file.cljs

@@ -17,6 +17,7 @@
             [logseq.common.path :as path]
             [logseq.common.util :as common-util]
             [logseq.db :as ldb]
+            [logseq.db.file-based.entity-util :as file-entity-util]
             [logseq.outliner.tree :as otree]
             [malli.core :as m]))
 
@@ -81,7 +82,7 @@
     (let [format (name (get page-block :block/format (:preferred-format context)))
           date-formatter (:date-formatter context)
           title (string/capitalize (:block/name page-block))
-          whiteboard-page? (ldb/whiteboard? page-block)
+          whiteboard-page? (file-entity-util/whiteboard? page-block)
           format (if whiteboard-page? "edn" format)
           journal-page? (common-date/valid-journal-title? title date-formatter)
           journal-title (common-date/normalize-journal-title title date-formatter)
@@ -112,7 +113,7 @@
         file-db-id (-> page-block :block/file :db/id)
         file-path (-> (d/entity db file-db-id) :file/path)
         result (if (and (string? file-path) (not-empty file-path))
-                 (let [new-content (if (ldb/whiteboard? page-block)
+                 (let [new-content (if (file-entity-util/whiteboard? page-block)
                                      (->
                                       (wfu/ugly-pr-str {:blocks tree
                                                         :pages (list (remove-transit-ids page-block))})
@@ -148,7 +149,7 @@
   [repo conn page-db-id outliner-op context request-id]
   (let [page-block (d/pull @conn '[*] page-db-id)
         page-db-id (:db/id page-block)
-        whiteboard? (ldb/whiteboard? page-block)
+        whiteboard? (file-entity-util/whiteboard? page-block)
         blocks-count (ldb/get-page-blocks-count @conn page-db-id)
         blocks-just-deleted? (and (zero? blocks-count)
                                   (contains? #{:delete-blocks :move-blocks} outliner-op))]

+ 5 - 4
src/main/frontend/worker/handler/page/file_based/rename.cljs

@@ -11,7 +11,8 @@
             [logseq.common.config :as common-config]
             [logseq.graph-parser.text :as text]
             [logseq.graph-parser.property :as gp-property]
-            [logseq.db.common.order :as db-order]))
+            [logseq.db.common.order :as db-order]
+            [logseq.db.file-based.entity-util :as file-entity-util]))
 
 
 (defn- replace-page-ref-aux
@@ -205,7 +206,7 @@
   [db old-page-name new-page-name]
   (let [page (d/entity db [:block/name old-page-name])
         file (:block/file page)]
-    (when (and file (not (ldb/journal? page)))
+    (when (and file (not (file-entity-util/journal? page)))
       (let [old-path (:file/path file)
             new-file-name (wfu/file-name-sanity new-page-name) ;; w/o file extension
             new-path (compute-new-file-path old-path new-file-name)]
@@ -317,8 +318,8 @@
       :invalid-empty-name
 
       (and page-e new-page-e
-           (or (ldb/whiteboard? page-e)
-               (ldb/whiteboard? new-page-e)))
+           (or (file-entity-util/whiteboard? page-e)
+               (file-entity-util/whiteboard? new-page-e)))
       :merge-whiteboard-pages
 
       (and old-name new-name name-changed?)