@@ -54,6 +54,7 @@ func replaceIdxSortHelper(ctx *sql.Context, scope *plan.Scope, node sql.Node, so
5454 return n , transform .SameTree , nil
5555 }
5656
57+ // TODO: verify that we don't need to look at other SortFields?
5758 // if the lookup does not need any reversing, do nothing
5859 if sortNode .SortFields [0 ].Order != sql .Descending {
5960 return n , transform .NewTree , nil
@@ -126,6 +127,7 @@ func replaceIdxSortHelper(ctx *sql.Context, scope *plan.Scope, node sql.Node, so
126127 if err != nil {
127128 return nil , transform .SameTree , err
128129 }
130+ // TODO: what about the other sort fields?
129131 if sortNode .SortFields [0 ].Order == sql .Descending {
130132 lookup = sql .NewIndexLookup (
131133 lookup .Index ,
@@ -159,6 +161,22 @@ func replaceIdxSortHelper(ctx *sql.Context, scope *plan.Scope, node sql.Node, so
159161 switch c := child .(type ) {
160162 case * plan.Project , * plan.TableAlias , * plan.ResolvedTable , * plan.Filter , * plan.Limit , * plan.Offset , * plan.Sort , * plan.IndexedTableAccess , * plan.Distinct :
161163 newChildren [i ], same , err = replaceIdxSortHelper (ctx , scope , child , sortNode )
164+ case * plan.JoinNode :
165+ if ! c .JoinType ().IsMerge () {
166+ continue
167+ }
168+ // TODO: skipping desc sorting for now
169+ hasDesc := false
170+ for _ , sf := range sortNode .SortFields {
171+ if sf .Order == sql .Descending {
172+ hasDesc = true
173+ break
174+ }
175+ }
176+ if hasDesc {
177+ continue
178+ }
179+ newChildren [i ], same , err = replaceIdxSortHelper (ctx , scope , child , sortNode )
162180 default :
163181 newChildren [i ] = c
164182 }
0 commit comments