findepi commented on code in PR #11256: URL: https://github.com/apache/datafusion/pull/11256#discussion_r1666020300
########## datafusion/expr/src/expr_schema.rs: ########## @@ -322,10 +322,16 @@ impl ExprSchemable for Expr { } } Expr::Cast(Cast { expr, .. }) => expr.nullable(input_schema), - Expr::AggregateFunction(AggregateFunction { func_def, .. }) => { + Expr::AggregateFunction(AggregateFunction { func_def, args, .. }) => { match func_def { + // TODO: min/max over non-nullable input should be recognized as non-nullable AggregateFunctionDefinition::BuiltIn(fun) => fun.nullable(), // TODO: UDF should be able to customize nullability Review Comment: To address this TODO we could extend the pattern here https://github.com/apache/datafusion/blob/4bc322819f28695b6b9593d5bbaea775e7d798b6/datafusion/expr/src/aggregate_function.rs#L84-L88 ie now we have `return_type(input_types, nullability) -> return_type` we could have `return_type(input_types, nullability) -> (return_type, nullability)` this is an API for builtin functions, we would need similar API for UDAFs https://github.com/apache/datafusion/blob/5f02c8a0658d9ed012ca4ca91f0417a967fe094a/datafusion/expr/src/udaf.rs#L330 Obviously, this would be a breaking change: both method signature and return type would change. We can avoid the breaking change by making nullability a separate method, but it would be good to first determine the ideal end-state, and only then think how to get there. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For additional commands, e-mail: github-h...@datafusion.apache.org