diff --git a/be/src/exprs/agg-fn-evaluator.cc b/be/src/exprs/agg-fn-evaluator.cc index 3cad9fcc0..63d0cb68e 100644 --- a/be/src/exprs/agg-fn-evaluator.cc +++ b/be/src/exprs/agg-fn-evaluator.cc @@ -124,9 +124,13 @@ Status AggFnEvaluator::Prepare(RuntimeState* state, const RowDescriptor& desc, const SlotDescriptor* output_slot_desc, MemPool* agg_fn_pool, FunctionContext** agg_fn_ctx) { DCHECK(intermediate_slot_desc != NULL); + DCHECK_EQ(intermediate_slot_desc->type().type, + ColumnType(fn_.aggregate_fn.intermediate_type).type); DCHECK(intermediate_slot_desc_ == NULL); intermediate_slot_desc_ = intermediate_slot_desc; + DCHECK(output_slot_desc != NULL); + DCHECK_EQ(output_slot_desc->type().type, ColumnType(fn_.ret_type).type); DCHECK(output_slot_desc_ == NULL); output_slot_desc_ = output_slot_desc; diff --git a/fe/src/main/java/com/cloudera/impala/analysis/NullLiteral.java b/fe/src/main/java/com/cloudera/impala/analysis/NullLiteral.java index d3c5c49b6..94f1c6226 100644 --- a/fe/src/main/java/com/cloudera/impala/analysis/NullLiteral.java +++ b/fe/src/main/java/com/cloudera/impala/analysis/NullLiteral.java @@ -80,4 +80,10 @@ public class NullLiteral extends LiteralExpr { @Override public Expr clone() { return new NullLiteral(this); } + + @Override + protected void resetAnalysisState() { + super.resetAnalysisState(); + type_ = Type.NULL; + } } diff --git a/testdata/workloads/functional-query/queries/QueryTest/aggregation.test b/testdata/workloads/functional-query/queries/QueryTest/aggregation.test index 72accfdc9..532da772f 100644 --- a/testdata/workloads/functional-query/queries/QueryTest/aggregation.test +++ b/testdata/workloads/functional-query/queries/QueryTest/aggregation.test @@ -1111,3 +1111,11 @@ true,1,1,1,1.100000023841858,10.1,'1',2009-03-01 00:00:00 ---- TYPES BOOLEAN, TINYINT, SMALLINT, INT, FLOAT, DOUBLE, STRING, TIMESTAMP ==== +---- QUERY +# IMPALA-1419: Agg fn containing arithmetic expr on NULL fails +select count(null * 1) from functional.alltypes +---- RESULTS +0 +---- TYPES +BIGINT +==== diff --git a/testdata/workloads/functional-query/queries/QueryTest/analytic-fns.test b/testdata/workloads/functional-query/queries/QueryTest/analytic-fns.test index d1478103f..9b3a8f7f7 100644 --- a/testdata/workloads/functional-query/queries/QueryTest/analytic-fns.test +++ b/testdata/workloads/functional-query/queries/QueryTest/analytic-fns.test @@ -1052,3 +1052,19 @@ order by t2.id limit 10 ---- TYPES BIGINT, INT, BOOLEAN ==== +---- QUERY +# IMPALA-1542: Analytic fn containing arithmetic expr on NULL crashed +select lag(coalesce(505, 1 + NULL), 1) over (order by int_col desc) +from functional.alltypestiny +---- RESULTS +NULL +505 +505 +505 +505 +505 +505 +505 +---- TYPES +SMALLINT +====