From 36a553e4a19361d77c0b902473e7f00633225d39 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Tue, 12 Dec 2023 15:41:02 -0500 Subject: [PATCH] chore merge sqlite-restore into sqlite-db Also use it on the frontend. Also remove another unnecessary sqlite.db fn --- deps/db/.carve/config.edn | 1 - deps/db/src/logseq/db/sqlite/cli.cljs | 7 ++- deps/db/src/logseq/db/sqlite/common_db.cljs | 5 ++ deps/db/src/logseq/db/sqlite/db.cljs | 8 +-- deps/db/src/logseq/db/sqlite/restore.cljs | 9 ---- deps/db/test/logseq/db/sqlite/db_test.cljs | 47 ++++++++++++++--- .../test/logseq/db/sqlite/restore_test.cljs | 51 ------------------- src/main/frontend/db/restore.cljs | 5 +- 8 files changed, 54 insertions(+), 79 deletions(-) delete mode 100644 deps/db/src/logseq/db/sqlite/restore.cljs delete mode 100644 deps/db/test/logseq/db/sqlite/restore_test.cljs diff --git a/deps/db/.carve/config.edn b/deps/db/.carve/config.edn index f8389cb72..5980c019e 100644 --- a/deps/db/.carve/config.edn +++ b/deps/db/.carve/config.edn @@ -1,6 +1,5 @@ {:paths ["src"] :api-namespaces [logseq.db.sqlite.db - logseq.db.sqlite.restore logseq.db.sqlite.rtc logseq.db.sqlite.util logseq.db.sqlite.cli diff --git a/deps/db/src/logseq/db/sqlite/cli.cljs b/deps/db/src/logseq/db/sqlite/cli.cljs index 890aa7a83..b8c729e6a 100644 --- a/deps/db/src/logseq/db/sqlite/cli.cljs +++ b/deps/db/src/logseq/db/sqlite/cli.cljs @@ -1,7 +1,7 @@ (ns ^:node-only logseq.db.sqlite.cli "Primary ns to interact with DB graphs with node.js based CLIs" (:require [logseq.db.sqlite.db :as sqlite-db] - [logseq.db.sqlite.restore :as sqlite-restore] + [logseq.db.sqlite.common-db :as sqlite-common-db] ["fs" :as fs] ["path" :as node-path])) @@ -14,4 +14,7 @@ "Reads a given sqlite db and returns a datascript connection of its contents. The sqlite db is assumed to have already been opened by sqlite-db/open-db!" [db-name] - (sqlite-restore/restore-initial-data (sqlite-db/get-initial-data db-name))) \ No newline at end of file + (-> (sqlite-db/get-conn db-name) + deref + sqlite-common-db/get-initial-data + sqlite-common-db/restore-initial-data)) \ No newline at end of file diff --git a/deps/db/src/logseq/db/sqlite/common_db.cljs b/deps/db/src/logseq/db/sqlite/common_db.cljs index e9f5d719f..46ee7d7ac 100644 --- a/deps/db/src/logseq/db/sqlite/common_db.cljs +++ b/deps/db/src/logseq/db/sqlite/common_db.cljs @@ -9,6 +9,11 @@ (->> (d/datoms db :eavt) vec)) +(defn restore-initial-data + "Given initial sqlite data, returns a datascript connection" + [datoms] + (d/conn-from-datoms datoms db-schema/schema-for-db-based-graph)) + (defn create-kvs-table! "Creates a sqlite table for use with datascript.storage if one doesn't exist" [sqlite-db] diff --git a/deps/db/src/logseq/db/sqlite/db.cljs b/deps/db/src/logseq/db/sqlite/db.cljs index cffbb38ea..40bb580e5 100644 --- a/deps/db/src/logseq/db/sqlite/db.cljs +++ b/deps/db/src/logseq/db/sqlite/db.cljs @@ -101,10 +101,4 @@ (d/transact! conn tx-data tx-meta) (catch :default e (prn :debug :error) - (js/console.error e))))) - -(defn get-initial-data - "Returns initial data as vec of datoms" - [repo] - (when-let [conn (get-conn repo)] - (sqlite-common-db/get-initial-data @conn))) \ No newline at end of file + (js/console.error e))))) \ No newline at end of file diff --git a/deps/db/src/logseq/db/sqlite/restore.cljs b/deps/db/src/logseq/db/sqlite/restore.cljs deleted file mode 100644 index 21cbcab63..000000000 --- a/deps/db/src/logseq/db/sqlite/restore.cljs +++ /dev/null @@ -1,9 +0,0 @@ -(ns logseq.db.sqlite.restore - "Fns to restore data from a sqlite database to a datascript one" - (:require [datascript.core :as d] - [logseq.db.frontend.schema :as db-schema])) - -(defn restore-initial-data - "Given initial sqlite data, returns a datascript connection" - [datoms] - (d/conn-from-datoms datoms db-schema/schema-for-db-based-graph)) \ No newline at end of file diff --git a/deps/db/test/logseq/db/sqlite/db_test.cljs b/deps/db/test/logseq/db/sqlite/db_test.cljs index 5f6ad4cb4..0a7ab60f2 100644 --- a/deps/db/test/logseq/db/sqlite/db_test.cljs +++ b/deps/db/test/logseq/db/sqlite/db_test.cljs @@ -3,8 +3,8 @@ ["fs" :as fs] ["path" :as node-path] [datascript.core :as d] - [logseq.db.sqlite.db :as sqlite-db] - [logseq.db.sqlite.restore :as sqlite-restore])) + [logseq.db.sqlite.common-db :as sqlite-common-db] + [logseq.db.sqlite.db :as sqlite-db])) (use-fixtures :each @@ -28,11 +28,44 @@ (let [blocks [{:block/uuid (random-uuid) :file/path "logseq/config.edn" :file/content "{:foo :bar}"}] - _ (sqlite-db/transact! "test-db" blocks {})] + conn* (sqlite-db/get-conn "test-db") + _ (d/transact! conn* blocks) + ;; Simulate getting data from sqlite and restoring it for frontend + conn (-> (sqlite-common-db/get-initial-data @conn*) + sqlite-common-db/restore-initial-data)] (is (= blocks - (->> (sqlite-db/get-initial-data "test-db") - sqlite-restore/restore-initial-data - deref + (->> @conn (d/q '[:find (pull ?b [:block/uuid :file/path :file/content]) :where [?b :file/content]]) (map first))) - "Correct file with content is found")))) \ No newline at end of file + "Correct file with content is found")))) + +(deftest restore-initial-data + (testing "Restore a journal page with its block" + (create-graph-dir "tmp/graphs" "test-db") + (sqlite-db/open-db! "tmp/graphs" "test-db") + (let [page-uuid (random-uuid) + block-uuid (random-uuid) + created-at (js/Date.now) + blocks [{:db/id 100001 + :block/uuid page-uuid + :block/journal-day 20230629 + :block/name "jun 29th, 2023" + :block/created-at created-at + :block/updated-at created-at} + {:db/id 100002 + :block/content "test" + :block/uuid block-uuid + :block/page {:db/id 100001} + :block/created-at created-at + :block/updated-at created-at}] + conn* (sqlite-db/get-conn "test-db") + _ (d/transact! conn* blocks) + ;; Simulate getting data from sqlite and restoring it for frontend + conn (-> (sqlite-common-db/get-initial-data @conn*) + sqlite-common-db/restore-initial-data)] + (is (= blocks + (->> (d/q '[:find (pull ?b [*]) + :where [?b :block/created-at]] + @conn) + (map first))) + "Datascript db matches data inserted into sqlite")))) \ No newline at end of file diff --git a/deps/db/test/logseq/db/sqlite/restore_test.cljs b/deps/db/test/logseq/db/sqlite/restore_test.cljs deleted file mode 100644 index 1b44fc8d3..000000000 --- a/deps/db/test/logseq/db/sqlite/restore_test.cljs +++ /dev/null @@ -1,51 +0,0 @@ -(ns logseq.db.sqlite.restore-test - (:require [cljs.test :refer [deftest async use-fixtures is testing]] - ["fs" :as fs] - ["path" :as node-path] - [datascript.core :as d] - [logseq.db.sqlite.db :as sqlite-db] - [logseq.db.sqlite.restore :as sqlite-restore])) - -(use-fixtures - :each - ;; Cleaning tmp/ before leaves last tmp/ after a test run for dev and debugging - {:before - #(async done - (if (fs/existsSync "tmp") - (fs/rm "tmp" #js {:recursive true} (fn [err] - (when err (js/console.log err)) - (done))) - (done)))}) - -(defn- create-graph-dir - [dir db-name] - (fs/mkdirSync (node-path/join dir db-name) #js {:recursive true})) - -(deftest restore-initial-data - (testing "Restore a journal page with its block" - (create-graph-dir "tmp/graphs" "test-db") - (sqlite-db/open-db! "tmp/graphs" "test-db") - (let [page-uuid (random-uuid) - block-uuid (random-uuid) - created-at (js/Date.now) - frontend-blocks [{:db/id 100001 - :block/uuid page-uuid - :block/journal-day 20230629 - :block/name "jun 29th, 2023" - :block/created-at created-at - :block/updated-at created-at} - {:db/id 100002 - :block/content "test" - :block/uuid block-uuid - :block/page {:db/id 100001} - :block/created-at created-at - :block/updated-at created-at}] - _ (sqlite-db/transact! "test-db" frontend-blocks {}) - conn (-> (sqlite-db/get-initial-data "test-db") - sqlite-restore/restore-initial-data)] - (is (= frontend-blocks - (->> (d/q '[:find (pull ?b [*]) - :where [?b :block/created-at]] - @conn) - (map first))) - "Datascript db matches data inserted into sqlite from simulated frontend")))) \ No newline at end of file diff --git a/src/main/frontend/db/restore.cljs b/src/main/frontend/db/restore.cljs index bb0b9b352..d510b332f 100644 --- a/src/main/frontend/db/restore.cljs +++ b/src/main/frontend/db/restore.cljs @@ -16,7 +16,8 @@ [cljs-time.core :as t] [logseq.db.frontend.property :as db-property] [logseq.db.frontend.property.util :as db-property-util] - [datascript.transit :as dt])) + [datascript.transit :as dt] + [logseq.db.sqlite.common-db :as sqlite-common-db])) (defn- old-schema? "Requires migration if the schema version is older than db-schema/version" @@ -97,7 +98,7 @@ _ (assert (some? data) "No data found when reloading db") datoms (dt/read-transit-str data) datoms-count (count datoms) - conn (d/conn-from-datoms datoms db-schema/schema-for-db-based-graph) + conn (sqlite-common-db/restore-initial-data datoms) db-name (db-conn/datascript-db repo) _ (swap! db-conn/conns assoc db-name conn) end-time (t/now)]