mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-09-22 00:20:47 +02:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
71ac6d648b
2 changed files with 59 additions and 10 deletions
|
@ -1710,9 +1710,35 @@ func calcFieldRollup(collection Collection, field Field, fieldIndex int) {
|
||||||
values := item.GetValues()
|
values := item.GetValues()
|
||||||
if nil != values[fieldIndex] && nil != values[fieldIndex].Rollup {
|
if nil != values[fieldIndex] && nil != values[fieldIndex].Rollup {
|
||||||
for _, content := range values[fieldIndex].Rollup.Contents {
|
for _, content := range values[fieldIndex].Rollup.Contents {
|
||||||
if !uniqueValues[content.String(true)] {
|
switch content.Type {
|
||||||
uniqueValues[content.String(true)] = true
|
case KeyTypeRelation:
|
||||||
countUniqueValues++
|
for _, relationVal := range content.Relation.Contents {
|
||||||
|
key := relationVal.String(true)
|
||||||
|
if !uniqueValues[key] {
|
||||||
|
uniqueValues[key] = true
|
||||||
|
countUniqueValues++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case KeyTypeMSelect:
|
||||||
|
for _, mSelectVal := range content.MSelect {
|
||||||
|
if !uniqueValues[mSelectVal.Content] {
|
||||||
|
uniqueValues[mSelectVal.Content] = true
|
||||||
|
countUniqueValues++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case KeyTypeMAsset:
|
||||||
|
for _, mAssetVal := range content.MAsset {
|
||||||
|
if !uniqueValues[mAssetVal.Content] {
|
||||||
|
uniqueValues[mAssetVal.Content] = true
|
||||||
|
countUniqueValues++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
key := content.String(true)
|
||||||
|
if !uniqueValues[key] {
|
||||||
|
uniqueValues[key] = true
|
||||||
|
countUniqueValues++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -835,16 +835,39 @@ func (r *ValueRollup) calcContents(calc *RollupCalc, destKey *Key) {
|
||||||
switch calc.Operator {
|
switch calc.Operator {
|
||||||
case CalcOperatorNone:
|
case CalcOperatorNone:
|
||||||
case CalcOperatorUniqueValues:
|
case CalcOperatorUniqueValues:
|
||||||
var newContents []*Value
|
|
||||||
uniqueValues := map[string]bool{}
|
uniqueValues := map[string]bool{}
|
||||||
for _, v := range r.Contents {
|
for _, content := range r.Contents {
|
||||||
key := v.String(true)
|
switch content.Type {
|
||||||
if !uniqueValues[key] {
|
case KeyTypeRelation:
|
||||||
uniqueValues[key] = true
|
var newRelationContents []*Value
|
||||||
newContents = append(newContents, v)
|
for _, relationVal := range content.Relation.Contents {
|
||||||
|
key := relationVal.String(true)
|
||||||
|
if !uniqueValues[key] {
|
||||||
|
uniqueValues[key] = true
|
||||||
|
newRelationContents = append(newRelationContents, relationVal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
content.Relation.Contents = newRelationContents
|
||||||
|
case KeyTypeMSelect:
|
||||||
|
var newMSelect []*ValueSelect
|
||||||
|
for _, mSelect := range content.MSelect {
|
||||||
|
if !uniqueValues[mSelect.Content] {
|
||||||
|
uniqueValues[mSelect.Content] = true
|
||||||
|
newMSelect = append(newMSelect, mSelect)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
content.MSelect = newMSelect
|
||||||
|
case KeyTypeMAsset:
|
||||||
|
var newMAsset []*ValueAsset
|
||||||
|
for _, mAsset := range content.MAsset {
|
||||||
|
if !uniqueValues[mAsset.Content] {
|
||||||
|
uniqueValues[mAsset.Content] = true
|
||||||
|
newMAsset = append(newMAsset, mAsset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
content.MAsset = newMAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
r.Contents = newContents
|
|
||||||
case CalcOperatorCountAll:
|
case CalcOperatorCountAll:
|
||||||
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewFormattedValueNumber(float64(len(r.Contents)), NumberFormatNone)}}
|
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewFormattedValueNumber(float64(len(r.Contents)), NumberFormatNone)}}
|
||||||
case CalcOperatorCountValues:
|
case CalcOperatorCountValues:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue