moved a subset of source file to the kern package
This commit is contained in:
+10
-8
@@ -7,6 +7,8 @@ package expr
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"git.portale-stac.it/go-pkg/expr/kern"
|
||||
)
|
||||
|
||||
//-------- map term
|
||||
@@ -21,32 +23,32 @@ func newFilterTerm(tk *Token) (inst *term) {
|
||||
}
|
||||
}
|
||||
|
||||
func evalFilter(ctx ExprContext, opTerm *term) (v any, err error) {
|
||||
func evalFilter(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
var leftValue, rightValue any
|
||||
var it Iterator
|
||||
var it kern.Iterator
|
||||
var item any
|
||||
|
||||
if err = opTerm.checkOperands(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if leftValue, err = opTerm.children[0].compute(ctx); err != nil {
|
||||
if leftValue, err = opTerm.children[0].Compute(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if it, err = NewIterator(leftValue); err != nil {
|
||||
return nil, fmt.Errorf("left operand of FILTER must be an iterable data-source; got %s", TypeName(leftValue))
|
||||
return nil, fmt.Errorf("left operand of FILTER must be an iterable data-source; got %s", kern.TypeName(leftValue))
|
||||
}
|
||||
|
||||
values := newListA()
|
||||
values := kern.NewListA()
|
||||
for item, err = it.Next(); err == nil; item, err = it.Next() {
|
||||
ctx.SetVar("_", item)
|
||||
ctx.SetVar("_index", it.Index())
|
||||
ctx.SetVar("_count", it.Count())
|
||||
if rightValue, err = opTerm.children[1].compute(ctx); err == nil {
|
||||
if success, valid := ToBool(rightValue); valid {
|
||||
if rightValue, err = opTerm.children[1].Compute(ctx); err == nil {
|
||||
if success, valid := kern.ToBool(rightValue); valid {
|
||||
if success {
|
||||
values.appendItem(item)
|
||||
values.AppendItem(item)
|
||||
}
|
||||
} else {
|
||||
err = fmt.Errorf("filter expression must return a boolean or a castable to boolean, got %v [%T]", rightValue, rightValue)
|
||||
|
||||
Reference in New Issue
Block a user