1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // +build !nofilter
- package filtering
- import (
- "fmt"
- "os"
- "github.com/araddon/qlbridge/datasource"
- "github.com/araddon/qlbridge/expr"
- "github.com/araddon/qlbridge/value"
- "github.com/araddon/qlbridge/vm"
- )
- type ExprValue struct {
- node expr.Node
- expression string
- }
- func (e *ExprValue) String() string {
- if e.node != nil {
- return e.node.String()
- } else {
- return "<Empty Expression>"
- }
- }
- func (e *ExprValue) Set(value string) error {
- if value == "" {
- e.node = nil
- e.expression = value
- return nil
- }
- ast, err := expr.ParseExpression(value)
- if err != nil {
- return err
- }
- e.node = ast
- e.expression = value
- return nil
- }
- func (e *ExprValue) Validate(line map[string]interface{}) bool {
- if e.node == nil {
- return true
- }
- context := datasource.NewContextSimpleNative(line)
- val, ok := vm.Eval(context, e.node)
- if !ok || val == nil { // errors when evaluating
- return false
- }
- if bv, isBool := val.(value.BoolValue); isBool {
- return bv.Val()
- }
- fmt.Fprintln(os.Stderr, "WARNING: The 'where' expression doesn't return a boolean")
- return false
- }
|