18
18
//! DFSchema is an extended schema struct that DataFusion uses to provide support for
19
19
//! fields with optional relation names.
20
20
21
- use std:: collections:: { BTreeSet , HashMap , HashSet } ;
21
+ use std:: collections:: { HashMap , HashSet } ;
22
22
use std:: fmt:: { Display , Formatter } ;
23
23
use std:: hash:: Hash ;
24
24
use std:: sync:: Arc ;
@@ -154,7 +154,6 @@ impl DFSchema {
154
154
field_qualifiers : qualifiers,
155
155
functional_dependencies : FunctionalDependencies :: empty ( ) ,
156
156
} ;
157
- dfschema. check_names ( ) ?;
158
157
Ok ( dfschema)
159
158
}
160
159
@@ -183,7 +182,6 @@ impl DFSchema {
183
182
field_qualifiers : vec ! [ None ; field_count] ,
184
183
functional_dependencies : FunctionalDependencies :: empty ( ) ,
185
184
} ;
186
- dfschema. check_names ( ) ?;
187
185
Ok ( dfschema)
188
186
}
189
187
@@ -201,7 +199,6 @@ impl DFSchema {
201
199
field_qualifiers : vec ! [ Some ( qualifier) ; schema. fields. len( ) ] ,
202
200
functional_dependencies : FunctionalDependencies :: empty ( ) ,
203
201
} ;
204
- schema. check_names ( ) ?;
205
202
Ok ( schema)
206
203
}
207
204
@@ -215,40 +212,9 @@ impl DFSchema {
215
212
field_qualifiers : qualifiers,
216
213
functional_dependencies : FunctionalDependencies :: empty ( ) ,
217
214
} ;
218
- dfschema. check_names ( ) ?;
219
215
Ok ( dfschema)
220
216
}
221
217
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
-
252
218
/// Assigns functional dependencies.
253
219
pub fn with_functional_dependencies (
254
220
mut self ,
@@ -285,7 +251,6 @@ impl DFSchema {
285
251
field_qualifiers : new_qualifiers,
286
252
functional_dependencies : FunctionalDependencies :: empty ( ) ,
287
253
} ;
288
- new_self. check_names ( ) ?;
289
254
Ok ( new_self)
290
255
}
291
256
@@ -1141,10 +1106,10 @@ mod tests {
1141
1106
fn join_qualified_duplicate ( ) -> Result < ( ) > {
1142
1107
let left = DFSchema :: try_from_qualified_schema ( "t1" , & test_schema_1 ( ) ) ?;
1143
1108
let right = DFSchema :: try_from_qualified_schema ( "t1" , & test_schema_1 ( ) ) ?;
1144
- let join = left. join ( & right) ;
1109
+ let join = left. join ( & right) ? ;
1145
1110
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 ( )
1148
1113
) ;
1149
1114
Ok ( ( ) )
1150
1115
}
@@ -1153,11 +1118,8 @@ mod tests {
1153
1118
fn join_unqualified_duplicate ( ) -> Result < ( ) > {
1154
1119
let left = DFSchema :: try_from ( test_schema_1 ( ) ) ?;
1155
1120
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( ) ) ;
1161
1123
Ok ( ( ) )
1162
1124
}
1163
1125
@@ -1190,10 +1152,11 @@ mod tests {
1190
1152
fn join_mixed_duplicate ( ) -> Result < ( ) > {
1191
1153
let left = DFSchema :: try_from_qualified_schema ( "t1" , & test_schema_1 ( ) ) ?;
1192
1154
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
+ ) ;
1197
1160
Ok ( ( ) )
1198
1161
}
1199
1162
0 commit comments