github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/processors/query/filter-not-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  )
    12  
    13  type NotEqualsFilter struct {
    14  	field   string
    15  	value   interface{}
    16  	epsilon float64
    17  }
    18  
    19  func (f NotEqualsFilter) IsMatch(fk FieldsKinds, outputRow IOutputRow) (bool, error) {
    20  	switch fk[f.field] {
    21  	case appdef.DataKind_int32:
    22  		return outputRow.Value(f.field).(int32) != int32(f.value.(float64)), nil
    23  	case appdef.DataKind_int64:
    24  		return outputRow.Value(f.field).(int64) != int64(f.value.(float64)), nil
    25  	case appdef.DataKind_float32:
    26  		return !nearlyEqual(f.value.(float64), float64(outputRow.Value(f.field).(float32)), f.epsilon), nil
    27  	case appdef.DataKind_float64:
    28  		return !nearlyEqual(f.value.(float64), outputRow.Value(f.field).(float64), f.epsilon), nil
    29  	case appdef.DataKind_string:
    30  		return outputRow.Value(f.field).(string) != f.value.(string), nil
    31  	case appdef.DataKind_bool:
    32  		return outputRow.Value(f.field).(bool) != f.value.(bool), nil
    33  	case appdef.DataKind_null:
    34  		return false, nil
    35  	default:
    36  		return false, fmt.Errorf("'%s' filter: field %s: %w", filterKind_NotEq, f.field, ErrWrongType)
    37  	}
    38  }