From c284d4c6b1db95d2374ceb96997c53af4a98ef7d Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Fri, 5 Feb 2021 09:49:40 +1100 Subject: [PATCH] Equals now only compares scalars --- pkg/yqlib/operator_equals.go | 4 +++- pkg/yqlib/operator_equals_test.go | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/yqlib/operator_equals.go b/pkg/yqlib/operator_equals.go index 2882c31..5c6d959 100644 --- a/pkg/yqlib/operator_equals.go +++ b/pkg/yqlib/operator_equals.go @@ -1,5 +1,7 @@ package yqlib +import "gopkg.in/yaml.v3" + func equalsOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- equalsOperation") return crossFunction(d, context, expressionNode, isEquals) @@ -13,7 +15,7 @@ func isEquals(d *dataTreeNavigator, context Context, lhs *CandidateNode, rhs *Ca if lhsNode.Tag == "!!null" { value = (rhsNode.Tag == "!!null") - } else { + } else if lhsNode.Kind == yaml.ScalarNode && rhsNode.Kind == yaml.ScalarNode { value = matchKey(lhsNode.Value, rhsNode.Value) } log.Debugf("%v == %v ? %v", NodeToString(lhs), NodeToString(rhs), value) diff --git a/pkg/yqlib/operator_equals_test.go b/pkg/yqlib/operator_equals_test.go index 2dfa20d..822c031 100644 --- a/pkg/yqlib/operator_equals_test.go +++ b/pkg/yqlib/operator_equals_test.go @@ -14,6 +14,14 @@ var equalsOperatorScenarios = []expressionScenario{ "D0, P[], (!!bool)::false\n", }, }, + { + skipDoc: true, + document: "{a: { b: {things: \"\"}, f: [1], g: [] }}", + expression: ".. | select(. == \"\")", + expected: []string{ + "D0, P[a b things], (!!str)::\"\"\n", + }, + }, { description: "Match string", document: `[cat,goat,dog]`,