diff --git a/deps/db/src/logseq/db/frontend/schema.cljs b/deps/db/src/logseq/db/frontend/schema.cljs index 67ca58a7eb..fc4b6baa6e 100644 --- a/deps/db/src/logseq/db/frontend/schema.cljs +++ b/deps/db/src/logseq/db/frontend/schema.cljs @@ -30,7 +30,7 @@ (map (juxt :major :minor) [(parse-schema-version x) (parse-schema-version y)]))) -(def version (parse-schema-version "65.24")) +(def version (parse-schema-version "65.25")) (defn major-version "Return a number. diff --git a/src/main/frontend/worker/db/migrate.cljs b/src/main/frontend/worker/db/migrate.cljs index 12c3896445..989c6cb167 100644 --- a/src/main/frontend/worker/db/migrate.cljs +++ b/src/main/frontend/worker/db/migrate.cljs @@ -34,15 +34,30 @@ :block/name (common-util/page-name-sanity-lc (:block/title page))}))) pages))) -(defn remove-block-path-refs - [db] - (when (d/entity db :block/path-refs) - (let [remove-datoms (->> (d/datoms db :avet :block/path-refs) +(defn- delete-property + [db property-key] + (if (d/entity db property-key) + (let [remove-datoms (->> (d/datoms db :avet property-key) (map :e) (distinct) (mapv (fn [id] - [:db/retract id :block/path-refs])))] - (conj remove-datoms [:db/retractEntity :block/path-refs])))) + [:db/retract id property-key])))] + (conj remove-datoms [:db/retractEntity property-key])) + (let [eids (d/q + '[:find [?e ...] + :in $ ?property-key + :where + [?e ?property-key ?v]] + db + property-key)] + (map + (fn [eid] + [:db/retract eid property-key]) + eids)))) + +(defn remove-block-path-refs + [db] + (delete-property db :block/path-refs)) (defn- remove-position-property-from-url-properties [db] @@ -80,7 +95,10 @@ :logseq.property/deleted-by-ref :logseq.property.recycle/original-parent :logseq.property.recycle/original-page - :logseq.property.recycle/original-order]}]]) + :logseq.property.recycle/original-order]}] + ["65.25" {:delete-properties [:block/pre-block? + :logseq.property.embedding/hnsw-label + :logseq.property.embedding/hnsw-label-updated-at]}]]) (let [[major minor] (last (sort (map (comp (juxt :major :minor) db-schema/parse-schema-version first) schema-version->updates)))] @@ -172,7 +190,7 @@ (defn- upgrade-version! "Return tx-data" - [conn version {:keys [properties classes fix] :as migrate-updates}] + [conn version {:keys [properties classes fix delete-properties] :as migrate-updates}] (let [version (db-schema/parse-schema-version version) db @conn new-properties (->> (select-keys db-property/built-in-properties properties) @@ -196,7 +214,11 @@ {:db/ident db-ident})) new-classes) fixes (when (fn? fix) (fix db)) - tx-data (concat new-class-idents new-properties new-classes fixes) + delete-properties-tx (mapcat + (fn [property] + (delete-property db property)) + delete-properties) + tx-data (concat new-class-idents new-properties new-classes fixes delete-properties-tx) tx-data' (concat [(sqlite-util/kv :logseq.kv/schema-version version)] tx-data) diff --git a/src/main/frontend/worker/sync/apply_txs.cljs b/src/main/frontend/worker/sync/apply_txs.cljs index d145cd0f58..cf016d483e 100644 --- a/src/main/frontend/worker/sync/apply_txs.cljs +++ b/src/main/frontend/worker/sync/apply_txs.cljs @@ -79,7 +79,8 @@ (set/union reverse-data-ignored-attrs rtc-const/ignore-attrs-when-syncing - rtc-const/ignore-entities-when-init-upload)) + rtc-const/ignore-entities-when-init-upload + #{:block/pre-block?})) (defn- remove-ignored-attrs [tx-data] (remove (fn [d] (contains? rtc-ignored-attrs (:a d))) tx-data)) diff --git a/src/test/frontend/worker/migrate_test.cljs b/src/test/frontend/worker/migrate_test.cljs index 7d383ce39f..a8766b4c78 100644 --- a/src/test/frontend/worker/migrate_test.cljs +++ b/src/test/frontend/worker/migrate_test.cljs @@ -3,7 +3,24 @@ [cljs.test :refer [deftest is]] [datascript.core :as d] [frontend.worker.db.migrate :as db-migrate] - [logseq.db :as ldb])) + [logseq.db :as ldb] + [logseq.db.frontend.schema :as db-schema])) + +(defn- entities-with + [db attr] + (seq + (d/q '[:find [?e ...] + :in $ ?attr + :where + [?e ?attr]] + db + attr))) + +(def ^:private legacy-65-24-schema + (merge db-schema/schema + {:block/pre-block? {:db/index true} + :logseq.property.embedding/hnsw-label {:db/index true} + :logseq.property.embedding/hnsw-label-updated-at {:db/index true}})) (deftest ensure-built-in-data-exists! (let [db-transit (str (fs-node/readFileSync "src/test/migration/64.8.transit")) @@ -20,3 +37,37 @@ (is (= graph-created-at (:kv/value (d/entity @conn :logseq.kv/graph-created-at))) "Graph created at not changed by fn"))) + +(deftest migrate-65-25-deletes-legacy-properties + (let [conn (d/create-conn legacy-65-24-schema) + legacy-block-uuid #uuid "11111111-1111-1111-1111-111111111111" + legacy-attrs [:block/pre-block? + :logseq.property.embedding/hnsw-label + :logseq.property.embedding/hnsw-label-updated-at]] + (d/transact! conn + [{:db/ident :logseq.kv/schema-version + :kv/value {:major 65 :minor 24}} + {:db/ident :logseq.property.embedding/hnsw-label + :block/uuid #uuid "22222222-2222-2222-2222-222222222222" + :block/title "HNSW label"} + {:db/ident :logseq.property.embedding/hnsw-label-updated-at + :block/uuid #uuid "33333333-3333-3333-3333-333333333333" + :block/title "HNSW label updated-at"} + {:block/uuid legacy-block-uuid + :block/title "legacy block" + :block/pre-block? true + :logseq.property.embedding/hnsw-label "label" + :logseq.property.embedding/hnsw-label-updated-at 123}]) + (is (every? #(entities-with @conn %) legacy-attrs)) + (is (some? (d/entity @conn :logseq.property.embedding/hnsw-label))) + (is (some? (d/entity @conn :logseq.property.embedding/hnsw-label-updated-at))) + + (db-migrate/migrate conn :target-version {:major 65 :minor 25}) + + (is (= {:major 65 :minor 25} + (:kv/value (d/entity @conn :logseq.kv/schema-version)))) + (is (every? #(nil? (entities-with @conn %)) legacy-attrs)) + (is (nil? (d/entity @conn :logseq.property.embedding/hnsw-label))) + (is (nil? (d/entity @conn :logseq.property.embedding/hnsw-label-updated-at))) + (is (= "legacy block" + (:block/title (d/entity @conn [:block/uuid legacy-block-uuid]))))))