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  }