diff --git a/datafusion/core/tests/sql/expr.rs b/datafusion/core/tests/sql/expr.rs index 4fa1f54d22bfc..48a95884cad10 100644 --- a/datafusion/core/tests/sql/expr.rs +++ b/datafusion/core/tests/sql/expr.rs @@ -907,15 +907,21 @@ async fn test_string_expressions() -> Result<()> { test_expression!("to_hex(9223372036854775807)", "7fffffffffffffff"); test_expression!("to_hex(CAST(NULL AS int))", "NULL"); test_expression!("trim(' tom ')", "tom"); + test_expression!("trim(LEADING ' tom ')", "tom "); + test_expression!("trim(TRAILING ' tom ')", " tom"); + test_expression!("trim(BOTH ' tom ')", "tom"); test_expression!("trim(LEADING ' ' FROM ' tom ')", "tom "); test_expression!("trim(TRAILING ' ' FROM ' tom ')", " tom"); test_expression!("trim(BOTH ' ' FROM ' tom ')", "tom"); + test_expression!("trim(' ' FROM ' tom ')", "tom"); test_expression!("trim(LEADING 'x' FROM 'xxxtomxxx')", "tomxxx"); test_expression!("trim(TRAILING 'x' FROM 'xxxtomxxx')", "xxxtom"); test_expression!("trim(BOTH 'x' FROM 'xxxtomxx')", "tom"); + test_expression!("trim('x' FROM 'xxxtomxx')", "tom"); test_expression!("trim(LEADING 'xy' FROM 'xyxabcxyzdefxyx')", "abcxyzdefxyx"); test_expression!("trim(TRAILING 'xy' FROM 'xyxabcxyzdefxyx')", "xyxabcxyzdef"); test_expression!("trim(BOTH 'xy' FROM 'xyxabcxyzdefxyx')", "abcxyzdef"); + test_expression!("trim('xy' FROM 'xyxabcxyzdefxyx')", "abcxyzdef"); test_expression!("trim(' tom')", "tom"); test_expression!("trim('')", ""); test_expression!("trim('tom ')", "tom"); diff --git a/datafusion/expr/src/function.rs b/datafusion/expr/src/function.rs index 263c4540f37ca..7851edb137122 100644 --- a/datafusion/expr/src/function.rs +++ b/datafusion/expr/src/function.rs @@ -296,7 +296,6 @@ pub fn signature(fun: &BuiltinScalarFunction) -> Signature { | BuiltinScalarFunction::SHA256 | BuiltinScalarFunction::SHA384 | BuiltinScalarFunction::SHA512 - | BuiltinScalarFunction::Trim | BuiltinScalarFunction::Upper => Signature::uniform( 1, vec![DataType::Utf8, DataType::LargeUtf8], @@ -304,7 +303,8 @@ pub fn signature(fun: &BuiltinScalarFunction) -> Signature { ), BuiltinScalarFunction::Btrim | BuiltinScalarFunction::Ltrim - | BuiltinScalarFunction::Rtrim => Signature::one_of( + | BuiltinScalarFunction::Rtrim + | BuiltinScalarFunction::Trim => Signature::one_of( vec![ TypeSignature::Exact(vec![DataType::Utf8]), TypeSignature::Exact(vec![DataType::Utf8, DataType::Utf8]),