@@ -1722,7 +1722,10 @@ mod test {
17221722 let empty = empty_with_type ( DataType :: Int32 ) ;
17231723 let agg_expr = Expr :: AggregateFunction ( expr:: AggregateFunction :: new_udf (
17241724 avg_udaf ( ) ,
1725- vec ! [ cast( col( "a" ) , DataType :: Float64 ) ] ,
1725+ vec ! [ cast(
1726+ col( "a" ) ,
1727+ Arc :: new( Field :: new( "a" , DataType :: Float64 , true ) ) ,
1728+ ) ] ,
17261729 false ,
17271730 None ,
17281731 vec ! [ ] ,
@@ -1761,8 +1764,10 @@ mod test {
17611764 #[ test]
17621765 fn binary_op_date32_op_interval ( ) -> Result < ( ) > {
17631766 // CAST(Utf8("1998-03-18") AS Date32) + IntervalDayTime("...")
1764- let expr = cast ( lit ( "1998-03-18" ) , DataType :: Date32 )
1765- + lit ( ScalarValue :: new_interval_dt ( 123 , 456 ) ) ;
1767+ let expr = cast (
1768+ lit ( "1998-03-18" ) ,
1769+ Arc :: new ( Field :: new ( "date" , DataType :: Date32 , true ) ) ,
1770+ ) + lit ( ScalarValue :: new_interval_dt ( 123 , 456 ) ) ;
17661771 let empty = empty ( ) ;
17671772 let plan = LogicalPlan :: Projection ( Projection :: try_new ( vec ! [ expr] , empty) ?) ;
17681773
@@ -1811,8 +1816,10 @@ mod test {
18111816 let expr = col ( "a" ) . between (
18121817 lit ( "2002-05-08" ) ,
18131818 // (cast('2002-05-08' as date) + interval '1 months')
1814- cast ( lit ( "2002-05-08" ) , DataType :: Date32 )
1815- + lit ( ScalarValue :: new_interval_ym ( 0 , 1 ) ) ,
1819+ cast (
1820+ lit ( "2002-05-08" ) ,
1821+ Arc :: new ( Field :: new ( "date" , DataType :: Date32 , true ) ) ,
1822+ ) + lit ( ScalarValue :: new_interval_ym ( 0 , 1 ) ) ,
18161823 ) ;
18171824 let empty = empty_with_type ( Utf8 ) ;
18181825 let plan = LogicalPlan :: Filter ( Filter :: try_new ( expr, empty) ?) ;
@@ -1830,8 +1837,10 @@ mod test {
18301837 fn between_infer_cheap_type ( ) -> Result < ( ) > {
18311838 let expr = col ( "a" ) . between (
18321839 // (cast('2002-05-08' as date) + interval '1 months')
1833- cast ( lit ( "2002-05-08" ) , DataType :: Date32 )
1834- + lit ( ScalarValue :: new_interval_ym ( 0 , 1 ) ) ,
1840+ cast (
1841+ lit ( "2002-05-08" ) ,
1842+ Arc :: new ( Field :: new ( "date" , DataType :: Date32 , true ) ) ,
1843+ ) + lit ( ScalarValue :: new_interval_ym ( 0 , 1 ) ) ,
18351844 lit ( "2002-12-08" ) ,
18361845 ) ;
18371846 let empty = empty_with_type ( Utf8 ) ;
@@ -2075,7 +2084,10 @@ mod test {
20752084 ) ?) ;
20762085 let mut rewriter = TypeCoercionRewriter { schema : & schema } ;
20772086 let expr = is_true ( lit ( 12i32 ) . gt ( lit ( 13i64 ) ) ) ;
2078- let expected = is_true ( cast ( lit ( 12i32 ) , DataType :: Int64 ) . gt ( lit ( 13i64 ) ) ) ;
2087+ let expected = is_true (
2088+ cast ( lit ( 12i32 ) , Arc :: new ( Field :: new ( "a" , DataType :: Int64 , true ) ) )
2089+ . gt ( lit ( 13i64 ) ) ,
2090+ ) ;
20792091 let result = expr. rewrite ( & mut rewriter) . data ( ) ?;
20802092 assert_eq ! ( expected, result) ;
20812093
@@ -2086,7 +2098,10 @@ mod test {
20862098 ) ?) ;
20872099 let mut rewriter = TypeCoercionRewriter { schema : & schema } ;
20882100 let expr = is_true ( lit ( 12i32 ) . eq ( lit ( 13i64 ) ) ) ;
2089- let expected = is_true ( cast ( lit ( 12i32 ) , DataType :: Int64 ) . eq ( lit ( 13i64 ) ) ) ;
2101+ let expected = is_true (
2102+ cast ( lit ( 12i32 ) , Arc :: new ( Field :: new ( "a" , DataType :: Int64 , true ) ) )
2103+ . eq ( lit ( 13i64 ) ) ,
2104+ ) ;
20902105 let result = expr. rewrite ( & mut rewriter) . data ( ) ?;
20912106 assert_eq ! ( expected, result) ;
20922107
@@ -2097,7 +2112,10 @@ mod test {
20972112 ) ?) ;
20982113 let mut rewriter = TypeCoercionRewriter { schema : & schema } ;
20992114 let expr = is_true ( lit ( 12i32 ) . lt ( lit ( 13i64 ) ) ) ;
2100- let expected = is_true ( cast ( lit ( 12i32 ) , DataType :: Int64 ) . lt ( lit ( 13i64 ) ) ) ;
2115+ let expected = is_true (
2116+ cast ( lit ( 12i32 ) , Arc :: new ( Field :: new ( "a" , DataType :: Int64 , true ) ) )
2117+ . lt ( lit ( 13i64 ) ) ,
2118+ ) ;
21012119 let result = expr. rewrite ( & mut rewriter) . data ( ) ?;
21022120 assert_eq ! ( expected, result) ;
21032121
@@ -2108,9 +2126,16 @@ mod test {
21082126 fn binary_op_date32_eq_ts ( ) -> Result < ( ) > {
21092127 let expr = cast (
21102128 lit ( "1998-03-18" ) ,
2111- DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
2129+ Arc :: new ( Field :: new (
2130+ "date" ,
2131+ DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
2132+ true ,
2133+ ) ) ,
21122134 )
2113- . eq ( cast ( lit ( "1998-03-18" ) , DataType :: Date32 ) ) ;
2135+ . eq ( cast (
2136+ lit ( "1998-03-18" ) ,
2137+ Arc :: new ( Field :: new ( "date" , DataType :: Date32 , true ) ) ,
2138+ ) ) ;
21142139 let empty = empty ( ) ;
21152140 let plan = LogicalPlan :: Projection ( Projection :: try_new ( vec ! [ expr] , empty) ?) ;
21162141
@@ -2129,7 +2154,10 @@ mod test {
21292154 schema : & DFSchemaRef ,
21302155 ) -> Box < Expr > {
21312156 if & expr. get_type ( schema) . unwrap ( ) != data_type {
2132- Box :: new ( cast ( * expr, data_type. clone ( ) ) )
2157+ Box :: new ( cast (
2158+ * expr,
2159+ Arc :: new ( Field :: new ( "casted_expr" , data_type. clone ( ) , true ) ) ,
2160+ ) )
21332161 } else {
21342162 expr
21352163 }
@@ -2458,7 +2486,10 @@ mod test {
24582486 let fields = Field :: new ( "key_value" , DataType :: Struct ( struct_fields) , false ) ;
24592487 let may_type_custom = DataType :: Map ( Arc :: new ( fields) , false ) ;
24602488
2461- let expr = col ( "a" ) . eq ( cast ( col ( "a" ) , may_type_custom) ) ;
2489+ let expr = col ( "a" ) . eq ( cast (
2490+ col ( "a" ) ,
2491+ Arc :: new ( Field :: new ( "a" , may_type_custom, true ) ) ,
2492+ ) ) ;
24622493 let empty = empty_with_type ( map_type_entries) ;
24632494 let plan = LogicalPlan :: Projection ( Projection :: try_new ( vec ! [ expr] , empty) ?) ;
24642495
@@ -2479,7 +2510,11 @@ mod test {
24792510 Operator :: Plus ,
24802511 Box :: new ( cast (
24812512 lit ( "2000-01-01T00:00:00" ) ,
2482- DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
2513+ Arc :: new ( Field :: new (
2514+ "timestamp" ,
2515+ DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
2516+ true ,
2517+ ) ) ,
24832518 ) ) ,
24842519 ) ) ;
24852520 let empty = empty ( ) ;
@@ -2499,12 +2534,20 @@ mod test {
24992534 let expr = Expr :: BinaryExpr ( BinaryExpr :: new (
25002535 Box :: new ( cast (
25012536 lit ( "1998-03-18" ) ,
2502- DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
2537+ Arc :: new ( Field :: new (
2538+ "timestamp" ,
2539+ DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
2540+ true ,
2541+ ) ) ,
25032542 ) ) ,
25042543 Operator :: Minus ,
25052544 Box :: new ( cast (
25062545 lit ( "1998-03-18" ) ,
2507- DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
2546+ Arc :: new ( Field :: new (
2547+ "timestamp" ,
2548+ DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
2549+ true ,
2550+ ) ) ,
25082551 ) ) ,
25092552 ) ) ;
25102553 let empty = empty ( ) ;
0 commit comments