wip: debug

feat/datascript-storage-test
Tienson Qin 2023-11-26 15:58:26 +08:00
parent d6e6e4ba28
commit 232c1cb4c2
8 changed files with 84 additions and 67 deletions

View File

@ -2,8 +2,14 @@
:deps
{org.clojure/clojure {:mvn/version "1.11.1"}
rum/rum {:mvn/version "0.12.9"}
datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
:sha "f0922f4d10714636711bc0176409290e44ce2feb"}
datascript/datascript {:local/root "../../datascript"
:exclusions [persistent-sorted-set/persistent-sorted-set]}
;; datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
;; :sha "f0922f4d10714636711bc0176409290e44ce2feb"
;; :exclusions [persistent-sorted-set/persistent-sorted-set]}
persistent-sorted-set/persistent-sorted-set {:local/root "../../persistent-sorted-set"}
datascript-transit/datascript-transit {:mvn/version "0.3.0"}
borkdude/rewrite-edn {:mvn/version "0.4.7"}
funcool/promesa {:mvn/version "4.0.2"}

9
deps/db/deps.edn vendored
View File

@ -1,7 +1,12 @@
{:deps
;; External deps should be kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
{datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
:sha "f0922f4d10714636711bc0176409290e44ce2feb"}
{datascript/datascript {:local/root "../../../../datascript"
:exclusions [persistent-sorted-set/persistent-sorted-set]}
;; datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
;; :sha "f0922f4d10714636711bc0176409290e44ce2feb"
;; :exclusions [persistent-sorted-set/persistent-sorted-set]}
persistent-sorted-set/persistent-sorted-set {:local/root "../../../../persistent-sorted-set"}
com.cognitect/transit-cljs {:mvn/version "0.8.280"}
cljs-bean/cljs-bean {:mvn/version "1.5.0"}
org.clojars.mmb90/cljs-cache {:mvn/version "0.1.4"}}

View File

