From eac41f85006dc98adfb23eb6ea8158469a07778f Mon Sep 17 00:00:00 2001 From: Rong Rong Date: Sat, 27 Aug 2022 10:35:16 -0700 Subject: [PATCH] address pr comments' --- .../org/apache/pinot/query/QueryEnvironmentTestBase.java | 5 +++-- .../pinot/query/runtime/operator/FilterOperator.java | 2 +- .../org/apache/pinot/query/runtime/QueryRunnerTest.java | 9 +++++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryEnvironmentTestBase.java b/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryEnvironmentTestBase.java index 3bac8be70848..4bd1dc3b393c 100644 --- a/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryEnvironmentTestBase.java +++ b/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryEnvironmentTestBase.java @@ -57,8 +57,9 @@ protected Object[][] provideQueries() { + " GROUP BY a.col1, a.col2"}, new Object[]{"SELECT a.col1, AVG(b.col3) FROM a JOIN b ON a.col1 = b.col2 " + " WHERE a.col3 >= 0 AND a.col2 = 'a' AND b.col3 < 0 GROUP BY a.col1"}, - new Object[]{"SELECT a.col1, COUNT(*) FROM a WHERE a.col3 >= 0 AND a.col2 = 'a' GROUP BY a.col1" - + " HAVING COUNT(*) > 10"}, + new Object[]{"SELECT a.col1, COUNT(*), SUM(a.col3) FROM a WHERE a.col3 >= 0 AND a.col2 = 'a' GROUP BY a.col1 " + + "HAVING COUNT(*) > 10 AND MAX(a.col3) >= 0 AND MIN(a.col3) < 20 AND SUM(a.col3) <= 10 " + + "AND AVG(a.col3) = 5"}, }; } } diff --git a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/FilterOperator.java b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/FilterOperator.java index 90b247e65f49..ab5356c0a472 100644 --- a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/FilterOperator.java +++ b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/FilterOperator.java @@ -33,7 +33,7 @@ public class FilterOperator extends BaseOperator { - private static final String EXPLAIN_NAME = "HAVING_FILTER"; + private static final String EXPLAIN_NAME = "FILTER"; private final BaseOperator _upstreamOperator; private final FilterOperand _filterOperand; private final DataSchema _dataSchema; diff --git a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/QueryRunnerTest.java b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/QueryRunnerTest.java index 875f02b75612..f74b7dcffc77 100644 --- a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/QueryRunnerTest.java +++ b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/QueryRunnerTest.java @@ -140,8 +140,13 @@ private Object[][] provideTestSqlAndRowCount() { + " (SELECT a.col2 AS joinKey, MAX(a.col3) AS maxVal FROM a GROUP BY a.col2) AS i " + " ON b.col1 = i.joinKey", 3}, - // Aggregate query with HAVING clause - new Object[]{"SELECT a.col2, COUNT(*) FROM a GROUP BY a.col2 HAVING COUNT(*) < 5", 1}, + // Aggregate query with HAVING clause, + // - "foo" and "bar" occurred 6 times each and "alice" occurred 3 times. --> COUNT(*) < 5 matches "alice" + // - col2=="foo"<->col3==1, col2=="bar"<->col3==2, col2="alice"<->col3==42, so SUM(col3) >= 10 matches "bar" + // - last condition doesn't match anything. + new Object[]{"SELECT a.col2, COUNT(*), MAX(a.col3), MIN(a.col3), SUM(a.col3) FROM a GROUP BY a.col2 " + + "HAVING COUNT(*) < 5 OR (COUNT(*) > 5 AND SUM(a.col3) >= 10) " + + "OR (MIN(a.col3) != 20 AND SUM(a.col3) = 100)", 2}, }; } }