chore merge sqlite-restore into sqlite-db

Also use it on the frontend. Also remove another unnecessary sqlite.db fn
pull/10639/head
Gabriel Horner 2023-12-12 15:41:02 -05:00
parent a207296a42
commit 36a553e4a1
8 changed files with 54 additions and 79 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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