1818//! DFSchema is an extended schema struct that DataFusion uses to provide support for
1919//! fields with optional relation names.
2020
21- use std:: collections:: { BTreeSet , HashMap , HashSet } ;
21+ use std:: collections:: { HashMap , HashSet } ;
2222use std:: fmt:: { Display , Formatter } ;
2323use std:: hash:: Hash ;
2424use std:: sync:: Arc ;
@@ -154,7 +154,6 @@ impl DFSchema {
154154 field_qualifiers : qualifiers,
155155 functional_dependencies : FunctionalDependencies :: empty ( ) ,
156156 } ;
157- dfschema. check_names ( ) ?;
158157 Ok ( dfschema)
159158 }
160159
@@ -183,7 +182,6 @@ impl DFSchema {
183182 field_qualifiers : vec ! [ None ; field_count] ,
184183 functional_dependencies : FunctionalDependencies :: empty ( ) ,
185184 } ;
186- dfschema. check_names ( ) ?;
187185 Ok ( dfschema)
188186 }
189187
@@ -201,7 +199,6 @@ impl DFSchema {
201199 field_qualifiers : vec ! [ Some ( qualifier) ; schema. fields. len( ) ] ,
202200 functional_dependencies : FunctionalDependencies :: empty ( ) ,
203201 } ;
204- schema. check_names ( ) ?;
205202 Ok ( schema)
206203 }
207204
@@ -215,40 +212,9 @@ impl DFSchema {
215212 field_qualifiers : qualifiers,
216213 functional_dependencies : FunctionalDependencies :: empty ( ) ,
217214 } ;
218- dfschema. check_names ( ) ?;
219215 Ok ( dfschema)
220216 }
221217
222- /// Check if the schema have some fields with the same name
223- pub fn check_names ( & self ) -> Result < ( ) > {
224- let mut qualified_names = BTreeSet :: new ( ) ;
225- let mut unqualified_names = BTreeSet :: new ( ) ;
226-
227- for ( field, qualifier) in self . inner . fields ( ) . iter ( ) . zip ( & self . field_qualifiers ) {
228- if let Some ( qualifier) = qualifier {
229- if !qualified_names. insert ( ( qualifier, field. name ( ) ) ) {
230- return _schema_err ! ( SchemaError :: DuplicateQualifiedField {
231- qualifier: Box :: new( qualifier. clone( ) ) ,
232- name: field. name( ) . to_string( ) ,
233- } ) ;
234- }
235- } else if !unqualified_names. insert ( field. name ( ) ) {
236- return _schema_err ! ( SchemaError :: DuplicateUnqualifiedField {
237- name: field. name( ) . to_string( )
238- } ) ;
239- }
240- }
241-
242- for ( qualifier, name) in qualified_names {
243- if unqualified_names. contains ( name) {
244- return _schema_err ! ( SchemaError :: AmbiguousReference {
245- field: Column :: new( Some ( qualifier. clone( ) ) , name)
246- } ) ;
247- }
248- }
249- Ok ( ( ) )
250- }
251-
252218 /// Assigns functional dependencies.
253219 pub fn with_functional_dependencies (
254220 mut self ,
@@ -285,7 +251,6 @@ impl DFSchema {
285251 field_qualifiers : new_qualifiers,
286252 functional_dependencies : FunctionalDependencies :: empty ( ) ,
287253 } ;
288- new_self. check_names ( ) ?;
289254 Ok ( new_self)
290255 }
291256
@@ -1141,10 +1106,10 @@ mod tests {
11411106 fn join_qualified_duplicate ( ) -> Result < ( ) > {
11421107 let left = DFSchema :: try_from_qualified_schema ( "t1" , & test_schema_1 ( ) ) ?;
11431108 let right = DFSchema :: try_from_qualified_schema ( "t1" , & test_schema_1 ( ) ) ?;
1144- let join = left. join ( & right) ;
1109+ let join = left. join ( & right) ? ;
11451110 assert_eq ! (
1146- join . unwrap_err ( ) . strip_backtrace ( ) ,
1147- "Schema error: Schema contains duplicate qualified field name t1.c0" ,
1111+ "fields:[t1.c0, t1.c1, t1.c0, t1.c1], metadata:{}" ,
1112+ join . to_string ( )
11481113 ) ;
11491114 Ok ( ( ) )
11501115 }
@@ -1153,11 +1118,8 @@ mod tests {
11531118 fn join_unqualified_duplicate ( ) -> Result < ( ) > {
11541119 let left = DFSchema :: try_from ( test_schema_1 ( ) ) ?;
11551120 let right = DFSchema :: try_from ( test_schema_1 ( ) ) ?;
1156- let join = left. join ( & right) ;
1157- assert_eq ! (
1158- join. unwrap_err( ) . strip_backtrace( ) ,
1159- "Schema error: Schema contains duplicate unqualified field name c0"
1160- ) ;
1121+ let join = left. join ( & right) ?;
1122+ assert_eq ! ( "fields:[c0, c1, c0, c1], metadata:{}" , join. to_string( ) ) ;
11611123 Ok ( ( ) )
11621124 }
11631125
@@ -1190,10 +1152,11 @@ mod tests {
11901152 fn join_mixed_duplicate ( ) -> Result < ( ) > {
11911153 let left = DFSchema :: try_from_qualified_schema ( "t1" , & test_schema_1 ( ) ) ?;
11921154 let right = DFSchema :: try_from ( test_schema_1 ( ) ) ?;
1193- let join = left. join ( & right) ;
1194- assert_contains ! ( join. unwrap_err( ) . to_string( ) ,
1195- "Schema error: Schema contains qualified \
1196- field name t1.c0 and unqualified field name c0 which would be ambiguous") ;
1155+ let join = left. join ( & right) ?;
1156+ assert_eq ! (
1157+ "fields:[t1.c0, t1.c1, c0, c1], metadata:{}" ,
1158+ join. to_string( )
1159+ ) ;
11971160 Ok ( ( ) )
11981161 }
11991162
0 commit comments