From 3a9fb0d9e35185b550fab637932b272b2c6bc770 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 14 Sep 2024 22:26:02 +0800 Subject: [PATCH] :art: Improve database block/text/asset/template/relation/rollup field sorting https://github.com/siyuan-note/siyuan/issues/12454 --- kernel/av/sort.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/kernel/av/sort.go b/kernel/av/sort.go index 5b18b372cf6..a2505cd5989 100644 --- a/kernel/av/sort.go +++ b/kernel/av/sort.go @@ -44,7 +44,10 @@ func (value *Value) Compare(other *Value, attrView *AttributeView) int { switch value.Type { case KeyTypeBlock: if nil != value.Block && nil != other.Block { - return strings.Compare(value.Block.Content, other.Block.Content) + if util.PinYinCompare(value.Block.Content, other.Block.Content) { + return -1 + } + return 1 } case KeyTypeText: if nil != value.Text && nil != other.Text { @@ -56,7 +59,10 @@ func (value *Value) Compare(other *Value, attrView *AttributeView) int { } else if "" == other.Text.Content { return -1 } - return strings.Compare(value.Text.Content, other.Text.Content) + if util.PinYinCompare(value.Text.Content, other.Text.Content) { + return -1 + } + return 1 } case KeyTypeNumber: if nil != value.Number && nil != other.Number { @@ -223,7 +229,10 @@ func (value *Value) Compare(other *Value, attrView *AttributeView) int { for _, v := range other.MAsset { v2 += v.Content } - return strings.Compare(v1, v2) + if util.PinYinCompare(v1, v2) { + return -1 + } + return 1 } case KeyTypeTemplate: if nil != value.Template && nil != other.Template { @@ -238,7 +247,10 @@ func (value *Value) Compare(other *Value, attrView *AttributeView) int { } return 0 } - return strings.Compare(value.Template.Content, other.Template.Content) + if util.PinYinCompare(value.Template.Content, other.Template.Content) { + return -1 + } + return 1 } case KeyTypeCheckbox: if nil != value.Checkbox && nil != other.Checkbox { @@ -278,7 +290,10 @@ func (value *Value) Compare(other *Value, attrView *AttributeView) int { oContentBuf.WriteByte(' ') } oContent := strings.TrimSpace(oContentBuf.String()) - return strings.Compare(vContent, oContent) + if util.PinYinCompare(vContent, oContent) { + return -1 + } + return 1 } case KeyTypeRollup: if nil != value.Rollup && nil != other.Rollup { @@ -308,7 +323,10 @@ func (value *Value) Compare(other *Value, attrView *AttributeView) int { oContentBuf.WriteByte(' ') } oContent := strings.TrimSpace(oContentBuf.String()) - return strings.Compare(vContent, oContent) + if util.PinYinCompare(vContent, oContent) { + return -1 + } + return 1 } } return 0