This is an automated email from the ASF dual-hosted git repository.
jianliangqi pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new 02f15a8ef0e [fix](inverted index) Fix Null Pointer Exception in
function match(#45456)(#45774)
02f15a8ef0e is described below
commit 02f15a8ef0ed51a1f6560c567fcdca4df8f97d3e
Author: zzzxl <[email protected]>
AuthorDate: Tue Dec 24 11:27:13 2024 +0800
[fix](inverted index) Fix Null Pointer Exception in function
match(#45456)(#45774)
pick: https://github.com/apache/doris/pull/45456
---
be/src/vec/functions/match.cpp | 3 ++
be/test/vec/function/function_match_test.cpp | 61 ++++++++++++++++++++++++++++
2 files changed, 64 insertions(+)
diff --git a/be/src/vec/functions/match.cpp b/be/src/vec/functions/match.cpp
index 4866c444d7c..5874c5c5c57 100644
--- a/be/src/vec/functions/match.cpp
+++ b/be/src/vec/functions/match.cpp
@@ -171,6 +171,9 @@ void
FunctionMatchBase::analyse_query_str_token(std::vector<std::string>* query_
const std::string&
column_name) const {
VLOG_DEBUG << "begin to run " << get_name() << ", parser_type: "
<<
inverted_index_parser_type_to_string(inverted_index_ctx->parser_type);
+ if (inverted_index_ctx == nullptr) {
+ return;
+ }
if (inverted_index_ctx->parser_type ==
InvertedIndexParserType::PARSER_NONE) {
query_tokens->emplace_back(match_query_str);
return;
diff --git a/be/test/vec/function/function_match_test.cpp
b/be/test/vec/function/function_match_test.cpp
new file mode 100644
index 00000000000..a99650e66eb
--- /dev/null
+++ b/be/test/vec/function/function_match_test.cpp
@@ -0,0 +1,61 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include <gtest/gtest.h>
+
+#include <memory>
+
+#include "function_test_util.h"
+#include "olap/rowset/segment_v2/inverted_index_reader.h"
+#include "vec/functions/match.h"
+
+namespace doris::vectorized {
+
+TEST(FunctionMatchTest, analyse_query_str) {
+ FunctionMatchPhrase func_match_phrase;
+
+ {
+ auto inverted_index_ctx = nullptr;
+ std::vector<std::string> query_tokens;
+ func_match_phrase.analyse_query_str_token(&query_tokens,
inverted_index_ctx, "a b c",
+ "name");
+ ASSERT_EQ(query_tokens.size(), 0);
+ }
+
+ {
+ auto inverted_index_ctx = std::make_unique<InvertedIndexCtx>();
+ inverted_index_ctx->parser_type = InvertedIndexParserType::PARSER_NONE;
+ std::vector<std::string> query_tokens;
+ func_match_phrase.analyse_query_str_token(&query_tokens,
inverted_index_ctx.get(), "a b c",
+ "name");
+ ASSERT_EQ(query_tokens.size(), 1);
+ }
+
+ {
+ auto inverted_index_ctx = std::make_unique<InvertedIndexCtx>();
+ inverted_index_ctx->parser_type =
InvertedIndexParserType::PARSER_ENGLISH;
+ auto analyzer =
+
doris::segment_v2::InvertedIndexReader::create_analyzer(inverted_index_ctx.get());
+ inverted_index_ctx->analyzer = analyzer.get();
+ std::vector<std::string> query_tokens;
+ func_match_phrase.analyse_query_str_token(&query_tokens,
inverted_index_ctx.get(), "a b c",
+ "name");
+ ASSERT_EQ(query_tokens.size(), 3);
+ }
+}
+
+} // namespace doris::vectorized
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]