@@ -20,7 +20,7 @@ use arrow::array::*;
2020use arrow:: datatypes:: { DataType , IntervalDayTime , IntervalMonthDayNano , IntervalUnit } ;
2121use bigdecimal:: num_traits:: WrappingNeg ;
2222use datafusion_common:: utils:: take_function_args;
23- use datafusion_common:: { Result , ScalarValue , not_impl_err} ;
23+ use datafusion_common:: { Result , ScalarValue , exec_err , not_impl_err} ;
2424use datafusion_expr:: {
2525 ColumnarValue , ScalarFunctionArgs , ScalarUDFImpl , Signature , TypeSignature ,
2626 Volatility ,
@@ -105,10 +105,11 @@ macro_rules! impl_integer_array_negative {
105105 let result: PrimitiveArray <$type> = if $enable_ansi_mode {
106106 array. try_unary( |x| {
107107 x. checked_neg( ) . ok_or_else( || {
108- arrow:: error:: ArrowError :: ComputeError ( format!(
109- "{} overflow on negative({x})" ,
110- $type_name
111- ) )
108+ arrow:: error:: ArrowError :: from(
109+ ( exec_err!( "{} overflow on negative({x})" , $type_name)
110+ as Result <( ) , _>)
111+ . unwrap_err( ) ,
112+ )
112113 } )
113114 } ) ?
114115 } else {
@@ -135,10 +136,11 @@ macro_rules! impl_decimal_array_negative {
135136 array
136137 . try_unary( |x| {
137138 x. checked_neg( ) . ok_or_else( || {
138- arrow:: error:: ArrowError :: ComputeError ( format!(
139- "{} overflow on negative({x})" ,
140- $type_name
141- ) )
139+ arrow:: error:: ArrowError :: from(
140+ ( exec_err!( "{} overflow on negative({x})" , $type_name)
141+ as Result <( ) , _>)
142+ . unwrap_err( ) ,
143+ )
142144 } )
143145 } ) ?
144146 . with_data_type( array. data_type( ) . clone( ) )
@@ -154,10 +156,9 @@ macro_rules! impl_integer_scalar_negative {
154156 ( $v: expr, $type_name: expr, $variant: ident, $enable_ansi_mode: expr) => { {
155157 let result = if $enable_ansi_mode {
156158 $v. checked_neg( ) . ok_or_else( || {
157- arrow:: error:: ArrowError :: ComputeError ( format!(
158- "{} overflow on negative({})" ,
159- $type_name, $v
160- ) )
159+ ( exec_err!( "{} overflow on negative({})" , $type_name, $v)
160+ as Result <( ) , _>)
161+ . unwrap_err( )
161162 } ) ?
162163 } else {
163164 $v. wrapping_neg( )
@@ -171,10 +172,9 @@ macro_rules! impl_decimal_scalar_negative {
171172 ( $v: expr, $precision: expr, $scale: expr, $type_name: expr, $variant: ident, $enable_ansi_mode: expr) => { {
172173 let result = if $enable_ansi_mode {
173174 $v. checked_neg( ) . ok_or_else( || {
174- arrow:: error:: ArrowError :: ComputeError ( format!(
175- "{} overflow on negative({})" ,
176- $type_name, $v
177- ) )
175+ ( exec_err!( "{} overflow on negative({})" , $type_name, $v)
176+ as Result <( ) , _>)
177+ . unwrap_err( )
178178 } ) ?
179179 } else {
180180 $v. wrapping_neg( )
@@ -257,17 +257,21 @@ fn spark_negative(
257257 let result: PrimitiveArray < IntervalDayTimeType > = if enable_ansi_mode {
258258 array. try_unary ( |x| {
259259 let days = x. days . checked_neg ( ) . ok_or_else ( || {
260- arrow:: error:: ArrowError :: ComputeError ( format ! (
261- "IntervalDayTime overflow on negative (days: {})" ,
262- x. days
263- ) )
260+ arrow:: error:: ArrowError :: from (
261+ ( exec_err ! (
262+ "IntervalDayTime overflow on negative (days: {})" ,
263+ x. days
264+ ) as Result < ( ) , _ > )
265+ . unwrap_err ( ) ,
266+ )
264267 } ) ?;
265- let milliseconds = x. milliseconds . checked_neg ( ) . ok_or_else ( || {
266- arrow:: error:: ArrowError :: ComputeError ( format ! (
268+ let milliseconds =
269+ x. milliseconds . checked_neg ( ) . ok_or_else ( || {
270+ arrow:: error:: ArrowError :: from ( ( exec_err ! (
267271 "IntervalDayTime overflow on negative (milliseconds: {})" ,
268272 x. milliseconds
269- ) )
270- } ) ?;
273+ ) as Result < ( ) , _ > ) . unwrap_err ( ) )
274+ } ) ?;
271275 Ok :: < _ , arrow:: error:: ArrowError > ( IntervalDayTime {
272276 days,
273277 milliseconds,
@@ -287,22 +291,19 @@ fn spark_negative(
287291 {
288292 array. try_unary ( |x| {
289293 let months = x. months . checked_neg ( ) . ok_or_else ( || {
290- arrow:: error:: ArrowError :: ComputeError ( format ! (
294+ arrow:: error:: ArrowError :: from ( ( exec_err ! (
291295 "IntervalMonthDayNano overflow on negative (months: {})" ,
292296 x. months
293- ) )
297+ ) as Result < ( ) , _ > ) . unwrap_err ( ) )
294298 } ) ?;
295299 let days = x. days . checked_neg ( ) . ok_or_else ( || {
296- arrow:: error:: ArrowError :: ComputeError ( format ! (
297- "IntervalMonthDayNano overflow on negative (days: {})" ,
298- x. days
299- ) )
300+ arrow:: error:: ArrowError :: from ( ( exec_err ! ( "IntervalMonthDayNano overflow on negative (days: {})" , x. days) as Result < ( ) , _ > ) . unwrap_err ( ) )
300301 } ) ?;
301302 let nanoseconds = x. nanoseconds . checked_neg ( ) . ok_or_else ( || {
302- arrow:: error:: ArrowError :: ComputeError ( format ! (
303+ arrow:: error:: ArrowError :: from ( ( exec_err ! (
303304 "IntervalMonthDayNano overflow on negative (nanoseconds: {})" ,
304305 x. nanoseconds
305- ) )
306+ ) as Result < ( ) , _ > ) . unwrap_err ( ) )
306307 } ) ?;
307308 Ok :: < _ , arrow:: error:: ArrowError > ( IntervalMonthDayNano {
308309 months,
@@ -405,16 +406,18 @@ fn spark_negative(
405406 ScalarValue :: IntervalDayTime ( Some ( v) ) => {
406407 let result = if enable_ansi_mode {
407408 let days = v. days . checked_neg ( ) . ok_or_else ( || {
408- arrow :: error :: ArrowError :: ComputeError ( format ! (
409+ ( exec_err ! (
409410 "IntervalDayTime overflow on negative (days: {})" ,
410411 v. days
411- ) )
412+ ) as Result < ( ) , _ > )
413+ . unwrap_err ( )
412414 } ) ?;
413415 let milliseconds = v. milliseconds . checked_neg ( ) . ok_or_else ( || {
414- arrow :: error :: ArrowError :: ComputeError ( format ! (
416+ ( exec_err ! (
415417 "IntervalDayTime overflow on negative (milliseconds: {})" ,
416418 v. milliseconds
417- ) )
419+ ) as Result < ( ) , _ > )
420+ . unwrap_err ( )
418421 } ) ?;
419422 IntervalDayTime { days, milliseconds }
420423 } else {
@@ -430,22 +433,25 @@ fn spark_negative(
430433 ScalarValue :: IntervalMonthDayNano ( Some ( v) ) => {
431434 let result = if enable_ansi_mode {
432435 let months = v. months . checked_neg ( ) . ok_or_else ( || {
433- arrow :: error :: ArrowError :: ComputeError ( format ! (
436+ ( exec_err ! (
434437 "IntervalMonthDayNano overflow on negative (months: {})" ,
435438 v. months
436- ) )
439+ ) as Result < ( ) , _ > )
440+ . unwrap_err ( )
437441 } ) ?;
438442 let days = v. days . checked_neg ( ) . ok_or_else ( || {
439- arrow :: error :: ArrowError :: ComputeError ( format ! (
443+ ( exec_err ! (
440444 "IntervalMonthDayNano overflow on negative (days: {})" ,
441445 v. days
442- ) )
446+ ) as Result < ( ) , _ > )
447+ . unwrap_err ( )
443448 } ) ?;
444449 let nanoseconds = v. nanoseconds . checked_neg ( ) . ok_or_else ( || {
445- arrow :: error :: ArrowError :: ComputeError ( format ! (
450+ ( exec_err ! (
446451 "IntervalMonthDayNano overflow on negative (nanoseconds: {})" ,
447452 v. nanoseconds
448- ) )
453+ ) as Result < ( ) , _ > )
454+ . unwrap_err ( )
449455 } ) ?;
450456 IntervalMonthDayNano {
451457 months,
0 commit comments