Skip to content

Commit 6737e75

Browse files
Subham SinghalSubham Singhal
authored andcommitted
Use exec_err
1 parent 62d87e9 commit 6737e75

2 files changed

Lines changed: 54 additions & 48 deletions

File tree

datafusion/spark/src/function/math/negative.rs

Lines changed: 49 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use arrow::array::*;
2020
use arrow::datatypes::{DataType, IntervalDayTime, IntervalMonthDayNano, IntervalUnit};
2121
use bigdecimal::num_traits::WrappingNeg;
2222
use 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};
2424
use 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,

datafusion/sqllogictest/test_files/spark/math/negative.slt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,16 +283,16 @@ statement ok
283283
set datafusion.execution.enable_ansi_mode = true;
284284

285285
# Test ANSI mode: negative of minimum values should error (overflow)
286-
query error DataFusion error: Arrow error: Compute error: Int8 overflow on negative\(\-128\)
286+
query error DataFusion error: Execution error: Int8 overflow on negative\(\-128\)
287287
SELECT negative((-128)::tinyint);
288288

289-
query error DataFusion error: Arrow error: Compute error: Int16 overflow on negative\(\-32768\)
289+
query error DataFusion error: Execution error: Int16 overflow on negative\(\-32768\)
290290
SELECT negative((-32768)::smallint);
291291

292-
query error DataFusion error: Arrow error: Compute error: Int32 overflow on negative\(\-2147483648\)
292+
query error DataFusion error: Execution error: Int32 overflow on negative\(\-2147483648\)
293293
SELECT negative((-2147483648)::int);
294294

295-
query error DataFusion error: Arrow error: Compute error: Int64 overflow on negative\(\-9223372036854775808\)
295+
query error DataFusion error: Execution error: Int64 overflow on negative\(\-9223372036854775808\)
296296
SELECT negative((-9223372036854775808)::bigint);
297297

298298
# Test ANSI mode: negative of (MIN+1) should succeed (boundary test)
@@ -320,7 +320,7 @@ SELECT negative((-9223372036854775807)::bigint);
320320
statement ok
321321
CREATE TABLE min_values_ansi AS VALUES (-2147483648);
322322

323-
query error DataFusion error: Arrow error: Compute error: Int32 overflow on negative\(\-2147483648\)
323+
query error DataFusion error: Arrow error: External error: Execution error: Int32 overflow on negative\(\-2147483648\)
324324
SELECT negative(column1::int) FROM min_values_ansi;
325325

326326
statement ok

0 commit comments

Comments
 (0)