From e321c639a7b3ee4ea350b333da0230c7edc833fd Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 24 May 2025 11:58:56 +0800 Subject: [PATCH] :art: Update the `parent_id` of blocks below a heading block when updating the heading block https://github.com/siyuan-note/siyuan/issues/14871 --- kernel/sql/database.go | 24 ++---------------------- kernel/treenode/tree.go | 7 ++++++- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/kernel/sql/database.go b/kernel/sql/database.go index c14c6568e..f2349d204 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -849,7 +849,7 @@ func buildBlockFromNode(n *ast.Node, tree *parse.Tree) (block *Block, attributes fcontent = NodeStaticContent(fc, nil, true, false, true) parentID = n.Parent.ID - if h := heading(n); nil != h { // 如果在标题块下方,则将标题块作为父节点 + if h := treenode.HeadingParent(n); nil != h { // 如果在标题块下方,则将标题块作为父节点 parentID = h.ID } length = utf8.RuneCountInString(fcontent) @@ -861,7 +861,7 @@ func buildBlockFromNode(n *ast.Node, tree *parse.Tree) (block *Block, attributes content = NodeStaticContent(n, nil, true, indexAssetPath, true) parentID = n.Parent.ID - if h := heading(n); nil != h { + if h := treenode.HeadingParent(n); nil != h { parentID = h.ID } length = utf8.RuneCountInString(content) @@ -945,26 +945,6 @@ func tagFromNode(node *ast.Node) (ret string) { return strings.TrimSpace(tagBuilder.String()) } -func heading(node *ast.Node) *ast.Node { - if nil == node { - return nil - } - - currentLevel := 16 - if ast.NodeHeading == node.Type { - currentLevel = node.HeadingLevel - } - - for prev := node.Previous; nil != prev; prev = prev.Previous { - if ast.NodeHeading == prev.Type { - if prev.HeadingLevel < currentLevel { - return prev - } - } - } - return nil -} - func deleteByBoxTx(tx *sql.Tx, box string) (err error) { if err = deleteBlocksByBoxTx(tx, box); err != nil { return diff --git a/kernel/treenode/tree.go b/kernel/treenode/tree.go index 5ea5452f5..f089c39ac 100644 --- a/kernel/treenode/tree.go +++ b/kernel/treenode/tree.go @@ -44,9 +44,14 @@ func NodeHash(node *ast.Node, tree *parse.Tree, luteEngine *lute.Lute) string { } hpath := tree.HPath data := tree.Box + tree.Path + hpath + string(ial) + md + var parentID string if nil != node.Parent { - data += node.Parent.ID + parentID = node.Parent.ID } + if h := HeadingParent(node); nil != h { + parentID = h.ID + } + data += parentID return fmt.Sprintf("%x", sha256.Sum256(gulu.Str.ToBytes(data)))[:7] }