From 5c8bab48edd3bd75c1f01dbd90374fd8d92fba3e Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 1 Jan 2024 16:19:49 +0800 Subject: [PATCH] :art: Add Rollup column to database table view https://github.com/siyuan-note/siyuan/issues/9958 --- kernel/av/value.go | 64 ++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/kernel/av/value.go b/kernel/av/value.go index 29c3bb966..28e0e3ca1 100644 --- a/kernel/av/value.go +++ b/kernel/av/value.go @@ -531,9 +531,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) { case CalcOperatorSum: sum := 0.0 for _, v := range r.Contents { - if "" != v.String() { - n, _ := strconv.ParseFloat(v.String(), 64) - sum += n + if nil != v.Number { + sum += v.Number.Content } } r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(sum)}} @@ -541,9 +540,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) { sum := 0.0 count := 0 for _, v := range r.Contents { - if "" != v.String() { - n, _ := strconv.ParseFloat(v.String(), 64) - sum += n + if nil != v.Number { + sum += v.Number.Content count++ } } @@ -553,9 +551,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) { case CalcOperatorMedian: var numbers []float64 for _, v := range r.Contents { - if "" != v.String() { - n, _ := strconv.ParseFloat(v.String(), 64) - numbers = append(numbers, n) + if nil != v.Number { + numbers = append(numbers, v.Number.Content) } } sort.Float64s(numbers) @@ -565,10 +562,9 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) { case CalcOperatorMin: min := math.MaxFloat64 for _, v := range r.Contents { - if "" != v.String() { - n, _ := strconv.ParseFloat(v.String(), 64) - if n < min { - min = n + if nil != v.Number { + if v.Number.Content < min { + min = v.Number.Content } } } @@ -576,10 +572,9 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) { case CalcOperatorMax: max := -math.MaxFloat64 for _, v := range r.Contents { - if "" != v.String() { - n, _ := strconv.ParseFloat(v.String(), 64) - if n > max { - max = n + if nil != v.Number { + if v.Number.Content > max { + max = v.Number.Content } } } @@ -588,13 +583,12 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) { min := math.MaxFloat64 max := -math.MaxFloat64 for _, v := range r.Contents { - if "" != v.String() { - n, _ := strconv.ParseFloat(v.String(), 64) - if n < min { - min = n + if nil != v.Number { + if v.Number.Content < min { + min = v.Number.Content } - if n > max { - max = n + if v.Number.Content > max { + max = v.Number.Content } } } @@ -602,32 +596,40 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) { case CalcOperatorChecked: countChecked := 0 for _, v := range r.Contents { - if "√" == v.String() { - countChecked++ + if nil != v.Checkbox { + if v.Checkbox.Checked { + countChecked++ + } } } r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countChecked))}} case CalcOperatorUnchecked: countUnchecked := 0 for _, v := range r.Contents { - if "√" != v.String() { - countUnchecked++ + if nil != v.Checkbox { + if !v.Checkbox.Checked { + countUnchecked++ + } } } r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countUnchecked))}} case CalcOperatorPercentChecked: countChecked := 0 for _, v := range r.Contents { - if "√" == v.String() { - countChecked++ + if nil != v.Checkbox { + if v.Checkbox.Checked { + countChecked++ + } } } r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countChecked * 100 / len(r.Contents)))}} case CalcOperatorPercentUnchecked: countUnchecked := 0 for _, v := range r.Contents { - if "√" != v.String() { - countUnchecked++ + if nil != v.Checkbox { + if !v.Checkbox.Checked { + countUnchecked++ + } } } r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countUnchecked * 100 / len(r.Contents)))}}