浏览代码

:art: 自动校验索引时考虑大小写忽略表 Fix https://github.com/siyuan-note/siyuan/issues/7125

Liang Ding 2 年之前
父节点
当前提交
a00af1bd6c
共有 3 个文件被更改,包括 29 次插入4 次删除
  1. 11 4
      kernel/model/transaction.go
  2. 14 0
      kernel/sql/block.go
  3. 4 0
      kernel/sql/queue.go

+ 11 - 4
kernel/model/transaction.go

@@ -1309,16 +1309,16 @@ func autoFixIndex() {
 	rootUpdatedMap := treenode.GetRootUpdated()
 	dbRootUpdatedMap, err := sql.GetRootUpdated("blocks")
 	if nil == err {
-		reindexTreeByUpdated(rootUpdatedMap, dbRootUpdatedMap)
+		reindexTreeByUpdated(rootUpdatedMap, dbRootUpdatedMap, "blocks")
 	}
 	dbFtsRootUpdatedMap, err := sql.GetRootUpdated("blocks_fts")
 	if nil == err {
-		reindexTreeByUpdated(rootUpdatedMap, dbFtsRootUpdatedMap)
+		reindexTreeByUpdated(rootUpdatedMap, dbFtsRootUpdatedMap, "blocks_fts")
 	}
 	if !Conf.Search.CaseSensitive {
 		dbFtsRootUpdatedMap, err := sql.GetRootUpdated("blocks_fts_case_insensitive")
 		if nil == err {
-			reindexTreeByUpdated(rootUpdatedMap, dbFtsRootUpdatedMap)
+			reindexTreeByUpdated(rootUpdatedMap, dbFtsRootUpdatedMap, "blocks_fts_case_insensitive")
 		}
 	}
 
@@ -1345,7 +1345,7 @@ func autoFixIndex() {
 	util.PushStatusBar(Conf.Language(185))
 }
 
-func reindexTreeByUpdated(rootUpdatedMap, dbRootUpdatedMap map[string]string) {
+func reindexTreeByUpdated(rootUpdatedMap, dbRootUpdatedMap map[string]string, blocksTable string) {
 	i := -1
 	size := len(rootUpdatedMap)
 	for rootID, updated := range rootUpdatedMap {
@@ -1372,6 +1372,13 @@ func reindexTreeByUpdated(rootUpdatedMap, dbRootUpdatedMap map[string]string) {
 			continue
 		}
 	}
+
+	for rootID, _ := range dbRootUpdatedMap {
+		if _, ok := rootUpdatedMap[rootID]; !ok {
+			logging.LogWarnf("tree [%s] is not in block tree, remove it from [%s]", rootID, blocksTable)
+			sql.DeleteTree(blocksTable, rootID)
+		}
+	}
 }
 
 func reindexTreeByPath(box, p string, i, size int) {

+ 14 - 0
kernel/sql/block.go

@@ -95,3 +95,17 @@ func UpdateBlockContent(block *Block) {
 	tx.Commit()
 	putBlockCache(block)
 }
+
+func DeleteTree(table, rootID string) {
+	tx, err := BeginTx()
+	if nil != err {
+		return
+	}
+
+	stmt := "DELETE FROM `" + table + "` WHERE root_id = ?"
+	if err = execStmtTx(tx, stmt, rootID); nil != err {
+		tx.Rollback()
+		return
+	}
+	tx.Commit()
+}

+ 4 - 0
kernel/sql/queue.go

@@ -25,6 +25,7 @@ import (
 	"sync"
 	"time"
 
+	"github.com/88250/lute/ast"
 	"github.com/88250/lute/parse"
 	"github.com/emirpasic/gods/sets/hashset"
 	"github.com/siyuan-note/eventbus"
@@ -142,6 +143,9 @@ func FlushQueue() {
 		return
 	}
 	for _, box := range boxes.Values() {
+		if !ast.IsNodeIDPattern(box.(string)) {
+			continue
+		}
 		updateBoxHash(tx, box.(string))
 	}
 	CommitTx(tx)