diff --git a/velox/functions/lib/Re2Functions.cpp b/velox/functions/lib/Re2Functions.cpp index a3bbfc248a98..44f8b66e31b9 100644 --- a/velox/functions/lib/Re2Functions.cpp +++ b/velox/functions/lib/Re2Functions.cpp @@ -2202,13 +2202,16 @@ std::shared_ptr makeLike( PatternMetadata patternMetadata = PatternMetadata::generic(); try { // Fast path for substrings search. - auto substrings = - PatternMetadata::parseSubstrings(std::string_view(pattern)); - if (substrings.size() > 0) { - patternMetadata = PatternMetadata::substrings(std::move(substrings)); - return std::make_shared>( - patternMetadata); + if (!escapeChar.has_value()) { + auto substrings = + PatternMetadata::parseSubstrings(std::string_view(pattern)); + if (substrings.size() > 0) { + patternMetadata = PatternMetadata::substrings(std::move(substrings)); + return std::make_shared>( + patternMetadata); + } } + patternMetadata = determinePatternKind(std::string_view(pattern), escapeChar); } catch (...) { diff --git a/velox/functions/lib/tests/Re2FunctionsTest.cpp b/velox/functions/lib/tests/Re2FunctionsTest.cpp index 2ff23abae75e..3197c750a067 100644 --- a/velox/functions/lib/tests/Re2FunctionsTest.cpp +++ b/velox/functions/lib/tests/Re2FunctionsTest.cpp @@ -939,6 +939,7 @@ TEST_F(Re2FunctionsTest, likePatternAndEscape) { testLike("a%c", "%#%%", '#', true); testLike("%cd", "%#%%", '#', true); testLike("cde", "%#%%", '#', false); + testLike("///__", "%//%/%", '/', false); testLike( "abcd",