🐛 Database filtering does not work after change the field type https://github.com/siyuan-note/siyuan/issues/10519

This commit is contained in:
Daniel 2024-03-05 23:43:42 +08:00
parent d9c30ae4ff
commit cf33c6a46a
No known key found for this signature in database
GPG key ID: 86211BA83DF03017

View file

@ -257,12 +257,13 @@ func (value *Value) Compare(other *Value) int {
} }
func (value *Value) CompareOperator(filter *ViewFilter, attrView *AttributeView, rowID string) bool { func (value *Value) CompareOperator(filter *ViewFilter, attrView *AttributeView, rowID string) bool {
if nil != value.Rollup && KeyTypeRollup == filter.Value.Type { key, _ := attrView.GetKey(value.KeyID)
rollupKey, _ := attrView.GetKey(value.KeyID) if nil == key {
if nil == rollupKey {
return false return false
} }
relKey, _ := attrView.GetKey(rollupKey.Rollup.RelationKeyID)
if nil != value.Rollup && KeyTypeRollup == key.Type && nil != filter.Value && KeyTypeRollup == filter.Value.Type {
relKey, _ := attrView.GetKey(key.Rollup.RelationKeyID)
if nil == relKey { if nil == relKey {
return false return false
} }
@ -278,28 +279,30 @@ func (value *Value) CompareOperator(filter *ViewFilter, attrView *AttributeView,
} }
for _, blockID := range relVal.Relation.BlockIDs { for _, blockID := range relVal.Relation.BlockIDs {
destVal := destAv.GetValue(rollupKey.Rollup.KeyID, blockID) destVal := destAv.GetValue(key.Rollup.KeyID, blockID)
if nil == destVal { if nil == destVal {
continue continue
} }
if destVal.compareOperator(filter) { if destVal.compareOperator(filter, key.Type) {
return true return true
} }
} }
return false return false
} }
return value.compareOperator(filter) return value.compareOperator(filter, key.Type)
} }
func (value *Value) compareOperator(filter *ViewFilter) bool { func (value *Value) compareOperator(filter *ViewFilter, keyType KeyType) bool {
if nil == filter || (nil == filter.Value && nil == filter.RelativeDate) { if nil == filter || (nil == filter.Value && nil == filter.RelativeDate) {
return true return true
} }
operator := filter.Operator operator := filter.Operator
switch keyType {
case KeyTypeBlock:
if nil != value.Block && nil != filter.Value.Block { if nil != value.Block && nil != filter.Value.Block {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -320,7 +323,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return "" != strings.TrimSpace(value.Block.Content) return "" != strings.TrimSpace(value.Block.Content)
} }
} }
case KeyTypeText:
if nil != value.Text && nil != filter.Value.Text { if nil != value.Text && nil != filter.Value.Text {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -359,7 +362,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return "" != strings.TrimSpace(value.Text.Content) return "" != strings.TrimSpace(value.Text.Content)
} }
} }
case KeyTypeNumber:
if nil != value.Number && nil != filter.Value.Number { if nil != value.Number && nil != filter.Value.Number {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -386,7 +389,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return value.Number.IsNotEmpty return value.Number.IsNotEmpty
} }
} }
case KeyTypeDate:
if nil != value.Date { if nil != value.Date {
if nil != filter.RelativeDate { if nil != filter.RelativeDate {
// 使用相对时间比较 // 使用相对时间比较
@ -451,7 +454,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
} }
} }
} }
case KeyTypeCreated:
if nil != value.Created && nil != filter.Value.Created { if nil != value.Created && nil != filter.Value.Created {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -476,7 +479,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return value.Created.IsNotEmpty return value.Created.IsNotEmpty
} }
} }
case KeyTypeUpdated:
if nil != value.Updated && nil != filter.Value.Updated { if nil != value.Updated && nil != filter.Value.Updated {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -501,7 +504,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return value.Updated.IsNotEmpty return value.Updated.IsNotEmpty
} }
} }
case KeyTypeSelect, KeyTypeMSelect:
if nil != value.MSelect { if nil != value.MSelect {
if nil != filter.Value.MSelect { if nil != filter.Value.MSelect {
switch operator { switch operator {
@ -546,7 +549,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return 0 != len(value.MSelect) && !(1 == len(value.MSelect) && "" == value.MSelect[0].Content) return 0 != len(value.MSelect) && !(1 == len(value.MSelect) && "" == value.MSelect[0].Content)
} }
} }
case KeyTypeURL:
if nil != value.URL && nil != filter.Value.URL { if nil != value.URL && nil != filter.Value.URL {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -567,7 +570,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return "" != strings.TrimSpace(value.URL.Content) return "" != strings.TrimSpace(value.URL.Content)
} }
} }
case KeyTypeEmail:
if nil != value.Email && nil != filter.Value.Email { if nil != value.Email && nil != filter.Value.Email {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -588,7 +591,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return "" != strings.TrimSpace(value.Email.Content) return "" != strings.TrimSpace(value.Email.Content)
} }
} }
case KeyTypePhone:
if nil != value.Phone && nil != filter.Value.Phone { if nil != value.Phone && nil != filter.Value.Phone {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -609,7 +612,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return "" != strings.TrimSpace(value.Phone.Content) return "" != strings.TrimSpace(value.Phone.Content)
} }
} }
case KeyTypeMAsset:
if nil != value.MAsset && nil != filter.Value.MAsset && 0 < len(value.MAsset) && 0 < len(filter.Value.MAsset) { if nil != value.MAsset && nil != filter.Value.MAsset && 0 < len(value.MAsset) && 0 < len(filter.Value.MAsset) {
switch operator { switch operator {
case FilterOperatorIsEqual, FilterOperatorContains: case FilterOperatorIsEqual, FilterOperatorContains:
@ -640,7 +643,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return 0 != len(value.MAsset) && !(1 == len(value.MAsset) && "" == value.MAsset[0].Content) return 0 != len(value.MAsset) && !(1 == len(value.MAsset) && "" == value.MAsset[0].Content)
} }
} }
case KeyTypeTemplate:
if nil != value.Template && nil != filter.Value.Template { if nil != value.Template && nil != filter.Value.Template {
switch operator { switch operator {
case FilterOperatorIsEqual: case FilterOperatorIsEqual:
@ -699,7 +702,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return "" != strings.TrimSpace(value.Template.Content) return "" != strings.TrimSpace(value.Template.Content)
} }
} }
case KeyTypeCheckbox:
if nil != value.Checkbox { if nil != value.Checkbox {
switch operator { switch operator {
case FilterOperatorIsTrue: case FilterOperatorIsTrue:
@ -708,7 +711,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return !value.Checkbox.Checked return !value.Checkbox.Checked
} }
} }
case KeyTypeRelation:
if nil != value.Relation && nil != filter.Value.Relation { if nil != value.Relation && nil != filter.Value.Relation {
switch operator { switch operator {
case FilterOperatorContains: case FilterOperatorContains:
@ -739,6 +742,7 @@ func (value *Value) compareOperator(filter *ViewFilter) bool {
return 0 != len(value.Relation.Contents) && !(1 == len(value.Relation.Contents) && "" == value.Relation.Contents[0]) return 0 != len(value.Relation.Contents) && !(1 == len(value.Relation.Contents) && "" == value.Relation.Contents[0])
} }
} }
}
return false return false
} }