in datafusion/physical-expr/src/functions.rs [962:2832]
fn test_functions() -> Result<()> {
test_function!(Ascii, &[lit("x")], Ok(Some(120)), i32, Int32, Int32Array);
test_function!(Ascii, &[lit("ésoj")], Ok(Some(233)), i32, Int32, Int32Array);
test_function!(
Ascii,
&[lit("💯")],
Ok(Some(128175)),
i32,
Int32,
Int32Array
);
test_function!(
Ascii,
&[lit("💯a")],
Ok(Some(128175)),
i32,
Int32,
Int32Array
);
test_function!(Ascii, &[lit("")], Ok(Some(0)), i32, Int32, Int32Array);
test_function!(
Ascii,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
i32,
Int32,
Int32Array
);
test_function!(
BitLength,
&[lit("chars")],
Ok(Some(40)),
i32,
Int32,
Int32Array
);
test_function!(
BitLength,
&[lit("josé")],
Ok(Some(40)),
i32,
Int32,
Int32Array
);
test_function!(BitLength, &[lit("")], Ok(Some(0)), i32, Int32, Int32Array);
test_function!(
Btrim,
&[lit(" trim ")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Btrim,
&[lit(" trim")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Btrim,
&[lit("trim ")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Btrim,
&[lit("\n trim \n")],
Ok(Some("\n trim \n")),
&str,
Utf8,
StringArray
);
test_function!(
Btrim,
&[lit("xyxtrimyyx"), lit("xyz"),],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Btrim,
&[lit("\nxyxtrimyyx\n"), lit("xyz\n"),],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Btrim,
&[lit(ScalarValue::Utf8(None)), lit("xyz"),],
Ok(None),
&str,
Utf8,
StringArray
);
test_function!(
Btrim,
&[lit("xyxtrimyyx"), lit(ScalarValue::Utf8(None)),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
CharacterLength,
&[lit("chars")],
Ok(Some(5)),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
CharacterLength,
&[lit("josé")],
Ok(Some(4)),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
CharacterLength,
&[lit("")],
Ok(Some(0)),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
CharacterLength,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
i32,
Int32,
Int32Array
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
CharacterLength,
&[lit("josé")],
Err(DataFusionError::Internal(
"function character_length requires compilation with feature flag: unicode_expressions.".to_string()
)),
i32,
Int32,
Int32Array
);
test_function!(
Chr,
&[lit(ScalarValue::Int64(Some(128175)))],
Ok(Some("💯")),
&str,
Utf8,
StringArray
);
test_function!(
Chr,
&[lit(ScalarValue::Int64(None))],
Ok(None),
&str,
Utf8,
StringArray
);
test_function!(
Chr,
&[lit(ScalarValue::Int64(Some(120)))],
Ok(Some("x")),
&str,
Utf8,
StringArray
);
test_function!(
Chr,
&[lit(ScalarValue::Int64(Some(128175)))],
Ok(Some("💯")),
&str,
Utf8,
StringArray
);
test_function!(
Chr,
&[lit(ScalarValue::Int64(None))],
Ok(None),
&str,
Utf8,
StringArray
);
test_function!(
Chr,
&[lit(ScalarValue::Int64(Some(0)))],
Err(DataFusionError::Execution(
"null character not permitted.".to_string(),
)),
&str,
Utf8,
StringArray
);
test_function!(
Chr,
&[lit(ScalarValue::Int64(Some(i64::MAX)))],
Err(DataFusionError::Execution(
"requested character too large for encoding.".to_string(),
)),
&str,
Utf8,
StringArray
);
test_function!(
Concat,
&[lit("aa"), lit("bb"), lit("cc"),],
Ok(Some("aabbcc")),
&str,
Utf8,
StringArray
);
test_function!(
Concat,
&[lit("aa"), lit(ScalarValue::Utf8(None)), lit("cc"),],
Ok(Some("aacc")),
&str,
Utf8,
StringArray
);
test_function!(
Concat,
&[lit(ScalarValue::Utf8(None))],
Ok(Some("")),
&str,
Utf8,
StringArray
);
test_function!(
ConcatWithSeparator,
&[lit("|"), lit("aa"), lit("bb"), lit("cc"),],
Ok(Some("aa|bb|cc")),
&str,
Utf8,
StringArray
);
test_function!(
ConcatWithSeparator,
&[lit("|"), lit(ScalarValue::Utf8(None)),],
Ok(Some("")),
&str,
Utf8,
StringArray
);
test_function!(
ConcatWithSeparator,
&[
lit(ScalarValue::Utf8(None)),
lit("aa"),
lit("bb"),
lit("cc"),
],
Ok(None),
&str,
Utf8,
StringArray
);
test_function!(
ConcatWithSeparator,
&[lit("|"), lit("aa"), lit(ScalarValue::Utf8(None)), lit("cc"),],
Ok(Some("aa|cc")),
&str,
Utf8,
StringArray
);
test_function!(
Exp,
&[lit(ScalarValue::Int32(Some(1)))],
Ok(Some((1.0_f64).exp())),
f64,
Float64,
Float64Array
);
test_function!(
Exp,
&[lit(ScalarValue::UInt32(Some(1)))],
Ok(Some((1.0_f64).exp())),
f64,
Float64,
Float64Array
);
test_function!(
Exp,
&[lit(ScalarValue::UInt64(Some(1)))],
Ok(Some((1.0_f64).exp())),
f64,
Float64,
Float64Array
);
test_function!(
Exp,
&[lit(ScalarValue::Float64(Some(1.0)))],
Ok(Some((1.0_f64).exp())),
f64,
Float64,
Float64Array
);
test_function!(
Exp,
&[lit(ScalarValue::Float32(Some(1.0)))],
Ok(Some((1.0_f32).exp())),
f32,
Float32,
Float32Array
);
test_function!(
InitCap,
&[lit("hi THOMAS")],
Ok(Some("Hi Thomas")),
&str,
Utf8,
StringArray
);
test_function!(InitCap, &[lit("")], Ok(Some("")), &str, Utf8, StringArray);
test_function!(InitCap, &[lit("")], Ok(Some("")), &str, Utf8, StringArray);
test_function!(
InitCap,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[lit("abcde"), lit(ScalarValue::Int8(Some(2))),],
Ok(Some("ab")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[lit("abcde"), lit(ScalarValue::Int64(Some(200))),],
Ok(Some("abcde")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[lit("abcde"), lit(ScalarValue::Int64(Some(-2))),],
Ok(Some("abc")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[lit("abcde"), lit(ScalarValue::Int64(Some(-200))),],
Ok(Some("")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[lit("abcde"), lit(ScalarValue::Int64(Some(0))),],
Ok(Some("")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[
lit(ScalarValue::Utf8(None)),
lit(ScalarValue::Int64(Some(2))),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[lit("abcde"), lit(ScalarValue::Int64(None)),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[lit("joséésoj"), lit(ScalarValue::Int64(Some(5))),],
Ok(Some("joséé")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Left,
&[lit("joséésoj"), lit(ScalarValue::Int64(Some(-3))),],
Ok(Some("joséé")),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
Left,
&[
lit("abcde"),
lit(ScalarValue::Int8(Some(2))),
],
Err(DataFusionError::Internal(
"function left requires compilation with feature flag: unicode_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("josé"), lit(ScalarValue::Int64(Some(5))),],
Ok(Some(" josé")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(5))),],
Ok(Some(" hi")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(0))),],
Ok(Some("")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("hi"), lit(ScalarValue::Int64(None)),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[
lit(ScalarValue::Utf8(None)),
lit(ScalarValue::Int64(Some(5))),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(5))), lit("xy"),],
Ok(Some("xyxhi")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(21))), lit("abcdef"),],
Ok(Some("abcdefabcdefabcdefahi")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(5))), lit(" "),],
Ok(Some(" hi")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(5))), lit(""),],
Ok(Some("hi")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[
lit(ScalarValue::Utf8(None)),
lit(ScalarValue::Int64(Some(5))),
lit("xy"),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("hi"), lit(ScalarValue::Int64(None)), lit("xy"),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[
lit("hi"),
lit(ScalarValue::Int64(Some(5))),
lit(ScalarValue::Utf8(None)),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("josé"), lit(ScalarValue::Int64(Some(10))), lit("xy"),],
Ok(Some("xyxyxyjosé")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Lpad,
&[lit("josé"), lit(ScalarValue::Int64(Some(10))), lit("éñ"),],
Ok(Some("éñéñéñjosé")),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
Lpad,
&[
lit("josé"),
lit(ScalarValue::Int64(Some(5))),
],
Err(DataFusionError::Internal(
"function lpad requires compilation with feature flag: unicode_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
test_function!(
Ltrim,
&[lit(" trim")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Ltrim,
&[lit(" trim ")],
Ok(Some("trim ")),
&str,
Utf8,
StringArray
);
test_function!(
Ltrim,
&[lit("trim ")],
Ok(Some("trim ")),
&str,
Utf8,
StringArray
);
test_function!(
Ltrim,
&[lit("trim")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Ltrim,
&[lit("\n trim ")],
Ok(Some("\n trim ")),
&str,
Utf8,
StringArray
);
test_function!(
Ltrim,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
MD5,
&[lit("tom")],
Ok(Some("34b7da764b21d298ef307d04d8152dc5")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
MD5,
&[lit("")],
Ok(Some("d41d8cd98f00b204e9800998ecf8427e")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
MD5,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "crypto_expressions"))]
test_function!(
MD5,
&[lit("tom")],
Err(DataFusionError::Internal(
"function md5 requires compilation with feature flag: crypto_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
test_function!(
OctetLength,
&[lit("chars")],
Ok(Some(5)),
i32,
Int32,
Int32Array
);
test_function!(
OctetLength,
&[lit("josé")],
Ok(Some(5)),
i32,
Int32,
Int32Array
);
test_function!(OctetLength, &[lit("")], Ok(Some(0)), i32, Int32, Int32Array);
test_function!(
OctetLength,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
i32,
Int32,
Int32Array
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[lit("Thomas"), lit(".[mN]a."), lit("M"),],
Ok(Some("ThM")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[lit("foobarbaz"), lit("b.."), lit("X"),],
Ok(Some("fooXbaz")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[lit("foobarbaz"), lit("b.."), lit("X"), lit("g"),],
Ok(Some("fooXX")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[lit("foobarbaz"), lit("b(..)"), lit("X\\1Y"), lit("g"),],
Ok(Some("fooXarYXazY")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[
lit(ScalarValue::Utf8(None)),
lit("b(..)"),
lit("X\\1Y"),
lit("g"),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[
lit("foobarbaz"),
lit(ScalarValue::Utf8(None)),
lit("X\\1Y"),
lit("g"),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[
lit("foobarbaz"),
lit("b(..)"),
lit(ScalarValue::Utf8(None)),
lit("g"),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[
lit("foobarbaz"),
lit("b(..)"),
lit("X\\1Y"),
lit(ScalarValue::Utf8(None)),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[lit("ABCabcABC"), lit("(abc)"), lit("X"), lit("gi"),],
Ok(Some("XXX")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "regex_expressions")]
test_function!(
RegexpReplace,
&[lit("ABCabcABC"), lit("(abc)"), lit("X"), lit("i"),],
Ok(Some("XabcABC")),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "regex_expressions"))]
test_function!(
RegexpReplace,
&[
lit("foobarbaz"),
lit("b.."),
lit("X"),
],
Err(DataFusionError::Internal(
"function regexp_replace requires compilation with feature flag: regex_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
test_function!(
Repeat,
&[lit("Pg"), lit(ScalarValue::Int64(Some(4))),],
Ok(Some("PgPgPgPg")),
&str,
Utf8,
StringArray
);
test_function!(
Repeat,
&[
lit(ScalarValue::Utf8(None)),
lit(ScalarValue::Int64(Some(4))),
],
Ok(None),
&str,
Utf8,
StringArray
);
test_function!(
Repeat,
&[lit("Pg"), lit(ScalarValue::Int64(None)),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Reverse,
&[lit("abcde")],
Ok(Some("edcba")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Reverse,
&[lit("loẅks")],
Ok(Some("sk̈wol")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Reverse,
&[lit("loẅks")],
Ok(Some("sk̈wol")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Reverse,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
Reverse,
&[lit("abcde")],
Err(DataFusionError::Internal(
"function reverse requires compilation with feature flag: unicode_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[lit("abcde"), lit(ScalarValue::Int8(Some(2))),],
Ok(Some("de")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[lit("abcde"), lit(ScalarValue::Int64(Some(200))),],
Ok(Some("abcde")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[lit("abcde"), lit(ScalarValue::Int64(Some(-2))),],
Ok(Some("cde")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[lit("abcde"), lit(ScalarValue::Int64(Some(-200))),],
Ok(Some("")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[lit("abcde"), lit(ScalarValue::Int64(Some(0))),],
Ok(Some("")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[
lit(ScalarValue::Utf8(None)),
lit(ScalarValue::Int64(Some(2))),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[lit("abcde"), lit(ScalarValue::Int64(None)),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[lit("joséésoj"), lit(ScalarValue::Int64(Some(5))),],
Ok(Some("éésoj")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Right,
&[lit("joséésoj"), lit(ScalarValue::Int64(Some(-3))),],
Ok(Some("éésoj")),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
Right,
&[
lit("abcde"),
lit(ScalarValue::Int8(Some(2))),
],
Err(DataFusionError::Internal(
"function right requires compilation with feature flag: unicode_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("josé"), lit(ScalarValue::Int64(Some(5))),],
Ok(Some("josé ")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(5))),],
Ok(Some("hi ")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(0))),],
Ok(Some("")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("hi"), lit(ScalarValue::Int64(None)),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[
lit(ScalarValue::Utf8(None)),
lit(ScalarValue::Int64(Some(5))),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(5))), lit("xy"),],
Ok(Some("hixyx")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(21))), lit("abcdef"),],
Ok(Some("hiabcdefabcdefabcdefa")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(5))), lit(" "),],
Ok(Some("hi ")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("hi"), lit(ScalarValue::Int64(Some(5))), lit(""),],
Ok(Some("hi")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[
lit(ScalarValue::Utf8(None)),
lit(ScalarValue::Int64(Some(5))),
lit("xy"),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("hi"), lit(ScalarValue::Int64(None)), lit("xy"),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[
lit("hi"),
lit(ScalarValue::Int64(Some(5))),
lit(ScalarValue::Utf8(None)),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("josé"), lit(ScalarValue::Int64(Some(10))), lit("xy"),],
Ok(Some("joséxyxyxy")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Rpad,
&[lit("josé"), lit(ScalarValue::Int64(Some(10))), lit("éñ"),],
Ok(Some("josééñéñéñ")),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
Rpad,
&[
lit("josé"),
lit(ScalarValue::Int64(Some(5))),
],
Err(DataFusionError::Internal(
"function rpad requires compilation with feature flag: unicode_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
test_function!(
Rtrim,
&[lit("trim ")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Rtrim,
&[lit(" trim ")],
Ok(Some(" trim")),
&str,
Utf8,
StringArray
);
test_function!(
Rtrim,
&[lit(" trim \n")],
Ok(Some(" trim \n")),
&str,
Utf8,
StringArray
);
test_function!(
Rtrim,
&[lit(" trim")],
Ok(Some(" trim")),
&str,
Utf8,
StringArray
);
test_function!(
Rtrim,
&[lit("trim")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Rtrim,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA224,
&[lit("tom")],
Ok(Some(&[
11u8, 246u8, 203u8, 98u8, 100u8, 156u8, 66u8, 169u8, 174u8, 56u8, 118u8,
171u8, 111u8, 109u8, 146u8, 173u8, 54u8, 203u8, 84u8, 20u8, 228u8, 149u8,
248u8, 135u8, 50u8, 146u8, 190u8, 77u8
])),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA224,
&[lit("")],
Ok(Some(&[
209u8, 74u8, 2u8, 140u8, 42u8, 58u8, 43u8, 201u8, 71u8, 97u8, 2u8, 187u8,
40u8, 130u8, 52u8, 196u8, 21u8, 162u8, 176u8, 31u8, 130u8, 142u8, 166u8,
42u8, 197u8, 179u8, 228u8, 47u8
])),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA224,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&[u8],
Binary,
BinaryArray
);
#[cfg(not(feature = "crypto_expressions"))]
test_function!(
SHA224,
&[lit("tom")],
Err(DataFusionError::Internal(
"function sha224 requires compilation with feature flag: crypto_expressions.".to_string()
)),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA256,
&[lit("tom")],
Ok(Some(&[
225u8, 96u8, 143u8, 117u8, 197u8, 215u8, 129u8, 63u8, 61u8, 64u8, 49u8,
203u8, 48u8, 191u8, 183u8, 134u8, 80u8, 125u8, 152u8, 19u8, 117u8, 56u8,
255u8, 142u8, 18u8, 138u8, 111u8, 247u8, 78u8, 132u8, 230u8, 67u8
])),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA256,
&[lit("")],
Ok(Some(&[
227u8, 176u8, 196u8, 66u8, 152u8, 252u8, 28u8, 20u8, 154u8, 251u8, 244u8,
200u8, 153u8, 111u8, 185u8, 36u8, 39u8, 174u8, 65u8, 228u8, 100u8, 155u8,
147u8, 76u8, 164u8, 149u8, 153u8, 27u8, 120u8, 82u8, 184u8, 85u8
])),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA256,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&[u8],
Binary,
BinaryArray
);
#[cfg(not(feature = "crypto_expressions"))]
test_function!(
SHA256,
&[lit("tom")],
Err(DataFusionError::Internal(
"function sha256 requires compilation with feature flag: crypto_expressions.".to_string()
)),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA384,
&[lit("tom")],
Ok(Some(&[
9u8, 111u8, 91u8, 104u8, 170u8, 119u8, 132u8, 142u8, 79u8, 223u8, 92u8,
28u8, 11u8, 53u8, 13u8, 226u8, 219u8, 250u8, 214u8, 15u8, 253u8, 124u8,
37u8, 217u8, 234u8, 7u8, 198u8, 193u8, 155u8, 138u8, 77u8, 85u8, 169u8,
24u8, 126u8, 177u8, 23u8, 197u8, 87u8, 136u8, 63u8, 88u8, 193u8, 109u8,
250u8, 195u8, 227u8, 67u8
])),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA384,
&[lit("")],
Ok(Some(&[
56u8, 176u8, 96u8, 167u8, 81u8, 172u8, 150u8, 56u8, 76u8, 217u8, 50u8,
126u8, 177u8, 177u8, 227u8, 106u8, 33u8, 253u8, 183u8, 17u8, 20u8, 190u8,
7u8, 67u8, 76u8, 12u8, 199u8, 191u8, 99u8, 246u8, 225u8, 218u8, 39u8,
78u8, 222u8, 191u8, 231u8, 111u8, 101u8, 251u8, 213u8, 26u8, 210u8,
241u8, 72u8, 152u8, 185u8, 91u8
])),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA384,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&[u8],
Binary,
BinaryArray
);
#[cfg(not(feature = "crypto_expressions"))]
test_function!(
SHA384,
&[lit("tom")],
Err(DataFusionError::Internal(
"function sha384 requires compilation with feature flag: crypto_expressions.".to_string()
)),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA512,
&[lit("tom")],
Ok(Some(&[
110u8, 27u8, 155u8, 63u8, 232u8, 64u8, 104u8, 14u8, 55u8, 5u8, 31u8,
122u8, 213u8, 233u8, 89u8, 214u8, 243u8, 154u8, 208u8, 248u8, 136u8,
93u8, 133u8, 81u8, 102u8, 245u8, 92u8, 101u8, 148u8, 105u8, 211u8, 200u8,
183u8, 129u8, 24u8, 196u8, 74u8, 42u8, 73u8, 199u8, 45u8, 219u8, 72u8,
28u8, 214u8, 216u8, 115u8, 16u8, 52u8, 225u8, 28u8, 192u8, 48u8, 7u8,
11u8, 168u8, 67u8, 169u8, 11u8, 52u8, 149u8, 203u8, 141u8, 62u8
])),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA512,
&[lit("")],
Ok(Some(&[
207u8, 131u8, 225u8, 53u8, 126u8, 239u8, 184u8, 189u8, 241u8, 84u8, 40u8,
80u8, 214u8, 109u8, 128u8, 7u8, 214u8, 32u8, 228u8, 5u8, 11u8, 87u8,
21u8, 220u8, 131u8, 244u8, 169u8, 33u8, 211u8, 108u8, 233u8, 206u8, 71u8,
208u8, 209u8, 60u8, 93u8, 133u8, 242u8, 176u8, 255u8, 131u8, 24u8, 210u8,
135u8, 126u8, 236u8, 47u8, 99u8, 185u8, 49u8, 189u8, 71u8, 65u8, 122u8,
129u8, 165u8, 56u8, 50u8, 122u8, 249u8, 39u8, 218u8, 62u8
])),
&[u8],
Binary,
BinaryArray
);
#[cfg(feature = "crypto_expressions")]
test_function!(
SHA512,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&[u8],
Binary,
BinaryArray
);
#[cfg(not(feature = "crypto_expressions"))]
test_function!(
SHA512,
&[lit("tom")],
Err(DataFusionError::Internal(
"function sha512 requires compilation with feature flag: crypto_expressions.".to_string()
)),
&[u8],
Binary,
BinaryArray
);
test_function!(
SplitPart,
&[
lit("abc~@~def~@~ghi"),
lit("~@~"),
lit(ScalarValue::Int64(Some(2))),
],
Ok(Some("def")),
&str,
Utf8,
StringArray
);
test_function!(
SplitPart,
&[
lit("abc~@~def~@~ghi"),
lit("~@~"),
lit(ScalarValue::Int64(Some(20))),
],
Ok(Some("")),
&str,
Utf8,
StringArray
);
test_function!(
SplitPart,
&[
lit("abc~@~def~@~ghi"),
lit("~@~"),
lit(ScalarValue::Int64(Some(-1))),
],
Err(DataFusionError::Execution(
"field position must be greater than zero".to_string(),
)),
&str,
Utf8,
StringArray
);
test_function!(
StartsWith,
&[lit("alphabet"), lit("alph"),],
Ok(Some(true)),
bool,
Boolean,
BooleanArray
);
test_function!(
StartsWith,
&[lit("alphabet"), lit("blph"),],
Ok(Some(false)),
bool,
Boolean,
BooleanArray
);
test_function!(
StartsWith,
&[lit(ScalarValue::Utf8(None)), lit("alph"),],
Ok(None),
bool,
Boolean,
BooleanArray
);
test_function!(
StartsWith,
&[lit("alphabet"), lit(ScalarValue::Utf8(None)),],
Ok(None),
bool,
Boolean,
BooleanArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Strpos,
&[lit("abc"), lit("c"),],
Ok(Some(3)),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Strpos,
&[lit("josé"), lit("é"),],
Ok(Some(4)),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Strpos,
&[lit("joséésoj"), lit("so"),],
Ok(Some(6)),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Strpos,
&[lit("joséésoj"), lit("abc"),],
Ok(Some(0)),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Strpos,
&[lit(ScalarValue::Utf8(None)), lit("abc"),],
Ok(None),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Strpos,
&[lit("joséésoj"), lit(ScalarValue::Utf8(None)),],
Ok(None),
i32,
Int32,
Int32Array
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
Strpos,
&[
lit("joséésoj"),
lit(ScalarValue::Utf8(None)),
],
Err(DataFusionError::Internal(
"function strpos requires compilation with feature flag: unicode_expressions.".to_string()
)),
i32,
Int32,
Int32Array
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("alphabet"), lit(ScalarValue::Int64(Some(0))),],
Ok(Some("alphabet")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("joséésoj"), lit(ScalarValue::Int64(Some(5))),],
Ok(Some("ésoj")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("joséésoj"), lit(ScalarValue::Int64(Some(-5))),],
Ok(Some("joséésoj")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("alphabet"), lit(ScalarValue::Int64(Some(1))),],
Ok(Some("alphabet")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("alphabet"), lit(ScalarValue::Int64(Some(2))),],
Ok(Some("lphabet")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("alphabet"), lit(ScalarValue::Int64(Some(3))),],
Ok(Some("phabet")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("alphabet"), lit(ScalarValue::Int64(Some(-3))),],
Ok(Some("alphabet")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("alphabet"), lit(ScalarValue::Int64(Some(30))),],
Ok(Some("")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[lit("alphabet"), lit(ScalarValue::Int64(None)),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(3))),
lit(ScalarValue::Int64(Some(2))),
],
Ok(Some("ph")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(3))),
lit(ScalarValue::Int64(Some(20))),
],
Ok(Some("phabet")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(0))),
lit(ScalarValue::Int64(Some(5))),
],
Ok(Some("alph")),
&str,
Utf8,
StringArray
);
// starting from 5 (10 + -5)
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(-5))),
lit(ScalarValue::Int64(Some(10))),
],
Ok(Some("alph")),
&str,
Utf8,
StringArray
);
// starting from -1 (4 + -5)
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(-5))),
lit(ScalarValue::Int64(Some(4))),
],
Ok(Some("")),
&str,
Utf8,
StringArray
);
// starting from 0 (5 + -5)
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(-5))),
lit(ScalarValue::Int64(Some(5))),
],
Ok(Some("")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(None)),
lit(ScalarValue::Int64(Some(20))),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(3))),
lit(ScalarValue::Int64(None)),
],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(1))),
lit(ScalarValue::Int64(Some(-1))),
],
Err(DataFusionError::Execution(
"negative substring length not allowed: substr(<str>, 1, -1)".to_string(),
)),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Substr,
&[
lit("joséésoj"),
lit(ScalarValue::Int64(Some(5))),
lit(ScalarValue::Int64(Some(2))),
],
Ok(Some("és")),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
Substr,
&[
lit("alphabet"),
lit(ScalarValue::Int64(Some(0))),
],
Err(DataFusionError::Internal(
"function substr requires compilation with feature flag: unicode_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Translate,
&[lit("12345"), lit("143"), lit("ax"),],
Ok(Some("a2x5")),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Translate,
&[lit(ScalarValue::Utf8(None)), lit("143"), lit("ax"),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Translate,
&[lit("12345"), lit(ScalarValue::Utf8(None)), lit("ax"),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Translate,
&[lit("12345"), lit("143"), lit(ScalarValue::Utf8(None)),],
Ok(None),
&str,
Utf8,
StringArray
);
#[cfg(feature = "unicode_expressions")]
test_function!(
Translate,
&[lit("é2íñ5"), lit("éñí"), lit("óü"),],
Ok(Some("ó2ü5")),
&str,
Utf8,
StringArray
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
Translate,
&[
lit("12345"),
lit("143"),
lit("ax"),
],
Err(DataFusionError::Internal(
"function translate requires compilation with feature flag: unicode_expressions.".to_string()
)),
&str,
Utf8,
StringArray
);
test_function!(
Trim,
&[lit(" trim ")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Trim,
&[lit("trim ")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Trim,
&[lit(" trim")],
Ok(Some("trim")),
&str,
Utf8,
StringArray
);
test_function!(
Trim,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&str,
Utf8,
StringArray
);
test_function!(
Upper,
&[lit("upper")],
Ok(Some("UPPER")),
&str,
Utf8,
StringArray
);
test_function!(
Upper,
&[lit("UPPER")],
Ok(Some("UPPER")),
&str,
Utf8,
StringArray
);
test_function!(
Upper,
&[lit(ScalarValue::Utf8(None))],
Ok(None),
&str,
Utf8,
StringArray
);
Ok(())
}