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
This commit is contained in:
Gabriel Horner
2025-02-19 12:06:06 -05:00
parent 0964331b8a
commit e92b107b5b
15 changed files with 89 additions and 54 deletions

View File

@@ -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

View File

@@ -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}}}

View File

@@ -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?)

View File

@@ -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)

View File

@@ -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)))

View File

@@ -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]))

View File

@@ -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)))

View File

@@ -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"

View File

@@ -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))]

View File

@@ -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!])]

View File

@@ -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?}])

View File

@@ -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.

View File

@@ -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!

View File

@@ -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))]

View File

@@ -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?)