zhuqi-lucas commented on code in PR #14572: URL: https://github.com/apache/datafusion/pull/14572#discussion_r1954710305
########## datafusion/common/src/dfschema.rs: ########## @@ -1028,21 +1028,41 @@ impl SchemaExt for Schema { }) } - fn logically_equivalent_names_and_types(&self, other: &Self) -> bool { + fn logically_equivalent_names_and_types(&self, other: &Self) -> Result<()> { if self.fields().len() != other.fields().len() { - return false; + _plan_err!( + "Inserting query must have the same schema length as the table. \ + Expected table schema length: {}, got: {}", + self.fields().len(), + other.fields().len() + ) + } else { + self.fields() + .iter() + .zip(other.fields().iter()) + .try_for_each(|(f1, f2)| { + // only check the case when the table field is not nullable and the insert data field is nullable + if !f1.is_nullable() && f2.is_nullable() { Review Comment: ```rust DataFusion CLI v45.0.0 > create table t1(a int not null) as values(1); 0 row(s) fetched. Elapsed 0.012 seconds. > create table t2(a int) as values(null); 0 row(s) fetched. Elapsed 0.003 seconds. > select * from t1 union all select * from t2; +------+ | a | +------+ | NULL | | 1 | +------+ 2 row(s) fetched. Elapsed 0.004 seconds. ``` Thanks @jonahgao , got it now, we may need to make the output schema unified if we have nullable field for any input. For example, above case, we need to make sure the schema is nullable for output. -- 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