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