findepi commented on code in PR #12224: URL: https://github.com/apache/datafusion/pull/12224#discussion_r1737223415
########## 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: the logic seems to assume all arguments are of the same type? also, why not always return `Utf8`? the code performing actual concatenation seems to be always the same. ########## 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, + }) } /// Concatenates the text representations of all the arguments. NULL arguments are ignored. /// concat('abcde', 2, NULL, 22) = 'abcde222' fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> { + let args_datatype = args[0].data_type(); Review Comment: - can the `args` slice be empty? - args_datatype denotes first argument's data type, so let's call the variable to reflect that -- 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