ソースを参照

chore merge sqlite-restore into sqlite-db

Also use it on the frontend. Also remove another unnecessary sqlite.db fn
Gabriel Horner 2 年 前
コミット
36a553e4a1

+ 0 - 1
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

+ 5 - 2
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)))
+  (-> (sqlite-db/get-conn db-name)
+      deref
+      sqlite-common-db/get-initial-data
+      sqlite-common-db/restore-initial-data))

+ 5 - 0
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]

+ 1 - 7
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)))
+        (js/console.error e)))))

+ 0 - 9
deps/db/src/logseq/db/sqlite/restore.cljs

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

+ 40 - 7
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"))))
+          "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"))))

+ 0 - 51
deps/db/test/logseq/db/sqlite/restore_test.cljs

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

+ 3 - 2
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)]