From a00af1bd6ca63c98615c2c7f02c5ea4861c0477a Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Thu, 19 Jan 2023 17:52:41 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E8=87=AA=E5=8A=A8=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E6=97=B6=E8=80=83=E8=99=91=E5=A4=A7=E5=B0=8F?= =?UTF-8?q?=E5=86=99=E5=BF=BD=E7=95=A5=E8=A1=A8=20Fix=20https://github.com?= =?UTF-8?q?/siyuan-note/siyuan/issues/7125?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/transaction.go | 15 +++++++++++---- kernel/sql/block.go | 14 ++++++++++++++ kernel/sql/queue.go | 4 ++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 3345b1f2a..56df4feed 100644 --- a/kernel/model/transaction.go +++ b/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) { diff --git a/kernel/sql/block.go b/kernel/sql/block.go index d88b888e2..eb0d11db3 100644 --- a/kernel/sql/block.go +++ b/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() +} diff --git a/kernel/sql/queue.go b/kernel/sql/queue.go index 2b076f97c..2dd7349c8 100644 --- a/kernel/sql/queue.go +++ b/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)