From f1f75683c1014769f268c739e8af6c75773ece99 Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Fri, 28 May 2021 16:59:02 +1000 Subject: [PATCH] Fixed nil RHS bug in alternative operator #838 --- pkg/yqlib/operator_alternative_test.go | 6 ++++++ pkg/yqlib/operator_booleans_test.go | 8 ++++++++ pkg/yqlib/operator_equals_test.go | 7 +++++++ pkg/yqlib/operators.go | 8 ++++++-- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/pkg/yqlib/operator_alternative_test.go b/pkg/yqlib/operator_alternative_test.go index 902fe17..9a57a05 100644 --- a/pkg/yqlib/operator_alternative_test.go +++ b/pkg/yqlib/operator_alternative_test.go @@ -5,6 +5,12 @@ import ( ) var alternativeOperatorScenarios = []expressionScenario{ + { + skipDoc: true, + expression: `.b // .c`, + document: `a: bridge`, + expected: []string{}, + }, { skipDoc: true, expression: `(.b // "hello") as $x`, diff --git a/pkg/yqlib/operator_booleans_test.go b/pkg/yqlib/operator_booleans_test.go index d94eee5..2f3477d 100644 --- a/pkg/yqlib/operator_booleans_test.go +++ b/pkg/yqlib/operator_booleans_test.go @@ -12,6 +12,14 @@ var booleanOperatorScenarios = []expressionScenario{ "D0, P[], (!!bool)::true\n", }, }, + { + skipDoc: true, + document: "b: hi", + expression: `.a or .c`, + expected: []string{ + "D0, P[], (!!bool)::false\n", + }, + }, { skipDoc: true, document: "b: hi", diff --git a/pkg/yqlib/operator_equals_test.go b/pkg/yqlib/operator_equals_test.go index 07cd3cf..e815f89 100644 --- a/pkg/yqlib/operator_equals_test.go +++ b/pkg/yqlib/operator_equals_test.go @@ -5,6 +5,13 @@ import ( ) var equalsOperatorScenarios = []expressionScenario{ + { + skipDoc: true, + expression: ".a == .b", + expected: []string{ + "D0, P[], (!!bool)::true\n", + }, + }, { skipDoc: true, document: "cat", diff --git a/pkg/yqlib/operators.go b/pkg/yqlib/operators.go index 1242b6f..1b0731d 100644 --- a/pkg/yqlib/operators.go +++ b/pkg/yqlib/operators.go @@ -31,7 +31,9 @@ func resultsForRhs(d *dataTreeNavigator, context Context, lhsCandidate *Candidat if err != nil { return err } - results.PushBack(resultCandidate) + if resultCandidate != nil { + results.PushBack(resultCandidate) + } return nil } @@ -42,7 +44,9 @@ func resultsForRhs(d *dataTreeNavigator, context Context, lhsCandidate *Candidat if err != nil { return err } - results.PushBack(resultCandidate) + if resultCandidate != nil { + results.PushBack(resultCandidate) + } } return nil }