Claude Brisson created CALCITE-6621: ---------------------------------------
Summary: RexBuilder.makeOver() should not try to nullify a null result Key: CALCITE-6621 URL: https://issues.apache.org/jira/browse/CALCITE-6621 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.38.0 Reporter: Claude Brisson This is probably linked to CALCITE-6020. In a window function that uses the nullable {{SUM}} aggregation operator, {{RexBuilder.makeOver()}} will produce the following construct: {code:java} CASE((COUNT($0) OVER (...), 0), SUM($0) OVER (...), null:BIGINT) {code} which is both useless and inefficient. Using this construct should only be done for non-nullable aggregation operators like {{SUM0}} (that's the only one I can think of). The workaround is to inherit {{RexBuilder}} and override {{makeOver() }}as follow: {code:java} public RexNode makeOver( RelDataType type, SqlAggFunction operator, List<RexNode> exprs, List<RexNode> partitionKeys, ImmutableList<RexFieldCollation> orderKeys, RexWindowBound lowerBound, RexWindowBound upperBound, RexWindowExclusion exclude, boolean rows, boolean allowPartial, boolean nullWhenCountZero, boolean distinct, boolean ignoreNulls) { return super.makeOver( type, operator, exprs, partitionKeys, orderKeys, lowerBound, upperBound, exclude, rows, allowPartial, nullWhenCountZero && operator.getKind() == SqlKind.SUM0, distinct, ignoreNulls ); {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)