Skip to content

Commit e73a43c

Browse files
authored
Bug fix on DFField to Field conversion (#3965)
1 parent 8792a01 commit e73a43c

File tree

1 file changed

+25
-19
lines changed

1 file changed

+25
-19
lines changed

datafusion/common/src/dfschema.rs

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,10 @@ impl DFSchema {
315315
if !can_cast_types(r_field.data_type(), l_field.data_type()) {
316316
Err(DataFusionError::Plan(
317317
format!("Column {} (type: {}) is not compatible with column {} (type: {})",
318-
r_field.name(),
319-
r_field.data_type(),
320-
l_field.name(),
321-
l_field.data_type())))
318+
r_field.name(),
319+
r_field.data_type(),
320+
l_field.name(),
321+
l_field.data_type())))
322322
} else {
323323
Ok(())
324324
}
@@ -367,21 +367,7 @@ impl From<DFSchema> for Schema {
367367
/// Convert DFSchema into a Schema
368368
fn from(df_schema: DFSchema) -> Self {
369369
Schema::new_with_metadata(
370-
df_schema
371-
.fields
372-
.into_iter()
373-
.map(|f| {
374-
if f.qualifier().is_some() {
375-
Field::new(
376-
f.name().as_str(),
377-
f.data_type().to_owned(),
378-
f.is_nullable(),
379-
)
380-
} else {
381-
f.field
382-
}
383-
})
384-
.collect(),
370+
df_schema.fields.into_iter().map(|f| f.field).collect(),
385371
df_schema.metadata,
386372
)
387373
}
@@ -608,6 +594,7 @@ impl DFField {
608594
mod tests {
609595
use super::*;
610596
use arrow::datatypes::DataType;
597+
use std::collections::BTreeMap;
611598

612599
#[test]
613600
fn from_unqualified_field() {
@@ -805,6 +792,25 @@ mod tests {
805792
Field::new("c1", DataType::Boolean, true),
806793
])
807794
}
795+
#[test]
796+
fn test_dfschema_to_schema_convertion() {
797+
let mut a: DFField = DFField::new(Some("table1"), "a", DataType::Int64, false);
798+
let mut b: DFField = DFField::new(Some("table1"), "b", DataType::Int64, false);
799+
let mut a_metadata = BTreeMap::new();
800+
a_metadata.insert("key".to_string(), "value".to_string());
801+
a.field.set_metadata(Some(a_metadata));
802+
let mut b_metadata = BTreeMap::new();
803+
b_metadata.insert("key".to_string(), "value".to_string());
804+
b.field.set_metadata(Some(b_metadata));
805+
806+
let df_schema = Arc::new(
807+
DFSchema::new_with_metadata([a, b].to_vec(), HashMap::new()).unwrap(),
808+
);
809+
let schema: Schema = df_schema.as_ref().clone().into();
810+
let a_df = df_schema.fields.get(0).unwrap().field();
811+
let a_arrow = schema.fields.get(0).unwrap();
812+
assert_eq!(a_df.metadata(), a_arrow.metadata())
813+
}
808814

809815
fn test_schema_2() -> Schema {
810816
Schema::new(vec![

0 commit comments

Comments
 (0)