siddharthteotia commented on code in PR #9406:
URL: https://github.com/apache/pinot/pull/9406#discussion_r972549589


##########
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/SortOperator.java:
##########
@@ -129,14 +124,44 @@ private void consumeInputBlocks() {
     }
   }
 
-  private List<OrderByExpressionContext> 
toOrderByExpressions(List<RexExpression> collationKeys,
-      List<RelFieldCollation.Direction> collationDirections) {
-    List<OrderByExpressionContext> orderByExpressionContextList = new 
ArrayList<>(collationKeys.size());
-    for (int i = 0; i < collationKeys.size(); i++) {
-      orderByExpressionContextList.add(new 
OrderByExpressionContext(ExpressionContext.forIdentifier(
-          _dataSchema.getColumnName(((RexExpression.InputRef) 
collationKeys.get(i)).getIndex())),
-          !collationDirections.get(i).isDescending()));
+  private static class SortComparator implements Comparator<Object[]> {
+    private final int _size;
+    private final int[] _valueIndices;
+    private final int[] _multipliers;
+    private final boolean[] _useDoubleComparison;
+
+    public SortComparator(List<RexExpression> collationKeys, 
List<RelFieldCollation.Direction> collationDirections,
+        DataSchema dataSchema, boolean isNullHandlingEnabled) {
+      DataSchema.ColumnDataType[] columnDataTypes = 
dataSchema.getColumnDataTypes();
+      _size = collationKeys.size();
+      _valueIndices = new int[_size];
+      _multipliers = new int[_size];
+      _useDoubleComparison = new boolean[_size];
+      for (int i = 0; i < _size; i++) {
+        _valueIndices[i] = ((RexExpression.InputRef) 
collationKeys.get(i)).getIndex();
+        _multipliers[i] = collationDirections.get(i).isDescending() ? 1 : -1;
+        _useDoubleComparison[i] = columnDataTypes[_valueIndices[i]].isNumber();
+      }
+    }
+
+    @Override
+    public int compare(Object[] o1, Object[] o2) {
+      for (int i = 0; i < _size; i++) {
+        int index = _valueIndices[i];
+        Object v1 = o1[index];
+        Object v2 = o2[index];
+        int result;
+        if (_useDoubleComparison[i]) {

Review Comment:
   (nit) can avoid this if check by creating comparators upfront in the 
constructor



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to