From 5f57be269baf83db2a0077b8b24c4f43c6c9a466 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 1 Jul 2025 13:28:20 +0800 Subject: [PATCH 1/3] :recycle: Improve av --- kernel/model/attribute_view.go | 19 +---------------- kernel/model/attribute_view_fix.go | 34 ++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index b61b6c436..74913d280 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -1229,26 +1229,9 @@ func renderAttributeView(attrView *av.AttributeView, viewID, query string, page, } // 做一些数据兼容和订正处理 - checkViewInstance(attrView) + checkViewInstance(attrView, view) upgradeAttributeViewSpec(attrView) - // 字段删除以后需要删除设置的过滤和排序 - tmpFilters := []*av.ViewFilter{} - for _, f := range view.Filters { - if k, _ := attrView.GetKey(f.Column); nil != k { - tmpFilters = append(tmpFilters, f) - } - } - view.Filters = tmpFilters - - tmpSorts := []*av.ViewSort{} - for _, s := range view.Sorts { - if k, _ := attrView.GetKey(s.Column); nil != k { - tmpSorts = append(tmpSorts, s) - } - } - view.Sorts = tmpSorts - viewable = sql.RenderView(view, attrView, query) if nil == viewable { err = av.ErrViewNotFound diff --git a/kernel/model/attribute_view_fix.go b/kernel/model/attribute_view_fix.go index 119826ed8..664168126 100644 --- a/kernel/model/attribute_view_fix.go +++ b/kernel/model/attribute_view_fix.go @@ -23,13 +23,34 @@ import ( "github.com/siyuan-note/siyuan/kernel/treenode" ) -func checkViewInstance(attrView *av.AttributeView) { - changed := false - for i, view := range attrView.Views { - if av.LayoutTypeGallery == view.LayoutType && nil == view.Gallery { +func checkViewInstance(attrView *av.AttributeView, view *av.View) { + // 字段删除以后需要删除设置的过滤和排序 + tmpFilters := []*av.ViewFilter{} + for _, f := range view.Filters { + if k, _ := attrView.GetKey(f.Column); nil != k { + tmpFilters = append(tmpFilters, f) + } + } + changed := len(tmpFilters) != len(view.Filters) + view.Filters = tmpFilters + + tmpSorts := []*av.ViewSort{} + for _, s := range view.Sorts { + if k, _ := attrView.GetKey(s.Column); nil != k { + tmpSorts = append(tmpSorts, s) + } + } + if !changed { + changed = len(tmpSorts) != len(view.Sorts) + } + view.Sorts = tmpSorts + + // 视图类型不匹配时需要订正 + for i, v := range attrView.Views { + if av.LayoutTypeGallery == v.LayoutType && nil == v.Gallery { // 切换为画廊视图时可能没有初始化画廊实例 https://github.com/siyuan-note/siyuan/issues/15122 - if nil != view.Table { - view.LayoutType = av.LayoutTypeTable + if nil != v.Table { + v.LayoutType = av.LayoutTypeTable changed = true } else { attrView.Views = append(attrView.Views[:i], attrView.Views[i+1:]...) @@ -37,6 +58,7 @@ func checkViewInstance(attrView *av.AttributeView) { } } } + if changed { av.SaveAttributeView(attrView) } From 46290706b56ab821583993e22b238f8bcabc4830 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 1 Jul 2025 13:28:50 +0800 Subject: [PATCH 2/3] :recycle: Improve av --- kernel/model/attribute_view.go | 2 +- kernel/model/attribute_view_fix.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 74913d280..220381ed2 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -1229,7 +1229,7 @@ func renderAttributeView(attrView *av.AttributeView, viewID, query string, page, } // 做一些数据兼容和订正处理 - checkViewInstance(attrView, view) + checkAttrView(attrView, view) upgradeAttributeViewSpec(attrView) viewable = sql.RenderView(view, attrView, query) diff --git a/kernel/model/attribute_view_fix.go b/kernel/model/attribute_view_fix.go index 664168126..45b7060e0 100644 --- a/kernel/model/attribute_view_fix.go +++ b/kernel/model/attribute_view_fix.go @@ -23,7 +23,7 @@ import ( "github.com/siyuan-note/siyuan/kernel/treenode" ) -func checkViewInstance(attrView *av.AttributeView, view *av.View) { +func checkAttrView(attrView *av.AttributeView, view *av.View) { // 字段删除以后需要删除设置的过滤和排序 tmpFilters := []*av.ViewFilter{} for _, f := range view.Filters { From a5b3e959261c0a8c0891ec73a28479dbc4e86666 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 1 Jul 2025 13:55:36 +0800 Subject: [PATCH 3/3] :sparkles: Database grouping by field https://github.com/siyuan-note/siyuan/issues/10964 --- kernel/av/av.go | 1 + kernel/av/group.go | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index 3f6c3dad1..36de95fda 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -196,6 +196,7 @@ type View struct { GroupName string `json:"groupName,omitempty"` // 分组名称 GroupFolded bool `json:"groupFolded,omitempty"` // 分组是否折叠 GroupHidden bool `json:"groupHidden,omitempty"` // 分组是否隐藏 + GroupDefault bool `json:"groupDefault,omitempty"` // 是否为默认分组 } // LayoutType 描述了视图布局类型。 diff --git a/kernel/av/group.go b/kernel/av/group.go index 4e78e5ff2..3cd846c13 100644 --- a/kernel/av/group.go +++ b/kernel/av/group.go @@ -27,31 +27,34 @@ type ViewGroup struct { Field string `json:"field"` // 分组字段 ID Method GroupMethod `json:"method"` // 分组方式 Range *GroupRange `json:"range,omitempty"` // 分组范围 - Order GroupOrder `json:"order"` // 分组顺序 + Order GroupOrder `json:"order"` // 分组排序规则 } +// GroupMethod 描述了分组方式。 type GroupMethod int const ( GroupMethodValue GroupMethod = iota // 按值分组 GroupMethodRangeNum // 按数字范围分组 - GroupMethodDateRelative // 按相对日期日期分组 + GroupMethodDateRelative // 按相对日期分组 GroupMethodDateDay // 按天日期分组 GroupMethodDateWeek // 按周日期分组 GroupMethodDateMonth // 按月日期分组 GroupMethodDateYear // 按年日期分组 ) -// GroupRange 定义了分组范围的结构。 +// GroupRange 描述了分组范围的结构。 type GroupRange struct { NumStart float64 `json:"numStart"` // 数字范围起始值 NumEnd float64 `json:"numEnd"` // 数字范围结束值 NumStep float64 `json:"numStep"` // 数字范围步长 } +// GroupOrder 描述了分组排序规则。 type GroupOrder string const ( - GroupOrderAsc GroupOrder = "ASC" - GroupOrderDesc GroupOrder = "DESC" + GroupOrderAsc GroupOrder = "ASC" // 升序 + GroupOrderDesc GroupOrder = "DESC" // 降序 + GroupOrderMan GroupOrder = "Man" // 手动排序 )