🎨 Improve database relation field filtering https://github.com/siyuan-note/siyuan/issues/11547

This commit is contained in:
Daniel 2024-05-27 20:38:05 +08:00
parent 5fcc56eb55
commit 3aee3f0d37
No known key found for this signature in database
GPG key ID: 86211BA83DF03017

View file

@ -138,11 +138,31 @@ func (value *Value) Filter(filter *ViewFilter, attrView *AttributeView, rowID st
}
}
if destVal.filter(filter.Value.Rollup.Contents[0], filter.RelativeDate, filter.RelativeDate2, filter.Operator) {
return true
switch filter.Operator {
case FilterOperatorContains:
if destVal.filter(filter.Value.Rollup.Contents[0], filter.RelativeDate, filter.RelativeDate2, filter.Operator) {
return true
}
case FilterOperatorDoesNotContain:
ret := destVal.filter(filter.Value.Rollup.Contents[0], filter.RelativeDate, filter.RelativeDate2, filter.Operator)
if !ret {
return false
}
default:
if destVal.filter(filter.Value.Rollup.Contents[0], filter.RelativeDate, filter.RelativeDate2, filter.Operator) {
return true
}
}
}
return false
switch filter.Operator {
case FilterOperatorContains:
return false
case FilterOperatorDoesNotContain:
return true
default:
return false
}
}
if nil != value.Relation && KeyTypeRelation == value.Type && 0 < len(value.Relation.Contents) && nil != filter.Value && KeyTypeRelation == filter.Value.Type &&
@ -151,11 +171,32 @@ func (value *Value) Filter(filter *ViewFilter, attrView *AttributeView, rowID st
for _, relationValue := range value.Relation.Contents {
filterValue := &Value{Type: KeyTypeBlock, Block: &ValueBlock{Content: filter.Value.Relation.BlockIDs[0]}}
if relationValue.filter(filterValue, filter.RelativeDate, filter.RelativeDate2, filter.Operator) {
return true
switch filter.Operator {
case FilterOperatorContains:
if relationValue.filter(filterValue, filter.RelativeDate, filter.RelativeDate2, filter.Operator) {
return true
}
case FilterOperatorDoesNotContain:
ret := relationValue.filter(filterValue, filter.RelativeDate, filter.RelativeDate2, filter.Operator)
if !ret {
return false
}
default:
if relationValue.filter(filterValue, filter.RelativeDate, filter.RelativeDate2, filter.Operator) {
return true
}
}
}
return false
switch filter.Operator {
case FilterOperatorContains:
return false
case FilterOperatorDoesNotContain:
return true
default:
return false
}
}
return value.filter(filter.Value, filter.RelativeDate, filter.RelativeDate2, filter.Operator)
}