@@ -50,6 +50,8 @@ use crate::{
50
50
} ;
51
51
use arrow_schema:: { DataType , Field , Schema , TimeUnit , DECIMAL128_MAX_PRECISION } ;
52
52
use 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;
53
55
use datafusion:: functions_aggregate:: sum:: sum_udaf;
54
56
use datafusion:: physical_plan:: windows:: BoundedWindowAggExec ;
55
57
use datafusion:: physical_plan:: InputOrderMode ;
@@ -63,7 +65,7 @@ use datafusion::{
63
65
execution_props:: ExecutionProps ,
64
66
expressions:: {
65
67
in_list, BinaryExpr , CaseExpr , CastExpr , Column , IsNotNullExpr , IsNullExpr ,
66
- Literal as DataFusionLiteral , Max , Min , NotExpr ,
68
+ Literal as DataFusionLiteral , NotExpr ,
67
69
} ,
68
70
AggregateExpr , PhysicalExpr , PhysicalSortExpr , ScalarFunctionExpr ,
69
71
} ,
@@ -1274,14 +1276,38 @@ impl PhysicalPlanner {
1274
1276
. map_err ( |e| ExecutionError :: DataFusionError ( e. to_string ( ) ) )
1275
1277
}
1276
1278
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 ( ) ) ?;
1278
1280
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 ( ) ) )
1280
1294
}
1281
1295
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 ( ) ) ?;
1283
1297
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 ( ) ) )
1285
1311
}
1286
1312
AggExprStruct :: Sum ( expr) => {
1287
1313
let child = self . create_expr ( expr. child . as_ref ( ) . unwrap ( ) , schema. clone ( ) ) ?;
0 commit comments