mirror of https://github.com/logseq/logseq
chore merge sqlite-restore into sqlite-db
Also use it on the frontend. Also remove another unnecessary sqlite.db fnpull/10639/head
parent
a207296a42
commit
36a553e4a1
|
@ -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
|
||||
|
|
|
@ -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))
|
|
@ -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]
|
||||
|
|
|
@ -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)))))
|
|
@ -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))
|
|
@ -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"))))
|
|
@ -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"))))
|
|
@ -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)]
|
||||
|
|
Loading…
Reference in New Issue