From 35baf86b6ea33a1ffeb31e1c5bf0b806624fbd84 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 31 Jan 2023 19:40:55 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E5=B5=8C=E5=85=A5=E5=9D=97=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=BB=93=E6=9E=9C=E4=B8=AD=E6=98=BE=E7=A4=BA=E5=9D=97?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E8=AE=A1=E6=95=B0=20https://github.com/siyua?= =?UTF-8?q?n-note/siyuan/issues/7191?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/block.go | 13 +++++++++++++ kernel/sql/block_ref_query.go | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/kernel/model/block.go b/kernel/model/block.go index c0eaea792..d0775aeb7 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -19,6 +19,7 @@ package model import ( "errors" "fmt" + "strconv" "time" "github.com/88250/lute" @@ -466,6 +467,18 @@ func getEmbeddedBlock(embedBlockID string, trees map[string]*parse.Tree, sqlBloc return } + // 嵌入块查询结果中显示块引用计数 https://github.com/siyuan-note/siyuan/issues/7191 + var defIDs []string + for _, n := range nodes { + defIDs = append(defIDs, n.ID) + } + refCount := sql.QueryRefCount(defIDs) + for _, n := range nodes { + if cnt := refCount[n.ID]; 0 < cnt { + n.SetIALAttr("refcount", strconv.Itoa(cnt)) + } + } + luteEngine := NewLute() luteEngine.RenderOptions.ProtyleContenteditable = false // 不可编辑 dom := renderBlockDOMByNodes(nodes, luteEngine) diff --git a/kernel/sql/block_ref_query.go b/kernel/sql/block_ref_query.go index f097b20ab..c3b81fec6 100644 --- a/kernel/sql/block_ref_query.go +++ b/kernel/sql/block_ref_query.go @@ -79,6 +79,28 @@ func queryRefTexts() (ret []string) { return } +func QueryRefCount(defIDs []string) (ret map[string]int) { + ret = map[string]int{} + ids := strings.Join(defIDs, "','") + ids = "('" + ids + "')" + rows, err := query("SELECT def_block_id, COUNT(*) AS ref_cnt FROM refs WHERE def_block_id IN " + ids + " GROUP BY def_block_id") + if nil != err { + logging.LogErrorf("sql query failed: %s", err) + return + } + defer rows.Close() + for rows.Next() { + var id string + var cnt int + if err = rows.Scan(&id, &cnt); nil != err { + logging.LogErrorf("query scan field failed: %s", err) + return + } + ret[id] = cnt + } + return +} + func QueryRootChildrenRefCount(defRootID string) (ret map[string]int) { ret = map[string]int{} rows, err := query("SELECT def_block_id, COUNT(*) AS ref_cnt FROM refs WHERE def_block_root_id = ? GROUP BY def_block_id", defRootID)