diff --git a/pkg/yqlib/operator_sort.go b/pkg/yqlib/operator_sort.go index 106b17ff49..942ef46a8c 100644 --- a/pkg/yqlib/operator_sort.go +++ b/pkg/yqlib/operator_sort.go @@ -69,6 +69,7 @@ func (a sortableNodeArray) Less(i, j int) bool { rhsContext := a[j].CompareContext rhsEl := rhsContext.MatchingNodes.Front() + for lhsEl := lhsContext.MatchingNodes.Front(); lhsEl != nil && rhsEl != nil; lhsEl = lhsEl.Next() { lhs := lhsEl.Value.(*CandidateNode) rhs := rhsEl.Value.(*CandidateNode) @@ -83,7 +84,7 @@ func (a sortableNodeArray) Less(i, j int) bool { rhsEl = rhsEl.Next() } - return false + return lhsContext.MatchingNodes.Len() < rhsContext.MatchingNodes.Len() } func (a sortableNodeArray) compare(lhs *CandidateNode, rhs *CandidateNode, dateTimeLayout string) int { diff --git a/pkg/yqlib/operator_sort_test.go b/pkg/yqlib/operator_sort_test.go index 765317ed8f..df1bbb0f8c 100644 --- a/pkg/yqlib/operator_sort_test.go +++ b/pkg/yqlib/operator_sort_test.go @@ -21,6 +21,17 @@ var sortByOperatorScenarios = []expressionScenario{ "D0, P[0], (!!map)::{a: banana}\n", }, }, + { + description: "Sort by with null", + skipDoc: true, + document: "[{a: banana},null,{a: apple}]", + expression: `sort_by(.a)[]`, + expected: []string{ + "D0, P[1], (!!null)::null\n", + "D0, P[2], (!!map)::{a: apple}\n", + "D0, P[0], (!!map)::{a: banana}\n", + }, + }, { description: "Sort by multiple fields", document: "[{a: dog},{a: cat, b: banana},{a: cat, b: apple}]",