Claude Brisson created CALCITE-6402:
---------------------------------------

             Summary: Aggregates implied in grouping sets have a wrong 
nullability at validation stage
                 Key: CALCITE-6402
                 URL: https://issues.apache.org/jira/browse/CALCITE-6402
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.36.0
            Reporter: Claude Brisson


As long as the empty set is present among the grouping sets, which is always 
the case for CUBE and ROLLAP, the (unfiltered) result will contain a row with 
the global aggregate. And on such a row, most standard aggregate functions are 
nullable (even on a non-null column, for the empty rowset).

But the SUM function, for instance, has the following return type inference:

{code}
  public static final SqlReturnTypeInference AGG_SUM = opBinding -> {
    final RelDataTypeFactory typeFactory = opBinding.getTypeFactory();
    final RelDataType type = typeFactory.getTypeSystem()
        .deriveSumType(typeFactory, opBinding.getOperandType(0));
    if (opBinding.getGroupCount() == 0 || opBinding.hasFilter()) {
      return typeFactory.createTypeWithNullability(type, true);
    } else {
      return type;
    }
  };
{code}

If the operand is not nullable, since the group count will be non-zero for a 
rollup, a cube or a grouping sets containing the empty set.

It seems to me that the group count itself is not a sufficient information to 
determine the nullability, we may be lacking a boolean stating whether the 
empty group is implied, or the complete list of groups instead of the groups 
count.





--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to