Skip to content
This repository was archived by the owner on Dec 29, 2021. It is now read-only.

Commit d966ad4

Browse files
committed
functions::scalar - lower and upper on vectors
1 parent aa16e02 commit d966ad4

File tree

1 file changed

+44
-31
lines changed

1 file changed

+44
-31
lines changed

src/functions/scalar.rs

Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -289,19 +289,24 @@ impl ScalarFunctions {
289289
{
290290
scalar_op(array, |array| Ok(num::Float::log2(array)))
291291
}
292-
pub fn lower(array: &BinaryArray) -> Result<BinaryArray, ArrowError> {
293-
let mut b = BinaryBuilder::new(array.len());
294-
for i in 0..array.len() {
295-
if array.is_null(i) {
296-
b.append(false)?
297-
} else {
298-
match &::std::str::from_utf8(array.value(i)) {
299-
Ok(string) => b.append_string(&string.to_lowercase())?,
300-
_ => b.append(false)?,
292+
pub fn lower(arrays: Vec<&BinaryArray>) -> Result<Vec<BinaryArray>, ArrowError> {
293+
arrays
294+
.iter()
295+
.map(|array| {
296+
let mut b = BinaryBuilder::new(array.len());
297+
for i in 0..array.len() {
298+
if array.is_null(i) {
299+
b.append(false)?
300+
} else {
301+
match &::std::str::from_utf8(array.value(i)) {
302+
Ok(string) => b.append_string(&string.to_lowercase())?,
303+
_ => b.append(false)?,
304+
}
305+
}
301306
}
302-
}
303-
}
304-
Ok(b.finish())
307+
Ok(b.finish())
308+
})
309+
.collect()
305310
}
306311
pub fn lpad() {}
307312
pub fn ltrim(array: Vec<&BinaryArray>) -> Result<Vec<BinaryArray>, ArrowError> {
@@ -445,19 +450,24 @@ impl ScalarFunctions {
445450
fn unbase64() {}
446451
fn unhex() {}
447452
fn unix_timestamp() {}
448-
pub fn upper(array: &BinaryArray) -> Result<BinaryArray, ArrowError> {
449-
let mut b = BinaryBuilder::new(array.len());
450-
for i in 0..array.len() {
451-
if array.is_null(i) {
452-
b.append(false)?
453-
} else {
454-
match &::std::str::from_utf8(array.value(i)) {
455-
Ok(string) => b.append_string(&string.to_uppercase())?,
456-
_ => b.append(false)?,
453+
pub fn upper(arrays: Vec<&BinaryArray>) -> Result<Vec<BinaryArray>, ArrowError> {
454+
arrays
455+
.iter()
456+
.map(|array| {
457+
let mut b = BinaryBuilder::new(array.len());
458+
for i in 0..array.len() {
459+
if array.is_null(i) {
460+
b.append(false)?
461+
} else {
462+
match &::std::str::from_utf8(array.value(i)) {
463+
Ok(string) => b.append_string(&string.to_uppercase())?,
464+
_ => b.append(false)?,
465+
}
466+
}
457467
}
458-
}
459-
}
460-
Ok(b.finish())
468+
Ok(b.finish())
469+
})
470+
.collect()
461471
}
462472
fn week_of_year() {}
463473
// this will be interesting to implement
@@ -796,16 +806,19 @@ mod tests {
796806

797807
#[test]
798808
fn test_str_upper_and_lower() {
799-
let mut builder = BinaryBuilder::new(10);
809+
let mut builder = BinaryBuilder::new(14);
800810
builder.append_string("Hello").unwrap();
801811
builder.append_string("Arrow").unwrap();
812+
builder.append_string("农历新年").unwrap();
802813
let array = builder.finish();
803-
let lower = ScalarFunctions::lower(&array).unwrap();
804-
assert_eq!("hello", lower.get_string(0));
805-
assert_eq!("arrow", lower.get_string(1));
806-
let upper = ScalarFunctions::upper(&array).unwrap();
807-
assert_eq!("HELLO", upper.get_string(0));
808-
assert_eq!("ARROW", upper.get_string(1));
814+
let lower = ScalarFunctions::lower(vec![&array]).unwrap();
815+
assert_eq!("hello", lower[0].get_string(0));
816+
assert_eq!("arrow", lower[0].get_string(1));
817+
assert_eq!("农历新年", lower[0].get_string(2));
818+
let upper = ScalarFunctions::upper(vec![&array]).unwrap();
819+
assert_eq!("HELLO", upper[0].get_string(0));
820+
assert_eq!("ARROW", upper[0].get_string(1));
821+
assert_eq!("农历新年", upper[0].get_string(2));
809822
}
810823

811824
#[bench]

0 commit comments

Comments
 (0)