From 9d009fe5f92d1f724b4a748c3f5419ef1c0bb6ff Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 25 Jan 2023 13:09:10 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E5=86=85=E6=A0=B8?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=B0=83=E5=BA=A6=E6=9C=BA=E5=88=B6=E6=8F=90?= =?UTF-8?q?=E5=8D=87=E7=A8=B3=E5=AE=9A=E6=80=A7=20https://github.com/siyua?= =?UTF-8?q?n-note/siyuan/issues/7113?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/sql/upsert.go | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/kernel/sql/upsert.go b/kernel/sql/upsert.go index 3e7516467..f0d9875a7 100644 --- a/kernel/sql/upsert.go +++ b/kernel/sql/upsert.go @@ -399,7 +399,14 @@ func indexTree(tx *sql.Tx, box, p string, context map[string]interface{}) (err e return } - err = upsertTree(tx, tree, context) + err = insertTree(tx, tree, context) + return +} + +func insertTree(tx *sql.Tx, tree *parse.Tree, context map[string]interface{}) (err error) { + blocks, spans, assets, attributes := fromTree(tree.Root, tree) + refs, fileAnnotationRefs := refsFromTree(tree) + err = insertTree0(tx, tree, context, blocks, spans, assets, attributes, refs, fileAnnotationRefs) return } @@ -431,7 +438,10 @@ func upsertTree(tx *sql.Tx, tree *parse.Tree, context map[string]interface{}) (e for _, b := range blocks { toRemoves = append(toRemoves, b.ID) } - deleteBlocksByIDs(tx, toRemoves) + + if err = deleteBlocksByIDs(tx, toRemoves); nil != err { + return + } if err = deleteSpansByPathTx(tx, tree.Box, tree.Path); nil != err { return @@ -449,11 +459,20 @@ func upsertTree(tx *sql.Tx, tree *parse.Tree, context map[string]interface{}) (e return } + refs, fileAnnotationRefs := refsFromTree(tree) + if err = insertTree0(tx, tree, context, blocks, spans, assets, attributes, refs, fileAnnotationRefs); nil != err { + return + } + return err +} + +func insertTree0(tx *sql.Tx, tree *parse.Tree, context map[string]interface{}, + blocks []*Block, spans []*Span, assets []*Asset, attributes []*Attribute, + refs []*Ref, fileAnnotationRefs []*FileAnnotationRef) (err error) { if err = insertBlocks(tx, blocks, context); nil != err { return } - refs, fileAnnotationRefs := refsFromTree(tree) if err = insertBlockRefs(tx, refs); nil != err { return } @@ -476,5 +495,5 @@ func upsertTree(tx *sql.Tx, tree *parse.Tree, context map[string]interface{}) (e if err = insertAttributes(tx, attributes); nil != err { return } - return err + return }