From 3aee3f0d375fc007d40eec043c4a9c988c2dfffe Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 27 May 2024 20:38:05 +0800 Subject: [PATCH] :art: Improve database relation field filtering https://github.com/siyuan-note/siyuan/issues/11547 --- kernel/av/filter.go | 53 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/kernel/av/filter.go b/kernel/av/filter.go index 5de906120..9157d968a 100644 --- a/kernel/av/filter.go +++ b/kernel/av/filter.go @@ -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) }