[SQL][Function] Add replace() function (#4347)
replace is an user defined function, which is to replace all old substrings with a new substring in a string, as follow:
mysql> select replace("http://www.baidu.com:9090", "9090", "");
+------------------------------------------------------+
| replace('http://www.baidu.com:9090', '9090', '') |
+------------------------------------------------------+
| http://www.baidu.com: |
+------------------------------------------------------+
This commit is contained in:
@ -494,6 +494,41 @@ TEST_F(StringFunctionsTest, rpad) {
|
||||
ASSERT_EQ(StringVal("呵呵hih"),
|
||||
StringFunctions::rpad(ctx, StringVal("呵呵"), IntVal(5), StringVal("hi")));
|
||||
}
|
||||
|
||||
TEST_F(StringFunctionsTest, replace) {
|
||||
//exist substring
|
||||
ASSERT_EQ(StringVal("http://www.baidu.com:8080"),
|
||||
StringFunctions::replace(ctx, StringVal("http://www.baidu.com:9090"), StringVal("9090"), StringVal("8080")));
|
||||
|
||||
//not exist substring
|
||||
ASSERT_EQ(StringVal("http://www.baidu.com:9090"),
|
||||
StringFunctions::replace(ctx, StringVal("http://www.baidu.com:9090"), StringVal("9070"), StringVal("8080")));
|
||||
|
||||
//old substring is empty
|
||||
ASSERT_EQ(StringVal("http://www.baidu.com:9090"),
|
||||
StringFunctions::replace(ctx, StringVal("http://www.baidu.com:9090"), StringVal(""), StringVal("8080")));
|
||||
|
||||
//new substring is empty
|
||||
ASSERT_EQ(StringVal("http://www.baidu.com:"),
|
||||
StringFunctions::replace(ctx, StringVal("http://www.baidu.com:9090"), StringVal("9090"), StringVal("")));
|
||||
|
||||
//origin string is null
|
||||
ASSERT_EQ(StringVal::null(),
|
||||
StringFunctions::replace(ctx, StringVal::null(), StringVal("hello"), StringVal("8080")));
|
||||
|
||||
//old substring is null
|
||||
ASSERT_EQ(StringVal::null(),
|
||||
StringFunctions::replace(ctx, StringVal("http://www.baidu.com:9090"), StringVal::null(), StringVal("8080")));
|
||||
|
||||
//new substring is null
|
||||
ASSERT_EQ(StringVal::null(),
|
||||
StringFunctions::replace(ctx, StringVal("http://www.baidu.com:9090"), StringVal("hello"), StringVal::null()));
|
||||
|
||||
//substring contains Chinese character
|
||||
ASSERT_EQ(StringVal("http://华夏zhongguo:9090"),
|
||||
StringFunctions::replace(ctx, StringVal("http://中国hello:9090"), StringVal("中国hello"), StringVal("华夏zhongguo")));
|
||||
}
|
||||
|
||||
} // namespace doris
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
Reference in New Issue
Block a user