diff --git a/kernel/sql/block.go b/kernel/sql/block.go index f5c979c42..7da59c2bb 100644 --- a/kernel/sql/block.go +++ b/kernel/sql/block.go @@ -18,6 +18,8 @@ package sql import ( "database/sql" + + "github.com/siyuan-note/siyuan/kernel/cache" ) type Block struct { @@ -44,20 +46,21 @@ type Block struct { Updated string } -func updateRootContent(tx *sql.Tx, content, id string) { - stmt := "UPDATE blocks SET content = ?, fcontent = ? WHERE id = ?" - if err := execStmtTx(tx, stmt, content, content, id); nil != err { +func updateRootContent(tx *sql.Tx, content, updated, id string) { + stmt := "UPDATE blocks SET content = ?, fcontent = ?, updated = ? WHERE id = ?" + if err := execStmtTx(tx, stmt, content, content, updated, id); nil != err { return } - stmt = "UPDATE blocks_fts SET content = ?, fcontent = ? WHERE id = ?" - if err := execStmtTx(tx, stmt, content, content, id); nil != err { + stmt = "UPDATE blocks_fts SET content = ?, fcontent = ?, updated = ? WHERE id = ?" + if err := execStmtTx(tx, stmt, content, content, updated, id); nil != err { return } - stmt = "UPDATE blocks_fts_case_insensitive SET content = ?, fcontent = ? WHERE id = ?" - if err := execStmtTx(tx, stmt, content, content, id); nil != err { + stmt = "UPDATE blocks_fts_case_insensitive SET content = ?, fcontent = ?, updated = ? WHERE id = ?" + if err := execStmtTx(tx, stmt, content, content, updated, id); nil != err { return } removeBlockCache(id) + cache.RemoveBlockIAL(id) } func InsertBlock(tx *sql.Tx, block *Block) (err error) { diff --git a/kernel/sql/queue.go b/kernel/sql/queue.go index 7f219b71b..cacc2024b 100644 --- a/kernel/sql/queue.go +++ b/kernel/sql/queue.go @@ -46,10 +46,11 @@ type treeQueueOperation struct { inQueueTime time.Time action string // upsert/delete/delete_id/rename - upsertTree *parse.Tree // upsert - removeTreeBox, removeTreePath string // delete - removeTreeIDBox, removeTreeID string // delete_id - renameTreeBox, renameTreeID, renameTreeOldHPath, renameTreeNewHPath string // rename + upsertTree *parse.Tree // upsert + removeTreeBox, removeTreePath string // delete + removeTreeIDBox, removeTreeID string // delete_id + renameTree *parse.Tree // rename + renameTreeOldHPath string // rename } func AutoFlushTreeQueue() { @@ -113,9 +114,9 @@ func flushTreeQueue() { DeleteByRootID(tx, op.removeTreeID) boxes.Add(op.removeTreeIDBox) case "rename": - batchUpdateHPath(tx, op.renameTreeBox, op.renameTreeID, op.renameTreeOldHPath, op.renameTreeNewHPath) - updateRootContent(tx, path.Base(op.renameTreeNewHPath), op.renameTreeID) - boxes.Add(op.renameTreeBox) + batchUpdateHPath(tx, op.renameTree.Box, op.renameTree.ID, op.renameTreeOldHPath, op.renameTree.HPath) + updateRootContent(tx, path.Base(op.renameTree.HPath), op.renameTree.Root.IALAttr("updated"), op.renameTree.ID) + boxes.Add(op.renameTree.Box) default: logging.LogErrorf("unknown operation [%s]", op.action) } @@ -168,9 +169,13 @@ func RenameTreeQueue(tree *parse.Tree, oldHPath string) { upsertTreeQueueLock.Lock() defer upsertTreeQueueLock.Unlock() - newOp := &treeQueueOperation{renameTreeBox: tree.Box, renameTreeID: tree.ID, renameTreeOldHPath: oldHPath, renameTreeNewHPath: tree.HPath, inQueueTime: time.Now(), action: "rename"} + newOp := &treeQueueOperation{ + renameTree: tree, + renameTreeOldHPath: oldHPath, + inQueueTime: time.Now(), + action: "rename"} for i, op := range operationQueue { - if "rename" == op.action && op.renameTreeID == tree.ID { // 相同树则覆盖 + if "rename" == op.action && op.renameTree.ID == tree.ID { // 相同树则覆盖 operationQueue[i] = newOp return }