Sfoglia il codice sorgente

:art: 改进内核任务调度机制提升稳定性 https://github.com/siyuan-note/siyuan/issues/7113

Liang Ding 2 anni fa
parent
commit
9d009fe5f9
1 ha cambiato i file con 23 aggiunte e 4 eliminazioni
  1. 23 4
      kernel/sql/upsert.go

+ 23 - 4
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
 }