@@ -13,11 +13,14 @@ use crate::arrays::ChunkedVTable;
1313use crate :: arrays:: ConstantArray ;
1414use crate :: arrays:: ConstantVTable ;
1515use crate :: arrays:: ScalarFnArray ;
16+ use crate :: optimizer:: ArrayOptimizer ;
1617use crate :: optimizer:: rules:: ArrayParentReduceRule ;
1718use crate :: optimizer:: rules:: ParentRuleSet ;
1819
19- pub ( super ) const PARENT_RULES : ParentRuleSet < ChunkedVTable > =
20- ParentRuleSet :: new ( & [ ParentRuleSet :: lift ( & ChunkedUnaryScalarFnPushDownRule ) ] ) ;
20+ pub ( super ) const PARENT_RULES : ParentRuleSet < ChunkedVTable > = ParentRuleSet :: new ( & [
21+ ParentRuleSet :: lift ( & ChunkedUnaryScalarFnPushDownRule ) ,
22+ ParentRuleSet :: lift ( & ChunkedConstantScalarFnPushDownRule ) ,
23+ ] ) ;
2124
2225/// Push down any unary scalar function through chunked arrays.
2326#[ derive( Debug ) ]
@@ -43,8 +46,13 @@ impl ArrayParentReduceRule<ChunkedVTable> for ChunkedUnaryScalarFnPushDownRule {
4346 . chunks
4447 . iter ( )
4548 . map ( |chunk| {
46- ScalarFnArray :: try_new ( parent. scalar_fn ( ) . clone ( ) , vec ! [ chunk. clone( ) ] , chunk. len ( ) )
47- . map ( |a| a. into_array ( ) )
49+ ScalarFnArray :: try_new (
50+ parent. scalar_fn ( ) . clone ( ) ,
51+ vec ! [ chunk. clone( ) ] ,
52+ chunk. len ( ) ,
53+ ) ?
54+ . into_array ( )
55+ . optimize ( )
4856 } )
4957 . try_collect ( ) ?;
5058
@@ -100,8 +108,9 @@ impl ArrayParentReduceRule<ChunkedVTable> for ChunkedConstantScalarFnPushDownRul
100108 } )
101109 . collect ( ) ;
102110
103- ScalarFnArray :: try_new ( parent. scalar_fn ( ) . clone ( ) , new_children, chunk. len ( ) )
104- . map ( |a| a. into_array ( ) )
111+ ScalarFnArray :: try_new ( parent. scalar_fn ( ) . clone ( ) , new_children, chunk. len ( ) ) ?
112+ . into_array ( )
113+ . optimize ( )
105114 } )
106115 . try_collect ( ) ?;
107116
0 commit comments