From 337960a6d1616a4248630628d6f5ff21d062483b Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Tue, 25 Mar 2025 15:34:01 +1100 Subject: [PATCH] Fixing add when there is no node match #2325 --- pkg/yqlib/operator_add.go | 10 ++++++++-- pkg/yqlib/operator_add_test.go | 9 +++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/yqlib/operator_add.go b/pkg/yqlib/operator_add.go index 6f2322bc..044fe4a0 100644 --- a/pkg/yqlib/operator_add.go +++ b/pkg/yqlib/operator_add.go @@ -39,13 +39,19 @@ func toNodes(candidate *CandidateNode, lhs *CandidateNode) []*CandidateNode { func addOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("Add operator") - return crossFunction(d, context.ReadOnlyClone(), expressionNode, add, false) + return crossFunction(d, context.ReadOnlyClone(), expressionNode, add, true) } func add(_ *dataTreeNavigator, context Context, lhs *CandidateNode, rhs *CandidateNode) (*CandidateNode, error) { lhsNode := lhs - if lhsNode.Tag == "!!null" { + if lhs == nil && rhs == nil { + return nil, nil + } else if lhs == nil { + return rhs.Copy(), nil + } else if rhs == nil { + return lhs.Copy(), nil + } else if lhsNode.Tag == "!!null" { return lhs.CopyAsReplacement(rhs), nil } diff --git a/pkg/yqlib/operator_add_test.go b/pkg/yqlib/operator_add_test.go index d65deee8..93f0bb89 100644 --- a/pkg/yqlib/operator_add_test.go +++ b/pkg/yqlib/operator_add_test.go @@ -310,6 +310,15 @@ var addOperatorScenarios = []expressionScenario{ "D0, P[], (!!map)::a: !cat Saturday, 15-Dec-01 at 6:00AM GMT\n", }, }, + { + skipDoc: true, + description: "Add to empty", + subdescription: "should behave like null", + expression: `.nada + "cat"`, + expected: []string{ + "D0, P[], (!!str)::cat\n", + }, + }, { description: "Add to null", subdescription: "Adding to null simply returns the rhs",