@@ -82,27 +82,6 @@ impl ScalarUDFImpl for SparkNegative {
8282 }
8383}
8484
85- /// Helper macro to generate wrapping negation for scalar types
86- macro_rules! wrapping_negative_scalar {
87- ( $INPUT: ident, $SCALAR_TYPE: ident) => { {
88- let result = $INPUT. wrapping_neg( ) ;
89- Ok ( ColumnarValue :: Scalar ( ScalarValue :: $SCALAR_TYPE( Some (
90- result,
91- ) ) ) )
92- } } ;
93- }
94-
95- /// Helper macro to generate wrapping negation for decimal scalar types
96- macro_rules! wrapping_negative_decimal_scalar {
97- ( $INPUT: ident, $PRECISION: expr, $SCALE: expr, $SCALAR_TYPE: ident) => { {
98- let result = $INPUT. wrapping_neg( ) ;
99- Ok ( ColumnarValue :: Scalar ( ScalarValue :: $SCALAR_TYPE(
100- Some ( result) ,
101- $PRECISION,
102- $SCALE,
103- ) ) )
104- } } ;
105- }
10685
10786/// Core implementation of Spark's negative function
10887fn spark_negative ( args : & [ ColumnarValue ] ) -> Result < ColumnarValue > {
@@ -180,10 +159,22 @@ fn spark_negative(args: &[ColumnarValue]) -> Result<ColumnarValue> {
180159 sv if sv. is_null ( ) => Ok ( args[ 0 ] . clone ( ) ) ,
181160
182161 // Signed integers - wrapping negation
183- ScalarValue :: Int8 ( Some ( v) ) => wrapping_negative_scalar ! ( v, Int8 ) ,
184- ScalarValue :: Int16 ( Some ( v) ) => wrapping_negative_scalar ! ( v, Int16 ) ,
185- ScalarValue :: Int32 ( Some ( v) ) => wrapping_negative_scalar ! ( v, Int32 ) ,
186- ScalarValue :: Int64 ( Some ( v) ) => wrapping_negative_scalar ! ( v, Int64 ) ,
162+ ScalarValue :: Int8 ( Some ( v) ) => {
163+ let result = v. wrapping_neg ( ) ;
164+ Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int8 ( Some ( result) ) ) )
165+ }
166+ ScalarValue :: Int16 ( Some ( v) ) => {
167+ let result = v. wrapping_neg ( ) ;
168+ Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int16 ( Some ( result) ) ) )
169+ }
170+ ScalarValue :: Int32 ( Some ( v) ) => {
171+ let result = v. wrapping_neg ( ) ;
172+ Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int32 ( Some ( result) ) ) )
173+ }
174+ ScalarValue :: Int64 ( Some ( v) ) => {
175+ let result = v. wrapping_neg ( ) ;
176+ Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( Some ( result) ) ) )
177+ }
187178
188179 // Floating point - simple negation
189180 ScalarValue :: Float16 ( Some ( v) ) => {
@@ -198,10 +189,20 @@ fn spark_negative(args: &[ColumnarValue]) -> Result<ColumnarValue> {
198189
199190 // Decimal types - wrapping negation
200191 ScalarValue :: Decimal128 ( Some ( v) , precision, scale) => {
201- wrapping_negative_decimal_scalar ! ( v, * precision, * scale, Decimal128 )
192+ let result = v. wrapping_neg ( ) ;
193+ Ok ( ColumnarValue :: Scalar ( ScalarValue :: Decimal128 (
194+ Some ( result) ,
195+ * precision,
196+ * scale,
197+ ) ) )
202198 }
203199 ScalarValue :: Decimal256 ( Some ( v) , precision, scale) => {
204- wrapping_negative_decimal_scalar ! ( v, * precision, * scale, Decimal256 )
200+ let result = v. wrapping_neg ( ) ;
201+ Ok ( ColumnarValue :: Scalar ( ScalarValue :: Decimal256 (
202+ Some ( result) ,
203+ * precision,
204+ * scale,
205+ ) ) )
205206 }
206207
207208 dt => internal_err ! ( "Not supported datatype for Spark NEGATIVE: {dt}" ) ,
0 commit comments