@@ -50,6 +50,8 @@ use crate::{
5050} ;
5151use arrow_schema:: { DataType , Field , Schema , TimeUnit , DECIMAL128_MAX_PRECISION } ;
5252use datafusion:: functions_aggregate:: bit_and_or_xor:: { bit_and_udaf, bit_or_udaf, bit_xor_udaf} ;
53+ use datafusion:: functions_aggregate:: min_max:: max_udaf;
54+ use datafusion:: functions_aggregate:: min_max:: min_udaf;
5355use datafusion:: functions_aggregate:: sum:: sum_udaf;
5456use datafusion:: physical_plan:: windows:: BoundedWindowAggExec ;
5557use datafusion:: physical_plan:: InputOrderMode ;
@@ -63,7 +65,7 @@ use datafusion::{
6365 execution_props:: ExecutionProps ,
6466 expressions:: {
6567 in_list, BinaryExpr , CaseExpr , CastExpr , Column , IsNotNullExpr , IsNullExpr ,
66- Literal as DataFusionLiteral , Max , Min , NotExpr ,
68+ Literal as DataFusionLiteral , NotExpr ,
6769 } ,
6870 AggregateExpr , PhysicalExpr , PhysicalSortExpr , ScalarFunctionExpr ,
6971 } ,
@@ -1274,14 +1276,38 @@ impl PhysicalPlanner {
12741276 . map_err ( |e| ExecutionError :: DataFusionError ( e. to_string ( ) ) )
12751277 }
12761278 AggExprStruct :: Min ( expr) => {
1277- let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema) ?;
1279+ let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema. clone ( ) ) ?;
12781280 let datatype = to_arrow_datatype ( expr. datatype . as_ref ( ) . unwrap ( ) ) ;
1279- Ok ( Arc :: new ( Min :: new ( child, "min" , datatype) ) )
1281+ let child = Arc :: new ( CastExpr :: new ( child, datatype. clone ( ) , None ) ) ;
1282+ create_aggregate_expr (
1283+ & min_udaf ( ) ,
1284+ & [ child] ,
1285+ & [ ] ,
1286+ & [ ] ,
1287+ & [ ] ,
1288+ schema. as_ref ( ) ,
1289+ "min" ,
1290+ false ,
1291+ false ,
1292+ )
1293+ . map_err ( |e| ExecutionError :: DataFusionError ( e. to_string ( ) ) )
12801294 }
12811295 AggExprStruct :: Max ( expr) => {
1282- let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema) ?;
1296+ let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema. clone ( ) ) ?;
12831297 let datatype = to_arrow_datatype ( expr. datatype . as_ref ( ) . unwrap ( ) ) ;
1284- Ok ( Arc :: new ( Max :: new ( child, "max" , datatype) ) )
1298+ let child = Arc :: new ( CastExpr :: new ( child, datatype. clone ( ) , None ) ) ;
1299+ create_aggregate_expr (
1300+ & max_udaf ( ) ,
1301+ & [ child] ,
1302+ & [ ] ,
1303+ & [ ] ,
1304+ & [ ] ,
1305+ schema. as_ref ( ) ,
1306+ "max" ,
1307+ false ,
1308+ false ,
1309+ )
1310+ . map_err ( |e| ExecutionError :: DataFusionError ( e. to_string ( ) ) )
12851311 }
12861312 AggExprStruct :: Sum ( expr) => {
12871313 let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema. clone ( ) ) ?;
0 commit comments