From 04b832f5cb6b3af5a46cc0c7ff02b8af888fe15f Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Thu, 20 Feb 2025 12:36:51 -0500 Subject: [PATCH] chore: mv file graph specific fns out ldb --- .clj-kondo/config.edn | 1 + deps/db/src/logseq/db.cljs | 36 +----------------- .../logseq/tasks/dev/db_and_file_graphs.clj | 2 + src/main/frontend/common/file_based/db.cljs | 37 +++++++++++++++++++ src/main/frontend/db/model.cljs | 3 +- .../handler/page/file_based/rename.cljs | 9 +++-- 6 files changed, 48 insertions(+), 40 deletions(-) create mode 100644 src/main/frontend/common/file_based/db.cljs diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index d4c895e229..c1a51192fb 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -65,6 +65,7 @@ electron.ipc ipc electron.utils utils frontend.commands commands + frontend.common.file-based.db common-file-db frontend.common.date common-date frontend.common.file.core common-file frontend.common.file.util wfu diff --git a/deps/db/src/logseq/db.cljs b/deps/db/src/logseq/db.cljs index b6f09ae6c5..16774f5c11 100644 --- a/deps/db/src/logseq/db.cljs +++ b/deps/db/src/logseq/db.cljs @@ -19,8 +19,7 @@ [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]) + [logseq.db.sqlite.util :as sqlite-util]) (:refer-clojure :exclude [object?])) (defonce *transact-fn (atom nil)) @@ -534,39 +533,6 @@ [db] (when db (get-key-value db :logseq.kv/remote-schema-version))) -;; File based fns -(defn get-namespace-pages - "Accepts both sanitized and unsanitized namespaces" - [db namespace' {:keys [db-graph?]}] - (assert (string? namespace')) - (let [namespace'' (common-util/page-name-sanity-lc namespace') - pull-attrs (cond-> [:db/id :block/name :block/title :block/namespace] - (not db-graph?) - (conj {:block/file [:db/id :file/path]}))] - (d/q - [:find [(list 'pull '?c pull-attrs) '...] - :in '$ '% '?namespace - :where - ['?p :block/name '?namespace] - (list 'namespace '?p '?c)] - db - (:namespace file-rules/rules) - namespace''))) - -(defn get-pages-by-name-partition - [db partition'] - (when-not (string/blank? partition') - (let [partition'' (common-util/page-name-sanity-lc (string/trim partition')) - ids (->> (d/datoms db :aevt :block/name) - (filter (fn [datom] - (let [page (:v datom)] - (string/includes? page partition'')))) - (map :e))] - (when (seq ids) - (d/pull-many db - '[:db/id :block/name :block/title] - ids))))) - (defn get-all-properties [db] (->> (d/datoms db :avet :block/tags :logseq.class/Property) diff --git a/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj b/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj index 3eebcb8d9a..4c7b76a053 100644 --- a/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj +++ b/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj @@ -26,6 +26,7 @@ ["frontend.handler.file-based" "frontend.handler.file-sync" "frontend.db.file-based" "frontend.util.file-based" + "frontend.common.file-based" "frontend.worker.handler.page.file-based" ;; Want to only specify this ns and not the ones under it but don't have a way yet "frontend.worker.file" @@ -56,6 +57,7 @@ "Paths _only_ for file graphs" ["src/main/frontend/handler/file_based" "src/main/frontend/handler/file_sync.cljs" "src/main/frontend/db/file_based" "src/main/frontend/util/file_based" "src/main/frontend/worker/handler/page/file_based" "src/main/frontend/worker/file.cljs" + "src/main/frontend/common/file_based" "src/main/frontend/fs" "src/main/frontend/components/file_sync.cljs" "src/main/frontend/components/file_based" diff --git a/src/main/frontend/common/file_based/db.cljs b/src/main/frontend/common/file_based/db.cljs new file mode 100644 index 0000000000..69347beec5 --- /dev/null +++ b/src/main/frontend/common/file_based/db.cljs @@ -0,0 +1,37 @@ +(ns frontend.common.file-based.db + "Database fns for file graphs that are used by worker and frontend" + (:require [clojure.string :as string] + [datascript.core :as d] + [logseq.common.util :as common-util] + [logseq.db.file-based.rules :as file-rules])) + +(defn get-namespace-pages + "Accepts both sanitized and unsanitized namespaces" + [db namespace'] + (assert (string? namespace')) + (let [namespace'' (common-util/page-name-sanity-lc namespace') + pull-attrs [:db/id :block/name :block/original-name :block/namespace + {:block/file [:db/id :file/path]}]] + (d/q + [:find [(list 'pull '?c pull-attrs) '...] + :in '$ '% '?namespace + :where + ['?p :block/name '?namespace] + (list 'namespace '?p '?c)] + db + (:namespace file-rules/rules) + namespace''))) + +(defn get-pages-by-name-partition + [db partition'] + (when-not (string/blank? partition') + (let [partition'' (common-util/page-name-sanity-lc (string/trim partition')) + ids (->> (d/datoms db :aevt :block/name) + (filter (fn [datom] + (let [page (:v datom)] + (string/includes? page partition'')))) + (map :e))] + (when (seq ids) + (d/pull-many db + '[:db/id :block/name :block/title] + ids))))) diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index 004e378c3d..bc3cb85260 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -6,6 +6,7 @@ [clojure.string :as string] [clojure.walk :as walk] [datascript.core :as d] + [frontend.common.file-based.db :as common-file-db] [frontend.config :as config] [frontend.date :as date] [frontend.db.conn :as conn] @@ -912,7 +913,7 @@ independent of format as format specific heading characters are stripped" (defn get-namespace-pages "Accepts both sanitized and unsanitized namespaces" [repo namespace] - (ldb/get-namespace-pages (conn/get-db repo) namespace {:db-graph? (config/db-based-graph? repo)})) + (common-file-db/get-namespace-pages (conn/get-db repo) namespace)) (defn- tree [flat-col root] (let [sort-fn #(sort-by :block/name %) diff --git a/src/main/frontend/worker/handler/page/file_based/rename.cljs b/src/main/frontend/worker/handler/page/file_based/rename.cljs index be45087cf4..87665b82b4 100644 --- a/src/main/frontend/worker/handler/page/file_based/rename.cljs +++ b/src/main/frontend/worker/handler/page/file_based/rename.cljs @@ -1,6 +1,7 @@ (ns frontend.worker.handler.page.file-based.rename "File based page rename" - (:require [frontend.worker.handler.page :as worker-page] + (:require [frontend.common.file-based.db :as common-file-db] + [frontend.worker.handler.page :as worker-page] [datascript.core :as d] [clojure.string :as string] [clojure.walk :as walk] @@ -254,7 +255,7 @@ (defn- rename-namespace-pages! "Original names (unsanitized only)" [repo conn config old-name new-name] - (let [pages (ldb/get-namespace-pages @conn old-name {}) + (let [pages (common-file-db/get-namespace-pages @conn old-name) page (d/pull @conn '[*] [:block/name (common-util/page-name-sanity-lc old-name)]) pages (cons page pages)] (doseq [{:block/keys [name title]} pages] @@ -274,8 +275,8 @@ (let [nested-page-str (page-ref/->page-ref (common-util/page-name-sanity-lc old-ns-name)) ns-prefix-format-str (str page-ref/left-brackets "%s/") ns-prefix (common-util/format ns-prefix-format-str (common-util/page-name-sanity-lc old-ns-name)) - nested-pages (ldb/get-pages-by-name-partition @conn nested-page-str) - nested-pages-ns (ldb/get-pages-by-name-partition @conn ns-prefix)] + nested-pages (common-file-db/get-pages-by-name-partition @conn nested-page-str) + nested-pages-ns (common-file-db/get-pages-by-name-partition @conn ns-prefix)] (when nested-pages ;; rename page "[[obsidian]] is a tool" to "[[logseq]] is a tool" (doseq [{:block/keys [name title]} nested-pages]