[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:
xinghuayu007
2020-08-20 09:28:53 +08:00
committed by GitHub
parent 4c571cb6f5
commit bfb39a2826
7 changed files with 153 additions and 0 deletions

View File

@ -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) {