fix: add sqlite kvs table migration

This commit is contained in:
Tienson Qin
2024-08-22 22:03:54 +08:00
parent fa493f72dc
commit a7d330af83
3 changed files with 30 additions and 7 deletions

View File

@@ -2,7 +2,7 @@
"Main datascript schemas for the Logseq app" "Main datascript schemas for the Logseq app"
(:require [clojure.set :as set])) (:require [clojure.set :as set]))
(def version 12) (def version 13)
;; A page is a special block, a page can corresponds to multiple files with the same ":block/name". ;; A page is a special block, a page can corresponds to multiple files with the same ":block/name".
(def ^:large-vars/data-var schema (def ^:large-vars/data-var schema
{:db/ident {:db/unique :db.unique/identity} {:db/ident {:db/unique :db.unique/identity}

View File

@@ -5,7 +5,9 @@
[logseq.db.frontend.property :as db-property] [logseq.db.frontend.property :as db-property]
[logseq.db :as ldb] [logseq.db :as ldb]
[logseq.db.frontend.schema :as db-schema] [logseq.db.frontend.schema :as db-schema]
[frontend.worker.search :as search])) [frontend.worker.search :as search]
[cljs-bean.core :as bean]
[logseq.db.sqlite.util :as sqlite-util]))
;; TODO: fixes/rollback ;; TODO: fixes/rollback
@@ -125,6 +127,26 @@
(d/reset-schema! conn (update schema :block/type #(assoc % :db/cardinality :db.cardinality/one))) (d/reset-schema! conn (update schema :block/type #(assoc % :db/cardinality :db.cardinality/one)))
[])) []))
(defn- separate-addresses-in-kvs-table
[_conn _search-db ^Object sqlite-db]
(let [data (some->> (.exec sqlite-db #js {:sql "select addr, content from kvs where addr = 0"
:rowMode "array"})
bean/->clj
(map (fn [[addr content]]
(let [content' (sqlite-util/transit-read content)
[content' addresses] (if (map? content')
[(dissoc content' :addresses) (:addresses content')]
[content' nil])]
#js {:$addr addr
:$content content'
:$addresses addresses}))))]
(.exec sqlite-db #js [:sql "alter table kvs add column addresses JSON"])
(.transaction sqlite-db
(fn [tx]
(doseq [item data]
(.exec tx #js {:sql "INSERT INTO kvs (addr, content, addresses) values ($addr, $content, $addresses) on conflict(addr) do update set content = $content, addresses = $addresses"
:bind item}))))))
(def schema-version->updates (def schema-version->updates
[[3 {:properties [:logseq.property/table-sorting :logseq.property/table-filters [[3 {:properties [:logseq.property/table-sorting :logseq.property/table-filters
:logseq.property/table-hidden-columns :logseq.property/table-ordered-columns] :logseq.property/table-hidden-columns :logseq.property/table-ordered-columns]
@@ -145,7 +167,8 @@
[9 {:fix update-task-ident}] [9 {:fix update-task-ident}]
[10 {:fix update-table-properties}] [10 {:fix update-table-properties}]
[11 {:fix property-checkbox-type-non-ref}] [11 {:fix property-checkbox-type-non-ref}]
[12 {:fix update-block-type-many->one}]]) [12 {:fix update-block-type-many->one}]
[13 {:fix separate-addresses-in-kvs-table}]])
(let [max-schema-version (apply max (map first schema-version->updates))] (let [max-schema-version (apply max (map first schema-version->updates))]
(assert (<= db-schema/version max-schema-version)) (assert (<= db-schema/version max-schema-version))
@@ -153,7 +176,7 @@
(js/console.warn (str "Current db schema-version is " db-schema/version ", max available schema-version is " max-schema-version)))) (js/console.warn (str "Current db schema-version is " db-schema/version ", max available schema-version is " max-schema-version))))
(defn migrate (defn migrate
[conn search-db] [conn search-db sqlite-db]
(let [db @conn (let [db @conn
version-in-db (or (:kv/value (d/entity db :logseq.kv/schema-version)) 0)] version-in-db (or (:kv/value (d/entity db :logseq.kv/schema-version)) 0)]
(cond (cond
@@ -185,7 +208,7 @@
(fn [update] (fn [update]
(when-let [fix (:fix update)] (when-let [fix (:fix update)]
(when (fn? fix) (when (fn? fix)
(fix conn search-db)))) updates) (fix conn search-db sqlite-db)))) updates)
tx-data' (if db-based? (concat new-properties fixes) fixes)] tx-data' (if db-based? (concat new-properties fixes) fixes)]
(when (seq tx-data') (when (seq tx-data')
(let [tx-data' (concat tx-data' [(sqlite-create-graph/kv :logseq.kv/schema-version db-schema/version)])] (let [tx-data' (concat tx-data' [(sqlite-create-graph/kv :logseq.kv/schema-version db-schema/version)])]

View File

@@ -262,11 +262,11 @@
(try (try
(when-not (ldb/page-exists? @conn common-config/views-page-name "hidden") (when-not (ldb/page-exists? @conn common-config/views-page-name "hidden")
(ldb/create-views-page! conn)) (ldb/create-views-page! conn))
(catch :default _e)) (catch :default _e))
;; (gc-kvs-table! db) ;; (gc-kvs-table! db)
(db-migrate/migrate conn search-db) (db-migrate/migrate conn search-db db)
(db-listener/listen-db-changes! repo conn))))) (db-listener/listen-db-changes! repo conn)))))