IMPALA-4682: Remove Preconditions check from analyzeAggregation().

When one runs a query like

'select * from t order by count(a)'

we are incorrectly throwing an IllegalStateException, with a
Preconditions check which asserts that the column is not "*". Now,
this query is invalid, and we are correctly handling it if "*" is
replaced by a specific column:

'select a from t order by count(b)'

which produces the error message

"ERROR: AnalysisException: select list expression not produced by
aggregation output (missing from GROUP BY clause?): a"

This patch fixes the handling of "*" in this context, by removing
the Preconditions check, so that the error becomes

"ERROR: AnalysisException: select list expression not produced by
aggregation output (missing from GROUP BY clause?): *"

Note that the second changed line is required because
selectListItem.Expr_ is null when SelectListItem.isStar_ is true.

A new FE unit test has been added for this use case.

Change-Id: I57c20aeed401275d45913fedfd61c206c38641b7
Reviewed-on: http://gerrit.cloudera.org:8080/8143
Reviewed-by: Alex Behm <[email protected]>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/e5703433
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/e5703433
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/e5703433

Branch: refs/heads/master
Commit: e5703433200007e634d7d9fdc895a1dbbdd4b3f4
Parents: 2747d52
Author: Zoram Thanga <[email protected]>
Authored: Tue Sep 26 13:27:38 2017 -0700
Committer: Impala Public Jenkins <[email protected]>
Committed: Tue Oct 10 02:37:42 2017 +0000

----------------------------------------------------------------------
 fe/src/main/java/org/apache/impala/analysis/SelectStmt.java       | 3 +--
 fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java | 3 +++
 2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/e5703433/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java 
b/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
index c146247..068e09a 100644
--- a/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
@@ -725,11 +725,10 @@ public class SelectStmt extends QueryStmt {
     for (int i = 0; i < selectList_.getItems().size(); ++i) {
       if (!resultExprs_.get(i).isBound(finalAggInfo.getOutputTupleId())) {
         SelectListItem selectListItem = selectList_.getItems().get(i);
-        Preconditions.checkState(!selectListItem.isStar());
         throw new AnalysisException(
             "select list expression not produced by aggregation output "
             + "(missing from GROUP BY clause?): "
-            + selectListItem.getExpr().toSql());
+            + selectListItem.toSql());
       }
     }
     if (orderByElements_ != null) {

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/e5703433/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java 
b/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java
index b22ca81..1032d07 100644
--- a/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java
+++ b/fe/src/test/java/org/apache/impala/analysis/AnalyzeStmtsTest.java
@@ -1940,6 +1940,9 @@ public class AnalyzeStmtsTest extends AnalyzerTest {
     AnalysisError("select functional.alltypes.*, max(string_col) from " +
         "functional.alltypes", "cannot combine '*' in select list with 
grouping or " +
         "aggregation");
+    AnalysisError("select * from functional.alltypes order by count(*)",
+        "select list expression not produced by aggregation output " +
+        "(missing from GROUP BY clause?): *");
 
     // only count() allows '*'
     AnalysisError("select avg(*) from functional.testtbl",

Reply via email to