mirror of
https://github.com/logseq/logseq.git
synced 2026-02-01 22:47:36 +00:00
chore: mv db or file graph specific ldb fns to
db or file graph namespaces. Follow up to https://github.com/logseq/logseq/pull/11774#discussion_r2035354875 to help avoid bugs that are hard to spot b/c of no organization
This commit is contained in:
@@ -182,6 +182,7 @@
|
||||
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 db-db
|
||||
logseq.db.frontend.db-ident db-ident
|
||||
logseq.db.frontend.entity-plus entity-plus
|
||||
logseq.db.frontend.entity-util entity-util
|
||||
|
||||
1
deps/db/.clj-kondo/config.edn
vendored
1
deps/db/.clj-kondo/config.edn
vendored
@@ -16,6 +16,7 @@
|
||||
logseq.db.common.view db-view
|
||||
logseq.db.frontend.content db-content
|
||||
logseq.db.frontend.class db-class
|
||||
logseq.db.frontend.db db-db
|
||||
logseq.db.frontend.db-ident db-ident
|
||||
logseq.db.frontend.inputs db-inputs
|
||||
logseq.db.frontend.property db-property
|
||||
|
||||
130
deps/db/src/logseq/db.cljs
vendored
130
deps/db/src/logseq/db.cljs
vendored
@@ -1,19 +1,19 @@
|
||||
(ns logseq.db
|
||||
"Main namespace for public db fns. For DB and file graphs.
|
||||
For shared file graph only fns, use logseq.graph-parser.db"
|
||||
"Main namespace for db fns that handles DB and file graphs. For db graph only
|
||||
fns, use logseq.db.frontend.db and for file graph only fns, use
|
||||
logseq.graph-parser.db"
|
||||
(:require [clojure.set :as set]
|
||||
[clojure.string :as string]
|
||||
[clojure.walk :as walk]
|
||||
[datascript.core :as d]
|
||||
[datascript.impl.entity :as de]
|
||||
[logseq.common.util :as common-util]
|
||||
[logseq.common.util.namespace :as ns-util]
|
||||
[logseq.common.util.page-ref :as page-ref]
|
||||
[logseq.common.uuid :as common-uuid]
|
||||
[logseq.db.common.delete-blocks :as delete-blocks] ;; Load entity extensions
|
||||
[logseq.db.common.entity-util :as common-entity-util]
|
||||
[logseq.db.common.sqlite :as sqlite-common-db]
|
||||
[logseq.db.frontend.class :as db-class]
|
||||
[logseq.db.frontend.db :as db-db]
|
||||
[logseq.db.frontend.entity-plus :as entity-plus]
|
||||
[logseq.db.frontend.entity-util :as entity-util]
|
||||
[logseq.db.frontend.property :as db-property]
|
||||
@@ -412,11 +412,6 @@
|
||||
[]
|
||||
(common-uuid/gen-uuid))
|
||||
|
||||
(defn get-classes-with-property
|
||||
"Get classes which have given property as a class property"
|
||||
[db property-id]
|
||||
(:logseq.property.class/_properties (d/entity db property-id)))
|
||||
|
||||
(defn get-alias-source-page
|
||||
"return the source page (page-name) of an alias"
|
||||
[db alias-id]
|
||||
@@ -492,37 +487,13 @@
|
||||
e))))))
|
||||
|
||||
(def built-in? entity-util/built-in?)
|
||||
|
||||
(defn built-in-class-property?
|
||||
"Whether property a built-in property for the specific class"
|
||||
[class-entity property-entity]
|
||||
(and (built-in? class-entity)
|
||||
(class? class-entity)
|
||||
(built-in? property-entity)
|
||||
(contains? (set (get-in (db-class/built-in-classes (:db/ident class-entity)) [:schema :properties]))
|
||||
(:db/ident property-entity))))
|
||||
|
||||
(defn private-built-in-page?
|
||||
"Private built-in pages should not be navigable or searchable by users. Later it
|
||||
could be useful to use this for the All Pages view"
|
||||
[page]
|
||||
(cond (property? page)
|
||||
(not (public-built-in-property? page))
|
||||
(or (class? page) (internal-page? page))
|
||||
false
|
||||
;; Default to true for closed value and future internal types.
|
||||
;; Other types like whiteboard are not considered because they aren't built-in
|
||||
:else
|
||||
true))
|
||||
(def get-classes-with-property db-db/get-classes-with-property)
|
||||
(def built-in-class-property? db-db/built-in-class-property?)
|
||||
(def private-built-in-page? db-db/private-built-in-page?)
|
||||
|
||||
(def write-transit-str sqlite-util/write-transit-str)
|
||||
(def read-transit-str sqlite-util/read-transit-str)
|
||||
|
||||
(defn build-favorite-tx
|
||||
"Builds tx for a favorite block in favorite page"
|
||||
[favorite-uuid]
|
||||
{:block/link [:block/uuid favorite-uuid]
|
||||
:block/title ""})
|
||||
(def build-favorite-tx db-db/build-favorite-tx)
|
||||
|
||||
(defn get-key-value
|
||||
[db key-ident]
|
||||
@@ -544,87 +515,20 @@
|
||||
[db]
|
||||
(when db (get-key-value db :logseq.kv/remote-schema-version)))
|
||||
|
||||
(defn get-all-properties
|
||||
[db]
|
||||
(->> (d/datoms db :avet :block/tags :logseq.class/Property)
|
||||
(map (fn [d]
|
||||
(d/entity db (:e d))))))
|
||||
|
||||
(defn get-page-parents
|
||||
[node & {:keys [node-class?]}]
|
||||
(when-let [parent (:logseq.property/parent node)]
|
||||
(loop [current-parent parent
|
||||
parents' []]
|
||||
(if (and
|
||||
current-parent
|
||||
(if node-class? (class? current-parent) true)
|
||||
(not (contains? parents' current-parent)))
|
||||
(recur (:logseq.property/parent current-parent)
|
||||
(conj parents' current-parent))
|
||||
(vec (reverse parents'))))))
|
||||
|
||||
(defn get-title-with-parents
|
||||
[entity]
|
||||
(if (or (entity-util/class? entity) (entity-util/internal-page? entity))
|
||||
(let [parents' (->> (get-page-parents entity)
|
||||
(remove (fn [e] (= :logseq.class/Root (:db/ident e))))
|
||||
vec)]
|
||||
(string/join
|
||||
ns-util/parent-char
|
||||
(map :block/title (conj (vec parents') entity))))
|
||||
(:block/title entity)))
|
||||
|
||||
(defn get-classes-parents
|
||||
[tags]
|
||||
(let [tags' (filter class? tags)
|
||||
result (mapcat #(get-page-parents % {:node-class? true}) tags')]
|
||||
(set result)))
|
||||
|
||||
(defn class-instance?
|
||||
"Whether `object` is an instance of `class`"
|
||||
[class object]
|
||||
(let [tags (:block/tags object)
|
||||
tags-ids (set (map :db/id tags))]
|
||||
(or
|
||||
(contains? tags-ids (:db/id class))
|
||||
(let [class-parent-ids (set (map :db/id (get-classes-parents tags)))]
|
||||
(contains? (set/union class-parent-ids tags-ids) (:db/id class))))))
|
||||
|
||||
(defn inline-tag?
|
||||
[block-raw-title tag]
|
||||
(assert (string? block-raw-title) "block-raw-title should be a string")
|
||||
(string/includes? block-raw-title (str "#" (page-ref/->page-ref (:block/uuid tag)))))
|
||||
|
||||
(defonce node-display-type-classes
|
||||
#{:logseq.class/Code-block :logseq.class/Math-block :logseq.class/Quote-block})
|
||||
|
||||
(defn get-class-ident-by-display-type
|
||||
[display-type]
|
||||
(case display-type
|
||||
:code :logseq.class/Code-block
|
||||
:math :logseq.class/Math-block
|
||||
:quote :logseq.class/Quote-block
|
||||
nil))
|
||||
|
||||
(defn get-display-type-by-class-ident
|
||||
[class-ident]
|
||||
(case class-ident
|
||||
:logseq.class/Code-block :code
|
||||
:logseq.class/Math-block :math
|
||||
:logseq.class/Quote-block :quote
|
||||
nil))
|
||||
(def get-all-properties db-db/get-all-properties)
|
||||
(def get-page-parents db-db/get-page-parents)
|
||||
(def get-classes-parents db-db/get-classes-parents)
|
||||
(def get-title-with-parents db-db/get-title-with-parents)
|
||||
(def class-instance? db-db/class-instance?)
|
||||
(def inline-tag? db-db/inline-tag?)
|
||||
(def node-display-type-classes db-db/node-display-type-classes)
|
||||
(def get-class-ident-by-display-type db-db/get-class-ident-by-display-type)
|
||||
(def get-display-type-by-class-ident db-db/get-display-type-by-class-ident)
|
||||
|
||||
(def get-recent-updated-pages sqlite-common-db/get-recent-updated-pages)
|
||||
|
||||
(def get-latest-journals sqlite-common-db/get-latest-journals)
|
||||
|
||||
(defn get-all-namespace-relation
|
||||
[db]
|
||||
(d/q '[:find ?page ?parent
|
||||
:where
|
||||
[?page :block/namespace ?parent]]
|
||||
db))
|
||||
|
||||
(defn get-pages-relation
|
||||
[db with-journal?]
|
||||
(if (entity-plus/db-based-graph? db)
|
||||
|
||||
113
deps/db/src/logseq/db/frontend/db.cljs
vendored
Normal file
113
deps/db/src/logseq/db/frontend/db.cljs
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
(ns logseq.db.frontend.db
|
||||
"DB graph fns commonly used outside db dep"
|
||||
(:require [clojure.set :as set]
|
||||
[clojure.string :as string]
|
||||
[datascript.core :as d]
|
||||
[logseq.common.util.namespace :as ns-util]
|
||||
[logseq.common.util.page-ref :as page-ref]
|
||||
[logseq.db.frontend.class :as db-class]
|
||||
[logseq.db.frontend.entity-util :as entity-util]
|
||||
[logseq.db.frontend.property :as db-property]))
|
||||
|
||||
(defn get-classes-with-property
|
||||
"Get classes which have given property as a class property"
|
||||
[db property-id]
|
||||
(:logseq.property.class/_properties (d/entity db property-id)))
|
||||
|
||||
(defn built-in-class-property?
|
||||
"Whether property a built-in property for the specific class"
|
||||
[class-entity property-entity]
|
||||
(and (entity-util/built-in? class-entity)
|
||||
(entity-util/class? class-entity)
|
||||
(entity-util/built-in? property-entity)
|
||||
(contains? (set (get-in (db-class/built-in-classes (:db/ident class-entity)) [:schema :properties]))
|
||||
(:db/ident property-entity))))
|
||||
|
||||
(defn private-built-in-page?
|
||||
"Private built-in pages should not be navigable or searchable by users. Later it
|
||||
could be useful to use this for the All Pages view"
|
||||
[page]
|
||||
(cond (entity-util/property? page)
|
||||
(not (db-property/public-built-in-property? page))
|
||||
(or (entity-util/class? page) (entity-util/internal-page? page))
|
||||
false
|
||||
;; Default to true for closed value and future internal types.
|
||||
;; Other types like whiteboard are not considered because they aren't built-in
|
||||
:else
|
||||
true))
|
||||
|
||||
(defn build-favorite-tx
|
||||
"Builds tx for a favorite block in favorite page"
|
||||
[favorite-uuid]
|
||||
{:block/link [:block/uuid favorite-uuid]
|
||||
:block/title ""})
|
||||
|
||||
(defn get-all-properties
|
||||
[db]
|
||||
(->> (d/datoms db :avet :block/tags :logseq.class/Property)
|
||||
(map (fn [d]
|
||||
(d/entity db (:e d))))))
|
||||
|
||||
(defn get-page-parents
|
||||
[node & {:keys [node-class?]}]
|
||||
(when-let [parent (:logseq.property/parent node)]
|
||||
(loop [current-parent parent
|
||||
parents' []]
|
||||
(if (and
|
||||
current-parent
|
||||
(if node-class? (entity-util/class? current-parent) true)
|
||||
(not (contains? parents' current-parent)))
|
||||
(recur (:logseq.property/parent current-parent)
|
||||
(conj parents' current-parent))
|
||||
(vec (reverse parents'))))))
|
||||
|
||||
(defn get-title-with-parents
|
||||
[entity]
|
||||
(if (or (entity-util/class? entity) (entity-util/internal-page? entity))
|
||||
(let [parents' (->> (get-page-parents entity)
|
||||
(remove (fn [e] (= :logseq.class/Root (:db/ident e))))
|
||||
vec)]
|
||||
(string/join
|
||||
ns-util/parent-char
|
||||
(map :block/title (conj (vec parents') entity))))
|
||||
(:block/title entity)))
|
||||
|
||||
(defn get-classes-parents
|
||||
[tags]
|
||||
(let [tags' (filter entity-util/class? tags)
|
||||
result (mapcat #(get-page-parents % {:node-class? true}) tags')]
|
||||
(set result)))
|
||||
|
||||
(defn class-instance?
|
||||
"Whether `object` is an instance of `class`"
|
||||
[class object]
|
||||
(let [tags (:block/tags object)
|
||||
tags-ids (set (map :db/id tags))]
|
||||
(or
|
||||
(contains? tags-ids (:db/id class))
|
||||
(let [class-parent-ids (set (map :db/id (get-classes-parents tags)))]
|
||||
(contains? (set/union class-parent-ids tags-ids) (:db/id class))))))
|
||||
|
||||
(defn inline-tag?
|
||||
[block-raw-title tag]
|
||||
(assert (string? block-raw-title) "block-raw-title should be a string")
|
||||
(string/includes? block-raw-title (str "#" (page-ref/->page-ref (:block/uuid tag)))))
|
||||
|
||||
(defonce node-display-type-classes
|
||||
#{:logseq.class/Code-block :logseq.class/Math-block :logseq.class/Quote-block})
|
||||
|
||||
(defn get-class-ident-by-display-type
|
||||
[display-type]
|
||||
(case display-type
|
||||
:code :logseq.class/Code-block
|
||||
:math :logseq.class/Math-block
|
||||
:quote :logseq.class/Quote-block
|
||||
nil))
|
||||
|
||||
(defn get-display-type-by-class-ident
|
||||
[class-ident]
|
||||
(case class-ident
|
||||
:logseq.class/Code-block :code
|
||||
:logseq.class/Math-block :math
|
||||
:logseq.class/Quote-block :quote
|
||||
nil))
|
||||
@@ -59,3 +59,10 @@
|
||||
[db page-name]
|
||||
(some-> (ldb/get-page db page-name)
|
||||
:block/file))
|
||||
|
||||
(defn get-all-namespace-relation
|
||||
[db]
|
||||
(d/q '[:find ?page ?parent
|
||||
:where
|
||||
[?page :block/namespace ?parent]]
|
||||
db))
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
(let [dark? (= "dark" theme)
|
||||
relation (ldb/get-pages-relation db journal?)
|
||||
tagged-pages (ldb/get-all-tagged-pages db)
|
||||
namespaces (ldb/get-all-namespace-relation db)
|
||||
namespaces (gp-db/get-all-namespace-relation db)
|
||||
tags (set (map second tagged-pages))
|
||||
full-pages (ldb/get-all-pages db)
|
||||
db-based? (entity-plus/db-based-graph? db)
|
||||
@@ -178,7 +178,7 @@
|
||||
tags (set (remove #(= page-id %) tags))
|
||||
ref-pages (get-page-referenced-pages db page-id)
|
||||
mentioned-pages (get-pages-that-mentioned-page db page-id show-journal)
|
||||
namespaces (ldb/get-all-namespace-relation db)
|
||||
namespaces (gp-db/get-all-namespace-relation db)
|
||||
links (concat
|
||||
namespaces
|
||||
(map (fn [ref-page]
|
||||
@@ -216,7 +216,7 @@
|
||||
(if (ldb/page? b) b (:block/page b))))
|
||||
(remove (fn [node] (= (:db/id block) (:db/id node))))
|
||||
(common-util/distinct-by :db/id))
|
||||
namespaces (ldb/get-all-namespace-relation db)
|
||||
namespaces (gp-db/get-all-namespace-relation db)
|
||||
links (->> (concat
|
||||
namespaces
|
||||
(map (fn [p] [(:db/id block) (:db/id p)]) ref-blocks))
|
||||
|
||||
@@ -793,7 +793,7 @@ independent of format as format specific heading characters are stripped"
|
||||
|
||||
(defn get-all-namespace-relation
|
||||
[repo]
|
||||
(ldb/get-all-namespace-relation (conn/get-db repo)))
|
||||
(gp-db/get-all-namespace-relation (conn/get-db repo)))
|
||||
|
||||
(defn get-all-namespace-parents
|
||||
[repo]
|
||||
|
||||
Reference in New Issue
Block a user