This is an automated email from the ASF dual-hosted git repository.
kishoreg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 0a13d98 Fixing minor bug with duplicate column names in the query
(#4523)
0a13d98 is described below
commit 0a13d98760cf5ac557e5ea47766b68a4ad3131b7
Author: Kishore Gopalakrishna <[email protected]>
AuthorDate: Tue Aug 13 13:42:55 2019 -0700
Fixing minor bug with duplicate column names in the query (#4523)
---
.../core/query/reduce/BrokerReduceService.java | 4 +--
.../query/selection/SelectionOperatorService.java | 2 +-
.../query/selection/SelectionOperatorUtils.java | 30 ++++------------------
.../selection/SelectionOperatorServiceTest.java | 4 +--
.../tests/OfflineClusterIntegrationTest.java | 24 +++++++++++++++++
5 files changed, 34 insertions(+), 30 deletions(-)
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/BrokerReduceService.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/BrokerReduceService.java
index acfc0fc..b361e2d 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/BrokerReduceService.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/BrokerReduceService.java
@@ -317,12 +317,12 @@ public class BrokerReduceService implements
ReduceService<BrokerResponseNative>
SelectionOperatorService selectionService = new
SelectionOperatorService(selection, dataSchema);
selectionService.reduceWithOrdering(dataTableMap);
selectionResults = selectionService.renderSelectionResultsWithOrdering();
- columnIndices =
SelectionOperatorUtils.getColumnIndicesWithOrdering(selectionColumns,
dataSchema);
+ columnIndices =
SelectionOperatorUtils.getColumnIndices(selectionColumns, dataSchema);
} else {
// Selection only.
selectionResults =
SelectionOperatorUtils.renderSelectionResultsWithoutOrdering(
SelectionOperatorUtils.reduceWithoutOrdering(dataTableMap,
selectionSize), dataSchema, selectionColumns);
- columnIndices =
SelectionOperatorUtils.getColumnIndicesWithoutOrdering(selectionColumns,
dataSchema);
+ columnIndices =
SelectionOperatorUtils.getColumnIndices(selectionColumns, dataSchema);
}
// TODO: use "formatRowsWithoutOrdering", "formatRowsWithOrdering"
properly for selection when the server is updated
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 ea56e6f..16d4d8a 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
@@ -319,7 +319,7 @@ public class SelectionOperatorService {
public SelectionResults renderSelectionResultsWithOrdering() {
LinkedList<Serializable[]> rowsInSelectionResults = new LinkedList<>();
- int[] columnIndices =
SelectionOperatorUtils.getColumnIndicesWithOrdering(_selectionColumns,
_dataSchema);
+ int[] columnIndices =
SelectionOperatorUtils.getColumnIndices(_selectionColumns, _dataSchema);
while (_rows.size() > _selectionOffset) {
rowsInSelectionResults.addFirst(SelectionOperatorUtils.extractColumns(_rows.poll(),
columnIndices));
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
index a24f441..bbfa42f 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
@@ -420,7 +420,7 @@ public class SelectionOperatorUtils {
@Nonnull
public static SelectionResults
renderSelectionResultsWithoutOrdering(@Nonnull List<Serializable[]> rows,
@Nonnull DataSchema dataSchema, @Nonnull List<String> selectionColumns) {
- int[] columnIndices = getColumnIndicesWithoutOrdering(selectionColumns,
dataSchema);
+ int[] columnIndices = getColumnIndices(selectionColumns, dataSchema);
int numRows = rows.size();
for (int i = 0; i < numRows; i++) {
rows.set(i, extractColumns(rows.get(i), columnIndices));
@@ -429,34 +429,12 @@ public class SelectionOperatorUtils {
}
/**
- * Helper method to compute column indices from selection columns and the
data schema for selection queries without
- * <code>ORDER BY</code>.
+ * Helper method to compute column indices from selection columns and the
data schema for selection queries
* @param selectionColumns selection columns.
* @param dataSchema data schema.
* @return column indices
*/
- public static int[] getColumnIndicesWithoutOrdering(@Nonnull List<String>
selectionColumns,
- @Nonnull DataSchema dataSchema) {
- int numSelectionColumns = selectionColumns.size();
- int[] columnIndices = new int[numSelectionColumns];
- Map<String, Integer> dataSchemaIndices = new
HashMap<>(numSelectionColumns);
- for (int i = 0; i < numSelectionColumns; i++) {
- dataSchemaIndices.put(dataSchema.getColumnName(i), i);
- }
- for (int i = 0; i < numSelectionColumns; i++) {
- columnIndices[i] = dataSchemaIndices.get(selectionColumns.get(i));
- }
- return columnIndices;
- }
-
- /**
- * Helper method to compute column indices from selection columns and the
data schema for selection queries with
- * <code>ORDER BY</code>.
- * @param selectionColumns selection columns.
- * @param dataSchema data schema.
- * @return column indices
- */
- public static int[] getColumnIndicesWithOrdering(@Nonnull List<String>
selectionColumns,
+ public static int[] getColumnIndices(@Nonnull List<String> selectionColumns,
@Nonnull DataSchema dataSchema) {
int numSelectionColumns = selectionColumns.size();
int[] columnIndices = new int[numSelectionColumns];
@@ -471,6 +449,8 @@ public class SelectionOperatorUtils {
return columnIndices;
}
+
+
/**
* Extract columns from the row based on the given column indices.
* <p>The extracted row is used to build the {@link SelectionResults}.
diff --git
a/pinot-core/src/test/java/org/apache/pinot/query/selection/SelectionOperatorServiceTest.java
b/pinot-core/src/test/java/org/apache/pinot/query/selection/SelectionOperatorServiceTest.java
index 9f83089..d340659 100644
---
a/pinot-core/src/test/java/org/apache/pinot/query/selection/SelectionOperatorServiceTest.java
+++
b/pinot-core/src/test/java/org/apache/pinot/query/selection/SelectionOperatorServiceTest.java
@@ -159,7 +159,7 @@ public class SelectionOperatorServiceTest {
Assert.assertTrue(Arrays.deepEquals(resultRows.get(1), expectedRow2));
int[] columnIndices =
-
SelectionOperatorUtils.getColumnIndicesWithoutOrdering(selectionResults.getColumns(),
_dataSchema);
+ SelectionOperatorUtils.getColumnIndices(selectionResults.getColumns(),
_dataSchema);
// TODO: use "formatRowsWithoutOrdering" after server updated to the
latest code.
resultRows = SelectionOperatorUtils.formatRowsWithOrdering(resultRows,
columnIndices, _upgradedDataSchema);
@@ -192,7 +192,7 @@ public class SelectionOperatorServiceTest {
Assert.assertTrue(Arrays.deepEquals(resultRows.get(1), expectedRow2));
int[] columnIndices =
-
SelectionOperatorUtils.getColumnIndicesWithOrdering(selectionResults.getColumns(),
_dataSchema);
+ SelectionOperatorUtils.getColumnIndices(selectionResults.getColumns(),
_dataSchema);
resultRows = SelectionOperatorUtils.formatRowsWithOrdering(resultRows,
columnIndices, _upgradedDataSchema);
Serializable[] expectedFormattedRow1 =
diff --git
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
index 714986c..456efb4 100644
---
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
+++
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
@@ -657,6 +657,30 @@ public class OfflineClusterIntegrationTest extends
BaseClusterIntegrationTestSet
}
}
+ @Test
+ public void testQueryWithRepeatedColumns()
+ throws Exception {
+ //test repeated columns in selection query
+ String query = "SELECT ArrTime, ArrTime FROM mytable WHERE DaysSinceEpoch
<= 16312 AND Carrier = 'DL'";
+ testQuery(query, Collections.singletonList(query));
+
+ //test repeated columns in selection query with order by
+ query = "SELECT ArrTime, ArrTime FROM mytable WHERE DaysSinceEpoch <=
16312 AND Carrier = 'DL' order by ArrTime";
+ testQuery(query, Collections.singletonList(query));
+
+ //test repeated columns in agg query
+ query = "SELECT count(*), count(*) FROM mytable WHERE DaysSinceEpoch <=
16312 AND Carrier = 'DL'";
+ testQuery(query, Arrays.asList("SELECT count(*) FROM mytable WHERE
DaysSinceEpoch <= 16312 AND Carrier = 'DL'",
+ "SELECT count(*) FROM mytable WHERE DaysSinceEpoch <= 16312 AND
Carrier = 'DL'"));
+
+ //test repeated columns in agg group by query
+ query =
+ "SELECT ArrTime, ArrTime, count(*), count(*) FROM mytable WHERE
DaysSinceEpoch <= 16312 AND Carrier = 'DL' group by ArrTime, ArrTime";
+ testQuery(query, Arrays.asList(
+ "SELECT ArrTime, ArrTime, count(*) FROM mytable WHERE DaysSinceEpoch
<= 16312 AND Carrier = 'DL' group by ArrTime, ArrTime",
+ "SELECT ArrTime, ArrTime, count(*) FROM mytable WHERE DaysSinceEpoch
<= 16312 AND Carrier = 'DL' group by ArrTime, ArrTime"));
+ }
+
@AfterClass
public void tearDown()
throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]