Skip to content

Commit f4a80ab

Browse files
committed
do not override nullability and conditionally override datatype
1 parent 58a72b8 commit f4a80ab

File tree

1 file changed

+17
-10
lines changed
  • datafusion/expr/src/logical_plan

1 file changed

+17
-10
lines changed

datafusion/expr/src/logical_plan/plan.rs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -645,12 +645,18 @@ impl LogicalPlan {
645645
.iter()
646646
.zip(new_plan.schema().fields())
647647
.map(|((table_ref, old_field), new_field)| {
648-
let field = old_field
649-
.as_ref()
650-
.clone()
651-
.with_data_type(new_field.data_type().clone())
652-
.with_nullable(new_field.is_nullable());
653-
(table_ref.cloned(), Arc::new(field))
648+
// `old_field`'s data type is unknown but `new_field`'s is known
649+
if old_field.data_type().is_null()
650+
&& !new_field.data_type().is_null()
651+
{
652+
let field = old_field
653+
.as_ref()
654+
.clone()
655+
.with_data_type(new_field.data_type().clone());
656+
(table_ref.cloned(), Arc::new(field))
657+
} else {
658+
(table_ref.cloned(), Arc::clone(old_field))
659+
}
654660
})
655661
.collect::<Vec<_>>();
656662

@@ -659,6 +665,7 @@ impl LogicalPlan {
659665
schema.metadata().clone(),
660666
)?
661667
.with_functional_dependencies(schema.functional_dependencies().clone())?;
668+
662669
Ok(LogicalPlan::Values(Values {
663670
schema: Arc::new(schema),
664671
values,
@@ -4900,10 +4907,10 @@ mod tests {
49004907

49014908
// replaced
49024909
assert_snapshot!(plan.display_indent_schema(), @r#"
4903-
Projection: t.a, t.b, t.c, t.d [a:Int32;N, b:Int32;N, c:Utf8;N, d:Int32;N]
4904-
SubqueryAlias: t [a:Int32;N, b:Int32;N, c:Utf8;N, d:Int32;N]
4905-
Projection: column1 AS a, column2 AS b, column3 AS c, column4 AS d [a:Int32;N, b:Int32;N, c:Utf8;N, d:Int32;N]
4906-
Values: (Int32(1), Int32(1) AS $1, Utf8("s") AS $2, Int32(3) + Int32(4) AS $3 + $4) [column1:Int32;N, column2:Int32;N, column3:Utf8;N, column4:Int32;N]
4910+
Projection: t.a, t.b, t.c, t.d [a:Int32;N, b:Int32;N, c:Utf8;N, d:Int64;N]
4911+
SubqueryAlias: t [a:Int32;N, b:Int32;N, c:Utf8;N, d:Int64;N]
4912+
Projection: column1 AS a, column2 AS b, column3 AS c, column4 AS d [a:Int32;N, b:Int32;N, c:Utf8;N, d:Int64;N]
4913+
Values: (Int32(1), Int32(1) AS $1, Utf8("s") AS $2, Int32(3) + Int32(4) AS $3 + $4) [column1:Int32;N, column2:Int32;N, column3:Utf8;N, column4:Int64;N]
49074914
"#);
49084915
}
49094916

0 commit comments

Comments
 (0)