From c3d1c04af4066c231363d72fa18bd65d600b8dca Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 13 Oct 2023 22:50:11 +0800 Subject: [PATCH] :art: Supports searching database view content https://github.com/siyuan-note/siyuan/issues/9419 --- kernel/model/transaction.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 67eef3fc397..068038fa6a6 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -21,6 +21,7 @@ import ( "errors" "fmt" "path/filepath" + "strconv" "strings" "sync" "time" @@ -190,6 +191,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doUnfoldHeading(op) case "setAttrs": ret = tx.doSetAttrs(op) + case "doUpdateUpdated": + ret = tx.doUpdateUpdated(op) case "addFlashcards": ret = tx.doAddFlashcards(op) case "removeFlashcards": @@ -987,6 +990,35 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { return } +func (tx *Transaction) doUpdateUpdated(operation *Operation) (ret *TxErr) { + id := operation.ID + tree, err := tx.loadTree(id) + if nil != err { + if errors.Is(err, ErrBlockNotFound) { + logging.LogWarnf("not found block [%s]", id) + return + } + + logging.LogErrorf("load tree [%s] failed: %s", id, err) + return &TxErr{code: TxErrCodeBlockNotFound, id: id} + } + + node := treenode.GetNodeInTree(tree, id) + if nil == node { + logging.LogErrorf("get node [%s] in tree [%s] failed", id, tree.Root.ID) + return &TxErr{msg: ErrBlockNotFound.Error(), id: id} + } + + updated := int64(operation.Data.(float64)) + node.SetIALAttr("updated", strconv.FormatInt(updated, 10)) + createdUpdated(node) + tx.nodes[node.ID] = node + if err = tx.writeTree(tree); nil != err { + return &TxErr{code: TxErrCodeWriteTree, msg: err.Error(), id: id} + } + return +} + func (tx *Transaction) doCreate(operation *Operation) (ret *TxErr) { tree := operation.Data.(*parse.Tree) tx.writeTree(tree)