fix: remove legacy properties

This commit is contained in:
Tienson Qin
2026-05-03 11:18:44 +08:00
parent 1d027cba3a
commit e470dfd5f0
4 changed files with 86 additions and 12 deletions

View File

@@ -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.

View File

@@ -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)

View File

@@ -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))

View File

@@ -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]))))))