github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/processors/query/filter-equals-impl.go (about) 1 /* 2 * Copyright (c) 2021-present unTill Pro, Ltd. 3 */ 4 5 package queryprocessor 6 7 import ( 8 "fmt" 9 10 "github.com/voedger/voedger/pkg/appdef" 11 "github.com/voedger/voedger/pkg/istructs" 12 ) 13 14 type EqualsFilter struct { 15 field string 16 value interface{} 17 epsilon float64 18 } 19 20 func (f EqualsFilter) IsMatch(fk FieldsKinds, outputRow IOutputRow) (bool, error) { 21 switch fk[f.field] { 22 case appdef.DataKind_int32: 23 return outputRow.Value(f.field).(int32) == int32(f.value.(float64)), nil 24 case appdef.DataKind_int64: 25 return outputRow.Value(f.field).(int64) == int64(f.value.(float64)), nil 26 case appdef.DataKind_float32: 27 return nearlyEqual(f.value.(float64), float64(outputRow.Value(f.field).(float32)), f.epsilon), nil 28 case appdef.DataKind_float64: 29 return nearlyEqual(f.value.(float64), outputRow.Value(f.field).(float64), f.epsilon), nil 30 case appdef.DataKind_string: 31 return outputRow.Value(f.field).(string) == f.value.(string), nil 32 case appdef.DataKind_bool: 33 return outputRow.Value(f.field).(bool) == f.value.(bool), nil 34 case appdef.DataKind_RecordID: 35 return outputRow.Value(f.field).(istructs.RecordID) == istructs.RecordID(int64(f.value.(float64))), nil 36 case appdef.DataKind_QName: 37 return outputRow.Value(f.field).(string) == f.value.(string), nil 38 case appdef.DataKind_null: 39 return false, nil 40 default: 41 return false, fmt.Errorf("'%s' filter: field %s: %w", filterKind_Eq, f.field, ErrWrongType) 42 } 43 }