From 0fd9947358cafa919e5bf60a58131b31f7f6a16c Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 19 Mar 2024 10:58:16 +0800 Subject: [PATCH 1/4] :art: Improve focus export PDF conversion of block refs to footnotes https://github.com/siyuan-note/siyuan/issues/10647 --- kernel/model/export.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/kernel/model/export.go b/kernel/model/export.go index b16fef79e..d832411da 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -885,8 +885,8 @@ func prepareExportTree(bt *treenode.BlockTree) (ret *parse.Tree) { oldRoot := ret.Root ret = parse.Parse("", []byte(""), luteEngine.ParseOptions) first := ret.Root.FirstChild - for _, node := range nodes { - first.InsertBefore(node) + for _, n := range nodes { + first.InsertBefore(n) } ret.Root.KramdownIAL = oldRoot.KramdownIAL } @@ -2107,7 +2107,27 @@ func exportTree(tree *parse.Tree, wysiwyg, expandKaTexMacros, keepFold bool, } if 4 == blockRefMode { // 块引转脚注 + unlinks = nil if footnotesDefBlock := resolveFootnotesDefs(&refFootnotes, ret.Root.ID, blockRefTextLeft, blockRefTextRight); nil != footnotesDefBlock { + // 如果是聚焦导出,可能存在没有使用的脚注定义块,在这里进行清理 + // Improve focus export PDF conversion of block refs to footnotes https://github.com/siyuan-note/siyuan/issues/10647 + footnotesRefs := ret.Root.ChildrenByType(ast.NodeFootnotesRef) + for footnotesDef := footnotesDefBlock.FirstChild; nil != footnotesDef; footnotesDef = footnotesDef.Next { + exist := false + for _, ref := range footnotesRefs { + if ref.FootnotesRefId == footnotesDef.FootnotesRefId { + exist = true + break + } + } + if !exist { + unlinks = append(unlinks, footnotesDef) + } + } + for _, n := range unlinks { + n.Unlink() + } + ret.Root.AppendChild(footnotesDefBlock) } } From cf6ac5a807d3f21e6a9479581f3e93b01206b2f4 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 19 Mar 2024 10:59:08 +0800 Subject: [PATCH 2/4] :art: Improve focus export conversion of block refs to footnotes https://github.com/siyuan-note/siyuan/issues/10647 --- kernel/model/export.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/model/export.go b/kernel/model/export.go index d832411da..b3cfb4dbc 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -2110,7 +2110,7 @@ func exportTree(tree *parse.Tree, wysiwyg, expandKaTexMacros, keepFold bool, unlinks = nil if footnotesDefBlock := resolveFootnotesDefs(&refFootnotes, ret.Root.ID, blockRefTextLeft, blockRefTextRight); nil != footnotesDefBlock { // 如果是聚焦导出,可能存在没有使用的脚注定义块,在这里进行清理 - // Improve focus export PDF conversion of block refs to footnotes https://github.com/siyuan-note/siyuan/issues/10647 + // Improve focus export conversion of block refs to footnotes https://github.com/siyuan-note/siyuan/issues/10647 footnotesRefs := ret.Root.ChildrenByType(ast.NodeFootnotesRef) for footnotesDef := footnotesDefBlock.FirstChild; nil != footnotesDef; footnotesDef = footnotesDef.Next { exist := false From 9bc6415c6a64751a40ffeab44424d0d9f646ef3e Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 19 Mar 2024 16:14:10 +0800 Subject: [PATCH 3/4] :zap: Optimize document moving and renaming performance https://github.com/siyuan-note/siyuan/issues/10560 --- kernel/sql/database.go | 14 +++++++------- kernel/sql/queue.go | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kernel/sql/database.go b/kernel/sql/database.go index 0ffd7cf9b..d622ee243 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -1211,18 +1211,18 @@ func batchDeleteByPathPrefix(tx *sql.Tx, boxID, pathPrefix string) (err error) { return } -func batchUpdateHPath(tx *sql.Tx, boxID, rootID, newHPath string, context map[string]interface{}) (err error) { - stmt := "UPDATE blocks SET hpath = ? WHERE box = ? AND root_id = ?" - if err = execStmtTx(tx, stmt, newHPath, boxID, rootID); nil != err { +func batchUpdateHPath(tx *sql.Tx, rootID, newHPath string, context map[string]interface{}) (err error) { + stmt := "UPDATE blocks SET hpath = ? WHERE root_id = ?" + if err = execStmtTx(tx, stmt, newHPath, rootID); nil != err { return } - stmt = "UPDATE blocks_fts SET hpath = ? WHERE box = ? AND root_id = ?" - if err = execStmtTx(tx, stmt, newHPath, boxID, rootID); nil != err { + stmt = "UPDATE blocks_fts SET hpath = ? WHERE root_id = ?" + if err = execStmtTx(tx, stmt, newHPath, rootID); nil != err { return } if !caseSensitive { - stmt = "UPDATE blocks_fts_case_insensitive SET hpath = ? WHERE box = ? AND root_id = ?" - if err = execStmtTx(tx, stmt, newHPath, boxID, rootID); nil != err { + stmt = "UPDATE blocks_fts_case_insensitive SET hpath = ? WHERE root_id = ?" + if err = execStmtTx(tx, stmt, newHPath, rootID); nil != err { return } } diff --git a/kernel/sql/queue.go b/kernel/sql/queue.go index 3a538a897..ad22870df 100644 --- a/kernel/sql/queue.go +++ b/kernel/sql/queue.go @@ -174,13 +174,13 @@ func execOp(op *dbQueueOperation, tx *sql.Tx, context map[string]interface{}) (e case "delete_ids": err = batchDeleteByRootIDs(tx, op.removeTreeIDs, context) case "rename": - err = batchUpdateHPath(tx, op.renameTree.Box, op.renameTree.ID, op.renameTree.HPath, context) + err = batchUpdateHPath(tx, op.renameTree.ID, op.renameTree.HPath, context) if nil != err { break } err = updateRootContent(tx, path.Base(op.renameTree.HPath), op.renameTree.Root.IALAttr("updated"), op.renameTree.ID) case "rename_sub_tree": - err = batchUpdateHPath(tx, op.renameTree.Box, op.renameTree.ID, op.renameTree.HPath, context) + err = batchUpdateHPath(tx, op.renameTree.ID, op.renameTree.HPath, context) case "delete_box": err = deleteByBoxTx(tx, op.box) case "delete_box_refs": From de02e66960ab308c9bed9a2bb8ff3e15d4a82b7c Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 19 Mar 2024 16:57:38 +0800 Subject: [PATCH 4/4] :zap: Optimize document moving and renaming performance https://github.com/siyuan-note/siyuan/issues/10560 --- kernel/sql/database.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/sql/database.go b/kernel/sql/database.go index d622ee243..4cb5523ce 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -130,6 +130,11 @@ func initDBTables() { logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "create table [blocks] failed: %s", err) } + _, err = db.Exec("CREATE INDEX idx_blocks_root_id ON blocks(root_id)") + if nil != err { + logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "create index [idx_blocks_root_id] failed: %s", err) + } + _, err = db.Exec("DROP TABLE IF EXISTS blocks_fts") if nil != err { logging.LogFatalf(logging.ExitCodeReadOnlyDatabase, "drop table [blocks_fts] failed: %s", err)