findepi commented on code in PR #12224:
URL: https://github.com/apache/datafusion/pull/12224#discussion_r1738528813
##########
datafusion/functions/src/string/concat.rs:
##########
@@ -64,13 +66,19 @@ impl ScalarUDFImpl for ConcatFunc {
&self.signature
}
- fn return_type(&self, _arg_types: &[DataType]) -> Result<DataType> {
- Ok(Utf8)
+ fn return_type(&self, arg_types: &[DataType]) -> Result<DataType> {
+ use DataType::*;
+ Ok(match &arg_types[0] {
+ Utf8View => Utf8View,
+ LargeUtf8 => LargeUtf8,
+ _ => Utf8,
+ })
Review Comment:
yes, that's my intuition
except that i would keep building StringArray and just declare return type
as Utf8 always
from the issue https://github.com/apache/datafusion/issues/11836
> Currently, a call to CONCAT with a Utf8View datatypes induces a cast.
After the change that fixes this issue, it should not.
this is about _inputs_ to the function, not the return type
Side note:
String view could be an interesting return type if we wanted to optimize for
single non-null string view input and let it pass-through; but the code doesn't
do this today, not sure it's worth implementing for this edge case and it
should be independent of arguments order, ie not tied to the first input's type.
end of side note.
--
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]