🎨 Improve reference count update after moving heading blocks https://github.com/siyuan-note/siyuan/issues/15322

This commit is contained in:
Daniel 2025-07-17 21:02:25 +08:00
parent d5d6095070
commit 38a7bf03bc
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 22 additions and 10 deletions

View file

@ -1594,7 +1594,8 @@ func (tx *Transaction) writeTree(tree *parse.Tree) (err error) {
return
}
func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentNodes, changedChildNodes []*ast.Node) {
func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedNodes []*ast.Node) {
changedNodesMap := map[string]*ast.Node{}
ret = sql.GetRefsCacheByDefID(updateNode.ID)
if nil != updateNode.Parent && ast.NodeDocument != updateNode.Parent.Type &&
updateNode.Parent.IsContainerBlock() && updateNode == treenode.FirstLeafBlock(updateNode.Parent) {
@ -1607,7 +1608,9 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
parentRefs := sql.GetRefsCacheByDefID(parent.ID)
if 0 < len(parentRefs) {
ret = append(ret, parentRefs...)
changedParentNodes = append(changedParentNodes, parent)
if _, ok := changedNodesMap[parent.ID]; !ok {
changedNodesMap[parent.ID] = parent
}
}
}
}
@ -1621,11 +1624,25 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
childRefs := sql.GetRefsCacheByDefID(n.ID)
if 0 < len(childRefs) {
ret = append(ret, childRefs...)
changedChildNodes = append(changedChildNodes, n)
changedNodesMap[n.ID] = n
}
return ast.WalkContinue
})
}
if ast.NodeHeading == updateNode.Type && "1" == updateNode.IALAttr("fold") {
// 如果是折叠标题,则需要向下查找引用
children := treenode.HeadingChildren(updateNode)
for _, child := range children {
childRefs := sql.GetRefsCacheByDefID(child.ID)
if 0 < len(childRefs) {
ret = append(ret, childRefs...)
changedNodesMap[child.ID] = child
}
}
}
for _, n := range changedNodesMap {
changedNodes = append(changedNodes, n)
}
return
}