[SQL Function][Bug] Fix parse_url() bug (#4429)

The parameter 'part' of parse_url function does not support lower case, and parse protocol not right.
And This function does not support parse 'port'. 
This PR tries to make parse_url function case insensitive and support parse 'port'.

The issue: #4451
This commit is contained in:
xinghuayu007
2020-09-03 17:06:09 +08:00
committed by GitHub
parent c29d41f675
commit 1a30bcbf36
4 changed files with 108 additions and 14 deletions

View File

@ -529,6 +529,58 @@ TEST_F(StringFunctionsTest, replace) {
StringFunctions::replace(ctx, StringVal("http://中国hello:9090"), StringVal("中国hello"), StringVal("华夏zhongguo")));
}
TEST_F(StringFunctionsTest, parse_url) {
ASSERT_EQ(StringVal("facebook.com"),
StringFunctions::parse_url(ctx, StringVal("http://facebook.com/path/p1.php?query=1"), StringVal("AUTHORITY")));
ASSERT_EQ(StringVal("facebook.com"),
StringFunctions::parse_url(ctx, StringVal("http://facebook.com/path/p1.php?query=1"), StringVal("authority")));
ASSERT_EQ(StringVal("/a/b/c.php"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090/a/b/c.php"), StringVal("FILE")));
ASSERT_EQ(StringVal("/a/b/c.php"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090/a/b/c.php"), StringVal("file")));
ASSERT_EQ(StringVal("/a/b/c.php"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090/a/b/c.php"), StringVal("PATH")));
ASSERT_EQ(StringVal("/a/b/c.php"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090/a/b/c.php"), StringVal("path")));
ASSERT_EQ(StringVal("www.baidu.com"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090"), StringVal("HOST")));
ASSERT_EQ(StringVal("www.baidu.com"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090"), StringVal("host")));
ASSERT_EQ(StringVal("http"),
StringFunctions::parse_url(ctx, StringVal("http://facebook.com/path/p1.php?query=1"), StringVal("PROTOCOL")));
ASSERT_EQ(StringVal("http"),
StringFunctions::parse_url(ctx, StringVal("http://facebook.com/path/p1.php?query=1"), StringVal("protocol")));
ASSERT_EQ(StringVal("a=b"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090?a=b"), StringVal("QUERY")));
ASSERT_EQ(StringVal("a=b"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090?a=b"), StringVal("query")));
ASSERT_EQ(StringVal::null(),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090?a=b"), StringVal("REF")));
ASSERT_EQ(StringVal::null(),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090?a=b"), StringVal("ref")));
ASSERT_EQ(StringVal::null(),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090?a=b"), StringVal("USERINFO")));
ASSERT_EQ(StringVal::null(),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090?a=b"), StringVal("userinfo")));
ASSERT_EQ(StringVal("9090"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090?a=b"), StringVal("PORT")));
ASSERT_EQ(StringVal("9090"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090/a/b/c?a=b"), StringVal("PORT")));
ASSERT_EQ(StringVal::null(),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com?a=b"), StringVal("PORT")));
ASSERT_EQ(StringVal("9090"),
StringFunctions::parse_url(ctx, StringVal("http://www.baidu.com:9090?a=b"), StringVal("port")));
}
} // namespace doris
int main(int argc, char** argv) {