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",
