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

Reply via email to