This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit effcfbc3a3b4128572ec01ed10a312c5110dd279 Author: luozenglin <[email protected]> AuthorDate: Sun Feb 5 01:16:54 2023 +0800 [fix](func) fix core dump when the pattern of the regexp_extract_all function does not contain subpatterns (#16408) --- be/src/vec/functions/function_regexp.cpp | 4 ++++ .../sql-functions/string-functions/regexp/regexp_extract_all.md | 2 +- .../sql-functions/string-functions/regexp/regexp_extract_all.md | 2 +- .../sql_functions/string_functions/test_string_function_regexp.out | 3 +++ .../sql_functions/string_functions/test_string_function_regexp.groovy | 1 + 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/be/src/vec/functions/function_regexp.cpp b/be/src/vec/functions/function_regexp.cpp index 0fc3681a1e..f2ea1280c0 100644 --- a/be/src/vec/functions/function_regexp.cpp +++ b/be/src/vec/functions/function_regexp.cpp @@ -204,6 +204,10 @@ struct RegexpExtractAllImpl { } scoped_re.reset(re); } + if (re->NumberOfCapturingGroups() == 0) { + StringOP::push_empty_string(i, result_data, result_offset); + continue; + } const auto& str = str_col->get_data_at(i); int max_matches = 1 + re->NumberOfCapturingGroups(); std::vector<re2::StringPiece> res_matches; diff --git a/docs/en/docs/sql-manual/sql-functions/string-functions/regexp/regexp_extract_all.md b/docs/en/docs/sql-manual/sql-functions/string-functions/regexp/regexp_extract_all.md index c63ea34074..7cfc6320c4 100644 --- a/docs/en/docs/sql-manual/sql-functions/string-functions/regexp/regexp_extract_all.md +++ b/docs/en/docs/sql-manual/sql-functions/string-functions/regexp/regexp_extract_all.md @@ -30,7 +30,7 @@ under the License. `VARCHAR regexp_extract_all (VARCHAR str, VARCHAR pattern)` -Regularly matches a string str and extracts the first sub-pattern matching part of pattern. The pattern needs to exactly match a part of str in order to return an array of strings for the part of the pattern that needs to be matched. If there is no match, the empty string is returned. +Regularly matches a string str and extracts the first sub-pattern matching part of pattern. The pattern needs to exactly match a part of str in order to return an array of strings for the part of the pattern that needs to be matched. If there is no match or the pattern has no sub-pattern, the empty string is returned. ### example diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/string-functions/regexp/regexp_extract_all.md b/docs/zh-CN/docs/sql-manual/sql-functions/string-functions/regexp/regexp_extract_all.md index e0b63c4c5a..7d71b74bc7 100644 --- a/docs/zh-CN/docs/sql-manual/sql-functions/string-functions/regexp/regexp_extract_all.md +++ b/docs/zh-CN/docs/sql-manual/sql-functions/string-functions/regexp/regexp_extract_all.md @@ -28,7 +28,7 @@ under the License. `VARCHAR regexp_extract_all(VARCHAR str, VARCHAR pattern)` -对字符串 str 进行正则匹配,抽取符合 pattern 的第一个子模式匹配部分。需要 pattern 完全匹配 str 中的某部分,这样才能返回 pattern 部分中需匹配部分的字符串数组。如果没有匹配,返回空字符串。 +对字符串 str 进行正则匹配,抽取符合 pattern 的第一个子模式匹配部分。需要 pattern 完全匹配 str 中的某部分,这样才能返回 pattern 部分中需匹配部分的字符串数组。如果没有匹配或者pattern没有子模式,返回空字符串。 ### example diff --git a/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_regexp.out b/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_regexp.out index e402a44cda..b7460c5134 100644 --- a/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_regexp.out +++ b/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_regexp.out @@ -30,6 +30,9 @@ d -- !sql -- ['abc','def','ghi'] +-- !sql -- + + -- !sql -- a-b-c diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_regexp.groovy b/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_regexp.groovy index 29a8c95b9e..3f68b060be 100644 --- a/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_regexp.groovy +++ b/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_regexp.groovy @@ -47,6 +47,7 @@ suite("test_string_function_regexp") { qt_sql "SELECT regexp_extract_all('x=a3&x=18abc&x=2&y=3&x=4&x=17bcd', 'x=([0-9]+)([a-z]+)');" qt_sql "SELECT regexp_extract_all('http://a.m.baidu.com/i41915i73660.htm', 'i([0-9]+)');" qt_sql "SELECT regexp_extract_all('abc=111, def=222, ghi=333', '(\"[^\"]+\"|\\\\w+)=(\"[^\"]+\"|\\\\w+)');" + qt_sql "select regexp_extract_all('xxfs','f');" qt_sql "SELECT regexp_replace('a b c', \" \", \"-\");" qt_sql "SELECT regexp_replace('a b c','(b)','<\\\\1>');" --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
