Fixed handling of nulls with sort_by expressions #2164

This commit is contained in:
Mike Farah 2024-11-16 12:27:00 +11:00
parent f238f01856
commit 4af292f076
2 changed files with 13 additions and 1 deletions

View File

@ -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 {

View File

@ -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}]",