snleee commented on a change in pull request #6891:
URL: https://github.com/apache/incubator-pinot/pull/6891#discussion_r628707966



##########
File path: 
pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
##########
@@ -464,21 +464,50 @@ public static SelectionResults 
renderSelectionResultsWithoutOrdering(List<Object
    *
    * @param rows selection rows.
    * @param dataSchema data schema.
+   * @param selectionColumns selection columns.
    * @return {@link ResultTable} object results.
    */
-  public static ResultTable renderResultTableWithoutOrdering(List<Object[]> 
rows, DataSchema dataSchema) {
+  public static ResultTable renderResultTableWithoutOrdering(List<Object[]> 
rows, DataSchema dataSchema, List<String> selectionColumns) {
     int numRows = rows.size();
     List<Object[]> resultRows = new ArrayList<>(numRows);
-    ColumnDataType[] columnDataTypes = dataSchema.getColumnDataTypes();
-    int numColumns = columnDataTypes.length;
+
+    DataSchema resultDataSchema = dataSchema;
+    Map<String, Integer> columnNameToIndexMap = null;
+    if (dataSchema.getColumnNames().length != selectionColumns.size()) {
+      // Create updated data schema since one column can be selected multiple 
times.
+      columnNameToIndexMap = new HashMap<>(dataSchema.getColumnNames().length);
+      String[] columnNames = dataSchema.getColumnNames();
+      ColumnDataType[] columnDataTypes = dataSchema.getColumnDataTypes();
+      for (int i = 0; i < columnNames.length; i++) {
+        columnNameToIndexMap.put(columnNames[i], i);
+      }
+
+      ColumnDataType[] newColumnDataTypes = new 
ColumnDataType[selectionColumns.size()];
+      for (int i =0; i < newColumnDataTypes.length; i++) {

Review comment:
       please apply the formatting

##########
File path: 
pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
##########
@@ -464,21 +464,50 @@ public static SelectionResults 
renderSelectionResultsWithoutOrdering(List<Object
    *
    * @param rows selection rows.
    * @param dataSchema data schema.
+   * @param selectionColumns selection columns.
    * @return {@link ResultTable} object results.
    */
-  public static ResultTable renderResultTableWithoutOrdering(List<Object[]> 
rows, DataSchema dataSchema) {
+  public static ResultTable renderResultTableWithoutOrdering(List<Object[]> 
rows, DataSchema dataSchema, List<String> selectionColumns) {
     int numRows = rows.size();
     List<Object[]> resultRows = new ArrayList<>(numRows);
-    ColumnDataType[] columnDataTypes = dataSchema.getColumnDataTypes();
-    int numColumns = columnDataTypes.length;
+
+    DataSchema resultDataSchema = dataSchema;
+    Map<String, Integer> columnNameToIndexMap = null;
+    if (dataSchema.getColumnNames().length != selectionColumns.size()) {
+      // Create updated data schema since one column can be selected multiple 
times.
+      columnNameToIndexMap = new HashMap<>(dataSchema.getColumnNames().length);
+      String[] columnNames = dataSchema.getColumnNames();
+      ColumnDataType[] columnDataTypes = dataSchema.getColumnDataTypes();
+      for (int i = 0; i < columnNames.length; i++) {
+        columnNameToIndexMap.put(columnNames[i], i);
+      }
+
+      ColumnDataType[] newColumnDataTypes = new 
ColumnDataType[selectionColumns.size()];
+      for (int i =0; i < newColumnDataTypes.length; i++) {
+        int index = columnNameToIndexMap.get(selectionColumns.get(i));
+        newColumnDataTypes[i] = columnDataTypes[index];
+      }
+
+      resultDataSchema = new DataSchema(selectionColumns.toArray(new 
String[0]), newColumnDataTypes);
+    }
+
+    int numColumns = resultDataSchema.getColumnNames().length;
+    ColumnDataType[] resultColumnDataTypes = 
resultDataSchema.getColumnDataTypes();
     for (Object[] row : rows) {
       Object[] resultRow = new Object[numColumns];
       for (int i = 0; i < numColumns; i++) {
-        resultRow[i] = columnDataTypes[i].convertAndFormat(row[i]);
+        int index;
+        if (columnNameToIndexMap == null) {
+          index = i;
+        } else {
+          index = columnNameToIndexMap.get(selectionColumns.get(i));
+        }

Review comment:
       you can make the code a bit shorter
   ```
   int index = (columnNameToIndexMap != null) ? 
columnNameToIndexMap.get(selectionColumns.get(i)) : i
   ```




-- 
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.

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