From 97f8d6c013a8e7de60fe4cd9397f0f30cf7a1484 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 15 Apr 2024 18:00:04 +0800 Subject: [PATCH] :art: Improve database unbind block https://github.com/siyuan-note/siyuan/issues/11013 --- kernel/model/attribute_view.go | 52 ++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index dc3cd0579..161602dc3 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -1301,18 +1301,20 @@ func unbindAttributeViewBlock(operation *Operation, tx *Transaction) (err error) return } - keyValues := attrView.GetBlockKeyValues() - for _, value := range keyValues.Values { - if value.BlockID != operation.ID { - continue - } + for _, keyValues := range attrView.KeyValues { + for _, value := range keyValues.Values { + if value.BlockID != operation.ID { + continue + } - unbindBlockAv(tx, operation.AvID, value.BlockID) - value.BlockID = operation.NextID - if nil != value.Block { - value.Block.ID = operation.NextID + if av.KeyTypeBlock == value.Type { + unbindBlockAv(tx, operation.AvID, value.BlockID) + } + value.BlockID = operation.NextID + if nil != value.Block { + value.Block.ID = operation.NextID + } } - break } replacedRowID := false @@ -2956,25 +2958,27 @@ func replaceAttributeViewBlock(operation *Operation, tx *Transaction) (err error for _, keyValues := range attrView.KeyValues { for _, value := range keyValues.Values { - if value.BlockID == operation.PreviousID { - if value.BlockID != operation.NextID { - // 换绑 - unbindBlockAv(tx, operation.AvID, value.BlockID) - } + if value.BlockID != operation.PreviousID { + continue + } - value.BlockID = operation.NextID - if nil != value.Block { - value.Block.ID = operation.NextID - value.IsDetached = operation.IsDetached - if !operation.IsDetached { - value.Block.Content = getNodeRefText(node) - } - } + if av.KeyTypeBlock == value.Type && value.BlockID != operation.NextID { + // 换绑 + unbindBlockAv(tx, operation.AvID, value.BlockID) + } + value.BlockID = operation.NextID + if av.KeyTypeBlock == value.Type && nil != value.Block { + value.Block.ID = operation.NextID + value.IsDetached = operation.IsDetached if !operation.IsDetached { - bindBlockAv(tx, operation.AvID, operation.NextID) + value.Block.Content = getNodeRefText(node) } } + + if av.KeyTypeBlock == value.Type && !operation.IsDetached { + bindBlockAv(tx, operation.AvID, operation.NextID) + } } }