Skip to content

Commit 239db75

Browse files
committed
native_lpad_support
1 parent 86ad8f2 commit 239db75

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

native/spark-expr/src/comet_scalar_funcs.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ use crate::{
2222
spark_array_repeat, spark_ceil, spark_date_add, spark_date_sub, spark_decimal_div,
2323
spark_decimal_integral_div, spark_floor, spark_hex, spark_isnan, spark_lpad,
2424
spark_make_decimal, spark_read_side_padding, spark_round, spark_rpad, spark_unhex,
25-
spark_unscaled_value, SparkBitwiseCount, SparkBitwiseGet, SparkBitwiseNot, SparkDateTrunc,
25+
spark_unscaled_value, EvalMode, SparkBitwiseCount, SparkBitwiseNot, SparkDateTrunc,
2626
SparkStringSpace,
27-
2827
};
2928
use arrow::datatypes::DataType;
3029
use datafusion::common::{DataFusionError, Result as DataFusionResult};

native/spark-expr/src/static_invoke/char_varchar_utils/read_side_padding.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pub fn spark_rpad(args: &[ColumnarValue]) -> Result<ColumnarValue, DataFusionErr
3636
spark_read_side_padding2(args, true, false)
3737
}
3838

39+
/// Custom `rpad` because DataFusion's `lpad` has differences in unicode handling
3940
pub fn spark_lpad(args: &[ColumnarValue]) -> Result<ColumnarValue, DataFusionError> {
4041
spark_read_side_padding2(args, true, true)
4142
}
@@ -269,12 +270,14 @@ fn add_padding_string(
269270
Ok(string)
270271
}
271272
} else {
272-
let pad_needed = length - char_len;
273-
let pad: String = pad_string.chars().cycle().take(pad_needed).collect();
273+
let mut result = String::with_capacity(string.len() + pad_string.len());
274274
if is_left_pad {
275-
Ok(format!("{}{}", pad, string))
275+
result.push_str(&pad_string);
276+
result.push_str(&string);
276277
} else {
277-
Ok(string + &pad)
278+
result.push_str(&string);
279+
result.push_str(&pad_string);
278280
}
281+
Ok(result)
279282
}
280283
}

0 commit comments

Comments
 (0)