mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 14:14:55 +00:00
fix: view blocks not deleted
This commit is contained in:
5
deps/db-sync/src/logseq/db_sync/compare.cljs
vendored
5
deps/db-sync/src/logseq/db_sync/compare.cljs
vendored
@@ -36,11 +36,12 @@
|
||||
(fn [[op e a v]]
|
||||
(if (= op :db.fn/retractEntity)
|
||||
(let [entity (d/entity db-before e)]
|
||||
(map
|
||||
(keep
|
||||
(fn [a]
|
||||
(let [v (get entity a)
|
||||
v' (if (de/entity? v) [:block/uuid (:block/uuid v)] v)]
|
||||
[:db/retract [:block/uuid (:block/uuid entity)] a v']))
|
||||
(when v'
|
||||
[:db/retract [:block/uuid (:block/uuid entity)] a v'])))
|
||||
compare-attrs))
|
||||
(when (contains? compare-attrs a)
|
||||
(let [e' (if (neg-int? e)
|
||||
|
||||
2
deps/db-sync/src/logseq/db_sync/storage.cljs
vendored
2
deps/db-sync/src/logseq/db_sync/storage.cljs
vendored
@@ -118,8 +118,8 @@
|
||||
(let [new-t (next-t! sql)
|
||||
created-at (common/now-ms)
|
||||
normalized-data (->> tx-data
|
||||
db-normalize/replace-attr-retract-with-retract-entity
|
||||
(db-normalize/normalize-tx-data db-after db-before))
|
||||
_ (prn :debug :normalized-data normalized-data)
|
||||
tx-str (common/write-transit normalized-data)]
|
||||
(append-tx! sql new-t tx-str created-at)))
|
||||
|
||||
|
||||
3
deps/db-sync/src/logseq/db_sync/worker.cljs
vendored
3
deps/db-sync/src/logseq/db_sync/worker.cljs
vendored
@@ -331,8 +331,7 @@
|
||||
conn (.-conn self)]
|
||||
(when-not conn
|
||||
(fail-fast :db-sync/missing-db {:op :apply-tx}))
|
||||
(let [tx-data (->> (protocol/transit->tx txs)
|
||||
db-normalize/replace-attr-retract-with-retract-entity-v2)]
|
||||
(let [tx-data (protocol/transit->tx txs)]
|
||||
(ldb/transact! conn tx-data {:op :apply-client-tx})
|
||||
(prn :debug :finished-db-transact)
|
||||
(let [new-t (storage/get-t sql)]
|
||||
|
||||
40
deps/db/src/logseq/db/common/normalize.cljs
vendored
40
deps/db/src/logseq/db/common/normalize.cljs
vendored
@@ -2,19 +2,34 @@
|
||||
"Normalize && denormalize eid for sync"
|
||||
(:require [datascript.core :as d]))
|
||||
|
||||
(defn- remove-retract-entity-ref
|
||||
[tx-data]
|
||||
(let [retracted (-> (keep (fn [[op value]]
|
||||
(when (= op :db.fn/retractEntity)
|
||||
value)) tx-data)
|
||||
set)]
|
||||
(if (seq retracted)
|
||||
(remove (fn [item]
|
||||
(and (= :db/retract (first item))
|
||||
(= 4 (count item))
|
||||
(contains? retracted (last item)))) tx-data)
|
||||
tx-data)))
|
||||
|
||||
(defn replace-attr-retract-with-retract-entity-v2
|
||||
[normalized-tx-data]
|
||||
(map (fn [[op eid a v]]
|
||||
(cond
|
||||
(and (= op :db/retract) (= a :block/uuid))
|
||||
[:db.fn/retractEntity eid]
|
||||
(and a (some? v))
|
||||
[op eid a v]
|
||||
:else
|
||||
[op eid]))
|
||||
normalized-tx-data))
|
||||
(->
|
||||
(map (fn [[op eid a v]]
|
||||
(cond
|
||||
(and (= op :db/retract) (= a :block/uuid))
|
||||
[:db.fn/retractEntity eid]
|
||||
(and a (some? v))
|
||||
[op eid a v]
|
||||
:else
|
||||
[op eid]))
|
||||
normalized-tx-data)
|
||||
remove-retract-entity-ref))
|
||||
|
||||
(defn replace-attr-retract-with-retract-entity
|
||||
(defn- replace-attr-retract-with-retract-entity
|
||||
[tx-data]
|
||||
(let [e-datoms (->> (group-by first tx-data)
|
||||
(sort-by first))]
|
||||
@@ -52,6 +67,7 @@
|
||||
(defn normalize-tx-data
|
||||
[db-after db-before tx-data]
|
||||
(->> tx-data
|
||||
replace-attr-retract-with-retract-entity
|
||||
sort-datoms
|
||||
(keep
|
||||
(fn [d]
|
||||
@@ -75,4 +91,6 @@
|
||||
(if added
|
||||
[:db/add e' a v']
|
||||
[:db/retract e' a v'])))
|
||||
d)))))
|
||||
d)))
|
||||
remove-retract-entity-ref
|
||||
distinct))
|
||||
|
||||
@@ -190,7 +190,6 @@
|
||||
[db-after db-before tx-data]
|
||||
(->> tx-data
|
||||
remove-ignored-attrs
|
||||
db-normalize/replace-attr-retract-with-retract-entity
|
||||
(db-normalize/normalize-tx-data db-after db-before)))
|
||||
|
||||
(defn- reverse-tx-data
|
||||
@@ -340,7 +339,7 @@
|
||||
[db deleted-ids tx-data]
|
||||
(let [tx-data (vec tx-data)
|
||||
sanitized-tx-data (->> tx-data
|
||||
db-normalize/replace-attr-retract-with-retract-entity-v2
|
||||
;; db-normalize/replace-attr-retract-with-retract-entity-v2
|
||||
(keep-last-update db)
|
||||
(drop-invalid-refs deleted-ids))]
|
||||
(when (not= tx-data sanitized-tx-data)
|
||||
@@ -605,8 +604,7 @@
|
||||
local-txs (pending-txs repo)
|
||||
reversed-tx-data (->> local-txs
|
||||
(mapcat :reversed-tx)
|
||||
reverse
|
||||
db-normalize/replace-attr-retract-with-retract-entity-v2)
|
||||
reverse)
|
||||
has-local-changes? (seq reversed-tx-data)
|
||||
*rebased-tx-data (atom [])
|
||||
*remote-tx-report (atom nil)
|
||||
@@ -620,12 +618,15 @@
|
||||
;; 1. reverse local pending txs
|
||||
reversed-tx-report (when has-local-changes?
|
||||
(ldb/transact! temp-conn reversed-tx-data tx-meta))
|
||||
_ (prn :debug :tx-data (distinct tx-data))
|
||||
;; 2. transact remote tx-data
|
||||
remote-tx-report (ldb/transact! temp-conn tx-data tx-meta)
|
||||
_ (reset! *remote-tx-report remote-tx-report)
|
||||
remote-received-tx-data (sync-compare/filter-received-tx-data remote-tx-report tx-data)
|
||||
remote-applied-tx-data (sync-compare/filter-applied-tx-data remote-tx-report)]
|
||||
(when (not= remote-received-tx-data remote-applied-tx-data)
|
||||
(prn :diff-tx-data-mismatch
|
||||
(data/diff remote-received-tx-data remote-applied-tx-data))
|
||||
(fail-fast :db-sync/compare-tx-data-mismatch
|
||||
{:repo repo
|
||||
:tx-data tx-data
|
||||
|
||||
@@ -464,7 +464,8 @@
|
||||
(defn transact-pipeline
|
||||
"Compute extra tx-data and block/refs, should ensure it's a pure function and
|
||||
doesn't call `d/transact!` or `ldb/transact!`."
|
||||
[repo {:keys [db-after tx-meta] :as tx-report}]
|
||||
[repo {:keys [db-before db-after tx-meta] :as tx-report}]
|
||||
(prn :debug :pipeline)
|
||||
(let [extra-tx-data (compute-extra-tx-data tx-report)
|
||||
tx-report* (if (seq extra-tx-data)
|
||||
(let [result (d/with db-after extra-tx-data)]
|
||||
@@ -474,7 +475,12 @@
|
||||
tx-report)
|
||||
{:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report*)
|
||||
deleted-blocks (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report*))
|
||||
deleted-block-ids (set (map :db/id deleted-blocks))
|
||||
delete-views (mapcat
|
||||
(fn [item]
|
||||
(let [block (d/entity db-before (:db/id item))]
|
||||
(:logseq.property/_view-for block)))
|
||||
deleted-blocks)
|
||||
deleted-block-ids (set (map :db/id (concat deleted-blocks delete-views)))
|
||||
blocks' (remove (fn [b] (deleted-block-ids (:db/id b))) blocks)
|
||||
block-refs (when (seq blocks')
|
||||
(rebuild-block-refs repo tx-report* blocks'))
|
||||
@@ -487,7 +493,8 @@
|
||||
(when (:block/uuid (d/entity db-after db-id))
|
||||
{:db/id db-id
|
||||
:block/tx-id tx-id}))) updated-blocks))
|
||||
block-refs-tx-id-data (concat block-refs tx-id-data)
|
||||
delete-views-tx-data (map (fn [b] [:db/retractEntity (:db/id b)]) delete-views)
|
||||
block-refs-tx-id-data (concat delete-views-tx-data block-refs tx-id-data)
|
||||
replace-tx-report (when (seq block-refs-tx-id-data)
|
||||
(d/with (:db-after tx-report*) block-refs-tx-id-data))
|
||||
tx-report' (or replace-tx-report tx-report*)
|
||||
|
||||
Reference in New Issue
Block a user