This is an automated email from the ASF dual-hosted git repository. xiangfu pushed a commit to branch bugfixing_orderby in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit 6239c655d4d9bfe9b36661231a06adea4f82b90f Author: Xiang Fu <fx19880...@gmail.com> AuthorDate: Mon Aug 19 18:44:28 2019 -0700 Fixing the issue of selection order by won't give correct ordering --- .../core/query/selection/SelectionOperatorService.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorService.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorService.java index 16d4d8a..02bfa1f 100644 --- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorService.java +++ b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorService.java @@ -20,6 +20,7 @@ package org.apache.pinot.core.query.selection; import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.HashSet; @@ -70,6 +71,7 @@ import org.apache.pinot.core.query.selection.comparator.CompositeDocIdValCompara public class SelectionOperatorService { private final List<String> _selectionColumns; private final List<SelectionSort> _sortSequence; + private final List<Integer> _sortColumnIdx; private final DataSchema _dataSchema; private final int _selectionOffset; private final int _maxNumRows; @@ -86,6 +88,7 @@ public class SelectionOperatorService { public SelectionOperatorService(@Nonnull Selection selection, @Nonnull IndexSegment indexSegment) { _selectionColumns = SelectionOperatorUtils.getSelectionColumns(selection.getSelectionColumns(), indexSegment); _sortSequence = getSortSequence(selection.getSelectionSortSequence()); + _sortColumnIdx = getSortColumnIdx(_sortSequence, _selectionColumns); _dataSchema = SelectionOperatorUtils.extractDataSchema(_sortSequence, _selectionColumns, indexSegment); // Select rows from offset to offset + size. _selectionOffset = selection.getOffset(); @@ -93,6 +96,14 @@ public class SelectionOperatorService { _rows = new PriorityQueue<>(_maxNumRows, getStrictComparator()); } + private List<Integer> getSortColumnIdx(List<SelectionSort> sortSequence, List<String> selectionColumns) { + List<Integer> sortColumnIdx = new ArrayList<>(); + for (SelectionSort seq: sortSequence) { + sortColumnIdx.add(selectionColumns.indexOf(seq.column)); + } + return sortColumnIdx; + } + /** * Constructor for <code>SelectionOperatorService</code> with {@link DataSchema}. (Inter segment) * @@ -102,6 +113,7 @@ public class SelectionOperatorService { public SelectionOperatorService(@Nonnull Selection selection, @Nonnull DataSchema dataSchema) { _selectionColumns = SelectionOperatorUtils.getSelectionColumns(selection.getSelectionColumns(), dataSchema); _sortSequence = getSortSequence(selection.getSelectionSortSequence()); + _sortColumnIdx = getSortColumnIdx(_sortSequence, _selectionColumns); _dataSchema = dataSchema; // Select rows from offset to offset + size. _selectionOffset = selection.getOffset(); @@ -211,8 +223,9 @@ public class SelectionOperatorService { for (int i = 0; i < numSortColumns; i++) { int ret = 0; SelectionSort selectionSort = _sortSequence.get(i); - Serializable v1 = o1[i]; - Serializable v2 = o2[i]; + int rowIdx = _sortColumnIdx.get(i); + Serializable v1 = o1[rowIdx]; + Serializable v2 = o2[rowIdx]; // Only compare single-value columns. if (v1 instanceof Number) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org