seddonm1 commented on a change in pull request #9565: URL: https://github.com/apache/arrow/pull/9565#discussion_r583147592
########## File path: rust/datafusion/src/physical_plan/type_coercion.rs ########## @@ -168,20 +168,35 @@ fn maybe_data_types( pub fn can_coerce_from(type_into: &DataType, type_from: &DataType) -> bool { use self::DataType::*; match type_into { - Int8 => matches!(type_from, Int8), - Int16 => matches!(type_from, Int8 | Int16 | UInt8), - Int32 => matches!(type_from, Int8 | Int16 | Int32 | UInt8 | UInt16), + Int8 => matches!(type_from, Int8 | Utf8 | LargeUtf8), Review comment: @alamb I think you have hit on a bigger issue. Postgres will do this type coercion silently: `SELECT LEFT('abcde', '1');` will return `a`. And `SELECT LEFT('abcde', 'a');` will return `invalid input syntax for type integer: "a"`. I think the default return of a failed `CAST` in DataFusion is currently `NULL` which is not good and not an ANSI expected behavior. I will volunteer to fix it if we can reach a consensus. This is one of my major issues with Spark. Some other engines explicitly call out this behavior with `SAFE CAST`. ---------------------------------------------------------------- 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org