From 1ce2d741f6948de9c1ec0fab4e616b007ab3d5bc Mon Sep 17 00:00:00 2001 From: jacktengg <18241664+jacktengg@users.noreply.github.com> Date: Wed, 22 Mar 2023 18:28:16 +0800 Subject: [PATCH 1/2] [fix](like) fix wrong result of like pattern with backslash --- be/src/vec/functions/like.cpp | 68 ++++++++++++++++++- .../test_string_function_like.out | 5 ++ .../test_string_function_like.groovy | 6 ++ 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/be/src/vec/functions/like.cpp b/be/src/vec/functions/like.cpp index 7fe3190ebbc90d..5561c75b758b5f 100644 --- a/be/src/vec/functions/like.cpp +++ b/be/src/vec/functions/like.cpp @@ -39,7 +39,7 @@ static const RE2 EQUALS_RE("\\^([^\\.\\^\\{\\[\\(\\|\\)\\]\\}\\+\\*\\?\\$\\\\]*) // Like patterns static const re2::RE2 LIKE_SUBSTRING_RE("(?:%+)(((\\\\%)|(\\\\_)|([^%_]))+)(?:%+)"); -static const re2::RE2 LIKE_ENDS_WITH_RE("(?:%+)(((\\\\%)|(\\\\_)|([^%_]))+)"); +static const re2::RE2 LIKE_ENDS_WITH_RE("(?:%+)([^%_]+)"); static const re2::RE2 LIKE_STARTS_WITH_RE("(((\\\\%)|(\\\\_)|([^%_]))+)(?:%+)"); static const re2::RE2 LIKE_EQUALS_RE("(((\\\\%)|(\\\\_)|([^%_]))+)"); @@ -534,6 +534,38 @@ void FunctionLike::remove_escape_character(std::string* search_string) { } } +bool re2_full_match(const std::string& str, const RE2& re, std::vector& results) { + if (!re.ok()) { + return false; + } + + std::vector arguments; + std::vector arguments_ptrs; + std::size_t args_count = re.NumberOfCapturingGroups(); + arguments.resize(args_count); + arguments_ptrs.resize(args_count); + results.resize(args_count); + for (std::size_t i = 0; i < args_count; ++i) { + arguments[i] = &results[i]; + arguments_ptrs[i] = &arguments[i]; + } + + return RE2::FullMatchN(str, re, arguments_ptrs.data(), args_count); +} + +void verbose_log_match(const std::string& str, const std::string& pattern_name, const RE2& re) { + std::vector results; + VLOG_DEBUG << "arg str: " << str << ", size: " << str.size() << ", pattern " << pattern_name + << ": " << re.pattern() << ", size: " << re.pattern().size(); + if (re2_full_match(str, re, results)) { + for (int i = 0; i < results.size(); ++i) { + VLOG_DEBUG << "match " << i << ": " << results[i] << ", size: " << results[i].size(); + } + } else { + VLOG_DEBUG << "no match"; + } +} + Status FunctionLike::open(FunctionContext* context, FunctionContext::FunctionStateScope scope) { if (scope != FunctionContext::THREAD_LOCAL) { return Status::OK(); @@ -550,26 +582,55 @@ Status FunctionLike::open(FunctionContext* context, FunctionContext::FunctionSta std::string pattern_str = pattern.to_string(); state->search_state.pattern_str = pattern_str; std::string search_string; + if (pattern_str.empty() || RE2::FullMatch(pattern_str, LIKE_EQUALS_RE, &search_string)) { + if (VLOG_DEBUG_IS_ON) { + verbose_log_match(pattern_str, "LIKE_EQUALS_RE", LIKE_EQUALS_RE); + VLOG_DEBUG << "search_string : " << search_string; + } remove_escape_character(&search_string); + if (VLOG_DEBUG_IS_ON) { + VLOG_DEBUG << "search_string escape removed: " << search_string; + } state->search_state.set_search_string(search_string); state->function = constant_equals_fn; state->predicate_like_function = constant_equals_fn_predicate; state->scalar_function = constant_equals_fn_scalar; } else if (RE2::FullMatch(pattern_str, LIKE_STARTS_WITH_RE, &search_string)) { + if (VLOG_DEBUG_IS_ON) { + verbose_log_match(pattern_str, "LIKE_STARTS_WITH_RE", LIKE_STARTS_WITH_RE); + VLOG_DEBUG << "search_string : " << search_string; + } remove_escape_character(&search_string); + if (VLOG_DEBUG_IS_ON) { + VLOG_DEBUG << "search_string escape removed: " << search_string; + } state->search_state.set_search_string(search_string); state->function = constant_starts_with_fn; state->predicate_like_function = constant_starts_with_fn_predicate; state->scalar_function = constant_starts_with_fn_scalar; } else if (RE2::FullMatch(pattern_str, LIKE_ENDS_WITH_RE, &search_string)) { + if (VLOG_DEBUG_IS_ON) { + verbose_log_match(pattern_str, "LIKE_ENDS_WITH_RE", LIKE_ENDS_WITH_RE); + VLOG_DEBUG << "search_string : " << search_string; + } remove_escape_character(&search_string); + if (VLOG_DEBUG_IS_ON) { + VLOG_DEBUG << "search_string escape removed: " << search_string; + } state->search_state.set_search_string(search_string); state->function = constant_ends_with_fn; state->predicate_like_function = constant_ends_with_fn_predicate; state->scalar_function = constant_ends_with_fn_scalar; } else if (RE2::FullMatch(pattern_str, LIKE_SUBSTRING_RE, &search_string)) { + if (VLOG_DEBUG_IS_ON) { + verbose_log_match(pattern_str, "LIKE_SUBSTRING_RE", LIKE_SUBSTRING_RE); + VLOG_DEBUG << "search_string : " << search_string; + } remove_escape_character(&search_string); + if (VLOG_DEBUG_IS_ON) { + VLOG_DEBUG << "search_string escape removed: " << search_string; + } state->search_state.set_search_string(search_string); state->function = constant_substring_fn; state->predicate_like_function = constant_substring_fn_predicate; @@ -577,6 +638,11 @@ Status FunctionLike::open(FunctionContext* context, FunctionContext::FunctionSta } else { std::string re_pattern; convert_like_pattern(&state->search_state, pattern_str, &re_pattern); + if (VLOG_DEBUG_IS_ON) { + VLOG_DEBUG << "hyperscan, pattern str: " << pattern_str + << ", size: " << pattern_str.size() << ", re pattern: " << re_pattern + << ", size: " << re_pattern.size(); + } hs_database_t* database = nullptr; hs_scratch_t* scratch = nullptr; diff --git a/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_like.out b/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_like.out index eec1827d95fdf6..0d4628ba6f7bdf 100644 --- a/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_like.out +++ b/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_like.out @@ -122,3 +122,8 @@ bb -- !sql -- +-- !sql_like_backslash1 -- +xyz\\\\,xyz + +-- !sql_like_backslash2 -- +xyz\\\\,xyz \ No newline at end of file diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_like.groovy b/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_like.groovy index 48941ed485fdf1..6cfdad4bbf1576 100644 --- a/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_like.groovy +++ b/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_like.groovy @@ -63,5 +63,11 @@ suite("test_string_function_like") { qt_sql "SELECT k FROM ${tbName} WHERE k LIKE \"%\" ORDER BY k;" qt_sql "SELECT k FROM ${tbName} WHERE k NOT LIKE \"%\" ORDER BY k;" + sql """ + INSERT INTO ${tbName} VALUES ("xyz\\\\\\\\,xyz"); + """ + qt_sql_like_backslash1 """ SELECT k FROM ${tbName} WHERE k LIKE "%\\\\%"; """ + qt_sql_like_backslash2 """ SELECT k FROM ${tbName} WHERE k LIKE "%\\\\\\\\%"; """ + // sql "DROP TABLE ${tbName};" } From 1c07011790963b74f558d0fe292a5a526f3ea4f3 Mon Sep 17 00:00:00 2001 From: jacktengg <18241664+jacktengg@users.noreply.github.com> Date: Thu, 23 Mar 2023 17:05:03 +0800 Subject: [PATCH 2/2] fix and add test cases --- be/src/vec/functions/like.cpp | 37 ++++++++------ .../sql_functions/string_functions/like.csv | 21 ++++++++ .../string_functions/sql/like_backslash_1.out | 7 +++ .../string_functions/sql/like_backslash_2.out | 7 +++ .../string_functions/sql/like_backslash_3.out | 12 +++++ .../string_functions/sql/like_backslash_4.out | 12 +++++ .../string_functions/sql/like_backslash_5.out | 4 ++ .../string_functions/sql/like_backslash_6.out | 4 ++ .../string_functions/sql/like_backslash_7.out | 6 +++ .../string_functions/sql/like_backslash_8.out | 6 +++ .../string_functions/sql/like_backslash_9.out | 3 ++ .../sql/like_backslash_begin_1.out | 3 ++ .../sql/like_backslash_begin_2.out | 3 ++ .../sql/like_backslash_begin_3.out | 7 +++ .../sql/like_backslash_begin_4.out | 7 +++ .../sql/like_backslash_begin_8.out | 4 ++ .../sql/like_backslash_end_2.out | 7 +++ .../sql/like_backslash_end_4.out | 7 +++ .../sql/like_backslash_end_8.out | 4 ++ .../sql/like_regex_wild_1.out | 4 ++ .../sql/like_regex_wild_2.out | 4 ++ .../sql/like_wild_many_begin_1.out | 7 +++ .../sql/like_wild_many_begin_2.out | 6 +++ .../sql/like_wild_many_begin_3.out | 4 ++ .../sql/like_wild_one_begin_1.out | 6 +++ .../sql/like_wild_one_begin_end_1.out | 5 ++ .../sql/like_wild_one_begin_middle_end_1.out | 4 ++ .../sql/like_wild_one_end_1.out | 6 +++ .../test_string_function_like.out | 6 --- .../string_functions/load.groovy | 49 +++++++++++++++++++ .../string_functions/sql/like_backslash_1.sql | 1 + .../string_functions/sql/like_backslash_2.sql | 1 + .../string_functions/sql/like_backslash_3.sql | 1 + .../string_functions/sql/like_backslash_4.sql | 1 + .../string_functions/sql/like_backslash_5.sql | 1 + .../string_functions/sql/like_backslash_6.sql | 1 + .../string_functions/sql/like_backslash_7.sql | 1 + .../string_functions/sql/like_backslash_8.sql | 1 + .../string_functions/sql/like_backslash_9.sql | 1 + .../sql/like_backslash_begin_1.sql | 1 + .../sql/like_backslash_begin_2.sql | 1 + .../sql/like_backslash_begin_3.sql | 1 + .../sql/like_backslash_begin_4.sql | 1 + .../sql/like_backslash_begin_8.sql | 1 + .../sql/like_backslash_end_2.sql | 1 + .../sql/like_backslash_end_4.sql | 1 + .../sql/like_backslash_end_8.sql | 1 + .../sql/like_regex_wild_1.sql | 1 + .../sql/like_regex_wild_2.sql | 1 + .../sql/like_wild_many_begin_1.sql | 1 + .../sql/like_wild_many_begin_2.sql | 1 + .../sql/like_wild_many_begin_3.sql | 1 + .../sql/like_wild_one_begin_1.sql | 1 + .../sql/like_wild_one_begin_end_1.sql | 1 + .../sql/like_wild_one_begin_middle_end_1.sql | 1 + .../sql/like_wild_one_end_1.sql | 1 + .../test_string_function_like.groovy | 6 --- 57 files changed, 268 insertions(+), 26 deletions(-) create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/like.csv create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_1.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_2.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_3.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_4.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_5.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_6.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_7.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_8.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_9.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_1.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_2.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_3.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_4.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_8.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_2.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_4.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_8.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_regex_wild_1.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_regex_wild_2.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_1.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_2.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_3.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_1.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_end_1.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_middle_end_1.out create mode 100644 regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_end_1.out create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_1.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_2.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_3.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_4.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_5.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_6.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_7.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_8.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_9.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_1.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_2.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_3.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_4.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_8.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_2.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_4.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_8.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_regex_wild_1.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_regex_wild_2.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_1.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_2.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_3.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_1.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_end_1.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_middle_end_1.sql create mode 100644 regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_end_1.sql diff --git a/be/src/vec/functions/like.cpp b/be/src/vec/functions/like.cpp index 5561c75b758b5f..e599b563ba087e 100644 --- a/be/src/vec/functions/like.cpp +++ b/be/src/vec/functions/like.cpp @@ -38,10 +38,10 @@ static const RE2 STARTS_WITH_RE("\\^([^\\.\\^\\{\\[\\(\\|\\)\\]\\}\\+\\*\\?\\$\\ static const RE2 EQUALS_RE("\\^([^\\.\\^\\{\\[\\(\\|\\)\\]\\}\\+\\*\\?\\$\\\\]*)\\$"); // Like patterns -static const re2::RE2 LIKE_SUBSTRING_RE("(?:%+)(((\\\\%)|(\\\\_)|([^%_]))+)(?:%+)"); -static const re2::RE2 LIKE_ENDS_WITH_RE("(?:%+)([^%_]+)"); -static const re2::RE2 LIKE_STARTS_WITH_RE("(((\\\\%)|(\\\\_)|([^%_]))+)(?:%+)"); -static const re2::RE2 LIKE_EQUALS_RE("(((\\\\%)|(\\\\_)|([^%_]))+)"); +static const re2::RE2 LIKE_SUBSTRING_RE("(?:%+)(((\\\\_)|([^%_\\\\]))+)(?:%+)"); +static const re2::RE2 LIKE_ENDS_WITH_RE("(?:%+)(((\\\\_)|([^%_]))+)"); +static const re2::RE2 LIKE_STARTS_WITH_RE("(((\\\\%)|(\\\\_)|([^%_\\\\]))+)(?:%+)"); +static const re2::RE2 LIKE_EQUALS_RE("(((\\\\_)|([^%_]))+)"); Status LikeSearchState::clone(LikeSearchState& cloned) { cloned.escape_char = escape_char; @@ -513,7 +513,7 @@ void FunctionLike::convert_like_pattern(LikeSearchState* state, const std::strin } // add $ to pattern tail to match line tail - if (pattern.size() > 0 && pattern[pattern.size() - 1] != '%') { + if (pattern.size() > 0 && re_pattern->back() != '*') { re_pattern->append("$"); } } @@ -524,7 +524,8 @@ void FunctionLike::remove_escape_character(std::string* search_string) { int len = tmp_search_string.length(); for (int i = 0; i < len;) { if (tmp_search_string[i] == '\\' && i + 1 < len && - (tmp_search_string[i + 1] == '%' || tmp_search_string[i + 1] == '_')) { + (tmp_search_string[i + 1] == '%' || tmp_search_string[i + 1] == '_' || + tmp_search_string[i + 1] == '\\')) { search_string->append(1, tmp_search_string[i + 1]); i += 2; } else { @@ -586,11 +587,13 @@ Status FunctionLike::open(FunctionContext* context, FunctionContext::FunctionSta if (pattern_str.empty() || RE2::FullMatch(pattern_str, LIKE_EQUALS_RE, &search_string)) { if (VLOG_DEBUG_IS_ON) { verbose_log_match(pattern_str, "LIKE_EQUALS_RE", LIKE_EQUALS_RE); - VLOG_DEBUG << "search_string : " << search_string; + VLOG_DEBUG << "search_string : " << search_string + << ", size: " << search_string.size(); } remove_escape_character(&search_string); if (VLOG_DEBUG_IS_ON) { - VLOG_DEBUG << "search_string escape removed: " << search_string; + VLOG_DEBUG << "search_string escape removed: " << search_string + << ", size: " << search_string.size(); } state->search_state.set_search_string(search_string); state->function = constant_equals_fn; @@ -599,11 +602,13 @@ Status FunctionLike::open(FunctionContext* context, FunctionContext::FunctionSta } else if (RE2::FullMatch(pattern_str, LIKE_STARTS_WITH_RE, &search_string)) { if (VLOG_DEBUG_IS_ON) { verbose_log_match(pattern_str, "LIKE_STARTS_WITH_RE", LIKE_STARTS_WITH_RE); - VLOG_DEBUG << "search_string : " << search_string; + VLOG_DEBUG << "search_string : " << search_string + << ", size: " << search_string.size(); } remove_escape_character(&search_string); if (VLOG_DEBUG_IS_ON) { - VLOG_DEBUG << "search_string escape removed: " << search_string; + VLOG_DEBUG << "search_string escape removed: " << search_string + << ", size: " << search_string.size(); } state->search_state.set_search_string(search_string); state->function = constant_starts_with_fn; @@ -612,11 +617,13 @@ Status FunctionLike::open(FunctionContext* context, FunctionContext::FunctionSta } else if (RE2::FullMatch(pattern_str, LIKE_ENDS_WITH_RE, &search_string)) { if (VLOG_DEBUG_IS_ON) { verbose_log_match(pattern_str, "LIKE_ENDS_WITH_RE", LIKE_ENDS_WITH_RE); - VLOG_DEBUG << "search_string : " << search_string; + VLOG_DEBUG << "search_string : " << search_string + << ", size: " << search_string.size(); } remove_escape_character(&search_string); if (VLOG_DEBUG_IS_ON) { - VLOG_DEBUG << "search_string escape removed: " << search_string; + VLOG_DEBUG << "search_string escape removed: " << search_string + << ", size: " << search_string.size(); } state->search_state.set_search_string(search_string); state->function = constant_ends_with_fn; @@ -625,11 +632,13 @@ Status FunctionLike::open(FunctionContext* context, FunctionContext::FunctionSta } else if (RE2::FullMatch(pattern_str, LIKE_SUBSTRING_RE, &search_string)) { if (VLOG_DEBUG_IS_ON) { verbose_log_match(pattern_str, "LIKE_SUBSTRING_RE", LIKE_SUBSTRING_RE); - VLOG_DEBUG << "search_string : " << search_string; + VLOG_DEBUG << "search_string : " << search_string + << ", size: " << search_string.size(); } remove_escape_character(&search_string); if (VLOG_DEBUG_IS_ON) { - VLOG_DEBUG << "search_string escape removed: " << search_string; + VLOG_DEBUG << "search_string escape removed: " << search_string + << ", size: " << search_string.size(); } state->search_state.set_search_string(search_string); state->function = constant_substring_fn; diff --git a/regression-test/data/query_p0/sql_functions/string_functions/like.csv b/regression-test/data/query_p0/sql_functions/string_functions/like.csv new file mode 100644 index 00000000000000..e8edae4efa7825 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/like.csv @@ -0,0 +1,21 @@ +%test +te%st +test% +%test% +%te%s% +%tes\% +\test +\\test +test\test +test\ +test\\ +\test\ +\tes\t\ +test\\test +_test +te_st +test_ +_test_ +_te_st_ +tes*t +tes?t diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_1.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_1.out new file mode 100644 index 00000000000000..674b4409dab721 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_1.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_1 -- +%te%s% +%tes\\% +%test% +test% + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_2.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_2.out new file mode 100644 index 00000000000000..e325ca06115e4e --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_2.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_2 -- +%te%s% +%tes\\% +%test% +test% + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_3.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_3.out new file mode 100644 index 00000000000000..b914b143b2ee21 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_3.out @@ -0,0 +1,12 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_3 -- +%tes\\% +\\\\test +\\tes\\t\\ +\\test +\\test\\ +test\\ +test\\\\ +test\\\\test +test\\test + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_4.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_4.out new file mode 100644 index 00000000000000..7f47dc88d8987f --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_4.out @@ -0,0 +1,12 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_4 -- +%tes\\% +\\\\test +\\tes\\t\\ +\\test +\\test\\ +test\\ +test\\\\ +test\\\\test +test\\test + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_5.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_5.out new file mode 100644 index 00000000000000..5175a1b159a931 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_5.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_5 -- +%tes\\% + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_6.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_6.out new file mode 100644 index 00000000000000..91cebaaca783dd --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_6.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_6 -- +%tes\\% + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_7.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_7.out new file mode 100644 index 00000000000000..e9668ee354a42e --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_7.out @@ -0,0 +1,6 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_7 -- +\\\\test +test\\\\ +test\\\\test + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_8.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_8.out new file mode 100644 index 00000000000000..faa932d0846261 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_8.out @@ -0,0 +1,6 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_8 -- +\\\\test +test\\\\ +test\\\\test + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_9.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_9.out new file mode 100644 index 00000000000000..140d06c4fd1335 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_9.out @@ -0,0 +1,3 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_9 -- + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_1.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_1.out new file mode 100644 index 00000000000000..6d783a419519ff --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_1.out @@ -0,0 +1,3 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_begin_1 -- + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_2.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_2.out new file mode 100644 index 00000000000000..f8d9ab36f77422 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_2.out @@ -0,0 +1,3 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_begin_2 -- + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_3.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_3.out new file mode 100644 index 00000000000000..634a202a499903 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_3.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_begin_3 -- +\\\\test +\\tes\\t\\ +\\test +\\test\\ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_4.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_4.out new file mode 100644 index 00000000000000..5be16e649e9a98 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_4.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_begin_4 -- +\\\\test +\\tes\\t\\ +\\test +\\test\\ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_8.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_8.out new file mode 100644 index 00000000000000..639ee1d7073659 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_begin_8.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_begin_8 -- +\\\\test + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_2.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_2.out new file mode 100644 index 00000000000000..0f866a3c9832cd --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_2.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_end_2 -- +\\tes\\t\\ +\\test\\ +test\\ +test\\\\ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_4.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_4.out new file mode 100644 index 00000000000000..bd5991f0812328 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_4.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_end_4 -- +\\tes\\t\\ +\\test\\ +test\\ +test\\\\ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_8.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_8.out new file mode 100644 index 00000000000000..556c9276c4cf8a --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_backslash_end_8.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_backslash_end_8 -- +test\\\\ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_regex_wild_1.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_regex_wild_1.out new file mode 100644 index 00000000000000..706910e9ace72b --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_regex_wild_1.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_regex_wild_1 -- +tes?t + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_regex_wild_2.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_regex_wild_2.out new file mode 100644 index 00000000000000..8edf970afdd83e --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_regex_wild_2.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_regex_wild_2 -- +tes*t + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_1.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_1.out new file mode 100644 index 00000000000000..24c78e758070be --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_1.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_wild_many_begin_1 -- +%te%s% +%tes\\% +%test +%test% + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_2.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_2.out new file mode 100644 index 00000000000000..2e76849548cc04 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_2.out @@ -0,0 +1,6 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_wild_many_begin_2 -- +%te%s% +%tes\\% +%test% + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_3.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_3.out new file mode 100644 index 00000000000000..30da8a4469a12f --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_3.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_wild_many_begin_3 -- +%te%s% + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_1.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_1.out new file mode 100644 index 00000000000000..5c0aa3881479e7 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_1.out @@ -0,0 +1,6 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_wild_one_begin_1 -- +_te_st_ +_test +_test_ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_end_1.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_end_1.out new file mode 100644 index 00000000000000..c76c285cc83623 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_end_1.out @@ -0,0 +1,5 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_wild_one_begin_end_1 -- +_te_st_ +_test_ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_middle_end_1.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_middle_end_1.out new file mode 100644 index 00000000000000..fbdb034ba9482d --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_middle_end_1.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_wild_one_begin_middle_end_1 -- +_te_st_ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_end_1.out b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_end_1.out new file mode 100644 index 00000000000000..09266d7a1727d7 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/string_functions/sql/like_wild_one_end_1.out @@ -0,0 +1,6 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !like_wild_one_end_1 -- +_te_st_ +_test_ +test_ + diff --git a/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_like.out b/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_like.out index 0d4628ba6f7bdf..07c1aa78442052 100644 --- a/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_like.out +++ b/regression-test/data/query_p0/sql_functions/string_functions/test_string_function_like.out @@ -121,9 +121,3 @@ bab bb -- !sql -- - --- !sql_like_backslash1 -- -xyz\\\\,xyz - --- !sql_like_backslash2 -- -xyz\\\\,xyz \ No newline at end of file diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/load.groovy b/regression-test/suites/query_p0/sql_functions/string_functions/load.groovy index 0086ed87a5fcb3..06f5634ac08602 100644 --- a/regression-test/suites/query_p0/sql_functions/string_functions/load.groovy +++ b/regression-test/suites/query_p0/sql_functions/string_functions/load.groovy @@ -59,4 +59,53 @@ suite("load") { } } } + + // for like test + def tbName = "test_string_function_like2" + sql "DROP TABLE IF EXISTS ${tbName}" + sql """ + CREATE TABLE IF NOT EXISTS ${tbName} ( + k varchar(32) + ) + DISTRIBUTED BY HASH(k) BUCKETS 5 properties("replication_num" = "1"); + """ + sql """ + INSERT INTO ${tbName} VALUES + (""), + (" "), + ("a"), + ("b"), + ("bb"), + ("bab"), + ("ba"), + ("ab"), + ("accb"); + """ + streamLoad { + // you can skip declare db, because a default db already specify in ${DORIS_HOME}/conf/regression-conf.groovy + // db 'regression_test' + table "${tbName}" + + // default column_separator is specify in doris fe config, usually is '\t'. + // this line change to ',' + set 'column_separator', '|' + // relate to ${DORIS_HOME}/regression-test/data/demo/streamload_input.csv. + // also, you can stream load a http stream, e.g. http://xxx/some.csv + file """like.csv""" + + time 10000 // limit inflight 10s + + // if declared a check callback, the default check condition will ignore. + // So you must check all condition + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals('success', json.Status.toLowerCase()) + assertEquals(json.NumberTotalRows, json.NumberLoadedRows) + assertTrue(json.NumberLoadedRows > 0 && json.LoadBytes > 0) + } + } } \ No newline at end of file diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_1.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_1.sql new file mode 100644 index 00000000000000..50ec5ac31b3bf4 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_1.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_2.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_2.sql new file mode 100644 index 00000000000000..b93ff443c789c8 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_2.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_3.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_3.sql new file mode 100644 index 00000000000000..c2e642ded83f38 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_3.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_4.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_4.sql new file mode 100644 index 00000000000000..1463b1bf640de2 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_4.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_5.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_5.sql new file mode 100644 index 00000000000000..c68efa178a0bf6 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_5.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_6.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_6.sql new file mode 100644 index 00000000000000..7b89020cf3759e --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_6.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_7.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_7.sql new file mode 100644 index 00000000000000..bb265e59a2c021 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_7.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\\\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_8.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_8.sql new file mode 100644 index 00000000000000..c202a9dfb023c8 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_8.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\\\\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_9.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_9.sql new file mode 100644 index 00000000000000..0754bb8b1383e3 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_9.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\\\\\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_1.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_1.sql new file mode 100644 index 00000000000000..9ef466c1cecae2 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_1.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_2.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_2.sql new file mode 100644 index 00000000000000..d4137c446f3e1b --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_2.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_3.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_3.sql new file mode 100644 index 00000000000000..4637af046b094f --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_3.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_4.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_4.sql new file mode 100644 index 00000000000000..0138071280a108 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_4.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_8.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_8.sql new file mode 100644 index 00000000000000..47af27fac58db1 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_begin_8.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\\\\\\\\%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_2.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_2.sql new file mode 100644 index 00000000000000..aa132cb62beee8 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_2.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_4.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_4.sql new file mode 100644 index 00000000000000..22b2a648e30609 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_4.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\\" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_8.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_8.sql new file mode 100644 index 00000000000000..cac0dc0afc5235 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_backslash_end_8.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\\\\\\\\" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_regex_wild_1.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_regex_wild_1.sql new file mode 100644 index 00000000000000..0e610bc2d51668 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_regex_wild_1.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%?%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_regex_wild_2.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_regex_wild_2.sql new file mode 100644 index 00000000000000..bba82b25bdf484 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_regex_wild_2.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%*%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_1.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_1.sql new file mode 100644 index 00000000000000..37466001d318df --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_1.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\%%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_2.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_2.sql new file mode 100644 index 00000000000000..6ea104fd7c4813 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_2.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\%%\%%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_3.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_3.sql new file mode 100644 index 00000000000000..3647e828c200ee --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_many_begin_3.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\%%\%_%%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_1.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_1.sql new file mode 100644 index 00000000000000..59da489ca6c0c0 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_1.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\_%" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_end_1.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_end_1.sql new file mode 100644 index 00000000000000..7b0d3bd6c6fad5 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_end_1.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\_%\_" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_middle_end_1.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_middle_end_1.sql new file mode 100644 index 00000000000000..81f91447e850be --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_begin_middle_end_1.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "\_%\_%\_" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_end_1.sql b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_end_1.sql new file mode 100644 index 00000000000000..d31dd79d18bc35 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/string_functions/sql/like_wild_one_end_1.sql @@ -0,0 +1 @@ +SELECT k FROM test_string_function_like2 WHERE k LIKE "%\_" order by k; diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_like.groovy b/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_like.groovy index 6cfdad4bbf1576..48941ed485fdf1 100644 --- a/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_like.groovy +++ b/regression-test/suites/query_p0/sql_functions/string_functions/test_string_function_like.groovy @@ -63,11 +63,5 @@ suite("test_string_function_like") { qt_sql "SELECT k FROM ${tbName} WHERE k LIKE \"%\" ORDER BY k;" qt_sql "SELECT k FROM ${tbName} WHERE k NOT LIKE \"%\" ORDER BY k;" - sql """ - INSERT INTO ${tbName} VALUES ("xyz\\\\\\\\,xyz"); - """ - qt_sql_like_backslash1 """ SELECT k FROM ${tbName} WHERE k LIKE "%\\\\%"; """ - qt_sql_like_backslash2 """ SELECT k FROM ${tbName} WHERE k LIKE "%\\\\\\\\%"; """ - // sql "DROP TABLE ${tbName};" }