@@ -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