Skip to content

Commit 9bc101c

Browse files
committed
Null check first in matching
1 parent db0cbc1 commit 9bc101c

File tree

1 file changed

+17
-39
lines changed
  • datafusion/spark/src/function/math

1 file changed

+17
-39
lines changed

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

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18-
use crate::function::error_utils::{
19-
invalid_arg_count_exec_err, unsupported_data_type_exec_err,
20-
};
2118
use arrow::array::*;
2219
use arrow::datatypes::DataType;
2320
use datafusion_common::{internal_err, DataFusionError, Result, ScalarValue};
@@ -150,42 +147,23 @@ pub fn spark_abs(args: &[ColumnarValue]) -> Result<ColumnarValue, DataFusionErro
150147
| ScalarValue::UInt16(_)
151148
| ScalarValue::UInt32(_)
152149
| ScalarValue::UInt64(_) => Ok(args[0].clone()),
153-
ScalarValue::Int8(a) => match a {
154-
None => Ok(args[0].clone()),
155-
Some(v) => scalar_compute_op!(v, Int8),
156-
},
157-
ScalarValue::Int16(a) => match a {
158-
None => Ok(args[0].clone()),
159-
Some(v) => scalar_compute_op!(v, Int16),
160-
},
161-
ScalarValue::Int32(a) => match a {
162-
None => Ok(args[0].clone()),
163-
Some(v) => scalar_compute_op!(v, Int32),
164-
},
165-
ScalarValue::Int64(a) => match a {
166-
None => Ok(args[0].clone()),
167-
Some(v) => scalar_compute_op!(v, Int64),
168-
},
169-
ScalarValue::Float32(a) => match a {
170-
None => Ok(args[0].clone()),
171-
Some(v) => Ok(ColumnarValue::Scalar(ScalarValue::Float32(Some(v.abs())))),
172-
},
173-
ScalarValue::Float64(a) => match a {
174-
None => Ok(args[0].clone()),
175-
Some(v) => Ok(ColumnarValue::Scalar(ScalarValue::Float64(Some(v.abs())))),
176-
},
177-
ScalarValue::Decimal128(a, precision, scale) => match a {
178-
None => Ok(args[0].clone()),
179-
Some(v) => {
180-
scalar_compute_op!(v, *precision, *scale, Decimal128)
181-
}
182-
},
183-
ScalarValue::Decimal256(a, precision, scale) => match a {
184-
None => Ok(args[0].clone()),
185-
Some(v) => {
186-
scalar_compute_op!(v, *precision, *scale, Decimal256)
187-
}
188-
},
150+
sv if sv.is_null() => Ok(args[0].clone()),
151+
ScalarValue::Int8(Some(v)) => scalar_compute_op!(v, Int8),
152+
ScalarValue::Int16(Some(v)) => scalar_compute_op!(v, Int16),
153+
ScalarValue::Int32(Some(v)) => scalar_compute_op!(v, Int32),
154+
ScalarValue::Int64(Some(v)) => scalar_compute_op!(v, Int64),
155+
ScalarValue::Float32(Some(v)) => {
156+
Ok(ColumnarValue::Scalar(ScalarValue::Float32(Some(v.abs()))))
157+
}
158+
ScalarValue::Float64(Some(v)) => {
159+
Ok(ColumnarValue::Scalar(ScalarValue::Float64(Some(v.abs()))))
160+
}
161+
ScalarValue::Decimal128(Some(v), precision, scale) => {
162+
scalar_compute_op!(v, *precision, *scale, Decimal128)
163+
}
164+
ScalarValue::Decimal256(Some(v), precision, scale) => {
165+
scalar_compute_op!(v, *precision, *scale, Decimal256)
166+
}
189167
dt => internal_err!("Not supported datatype for Spark ABS: {dt}"),
190168
},
191169
}

0 commit comments

Comments
 (0)