diff --git a/pkg/yqlib/operator_filter.go b/pkg/yqlib/operator_filter.go index 55ead973..a473c40f 100644 --- a/pkg/yqlib/operator_filter.go +++ b/pkg/yqlib/operator_filter.go @@ -1,54 +1,36 @@ package yqlib import ( - "errors" "container/list" ) func filterOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { - log.Debugf("-- filterOperation") + log.Warningf("-- filterOperation") var results = list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) + log.Warningf("candidate %#v", candidate) children := context.SingleChildContext(candidate) splatted, err := splat(children, traversePreferences{}) if err != nil { return Context{}, err } - + filtered, err := selectOperator(d, splatted, expressionNode) if err != nil { return Context{}, err } - - for resultEl := splatted.MatchingNodes.Front(); resultEl != nil; resultEl = resultEl.Next() { + for resultEl := filtered.MatchingNodes.Front(); resultEl != nil; resultEl = resultEl.Next() { result := resultEl.Value.(*CandidateNode) + log.Warningf("filtered %#v", result) + selfExpression := &ExpressionNode{Operation: &Operation{OperationType: selfReferenceOpType}} childCtx := context.SingleReadonlyChildContext(result) - include, err := d.GetMatchingNodes(childCtx, expressionNode.RHS) + collected, err := collectTogether(d, childCtx, selfExpression) if err != nil { return Context{}, err } - var includeResult bool - var errDecoding error - includeEl := include.MatchingNodes.Front() - if includeEl.Next() != nil { - return Context{}, errors.New("Only expected one child") - } - includeVal := includeEl.Value.(*CandidateNode) - includeResult, errDecoding = isTruthy(includeVal) - if errDecoding != nil { - return Context{}, errDecoding - } - log.Debug("isTruthy %v", includeResult) - if includeResult { - selfExpression := &ExpressionNode{Operation: &Operation{OperationType: selfReferenceOpType}} - collected, err := collectTogether(d, childCtx, selfExpression) - if err != nil { - return Context{}, err - } - collected.Node.Style = unwrapDoc(result.Node).Style - results.PushBack(collected) - } + collected.Node.Style = unwrapDoc(result.Node).Style + results.PushBack(collected) } } return context.ChildContext(results), nil