From bb6a521954f8f527472cb105bbb770532b7a04d7 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 7 Jul 2025 15:39:51 +0800 Subject: [PATCH] :art: Database grouping by field https://github.com/siyuan-note/siyuan/issues/10964 --- kernel/model/attribute_view.go | 36 ++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 3548d324a..9ed567f73 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -161,6 +161,11 @@ func SetAttributeViewGroup(avID, blockID string, group *av.ViewGroup) (err error switch group.Method { case av.GroupMethodValue: case av.GroupMethodRangeNum: + if nil == group.Range { + logging.LogWarnf("range is nil in av [%s]", avID) + return + } + rangeStart, rangeEnd = group.Range.NumStart, group.Range.NumStart+group.Range.NumStep sort.SliceStable(items, func(i, j int) bool { if av.GroupOrderAsc == group.Order { @@ -181,20 +186,27 @@ func SetAttributeViewGroup(avID, blockID string, group *av.ViewGroup) (err error case av.GroupMethodValue: groupName = value.String(false) case av.GroupMethodRangeNum: - if nil != group.Range && value.Type == av.KeyTypeNumber { - if group.Range.NumStart > value.Number.Content || group.Range.NumEnd < value.Number.Content { - groupName = notInRange - break - } + if value.Type != av.KeyTypeNumber { + logging.LogWarnf("item [%s] value [%s] type is not number in av [%s]", item.GetID(), value.String(false), avID) + return + } + if nil == value.Number { + logging.LogWarnf("item [%s] value [%s] number is nil in av [%s]", item.GetID(), value.String(false), avID) + return + } - for rangeEnd <= group.Range.NumEnd && rangeEnd < value.Number.Content { - rangeStart += group.Range.NumStep - rangeEnd += group.Range.NumStep - } + if group.Range.NumStart > value.Number.Content || group.Range.NumEnd < value.Number.Content { + groupName = notInRange + break + } - if rangeStart <= value.Number.Content && rangeEnd >= value.Number.Content { - groupName = fmt.Sprintf("%s - %s", strconv.FormatFloat(rangeStart, 'f', -1, 64), strconv.FormatFloat(rangeEnd, 'f', -1, 64)) - } + for rangeEnd <= group.Range.NumEnd && rangeEnd < value.Number.Content { + rangeStart += group.Range.NumStep + rangeEnd += group.Range.NumStep + } + + if rangeStart <= value.Number.Content && rangeEnd >= value.Number.Content { + groupName = fmt.Sprintf("%s - %s", strconv.FormatFloat(rangeStart, 'f', -1, 64), strconv.FormatFloat(rangeEnd, 'f', -1, 64)) } } }