findepi commented on code in PR #13517: URL: https://github.com/apache/datafusion/pull/13517#discussion_r1853489879
########## datafusion/expr/src/logical_plan/ddl.rs: ########## @@ -633,4 +1160,87 @@ mod test { assert_eq!(drop_view.partial_cmp(&catalog), Some(Ordering::Greater)); } + + #[test] + fn test_check_fields_unique() -> Result<()> { + // no duplicate fields, unqualified schema + check_fields_unique(&DFSchema::try_from(Schema::new(vec![ + Field::new("c100", DataType::Boolean, true), + Field::new("c101", DataType::Boolean, true), + ]))?)?; + + // no duplicate fields, qualified schema + check_fields_unique(&DFSchema::try_from_qualified_schema( + "t1", + &Schema::new(vec![ + Field::new("c100", DataType::Boolean, true), + Field::new("c101", DataType::Boolean, true), + ]), + )?)?; + + // duplicate unqualified field name + assert_eq!( + check_fields_unique(&DFSchema::try_from(Schema::new(vec![ + Field::new("c0", DataType::Boolean, true), + Field::new("c1", DataType::Boolean, true), + Field::new("c1", DataType::Boolean, true), + Field::new("c2", DataType::Boolean, true), + ]))?) + .unwrap_err() + .strip_backtrace() + .to_string(), + "Schema error: Schema contains duplicate unqualified field name c1" + ); + + // duplicate qualified field with same qualifier + assert_eq!( + DFSchema::try_from_qualified_schema( + "t1", + &Schema::new(vec![ + Field::new("c1", DataType::Boolean, true), + Field::new("c1", DataType::Boolean, true), + ]) + ) + // if schema construction succeeds (due to future changes in DFSchema), call check_fields_unique on it + .unwrap_err() + .strip_backtrace() + .to_string(), + "Schema error: Schema contains duplicate qualified field name t1.c1" + ); + + // duplicate qualified and unqualified field + assert_eq!( + DFSchema::from_field_specific_qualified_schema( + vec![ + None, + Some(TableReference::from("t1")), + ], + &Arc::new(Schema::new(vec![ + Field::new("c1", DataType::Boolean, true), + Field::new("c1", DataType::Boolean, true), + ])) + ) + // if schema construction succeeds (due to future changes in DFSchema), call check_fields_unique on it + .unwrap_err().strip_backtrace().to_string(), + "Schema error: Schema contains qualified field name t1.c1 and unqualified field name c1 which would be ambiguous" + ); + + // qualified fields with duplicate unqualified names + assert_eq!( + check_fields_unique(&DFSchema::from_field_specific_qualified_schema( + vec![ + Some(TableReference::from("t1")), + Some(TableReference::from("t2")), + ], + &Arc::new(Schema::new(vec![ + Field::new("c1", DataType::Boolean, true), + Field::new("c1", DataType::Boolean, true), + ])) + )?) + .unwrap_err().strip_backtrace().to_string(), + "Schema error: Schema contains qualified fields with duplicate unqualified names t1.c1" Review Comment: we can wrap them in brackets `[...]` to clearly separate from surrounding text, while making it kind of obvious we're not bothering to produce proper quoted identifiers. -- 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