mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-19 16:10:12 +01:00
🐛 Database rollup calculation misses null values https://github.com/siyuan-note/siyuan/issues/10843
This commit is contained in:
parent
e7204ac10f
commit
2a3d236d8e
3 changed files with 34 additions and 4 deletions
|
|
@ -523,6 +523,22 @@ func (av *AttributeView) GetCurrentView(viewID string) (ret *View, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (av *AttributeView) ExistBlock(blockID string) bool {
|
||||||
|
for _, kv := range av.KeyValues {
|
||||||
|
if KeyTypeBlock != kv.Key.Type {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range kv.Values {
|
||||||
|
if v.BlockID == blockID {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (av *AttributeView) GetValue(keyID, blockID string) (ret *Value) {
|
func (av *AttributeView) GetValue(keyID, blockID string) (ret *Value) {
|
||||||
for _, kv := range av.KeyValues {
|
for _, kv := range av.KeyValues {
|
||||||
if kv.Key.ID == keyID {
|
if kv.Key.ID == keyID {
|
||||||
|
|
|
||||||
|
|
@ -340,9 +340,13 @@ func GetBlockAttributeViewKeys(blockID string) (ret []*BlockAttributeViewKeys) {
|
||||||
for _, bID := range relVal.Relation.BlockIDs {
|
for _, bID := range relVal.Relation.BlockIDs {
|
||||||
destVal := destAv.GetValue(kv.Key.Rollup.KeyID, bID)
|
destVal := destAv.GetValue(kv.Key.Rollup.KeyID, bID)
|
||||||
if nil == destVal {
|
if nil == destVal {
|
||||||
destVal = treenode.GetAttributeViewDefaultValue(ast.NewNodeID(), kv.Key.Rollup.KeyID, blockID, destKey.Type)
|
if destAv.ExistBlock(bID) { // 数据库中存在行但是列值不存在是数据未初始化,这里补一个默认值
|
||||||
|
destVal = treenode.GetAttributeViewDefaultValue(ast.NewNodeID(), kv.Key.Rollup.KeyID, bID, destKey.Type)
|
||||||
|
}
|
||||||
|
if nil == destVal {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if av.KeyTypeNumber == destKey.Type {
|
if av.KeyTypeNumber == destKey.Type {
|
||||||
destVal.Number.Format = destKey.NumberFormat
|
destVal.Number.Format = destKey.NumberFormat
|
||||||
destVal.Number.FormatNumber()
|
destVal.Number.FormatNumber()
|
||||||
|
|
@ -1001,7 +1005,12 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s
|
||||||
for _, blockID := range relVal.Relation.BlockIDs {
|
for _, blockID := range relVal.Relation.BlockIDs {
|
||||||
destVal := destAv.GetValue(rollupKey.Rollup.KeyID, blockID)
|
destVal := destAv.GetValue(rollupKey.Rollup.KeyID, blockID)
|
||||||
if nil == destVal {
|
if nil == destVal {
|
||||||
continue
|
if destAv.ExistBlock(blockID) { // 数据库中存在行但是列值不存在是数据未初始化,这里补一个默认值
|
||||||
|
destVal = treenode.GetAttributeViewDefaultValue(ast.NewNodeID(), rollupKey.Rollup.KeyID, blockID, destKey.Type)
|
||||||
|
}
|
||||||
|
if nil == destVal {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if av.KeyTypeNumber == destKey.Type {
|
if av.KeyTypeNumber == destKey.Type {
|
||||||
destVal.Number.Format = destKey.NumberFormat
|
destVal.Number.Format = destKey.NumberFormat
|
||||||
|
|
|
||||||
|
|
@ -805,7 +805,12 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
|
||||||
for _, blockID := range relVal.Relation.BlockIDs {
|
for _, blockID := range relVal.Relation.BlockIDs {
|
||||||
destVal := destAv.GetValue(rollupKey.Rollup.KeyID, blockID)
|
destVal := destAv.GetValue(rollupKey.Rollup.KeyID, blockID)
|
||||||
if nil == destVal {
|
if nil == destVal {
|
||||||
continue
|
if destAv.ExistBlock(blockID) { // 数据库中存在行但是列值不存在是数据未初始化,这里补一个默认值
|
||||||
|
destVal = GetAttributeViewDefaultValue(ast.NewNodeID(), rollupKey.Rollup.KeyID, blockID, destKey.Type)
|
||||||
|
}
|
||||||
|
if nil == destVal {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if av.KeyTypeNumber == destKey.Type {
|
if av.KeyTypeNumber == destKey.Type {
|
||||||
destVal.Number.Format = destKey.NumberFormat
|
destVal.Number.Format = destKey.NumberFormat
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue