20
20
use arrow_schema:: { DataType , Field , Schema , TimeUnit , DECIMAL128_MAX_PRECISION } ;
21
21
use datafusion:: functions_aggregate:: bit_and_or_xor:: { bit_and_udaf, bit_or_udaf, bit_xor_udaf} ;
22
22
use datafusion:: functions_aggregate:: count:: count_udaf;
23
+ use datafusion:: functions_aggregate:: min_max:: max_udaf;
24
+ use datafusion:: functions_aggregate:: min_max:: min_udaf;
23
25
use datafusion:: functions_aggregate:: sum:: sum_udaf;
24
26
use datafusion:: physical_plan:: windows:: BoundedWindowAggExec ;
25
27
use datafusion:: physical_plan:: InputOrderMode ;
@@ -33,7 +35,7 @@ use datafusion::{
33
35
execution_props:: ExecutionProps ,
34
36
expressions:: {
35
37
in_list, BinaryExpr , CaseExpr , CastExpr , Column , IsNotNullExpr , IsNullExpr ,
36
- Literal as DataFusionLiteral , Max , Min , NotExpr ,
38
+ Literal as DataFusionLiteral , NotExpr ,
37
39
} ,
38
40
AggregateExpr , PhysicalExpr , PhysicalSortExpr , ScalarFunctionExpr ,
39
41
} ,
@@ -1254,14 +1256,36 @@ impl PhysicalPlanner {
1254
1256
. map_err ( |e| ExecutionError :: DataFusionError ( e. to_string ( ) ) )
1255
1257
}
1256
1258
AggExprStruct :: Min ( expr) => {
1257
- let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema) ?;
1259
+ let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema. clone ( ) ) ?;
1258
1260
let datatype = to_arrow_datatype ( expr. datatype . as_ref ( ) . unwrap ( ) ) ;
1259
- Ok ( Arc :: new ( Min :: new ( child, "min" , datatype) ) )
1261
+ let child = Arc :: new ( CastExpr :: new ( child, datatype. clone ( ) , None ) ) ;
1262
+ create_aggregate_expr (
1263
+ & min_udaf ( ) ,
1264
+ & [ child] ,
1265
+ & [ ] ,
1266
+ & [ ] ,
1267
+ & [ ] ,
1268
+ schema. as_ref ( ) ,
1269
+ "min" ,
1270
+ false ,
1271
+ false ,
1272
+ ) . map_err ( |e| ExecutionError :: DataFusionError ( e. to_string ( ) ) )
1260
1273
}
1261
1274
AggExprStruct :: Max ( expr) => {
1262
- let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema) ?;
1275
+ let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema. clone ( ) ) ?;
1263
1276
let datatype = to_arrow_datatype ( expr. datatype . as_ref ( ) . unwrap ( ) ) ;
1264
- Ok ( Arc :: new ( Max :: new ( child, "max" , datatype) ) )
1277
+ let child = Arc :: new ( CastExpr :: new ( child, datatype. clone ( ) , None ) ) ;
1278
+ create_aggregate_expr (
1279
+ & max_udaf ( ) ,
1280
+ & [ child] ,
1281
+ & [ ] ,
1282
+ & [ ] ,
1283
+ & [ ] ,
1284
+ schema. as_ref ( ) ,
1285
+ "max" ,
1286
+ false ,
1287
+ false ,
1288
+ ) . map_err ( |e| ExecutionError :: DataFusionError ( e. to_string ( ) ) )
1265
1289
}
1266
1290
AggExprStruct :: Sum ( expr) => {
1267
1291
let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema. clone ( ) ) ?;
0 commit comments