Преглед на файлове

:bug: 编辑器中输入 `#` 后标签搜索提示不全 Fix https://github.com/siyuan-note/siyuan/issues/7391

Liang Ding преди 2 години
родител
ревизия
e08d621da7
променени са 3 файла, в които са добавени 21 реда и са изтрити 7 реда
  1. 1 1
      kernel/model/graph.go
  2. 3 3
      kernel/model/tag.go
  3. 17 3
      kernel/sql/span.go

+ 1 - 1
kernel/model/graph.go

@@ -205,7 +205,7 @@ func BuildGraph(query string) (boxID string, nodes []*GraphNode, links []*GraphL
 }
 
 func linkTagBlocks(blocks *[]*Block, nodes *[]*GraphNode, links *[]*GraphLink, p string, style map[string]string) {
-	tagSpans := sql.QueryTagSpans(p, 1024)
+	tagSpans := sql.QueryTagSpans(p)
 	if 1 > len(tagSpans) {
 		return
 	}

+ 3 - 3
kernel/model/tag.go

@@ -41,7 +41,7 @@ func RemoveTag(label string) (err error) {
 	util.PushEndlessProgress(Conf.Language(116))
 	util.RandomSleep(1000, 2000)
 
-	tags := sql.QueryTagSpansByKeyword(label, 102400)
+	tags := sql.QueryTagSpansByLabel(label)
 	treeBlocks := map[string][]string{}
 	for _, tag := range tags {
 		if blocks, ok := treeBlocks[tag.RootID]; !ok {
@@ -126,7 +126,7 @@ func RenameTag(oldLabel, newLabel string) (err error) {
 	util.PushEndlessProgress(Conf.Language(110))
 	util.RandomSleep(500, 1000)
 
-	tags := sql.QueryTagSpansByKeyword(oldLabel, 102400)
+	tags := sql.QueryTagSpansByLabel(oldLabel)
 	treeBlocks := map[string][]string{}
 	for _, tag := range tags {
 		if blocks, ok := treeBlocks[tag.RootID]; !ok {
@@ -310,7 +310,7 @@ func labelBlocksByKeyword(keyword string) (ret map[string]TagBlocks) {
 func labelTags() (ret map[string]Tags) {
 	ret = map[string]Tags{}
 
-	tagSpans := sql.QueryTagSpans("", 10240)
+	tagSpans := sql.QueryTagSpans("")
 	for _, tagSpan := range tagSpans {
 		label := tagSpan.Content
 		if _, ok := ret[label]; ok {

+ 17 - 3
kernel/sql/span.go

@@ -80,8 +80,23 @@ func SelectSpansRawStmt(stmt string, limit int) (ret []*Span) {
 	return
 }
 
+func QueryTagSpansByLabel(label string) (ret []*Span) {
+	stmt := "SELECT * FROM spans WHERE type LIKE '%tag%' AND content LIKE '%" + label + "%' GROUP BY block_id"
+	rows, err := query(stmt)
+	if nil != err {
+		logging.LogErrorf("sql query failed: %s", err)
+		return
+	}
+	defer rows.Close()
+	for rows.Next() {
+		span := scanSpanRows(rows)
+		ret = append(ret, span)
+	}
+	return
+}
+
 func QueryTagSpansByKeyword(keyword string, limit int) (ret []*Span) {
-	stmt := "SELECT * FROM spans WHERE type LIKE '%tag%' AND content LIKE '%" + keyword + "%'"
+	stmt := "SELECT * FROM spans WHERE type LIKE '%tag%' AND content LIKE '%" + keyword + "%' GROUP BY markdown"
 	stmt += " LIMIT " + strconv.Itoa(limit)
 	rows, err := query(stmt)
 	if nil != err {
@@ -96,12 +111,11 @@ func QueryTagSpansByKeyword(keyword string, limit int) (ret []*Span) {
 	return
 }
 
-func QueryTagSpans(p string, limit int) (ret []*Span) {
+func QueryTagSpans(p string) (ret []*Span) {
 	stmt := "SELECT * FROM spans WHERE type LIKE '%tag%'"
 	if "" != p {
 		stmt += " AND path = '" + p + "'"
 	}
-	stmt += " LIMIT " + strconv.Itoa(limit)
 	rows, err := query(stmt)
 	if nil != err {
 		logging.LogErrorf("sql query failed: %s", err)