diff --git a/datafusion/common/src/dfschema.rs b/datafusion/common/src/dfschema.rs index 99fb179c76a3..9d1bf2d63200 100644 --- a/datafusion/common/src/dfschema.rs +++ b/datafusion/common/src/dfschema.rs @@ -25,8 +25,8 @@ use std::sync::Arc; use crate::error::{DataFusionError, Result, _plan_err, _schema_err}; use crate::{ - field_not_found, unqualified_field_not_found, Column, FunctionalDependencies, - SchemaError, TableReference, + field_not_found, unqualified_field_not_found, Column, Diagnostic, + FunctionalDependencies, SchemaError, TableReference, }; use arrow::compute::can_cast_types; @@ -230,6 +230,13 @@ impl DFSchema { return _schema_err!(SchemaError::DuplicateQualifiedField { qualifier: Box::new(qualifier.clone()), name: field.name().to_string(), + }) + .map_err(|err| { + let diagnostic = Diagnostic::new_error( + format!("duplicate qualified field name '{}'", field.name()), + None, + ); + err.with_diagnostic(diagnostic) }); } } else if !unqualified_names.insert(field.name()) { diff --git a/datafusion/sql/tests/cases/diagnostic.rs b/datafusion/sql/tests/cases/diagnostic.rs index 9dae2d0c3e93..a83995b68c52 100644 --- a/datafusion/sql/tests/cases/diagnostic.rs +++ b/datafusion/sql/tests/cases/diagnostic.rs @@ -130,6 +130,14 @@ fn get_spans(query: &'static str) -> HashMap { spans } +#[test] +fn test_table_duplicate_name() -> Result<()> { + let query = "SELECT /*a*/id/*a*/ FROM person a, person a"; + let diag = do_query(query); + assert_eq!(diag.message, "duplicate qualified field name 'id'"); + Ok(()) +} + #[test] fn test_table_not_found() -> Result<()> { let query = "SELECT * FROM /*a*/personx/*a*/";