@ -20,10 +20,7 @@
db-graph?
(assoc :block/format :markdown)))
default-db/built-in-pages)]
(d/transact! db-conn
(concat
[{:schema/version db-schema/version}]
built-in-pages)))))
(d/transact! db-conn built-in-pages))))
(defn start-conn
"Create datascript conn with schema and default data"

View File

@ -10,14 +10,9 @@
[cljs.cache :as cache]
[datascript.core :as d]
[goog.object :as gobj]
[logseq.db.frontend.schema :as db-schema]))
(defn- write-transit [data]
(t/write (t/writer :json) data))
(defn- read-transit [s]
(t/read (t/reader :json) s))
[logseq.db.frontend.schema :as db-schema]
[datascript.transit :as dt]
[clojure.edn :as edn]))
;; Notice: this works only on Node.js environment, it doesn't support browser yet.
@ -107,23 +102,33 @@
(let [cache (cache/lru-cache-factory {} :threshold threshold)]
(reify IStorage
(-store [_ addr+data-seq]
(prn :debug :store-addr (map first addr+data-seq))
(prn :debug :store {:addr-data addr+data-seq})
(let [data (map
(let [data (->>
(map
(fn [[addr data]]
{:addr addr
:content (write-transit data)})
addr+data-seq)]
(upsert-addr-content! repo (bean/->js data))))
#js {:addr addr
:content (pr-str data)})
addr+data-seq)
(to-array))]
(upsert-addr-content! repo data)))
(-restore [_ addr]
(when-let [content (if (cache/has? cache addr)
(do
(cache/hit cache addr)
(cache/lookup cache addr))
(when-let [result (restore-data-from-addr repo addr)]
(cache/miss cache addr result)
result))]
(prn {:content content})
(read-transit content))))))
(let [content (restore-data-from-addr repo addr)]
(when (nil? content)
(prn :debug :error :addr-not-exists addr))
(prn :debug :restored {:addr addr
;; :content content
})
(edn/read-string content))
;; (when-let [content (if (cache/has? cache addr)
;; (do
;; (cache/hit cache addr)
;; (cache/lookup cache addr))
;; (when-let [result (restore-data-from-addr repo addr)]
;; (cache/miss cache addr result)
;; result))]
;; (edn/read-string content))
))))
(defn open-db!
[graphs-dir db-name]

View File

@ -1,7 +1,10 @@
{:deps
;; External deps should be kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
{datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
:sha "f0922f4d10714636711bc0176409290e44ce2feb"}
{datascript/datascript {:local/root "../../../../datascript"
:exclusions [persistent-sorted-set/persistent-sorted-set]}
persistent-sorted-set/persistent-sorted-set {:local/root "../../persistent-sorted-set"}
;; datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
;; :sha "f0922f4d10714636711bc0176409290e44ce2feb"}
logseq/db {:local/root "../db"}
com.cognitect/transit-cljs {:mvn/version "0.8.280"}}
:aliases

View File

@ -141,10 +141,6 @@
;; TODO: Store schema in sqlite
;; (db-migrate/migrate attached-db)
(d/transact! conn [(react/kv :db/type "db")
{:schema/version db-schema/version}]
{:skip-persist? true})
(when-not electron?
(js/setTimeout
(fn []

View File

@ -7,6 +7,7 @@
[frontend.date :as date]
[frontend.db :as db]
[frontend.db.restore :as db-restore]
[logseq.db.frontend.schema :as db-schema]
[frontend.fs :as fs]
[frontend.fs.nfs :as nfs]
[frontend.handler.file :as file-handler]
@ -546,8 +547,8 @@
_ (start-repo-db-if-not-exists! full-graph-name)
_ (state/add-repo! {:url full-graph-name})
_ (route-handler/redirect-to-home!)
_ (db/transact! full-graph-name [(react/kv :db/type "db")]
{:skip-persist? true})
_ (db/transact! full-graph-name [(react/kv :db/type "db")
(react/kv :schema/version db-schema/version)])
initial-data (sqlite-util/build-db-initial-data config/config-default-content)
_ (db/transact! full-graph-name initial-data)
_ (repo-config-handler/set-repo-config-state! full-graph-name config/config-default-content)

View File

@ -79,16 +79,19 @@
(let [tx-meta (:tx-meta tx-report)
{:keys [compute-path-refs? from-disk? new-graph? replace?]} tx-meta]
(when (and (not from-disk?)
(not new-graph?)
(not compute-path-refs?))
(not new-graph?))
(try
(reset-editing-block-content! (:tx-data tx-report) tx-meta)
(catch :default e
(prn :reset-editing-block-content)
(js/console.error e)))
(let [{:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report)
repo (state/get-current-repo)
tx (util/profile
tx (when-not compute-path-refs?
(util/profile
"Compute path refs: "
(set (compute-block-path-refs-tx tx-report blocks)))
(set (compute-block-path-refs-tx tx-report blocks))))
tx-report' (if (seq tx)
(let [refs-tx-data' (:tx-data (db/transact! repo tx {:outliner/transact? true
:replace? true
@ -99,23 +102,21 @@
importing? (:graph/importing @state/state)
deleted-block-uuids (set (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report)))]
(when (and (seq deleted-block-uuids) (not replace?))
(when (and (seq deleted-block-uuids) (not replace?)
(not compute-path-refs?))
(delete-property-parent-block-if-empty! repo tx-report deleted-block-uuids))
(when-not importing?
(react/refresh! repo tx-report'))
(when (and (not (:skip-persist? tx-meta))
(not replace?)
(not (:update-tx-ids? tx-meta)))
(let [upsert-blocks (outliner-pipeline/build-upsert-blocks blocks deleted-block-uuids (:db-after tx-report'))
updated-blocks (remove (fn [b] (contains? (set deleted-block-uuids) (:block/uuid b))) blocks)
tx-id (get-in tx-report' [:tempids :db/current-tx])
update-tx-ids (map (fn [b]
update-tx-ids (->>
(map (fn [b]
(when-let [db-id (:db/id b)]
{:db/id db-id
:block/tx-id tx-id})) updated-blocks)]
(when (seq update-tx-ids)
:block/tx-id tx-id})) updated-blocks)
(remove nil?))]
(when (and (seq update-tx-ids)
(not (:update-tx-ids? tx-meta)))
(db/transact! repo update-tx-ids {:replace? true
:update-tx-ids? true}))
(when (config/db-based-graph? repo)
@ -123,7 +124,10 @@
(go
(if (util/electron?)
(<! (persist-db/<transact-data repo (:tx-data tx-report) (:tx-meta tx-report)))
(<! (persist-db/<transact-data repo upsert-blocks deleted-block-uuids))))))))
(<! (persist-db/<transact-data repo upsert-blocks deleted-block-uuids)))))))
(when-not importing?
(react/refresh! repo tx-report'))
(when (and (not (:delete-files? tx-meta))
(not replace?))