mirror of
https://github.com/logseq/logseq.git
synced 2026-02-01 22:47:36 +00:00
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:
@@ -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
|
||||
|
||||
8
deps/db/.clj-kondo/config.edn
vendored
8
deps/db/.clj-kondo/config.edn
vendored
@@ -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}}}
|
||||
|
||||
7
deps/db/src/logseq/db.cljs
vendored
7
deps/db/src/logseq/db.cljs
vendored
@@ -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?)
|
||||
|
||||
@@ -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
deps/db/src/logseq/db/common/entity_util.cljs
vendored
Normal file
19
deps/db/src/logseq/db/common/entity_util.cljs
vendored
Normal 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)))
|
||||
7
deps/db/src/logseq/db/common/sqlite.cljs
vendored
7
deps/db/src/logseq/db/common/sqlite.cljs
vendored
@@ -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
deps/db/src/logseq/db/file_based/entity_util.cljs
vendored
Normal file
14
deps/db/src/logseq/db/file_based/entity_util.cljs
vendored
Normal 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)))
|
||||
29
deps/db/src/logseq/db/frontend/entity_util.cljs
vendored
29
deps/db/src/logseq/db/frontend/entity_util.cljs
vendored
@@ -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"
|
||||
|
||||
@@ -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))]
|
||||
|
||||
@@ -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!])]
|
||||
|
||||
@@ -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?}])
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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))]
|
||||
|
||||
@@ -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?)
|
||||
|
||||
Reference in New Issue
Block a user