This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new 430d74bb7cd [Chore](pick) pick #59906 #59786 (#60050)
430d74bb7cd is described below
commit 430d74bb7cd211a8a278d006a1fc06deb432a02b
Author: Pxl <[email protected]>
AuthorDate: Fri Jan 30 16:26:43 2026 +0800
[Chore](pick) pick #59906 #59786 (#60050)
https://github.com/apache/doris/pull/59906
https://github.com/apache/doris/pull/59786
---
be/CMakeLists.txt | 2 --
be/src/exprs/function_filter.h | 2 +-
be/src/exprs/math_functions.cpp | 2 +-
be/src/olap/like_column_predicate.cpp | 2 +-
be/src/olap/tablet_schema.h | 1 -
.../exec/multi_cast_data_stream_source.cpp | 4 ++-
be/src/pipeline/exec/scan_operator.cpp | 25 ++++++++++++---
be/src/pipeline/exec/scan_operator.h | 14 ++++++---
.../runtime_filter_consumer_helper.cpp | 24 ++++-----------
.../runtime_filter_consumer_helper.h | 11 +++----
be/src/udf/CMakeLists.txt | 26 ----------------
be/src/util/bitmap_value.h | 1 -
be/src/util/counts.h | 1 -
be/src/vec/columns/column_const.h | 1 +
be/src/vec/common/schema_util.cpp | 2 +-
be/src/vec/common/schema_util.h | 1 -
be/src/vec/common/string_buffer.hpp | 1 +
be/src/vec/exec/scan/file_scanner.cpp | 8 ++---
be/src/vec/exec/scan/scanner.cpp | 18 +++--------
be/src/vec/exec/scan/scanner.h | 14 +--------
.../udf.cpp => vec/exprs/function_context.cpp} | 7 ++---
be/src/{udf/udf.h => vec/exprs/function_context.h} | 36 ++++++++++------------
be/src/vec/exprs/vbitmap_predicate.h | 2 +-
be/src/vec/exprs/vbloom_predicate.h | 2 +-
be/src/vec/exprs/vcase_expr.h | 2 +-
be/src/vec/exprs/vcast_expr.h | 2 +-
be/src/vec/exprs/vcondition_expr.cpp | 2 +-
be/src/vec/exprs/vcondition_expr.h | 2 +-
be/src/vec/exprs/vectorized_fn_call.cpp | 2 +-
be/src/vec/exprs/vectorized_fn_call.h | 2 +-
be/src/vec/exprs/vexpr.h | 2 +-
be/src/vec/exprs/vexpr_context.cpp | 2 +-
be/src/vec/exprs/vexpr_context.h | 2 +-
be/src/vec/exprs/vin_predicate.h | 2 +-
be/src/vec/exprs/vmatch_predicate.h | 2 +-
be/src/vec/exprs/vruntimefilter_wrapper.h | 2 +-
be/src/vec/functions/date_time_transforms.h | 2 +-
be/src/vec/functions/function.h | 2 +-
be/src/vec/functions/function_convert_tz.cpp | 3 +-
.../function_date_or_datetime_computation.h | 3 +-
be/src/vec/functions/function_java_udf.h | 2 +-
be/src/vec/functions/function_jsonb.cpp | 2 +-
be/src/vec/functions/function_multi_same_args.h | 2 +-
.../vec/functions/function_other_types_to_date.cpp | 3 +-
be/src/vec/functions/function_regexp.cpp | 2 +-
be/src/vec/functions/function_rpc.h | 2 +-
be/src/vec/functions/function_string.h | 2 +-
be/src/vec/functions/function_tokenize.h | 2 +-
be/src/vec/functions/functions_geo.h | 2 +-
be/src/vec/functions/in.h | 2 +-
be/src/vec/functions/like.h | 2 +-
be/src/vec/functions/random.cpp | 2 +-
be/src/vec/functions/simple_function_factory.h | 2 +-
be/src/vec/functions/uniform.cpp | 2 +-
be/src/vec/sink/vmysql_result_writer.cpp | 1 -
be/src/vec/sink/writer/vhive_table_writer.h | 1 +
be/src/vec/utils/stringop_substring.h | 1 -
.../operator/analytic_sink_operator_test.cpp | 1 -
be/test/pipeline/thrift_builder.h | 1 -
.../runtime_filter_consumer_helper_test.cpp | 2 +-
be/test/testutil/function_utils.cpp | 2 +-
be/test/vec/exec/exchange_sink_test.h | 1 -
be/test/vec/exprs/try_cast_expr_test.cpp | 2 +-
be/test/vec/function/function_eq_for_null_test.cpp | 2 +-
be/test/vec/function/function_jsonb_test.cpp | 2 +-
be/test/vec/function/function_test_util.h | 2 +-
66 files changed, 116 insertions(+), 172 deletions(-)
diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt
index 2946f13a595..71eec4cb1ce 100644
--- a/be/CMakeLists.txt
+++ b/be/CMakeLists.txt
@@ -520,7 +520,6 @@ set(DORIS_LINK_LIBS
Runtime
RuntimeFilter
Service
- Udf
Util
DorisGen
Webserver
@@ -829,7 +828,6 @@ add_subdirectory(${SRC_DIR}/olap)
add_subdirectory(${SRC_DIR}/runtime)
add_subdirectory(${SRC_DIR}/runtime_filter)
add_subdirectory(${SRC_DIR}/service) # this include doris_be
-add_subdirectory(${SRC_DIR}/udf)
add_subdirectory(${SRC_DIR}/cloud)
option(BUILD_META_TOOL "Build meta tool" OFF)
diff --git a/be/src/exprs/function_filter.h b/be/src/exprs/function_filter.h
index f48010623a0..f91fb8682e6 100644
--- a/be/src/exprs/function_filter.h
+++ b/be/src/exprs/function_filter.h
@@ -18,8 +18,8 @@
#include <memory>
-#include "udf/udf.h"
#include "vec/common/string_ref.h" // IWYU pragma: keep
+#include "vec/exprs/function_context.h"
namespace doris {
diff --git a/be/src/exprs/math_functions.cpp b/be/src/exprs/math_functions.cpp
index 6b1d060e06b..b39a263799a 100644
--- a/be/src/exprs/math_functions.cpp
+++ b/be/src/exprs/math_functions.cpp
@@ -29,8 +29,8 @@
#include <limits>
#include <string_view>
-#include "udf/udf.h"
#include "util/string_parser.hpp"
+#include "vec/exprs/function_context.h"
namespace doris {
diff --git a/be/src/olap/like_column_predicate.cpp
b/be/src/olap/like_column_predicate.cpp
index 813acaabca6..ca9d45c3af5 100644
--- a/be/src/olap/like_column_predicate.cpp
+++ b/be/src/olap/like_column_predicate.cpp
@@ -18,9 +18,9 @@
#include "olap/like_column_predicate.h"
#include "runtime/define_primitive_type.h"
-#include "udf/udf.h"
#include "vec/columns/predicate_column.h"
#include "vec/common/string_ref.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/like.h"
namespace doris {
diff --git a/be/src/olap/tablet_schema.h b/be/src/olap/tablet_schema.h
index fca6645bee8..57da8305590 100644
--- a/be/src/olap/tablet_schema.h
+++ b/be/src/olap/tablet_schema.h
@@ -42,7 +42,6 @@
#include "runtime/define_primitive_type.h"
#include "runtime/descriptors.h"
#include "runtime/memory/lru_cache_policy.h"
-#include "udf/udf.h"
#include "util/debug_points.h"
#include "util/string_parser.hpp"
#include "util/string_util.h"
diff --git a/be/src/pipeline/exec/multi_cast_data_stream_source.cpp
b/be/src/pipeline/exec/multi_cast_data_stream_source.cpp
index 6933937737c..936199ad20b 100644
--- a/be/src/pipeline/exec/multi_cast_data_stream_source.cpp
+++ b/be/src/pipeline/exec/multi_cast_data_stream_source.cpp
@@ -97,8 +97,10 @@ Status
MultiCastDataStreamerSourceOperatorX::get_block(RuntimeState* state,
}
int arrived_rf_num = 0;
+ // No lock needed here because this is single-threaded execution without
scanners
+ // and no concurrent access to _conjuncts
RETURN_IF_ERROR(local_state._helper.try_append_late_arrival_runtime_filter(
- state, &arrived_rf_num, local_state._conjuncts,
_multi_cast_output_row_descriptor));
+ state, _multi_cast_output_row_descriptor, arrived_rf_num,
local_state._conjuncts));
if (!local_state._conjuncts.empty() && !output_block->empty()) {
SCOPED_TIMER(local_state._filter_timer);
diff --git a/be/src/pipeline/exec/scan_operator.cpp
b/be/src/pipeline/exec/scan_operator.cpp
index 6a4d34ac6d5..143fb9cab8b 100644
--- a/be/src/pipeline/exec/scan_operator.cpp
+++ b/be/src/pipeline/exec/scan_operator.cpp
@@ -73,6 +73,24 @@ bool ScanLocalState<Derived>::should_run_serial() const {
return _parent->cast<typename Derived::Parent>()._should_run_serial;
}
+Status ScanLocalStateBase::update_late_arrival_runtime_filter(RuntimeState*
state,
+ int&
arrived_rf_num) {
+ // Lock needed because _conjuncts can be accessed concurrently by multiple
scanner threads
+ std::unique_lock lock(_conjuncts_lock);
+ return _helper.try_append_late_arrival_runtime_filter(state,
_parent->row_descriptor(),
+ arrived_rf_num,
_conjuncts);
+}
+
+Status ScanLocalStateBase::clone_conjunct_ctxs(vectorized::VExprContextSPtrs&
scanner_conjuncts) {
+ // Lock needed because _conjuncts can be accessed concurrently by multiple
scanner threads
+ std::unique_lock lock(_conjuncts_lock);
+ scanner_conjuncts.resize(_conjuncts.size());
+ for (size_t i = 0; i != _conjuncts.size(); ++i) {
+ RETURN_IF_ERROR(_conjuncts[i]->clone(_state, scanner_conjuncts[i]));
+ }
+ return Status::OK();
+}
+
int ScanLocalStateBase::max_scanners_concurrency(RuntimeState* state) const {
// For select * from table limit 10; should just use one thread.
if (should_run_serial()) {
@@ -151,10 +169,6 @@ Status ScanLocalState<Derived>::open(RuntimeState* state) {
p._common_expr_ctxs_push_down[i]->clone(state,
_common_expr_ctxs_push_down[i]));
}
RETURN_IF_ERROR(_helper.acquire_runtime_filter(state, _conjuncts,
p.row_descriptor()));
- _stale_expr_ctxs.resize(p._stale_expr_ctxs.size());
- for (size_t i = 0; i < _stale_expr_ctxs.size(); i++) {
- RETURN_IF_ERROR(p._stale_expr_ctxs[i]->clone(state,
_stale_expr_ctxs[i]));
- }
RETURN_IF_ERROR(_process_conjuncts(state));
auto status = _eos ? Status::OK() : _prepare_scanners();
@@ -274,7 +288,8 @@ Status
ScanLocalState<Derived>::_normalize_conjuncts(RuntimeState* state) {
continue;
}
} else { // All conjuncts are pushed down as predicate column
- _stale_expr_ctxs.emplace_back(conjunct);
+ _stale_expr_ctxs.emplace_back(
+ conjunct); // avoid function context and constant str
being freed
it = _conjuncts.erase(it);
continue;
}
diff --git a/be/src/pipeline/exec/scan_operator.h
b/be/src/pipeline/exec/scan_operator.h
index 2b695479e71..3f98ad83c12 100644
--- a/be/src/pipeline/exec/scan_operator.h
+++ b/be/src/pipeline/exec/scan_operator.h
@@ -18,6 +18,7 @@
#pragma once
#include <cstdint>
+#include <mutex>
#include <string>
#include "common/status.h"
@@ -85,6 +86,10 @@ public:
[[nodiscard]] std::string get_name() { return _parent->get_name(); }
+ Status update_late_arrival_runtime_filter(RuntimeState* state, int&
arrived_rf_num);
+
+ Status clone_conjunct_ctxs(vectorized::VExprContextSPtrs&
scanner_conjuncts);
+
protected:
friend class vectorized::ScannerContext;
friend class vectorized::Scanner;
@@ -118,6 +123,7 @@ protected:
RuntimeProfile::Counter* _scan_rows = nullptr;
RuntimeProfile::Counter* _scan_bytes = nullptr;
+ std::mutex _conjuncts_lock;
RuntimeFilterConsumerHelper _helper;
};
@@ -301,8 +307,9 @@ protected:
Status _get_topn_filters(RuntimeState* state);
- // Every time vconjunct_ctx_ptr is updated, the old ctx will be stored in
this vector
- // so that it will be destroyed uniformly at the end of the query.
+ // Stores conjuncts that have been fully pushed down to the storage layer
as predicate columns.
+ // These expr contexts are kept alive to prevent their FunctionContext and
constant strings
+ // from being freed prematurely.
vectorized::VExprContextSPtrs _stale_expr_ctxs;
vectorized::VExprContextSPtrs _common_expr_ctxs_push_down;
@@ -411,9 +418,6 @@ protected:
// single scanner to avoid too many scanners which will cause lots of
useless read.
bool _should_run_serial = false;
- // Every time vconjunct_ctx_ptr is updated, the old ctx will be stored in
this vector
- // so that it will be destroyed uniformly at the end of the query.
- vectorized::VExprContextSPtrs _stale_expr_ctxs;
vectorized::VExprContextSPtrs _common_expr_ctxs_push_down;
// If sort info is set, push limit to each scanner;
diff --git a/be/src/runtime_filter/runtime_filter_consumer_helper.cpp
b/be/src/runtime_filter/runtime_filter_consumer_helper.cpp
index bf871d34fec..3e920b33a6d 100644
--- a/be/src/runtime_filter/runtime_filter_consumer_helper.cpp
+++ b/be/src/runtime_filter/runtime_filter_consumer_helper.cpp
@@ -96,10 +96,10 @@ Status
RuntimeFilterConsumerHelper::_append_rf_into_conjuncts(
}
Status RuntimeFilterConsumerHelper::try_append_late_arrival_runtime_filter(
- RuntimeState* state, int* arrived_rf_num,
vectorized::VExprContextSPtrs& conjuncts,
- const RowDescriptor& row_descriptor) {
+ RuntimeState* state, const RowDescriptor& row_descriptor, int&
arrived_rf_num,
+ vectorized::VExprContextSPtrs& arrived_conjuncts) {
if (_is_all_rf_applied) {
- *arrived_rf_num = cast_set<int>(_runtime_filter_descs.size());
+ arrived_rf_num = cast_set<int>(_runtime_filter_descs.size());
return Status::OK();
}
@@ -107,7 +107,7 @@ Status
RuntimeFilterConsumerHelper::try_append_late_arrival_runtime_filter(
// So need to add lock
std::unique_lock l(_rf_locks);
if (_is_all_rf_applied) {
- *arrived_rf_num = cast_set<int>(_runtime_filter_descs.size());
+ arrived_rf_num = cast_set<int>(_runtime_filter_descs.size());
return Status::OK();
}
@@ -120,24 +120,12 @@ Status
RuntimeFilterConsumerHelper::try_append_late_arrival_runtime_filter(
}
// 2. Append unapplied runtime filters to _conjuncts
if (!exprs.empty()) {
- RETURN_IF_ERROR(_append_rf_into_conjuncts(state, exprs, conjuncts,
row_descriptor));
+ RETURN_IF_ERROR(_append_rf_into_conjuncts(state, exprs,
arrived_conjuncts, row_descriptor));
}
if (current_arrived_rf_num == _runtime_filter_descs.size()) {
_is_all_rf_applied = true;
}
-
- *arrived_rf_num = current_arrived_rf_num;
- return Status::OK();
-}
-
-Status RuntimeFilterConsumerHelper::clone_conjunct_ctxs(
- RuntimeState* state, vectorized::VExprContextSPtrs& scanner_conjuncts,
- vectorized::VExprContextSPtrs& local_state_conjuncts) {
- std::unique_lock l(_rf_locks);
- scanner_conjuncts.resize(local_state_conjuncts.size());
- for (size_t i = 0; i != local_state_conjuncts.size(); ++i) {
- RETURN_IF_ERROR(local_state_conjuncts[i]->clone(state,
scanner_conjuncts[i]));
- }
+ arrived_rf_num = current_arrived_rf_num;
return Status::OK();
}
diff --git a/be/src/runtime_filter/runtime_filter_consumer_helper.h
b/be/src/runtime_filter/runtime_filter_consumer_helper.h
index 6b077ac3885..e69fff0e7c5 100644
--- a/be/src/runtime_filter/runtime_filter_consumer_helper.h
+++ b/be/src/runtime_filter/runtime_filter_consumer_helper.h
@@ -44,13 +44,10 @@ public:
// The un-arrival filters will be checked every time the scanner is
scheduled.
// And once new runtime filters arrived, we will use it to do operator's
filtering.
// Called by Scanner.
- Status try_append_late_arrival_runtime_filter(RuntimeState* state, int*
arrived_rf_num,
-
vectorized::VExprContextSPtrs& conjuncts,
- const RowDescriptor&
row_descriptor);
-
- Status clone_conjunct_ctxs(RuntimeState* state,
- vectorized::VExprContextSPtrs&
scanner_conjuncts,
- vectorized::VExprContextSPtrs&
local_state_conjuncts);
+ Status try_append_late_arrival_runtime_filter(RuntimeState* state,
+ const RowDescriptor&
row_descriptor,
+ int& arrived_rf_num,
+
vectorized::VExprContextSPtrs& arrived_conjuncts);
// Called by XXXLocalState::close()
// parent_operator_profile is owned by LocalState so update it is safe at
here.
diff --git a/be/src/udf/CMakeLists.txt b/be/src/udf/CMakeLists.txt
deleted file mode 100755
index 60ea86cf761..00000000000
--- a/be/src/udf/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# 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.
-
-set(LIBRARY_OUTPUT_PATH "${BUILD_DIR}/src/udf")
-
-# where to put generated binaries
-set(EXECUTABLE_OUTPUT_PATH "${BUILD_DIR}/src/udf")
-
-# Build this library twice. Once to be linked into the main Doris. This version
-# can have dependencies on our other libs. The second version is shipped as
part
-# of the UDF sdk, which can't use other libs.
-add_library(Udf STATIC udf.cpp)
\ No newline at end of file
diff --git a/be/src/util/bitmap_value.h b/be/src/util/bitmap_value.h
index dbdd1ff84c1..77a1a9a0b1d 100644
--- a/be/src/util/bitmap_value.h
+++ b/be/src/util/bitmap_value.h
@@ -39,7 +39,6 @@
#include "common/config.h"
#include "common/exception.h"
#include "common/logging.h"
-#include "udf/udf.h"
#include "util/coding.h"
#include "vec/common/pod_array.h"
#include "vec/common/pod_array_fwd.h"
diff --git a/be/src/util/counts.h b/be/src/util/counts.h
index 178481e7c90..5954ef31cb4 100644
--- a/be/src/util/counts.h
+++ b/be/src/util/counts.h
@@ -23,7 +23,6 @@
#include <cmath>
#include <queue>
-#include "udf/udf.h"
#include "vec/common/pod_array.h"
#include "vec/common/string_buffer.hpp"
#include "vec/io/io_helper.h"
diff --git a/be/src/vec/columns/column_const.h
b/be/src/vec/columns/column_const.h
index f3d20836581..cbb39867441 100644
--- a/be/src/vec/columns/column_const.h
+++ b/be/src/vec/columns/column_const.h
@@ -34,6 +34,7 @@
#include "vec/columns/column.h"
#include "vec/columns/column_nullable.h"
+#include "vec/common/arena.h"
#include "vec/common/assert_cast.h"
#include "vec/common/cow.h"
#include "vec/common/string_ref.h"
diff --git a/be/src/vec/common/schema_util.cpp
b/be/src/vec/common/schema_util.cpp
index 27e3c3ec7f4..7f49dc1dd02 100644
--- a/be/src/vec/common/schema_util.cpp
+++ b/be/src/vec/common/schema_util.cpp
@@ -60,7 +60,6 @@
#include "runtime/exec_env.h"
#include "runtime/primitive_type.h"
#include "runtime/runtime_state.h"
-#include "udf/udf.h"
#include "util/defer_op.h"
#include "vec/columns/column.h"
#include "vec/columns/column_array.h"
@@ -84,6 +83,7 @@
#include "vec/data_types/data_type_string.h"
#include "vec/data_types/data_type_variant.h"
#include "vec/data_types/get_least_supertype.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
#include "vec/functions/simple_function_factory.h"
#include "vec/json/json_parser.h"
diff --git a/be/src/vec/common/schema_util.h b/be/src/vec/common/schema_util.h
index 8e738ee3c10..849f0ae4e1e 100644
--- a/be/src/vec/common/schema_util.h
+++ b/be/src/vec/common/schema_util.h
@@ -29,7 +29,6 @@
#include "common/status.h"
#include "olap/tablet_fwd.h"
#include "olap/tablet_schema.h"
-#include "udf/udf.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
#include "vec/columns/column_variant.h"
diff --git a/be/src/vec/common/string_buffer.hpp
b/be/src/vec/common/string_buffer.hpp
index 15d4f933db9..809bdffcd58 100644
--- a/be/src/vec/common/string_buffer.hpp
+++ b/be/src/vec/common/string_buffer.hpp
@@ -21,6 +21,7 @@
#include <cstring>
#include "vec/columns/column_string.h"
+#include "vec/common/arena.h"
#include "vec/common/string_ref.h"
namespace doris::vectorized {
diff --git a/be/src/vec/exec/scan/file_scanner.cpp
b/be/src/vec/exec/scan/file_scanner.cpp
index 872f2b51c22..be471a85438 100644
--- a/be/src/vec/exec/scan/file_scanner.cpp
+++ b/be/src/vec/exec/scan/file_scanner.cpp
@@ -362,13 +362,9 @@ Status FileScanner::_process_late_arrival_conjuncts(bool*
changed,
*changed = false;
if (_push_down_conjuncts.size() < _conjuncts.size()) {
*changed = true;
- _push_down_conjuncts.clear();
- _push_down_conjuncts.resize(_conjuncts.size());
- for (size_t i = 0; i != _conjuncts.size(); ++i) {
- RETURN_IF_ERROR(_conjuncts[i]->clone(_state,
_push_down_conjuncts[i]));
- }
+ _push_down_conjuncts = _conjuncts;
+ _conjuncts.clear();
RETURN_IF_ERROR(_process_conjuncts());
- _discard_conjuncts();
new_push_down_conjuncts = _push_down_conjuncts;
}
if (_applied_rf_num == _total_rf_num) {
diff --git a/be/src/vec/exec/scan/scanner.cpp b/be/src/vec/exec/scan/scanner.cpp
index 517c45d14cc..483aa545eec 100644
--- a/be/src/vec/exec/scan/scanner.cpp
+++ b/be/src/vec/exec/scan/scanner.cpp
@@ -193,27 +193,17 @@ Status Scanner::try_append_late_arrival_runtime_filter() {
return Status::OK();
}
DCHECK(_applied_rf_num < _total_rf_num);
-
int arrived_rf_num = 0;
-
RETURN_IF_ERROR(_local_state->_helper.try_append_late_arrival_runtime_filter(
- _state, &arrived_rf_num, _local_state->_conjuncts,
- _local_state->_parent->row_descriptor()));
+ RETURN_IF_ERROR(_local_state->update_late_arrival_runtime_filter(_state,
arrived_rf_num));
if (arrived_rf_num == _applied_rf_num) {
// No newly arrived runtime filters, just return;
return Status::OK();
}
- // There are newly arrived runtime filters,
- // renew the _conjuncts
- if (!_conjuncts.empty()) {
- _discard_conjuncts();
- }
- // Notice that the number of runtime filters may be larger than
_applied_rf_num.
- // But it is ok because it will be updated at next time.
- RETURN_IF_ERROR(_local_state->_helper.clone_conjunct_ctxs(_state,
_conjuncts,
-
_local_state->_conjuncts));
- _applied_rf_num = arrived_rf_num;
+ // avoid conjunct destroy in used by storage layer
+ _conjuncts.clear();
+ RETURN_IF_ERROR(_local_state->clone_conjunct_ctxs(_conjuncts));
return Status::OK();
}
diff --git a/be/src/vec/exec/scan/scanner.h b/be/src/vec/exec/scan/scanner.h
index f48be266bb4..060c5db9449 100644
--- a/be/src/vec/exec/scan/scanner.h
+++ b/be/src/vec/exec/scan/scanner.h
@@ -70,7 +70,6 @@ public:
_projections.clear();
_origin_block.clear();
_common_expr_ctxs_push_down.clear();
- _stale_expr_ctxs.clear();
DorisMetrics::instance()->scanner_cnt->increment(-1);
}
@@ -144,7 +143,7 @@ public:
RuntimeState* runtime_state() { return _state; }
- bool is_open() { return _is_open; }
+ bool is_open() const { return _is_open; }
void set_opened() { _is_open = true; }
virtual doris::TabletStorageType get_storage_type() {
@@ -173,13 +172,6 @@ public:
void update_block_avg_bytes(size_t block_avg_bytes) { _block_avg_bytes =
block_avg_bytes; }
protected:
- void _discard_conjuncts() {
- for (auto& conjunct : _conjuncts) {
- _stale_expr_ctxs.emplace_back(conjunct);
- }
- _conjuncts.clear();
- }
-
RuntimeState* _state = nullptr;
pipeline::ScanLocalStateBase* _local_state = nullptr;
@@ -213,10 +205,6 @@ protected:
vectorized::Block _origin_block;
VExprContextSPtrs _common_expr_ctxs_push_down;
- // Late arriving runtime filters will update _conjuncts.
- // The old _conjuncts will be temporarily placed in _stale_expr_ctxs
- // and will be destroyed at the end.
- VExprContextSPtrs _stale_expr_ctxs;
// num of rows read from scanner
int64_t _num_rows_read = 0;
diff --git a/be/src/udf/udf.cpp b/be/src/vec/exprs/function_context.cpp
similarity index 96%
rename from be/src/udf/udf.cpp
rename to be/src/vec/exprs/function_context.cpp
index 185ad46edd6..391ba9142ad 100644
--- a/be/src/udf/udf.cpp
+++ b/be/src/vec/exprs/function_context.cpp
@@ -14,16 +14,13 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-// This file is copied from
-// https://github.com/apache/impala/blob/branch-2.9.0/be/src/udf/udf.cpp
-// and modified by Doris
-#include "udf/udf.h"
+#include "vec/exprs/function_context.h"
#include <iostream>
#include <utility>
-// Be careful what this includes since this needs to be linked into the UDF's
+// Be careful what this includes since this needs to be linked into UDF's
// binary. For example, it would be unfortunate if they had a random dependency
// on libhdfs.
#include "common/cast_set.h"
diff --git a/be/src/udf/udf.h b/be/src/vec/exprs/function_context.h
similarity index 86%
rename from be/src/udf/udf.h
rename to be/src/vec/exprs/function_context.h
index 95106d1fc53..09ea5cd478e 100644
--- a/be/src/udf/udf.h
+++ b/be/src/vec/exprs/function_context.h
@@ -14,9 +14,6 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-// This file is copied from
-// https://github.com/apache/impala/blob/branch-2.9.0/be/src/udf/udf.h
-// and modified by Doris
#pragma once
@@ -43,25 +40,25 @@ class IDataType;
using DataTypePtr = std::shared_ptr<const IDataType>;
} // namespace vectorized
-// The FunctionContext is passed to every UDF/UDA and is the interface for the
UDF to the
-// rest of the system. It contains APIs to examine the system state, report
errors
+// The FunctionContext is passed to every UDF/UDA and is the interface for UDF
to
+// rest of system. It contains APIs to examine system state, report errors
// and manage memory.
class FunctionContext {
public:
enum FunctionStateScope {
- /// Indicates that the function state for this FunctionContext's UDF
is shared across
- /// the plan fragment (a query is divided into multiple plan
fragments, each of which
- /// is responsible for a part of the query execution). Within the plan
fragment, there
- /// may be multiple instances of the UDF executing concurrently with
multiple
+ /// Indicates that function state for this FunctionContext's UDF is
shared across
+ /// plan fragment (a query is divided into multiple plan fragments,
each of which
+ /// is responsible for a part of query execution). Within plan
fragment, there
+ /// may be multiple instances of UDF executing concurrently with
multiple
/// FunctionContexts sharing this state, meaning that the state must be
- /// thread-safe. The Prepare() function for the UDF may be called with
this scope
- /// concurrently on a single host if the UDF will be evaluated in
multiple plan
+ /// thread-safe. The Prepare() function for UDF may be called with
this scope
+ /// concurrently on a single host if UDF will be evaluated in multiple
plan
/// fragments on that host. In general, read-only state that doesn't
need to be
/// recomputed for every UDF call should be fragment-local.
/// TODO: not yet implemented
FRAGMENT_LOCAL,
- /// Indicates that the function state is local to the execution
thread. This state
+ /// Indicates that function state is local to execution thread. This
state
/// does not need to be thread-safe. However, this state will be
initialized (via the
/// Prepare() function) once for every execution thread, so
fragment-local state
/// should be used when possible for better performance. In general,
inexpensive
@@ -120,10 +117,10 @@ public:
// instead just insert a string literal
bool jsonb_string_as_string() const { return _jsonb_string_as_string; }
- // Sets an error for this UDF. If this is called, this will trigger the
+ // Sets an error for this UDF. If this is called, this will trigger a
// query to fail.
- // Note: when you set error for the UDFs used in Data Load, you should
- // ensure the function return value is null.
+ // Note: when you set an error for UDFs used in Data Load, you should
+ // ensure that the function return value is null.
void set_error(const char* error_msg);
// Adds a warning that is returned to the user. This can include things
like
@@ -149,12 +146,12 @@ public:
// argument).
int get_num_args() const;
- // Returns the type information for the arg_idx-th argument (0-indexed,
not including
+ // Returns type information for the arg_idx-th argument (0-indexed, not
including
// the FunctionContext* argument). Returns nullptr if arg_idx is invalid.
const vectorized::DataTypePtr get_arg_type(int arg_idx) const;
- // Returns true if the arg_idx-th input argument (0 indexed, not including
the
- // FunctionContext* argument) is a constant (e.g. 5, "string", 1 + 1).
+ // Returns true if the arg_idx-th input argument (0 indexed, not including
+ // the FunctionContext* argument) is a constant (e.g. 5, "string", 1 + 1).
bool is_col_constant(int arg_idx) const;
// Returns a pointer to the value of the arg_idx-th input argument (0
indexed, not
@@ -200,7 +197,7 @@ private:
std::vector<std::shared_ptr<doris::ColumnPtrWrapper>> _constant_cols;
- //udf execute timer
+ // UDF execute timer
RuntimeProfile::Counter* _udf_execute_timer = nullptr;
bool _check_overflow_for_decimal = false;
bool _enable_strict_mode = false;
@@ -216,4 +213,5 @@ private:
};
using doris::FunctionContext;
+
} // namespace doris
diff --git a/be/src/vec/exprs/vbitmap_predicate.h
b/be/src/vec/exprs/vbitmap_predicate.h
index e753b56001d..0bd02c6c8cf 100644
--- a/be/src/vec/exprs/vbitmap_predicate.h
+++ b/be/src/vec/exprs/vbitmap_predicate.h
@@ -24,7 +24,7 @@
#include "common/object_pool.h"
#include "common/status.h"
-#include "udf/udf.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
namespace doris {
diff --git a/be/src/vec/exprs/vbloom_predicate.h
b/be/src/vec/exprs/vbloom_predicate.h
index 4c2fd980fa4..3a6f5a0160a 100644
--- a/be/src/vec/exprs/vbloom_predicate.h
+++ b/be/src/vec/exprs/vbloom_predicate.h
@@ -22,7 +22,7 @@
#include "common/object_pool.h"
#include "common/status.h"
-#include "udf/udf.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
namespace doris {
diff --git a/be/src/vec/exprs/vcase_expr.h b/be/src/vec/exprs/vcase_expr.h
index 1013aea3d97..db31a42a457 100644
--- a/be/src/vec/exprs/vcase_expr.h
+++ b/be/src/vec/exprs/vcase_expr.h
@@ -23,7 +23,6 @@
#include "common/status.h"
#include "runtime/define_primitive_type.h"
#include "runtime/primitive_type.h"
-#include "udf/udf.h"
#include "vec/columns/column_array.h"
#include "vec/columns/column_complex.h"
#include "vec/columns/column_const.h"
@@ -32,6 +31,7 @@
#include "vec/columns/column_nullable.h"
#include "vec/columns/column_struct.h"
#include "vec/columns/column_variant.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
#include "vec/functions/function.h"
diff --git a/be/src/vec/exprs/vcast_expr.h b/be/src/vec/exprs/vcast_expr.h
index fb652848fd5..c0c8dff508d 100644
--- a/be/src/vec/exprs/vcast_expr.h
+++ b/be/src/vec/exprs/vcast_expr.h
@@ -21,10 +21,10 @@
#include "common/object_pool.h"
#include "common/status.h"
#include "runtime/define_primitive_type.h"
-#include "udf/udf.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/core/column_with_type_and_name.h"
#include "vec/data_types/data_type.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
#include "vec/functions/function.h"
diff --git a/be/src/vec/exprs/vcondition_expr.cpp
b/be/src/vec/exprs/vcondition_expr.cpp
index 60f699ca548..18c18aa68ae 100644
--- a/be/src/vec/exprs/vcondition_expr.cpp
+++ b/be/src/vec/exprs/vcondition_expr.cpp
@@ -19,10 +19,10 @@
#include <glog/logging.h>
-#include "udf/udf.h"
#include "util/simd/bits.h"
#include "vec/columns/column.h"
#include "vec/columns/column_const.h"
+#include "vec/exprs/function_context.h"
namespace doris::vectorized {
diff --git a/be/src/vec/exprs/vcondition_expr.h
b/be/src/vec/exprs/vcondition_expr.h
index 3605aab2094..c1a274e6112 100644
--- a/be/src/vec/exprs/vcondition_expr.h
+++ b/be/src/vec/exprs/vcondition_expr.h
@@ -20,8 +20,8 @@
#include "common/status.h"
#include "runtime/runtime_state.h"
-#include "udf/udf.h"
#include "vec/core/column_numbers.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
#include "vec/exprs/vexpr_context.h"
#include "vec/exprs/vliteral.h"
diff --git a/be/src/vec/exprs/vectorized_fn_call.cpp
b/be/src/vec/exprs/vectorized_fn_call.cpp
index 5cdb46a802f..c0762f37d8f 100644
--- a/be/src/vec/exprs/vectorized_fn_call.cpp
+++ b/be/src/vec/exprs/vectorized_fn_call.cpp
@@ -37,7 +37,6 @@
#include "olap/rowset/segment_v2/virtual_column_iterator.h"
#include "pipeline/pipeline_task.h"
#include "runtime/runtime_state.h"
-#include "udf/udf.h"
#include "vec/columns/column.h"
#include "vec/columns/column_array.h"
#include "vec/columns/column_nullable.h"
@@ -48,6 +47,7 @@
#include "vec/core/types.h"
#include "vec/data_types/data_type.h"
#include "vec/data_types/data_type_agg_state.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/varray_literal.h"
#include "vec/exprs/vcast_expr.h"
#include "vec/exprs/vexpr_context.h"
diff --git a/be/src/vec/exprs/vectorized_fn_call.h
b/be/src/vec/exprs/vectorized_fn_call.h
index f5cc630f8e9..b48b2612a73 100644
--- a/be/src/vec/exprs/vectorized_fn_call.h
+++ b/be/src/vec/exprs/vectorized_fn_call.h
@@ -24,8 +24,8 @@
#include "common/status.h"
#include "olap/rowset/segment_v2/ann_index/ann_range_search_runtime.h"
#include "runtime/runtime_state.h"
-#include "udf/udf.h"
#include "vec/core/column_numbers.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
#include "vec/exprs/vexpr_context.h"
#include "vec/exprs/vliteral.h"
diff --git a/be/src/vec/exprs/vexpr.h b/be/src/vec/exprs/vexpr.h
index 283d0a0608d..452150d5b8a 100644
--- a/be/src/vec/exprs/vexpr.h
+++ b/be/src/vec/exprs/vexpr.h
@@ -39,7 +39,6 @@
#include "runtime/define_primitive_type.h"
#include "runtime/large_int_value.h"
#include "runtime/types.h"
-#include "udf/udf.h"
#include "util/date_func.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
@@ -49,6 +48,7 @@
#include "vec/core/types.h"
#include "vec/data_types/data_type.h"
#include "vec/data_types/data_type_ipv6.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr_context.h"
#include "vec/exprs/vexpr_fwd.h"
#include "vec/functions/cast/cast_to_string.h"
diff --git a/be/src/vec/exprs/vexpr_context.cpp
b/be/src/vec/exprs/vexpr_context.cpp
index e885ec6cde7..7146355d532 100644
--- a/be/src/vec/exprs/vexpr_context.cpp
+++ b/be/src/vec/exprs/vexpr_context.cpp
@@ -29,13 +29,13 @@
#include "olap/olap_common.h"
#include "runtime/runtime_state.h"
#include "runtime/thread_context.h"
-#include "udf/udf.h"
#include "util/simd/bits.h"
#include "vec/columns/column.h"
#include "vec/columns/column_const.h"
#include "vec/core/column_numbers.h"
#include "vec/core/column_with_type_and_name.h"
#include "vec/core/columns_with_type_and_name.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
namespace doris {
diff --git a/be/src/vec/exprs/vexpr_context.h b/be/src/vec/exprs/vexpr_context.h
index 70d686dc1ec..ed0683069de 100644
--- a/be/src/vec/exprs/vexpr_context.h
+++ b/be/src/vec/exprs/vexpr_context.h
@@ -34,10 +34,10 @@
#include "olap/rowset/segment_v2/inverted_index_reader.h"
#include "runtime/runtime_state.h"
#include "runtime/types.h"
-#include "udf/udf.h"
#include "vec/columns/column.h"
#include "vec/core/block.h"
#include "vec/core/column_with_type_and_name.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr_fwd.h"
namespace doris {
diff --git a/be/src/vec/exprs/vin_predicate.h b/be/src/vec/exprs/vin_predicate.h
index a44efc5f34f..12624692fbe 100644
--- a/be/src/vec/exprs/vin_predicate.h
+++ b/be/src/vec/exprs/vin_predicate.h
@@ -21,7 +21,7 @@
#include "common/object_pool.h"
#include "common/status.h"
-#include "udf/udf.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
#include "vec/functions/function.h"
diff --git a/be/src/vec/exprs/vmatch_predicate.h
b/be/src/vec/exprs/vmatch_predicate.h
index 326a76a05f4..1a3368261c8 100644
--- a/be/src/vec/exprs/vmatch_predicate.h
+++ b/be/src/vec/exprs/vmatch_predicate.h
@@ -22,7 +22,7 @@
#include "common/object_pool.h"
#include "common/status.h"
#include "olap/inverted_index_parser.h"
-#include "udf/udf.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
#include "vec/functions/function.h"
diff --git a/be/src/vec/exprs/vruntimefilter_wrapper.h
b/be/src/vec/exprs/vruntimefilter_wrapper.h
index 567899adc7f..fb7c2da0478 100644
--- a/be/src/vec/exprs/vruntimefilter_wrapper.h
+++ b/be/src/vec/exprs/vruntimefilter_wrapper.h
@@ -26,8 +26,8 @@
#include "common/config.h"
#include "common/status.h"
-#include "udf/udf.h"
#include "util/runtime_profile.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vexpr.h"
namespace doris {
diff --git a/be/src/vec/functions/date_time_transforms.h
b/be/src/vec/functions/date_time_transforms.h
index ae85ede97d5..35eaed51fa9 100644
--- a/be/src/vec/functions/date_time_transforms.h
+++ b/be/src/vec/functions/date_time_transforms.h
@@ -25,7 +25,6 @@
#include "common/status.h"
#include "runtime/primitive_type.h"
-#include "udf/udf.h"
#include "util/binary_cast.hpp"
#include "vec/columns/column_nullable.h"
#include "vec/columns/column_string.h"
@@ -38,6 +37,7 @@
#include "vec/data_types/data_type_date_time.h"
#include "vec/data_types/data_type_decimal.h"
#include "vec/data_types/data_type_string.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/date_format_type.h"
#include "vec/runtime/time_value.h"
#include "vec/runtime/vdatetime_value.h"
diff --git a/be/src/vec/functions/function.h b/be/src/vec/functions/function.h
index 05d98e5bcb1..ca872a147a7 100644
--- a/be/src/vec/functions/function.h
+++ b/be/src/vec/functions/function.h
@@ -33,7 +33,6 @@
#include "common/status.h"
#include "olap/rowset/segment_v2/inverted_index_iterator.h" // IWYU pragma:
keep
#include "runtime/define_primitive_type.h"
-#include "udf/udf.h"
#include "vec/core/block.h"
#include "vec/core/column_numbers.h"
#include "vec/core/column_with_type_and_name.h"
@@ -44,6 +43,7 @@
#include "vec/data_types/data_type_map.h"
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_struct.h"
+#include "vec/exprs/function_context.h"
namespace doris {
struct InvertedIndexAnalyzerCtx;
diff --git a/be/src/vec/functions/function_convert_tz.cpp
b/be/src/vec/functions/function_convert_tz.cpp
index 70d5d8bf8b1..364a0925714 100644
--- a/be/src/vec/functions/function_convert_tz.cpp
+++ b/be/src/vec/functions/function_convert_tz.cpp
@@ -26,7 +26,7 @@
#include "common/status.h"
#include "runtime/define_primitive_type.h"
#include "runtime/primitive_type.h"
-#include "udf/udf.h"
+#include "util/binary_cast.hpp"
#include "util/timezone_utils.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
@@ -46,6 +46,7 @@
#include "vec/data_types/data_type_date_time.h"
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_string.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/datetime_errors.h"
#include "vec/functions/function.h"
#include "vec/functions/function_helpers.h"
diff --git a/be/src/vec/functions/function_date_or_datetime_computation.h
b/be/src/vec/functions/function_date_or_datetime_computation.h
index ba6e50b0535..5772bd835d3 100644
--- a/be/src/vec/functions/function_date_or_datetime_computation.h
+++ b/be/src/vec/functions/function_date_or_datetime_computation.h
@@ -36,7 +36,7 @@
#include "runtime/define_primitive_type.h"
#include "runtime/primitive_type.h"
#include "runtime/runtime_state.h"
-#include "udf/udf.h"
+#include "util/binary_cast.hpp"
#include "util/string_parser.hpp"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
@@ -57,6 +57,7 @@
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_number.h"
#include "vec/data_types/data_type_time.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/datetime_errors.h"
#include "vec/functions/function.h"
#include "vec/functions/function_helpers.h"
diff --git a/be/src/vec/functions/function_java_udf.h
b/be/src/vec/functions/function_java_udf.h
index f0d41e73740..84c44e1cce6 100644
--- a/be/src/vec/functions/function_java_udf.h
+++ b/be/src/vec/functions/function_java_udf.h
@@ -27,13 +27,13 @@
#include "common/logging.h"
#include "common/status.h"
-#include "udf/udf.h"
#include "util/jni-util.h"
#include "vec/core/block.h"
#include "vec/core/column_numbers.h"
#include "vec/core/columns_with_type_and_name.h"
#include "vec/core/types.h"
#include "vec/data_types/data_type.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
namespace doris::vectorized {
diff --git a/be/src/vec/functions/function_jsonb.cpp
b/be/src/vec/functions/function_jsonb.cpp
index 4594fd6e668..c5f45b1fb59 100644
--- a/be/src/vec/functions/function_jsonb.cpp
+++ b/be/src/vec/functions/function_jsonb.cpp
@@ -32,7 +32,6 @@
#include "runtime/define_primitive_type.h"
#include "runtime/jsonb_value.h"
#include "runtime/primitive_type.h"
-#include "udf/udf.h"
#include "util/jsonb_document.h"
#include "util/jsonb_stream.h"
#include "util/jsonb_utils.h"
@@ -57,6 +56,7 @@
#include "vec/data_types/data_type_jsonb.h"
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_string.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
#include "vec/functions/like.h"
#include "vec/functions/simple_function_factory.h"
diff --git a/be/src/vec/functions/function_multi_same_args.h
b/be/src/vec/functions/function_multi_same_args.h
index 5ceedfa11e9..fd8bc8a157b 100644
--- a/be/src/vec/functions/function_multi_same_args.h
+++ b/be/src/vec/functions/function_multi_same_args.h
@@ -17,7 +17,7 @@
#pragma once
-#include "udf/udf.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function_helpers.h"
#include "vec/functions/simple_function_factory.h"
#include "vec/utils/template_helpers.hpp"
diff --git a/be/src/vec/functions/function_other_types_to_date.cpp
b/be/src/vec/functions/function_other_types_to_date.cpp
index 5b16f44ce76..6ff9749df4c 100644
--- a/be/src/vec/functions/function_other_types_to_date.cpp
+++ b/be/src/vec/functions/function_other_types_to_date.cpp
@@ -34,7 +34,7 @@
#include "runtime/define_primitive_type.h"
#include "runtime/primitive_type.h"
#include "runtime/runtime_state.h"
-#include "udf/udf.h"
+#include "util/binary_cast.hpp"
#include "util/time_lut.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
@@ -59,6 +59,7 @@
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_number.h"
#include "vec/data_types/data_type_string.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/datetime_errors.h"
#include "vec/functions/function.h"
#include "vec/functions/simple_function_factory.h"
diff --git a/be/src/vec/functions/function_regexp.cpp
b/be/src/vec/functions/function_regexp.cpp
index bd66900b348..bc51ddb21a6 100644
--- a/be/src/vec/functions/function_regexp.cpp
+++ b/be/src/vec/functions/function_regexp.cpp
@@ -30,7 +30,6 @@
#include "common/status.h"
#include "exprs/string_functions.h"
-#include "udf/udf.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
#include "vec/columns/column_const.h"
@@ -46,6 +45,7 @@
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_number.h"
#include "vec/data_types/data_type_string.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
#include "vec/functions/simple_function_factory.h"
#include "vec/utils/stringop_substring.h"
diff --git a/be/src/vec/functions/function_rpc.h
b/be/src/vec/functions/function_rpc.h
index 862654c73a4..56b723b984a 100644
--- a/be/src/vec/functions/function_rpc.h
+++ b/be/src/vec/functions/function_rpc.h
@@ -26,13 +26,13 @@
#include <vector>
#include "common/status.h"
-#include "udf/udf.h"
#include "vec/core/block.h"
#include "vec/core/column_numbers.h"
#include "vec/core/column_with_type_and_name.h"
#include "vec/core/columns_with_type_and_name.h"
#include "vec/core/types.h"
#include "vec/data_types/data_type.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
namespace doris {
diff --git a/be/src/vec/functions/function_string.h
b/be/src/vec/functions/function_string.h
index 2cce9b2f4af..41f9794f42f 100644
--- a/be/src/vec/functions/function_string.h
+++ b/be/src/vec/functions/function_string.h
@@ -91,7 +91,6 @@
#include "exprs/math_functions.h"
#include "pugixml.hpp"
-#include "udf/udf.h"
#include "util/md5.h"
#include "util/simd/vstring_function.h"
#include "util/sm3.h"
@@ -109,6 +108,7 @@
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_number.h"
#include "vec/data_types/data_type_string.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
#include "vec/functions/function_helpers.h"
#include "vec/utils/stringop_substring.h"
diff --git a/be/src/vec/functions/function_tokenize.h
b/be/src/vec/functions/function_tokenize.h
index 6748784ed8f..9e1eeae9cea 100644
--- a/be/src/vec/functions/function_tokenize.h
+++ b/be/src/vec/functions/function_tokenize.h
@@ -26,13 +26,13 @@
#include "common/status.h"
#include "olap/inverted_index_parser.h"
#include "olap/rowset/segment_v2/inverted_index_reader.h"
-#include "udf/udf.h"
#include "vec/columns/column_array.h"
#include "vec/core/column_numbers.h"
#include "vec/core/types.h"
#include "vec/data_types/data_type.h"
#include "vec/data_types/data_type_array.h"
#include "vec/data_types/data_type_string.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
#include "vec/functions/simple_function_factory.h"
diff --git a/be/src/vec/functions/functions_geo.h
b/be/src/vec/functions/functions_geo.h
index 437f032abdc..6aba2c4acf7 100644
--- a/be/src/vec/functions/functions_geo.h
+++ b/be/src/vec/functions/functions_geo.h
@@ -24,10 +24,10 @@
#include <vector>
#include "common/status.h"
-#include "udf/udf.h"
#include "vec/core/column_numbers.h"
#include "vec/core/types.h"
#include "vec/data_types/data_type.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
namespace doris {
diff --git a/be/src/vec/functions/in.h b/be/src/vec/functions/in.h
index 34c11cac7cf..7a730f1eb00 100644
--- a/be/src/vec/functions/in.h
+++ b/be/src/vec/functions/in.h
@@ -32,7 +32,6 @@
#include "olap/rowset/segment_v2/index_reader_helper.h"
#include "runtime/define_primitive_type.h"
#include "runtime/types.h"
-#include "udf/udf.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
#include "vec/columns/column_const.h"
@@ -46,6 +45,7 @@
#include "vec/data_types/data_type.h"
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_number.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
namespace doris::vectorized {
diff --git a/be/src/vec/functions/like.h b/be/src/vec/functions/like.h
index 26a2f2a96bb..4383888ab38 100644
--- a/be/src/vec/functions/like.h
+++ b/be/src/vec/functions/like.h
@@ -33,7 +33,6 @@
#include "common/status.h"
#include "runtime/define_primitive_type.h"
#include "runtime/string_search.hpp"
-#include "udf/udf.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column_string.h"
#include "vec/columns/predicate_column.h"
@@ -41,6 +40,7 @@
#include "vec/core/column_numbers.h"
#include "vec/core/types.h"
#include "vec/data_types/data_type_number.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
namespace doris::vectorized {
diff --git a/be/src/vec/functions/random.cpp b/be/src/vec/functions/random.cpp
index 4b9301ab36e..f86d9af5ac1 100644
--- a/be/src/vec/functions/random.cpp
+++ b/be/src/vec/functions/random.cpp
@@ -27,7 +27,6 @@
#include <utility>
#include "common/status.h"
-#include "udf/udf.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
#include "vec/columns/column_vector.h"
@@ -36,6 +35,7 @@
#include "vec/core/column_numbers.h"
#include "vec/core/types.h"
#include "vec/data_types/data_type_number.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
#include "vec/functions/simple_function_factory.h"
diff --git a/be/src/vec/functions/simple_function_factory.h
b/be/src/vec/functions/simple_function_factory.h
index b52ed3ac158..14b2e148383 100644
--- a/be/src/vec/functions/simple_function_factory.h
+++ b/be/src/vec/functions/simple_function_factory.h
@@ -24,7 +24,7 @@
#include <string>
#include "agent/be_exec_version_manager.h"
-#include "udf/udf.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
namespace doris::vectorized {
diff --git a/be/src/vec/functions/uniform.cpp b/be/src/vec/functions/uniform.cpp
index a6124bae400..5b2af2f4d2a 100644
--- a/be/src/vec/functions/uniform.cpp
+++ b/be/src/vec/functions/uniform.cpp
@@ -27,7 +27,6 @@
#include "common/status.h"
#include "runtime/primitive_type.h"
-#include "udf/udf.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
#include "vec/columns/column_vector.h"
@@ -36,6 +35,7 @@
#include "vec/core/column_numbers.h"
#include "vec/core/types.h"
#include "vec/data_types/data_type_number.h" // IWYU pragma: keep
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
#include "vec/functions/simple_function_factory.h"
diff --git a/be/src/vec/sink/vmysql_result_writer.cpp
b/be/src/vec/sink/vmysql_result_writer.cpp
index 6ac496f311e..c9bec0e863b 100644
--- a/be/src/vec/sink/vmysql_result_writer.cpp
+++ b/be/src/vec/sink/vmysql_result_writer.cpp
@@ -37,7 +37,6 @@
#include "runtime/result_block_buffer.h"
#include "runtime/runtime_state.h"
#include "runtime/types.h"
-#include "udf/udf.h"
#include "util/mysql_global.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
diff --git a/be/src/vec/sink/writer/vhive_table_writer.h
b/be/src/vec/sink/writer/vhive_table_writer.h
index 18380eca35e..62dfff93628 100644
--- a/be/src/vec/sink/writer/vhive_table_writer.h
+++ b/be/src/vec/sink/writer/vhive_table_writer.h
@@ -21,6 +21,7 @@
#include "util/runtime_profile.h"
#include "vec/columns/column.h"
+#include "vec/data_types/data_type.h"
#include "vec/exprs/vexpr_fwd.h"
#include "vec/sink/writer/async_result_writer.h"
diff --git a/be/src/vec/utils/stringop_substring.h
b/be/src/vec/utils/stringop_substring.h
index 34e886eff3a..5bafe5f0f73 100644
--- a/be/src/vec/utils/stringop_substring.h
+++ b/be/src/vec/utils/stringop_substring.h
@@ -56,7 +56,6 @@
#include <cstdint>
#include <string_view>
-#include "udf/udf.h"
#include "util/simd/vstring_function.h"
#include "vec/columns/column_decimal.h"
#include "vec/columns/column_nullable.h"
diff --git a/be/test/pipeline/operator/analytic_sink_operator_test.cpp
b/be/test/pipeline/operator/analytic_sink_operator_test.cpp
index b29bc8676d8..994227d4177 100644
--- a/be/test/pipeline/operator/analytic_sink_operator_test.cpp
+++ b/be/test/pipeline/operator/analytic_sink_operator_test.cpp
@@ -30,7 +30,6 @@
#include "testutil/mock/mock_descriptors.h"
#include "testutil/mock/mock_runtime_state.h"
#include "testutil/mock/mock_slot_ref.h"
-#include "udf/udf.h"
#include "vec/core/block.h"
#include "vec/data_types/data_type.h"
namespace doris::pipeline {
diff --git a/be/test/pipeline/thrift_builder.h
b/be/test/pipeline/thrift_builder.h
index cf03d609f0c..7f3f6de840e 100644
--- a/be/test/pipeline/thrift_builder.h
+++ b/be/test/pipeline/thrift_builder.h
@@ -24,7 +24,6 @@
#include "pipeline/exec/exchange_sink_buffer.h"
#include "pipeline/exec/exchange_sink_operator.h"
#include "runtime/runtime_state.h"
-#include "udf/udf.h"
#include "vec/sink/writer/vhive_utils.h"
namespace doris {
diff --git a/be/test/runtime_filter/runtime_filter_consumer_helper_test.cpp
b/be/test/runtime_filter/runtime_filter_consumer_helper_test.cpp
index e0dbc33e716..1590af89780 100644
--- a/be/test/runtime_filter/runtime_filter_consumer_helper_test.cpp
+++ b/be/test/runtime_filter/runtime_filter_consumer_helper_test.cpp
@@ -102,7 +102,7 @@ TEST_F(RuntimeFilterConsumerHelperTest, basic) {
int arrived_rf_num = -1;
helper._consumers[1]->signal(producer.get());
FAIL_IF_ERROR_OR_CATCH_EXCEPTION(helper.try_append_late_arrival_runtime_filter(
- _runtime_states[0].get(), &arrived_rf_num, conjuncts, row_desc));
+ _runtime_states[0].get(), row_desc, arrived_rf_num, conjuncts));
ASSERT_EQ(conjuncts.size(), 1);
ASSERT_EQ(arrived_rf_num, 2);
}
diff --git a/be/test/testutil/function_utils.cpp
b/be/test/testutil/function_utils.cpp
index b82c86ed5b3..809b1d505b6 100644
--- a/be/test/testutil/function_utils.cpp
+++ b/be/test/testutil/function_utils.cpp
@@ -22,8 +22,8 @@
#include <memory>
#include <vector>
-#include "udf/udf.h"
#include "vec/data_types/data_type.h"
+#include "vec/exprs/function_context.h"
namespace doris {
diff --git a/be/test/vec/exec/exchange_sink_test.h
b/be/test/vec/exec/exchange_sink_test.h
index 2891ad1da53..3adab7fe034 100644
--- a/be/test/vec/exec/exchange_sink_test.h
+++ b/be/test/vec/exec/exchange_sink_test.h
@@ -25,7 +25,6 @@
#include "pipeline/exec/exchange_sink_operator.h"
#include "runtime/runtime_state.h"
#include "testutil/mock/mock_runtime_state.h"
-#include "udf/udf.h"
#include "vec/sink/writer/vhive_utils.h"
namespace doris::pipeline {
diff --git a/be/test/vec/exprs/try_cast_expr_test.cpp
b/be/test/vec/exprs/try_cast_expr_test.cpp
index eac351d29d9..e39fb52425f 100644
--- a/be/test/vec/exprs/try_cast_expr_test.cpp
+++ b/be/test/vec/exprs/try_cast_expr_test.cpp
@@ -20,11 +20,11 @@
#include <memory>
#include "runtime/primitive_type.h"
-#include "udf/udf.h"
#include "vec/columns/column_nothing.h"
#include "vec/columns/column_nullable.h"
#include "vec/core/field.h"
#include "vec/core/types.h"
+#include "vec/exprs/function_context.h"
#include "vec/exprs/vcast_expr.h"
namespace doris::vectorized {
diff --git a/be/test/vec/function/function_eq_for_null_test.cpp
b/be/test/vec/function/function_eq_for_null_test.cpp
index cf7880fe958..736507b21fa 100644
--- a/be/test/vec/function/function_eq_for_null_test.cpp
+++ b/be/test/vec/function/function_eq_for_null_test.cpp
@@ -25,13 +25,13 @@
#include "common/status.h"
#include "function_test_util.h"
#include "gtest/gtest_pred_impl.h"
-#include "udf/udf.h"
#include "vec/columns/column_const.h"
#include "vec/columns/column_nullable.h"
#include "vec/core/column_with_type_and_name.h"
#include "vec/core/types.h"
#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_string.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
#include "vec/functions/function_helpers.h"
diff --git a/be/test/vec/function/function_jsonb_test.cpp
b/be/test/vec/function/function_jsonb_test.cpp
index 8c3aaae0285..aeef39a45ec 100644
--- a/be/test/vec/function/function_jsonb_test.cpp
+++ b/be/test/vec/function/function_jsonb_test.cpp
@@ -27,7 +27,6 @@
#include "runtime/primitive_type.h"
#include "testutil/any_type.h"
#include "testutil/column_helper.h"
-#include "udf/udf.h"
#include "util/jsonb_writer.h"
#include "vec/columns/column_const.h"
#include "vec/core/types.h"
@@ -36,6 +35,7 @@
#include "vec/data_types/data_type_number.h"
#include "vec/data_types/data_type_string.h"
#include "vec/data_types/serde/data_type_serde.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/function.h"
namespace doris::vectorized {
diff --git a/be/test/vec/function/function_test_util.h
b/be/test/vec/function/function_test_util.h
index 711c56fb888..abe896572d2 100644
--- a/be/test/vec/function/function_test_util.h
+++ b/be/test/vec/function/function_test_util.h
@@ -35,7 +35,6 @@
#include "testutil/any_type.h"
#include "testutil/function_utils.h"
#include "testutil/test_util.h"
-#include "udf/udf.h"
#include "util/bitmap_value.h"
#include "vec/columns/column.h"
#include "vec/columns/column_const.h"
@@ -60,6 +59,7 @@
#include "vec/data_types/data_type_struct.h"
#include "vec/data_types/data_type_time.h"
#include "vec/data_types/data_type_varbinary.h"
+#include "vec/exprs/function_context.h"
#include "vec/functions/simple_function_factory.h"
namespace doris::vectorized {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]