mirror of
https://github.com/logseq/logseq.git
synced 2026-05-05 19:36:35 +00:00
fix: add sqlite kvs table migration
This commit is contained in:
2
deps/db/src/logseq/db/frontend/schema.cljs
vendored
2
deps/db/src/logseq/db/frontend/schema.cljs
vendored
@@ -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}
|
||||||
|
|||||||
@@ -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)])]
|
||||||
|
|||||||
@@ -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)))))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user