From dfa561c62cf971471879ca5a7be9f8f7db9fc66b Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 13 Jul 2023 09:37:52 +0800 Subject: [PATCH 1/2] :recycle: Refactor av data structure --- kernel/av/table.go | 4 ++++ kernel/model/attribute_view.go | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/kernel/av/table.go b/kernel/av/table.go index 4622ec5e4..33350e986 100644 --- a/kernel/av/table.go +++ b/kernel/av/table.go @@ -267,6 +267,10 @@ func (table *Table) GetID() string { } func (table *Table) SortRows() { + sort.Slice(table.Rows, func(i, j int) bool { return table.Rows[i].ID < table.Rows[j].ID }) + + // sort by row ids + if 1 > len(table.Sorts) { return } diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 1e049f262..55b7109c1 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -17,6 +17,7 @@ package model import ( + "sort" "strings" "github.com/88250/gulu" @@ -126,6 +127,22 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a } ret.Rows = append(ret.Rows, &tableRow) } + + sortRowIDs := map[string]int{} + if 0 < len(view.Table.RowIDs) { + for i, rowID := range view.Table.RowIDs { + sortRowIDs[rowID] = i + } + } + + sort.Slice(ret.Rows, func(i, j int) bool { + iv := sortRowIDs[ret.Rows[i].ID] + jv := sortRowIDs[ret.Rows[j].ID] + if iv == jv { + return ret.Rows[i].ID < ret.Rows[j].ID + } + return iv < jv + }) return } @@ -314,6 +331,8 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre break } } + } else { + view.Table.RowIDs = append(view.Table.RowIDs, blockID) } } @@ -337,6 +356,11 @@ func removeAttributeViewBlock(blockID string, operation *Operation) (err error) return } + view, err := attrView.GetView() + if nil != err { + return + } + for _, keyValues := range attrView.KeyValues { for i, values := range keyValues.Values { if values.BlockID == blockID { @@ -346,6 +370,8 @@ func removeAttributeViewBlock(blockID string, operation *Operation) (err error) } } + view.Table.RowIDs = gulu.Str.RemoveElem(view.Table.RowIDs, blockID) + err = av.SaveAttributeView(attrView) return } From dc702d0a54184ae4543b6db61c906ec261cd5136 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 13 Jul 2023 09:38:12 +0800 Subject: [PATCH 2/2] :recycle: Refactor av data structure --- kernel/av/table.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kernel/av/table.go b/kernel/av/table.go index 33350e986..4622ec5e4 100644 --- a/kernel/av/table.go +++ b/kernel/av/table.go @@ -267,10 +267,6 @@ func (table *Table) GetID() string { } func (table *Table) SortRows() { - sort.Slice(table.Rows, func(i, j int) bool { return table.Rows[i].ID < table.Rows[j].ID }) - - // sort by row ids - if 1 > len(table.Sorts) { return }