Allow UDFs to return custom Diagnostic (original) (raw)

When implementing ScalarUDFImpl, AggregateUDFImpl, or WindowUDFImpl, it would be very cool to have the chance to return a custom Diagnostic either during the planning phase or the execution phase. Currently, you can return errors e.g. in ScalarUDFImpl::return_type_from_args or ScalarUDFImpl::invoke, but no Spans are available there so there's no way to construct a Diagnostic that highlights the call expression, or a specific argument of the function, for instance.

Describe the solution you'd like

Add a FnCallSpans types that bundles:

Add a diagnose trait function (defaults to doing nothing) which is called during logical planning and is given the types of the arguments for a particular callsite, as well as an instance of FnCallSpans. The implementor can here construct a Diagnostic and return an errors that contains it. The logical planner would bubble up the error.

Also add a FnCallSpans field to ScalarFunctionArgs (and equivalently for aggregate and window functions) so the implementor, in ScalarUDFImpl::invoke_with_args, can create Diagnostics for a particular execution as well. This shouldn't be too big of a breaking change, unless users are using struct destruction syntax with ScalarFunctionArgs.

Describe alternatives you've considered

No response

Additional context

No response