123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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 val.Type() != value.BoolType {
- fmt.Fprintln(os.Stderr, "WARNING: The 'where' expression doesn't return a boolean")
- return false
- }
- if val.Value().(bool) != true {
- return false
- }
- return true
- }
|