HappenLee commented on code in PR #32333:
URL: https://github.com/apache/doris/pull/32333#discussion_r1528042121


##########
be/src/vec/functions/like.cpp:
##########
@@ -60,6 +60,129 @@ static const re2::RE2 
LIKE_STARTS_WITH_RE(R"((((\\%)|(\\_)|([^%_\\]))+)(?:%+))")
 static const re2::RE2 LIKE_EQUALS_RE("(((\\\\_)|([^%_]))+)");
 static const re2::RE2 LIKE_ALLPASS_RE("%+");
 
+struct VectorAllpassSearchState : public VectorPatternSearchState {
+    VectorAllpassSearchState() : 
VectorPatternSearchState(FunctionLikeBase::vector_allpass_fn) {}
+
+    ~VectorAllpassSearchState() override = default;
+
+    void like_pattern_match(const std::string& pattern_str) override {
+        if (!pattern_str.empty() && RE2::FullMatch(pattern_str, 
LIKE_ALLPASS_RE)) {
+            _search_strings->insert_default();
+        } else {
+            _pattern_matched = false;
+        }
+    }
+
+    void regexp_pattern_match(const std::string& pattern_str) override {
+        if (RE2::FullMatch(pattern_str, ALLPASS_RE)) {
+            _search_strings->insert_default();
+        } else {
+            _pattern_matched = false;
+        }
+    }
+};
+
+struct VectorEqualSearchState : public VectorPatternSearchState {
+    VectorEqualSearchState() : 
VectorPatternSearchState(FunctionLikeBase::vector_equals_fn) {}
+
+    ~VectorEqualSearchState() override = default;
+
+    void like_pattern_match(const std::string& pattern_str) override {
+        std::string search_string;
+        if (pattern_str.empty() || RE2::FullMatch(pattern_str, LIKE_EQUALS_RE, 
&search_string)) {
+            FunctionLike::remove_escape_character(&search_string);
+            _search_strings->insert_data(search_string.c_str(), 
search_string.size());
+        } else {
+            _pattern_matched = false;
+        }
+    }
+
+    void regexp_pattern_match(const std::string& pattern_str) override {
+        std::string search_string;
+        if (RE2::FullMatch(pattern_str, EQUALS_RE, &search_string)) {
+            _search_strings->insert_data(search_string.c_str(), 
search_string.size());
+        } else {
+            _pattern_matched = false;
+        }
+    }
+};
+
+struct VectorSubStringSearchState : public VectorPatternSearchState {
+    VectorSubStringSearchState()
+            : VectorPatternSearchState(FunctionLikeBase::vector_substring_fn) 
{}
+
+    ~VectorSubStringSearchState() override = default;
+
+    void like_pattern_match(const std::string& pattern_str) override {
+        std::string search_string;
+        if (RE2::FullMatch(pattern_str, LIKE_SUBSTRING_RE, &search_string)) {
+            FunctionLike::remove_escape_character(&search_string);
+            _search_strings->insert_data(search_string.c_str(), 
search_string.size());
+        } else {
+            _pattern_matched = false;
+        }
+    }
+
+    void regexp_pattern_match(const std::string& pattern_str) override {
+        std::string search_string;
+        if (RE2::FullMatch(pattern_str, SUBSTRING_RE, &search_string)) {
+            _search_strings->insert_data(search_string.c_str(), 
search_string.size());
+        } else {
+            _pattern_matched = false;
+        }
+    }
+};
+
+struct VectorStartsWithSearchState : public VectorPatternSearchState {
+    VectorStartsWithSearchState()
+            : 
VectorPatternSearchState(FunctionLikeBase::vector_starts_with_fn) {}
+    ~VectorStartsWithSearchState() override = default;
+
+    void like_pattern_match(const std::string& pattern_str) override {
+        std::string search_string;
+        if (RE2::FullMatch(pattern_str, LIKE_STARTS_WITH_RE, &search_string)) {
+            FunctionLike::remove_escape_character(&search_string);
+            _search_strings->insert_data(search_string.c_str(), 
search_string.size());
+        } else {
+            _pattern_matched = false;
+        }
+    }
+
+    void regexp_pattern_match(const std::string& pattern_str) override {
+        std::string search_string;
+        if (RE2::FullMatch(pattern_str, STARTS_WITH_RE, &search_string)) {
+            _search_strings->insert_data(search_string.c_str(), 
search_string.size());
+        } else {
+            _pattern_matched = false;
+        }
+    }
+};
+
+struct VectorEndsWithSearchState : public VectorPatternSearchState {
+    VectorEndsWithSearchState() : 
VectorPatternSearchState(FunctionLikeBase::vector_ends_with_fn) {}
+
+    ~VectorEndsWithSearchState() override = default;
+
+    void like_pattern_match(const std::string& pattern_str) override {
+        std::string search_string;

Review Comment:
   reuse the string val



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to