Skip to content

Commit 113ec6d

Browse files
committed
Add fail_on_error to be passed up to make_comet_scalar_udf
1 parent 6d0b46c commit 113ec6d

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

native/core/src/execution/datafusion/expressions/comet_scalar_funcs.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ use std::fmt::Debug;
3434
use std::sync::Arc;
3535

3636
macro_rules! make_comet_scalar_udf {
37+
($name:expr, $func:ident, $data_type:ident, $fail_on_error:ident) => {{
38+
let scalar_func = CometScalarFunction::new(
39+
$name.to_string(),
40+
Signature::variadic_any(Volatility::Immutable),
41+
$data_type.clone(),
42+
Arc::new(move |args| $func(args, &$data_type)),
43+
);
44+
// TODO Check for overflow
45+
Ok(Arc::new(ScalarUDF::new_from_impl(scalar_func)))
46+
}};
3747
($name:expr, $func:ident, $data_type:ident) => {{
3848
let scalar_func = CometScalarFunction::new(
3949
$name.to_string(),
@@ -59,6 +69,7 @@ pub fn create_comet_physical_fun(
5969
fun_name: &str,
6070
data_type: DataType,
6171
registry: &dyn FunctionRegistry,
72+
_fail_on_error: &bool,
6273
) -> Result<Arc<ScalarUDF>, DataFusionError> {
6374
match fun_name {
6475
"ceil" => {
@@ -72,7 +83,7 @@ pub fn create_comet_physical_fun(
7283
make_comet_scalar_udf!("read_side_padding", func, without data_type)
7384
}
7485
"round" => {
75-
make_comet_scalar_udf!("round", spark_round, data_type)
86+
make_comet_scalar_udf!("round", spark_round, data_type, _fail_on_error)
7687
}
7788
"unscaled_value" => {
7889
let func = Arc::new(spark_unscaled_value);

native/core/src/execution/datafusion/planner.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -775,10 +775,12 @@ impl PhysicalPlanner {
775775
Ok(DataType::Decimal128(_p2, _s2)),
776776
) => {
777777
let data_type = return_type.map(to_arrow_datatype).unwrap();
778+
let fail_on_error = false;
778779
let fun_expr = create_comet_physical_fun(
779780
"decimal_div",
780781
data_type.clone(),
781782
&self.session_ctx.state(),
783+
&fail_on_error,
782784
)?;
783785
Ok(Arc::new(ScalarFunctionExpr::new(
784786
"decimal_div",
@@ -1872,6 +1874,7 @@ impl PhysicalPlanner {
18721874
.collect::<Result<Vec<_>, _>>()?;
18731875

18741876
let fun_name = &expr.func;
1877+
let fail_on_error = &expr.fail_on_error;
18751878
let input_expr_types = args
18761879
.iter()
18771880
.map(|x| x.data_type(input_schema.as_ref()))
@@ -1897,8 +1900,12 @@ impl PhysicalPlanner {
18971900
}
18981901
};
18991902

1900-
let fun_expr =
1901-
create_comet_physical_fun(fun_name, data_type.clone(), &self.session_ctx.state())?;
1903+
let fun_expr = create_comet_physical_fun(
1904+
fun_name,
1905+
data_type.clone(),
1906+
&self.session_ctx.state(),
1907+
fail_on_error,
1908+
)?;
19021909

19031910
let args = args
19041911
.into_iter()

0 commit comments

Comments
 (0)