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


Reply via email to