@@ -289,19 +289,24 @@ impl ScalarFunctions {
289
289
{
290
290
scalar_op ( array, |array| Ok ( num:: Float :: log2 ( array) ) )
291
291
}
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
+ }
301
306
}
302
- }
303
- }
304
- Ok ( b . finish ( ) )
307
+ Ok ( b . finish ( ) )
308
+ } )
309
+ . collect ( )
305
310
}
306
311
pub fn lpad ( ) { }
307
312
pub fn ltrim ( array : Vec < & BinaryArray > ) -> Result < Vec < BinaryArray > , ArrowError > {
@@ -445,19 +450,24 @@ impl ScalarFunctions {
445
450
fn unbase64 ( ) { }
446
451
fn unhex ( ) { }
447
452
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
+ }
457
467
}
458
- }
459
- }
460
- Ok ( b . finish ( ) )
468
+ Ok ( b . finish ( ) )
469
+ } )
470
+ . collect ( )
461
471
}
462
472
fn week_of_year ( ) { }
463
473
// this will be interesting to implement
@@ -796,16 +806,19 @@ mod tests {
796
806
797
807
#[ test]
798
808
fn test_str_upper_and_lower ( ) {
799
- let mut builder = BinaryBuilder :: new ( 10 ) ;
809
+ let mut builder = BinaryBuilder :: new ( 14 ) ;
800
810
builder. append_string ( "Hello" ) . unwrap ( ) ;
801
811
builder. append_string ( "Arrow" ) . unwrap ( ) ;
812
+ builder. append_string ( "农历新年" ) . unwrap ( ) ;
802
813
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 ) ) ;
809
822
}
810
823
811
824
#[ bench]
0 commit comments