jkosh44 commented on code in PR #15237:
URL: https://github.com/apache/datafusion/pull/15237#discussion_r1996444071
##########
docs/source/library-user-guide/upgrading.md:
##########
@@ -212,4 +212,79 @@ To include special characters (such as newlines via `\n`)
you can use an `E` lit
Elapsed 0.005 seconds.
```
+### More expressive scalar array function signatures
+
+Datafusion 46 has changed the way scalar array function signatures are
+declared. Previously, functions needed to select from a list of predefined
+signatures within the `ArrayFunctionSignature` enum. Now the signatures
+can be defined via a `Vector` of psuedo-types, which each correspond to a
+single argument. Those psuedo-types are the variants of the
+`ArrayFunctionArgument` enum and are as follows:
+
+ - `Array`: An argument of type List/LargeList/FixedSizeList. All Array
+ arguments must be coercible to the same type.
+ - `Element`: An argument that is coercible to the inner type of the `Array`
+ arguments.
+ - `Index`: An `Int64` argument.
+
+Each of the old variants can be converted to the new format as follows:
+
+`TypeSignature::ArraySignature(ArrayFunctionSignature::ArrayAndElement)`:
+```rust
+TypeSignature::ArraySignature(ArrayFunctionSignature::Array {
+ arguments: vec![ArrayFunctionArgument::Array,
ArrayFunctionArgument::Element],
+ array_coercion: Some(ListCoercion::FixedSizedListToList),
+});
+```
+
+`TypeSignature::ArraySignature(ArrayFunctionSignature::ElementAndArray)`:
+```rust
+TypeSignature::ArraySignature(ArrayFunctionSignature::Array {
+ arguments: vec![ArrayFunctionArgument::Element,
ArrayFunctionArgument::Array],
+ array_coercion: Some(ListCoercion::FixedSizedListToList),
+})
+```
+
+`TypeSignature::ArraySignature(ArrayFunctionSignature::ArrayAndIndex)`:
+```rust
+TypeSignature::ArraySignature(ArrayFunctionSignature::Array {
+ arguments: vec![ArrayFunctionArgument::Array,
ArrayFunctionArgument::Index],
+ array_coercion: None,
+})
+```
+
+`TypeSignature::ArraySignature(ArrayFunctionSignature::ArrayAndElementAndOptionalIndex)`:
+```rust
+TypeSignature::OneOf(vec![
+ TypeSignature::ArraySignature(ArrayFunctionSignature::Array {
+ arguments: vec![ArrayFunctionArgument::Array,
ArrayFunctionArgument::Element],
+ array_coercion: None,
+ }),
+ TypeSignature::ArraySignature(ArrayFunctionSignature::Array {
+ arguments: vec![
+ ArrayFunctionArgument::Array,
+ ArrayFunctionArgument::Element,
+ ArrayFunctionArgument::Index,
+ ],
+ array_coercion: None,
+ }),
+])
+```
+
+`TypeSignature::ArraySignature(ArrayFunctionSignature::Array)`:
+```rust
+TypeSignature::ArraySignature(ArrayFunctionSignature::Array {
+ arguments: vec![ArrayFunctionArgument::Array],
+ array_coercion: None,
+})
+```
Review Comment:
I am not at all a fan of how I formatted this, but I couldn't think of
anything better. So I am very open to suggestions.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]