in datafusion/functions/src/unicode/substr.rs [520:874]
fn test_functions() -> Result<()> {
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::Utf8View(None)),
ColumnarValue::Scalar(ScalarValue::from(1i64)),
],
Ok(None),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::Utf8View(Some(String::from(
"alphabet"
)))),
ColumnarValue::Scalar(ScalarValue::from(0i64)),
],
Ok(Some("alphabet")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::Utf8View(Some(String::from(
"this és longer than 12B"
)))),
ColumnarValue::Scalar(ScalarValue::from(5i64)),
ColumnarValue::Scalar(ScalarValue::from(2i64)),
],
Ok(Some(" é")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::Utf8View(Some(String::from(
"this is longer than 12B"
)))),
ColumnarValue::Scalar(ScalarValue::from(5i64)),
],
Ok(Some(" is longer than 12B")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::Utf8View(Some(String::from(
"joséésoj"
)))),
ColumnarValue::Scalar(ScalarValue::from(5i64)),
],
Ok(Some("ésoj")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::Utf8View(Some(String::from(
"alphabet"
)))),
ColumnarValue::Scalar(ScalarValue::from(3i64)),
ColumnarValue::Scalar(ScalarValue::from(2i64)),
],
Ok(Some("ph")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::Utf8View(Some(String::from(
"alphabet"
)))),
ColumnarValue::Scalar(ScalarValue::from(3i64)),
ColumnarValue::Scalar(ScalarValue::from(20i64)),
],
Ok(Some("phabet")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(0i64)),
],
Ok(Some("alphabet")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("joséésoj")),
ColumnarValue::Scalar(ScalarValue::from(5i64)),
],
Ok(Some("ésoj")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("joséésoj")),
ColumnarValue::Scalar(ScalarValue::from(-5i64)),
],
Ok(Some("joséésoj")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(1i64)),
],
Ok(Some("alphabet")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(2i64)),
],
Ok(Some("lphabet")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(3i64)),
],
Ok(Some("phabet")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(-3i64)),
],
Ok(Some("alphabet")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(30i64)),
],
Ok(Some("")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::Int64(None)),
],
Ok(None),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(3i64)),
ColumnarValue::Scalar(ScalarValue::from(2i64)),
],
Ok(Some("ph")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(3i64)),
ColumnarValue::Scalar(ScalarValue::from(20i64)),
],
Ok(Some("phabet")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(0i64)),
ColumnarValue::Scalar(ScalarValue::from(5i64)),
],
Ok(Some("alph")),
&str,
Utf8View,
StringViewArray
);
// starting from 5 (10 + -5)
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(-5i64)),
ColumnarValue::Scalar(ScalarValue::from(10i64)),
],
Ok(Some("alph")),
&str,
Utf8View,
StringViewArray
);
// starting from -1 (4 + -5)
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(-5i64)),
ColumnarValue::Scalar(ScalarValue::from(4i64)),
],
Ok(Some("")),
&str,
Utf8View,
StringViewArray
);
// starting from 0 (5 + -5)
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(-5i64)),
ColumnarValue::Scalar(ScalarValue::from(5i64)),
],
Ok(Some("")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::Int64(None)),
ColumnarValue::Scalar(ScalarValue::from(20i64)),
],
Ok(None),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(3i64)),
ColumnarValue::Scalar(ScalarValue::Int64(None)),
],
Ok(None),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(1i64)),
ColumnarValue::Scalar(ScalarValue::from(-1i64)),
],
exec_err!("negative substring length not allowed: substr(<str>, 1, -1)"),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("joséésoj")),
ColumnarValue::Scalar(ScalarValue::from(5i64)),
ColumnarValue::Scalar(ScalarValue::from(2i64)),
],
Ok(Some("és")),
&str,
Utf8View,
StringViewArray
);
#[cfg(not(feature = "unicode_expressions"))]
test_function!(
SubstrFunc::new(),
&[
ColumnarValue::Scalar(ScalarValue::from("alphabet")),
ColumnarValue::Scalar(ScalarValue::from(0i64)),
],
internal_err!(
"function substr requires compilation with feature flag: unicode_expressions."
),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("abc")),
ColumnarValue::Scalar(ScalarValue::from(-9223372036854775808i64)),
],
Ok(Some("abc")),
&str,
Utf8View,
StringViewArray
);
test_function!(
SubstrFunc::new(),
vec![
ColumnarValue::Scalar(ScalarValue::from("overflow")),
ColumnarValue::Scalar(ScalarValue::from(-9223372036854775808i64)),
ColumnarValue::Scalar(ScalarValue::from(1i64)),
],
exec_err!("negative overflow when calculating skip value"),
&str,
Utf8View,
StringViewArray
);
Ok(())
}