This is an automated email from the ASF dual-hosted git repository.

panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 16fc3a0e22 [Chore](compile) remove some unused static on inline 
function to reduce compile time (#17603)
16fc3a0e22 is described below

commit 16fc3a0e221bb7157b2b3f5656c827bc0322c267
Author: Pxl <[email protected]>
AuthorDate: Mon Mar 13 11:11:59 2023 +0800

    [Chore](compile) remove some unused static on inline function to reduce 
compile time (#17603)
    
    remove some unused static on inline function to reduce compile time
---
 be/src/common/signal_handler.h                     | 16 ++++----
 be/src/common/status.h                             |  2 +-
 be/src/common/utils.h                              |  2 +-
 be/src/exec/es/es_scroll_parser.cpp                | 28 ++++++-------
 be/src/exec/olap_utils.h                           |  8 ++--
 be/src/exprs/create_predicate_function.h           | 25 ++++++-----
 be/src/gutil/atomicops-internals-x86.h             |  2 +-
 be/src/gutil/basictypes.h                          |  2 +-
 be/src/gutil/bits.h                                |  6 +--
 be/src/gutil/casts.h                               | 20 ++++-----
 be/src/gutil/dynamic_annotations.h                 |  6 +--
 be/src/gutil/gscoped_ptr.h                         |  6 +--
 be/src/gutil/port.h                                |  2 +-
 be/src/gutil/stl_util.h                            | 14 +++----
 be/src/gutil/strings/escaping.cc                   |  4 +-
 be/src/gutil/strings/join.h                        | 13 +++---
 be/src/gutil/strings/split.cc                      |  8 ++--
 be/src/gutil/strings/split.h                       | 19 ++++-----
 be/src/gutil/strings/strip.h                       |  2 +-
 be/src/gutil/strings/util.cc                       | 10 ++---
 be/src/gutil/strings/util.h                        |  4 +-
 be/src/olap/predicate_creator.h                    | 19 ++++-----
 be/src/olap/skiplist.h                             | 16 ++++----
 be/src/olap/types.cpp                              |  2 +-
 be/src/olap/types.h                                |  2 +-
 be/src/olap/utils.h                                |  8 ++--
 be/src/runtime/exec_env.h                          |  2 +-
 be/src/runtime/memory/thread_mem_tracker_mgr.h     |  2 +-
 be/src/service/point_query_executor.cpp            |  4 +-
 be/src/util/binary_cast.hpp                        |  2 +-
 be/src/util/bit_packing.inline.h                   |  7 ++--
 be/src/util/bit_stream_utils.inline.h              | 16 ++++----
 be/src/util/bitmap_intersect.h                     | 24 +++++------
 be/src/util/coding.h                               | 14 +++----
 be/src/util/frame_of_reference_coding.h            |  6 +--
 be/src/util/interval_tree-inl.h                    |  2 +-
 be/src/util/mysql_row_buffer.cpp                   |  4 +-
 be/src/util/proto_util.h                           | 34 ++++++++-------
 be/src/util/rle_encoding.h                         | 48 +++++++++++-----------
 be/src/util/simd/bits.h                            |  4 +-
 be/src/util/string_parser.hpp                      | 16 ++++----
 be/src/util/string_util.h                          |  6 +--
 be/src/util/type_traits.h                          |  4 +-
 be/src/util/uid_util.h                             |  4 +-
 .../aggregate_function_bitmap.cpp                  |  2 +-
 .../aggregate_function_min_max.cpp                 |  6 +--
 .../aggregate_function_min_max_by.cpp              | 10 ++---
 .../aggregate_function_stddev.cpp                  |  8 ++--
 .../aggregate_function_window.cpp                  |  4 +-
 be/src/vec/aggregate_functions/factory_helpers.h   |  2 +-
 be/src/vec/common/aggregation_common.h             | 22 ++++------
 be/src/vec/common/bit_helpers.h                    |  6 +--
 .../vec/common/hash_table/hash_table_key_holder.h  |  6 +--
 be/src/vec/common/hex.h                            |  6 +--
 be/src/vec/common/memcmp_small.h                   | 26 +++++-------
 be/src/vec/common/nan_utils.h                      |  8 ++--
 be/src/vec/common/unaligned.h                      |  4 +-
 be/src/vec/common/volnitsky.h                      |  7 ++--
 be/src/vec/core/call_on_type_index.h               |  2 +-
 be/src/vec/core/field.cpp                          |  6 +--
 be/src/vec/data_types/data_type.h                  | 20 ++++-----
 be/src/vec/data_types/data_type_decimal.h          | 20 ++++-----
 be/src/vec/data_types/data_type_struct.cpp         |  2 +-
 be/src/vec/exec/format/orc/vorc_reader.cpp         |  7 ++--
 be/src/vec/functions/function_encryption.cpp       | 10 ++---
 be/src/vec/functions/function_helpers.h            |  4 +-
 be/src/vec/functions/function_string.h             |  4 +-
 be/src/vec/functions/functions_logical.cpp         | 20 ++++-----
 be/src/vec/functions/functions_logical.h           |  4 +-
 be/src/vec/functions/regexps.h                     |  8 ++--
 be/src/vec/io/io_helper.h                          | 18 ++++----
 be/src/vec/io/var_int.h                            |  4 +-
 be/src/vec/utils/arrow_column_to_doris_column.cpp  | 23 +++++------
 be/src/vec/utils/histogram_helpers.hpp             | 15 ++++---
 .../utils/arrow_column_to_doris_column_test.cpp    | 20 ++++-----
 75 files changed, 363 insertions(+), 386 deletions(-)

diff --git a/be/src/common/signal_handler.h b/be/src/common/signal_handler.h
index c7b655cbea..85da4e7096 100644
--- a/be/src/common/signal_handler.h
+++ b/be/src/common/signal_handler.h
@@ -235,7 +235,7 @@ void (*g_failure_writer)(const char* data, size_t size) = 
WriteToStderr;
 // Dumps time information.  We don't dump human-readable time information
 // as localtime() is not guaranteed to be async signal safe.
 void DumpTimeInfo() {
-    time_t time_in_sec = time(NULL);
+    time_t time_in_sec = time(nullptr);
     char buf[256]; // Big enough for time info.
     MinimalFormatter formatter(buf, sizeof(buf));
     formatter.AppendString("*** Query id: ");
@@ -258,7 +258,7 @@ void DumpTimeInfo() {
 // Dumps information about the signal to STDERR.
 void DumpSignalInfo(int signal_number, siginfo_t* siginfo) {
     // Get the signal name.
-    const char* signal_name = NULL;
+    const char* signal_name = nullptr;
     for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kFailureSignals); ++i) {
         if (signal_number == kFailureSignals[i].number) {
             signal_name = kFailureSignals[i].name;
@@ -322,7 +322,7 @@ void InvokeDefaultSignalHandler(int signal_number) {
     memset(&sig_action, 0, sizeof(sig_action));
     sigemptyset(&sig_action.sa_mask);
     sig_action.sa_handler = SIG_DFL;
-    sigaction(signal_number, &sig_action, NULL);
+    sigaction(signal_number, &sig_action, nullptr);
     kill(getpid(), signal_number);
 }
 
@@ -330,14 +330,14 @@ void InvokeDefaultSignalHandler(int signal_number) {
 // dumping stuff while another thread is doing it.  Our policy is to let
 // the first thread dump stuff and let other threads wait.
 // See also comments in FailureSignalHandler().
-static pthread_t* g_entered_thread_id_pointer = NULL;
+static pthread_t* g_entered_thread_id_pointer = nullptr;
 
 // Wrapper of __sync_val_compare_and_swap. If the GCC extension isn't
 // defined, we try the CPU specific logics (we only support x86 and
 // x86_64 for now) first, then use a naive implementation, which has a
 // race condition.
 template <typename T>
-inline T sync_val_compare_and_swap(T* ptr, T oldval, T newval) {
+T sync_val_compare_and_swap(T* ptr, T oldval, T newval) {
 #if defined(HAVE___SYNC_VAL_COMPARE_AND_SWAP)
     return __sync_val_compare_and_swap(ptr, oldval, newval);
 #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
@@ -376,8 +376,8 @@ void FailureSignalHandler(int signal_number, siginfo_t* 
signal_info, void* ucont
     // old value (value returned from __sync_val_compare_and_swap) is
     // different from the original value (in this case NULL).
     pthread_t* old_thread_id_pointer = sync_val_compare_and_swap(
-            &g_entered_thread_id_pointer, static_cast<pthread_t*>(NULL), 
&my_thread_id);
-    if (old_thread_id_pointer != NULL) {
+            &g_entered_thread_id_pointer, static_cast<pthread_t*>(nullptr), 
&my_thread_id);
+    if (old_thread_id_pointer != nullptr) {
         // We've already entered the signal handler.  What should we do?
         if (pthread_equal(my_thread_id, *g_entered_thread_id_pointer)) {
             // It looks the current thread is reentering the signal handler.
@@ -431,7 +431,7 @@ inline void InstallFailureSignalHandler() {
     sig_action.sa_sigaction = &FailureSignalHandler;
 
     for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kFailureSignals); ++i) {
-        CHECK_ERR(sigaction(kFailureSignals[i].number, &sig_action, NULL));
+        CHECK_ERR(sigaction(kFailureSignals[i].number, &sig_action, nullptr));
     }
     kFailureSignalHandlerInstalled = true;
 }
diff --git a/be/src/common/status.h b/be/src/common/status.h
index 2c0da39b8e..254c25e528 100644
--- a/be/src/common/status.h
+++ b/be/src/common/status.h
@@ -259,7 +259,7 @@ E(INVERTED_INDEX_NO_TERMS, -6005);
 // clang-format off
 // whether to capture stacktrace
 template <int code>
-static constexpr bool capture_stacktrace() {
+constexpr bool capture_stacktrace() {
     return code != ErrorCode::OK
         && code != ErrorCode::END_OF_FILE
         && code != ErrorCode::MEM_LIMIT_EXCEEDED
diff --git a/be/src/common/utils.h b/be/src/common/utils.h
index 499b727f5b..b03e41260e 100644
--- a/be/src/common/utils.h
+++ b/be/src/common/utils.h
@@ -66,7 +66,7 @@ static_assert((RELEASE_CONTEXT_COUNTER & 
(RELEASE_CONTEXT_COUNTER - 1)) == 0,
               "should be power of 2");
 
 template <typename To, typename From>
-static inline To convert_to(From from) {
+To convert_to(From from) {
     union {
         From _from;
         To _to;
diff --git a/be/src/exec/es/es_scroll_parser.cpp 
b/be/src/exec/es/es_scroll_parser.cpp
index 06d0884db5..5c50aecede 100644
--- a/be/src/exec/es/es_scroll_parser.cpp
+++ b/be/src/exec/es/es_scroll_parser.cpp
@@ -140,8 +140,8 @@ static const std::string INVALID_NULL_VALUE =
     } while (false)
 
 template <typename T>
-static Status get_int_value(const rapidjson::Value& col, PrimitiveType type, 
void* slot,
-                            bool pure_doc_value) {
+Status get_int_value(const rapidjson::Value& col, PrimitiveType type, void* 
slot,
+                     bool pure_doc_value) {
     if (col.IsNumber()) {
         *reinterpret_cast<T*>(slot) = (T)(sizeof(T) < 8 ? col.GetInt() : 
col.GetInt64());
         return Status::OK();
@@ -173,8 +173,8 @@ static Status get_int_value(const rapidjson::Value& col, 
PrimitiveType type, voi
 }
 
 template <typename T, typename RT>
-static Status get_date_value_int(const rapidjson::Value& col, PrimitiveType 
type, bool is_date_str,
-                                 RT* slot) {
+Status get_date_value_int(const rapidjson::Value& col, PrimitiveType type, 
bool is_date_str,
+                          RT* slot) {
     constexpr bool is_datetime_v1 = std::is_same_v<T, 
vectorized::VecDateTimeValue>;
     T dt_val;
     if (is_date_str) {
@@ -238,8 +238,8 @@ static Status get_date_value_int(const rapidjson::Value& 
col, PrimitiveType type
 }
 
 template <typename T, typename RT>
-static Status get_date_int(const rapidjson::Value& col, PrimitiveType type, 
bool pure_doc_value,
-                           RT* slot) {
+Status get_date_int(const rapidjson::Value& col, PrimitiveType type, bool 
pure_doc_value,
+                    RT* slot) {
     // this would happend just only when `enable_docvalue_scan = false`, and 
field has timestamp format date from _source
     if (col.IsNumber()) {
         // ES process date/datetime field would use millisecond timestamp for 
index or docvalue
@@ -265,8 +265,8 @@ static Status get_date_int(const rapidjson::Value& col, 
PrimitiveType type, bool
     }
 }
 template <typename T, typename RT>
-static Status fill_date_int(const rapidjson::Value& col, PrimitiveType type, 
bool pure_doc_value,
-                            vectorized::IColumn* col_ptr) {
+Status fill_date_int(const rapidjson::Value& col, PrimitiveType type, bool 
pure_doc_value,
+                     vectorized::IColumn* col_ptr) {
     RT data;
     RETURN_IF_ERROR((get_date_int<T, RT>(col, type, pure_doc_value, &data)));
     col_ptr->insert_data(const_cast<const 
char*>(reinterpret_cast<char*>(&data)), 0);
@@ -274,8 +274,8 @@ static Status fill_date_int(const rapidjson::Value& col, 
PrimitiveType type, boo
 }
 
 template <typename T>
-static Status get_float_value(const rapidjson::Value& col, PrimitiveType type, 
void* slot,
-                              bool pure_doc_value) {
+Status get_float_value(const rapidjson::Value& col, PrimitiveType type, void* 
slot,
+                       bool pure_doc_value) {
     static_assert(sizeof(T) == 4 || sizeof(T) == 8);
     if (col.IsNumber()) {
         *reinterpret_cast<T*>(slot) = (T)(sizeof(T) == 4 ? col.GetFloat() : 
col.GetDouble());
@@ -301,8 +301,8 @@ static Status get_float_value(const rapidjson::Value& col, 
PrimitiveType type, v
 }
 
 template <typename T>
-static Status insert_float_value(const rapidjson::Value& col, PrimitiveType 
type,
-                                 vectorized::IColumn* col_ptr, bool 
pure_doc_value, bool nullable) {
+Status insert_float_value(const rapidjson::Value& col, PrimitiveType type,
+                          vectorized::IColumn* col_ptr, bool pure_doc_value, 
bool nullable) {
     static_assert(sizeof(T) == 4 || sizeof(T) == 8);
     if (col.IsNumber() && nullable) {
         T value = (T)(sizeof(T) == 4 ? col.GetFloat() : col.GetDouble());
@@ -331,8 +331,8 @@ static Status insert_float_value(const rapidjson::Value& 
col, PrimitiveType type
 }
 
 template <typename T>
-static Status insert_int_value(const rapidjson::Value& col, PrimitiveType type,
-                               vectorized::IColumn* col_ptr, bool 
pure_doc_value, bool nullable) {
+Status insert_int_value(const rapidjson::Value& col, PrimitiveType type,
+                        vectorized::IColumn* col_ptr, bool pure_doc_value, 
bool nullable) {
     if (col.IsNumber()) {
         T value = (T)(sizeof(T) < 8 ? col.GetInt() : col.GetInt64());
         col_ptr->insert_data(const_cast<const 
char*>(reinterpret_cast<char*>(&value)), 0);
diff --git a/be/src/exec/olap_utils.h b/be/src/exec/olap_utils.h
index e1af76f01d..610299cc0f 100644
--- a/be/src/exec/olap_utils.h
+++ b/be/src/exec/olap_utils.h
@@ -27,12 +27,12 @@
 
 namespace doris {
 
-typedef bool (*CompareLargeFunc)(const void*, const void*);
+using CompareLargeFunc = bool (*)(const void*, const void*);
 
 static const char* NEGATIVE_INFINITY = "-oo";
 static const char* POSITIVE_INFINITY = "+oo";
 
-typedef struct OlapScanRange {
+struct OlapScanRange {
 public:
     OlapScanRange() : begin_include(true), end_include(true) {
         begin_scan_range.add_value(NEGATIVE_INFINITY);
@@ -49,7 +49,7 @@ public:
     bool end_include;
     OlapTuple begin_scan_range;
     OlapTuple end_scan_range;
-} OlapScanRange;
+};
 
 static char encoding_table[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 
'J', 'K', 'L', 'M',
                                 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 
'W', 'X', 'Y', 'Z',
@@ -97,7 +97,7 @@ enum SQLFilterOp {
 };
 
 template <PrimitiveType>
-static constexpr bool always_false_v = false;
+constexpr bool always_false_v = false;
 
 inline SQLFilterOp to_olap_filter_type(TExprOpcode::type type, bool opposite) {
     switch (type) {
diff --git a/be/src/exprs/create_predicate_function.h 
b/be/src/exprs/create_predicate_function.h
index 33efebb325..cbb8a45a3b 100644
--- a/be/src/exprs/create_predicate_function.h
+++ b/be/src/exprs/create_predicate_function.h
@@ -155,9 +155,9 @@ inline auto create_bitmap_filter(PrimitiveType type) {
 }
 
 template <PrimitiveType PT>
-inline ColumnPredicate* create_olap_column_predicate(
-        uint32_t column_id, const std::shared_ptr<BloomFilterFuncBase>& 
filter, int be_exec_version,
-        const TabletColumn*) {
+ColumnPredicate* create_olap_column_predicate(uint32_t column_id,
+                                              const 
std::shared_ptr<BloomFilterFuncBase>& filter,
+                                              int be_exec_version, const 
TabletColumn*) {
     std::shared_ptr<BloomFilterFuncBase> filter_olap;
     filter_olap.reset(create_bloom_filter(PT));
     filter_olap->light_copy(filter.get());
@@ -165,9 +165,9 @@ inline ColumnPredicate* create_olap_column_predicate(
 }
 
 template <PrimitiveType PT>
-inline ColumnPredicate* create_olap_column_predicate(
-        uint32_t column_id, const std::shared_ptr<BitmapFilterFuncBase>& 
filter,
-        int be_exec_version, const TabletColumn*) {
+ColumnPredicate* create_olap_column_predicate(uint32_t column_id,
+                                              const 
std::shared_ptr<BitmapFilterFuncBase>& filter,
+                                              int be_exec_version, const 
TabletColumn*) {
     if constexpr (PT == TYPE_TINYINT || PT == TYPE_SMALLINT || PT == TYPE_INT 
||
                   PT == TYPE_BIGINT) {
         std::shared_ptr<BitmapFilterFuncBase> filter_olap;
@@ -180,17 +180,16 @@ inline ColumnPredicate* create_olap_column_predicate(
 }
 
 template <PrimitiveType PT>
-inline ColumnPredicate* create_olap_column_predicate(uint32_t column_id,
-                                                     const 
std::shared_ptr<HybridSetBase>& filter,
-                                                     int, const TabletColumn* 
column = nullptr) {
+ColumnPredicate* create_olap_column_predicate(uint32_t column_id,
+                                              const 
std::shared_ptr<HybridSetBase>& filter, int,
+                                              const TabletColumn* column = 
nullptr) {
     return new InListPredicateBase<PT, PredicateType::IN_LIST>(column_id, 
filter, column->length());
 }
 
 template <typename T>
-inline ColumnPredicate* create_column_predicate(uint32_t column_id,
-                                                const std::shared_ptr<T>& 
filter, FieldType type,
-                                                int be_exec_version,
-                                                const TabletColumn* column = 
nullptr) {
+ColumnPredicate* create_column_predicate(uint32_t column_id, const 
std::shared_ptr<T>& filter,
+                                         FieldType type, int be_exec_version,
+                                         const TabletColumn* column = nullptr) 
{
     switch (type) {
 #define M(NAME)                                                                
                \
     case OLAP_FIELD_##NAME: {                                                  
                \
diff --git a/be/src/gutil/atomicops-internals-x86.h 
b/be/src/gutil/atomicops-internals-x86.h
index 92762f9be6..7d57b71a13 100644
--- a/be/src/gutil/atomicops-internals-x86.h
+++ b/be/src/gutil/atomicops-internals-x86.h
@@ -63,7 +63,7 @@ typedef int64_t Atomic64;
 // hard-to-track-down bugs, if the pointer isn't naturally aligned. Check 
alignment
 // in debug mode.
 template <class T>
-inline void CheckNaturalAlignment(const T* ptr) {
+void CheckNaturalAlignment(const T* ptr) {
     DCHECK_EQ(0, reinterpret_cast<const uintptr_t>(ptr) & (sizeof(T) - 1))
             << "unaligned pointer not allowed for atomics";
 }
diff --git a/be/src/gutil/basictypes.h b/be/src/gutil/basictypes.h
index f0cebc589d..ad191b5f3c 100644
--- a/be/src/gutil/basictypes.h
+++ b/be/src/gutil/basictypes.h
@@ -21,4 +21,4 @@ enum Ownership { DO_NOT_TAKE_OWNERSHIP, TAKE_OWNERSHIP };
 //     ignore_result(my_var.release());
 //
 template <typename T>
-inline void ignore_result(const T&) {}
+void ignore_result(const T&) {}
diff --git a/be/src/gutil/bits.h b/be/src/gutil/bits.h
index 4ffc7614bc..9db9ee867c 100644
--- a/be/src/gutil/bits.h
+++ b/be/src/gutil/bits.h
@@ -229,7 +229,7 @@ inline int Bits::FindLSBSetNonZero64_Portable(uint64 n) {
 }
 
 template <class T>
-inline bool Bits::BytesContainByteLessThan(T bytes, uint8 c) {
+ bool Bits::BytesContainByteLessThan(T bytes, uint8 c) {
     T l = BitPattern<T>::l;
     T h = BitPattern<T>::h;
     // The c <= 0x80 code is straight out of Knuth Volume 4.
@@ -239,13 +239,13 @@ inline bool Bits::BytesContainByteLessThan(T bytes, uint8 
c) {
 }
 
 template <class T>
-inline bool Bits::BytesContainByte(T bytes, uint8 c) {
+ bool Bits::BytesContainByte(T bytes, uint8 c) {
     // Usually c will be manifestly constant.
     return Bits::BytesContainByteLessThan<T>(bytes ^ (c * BitPattern<T>::l), 
1);
 }
 
 template <class T>
-inline bool Bits::BytesAllInRange(T bytes, uint8 lo, uint8 hi) {
+ bool Bits::BytesAllInRange(T bytes, uint8 lo, uint8 hi) {
     T l = BitPattern<T>::l;
     T h = BitPattern<T>::h;
     // In the common case, lo and hi are manifest constants.
diff --git a/be/src/gutil/casts.h b/be/src/gutil/casts.h
index 8e2a1a5cad..6decf8c0a5 100644
--- a/be/src/gutil/casts.h
+++ b/be/src/gutil/casts.h
@@ -34,14 +34,14 @@
 // base::identity_ is used to make a non-deduced context, which
 // forces all callers to explicitly specify the template argument.
 template <typename To>
-inline To implicit_cast(typename base::identity_<To>::type to) {
+ To implicit_cast(typename base::identity_<To>::type to) {
     return to;
 }
 
 // This version of implicit_cast is used when two template arguments
 // are specified. It's obsolete and should not be used.
 template <typename To, typename From>
-inline To implicit_cast(typename base::identity_<From>::type const& f) {
+ To implicit_cast(typename base::identity_<From>::type const& f) {
     return f;
 }
 
@@ -89,7 +89,7 @@ inline To down_cast(From* f) {        // so we only accept 
pointers
 // or the reference form. If you call down_cast with a const T&, the
 // compiler will just bind From to const T.
 template <typename To, typename From>
-inline To down_cast(From& f) {
+ To down_cast(From& f) {
     COMPILE_ASSERT(std::is_reference<To>::value, target_type_not_a_reference);
     using ToAsPointer = typename std::remove_reference<To>::type*;
     if (false) {
@@ -161,7 +161,7 @@ inline To down_cast(From& f) {
 // -- mec 2005-10-17
 
 template <class Dest, class Source>
-inline Dest bit_cast(const Source& source) {
+ Dest bit_cast(const Source& source) {
     // Compile time assertion: sizeof(Dest) == sizeof(Source)
     // A compile error here means your Dest and Source have different sizes.
     COMPILE_ASSERT(sizeof(Dest) == sizeof(Source), VerifySizesAreEqual);
@@ -279,7 +279,7 @@ public:
 // because of value propagation on the constant enumerator bounds.
 
 template <typename Enum>
-inline bool loose_enum_test(int e_val) {
+ bool loose_enum_test(int e_val) {
     COMPILE_ASSERT(enum_limits<Enum>::is_specialized, 
missing_MAKE_ENUM_LIMITS);
     const Enum e_min = enum_limits<Enum>::min_enumerator;
     const Enum e_max = enum_limits<Enum>::max_enumerator;
@@ -333,7 +333,7 @@ inline bool loose_enum_test(int e_val) {
 }
 
 template <typename Enum>
-inline bool tight_enum_test(int e_val) {
+ bool tight_enum_test(int e_val) {
     COMPILE_ASSERT(enum_limits<Enum>::is_specialized, 
missing_MAKE_ENUM_LIMITS);
     const Enum e_min = enum_limits<Enum>::min_enumerator;
     const Enum e_max = enum_limits<Enum>::max_enumerator;
@@ -341,7 +341,7 @@ inline bool tight_enum_test(int e_val) {
 }
 
 template <typename Enum>
-inline bool loose_enum_test_cast(int e_val, Enum* e_var) {
+ bool loose_enum_test_cast(int e_val, Enum* e_var) {
     if (loose_enum_test<Enum>(e_val)) {
         *e_var = static_cast<Enum>(e_val);
         return true;
@@ -351,7 +351,7 @@ inline bool loose_enum_test_cast(int e_val, Enum* e_var) {
 }
 
 template <typename Enum>
-inline bool tight_enum_test_cast(int e_val, Enum* e_var) {
+ bool tight_enum_test_cast(int e_val, Enum* e_var) {
     if (tight_enum_test<Enum>(e_val)) {
         *e_var = static_cast<Enum>(e_val);
         return true;
@@ -371,7 +371,7 @@ inline void WarnEnumCastError(int value_of_int) {
 } // namespace base
 
 template <typename Enum>
-inline Enum loose_enum_cast(int e_val) {
+ Enum loose_enum_cast(int e_val) {
     if (!loose_enum_test<Enum>(e_val)) {
         base::internal::WarnEnumCastError(e_val);
     }
@@ -379,7 +379,7 @@ inline Enum loose_enum_cast(int e_val) {
 }
 
 template <typename Enum>
-inline Enum tight_enum_cast(int e_val) {
+ Enum tight_enum_cast(int e_val) {
     if (!tight_enum_test<Enum>(e_val)) {
         base::internal::WarnEnumCastError(e_val);
     }
diff --git a/be/src/gutil/dynamic_annotations.h 
b/be/src/gutil/dynamic_annotations.h
index f0016d20ae..0001eef160 100644
--- a/be/src/gutil/dynamic_annotations.h
+++ b/be/src/gutil/dynamic_annotations.h
@@ -566,7 +566,7 @@ void __asan_set_death_callback(void (*callback)(void));
      one can use
         ... = ANNOTATE_UNPROTECTED_READ(x); */
 template <class T>
-inline T ANNOTATE_UNPROTECTED_READ(const volatile T& x) 
ANNOTALYSIS_UNPROTECTED_READ {
+ T ANNOTATE_UNPROTECTED_READ(const volatile T& x) ANNOTALYSIS_UNPROTECTED_READ 
{
     ANNOTATE_IGNORE_READS_BEGIN();
     T res = x;
     ANNOTATE_IGNORE_READS_END();
@@ -635,7 +635,7 @@ inline T ANNOTATE_UNPROTECTED_READ(const volatile T& x) 
ANNOTALYSIS_UNPROTECTED_
 #if defined(__cplusplus)
 #undef ANNOTATE_UNPROTECTED_READ
 template <class T>
-inline T ANNOTATE_UNPROTECTED_READ(const volatile T& x) 
ANNOTALYSIS_UNPROTECTED_READ {
+ T ANNOTATE_UNPROTECTED_READ(const volatile T& x) ANNOTALYSIS_UNPROTECTED_READ 
{
     ANNOTATE_IGNORE_READS_BEGIN();
     T res = x;
     ANNOTATE_IGNORE_READS_END();
@@ -675,7 +675,7 @@ inline T ANNOTATE_UNPROTECTED_READ(const volatile T& x) 
ANNOTALYSIS_UNPROTECTED_
 #if defined(__cplusplus)
 #undef ANNOTATE_UNPROTECTED_READ
 template <class T>
-inline T ANNOTATE_UNPROTECTED_READ(const volatile T& x) {
+ T ANNOTATE_UNPROTECTED_READ(const volatile T& x) {
     ANNOTATE_IGNORE_READS_BEGIN();
     T res = x;
     ANNOTATE_IGNORE_READS_END();
diff --git a/be/src/gutil/gscoped_ptr.h b/be/src/gutil/gscoped_ptr.h
index 01305b9294..c578501d56 100644
--- a/be/src/gutil/gscoped_ptr.h
+++ b/be/src/gutil/gscoped_ptr.h
@@ -786,17 +786,17 @@ private:
 };
 
 template <class C, class FP>
-inline void swap(gscoped_ptr_malloc<C, FP>& a, gscoped_ptr_malloc<C, FP>& b) {
+void swap(gscoped_ptr_malloc<C, FP>& a, gscoped_ptr_malloc<C, FP>& b) {
     a.swap(b);
 }
 
 template <class C, class FP>
-inline bool operator==(C* p, const gscoped_ptr_malloc<C, FP>& b) {
+bool operator==(C* p, const gscoped_ptr_malloc<C, FP>& b) {
     return p == b.get();
 }
 
 template <class C, class FP>
-inline bool operator!=(C* p, const gscoped_ptr_malloc<C, FP>& b) {
+bool operator!=(C* p, const gscoped_ptr_malloc<C, FP>& b) {
     return p != b.get();
 }
 
diff --git a/be/src/gutil/port.h b/be/src/gutil/port.h
index aadccba222..3f8a431d65 100644
--- a/be/src/gutil/port.h
+++ b/be/src/gutil/port.h
@@ -197,7 +197,7 @@ const char PATH_SEPARATOR = '/';
 // a compiler error here.
 //
 #include <stdarg.h>
-inline void va_copy(va_list& a, va_list& b) {
+void va_copy(va_list& a, va_list& b) {
     a = b;
 }
 
diff --git a/be/src/gutil/stl_util.h b/be/src/gutil/stl_util.h
index c528465ada..e3aa6dc57a 100644
--- a/be/src/gutil/stl_util.h
+++ b/be/src/gutil/stl_util.h
@@ -85,7 +85,7 @@ void STLClearObject(deque<T, A>* obj) {
 // Reduce memory usage on behalf of object if its capacity is greater
 // than or equal to "limit", which defaults to 2^20.
 template <class T>
-inline void STLClearIfBig(T* obj, size_t limit = 1 << 20) {
+ void STLClearIfBig(T* obj, size_t limit = 1 << 20) {
     if (obj->capacity() >= limit) {
         STLClearObject(obj);
     } else {
@@ -95,7 +95,7 @@ inline void STLClearIfBig(T* obj, size_t limit = 1 << 20) {
 
 // Specialization for deque, which doesn't implement capacity().
 template <class T, class A>
-inline void STLClearIfBig(deque<T, A>* obj, size_t limit = 1 << 20) {
+ void STLClearIfBig(deque<T, A>* obj, size_t limit = 1 << 20) {
     if (obj->size() >= limit) {
         STLClearObject(obj);
     } else {
@@ -123,7 +123,7 @@ inline void STLClearIfBig(deque<T, A>* obj, size_t limit = 
1 << 20) {
 // operations cheap.  Note that the default number of buckets is 193
 // in the Gnu library implementation as of Jan '08.
 template <class T>
-inline void STLClearHashIfBig(T* obj, size_t limit) {
+ void STLClearHashIfBig(T* obj, size_t limit) {
     if (obj->bucket_count() >= limit) {
         T tmp;
         tmp.swap(*obj);
@@ -311,7 +311,7 @@ inline void STLAppendToString(string* str, const char* ptr, 
size_t n) {
 // change this as well.
 
 template <typename T, typename Allocator>
-inline T* vector_as_array(vector<T, Allocator>* v) {
+ T* vector_as_array(vector<T, Allocator>* v) {
 #ifdef NDEBUG
     return &*v->begin();
 #else
@@ -320,7 +320,7 @@ inline T* vector_as_array(vector<T, Allocator>* v) {
 }
 
 template <typename T, typename Allocator>
-inline const T* vector_as_array(const vector<T, Allocator>* v) {
+ const T* vector_as_array(const vector<T, Allocator>* v) {
 #ifdef NDEBUG
     return &*v->begin();
 #else
@@ -352,7 +352,7 @@ inline char* string_as_array(string* str) {
 // differed.
 
 template <class HashSet>
-inline bool HashSetEquality(const HashSet& set_a, const HashSet& set_b) {
+ bool HashSetEquality(const HashSet& set_a, const HashSet& set_b) {
     if (set_a.size() != set_b.size()) return false;
     for (typename HashSet::const_iterator i = set_a.begin(); i != set_a.end(); 
++i)
         if (set_b.find(*i) == set_b.end()) return false;
@@ -360,7 +360,7 @@ inline bool HashSetEquality(const HashSet& set_a, const 
HashSet& set_b) {
 }
 
 template <class HashMap>
-inline bool HashMapEquality(const HashMap& map_a, const HashMap& map_b) {
+ bool HashMapEquality(const HashMap& map_a, const HashMap& map_b) {
     if (map_a.size() != map_b.size()) return false;
     for (typename HashMap::const_iterator i = map_a.begin(); i != map_a.end(); 
++i) {
         typename HashMap::const_iterator j = map_b.find(i->first);
diff --git a/be/src/gutil/strings/escaping.cc b/be/src/gutil/strings/escaping.cc
index 68996f5a40..bf7fd212f6 100644
--- a/be/src/gutil/strings/escaping.cc
+++ b/be/src/gutil/strings/escaping.cc
@@ -1697,7 +1697,7 @@ static char hex_char[] = "0123456789abcdef";
 // or a string.  This works because we use the [] operator to access
 // individual characters at a time.
 template <typename T>
-static void a2b_hex_t(const char* a, T b, int num) {
+void a2b_hex_t(const char* a, T b, int num) {
     for (int i = 0; i < num; i++) {
         b[i] = (hex_value[a[i * 2] & 0xFF] << 4) + (hex_value[a[i * 2 + 1] & 
0xFF]);
     }
@@ -1725,7 +1725,7 @@ string a2b_bin(const string& a, bool byte_order_msb) {
 // or a string.  This works because we use the [] operator to access
 // individual characters at a time.
 template <typename T>
-static void b2a_hex_t(const unsigned char* b, T a, int num) {
+void b2a_hex_t(const unsigned char* b, T a, int num) {
     for (int i = 0; i < num; i++) {
         a[i * 2 + 0] = hex_char[b[i] >> 4];
         a[i * 2 + 1] = hex_char[b[i] & 0xf];
diff --git a/be/src/gutil/strings/join.h b/be/src/gutil/strings/join.h
index 2a42104303..d2c1bbf408 100644
--- a/be/src/gutil/strings/join.h
+++ b/be/src/gutil/strings/join.h
@@ -152,12 +152,12 @@ string JoinStringsInArray(string const* components, int 
num_components, const ch
 // Definitions of above JoinStrings* methods
 // ----------------------------------------------------------------------
 template <class CONTAINER>
-inline void JoinStrings(const CONTAINER& components, const StringPiece& delim, 
string* result) {
+void JoinStrings(const CONTAINER& components, const StringPiece& delim, 
string* result) {
     JoinStringsIterator(components.begin(), components.end(), delim, result);
 }
 
 template <class CONTAINER>
-inline string JoinStrings(const CONTAINER& components, const StringPiece& 
delim) {
+string JoinStrings(const CONTAINER& components, const StringPiece& delim) {
     string result;
     JoinStrings(components, delim, &result);
     return result;
@@ -202,8 +202,7 @@ void JoinStringsIterator(const ITERATOR& start, const 
ITERATOR& end, const Strin
 }
 
 template <class ITERATOR>
-inline string JoinStringsIterator(const ITERATOR& start, const ITERATOR& end,
-                                  const StringPiece& delim) {
+string JoinStringsIterator(const ITERATOR& start, const ITERATOR& end, const 
StringPiece& delim) {
     string result;
     JoinStringsIterator(start, end, delim, &result);
     return result;
@@ -300,12 +299,12 @@ string JoinElementsIterator(ITERATOR first, ITERATOR 
last, StringPiece delim) {
 }
 
 template <class CONTAINER>
-inline void JoinElements(const CONTAINER& components, StringPiece delim, 
string* result) {
+void JoinElements(const CONTAINER& components, StringPiece delim, string* 
result) {
     JoinElementsIterator(components.begin(), components.end(), delim, result);
 }
 
 template <class CONTAINER>
-inline string JoinElements(const CONTAINER& components, StringPiece delim) {
+string JoinElements(const CONTAINER& components, StringPiece delim) {
     string result;
     JoinElements(components, delim, &result);
     return result;
@@ -317,6 +316,6 @@ void JoinInts(const CONTAINER& components, const char* 
delim, string* result) {
 }
 
 template <class CONTAINER>
-inline string JoinInts(const CONTAINER& components, const char* delim) {
+string JoinInts(const CONTAINER& components, const char* delim) {
     return JoinElements(components, delim);
 }
diff --git a/be/src/gutil/strings/split.cc b/be/src/gutil/strings/split.cc
index 610b1ee7ea..60939e7418 100644
--- a/be/src/gutil/strings/split.cc
+++ b/be/src/gutil/strings/split.cc
@@ -327,8 +327,7 @@ static int CalculateReserveForVector(const string& full, 
const char* delim) {
 // the characters in the string, not the entire string as a single delimiter.
 // ----------------------------------------------------------------------
 template <typename StringType, typename ITR>
-static inline void SplitStringToIteratorUsing(const StringType& full, const 
char* delim,
-                                              ITR& result) {
+void SplitStringToIteratorUsing(const StringType& full, const char* delim, 
ITR& result) {
     // Optimize the common case where delim is a single character.
     if (delim[0] != '\0' && delim[1] == '\0') {
         char c = delim[0];
@@ -471,9 +470,8 @@ string SplitOneStringToken(const char** source, const char* 
delim) {
 //   account. '\' is not allowed as a delimiter.
 // ----------------------------------------------------------------------
 template <typename ITR>
-static inline void SplitStringWithEscapingToIterator(const string& src,
-                                                     const strings::CharSet& 
delimiters,
-                                                     const bool allow_empty, 
ITR* result) {
+void SplitStringWithEscapingToIterator(const string& src, const 
strings::CharSet& delimiters,
+                                       const bool allow_empty, ITR* result) {
     CHECK(!delimiters.Test('\\')) << "\\ is not allowed as a delimiter.";
     CHECK(result);
     string part;
diff --git a/be/src/gutil/strings/split.h b/be/src/gutil/strings/split.h
index 7889a5a8a6..1ea3e71e73 100644
--- a/be/src/gutil/strings/split.h
+++ b/be/src/gutil/strings/split.h
@@ -292,12 +292,12 @@ namespace strings {
 
 // Definitions of the main Split() function.
 template <typename Delimiter>
-inline internal::Splitter<Delimiter> Split(StringPiece text, Delimiter d) {
+internal::Splitter<Delimiter> Split(StringPiece text, Delimiter d) {
     return internal::Splitter<Delimiter>(text, d);
 }
 
 template <typename Delimiter, typename Predicate>
-inline internal::Splitter<Delimiter, Predicate> Split(StringPiece text, 
Delimiter d, Predicate p) {
+internal::Splitter<Delimiter, Predicate> Split(StringPiece text, Delimiter d, 
Predicate p) {
     return internal::Splitter<Delimiter, Predicate>(text, d, p);
 }
 
@@ -415,7 +415,7 @@ private:
 // Literal as the default if string-like objects are passed as the delimiter
 // parameter. This is similar to the overloads for Split() below.
 template <typename Delimiter>
-inline LimitImpl<Delimiter> Limit(Delimiter delim, int limit) {
+LimitImpl<Delimiter> Limit(Delimiter delim, int limit) {
     return LimitImpl<Delimiter>(delim, limit);
 }
 
@@ -499,23 +499,22 @@ inline internal::Splitter<delimiter::Literal> 
Split(StringPiece text, StringPiec
 
 // Same overloads as above, but also including a Predicate argument.
 template <typename Predicate>
-inline internal::Splitter<delimiter::Literal, Predicate> Split(StringPiece 
text,
-                                                               const char* 
delimiter, Predicate p) {
+internal::Splitter<delimiter::Literal, Predicate> Split(StringPiece text, 
const char* delimiter,
+                                                        Predicate p) {
     return internal::Splitter<delimiter::Literal, Predicate>(text, 
delimiter::Literal(delimiter),
                                                              p);
 }
 
 template <typename Predicate>
-inline internal::Splitter<delimiter::Literal, Predicate> Split(StringPiece 
text,
-                                                               const string& 
delimiter,
-                                                               Predicate p) {
+internal::Splitter<delimiter::Literal, Predicate> Split(StringPiece text, 
const string& delimiter,
+                                                        Predicate p) {
     return internal::Splitter<delimiter::Literal, Predicate>(text, 
delimiter::Literal(delimiter),
                                                              p);
 }
 
 template <typename Predicate>
-inline internal::Splitter<delimiter::Literal, Predicate> Split(StringPiece 
text,
-                                                               StringPiece 
delimiter, Predicate p) {
+internal::Splitter<delimiter::Literal, Predicate> Split(StringPiece text, 
StringPiece delimiter,
+                                                        Predicate p) {
     return internal::Splitter<delimiter::Literal, Predicate>(text, 
delimiter::Literal(delimiter),
                                                              p);
 }
diff --git a/be/src/gutil/strings/strip.h b/be/src/gutil/strings/strip.h
index b9c8d59c42..b4221d7d45 100644
--- a/be/src/gutil/strings/strip.h
+++ b/be/src/gutil/strings/strip.h
@@ -115,7 +115,7 @@ void StripWhiteSpace(string* str);
 namespace strings {
 
 template <typename Collection>
-inline void StripWhiteSpaceInCollection(Collection* collection) {
+void StripWhiteSpaceInCollection(Collection* collection) {
     for (typename Collection::iterator it = collection->begin(); it != 
collection->end(); ++it)
         StripWhiteSpace(&(*it));
 }
diff --git a/be/src/gutil/strings/util.cc b/be/src/gutil/strings/util.cc
index 57751ce398..3225fe992b 100644
--- a/be/src/gutil/strings/util.cc
+++ b/be/src/gutil/strings/util.cc
@@ -776,8 +776,8 @@ static bool IsWildcard(Rune character) {
 
 // Move the strings pointers to the point where they start to differ.
 template <typename CHAR, typename NEXT>
-static void EatSameChars(const CHAR** pattern, const CHAR* pattern_end, const 
CHAR** string,
-                         const CHAR* string_end, NEXT next) {
+void EatSameChars(const CHAR** pattern, const CHAR* pattern_end, const CHAR** 
string,
+                  const CHAR* string_end, NEXT next) {
     const CHAR* escape = nullptr;
     while (*pattern != pattern_end && *string != string_end) {
         if (!escape && IsWildcard(**pattern)) {
@@ -818,7 +818,7 @@ static void EatSameChars(const CHAR** pattern, const CHAR* 
pattern_end, const CH
 }
 
 template <typename CHAR, typename NEXT>
-static void EatWildcard(const CHAR** pattern, const CHAR* end, NEXT next) {
+void EatWildcard(const CHAR** pattern, const CHAR* end, NEXT next) {
     while (*pattern != end) {
         if (!IsWildcard(**pattern)) return;
         next(pattern, end);
@@ -826,8 +826,8 @@ static void EatWildcard(const CHAR** pattern, const CHAR* 
end, NEXT next) {
 }
 
 template <typename CHAR, typename NEXT>
-static bool MatchPatternT(const CHAR* eval, const CHAR* eval_end, const CHAR* 
pattern,
-                          const CHAR* pattern_end, int depth, NEXT next) {
+bool MatchPatternT(const CHAR* eval, const CHAR* eval_end, const CHAR* pattern,
+                   const CHAR* pattern_end, int depth, NEXT next) {
     const int kMaxDepth = 16;
     if (depth > kMaxDepth) return false;
 
diff --git a/be/src/gutil/strings/util.h b/be/src/gutil/strings/util.h
index 5aaa058f48..941fd5e91b 100644
--- a/be/src/gutil/strings/util.h
+++ b/be/src/gutil/strings/util.h
@@ -142,7 +142,7 @@ const char* strncaseprefix(const char* haystack, int 
haystack_size, const char*
 // char* literals). Templated so searching a const char* returns a const char*,
 // and searching a non-const char* returns a non-const char*.
 template <class CharStar>
-inline CharStar var_strprefix(CharStar str, const char* prefix) {
+CharStar var_strprefix(CharStar str, const char* prefix) {
     const int len = strlen(prefix);
     return strncmp(str, prefix, len) == 0 ? str + len : NULL;
 }
@@ -150,7 +150,7 @@ inline CharStar var_strprefix(CharStar str, const char* 
prefix) {
 // Same as var_strprefix() (immediately above), but matches a case-insensitive
 // prefix.
 template <class CharStar>
-inline CharStar var_strcaseprefix(CharStar str, const char* prefix) {
+CharStar var_strcaseprefix(CharStar str, const char* prefix) {
     const int len = strlen(prefix);
     return strncasecmp(str, prefix, len) == 0 ? str + len : NULL;
 }
diff --git a/be/src/olap/predicate_creator.h b/be/src/olap/predicate_creator.h
index 931290021f..754a1ad503 100644
--- a/be/src/olap/predicate_creator.h
+++ b/be/src/olap/predicate_creator.h
@@ -152,7 +152,7 @@ private:
 };
 
 template <PredicateType PT, typename ConditionType>
-inline std::unique_ptr<PredicateCreator<ConditionType>> get_creator(const 
FieldType& type) {
+std::unique_ptr<PredicateCreator<ConditionType>> get_creator(const FieldType& 
type) {
     switch (type) {
     case OLAP_FIELD_TYPE_TINYINT: {
         return std::make_unique<IntegerPredicateCreator<TYPE_TINYINT, PT, 
ConditionType>>();
@@ -237,25 +237,24 @@ inline std::unique_ptr<PredicateCreator<ConditionType>> 
get_creator(const FieldT
 }
 
 template <PredicateType PT, typename ConditionType>
-inline ColumnPredicate* create_predicate(const TabletColumn& column, int index,
-                                         const ConditionType& conditions, bool 
opposite,
-                                         MemPool* pool) {
+ColumnPredicate* create_predicate(const TabletColumn& column, int index,
+                                  const ConditionType& conditions, bool 
opposite, MemPool* pool) {
     return get_creator<PT, ConditionType>(column.type())
             ->create(column, index, conditions, opposite, pool);
 }
 
 template <PredicateType PT>
-inline ColumnPredicate* create_comparison_predicate(const TabletColumn& 
column, int index,
-                                                    const std::string& 
condition, bool opposite,
-                                                    MemPool* pool) {
+ColumnPredicate* create_comparison_predicate(const TabletColumn& column, int 
index,
+                                             const std::string& condition, 
bool opposite,
+                                             MemPool* pool) {
     static_assert(PredicateTypeTraits::is_comparison(PT));
     return create_predicate<PT, std::string>(column, index, condition, 
opposite, pool);
 }
 
 template <PredicateType PT>
-inline ColumnPredicate* create_list_predicate(const TabletColumn& column, int 
index,
-                                              const std::vector<std::string>& 
conditions,
-                                              bool opposite, MemPool* pool) {
+ColumnPredicate* create_list_predicate(const TabletColumn& column, int index,
+                                       const std::vector<std::string>& 
conditions, bool opposite,
+                                       MemPool* pool) {
     static_assert(PredicateTypeTraits::is_list(PT));
     return create_predicate<PT, std::vector<std::string>>(column, index, 
conditions, opposite,
                                                           pool);
diff --git a/be/src/olap/skiplist.h b/be/src/olap/skiplist.h
index f960bb468e..771cca0e66 100644
--- a/be/src/olap/skiplist.h
+++ b/be/src/olap/skiplist.h
@@ -209,30 +209,30 @@ typename SkipList<Key, Comparator>::Node* SkipList<Key, 
Comparator>::NewNode(con
 }
 
 template <typename Key, class Comparator>
-inline SkipList<Key, Comparator>::Iterator::Iterator(const SkipList* list) {
+SkipList<Key, Comparator>::Iterator::Iterator(const SkipList* list) {
     list_ = list;
     node_ = nullptr;
 }
 
 template <typename Key, class Comparator>
-inline bool SkipList<Key, Comparator>::Iterator::Valid() const {
+bool SkipList<Key, Comparator>::Iterator::Valid() const {
     return node_ != nullptr;
 }
 
 template <typename Key, class Comparator>
-inline const Key& SkipList<Key, Comparator>::Iterator::key() const {
+const Key& SkipList<Key, Comparator>::Iterator::key() const {
     DCHECK(Valid());
     return node_->key;
 }
 
 template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::Next() {
+void SkipList<Key, Comparator>::Iterator::Next() {
     DCHECK(Valid());
     node_ = node_->Next(0);
 }
 
 template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::Prev() {
+void SkipList<Key, Comparator>::Iterator::Prev() {
     // Instead of using explicit "prev" links, we just search for the
     // last node that falls before key.
     DCHECK(Valid());
@@ -243,17 +243,17 @@ inline void SkipList<Key, Comparator>::Iterator::Prev() {
 }
 
 template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::Seek(const Key& target) {
+void SkipList<Key, Comparator>::Iterator::Seek(const Key& target) {
     node_ = list_->FindGreaterOrEqual(target, nullptr);
 }
 
 template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::SeekToFirst() {
+void SkipList<Key, Comparator>::Iterator::SeekToFirst() {
     node_ = list_->head_->Next(0);
 }
 
 template <typename Key, class Comparator>
-inline void SkipList<Key, Comparator>::Iterator::SeekToLast() {
+void SkipList<Key, Comparator>::Iterator::SeekToLast() {
     node_ = list_->FindLast();
     if (node_ == list_->head_) {
         node_ = nullptr;
diff --git a/be/src/olap/types.cpp b/be/src/olap/types.cpp
index f92c0c0da1..7d83e4ec30 100644
--- a/be/src/olap/types.cpp
+++ b/be/src/olap/types.cpp
@@ -106,7 +106,7 @@ const TypeInfo* get_scalar_type_info(FieldType field_type) {
     }
 
 template <FieldType field_type>
-inline const ArrayTypeInfo* get_init_array_type_info(int32_t iterations) {
+const ArrayTypeInfo* get_init_array_type_info(int32_t iterations) {
     static ArrayTypeInfo nested_type_info_0(
             create_static_type_info_ptr(get_scalar_type_info<field_type>()));
     static ArrayTypeInfo 
nested_type_info_1(create_static_type_info_ptr(&nested_type_info_0));
diff --git a/be/src/olap/types.h b/be/src/olap/types.h
index b26a89ba6f..c9e61456dd 100644
--- a/be/src/olap/types.h
+++ b/be/src/olap/types.h
@@ -1398,7 +1398,7 @@ struct TypeTraits : public FieldTypeTraits<field_type> {
 };
 
 template <FieldType field_type>
-inline const TypeInfo* get_scalar_type_info() {
+const TypeInfo* get_scalar_type_info() {
     static constexpr TypeTraits<field_type> traits;
     static ScalarTypeInfo scalar_type_info(traits);
     return &scalar_type_info;
diff --git a/be/src/olap/utils.h b/be/src/olap/utils.h
index e63d998cce..fd98df50df 100644
--- a/be/src/olap/utils.h
+++ b/be/src/olap/utils.h
@@ -52,16 +52,16 @@ const static int32_t g_power_table[] = {1,      10,      
100,      1000,      10
 // 计时工具,用于确定一段代码执行的时间,用于性能调优
 class OlapStopWatch {
 public:
-    uint64_t get_elapse_time_us() {
+    uint64_t get_elapse_time_us() const {
         struct timeval now;
-        gettimeofday(&now, 0);
+        gettimeofday(&now, nullptr);
         return (uint64_t)((now.tv_sec - _begin_time.tv_sec) * 1e6 +
                           (now.tv_usec - _begin_time.tv_usec));
     }
 
-    double get_elapse_second() { return get_elapse_time_us() / 1000000.0; }
+    double get_elapse_second() const { return get_elapse_time_us() / 
1000000.0; }
 
-    void reset() { gettimeofday(&_begin_time, 0); }
+    void reset() { gettimeofday(&_begin_time, nullptr); }
 
     OlapStopWatch() { reset(); }
 
diff --git a/be/src/runtime/exec_env.h b/be/src/runtime/exec_env.h
index ae402453be..7fb7251df6 100644
--- a/be/src/runtime/exec_env.h
+++ b/be/src/runtime/exec_env.h
@@ -114,7 +114,7 @@ public:
 
     // using template to simplify client cache management
     template <typename T>
-    ClientCache<T>* get_client_cache() {
+    inline ClientCache<T>* get_client_cache() {
         return nullptr;
     }
 
diff --git a/be/src/runtime/memory/thread_mem_tracker_mgr.h 
b/be/src/runtime/memory/thread_mem_tracker_mgr.h
index 5898f4c338..363d2e9361 100644
--- a/be/src/runtime/memory/thread_mem_tracker_mgr.h
+++ b/be/src/runtime/memory/thread_mem_tracker_mgr.h
@@ -203,7 +203,7 @@ inline bool ThreadMemTrackerMgr::try_consume(int64_t size) {
 }
 
 template <bool CheckLimit, bool Force>
-inline bool ThreadMemTrackerMgr::flush_untracked_mem() {
+bool ThreadMemTrackerMgr::flush_untracked_mem() {
     // Temporary memory may be allocated during the consumption of the mem 
tracker, which will lead to entering
     // the Memory Hook again, so suspend consumption to avoid falling into an 
infinite loop.
     _stop_consume = true;
diff --git a/be/src/service/point_query_executor.cpp 
b/be/src/service/point_query_executor.cpp
index e33a7a186b..1db2881007 100644
--- a/be/src/service/point_query_executor.cpp
+++ b/be/src/service/point_query_executor.cpp
@@ -278,8 +278,8 @@ Status PointQueryExecutor::_lookup_row_data() {
 }
 
 template <typename MysqlWriter>
-static Status _serialize_block(MysqlWriter& mysql_writer, vectorized::Block& 
block,
-                               PTabletKeyLookupResponse* response) {
+Status _serialize_block(MysqlWriter& mysql_writer, vectorized::Block& block,
+                        PTabletKeyLookupResponse* response) {
     RETURN_IF_ERROR(mysql_writer.append_block(block));
     assert(mysql_writer.results().size() == 1);
     uint8_t* buf = nullptr;
diff --git a/be/src/util/binary_cast.hpp b/be/src/util/binary_cast.hpp
index 17754a15e9..df9190a55c 100644
--- a/be/src/util/binary_cast.hpp
+++ b/be/src/util/binary_cast.hpp
@@ -37,7 +37,7 @@ union TypeConverter {
 };
 
 template <typename C0, typename C1, typename T0, typename T1>
-inline constexpr bool match_v = std::is_same_v<C0, C1> && std::is_same_v<T0, 
T1>;
+constexpr bool match_v = std::is_same_v<C0, C1> && std::is_same_v<T0, T1>;
 
 union DecimalInt128Union {
     DecimalV2Value decimal;
diff --git a/be/src/util/bit_packing.inline.h b/be/src/util/bit_packing.inline.h
index 118d4edaa2..ed578868bd 100644
--- a/be/src/util/bit_packing.inline.h
+++ b/be/src/util/bit_packing.inline.h
@@ -172,7 +172,7 @@ std::pair<const uint8_t*, int64_t> 
BitPacking::UnpackAndDecodeValues(
 // avoid buffer overflow (if we are unpacking 32 values, we can safely assume 
an input
 // buffer of length 32 * BIT_WIDTH).
 template <int BIT_WIDTH, int VALUE_IDX, bool FULL_BATCH>
-inline uint64_t ALWAYS_INLINE UnpackValue(const uint8_t* __restrict__ in_buf) {
+uint64_t UnpackValue(const uint8_t* __restrict__ in_buf) {
     if (BIT_WIDTH == 0) return 0;
 
     constexpr int FIRST_BIT_IDX = VALUE_IDX * BIT_WIDTH;
@@ -220,9 +220,8 @@ inline uint64_t ALWAYS_INLINE UnpackValue(const uint8_t* 
__restrict__ in_buf) {
 }
 
 template <typename OutType>
-inline void ALWAYS_INLINE DecodeValue(OutType* __restrict__ dict, int64_t 
dict_len, uint32_t idx,
-                                      OutType* __restrict__ out_val,
-                                      bool* __restrict__ decode_error) {
+void DecodeValue(OutType* __restrict__ dict, int64_t dict_len, uint32_t idx,
+                 OutType* __restrict__ out_val, bool* __restrict__ 
decode_error) {
     if (UNLIKELY(idx >= dict_len)) {
         *decode_error = true;
     } else {
diff --git a/be/src/util/bit_stream_utils.inline.h 
b/be/src/util/bit_stream_utils.inline.h
index fb62e9e3ae..24dabe9e67 100644
--- a/be/src/util/bit_stream_utils.inline.h
+++ b/be/src/util/bit_stream_utils.inline.h
@@ -80,7 +80,7 @@ inline uint8_t* BitWriter::GetNextBytePtr(int num_bytes) {
 }
 
 template <typename T>
-inline void BitWriter::PutAligned(T val, int num_bytes) {
+void BitWriter::PutAligned(T val, int num_bytes) {
     DCHECK_LE(num_bytes, sizeof(T));
     uint8_t* ptr = GetNextBytePtr(num_bytes);
     memcpy(ptr, &val, num_bytes);
@@ -114,7 +114,7 @@ inline void BitReader::BufferValues() {
 }
 
 template <typename T>
-inline bool BitReader::GetValue(int num_bits, T* v) {
+bool BitReader::GetValue(int num_bits, T* v) {
     DCHECK_LE(num_bits, 64);
     DCHECK_LE(num_bits, sizeof(T) * 8);
 
@@ -187,7 +187,7 @@ inline void BitReader::SeekToBit(unsigned int 
stream_position) {
 }
 
 template <typename T>
-inline bool BitReader::GetAligned(int num_bytes, T* v) {
+bool BitReader::GetAligned(int num_bytes, T* v) {
     DCHECK_LE(num_bytes, sizeof(T));
     int bytes_read = BitUtil::Ceil(bit_offset_, 8);
     if (PREDICT_FALSE(byte_offset_ + bytes_read + num_bytes > max_bytes_)) 
return false;
@@ -258,7 +258,7 @@ inline bool BitReader::GetZigZagVlqInt(int64_t* v) {
 }
 
 template <typename T>
-inline int BatchedBitReader::UnpackBatch(int bit_width, int num_values, T* v) {
+int BatchedBitReader::UnpackBatch(int bit_width, int num_values, T* v) {
     DCHECK(buffer_pos_ != nullptr);
     DCHECK_GE(bit_width, 0);
     DCHECK_LE(bit_width, MAX_BITWIDTH);
@@ -288,8 +288,8 @@ inline bool BatchedBitReader::SkipBatch(int bit_width, int 
num_values_to_skip) {
 }
 
 template <typename T>
-inline int BatchedBitReader::UnpackAndDecodeBatch(int bit_width, T* dict, 
int64_t dict_len,
-                                                  int num_values, T* v, 
int64_t stride) {
+int BatchedBitReader::UnpackAndDecodeBatch(int bit_width, T* dict, int64_t 
dict_len, int num_values,
+                                           T* v, int64_t stride) {
     DCHECK(buffer_pos_ != nullptr);
     DCHECK_GE(bit_width, 0);
     DCHECK_LE(bit_width, MAX_BITWIDTH);
@@ -309,7 +309,7 @@ inline int BatchedBitReader::UnpackAndDecodeBatch(int 
bit_width, T* dict, int64_
 }
 
 template <typename T>
-inline bool BatchedBitReader::GetBytes(int num_bytes, T* v) {
+bool BatchedBitReader::GetBytes(int num_bytes, T* v) {
     DCHECK(buffer_pos_ != nullptr);
     DCHECK_GE(num_bytes, 0);
     DCHECK_LE(num_bytes, sizeof(T));
@@ -321,7 +321,7 @@ inline bool BatchedBitReader::GetBytes(int num_bytes, T* v) 
{
 }
 
 template <typename UINT_T>
-inline bool BatchedBitReader::GetUleb128(UINT_T* v) {
+bool BatchedBitReader::GetUleb128(UINT_T* v) {
     static_assert(std::is_integral<UINT_T>::value, "Integral type required.");
     static_assert(std::is_unsigned<UINT_T>::value, "Unsigned type required.");
     static_assert(!std::is_same<UINT_T, bool>::value, "Bools are not 
supported.");
diff --git a/be/src/util/bitmap_intersect.h b/be/src/util/bitmap_intersect.h
index 5de40232c5..8258ee21eb 100644
--- a/be/src/util/bitmap_intersect.h
+++ b/be/src/util/bitmap_intersect.h
@@ -55,7 +55,7 @@ public:
 };
 
 template <>
-inline char* Helper::write_to<DateTimeValue>(const DateTimeValue& v, char* 
dest) {
+char* Helper::write_to<DateTimeValue>(const DateTimeValue& v, char* dest) {
     DateTimeVal value;
     v.to_datetime_val(&value);
     *(int64_t*)dest = value.packed_time;
@@ -66,7 +66,7 @@ inline char* Helper::write_to<DateTimeValue>(const 
DateTimeValue& v, char* dest)
 }
 
 template <>
-inline char* Helper::write_to<DecimalV2Value>(const DecimalV2Value& v, char* 
dest) {
+char* Helper::write_to<DecimalV2Value>(const DecimalV2Value& v, char* dest) {
     __int128 value = v.value();
     memcpy(dest, &value, DECIMAL_BYTE_SIZE);
     dest += DECIMAL_BYTE_SIZE;
@@ -74,7 +74,7 @@ inline char* Helper::write_to<DecimalV2Value>(const 
DecimalV2Value& v, char* des
 }
 
 template <>
-inline char* Helper::write_to<StringRef>(const StringRef& v, char* dest) {
+char* Helper::write_to<StringRef>(const StringRef& v, char* dest) {
     *(int32_t*)dest = v.size;
     dest += 4;
     memcpy(dest, v.data, v.size);
@@ -83,7 +83,7 @@ inline char* Helper::write_to<StringRef>(const StringRef& v, 
char* dest) {
 }
 
 template <>
-inline char* Helper::write_to<std::string>(const std::string& v, char* dest) {
+char* Helper::write_to<std::string>(const std::string& v, char* dest) {
     *(uint32_t*)dest = v.size();
     dest += 4;
     memcpy(dest, v.c_str(), v.size());
@@ -93,28 +93,28 @@ inline char* Helper::write_to<std::string>(const 
std::string& v, char* dest) {
 // write_to end
 
 template <>
-inline int32_t Helper::serialize_size<DateTimeValue>(const DateTimeValue& v) {
+int32_t Helper::serialize_size<DateTimeValue>(const DateTimeValue& v) {
     return Helper::DATETIME_PACKED_TIME_BYTE_SIZE + 
Helper::DATETIME_TYPE_BYTE_SIZE;
 }
 
 template <>
-inline int32_t Helper::serialize_size<DecimalV2Value>(const DecimalV2Value& v) 
{
+int32_t Helper::serialize_size<DecimalV2Value>(const DecimalV2Value& v) {
     return Helper::DECIMAL_BYTE_SIZE;
 }
 
 template <>
-inline int32_t Helper::serialize_size<StringRef>(const StringRef& v) {
+int32_t Helper::serialize_size<StringRef>(const StringRef& v) {
     return v.size + 4;
 }
 
 template <>
-inline int32_t Helper::serialize_size<std::string>(const std::string& v) {
+int32_t Helper::serialize_size<std::string>(const std::string& v) {
     return v.size() + 4;
 }
 // serialize_size end
 
 template <>
-inline void Helper::read_from<DateTimeValue>(const char** src, DateTimeValue* 
result) {
+void Helper::read_from<DateTimeValue>(const char** src, DateTimeValue* result) 
{
     DateTimeVal value;
     value.is_null = false;
     value.packed_time = *(int64_t*)(*src);
@@ -125,7 +125,7 @@ inline void Helper::read_from<DateTimeValue>(const char** 
src, DateTimeValue* re
 }
 
 template <>
-inline void Helper::read_from<DecimalV2Value>(const char** src, 
DecimalV2Value* result) {
+void Helper::read_from<DecimalV2Value>(const char** src, DecimalV2Value* 
result) {
     __int128 v = 0;
     memcpy(&v, *src, DECIMAL_BYTE_SIZE);
     *src += DECIMAL_BYTE_SIZE;
@@ -133,7 +133,7 @@ inline void Helper::read_from<DecimalV2Value>(const char** 
src, DecimalV2Value*
 }
 
 template <>
-inline void Helper::read_from<StringRef>(const char** src, StringRef* result) {
+void Helper::read_from<StringRef>(const char** src, StringRef* result) {
     int32_t length = *(int32_t*)(*src);
     *src += 4;
     *result = StringRef((char*)*src, length);
@@ -141,7 +141,7 @@ inline void Helper::read_from<StringRef>(const char** src, 
StringRef* result) {
 }
 
 template <>
-inline void Helper::read_from<std::string>(const char** src, std::string* 
result) {
+void Helper::read_from<std::string>(const char** src, std::string* result) {
     int32_t length = *(int32_t*)(*src);
     *src += 4;
     *result = std::string((char*)*src, length);
diff --git a/be/src/util/coding.h b/be/src/util/coding.h
index 3cfa8e76b4..16b89507b2 100644
--- a/be/src/util/coding.h
+++ b/be/src/util/coding.h
@@ -105,14 +105,14 @@ inline uint128_t decode_fixed128_le(const uint8_t* buf) {
 }
 
 template <typename T>
-inline void put_fixed32_le(T* dst, uint32_t val) {
+void put_fixed32_le(T* dst, uint32_t val) {
     uint8_t buf[sizeof(val)];
     encode_fixed32_le(buf, val);
     dst->append((char*)buf, sizeof(buf));
 }
 
 template <typename T>
-inline void put_fixed64_le(T* dst, uint64_t val) {
+void put_fixed64_le(T* dst, uint64_t val) {
     uint8_t buf[sizeof(val)];
     encode_fixed64_le(buf, val);
     dst->append((char*)buf, sizeof(buf));
@@ -129,7 +129,7 @@ inline int varint_length(uint64_t v) {
 }
 
 template <typename T>
-inline void put_fixed128_le(T* dst, uint128_t val) {
+void put_fixed128_le(T* dst, uint128_t val) {
     uint8_t buf[sizeof(val)];
     encode_fixed128_le(buf, val);
     dst->append((char*)buf, sizeof(buf));
@@ -169,27 +169,27 @@ inline const uint8_t* decode_varint32_ptr(const uint8_t* 
ptr, const uint8_t* lim
 extern const uint8_t* decode_varint64_ptr(const uint8_t* p, const uint8_t* 
limit, uint64_t* value);
 
 template <typename T>
-inline void put_varint32(T* dst, uint32_t v) {
+void put_varint32(T* dst, uint32_t v) {
     uint8_t buf[16];
     uint8_t* ptr = encode_varint32(buf, v);
     dst->append((char*)buf, static_cast<size_t>(ptr - buf));
 }
 
 template <typename T>
-inline void put_varint64(T* dst, uint64_t v) {
+void put_varint64(T* dst, uint64_t v) {
     uint8_t buf[16];
     uint8_t* ptr = encode_varint64(buf, v);
     dst->append((char*)buf, static_cast<size_t>(ptr - buf));
 }
 
 template <typename T>
-inline void put_length_prefixed_slice(T* dst, const Slice& value) {
+void put_length_prefixed_slice(T* dst, const Slice& value) {
     put_varint32(dst, value.get_size());
     dst->append(value.get_data(), value.get_size());
 }
 
 template <typename T>
-inline void put_varint64_varint32(T* dst, uint64_t v1, uint32_t v2) {
+void put_varint64_varint32(T* dst, uint64_t v1, uint32_t v2) {
     uint8_t buf[16];
     uint8_t* ptr = encode_varint64(buf, v1);
     ptr = encode_varint32(ptr, v2);
diff --git a/be/src/util/frame_of_reference_coding.h 
b/be/src/util/frame_of_reference_coding.h
index bab0dca0ef..da3d716e75 100644
--- a/be/src/util/frame_of_reference_coding.h
+++ b/be/src/util/frame_of_reference_coding.h
@@ -29,12 +29,12 @@
 
 namespace doris {
 
-static inline uint8_t bits_less_than_64(const uint64_t v) {
+inline uint8_t bits_less_than_64(const uint64_t v) {
     return v == 0 ? 0 : 64 - __builtin_clzll(v);
 }
 
 // See 
https://stackoverflow.com/questions/28423405/counting-the-number-of-leading-zeros-in-a-128-bit-integer
-static inline uint8_t bits_may_more_than_64(const uint128_t v) {
+inline uint8_t bits_may_more_than_64(const uint128_t v) {
     uint64_t hi = v >> 64;
     uint64_t lo = v;
     int z[3] = {__builtin_clzll(hi), __builtin_clzll(lo) + 64, 128};
@@ -43,7 +43,7 @@ static inline uint8_t bits_may_more_than_64(const uint128_t 
v) {
 }
 
 template <typename T>
-static inline uint8_t bits(const T v) {
+uint8_t bits(const T v) {
     if (sizeof(T) <= 8) {
         return bits_less_than_64(v);
     } else {
diff --git a/be/src/util/interval_tree-inl.h b/be/src/util/interval_tree-inl.h
index d322d260d5..f93dd788a6 100644
--- a/be/src/util/interval_tree-inl.h
+++ b/be/src/util/interval_tree-inl.h
@@ -70,7 +70,7 @@ void IntervalTree<Traits>::FindIntersectingInterval(const 
QueryPointType& lower_
 }
 
 template <class Traits>
-static bool LessThan(const typename Traits::point_type& a, const typename 
Traits::point_type& b) {
+bool LessThan(const typename Traits::point_type& a, const typename 
Traits::point_type& b) {
     return Traits::compare(a, b) < 0;
 }
 
diff --git a/be/src/util/mysql_row_buffer.cpp b/be/src/util/mysql_row_buffer.cpp
index 04f5519a6d..3473d525bd 100644
--- a/be/src/util/mysql_row_buffer.cpp
+++ b/be/src/util/mysql_row_buffer.cpp
@@ -146,7 +146,7 @@ int MysqlRowBuffer<is_binary_format>::reserve(int64_t size) 
{
 }
 
 template <typename T>
-static char* add_int(T data, char* pos, bool dynamic_mode) {
+char* add_int(T data, char* pos, bool dynamic_mode) {
     auto fi = fmt::format_int(data);
     int length = fi.size();
     if (!dynamic_mode) {
@@ -165,7 +165,7 @@ static char* add_largeint(int128_t data, char* pos, bool 
dynamic_mode) {
 }
 
 template <typename T>
-static char* add_float(T data, char* pos, bool dynamic_mode) {
+char* add_float(T data, char* pos, bool dynamic_mode) {
     int length = 0;
     if constexpr (std::is_same_v<T, float>) {
         length = FastFloatToBuffer(data, pos + !dynamic_mode);
diff --git a/be/src/util/proto_util.h b/be/src/util/proto_util.h
index f7d8e1ef09..79a1e0866c 100644
--- a/be/src/util/proto_util.h
+++ b/be/src/util/proto_util.h
@@ -39,7 +39,7 @@ constexpr size_t MIN_HTTP_BRPC_SIZE = (1ULL << 31);
 
 // Embed column_values and brpc request serialization string in controller 
attachment.
 template <typename Params, typename Closure>
-inline Status request_embed_attachment_contain_block(Params* brpc_request, 
Closure* closure) {
+Status request_embed_attachment_contain_block(Params* brpc_request, Closure* 
closure) {
     auto block = brpc_request->block();
     Status st = request_embed_attachment(brpc_request, block.column_values(), 
closure);
     block.set_column_values("");
@@ -62,15 +62,15 @@ inline bool enable_http_send_block(
 }
 
 template <typename Closure>
-inline void transmit_block(PBackendService_Stub& stub, Closure* closure,
-                           const PTransmitDataParams& params) {
+void transmit_block(PBackendService_Stub& stub, Closure* closure,
+                    const PTransmitDataParams& params) {
     closure->cntl.http_request().Clear();
     stub.transmit_block(&closure->cntl, &params, &closure->result, closure);
 }
 
 template <typename Closure>
-inline Status transmit_block_http(RuntimeState* state, Closure* closure,
-                                  PTransmitDataParams& params, TNetworkAddress 
brpc_dest_addr) {
+Status transmit_block_http(RuntimeState* state, Closure* closure, 
PTransmitDataParams& params,
+                           TNetworkAddress brpc_dest_addr) {
     RETURN_IF_ERROR(request_embed_attachment_contain_block(&params, closure));
 
     //format an ipv6 address
@@ -92,8 +92,8 @@ inline Status transmit_block_http(RuntimeState* state, 
Closure* closure,
 // This can avoid reaching the upper limit of the ProtoBuf Request length (2G),
 // and it is expected that performance can be improved.
 template <typename Params, typename Closure>
-inline void request_row_batch_transfer_attachment(Params* brpc_request,
-                                                  const std::string& 
tuple_data, Closure* closure) {
+void request_row_batch_transfer_attachment(Params* brpc_request, const 
std::string& tuple_data,
+                                           Closure* closure) {
     auto row_batch = brpc_request->mutable_row_batch();
     row_batch->set_tuple_data("");
     brpc_request->set_transfer_by_attachment(true);
@@ -107,8 +107,8 @@ inline void request_row_batch_transfer_attachment(Params* 
brpc_request,
 // This can avoid reaching the upper limit of the ProtoBuf Request length (2G),
 // and it is expected that performance can be improved.
 template <typename Params, typename Closure>
-inline void request_block_transfer_attachment(Params* brpc_request,
-                                              const std::string& 
column_values, Closure* closure) {
+void request_block_transfer_attachment(Params* brpc_request, const 
std::string& column_values,
+                                       Closure* closure) {
     auto block = brpc_request->mutable_block();
     block->set_column_values("");
     brpc_request->set_transfer_by_attachment(true);
@@ -120,8 +120,7 @@ inline void request_block_transfer_attachment(Params* 
brpc_request,
 // TODO(zxy) delete in v1.3 version
 // Controller Attachment transferred to RowBatch in ProtoBuf Request.
 template <typename Params>
-inline void attachment_transfer_request_row_batch(const Params* brpc_request,
-                                                  brpc::Controller* cntl) {
+void attachment_transfer_request_row_batch(const Params* brpc_request, 
brpc::Controller* cntl) {
     Params* req = const_cast<Params*>(brpc_request);
     if (req->has_row_batch() && req->transfer_by_attachment()) {
         auto rb = req->mutable_row_batch();
@@ -134,7 +133,7 @@ inline void attachment_transfer_request_row_batch(const 
Params* brpc_request,
 // TODO(zxy) delete in v1.3 version
 // Controller Attachment transferred to Block in ProtoBuf Request.
 template <typename Params>
-inline void attachment_transfer_request_block(const Params* brpc_request, 
brpc::Controller* cntl) {
+void attachment_transfer_request_block(const Params* brpc_request, 
brpc::Controller* cntl) {
     Params* req = const_cast<Params*>(brpc_request);
     if (req->has_block() && req->transfer_by_attachment()) {
         auto block = req->mutable_block();
@@ -145,8 +144,7 @@ inline void attachment_transfer_request_block(const Params* 
brpc_request, brpc::
 }
 
 template <typename Params, typename Closure>
-inline Status request_embed_attachment(Params* brpc_request, const 
std::string& data,
-                                       Closure* closure) {
+Status request_embed_attachment(Params* brpc_request, const std::string& data, 
Closure* closure) {
     butil::IOBuf attachment;
 
     // step1: serialize brpc_request to string, and append to attachment.
@@ -177,16 +175,16 @@ inline Status request_embed_attachment(Params* 
brpc_request, const std::string&
 // Extract the brpc request and block from the controller attachment,
 // and put the block into the request.
 template <typename Params>
-inline Status attachment_extract_request_contain_block(const Params* 
brpc_request,
-                                                       brpc::Controller* cntl) 
{
+Status attachment_extract_request_contain_block(const Params* brpc_request,
+                                                brpc::Controller* cntl) {
     Params* req = const_cast<Params*>(brpc_request);
     auto block = req->mutable_block();
     return attachment_extract_request(req, cntl, 
block->mutable_column_values());
 }
 
 template <typename Params>
-inline Status attachment_extract_request(const Params* brpc_request, 
brpc::Controller* cntl,
-                                         std::string* data) {
+Status attachment_extract_request(const Params* brpc_request, 
brpc::Controller* cntl,
+                                  std::string* data) {
     const butil::IOBuf& io_buf = cntl->request_attachment();
 
     // step1: deserialize request string to brpc_request from attachment.
diff --git a/be/src/util/rle_encoding.h b/be/src/util/rle_encoding.h
index 1e83599265..21f8ee428e 100644
--- a/be/src/util/rle_encoding.h
+++ b/be/src/util/rle_encoding.h
@@ -224,7 +224,7 @@ private:
 };
 
 template <typename T>
-inline bool RleDecoder<T>::ReadHeader() {
+bool RleDecoder<T>::ReadHeader() {
     DCHECK(bit_reader_.is_initialized());
     if (PREDICT_FALSE(literal_count_ == 0 && repeat_count_ == 0)) {
         // Read the next run's indicator int, it could be a literal or 
repeated run
@@ -252,7 +252,7 @@ inline bool RleDecoder<T>::ReadHeader() {
 }
 
 template <typename T>
-inline bool RleDecoder<T>::Get(T* val) {
+bool RleDecoder<T>::Get(T* val) {
     DCHECK(bit_reader_.is_initialized());
     if (PREDICT_FALSE(!ReadHeader())) {
         return false;
@@ -274,7 +274,7 @@ inline bool RleDecoder<T>::Get(T* val) {
 }
 
 template <typename T>
-inline void RleDecoder<T>::RewindOne() {
+void RleDecoder<T>::RewindOne() {
     DCHECK(bit_reader_.is_initialized());
 
     switch (rewind_state_) {
@@ -295,7 +295,7 @@ inline void RleDecoder<T>::RewindOne() {
 }
 
 template <typename T>
-inline size_t RleDecoder<T>::GetNextRun(T* val, size_t max_run) {
+size_t RleDecoder<T>::GetNextRun(T* val, size_t max_run) {
     DCHECK(bit_reader_.is_initialized());
     DCHECK_GT(max_run, 0);
     size_t ret = 0;
@@ -343,7 +343,7 @@ inline size_t RleDecoder<T>::GetNextRun(T* val, size_t 
max_run) {
 }
 
 template <typename T>
-inline size_t RleDecoder<T>::get_values(T* values, size_t num_values) {
+size_t RleDecoder<T>::get_values(T* values, size_t num_values) {
     size_t read_num = 0;
     while (read_num < num_values) {
         size_t read_this_time = num_values - read_num;
@@ -373,7 +373,7 @@ inline size_t RleDecoder<T>::get_values(T* values, size_t 
num_values) {
 }
 
 template <typename T>
-inline size_t RleDecoder<T>::repeated_count() {
+size_t RleDecoder<T>::repeated_count() {
     if (repeat_count_ > 0) {
         return repeat_count_;
     }
@@ -384,14 +384,14 @@ inline size_t RleDecoder<T>::repeated_count() {
 }
 
 template <typename T>
-inline T RleDecoder<T>::get_repeated_value(size_t count) {
+T RleDecoder<T>::get_repeated_value(size_t count) {
     DCHECK_GE(repeat_count_, count);
     repeat_count_ -= count;
     return current_value_;
 }
 
 template <typename T>
-inline size_t RleDecoder<T>::Skip(size_t to_skip) {
+size_t RleDecoder<T>::Skip(size_t to_skip) {
     DCHECK(bit_reader_.is_initialized());
 
     size_t set_count = 0;
@@ -427,7 +427,7 @@ inline size_t RleDecoder<T>::Skip(size_t to_skip) {
 // This function buffers input values 8 at a time.  After seeing all 8 values,
 // it decides whether they should be encoded as a literal or repeated run.
 template <typename T>
-inline void RleEncoder<T>::Put(T value, size_t run_length) {
+void RleEncoder<T>::Put(T value, size_t run_length) {
     DCHECK(bit_width_ == 64 || value < (1LL << bit_width_));
 
     // TODO(perf): remove the loop and use the repeat_count_
@@ -460,7 +460,7 @@ inline void RleEncoder<T>::Put(T value, size_t run_length) {
 }
 
 template <typename T>
-inline void RleEncoder<T>::FlushLiteralRun(bool update_indicator_byte) {
+void RleEncoder<T>::FlushLiteralRun(bool update_indicator_byte) {
     if (literal_indicator_byte_idx_ < 0) {
         // The literal indicator byte has not been reserved yet, get one now.
         literal_indicator_byte_idx_ = bit_writer_.GetByteIndexAndAdvance(1);
@@ -488,7 +488,7 @@ inline void RleEncoder<T>::FlushLiteralRun(bool 
update_indicator_byte) {
 }
 
 template <typename T>
-inline void RleEncoder<T>::FlushRepeatedRun() {
+void RleEncoder<T>::FlushRepeatedRun() {
     DCHECK_GT(repeat_count_, 0);
     // The lsb of 0 indicates this is a repeated run
     int32_t indicator_value = repeat_count_ << 1 | 0;
@@ -501,7 +501,7 @@ inline void RleEncoder<T>::FlushRepeatedRun() {
 // Flush the values that have been buffered.  At this point we decide whether
 // we need to switch between the run types or continue the current one.
 template <typename T>
-inline void RleEncoder<T>::FlushBufferedValues(bool done) {
+void RleEncoder<T>::FlushBufferedValues(bool done) {
     if (repeat_count_ >= 8) {
         // Clear the buffered values.  They are part of the repeated run now 
and we
         // don't want to flush them out as literals.
@@ -531,14 +531,14 @@ inline void RleEncoder<T>::FlushBufferedValues(bool done) 
{
 }
 
 template <typename T>
-inline void RleEncoder<T>::Reserve(int num_bytes, uint8_t val) {
+void RleEncoder<T>::Reserve(int num_bytes, uint8_t val) {
     for (int i = 0; i < num_bytes; ++i) {
         bit_writer_.PutValue(val, 8);
     }
 }
 
 template <typename T>
-inline int RleEncoder<T>::Flush() {
+int RleEncoder<T>::Flush() {
     if (literal_count_ > 0 || repeat_count_ > 0 || num_buffered_values_ > 0) {
         bool all_repeat = literal_count_ == 0 &&
                           (repeat_count_ == num_buffered_values_ || 
num_buffered_values_ == 0);
@@ -559,7 +559,7 @@ inline int RleEncoder<T>::Flush() {
 }
 
 template <typename T>
-inline void RleEncoder<T>::Clear() {
+void RleEncoder<T>::Clear() {
     current_value_ = 0;
     repeat_count_ = 0;
     num_buffered_values_ = 0;
@@ -720,7 +720,7 @@ private:
 };
 
 template <typename T>
-inline int32_t RleBatchDecoder<T>::OutputBufferedLiterals(int32_t 
max_to_output, T* values) {
+int32_t RleBatchDecoder<T>::OutputBufferedLiterals(int32_t max_to_output, T* 
values) {
     int32_t num_to_output =
             std::min<int32_t>(max_to_output, num_buffered_literals_ - 
literal_buffer_pos_);
     memcpy(values, &literal_buffer_[literal_buffer_pos_], sizeof(T) * 
num_to_output);
@@ -730,7 +730,7 @@ inline int32_t 
RleBatchDecoder<T>::OutputBufferedLiterals(int32_t max_to_output,
 }
 
 template <typename T>
-inline void RleBatchDecoder<T>::Reset(uint8_t* buffer, int buffer_len, int 
bit_width) {
+void RleBatchDecoder<T>::Reset(uint8_t* buffer, int buffer_len, int bit_width) 
{
     bit_reader_.Reset(buffer, buffer_len);
     bit_width_ = bit_width;
     repeat_count_ = 0;
@@ -740,14 +740,14 @@ inline void RleBatchDecoder<T>::Reset(uint8_t* buffer, 
int buffer_len, int bit_w
 }
 
 template <typename T>
-inline int32_t RleBatchDecoder<T>::NextNumRepeats() {
+int32_t RleBatchDecoder<T>::NextNumRepeats() {
     if (repeat_count_ > 0) return repeat_count_;
     if (literal_count_ == 0) NextCounts();
     return repeat_count_;
 }
 
 template <typename T>
-inline void RleBatchDecoder<T>::NextCounts() {
+void RleBatchDecoder<T>::NextCounts() {
     // Read the next run's indicator int, it could be a literal or repeated 
run.
     // The int is encoded as a ULEB128-encoded value.
     uint32_t indicator_value = 0;
@@ -775,20 +775,20 @@ inline void RleBatchDecoder<T>::NextCounts() {
 }
 
 template <typename T>
-inline T RleBatchDecoder<T>::GetRepeatedValue(int32_t num_repeats_to_consume) {
+T RleBatchDecoder<T>::GetRepeatedValue(int32_t num_repeats_to_consume) {
     repeat_count_ -= num_repeats_to_consume;
     return repeated_value_;
 }
 
 template <typename T>
-inline int32_t RleBatchDecoder<T>::NextNumLiterals() {
+int32_t RleBatchDecoder<T>::NextNumLiterals() {
     if (literal_count_ > 0) return literal_count_;
     if (repeat_count_ == 0) NextCounts();
     return literal_count_;
 }
 
 template <typename T>
-inline bool RleBatchDecoder<T>::GetLiteralValues(int32_t 
num_literals_to_consume, T* values) {
+bool RleBatchDecoder<T>::GetLiteralValues(int32_t num_literals_to_consume, T* 
values) {
     int32_t num_consumed = 0;
     // Copy any buffered literals left over from previous calls.
     if (HaveBufferedLiterals()) {
@@ -820,7 +820,7 @@ inline bool RleBatchDecoder<T>::GetLiteralValues(int32_t 
num_literals_to_consume
 }
 
 template <typename T>
-inline bool RleBatchDecoder<T>::FillLiteralBuffer() {
+bool RleBatchDecoder<T>::FillLiteralBuffer() {
     int32_t num_to_buffer = std::min<int32_t>(LITERAL_BUFFER_LEN, 
literal_count_);
     num_buffered_literals_ = bit_reader_.UnpackBatch(bit_width_, 
num_to_buffer, literal_buffer_);
     // If we couldn't read the expected number, that means the input was 
truncated.
@@ -830,7 +830,7 @@ inline bool RleBatchDecoder<T>::FillLiteralBuffer() {
 }
 
 template <typename T>
-inline int32_t RleBatchDecoder<T>::GetBatch(T* values, int32_t batch_num) {
+int32_t RleBatchDecoder<T>::GetBatch(T* values, int32_t batch_num) {
     int32_t num_consumed = 0;
     while (num_consumed < batch_num) {
         // Add RLE encoded values by repeating the current value this number 
of times.
diff --git a/be/src/util/simd/bits.h b/be/src/util/simd/bits.h
index 4f4fe65414..03d876b971 100644
--- a/be/src/util/simd/bits.h
+++ b/be/src/util/simd/bits.h
@@ -101,7 +101,7 @@ inline size_t count_zero_num(const int8_t* __restrict data, 
const uint8_t* __res
 
 // TODO: compare with different SIMD implements
 template <class T>
-inline static size_t find_byte(const std::vector<T>& vec, size_t start, T 
byte) {
+static size_t find_byte(const std::vector<T>& vec, size_t start, T byte) {
     if (start >= vec.size()) {
         return start;
     }
@@ -113,7 +113,7 @@ inline static size_t find_byte(const std::vector<T>& vec, 
size_t start, T byte)
 }
 
 template <typename T>
-inline bool contain_byte(const T* __restrict data, const size_t length, const 
signed char byte) {
+bool contain_byte(const T* __restrict data, const size_t length, const signed 
char byte) {
     return nullptr != std::memchr(reinterpret_cast<const void*>(data), byte, 
length);
 }
 
diff --git a/be/src/util/string_parser.hpp b/be/src/util/string_parser.hpp
index 7136f6bb94..ff473bf401 100644
--- a/be/src/util/string_parser.hpp
+++ b/be/src/util/string_parser.hpp
@@ -227,7 +227,7 @@ private:
 }; // end of class StringParser
 
 template <typename T>
-inline T StringParser::string_to_int_internal(const char* s, int len, 
ParseResult* result) {
+T StringParser::string_to_int_internal(const char* s, int len, ParseResult* 
result) {
     if (UNLIKELY(len <= 0)) {
         *result = PARSE_FAILURE;
         return 0;
@@ -283,8 +283,7 @@ inline T StringParser::string_to_int_internal(const char* 
s, int len, ParseResul
 }
 
 template <typename T>
-inline T StringParser::string_to_unsigned_int_internal(const char* s, int len,
-                                                       ParseResult* result) {
+T StringParser::string_to_unsigned_int_internal(const char* s, int len, 
ParseResult* result) {
     if (UNLIKELY(len <= 0)) {
         *result = PARSE_FAILURE;
         return 0;
@@ -331,8 +330,7 @@ inline T 
StringParser::string_to_unsigned_int_internal(const char* s, int len,
 }
 
 template <typename T>
-inline T StringParser::string_to_int_internal(const char* s, int len, int base,
-                                              ParseResult* result) {
+T StringParser::string_to_int_internal(const char* s, int len, int base, 
ParseResult* result) {
     typedef typename std::make_unsigned<T>::type UnsignedT;
     UnsignedT val = 0;
     UnsignedT max_val = StringParser::numeric_limits<T>(false);
@@ -391,7 +389,7 @@ inline T StringParser::string_to_int_internal(const char* 
s, int len, int base,
 }
 
 template <typename T>
-inline T StringParser::string_to_int_no_overflow(const char* s, int len, 
ParseResult* result) {
+T StringParser::string_to_int_no_overflow(const char* s, int len, ParseResult* 
result) {
     T val = 0;
     if (UNLIKELY(len == 0)) {
         *result = PARSE_SUCCESS;
@@ -422,7 +420,7 @@ inline T StringParser::string_to_int_no_overflow(const 
char* s, int len, ParseRe
 }
 
 template <typename T>
-inline T StringParser::string_to_float_internal(const char* s, int len, 
ParseResult* result) {
+T StringParser::string_to_float_internal(const char* s, int len, ParseResult* 
result) {
     int i = 0;
     // skip leading spaces
     for (; i < len; ++i) {
@@ -548,8 +546,8 @@ inline int 
StringParser::StringParseTraits<__int128>::max_ascii_len() {
 }
 
 template <typename T>
-inline T StringParser::string_to_decimal(const char* s, int len, int 
type_precision, int type_scale,
-                                         ParseResult* result) {
+T StringParser::string_to_decimal(const char* s, int len, int type_precision, 
int type_scale,
+                                  ParseResult* result) {
     // Special cases:
     //   1) '' == Fail, an empty string fails to parse.
     //   2) '   #   ' == #, leading and trailing white space is ignored.
diff --git a/be/src/util/string_util.h b/be/src/util/string_util.h
index ac19448164..b0bfdbd7e9 100644
--- a/be/src/util/string_util.h
+++ b/be/src/util/string_util.h
@@ -79,7 +79,7 @@ inline std::vector<std::string> split(const std::string& s, 
const std::string& d
 }
 
 template <typename T>
-inline std::string join(const std::vector<T>& elems, const std::string& delim) 
{
+std::string join(const std::vector<T>& elems, const std::string& delim) {
     std::stringstream ss;
     for (size_t i = 0; i < elems.size(); ++i) {
         if (i != 0) {
@@ -131,14 +131,14 @@ using StringCaseUnorderedMap =
         std::unordered_map<std::string, T, StringCaseHasher, StringCaseEqual>;
 
 template <typename T>
-inline auto get_json_token(T& path_string) {
+auto get_json_token(T& path_string) {
     return boost::tokenizer<boost::escaped_list_separator<char>>(
             path_string, boost::escaped_list_separator<char>("\\", ".", "\""));
 }
 
 #ifdef USE_LIBCPP
 template <>
-inline auto get_json_token(std::string_view& path_string) = delete;
+auto get_json_token(std::string_view& path_string) = delete;
 #endif
 
 } // namespace doris
diff --git a/be/src/util/type_traits.h b/be/src/util/type_traits.h
index dafa20f2d0..9f41234d7e 100644
--- a/be/src/util/type_traits.h
+++ b/be/src/util/type_traits.h
@@ -29,12 +29,12 @@ template <template <class...> class Primary, class... Args>
 struct is_specialization_of<Primary<Args...>, Primary> : std::true_type {};
 
 template <class T, template <class...> class Primary>
-inline constexpr bool is_specialization_of_v = is_specialization_of<T, 
Primary>::value;
+constexpr bool is_specialization_of_v = is_specialization_of<T, 
Primary>::value;
 
 template <class T>
 using is_complex = is_specialization_of<T, std::complex>;
 
 template <class T>
-inline constexpr bool is_complex_v = is_specialization_of_v<T, std::complex>;
+constexpr bool is_complex_v = is_specialization_of_v<T, std::complex>;
 
 } // namespace doris
diff --git a/be/src/util/uid_util.h b/be/src/util/uid_util.h
index 7a310f3cf1..498a1db503 100644
--- a/be/src/util/uid_util.h
+++ b/be/src/util/uid_util.h
@@ -28,7 +28,7 @@ namespace doris {
 
 // convert int to a hex format string, buf must enough to hold converted hex 
string
 template <typename T>
-inline void to_hex(T val, char* buf) {
+void to_hex(T val, char* buf) {
     static const char* digits = "0123456789abcdef";
     for (int i = 0; i < 2 * sizeof(T); ++i) {
         buf[2 * sizeof(T) - 1 - i] = digits[val & 0x0F];
@@ -37,7 +37,7 @@ inline void to_hex(T val, char* buf) {
 }
 
 template <typename T>
-inline void from_hex(T* ret, const std::string& buf) {
+void from_hex(T* ret, const std::string& buf) {
     T val = 0;
     for (int i = 0; i < buf.length(); ++i) {
         int buf_val = 0;
diff --git a/be/src/vec/aggregate_functions/aggregate_function_bitmap.cpp 
b/be/src/vec/aggregate_functions/aggregate_function_bitmap.cpp
index e2dd7e309d..546dbc56fa 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_bitmap.cpp
+++ b/be/src/vec/aggregate_functions/aggregate_function_bitmap.cpp
@@ -23,7 +23,7 @@
 namespace doris::vectorized {
 
 template <bool nullable, template <bool, typename> class 
AggregateFunctionTemplate>
-static IAggregateFunction* create_with_int_data_type(const DataTypes& 
argument_type) {
+IAggregateFunction* create_with_int_data_type(const DataTypes& argument_type) {
     auto type = remove_nullable(argument_type[0]);
     WhichDataType which(type);
 #define DISPATCH(TYPE)                                                         
            \
diff --git a/be/src/vec/aggregate_functions/aggregate_function_min_max.cpp 
b/be/src/vec/aggregate_functions/aggregate_function_min_max.cpp
index 46606142b2..3f3b7dc727 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_min_max.cpp
+++ b/be/src/vec/aggregate_functions/aggregate_function_min_max.cpp
@@ -27,9 +27,9 @@
 namespace doris::vectorized {
 /// min, max, any
 template <template <typename> class AggregateFunctionTemplate, template 
<typename> class Data>
-static IAggregateFunction* create_aggregate_function_single_value(const 
String& name,
-                                                                  const 
DataTypes& argument_types,
-                                                                  const bool 
result_is_nullable) {
+IAggregateFunction* create_aggregate_function_single_value(const String& name,
+                                                           const DataTypes& 
argument_types,
+                                                           const bool 
result_is_nullable) {
     assert_unary(name, argument_types);
 
     IAggregateFunction* 
res(creator_with_numeric_type::create<AggregateFunctionTemplate, Data,
diff --git a/be/src/vec/aggregate_functions/aggregate_function_min_max_by.cpp 
b/be/src/vec/aggregate_functions/aggregate_function_min_max_by.cpp
index 2252da7721..1526975b9e 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_min_max_by.cpp
+++ b/be/src/vec/aggregate_functions/aggregate_function_min_max_by.cpp
@@ -28,8 +28,8 @@ namespace doris::vectorized {
 /// min_by, max_by
 template <template <typename> class AggregateFunctionTemplate,
           template <typename, typename> class Data, typename VT>
-static IAggregateFunction* create_aggregate_function_min_max_by_impl(
-        const DataTypes& argument_types, const bool result_is_nullable) {
+IAggregateFunction* create_aggregate_function_min_max_by_impl(const DataTypes& 
argument_types,
+                                                              const bool 
result_is_nullable) {
     WhichDataType which(remove_nullable(argument_types[1]));
 
 #define DISPATCH(TYPE)                                                         
   \
@@ -74,9 +74,9 @@ static IAggregateFunction* 
create_aggregate_function_min_max_by_impl(
 /// min_by, max_by
 template <template <typename> class AggregateFunctionTemplate,
           template <typename, typename> class Data>
-static IAggregateFunction* create_aggregate_function_min_max_by(const String& 
name,
-                                                                const 
DataTypes& argument_types,
-                                                                const bool 
result_is_nullable) {
+IAggregateFunction* create_aggregate_function_min_max_by(const String& name,
+                                                         const DataTypes& 
argument_types,
+                                                         const bool 
result_is_nullable) {
     assert_binary(name, argument_types);
 
     WhichDataType which(remove_nullable(argument_types[0]));
diff --git a/be/src/vec/aggregate_functions/aggregate_function_stddev.cpp 
b/be/src/vec/aggregate_functions/aggregate_function_stddev.cpp
index d549ad2ed0..9eca714d24 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_stddev.cpp
+++ b/be/src/vec/aggregate_functions/aggregate_function_stddev.cpp
@@ -26,10 +26,10 @@ namespace doris::vectorized {
 template <template <typename, bool> class AggregateFunctionTemplate,
           template <typename> class NameData, template <typename, typename> 
class Data,
           bool is_stddev, bool is_nullable = false>
-static IAggregateFunction* create_function_single_value(const String& name,
-                                                        const DataTypes& 
argument_types,
-                                                        const bool 
result_is_nullable,
-                                                        bool custom_nullable) {
+IAggregateFunction* create_function_single_value(const String& name,
+                                                 const DataTypes& 
argument_types,
+                                                 const bool result_is_nullable,
+                                                 bool custom_nullable) {
     IAggregateFunction* res = nullptr;
     WhichDataType which(remove_nullable(argument_types[0]));
 #define DISPATCH(TYPE)                                                         
 \
diff --git a/be/src/vec/aggregate_functions/aggregate_function_window.cpp 
b/be/src/vec/aggregate_functions/aggregate_function_window.cpp
index 97c8d18565..4ef03fb316 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_window.cpp
+++ b/be/src/vec/aggregate_functions/aggregate_function_window.cpp
@@ -59,8 +59,8 @@ AggregateFunctionPtr create_aggregate_function_ntile(const 
std::string& name,
 template <template <typename> class AggregateFunctionTemplate,
           template <typename ColVecType, bool, bool> class Data, template 
<typename> class Impl,
           bool result_is_nullable, bool arg_is_nullable>
-static IAggregateFunction* create_function_lead_lag_first_last(const String& 
name,
-                                                               const 
DataTypes& argument_types) {
+IAggregateFunction* create_function_lead_lag_first_last(const String& name,
+                                                        const DataTypes& 
argument_types) {
     auto type = remove_nullable(argument_types[0]);
     WhichDataType which(*type);
 
diff --git a/be/src/vec/aggregate_functions/factory_helpers.h 
b/be/src/vec/aggregate_functions/factory_helpers.h
index 76958d9bbf..0bbedce05a 100644
--- a/be/src/vec/aggregate_functions/factory_helpers.h
+++ b/be/src/vec/aggregate_functions/factory_helpers.h
@@ -37,7 +37,7 @@ inline void assert_binary(const std::string& name, const 
DataTypes& argument_typ
 }
 
 template <std::size_t maximal_arity>
-inline void assert_arity_at_most(const std::string& name, const DataTypes& 
argument_types) {
+void assert_arity_at_most(const std::string& name, const DataTypes& 
argument_types) {
     if (argument_types.size() <= maximal_arity) {
         return;
     }
diff --git a/be/src/vec/common/aggregation_common.h 
b/be/src/vec/common/aggregation_common.h
index ee3ef5ce5b..39beb8b25f 100644
--- a/be/src/vec/common/aggregation_common.h
+++ b/be/src/vec/common/aggregation_common.h
@@ -72,10 +72,9 @@ using KeysNullMap = std::array<UInt8, get_bitmap_size<T>()>;
 /// Pack into a binary blob of type T a set of fixed-size keys. Granted that 
all the keys fit into the
 /// binary blob, they are disposed in it consecutively.
 template <typename T, bool has_low_cardinality = false>
-static inline T ALWAYS_INLINE
-pack_fixed(size_t i, size_t keys_size, const ColumnRawPtrs& key_columns, const 
Sizes& key_sizes,
-           const ColumnRawPtrs* low_cardinality_positions [[maybe_unused]] = 
nullptr,
-           const Sizes* low_cardinality_sizes [[maybe_unused]] = nullptr) {
+T pack_fixed(size_t i, size_t keys_size, const ColumnRawPtrs& key_columns, 
const Sizes& key_sizes,
+             const ColumnRawPtrs* low_cardinality_positions [[maybe_unused]] = 
nullptr,
+             const Sizes* low_cardinality_sizes [[maybe_unused]] = nullptr) {
     union {
         T key;
         char bytes[sizeof(key)] = {};
@@ -149,9 +148,8 @@ pack_fixed(size_t i, size_t keys_size, const ColumnRawPtrs& 
key_columns, const S
 
 /// Similar as above but supports nullable values.
 template <typename T>
-static inline T ALWAYS_INLINE pack_fixed(size_t i, size_t keys_size,
-                                         const ColumnRawPtrs& key_columns, 
const Sizes& key_sizes,
-                                         const KeysNullMap<T>& bitmap) {
+T pack_fixed(size_t i, size_t keys_size, const ColumnRawPtrs& key_columns, 
const Sizes& key_sizes,
+             const KeysNullMap<T>& bitmap) {
     union {
         T key;
         char bytes[sizeof(key)] = {};
@@ -222,8 +220,7 @@ static inline T ALWAYS_INLINE pack_fixed(size_t i, size_t 
keys_size,
 }
 
 /// Hash a set of keys into a UInt128 value.
-static inline UInt128 ALWAYS_INLINE hash128(size_t i, size_t keys_size,
-                                            const ColumnRawPtrs& key_columns) {
+inline UInt128 hash128(size_t i, size_t keys_size, const ColumnRawPtrs& 
key_columns) {
     UInt128 key;
     SipHash hash;
 
@@ -235,8 +232,7 @@ static inline UInt128 ALWAYS_INLINE hash128(size_t i, 
size_t keys_size,
 }
 
 /// Copy keys to the pool. Then put into pool StringRefs to them and return 
the pointer to the first.
-static inline StringRef* ALWAYS_INLINE place_keys_in_pool(size_t keys_size, 
StringRefs& keys,
-                                                          Arena& pool) {
+inline StringRef* place_keys_in_pool(size_t keys_size, StringRefs& keys, 
Arena& pool) {
     for (size_t j = 0; j < keys_size; ++j) {
         char* place = pool.alloc(keys[j].size);
         memcpy_small_allow_read_write_overflow15(place, keys[j].data, 
keys[j].size);
@@ -252,8 +248,8 @@ static inline StringRef* ALWAYS_INLINE 
place_keys_in_pool(size_t keys_size, Stri
 
 /** Serialize keys into a continuous chunk of memory.
   */
-static inline StringRef ALWAYS_INLINE serialize_keys_to_pool_contiguous(
-        size_t i, size_t keys_size, const ColumnRawPtrs& key_columns, Arena& 
pool) {
+inline StringRef serialize_keys_to_pool_contiguous(size_t i, size_t keys_size,
+                                                   const ColumnRawPtrs& 
key_columns, Arena& pool) {
     const char* begin = nullptr;
 
     size_t sum_size = 0;
diff --git a/be/src/vec/common/bit_helpers.h b/be/src/vec/common/bit_helpers.h
index c2c480637a..640173f61d 100644
--- a/be/src/vec/common/bit_helpers.h
+++ b/be/src/vec/common/bit_helpers.h
@@ -49,7 +49,7 @@ inline size_t round_up_to_power_of_two_or_zero(size_t n) {
 }
 
 template <typename T>
-inline size_t get_leading_zero_bits(T x) {
+size_t get_leading_zero_bits(T x) {
     if (!x) return sizeof(x) * 8;
 
     if constexpr (sizeof(T) <= sizeof(unsigned int)) {
@@ -62,7 +62,7 @@ inline size_t get_leading_zero_bits(T x) {
 }
 
 template <typename T>
-inline size_t get_trailing_zero_bits(T x) {
+size_t get_trailing_zero_bits(T x) {
     if (!x) return sizeof(x) * 8;
 
     if constexpr (sizeof(T) <= sizeof(unsigned int)) {
@@ -78,7 +78,7 @@ inline size_t get_trailing_zero_bits(T x) {
  * mask_low_bits<UInt8>(3) => 00000111
  */
 template <typename T>
-inline T mask_low_bits(unsigned char bits) {
+T mask_low_bits(unsigned char bits) {
     if (bits == 0) {
         return 0;
     }
diff --git a/be/src/vec/common/hash_table/hash_table_key_holder.h 
b/be/src/vec/common/hash_table/hash_table_key_holder.h
index a422ad7eef..b3e317286e 100644
--- a/be/src/vec/common/hash_table/hash_table_key_holder.h
+++ b/be/src/vec/common/hash_table/hash_table_key_holder.h
@@ -69,7 +69,7 @@
   * After the call to key_holder_persist_key(), must return the persistent key.
   */
 template <typename Key>
-inline Key& ALWAYS_INLINE key_holder_get_key(Key&& key) {
+Key& key_holder_get_key(Key&& key) {
     return key;
 }
 
@@ -78,13 +78,13 @@ inline Key& ALWAYS_INLINE key_holder_get_key(Key&& key) {
   * after this call.
   */
 template <typename Key>
-inline void ALWAYS_INLINE key_holder_persist_key(Key&&) {}
+void key_holder_persist_key(Key&&) {}
 
 /**
   * Discard the key. Calling key_holder_get_key() is ill-defined after this.
   */
 template <typename Key>
-inline void ALWAYS_INLINE key_holder_discard_key(Key&&) {}
+void key_holder_discard_key(Key&&) {}
 
 namespace doris::vectorized {
 
diff --git a/be/src/vec/common/hex.h b/be/src/vec/common/hex.h
index 6d2d72bb42..b84aabad21 100644
--- a/be/src/vec/common/hex.h
+++ b/be/src/vec/common/hex.h
@@ -61,7 +61,7 @@ inline void write_bin_byte(UInt8 byte, void* out) {
 
 /// Produces hex representation of an unsigned int with leading zeros (for 
checksums)
 template <typename TUInt>
-inline void write_hex_uint_impl(TUInt uint_, char* out, const char* const 
table) {
+void write_hex_uint_impl(TUInt uint_, char* out, const char* const table) {
     union {
         TUInt value;
         UInt8 uint8[sizeof(TUInt)];
@@ -76,12 +76,12 @@ inline void write_hex_uint_impl(TUInt uint_, char* out, 
const char* const table)
 }
 
 template <typename TUInt>
-inline void write_hex_uint_uppercase(TUInt uint_, char* out) {
+void write_hex_uint_uppercase(TUInt uint_, char* out) {
     write_hex_uint_impl(uint_, out, hex_byte_to_char_uppercase_table);
 }
 
 template <typename TUInt>
-inline void write_hex_uint_lowercase(TUInt uint_, char* out) {
+void write_hex_uint_lowercase(TUInt uint_, char* out) {
     write_hex_uint_impl(uint_, out, hex_byte_to_char_lowercase_table);
 }
 
diff --git a/be/src/vec/common/memcmp_small.h b/be/src/vec/common/memcmp_small.h
index 3d43652a5b..4c04c7c532 100644
--- a/be/src/vec/common/memcmp_small.h
+++ b/be/src/vec/common/memcmp_small.h
@@ -26,7 +26,7 @@
 namespace detail {
 
 template <typename T>
-inline int cmp(T a, T b) {
+int cmp(T a, T b) {
     if (a < b) return -1;
     if (a > b) return 1;
     return 0;
@@ -53,8 +53,7 @@ inline int cmp(T a, T b) {
 /** Variant when memory regions may have different sizes.
   */
 template <typename Char>
-inline int memcmp_small_allow_overflow15(const Char* a, size_t a_size, const 
Char* b,
-                                         size_t b_size) {
+int memcmp_small_allow_overflow15(const Char* a, size_t a_size, const Char* b, 
size_t b_size) {
     size_t min_size = std::min(a_size, b_size);
 
     for (size_t offset = 0; offset < min_size; offset += 16) {
@@ -79,7 +78,7 @@ inline int memcmp_small_allow_overflow15(const Char* a, 
size_t a_size, const Cha
   * TODO Check if the compiler can optimize previous function when the caller 
pass identical sizes.
   */
 template <typename Char>
-inline int memcmp_small_allow_overflow15(const Char* a, const Char* b, size_t 
size) {
+int memcmp_small_allow_overflow15(const Char* a, const Char* b, size_t size) {
     for (size_t offset = 0; offset < size; offset += 16) {
         uint16_t mask = _mm_movemask_epi8(
                 _mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(a + offset)),
@@ -101,8 +100,7 @@ inline int memcmp_small_allow_overflow15(const Char* a, 
const Char* b, size_t si
 /** Compare memory regions for equality.
   */
 template <typename Char>
-inline bool memequal_small_allow_overflow15(const Char* a, size_t a_size, 
const Char* b,
-                                            size_t b_size) {
+bool memequal_small_allow_overflow15(const Char* a, size_t a_size, const Char* 
b, size_t b_size) {
     if (a_size != b_size) return false;
 
     for (size_t offset = 0; offset < a_size; offset += 16) {
@@ -123,7 +121,7 @@ inline bool memequal_small_allow_overflow15(const Char* a, 
size_t a_size, const
 /** Variant when the caller know in advance that the size is a multiple of 16.
   */
 template <typename Char>
-inline int memcmp_small_multiple_of16(const Char* a, const Char* b, size_t 
size) {
+int memcmp_small_multiple_of16(const Char* a, const Char* b, size_t size) {
     for (size_t offset = 0; offset < size; offset += 16) {
         uint16_t mask = _mm_movemask_epi8(
                 _mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(a + offset)),
@@ -142,7 +140,7 @@ inline int memcmp_small_multiple_of16(const Char* a, const 
Char* b, size_t size)
 /** Variant when the size is 16 exactly.
   */
 template <typename Char>
-inline int memcmp16(const Char* a, const Char* b) {
+int memcmp16(const Char* a, const Char* b) {
     uint16_t mask =
             
_mm_movemask_epi8(_mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast<const 
__m128i*>(a)),
                                              
_mm_loadu_si128(reinterpret_cast<const __m128i*>(b))));
@@ -188,8 +186,7 @@ inline bool memory_is_zero_small_allow_overflow15(const 
void* data, size_t size)
 #include <cstring>
 
 template <typename Char>
-inline int memcmp_small_allow_overflow15(const Char* a, size_t a_size, const 
Char* b,
-                                         size_t b_size) {
+int memcmp_small_allow_overflow15(const Char* a, size_t a_size, const Char* b, 
size_t b_size) {
     if (auto res = memcmp(a, b, std::min(a_size, b_size)))
         return res;
     else
@@ -197,23 +194,22 @@ inline int memcmp_small_allow_overflow15(const Char* a, 
size_t a_size, const Cha
 }
 
 template <typename Char>
-inline int memcmp_small_allow_overflow15(const Char* a, const Char* b, size_t 
size) {
+int memcmp_small_allow_overflow15(const Char* a, const Char* b, size_t size) {
     return memcmp(a, b, size);
 }
 
 template <typename Char>
-inline bool memequal_small_allow_overflow15(const Char* a, size_t a_size, 
const Char* b,
-                                            size_t b_size) {
+bool memequal_small_allow_overflow15(const Char* a, size_t a_size, const Char* 
b, size_t b_size) {
     return a_size == b_size && 0 == memcmp(a, b, a_size);
 }
 
 template <typename Char>
-inline int memcmp_small_multiple_of16(const Char* a, const Char* b, size_t 
size) {
+int memcmp_small_multiple_of16(const Char* a, const Char* b, size_t size) {
     return memcmp(a, b, size);
 }
 
 template <typename Char>
-inline int memcmp16(const Char* a, const Char* b) {
+int memcmp16(const Char* a, const Char* b) {
     return memcmp(a, b, 16);
 }
 
diff --git a/be/src/vec/common/nan_utils.h b/be/src/vec/common/nan_utils.h
index 9a4e5989e2..8cdf8d78a9 100644
--- a/be/src/vec/common/nan_utils.h
+++ b/be/src/vec/common/nan_utils.h
@@ -26,22 +26,22 @@
 
 /// To be sure, that this function is zero-cost for non-floating point types.
 template <typename T>
-inline std::enable_if_t<std::is_floating_point_v<T>, bool> is_nan(T x) {
+std::enable_if_t<std::is_floating_point_v<T>, bool> is_nan(T x) {
     return std::isnan(x);
 }
 
 template <typename T>
-inline std::enable_if_t<!std::is_floating_point_v<T>, bool> is_nan(T) {
+std::enable_if_t<!std::is_floating_point_v<T>, bool> is_nan(T) {
     return false;
 }
 
 template <typename T>
-inline std::enable_if_t<std::is_floating_point_v<T>, bool> is_finite(T x) {
+std::enable_if_t<std::is_floating_point_v<T>, bool> is_finite(T x) {
     return std::isfinite(x);
 }
 
 template <typename T>
-inline std::enable_if_t<!std::is_floating_point_v<T>, bool> is_finite(T) {
+std::enable_if_t<!std::is_floating_point_v<T>, bool> is_finite(T) {
     return true;
 }
 
diff --git a/be/src/vec/common/unaligned.h b/be/src/vec/common/unaligned.h
index 11b18535ce..d56eca59b2 100644
--- a/be/src/vec/common/unaligned.h
+++ b/be/src/vec/common/unaligned.h
@@ -25,7 +25,7 @@
 #include <type_traits>
 
 template <typename T>
-inline T unaligned_load(const void* address) {
+T unaligned_load(const void* address) {
     T res {};
     memcpy(&res, address, sizeof(res));
     return res;
@@ -36,7 +36,7 @@ inline T unaligned_load(const void* address) {
 /// To prevent this, make the caller specify the stored type explicitly.
 /// To disable deduction of T, wrap the argument type with std::enable_if.
 template <typename T>
-inline void unaligned_store(void* address, const typename std::enable_if<true, 
T>::type& src) {
+void unaligned_store(void* address, const typename std::enable_if<true, 
T>::type& src) {
     static_assert(std::is_trivially_copyable_v<T>);
     memcpy(address, &src, sizeof(src));
 }
diff --git a/be/src/vec/common/volnitsky.h b/be/src/vec/common/volnitsky.h
index 08413a45f9..91daeffc83 100644
--- a/be/src/vec/common/volnitsky.h
+++ b/be/src/vec/common/volnitsky.h
@@ -82,8 +82,7 @@ static inline Ngram toNGram(const UInt8* const pos) {
 }
 
 template <typename Callback>
-static inline bool putNGramASCIICaseInsensitive(const UInt8* pos, int offset,
-                                                Callback&& putNGramBase) {
+bool putNGramASCIICaseInsensitive(const UInt8* pos, int offset, Callback&& 
putNGramBase) {
     struct Chars {
         UInt8 c0;
         UInt8 c1;
@@ -126,8 +125,8 @@ static inline bool putNGramASCIICaseInsensitive(const 
UInt8* pos, int offset,
 }
 
 template <bool CaseSensitive, bool ASCII, typename Callback>
-static inline bool putNGram(const UInt8* pos, int offset, [[maybe_unused]] 
const UInt8* begin,
-                            size_t size, Callback&& putNGramBase) {
+bool putNGram(const UInt8* pos, int offset, [[maybe_unused]] const UInt8* 
begin, size_t size,
+              Callback&& putNGramBase) {
     if constexpr (CaseSensitive) {
         putNGramBase(toNGram(pos), offset);
         return true;
diff --git a/be/src/vec/core/call_on_type_index.h 
b/be/src/vec/core/call_on_type_index.h
index ff4bb9f693..88e8fca5bf 100644
--- a/be/src/vec/core/call_on_type_index.h
+++ b/be/src/vec/core/call_on_type_index.h
@@ -92,7 +92,7 @@ bool call_on_basic_type(TypeIndex number, F&& f) {
 
 /// Unroll template using TypeIndex
 template <bool _int, bool _float, bool _decimal, bool _datetime, typename F>
-inline bool call_on_basic_types(TypeIndex type_num1, TypeIndex type_num2, F&& 
f) {
+bool call_on_basic_types(TypeIndex type_num1, TypeIndex type_num2, F&& f) {
     if constexpr (_int) {
         switch (type_num1) {
         case TypeIndex::UInt8:
diff --git a/be/src/vec/core/field.cpp b/be/src/vec/core/field.cpp
index fb41677193..ca0e783064 100644
--- a/be/src/vec/core/field.cpp
+++ b/be/src/vec/core/field.cpp
@@ -134,19 +134,19 @@ Decimal128I 
DecimalField<Decimal128I>::get_scale_multiplier() const {
 }
 
 template <typename T>
-static bool dec_equal(T x, T y, UInt32 x_scale, UInt32 y_scale) {
+bool dec_equal(T x, T y, UInt32 x_scale, UInt32 y_scale) {
     using Comparator = DecimalComparison<T, T, EqualsOp>;
     return Comparator::compare(x, y, x_scale, y_scale);
 }
 
 template <typename T>
-static bool dec_less(T x, T y, UInt32 x_scale, UInt32 y_scale) {
+bool dec_less(T x, T y, UInt32 x_scale, UInt32 y_scale) {
     using Comparator = DecimalComparison<T, T, LessOp>;
     return Comparator::compare(x, y, x_scale, y_scale);
 }
 
 template <typename T>
-static bool dec_less_or_equal(T x, T y, UInt32 x_scale, UInt32 y_scale) {
+bool dec_less_or_equal(T x, T y, UInt32 x_scale, UInt32 y_scale) {
     using Comparator = DecimalComparison<T, T, LessOrEqualsOp>;
     return Comparator::compare(x, y, x_scale, y_scale);
 }
diff --git a/be/src/vec/data_types/data_type.h 
b/be/src/vec/data_types/data_type.h
index 76dfd3bd5c..e646d4d736 100644
--- a/be/src/vec/data_types/data_type.h
+++ b/be/src/vec/data_types/data_type.h
@@ -368,58 +368,58 @@ inline bool is_nothing(const DataTypePtr& data_type) {
 }
 
 template <typename T>
-inline bool is_uint8(const T& data_type) {
+bool is_uint8(const T& data_type) {
     return WhichDataType(data_type).is_uint8();
 }
 
 template <typename T>
-inline bool is_unsigned_integer(const T& data_type) {
+bool is_unsigned_integer(const T& data_type) {
     return WhichDataType(data_type).is_uint();
 }
 
 template <typename T>
-inline bool is_integer(const T& data_type) {
+bool is_integer(const T& data_type) {
     WhichDataType which(data_type);
     return which.is_int() || which.is_uint();
 }
 
 template <typename T>
-inline bool is_float(const T& data_type) {
+bool is_float(const T& data_type) {
     WhichDataType which(data_type);
     return which.is_float();
 }
 
 template <typename T>
-inline bool is_native_number(const T& data_type) {
+bool is_native_number(const T& data_type) {
     WhichDataType which(data_type);
     return which.is_native_int() || which.is_native_uint() || which.is_float();
 }
 
 template <typename T>
-inline bool is_number(const T& data_type) {
+bool is_number(const T& data_type) {
     WhichDataType which(data_type);
     return which.is_int() || which.is_uint() || which.is_float() || 
which.is_decimal();
 }
 
 template <typename T>
-inline bool is_columned_as_number(const T& data_type) {
+bool is_columned_as_number(const T& data_type) {
     WhichDataType which(data_type);
     return which.is_int() || which.is_uint() || which.is_float() || 
which.is_date_or_datetime() ||
            which.is_uuid() || which.is_date_v2_or_datetime_v2();
 }
 
 template <typename T>
-inline bool is_string(const T& data_type) {
+bool is_string(const T& data_type) {
     return WhichDataType(data_type).is_string();
 }
 
 template <typename T>
-inline bool is_fixed_string(const T& data_type) {
+bool is_fixed_string(const T& data_type) {
     return WhichDataType(data_type).is_fixed_string();
 }
 
 template <typename T>
-inline bool is_string_or_fixed_string(const T& data_type) {
+bool is_string_or_fixed_string(const T& data_type) {
     return WhichDataType(data_type).is_string_or_fixed_string();
 }
 
diff --git a/be/src/vec/data_types/data_type_decimal.h 
b/be/src/vec/data_types/data_type_decimal.h
index 5641b9b255..c330d0f386 100644
--- a/be/src/vec/data_types/data_type_decimal.h
+++ b/be/src/vec/data_types/data_type_decimal.h
@@ -30,11 +30,11 @@
 
 namespace doris::vectorized {
 
-static constexpr size_t min_decimal_precision() {
+constexpr size_t min_decimal_precision() {
     return 1;
 }
 template <typename T>
-static constexpr size_t max_decimal_precision() {
+constexpr size_t max_decimal_precision() {
     return 0;
 }
 template <>
@@ -55,7 +55,7 @@ constexpr size_t max_decimal_precision<Decimal128I>() {
 }
 
 template <typename T>
-static constexpr typename T::NativeType max_decimal_value() {
+constexpr typename T::NativeType max_decimal_value() {
     return 0;
 }
 template <>
@@ -251,7 +251,7 @@ DataTypePtr decimal_result_type(const DataTypeDecimal<T>& 
tx, const DataTypeDeci
 }
 
 template <typename T>
-inline const DataTypeDecimal<T>* check_decimal(const IDataType& data_type) {
+const DataTypeDecimal<T>* check_decimal(const IDataType& data_type) {
     return typeid_cast<const DataTypeDecimal<T>*>(&data_type);
 }
 
@@ -292,8 +292,8 @@ constexpr bool IsDataTypeDecimalOrNumber =
         IsDataTypeDecimal<DataType> || IsDataTypeNumber<DataType>;
 
 template <typename FromDataType, typename ToDataType>
-inline std::enable_if_t<IsDataTypeDecimal<FromDataType> && 
IsDataTypeDecimal<ToDataType>,
-                        typename ToDataType::FieldType>
+std::enable_if_t<IsDataTypeDecimal<FromDataType> && 
IsDataTypeDecimal<ToDataType>,
+                 typename ToDataType::FieldType>
 convert_decimals(const typename FromDataType::FieldType& value, UInt32 
scale_from, UInt32 scale_to,
                  UInt8* overflow_flag = nullptr) {
     using FromFieldType = typename FromDataType::FieldType;
@@ -347,8 +347,8 @@ convert_decimals(const typename FromDataType::FieldType& 
value, UInt32 scale_fro
 }
 
 template <typename FromDataType, typename ToDataType>
-inline std::enable_if_t<IsDataTypeDecimal<FromDataType> && 
IsDataTypeNumber<ToDataType>,
-                        typename ToDataType::FieldType>
+std::enable_if_t<IsDataTypeDecimal<FromDataType> && 
IsDataTypeNumber<ToDataType>,
+                 typename ToDataType::FieldType>
 convert_from_decimal(const typename FromDataType::FieldType& value, UInt32 
scale) {
     using FromFieldType = typename FromDataType::FieldType;
     using ToFieldType = typename ToDataType::FieldType;
@@ -391,8 +391,8 @@ convert_from_decimal(const typename 
FromDataType::FieldType& value, UInt32 scale
 }
 
 template <typename FromDataType, typename ToDataType>
-inline std::enable_if_t<IsDataTypeNumber<FromDataType> && 
IsDataTypeDecimal<ToDataType>,
-                        typename ToDataType::FieldType>
+std::enable_if_t<IsDataTypeNumber<FromDataType> && 
IsDataTypeDecimal<ToDataType>,
+                 typename ToDataType::FieldType>
 convert_to_decimal(const typename FromDataType::FieldType& value, UInt32 scale,
                    UInt8* overflow_flag) {
     using FromFieldType = typename FromDataType::FieldType;
diff --git a/be/src/vec/data_types/data_type_struct.cpp 
b/be/src/vec/data_types/data_type_struct.cpp
index 81bf774c12..80531af7ad 100644
--- a/be/src/vec/data_types/data_type_struct.cpp
+++ b/be/src/vec/data_types/data_type_struct.cpp
@@ -303,7 +303,7 @@ static inline IColumn& extract_element_column(IColumn& 
column, size_t idx) {
 }
 
 template <typename F>
-static void add_element_safe(const DataTypes& elems, IColumn& column, F&& 
impl) {
+void add_element_safe(const DataTypes& elems, IColumn& column, F&& impl) {
     /// We use the assumption that tuples of zero size do not exist.
     size_t old_size = column.size();
 
diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp 
b/be/src/vec/exec/format/orc/vorc_reader.cpp
index 6df70e0f16..df1d4ee1e3 100644
--- a/be/src/vec/exec/format/orc/vorc_reader.cpp
+++ b/be/src/vec/exec/format/orc/vorc_reader.cpp
@@ -277,9 +277,8 @@ static std::unordered_map<orc::TypeKind, 
orc::PredicateDataType> TYPEKIND_TO_PRE
         {orc::TypeKind::BOOLEAN, orc::PredicateDataType::BOOLEAN}};
 
 template <typename CppType>
-static std::tuple<bool, orc::Literal> convert_to_orc_literal(const orc::Type* 
type,
-                                                             const void* 
value, int precision,
-                                                             int scale) {
+std::tuple<bool, orc::Literal> convert_to_orc_literal(const orc::Type* type, 
const void* value,
+                                                      int precision, int 
scale) {
     try {
         switch (type->getKind()) {
         case orc::TypeKind::BOOLEAN:
@@ -375,7 +374,7 @@ static std::tuple<bool, orc::Literal> 
convert_to_orc_literal(const orc::Type* ty
 }
 
 template <PrimitiveType primitive_type>
-static std::vector<OrcPredicate> value_range_to_predicate(
+std::vector<OrcPredicate> value_range_to_predicate(
         const ColumnValueRange<primitive_type>& col_val_range, const 
orc::Type* type) {
     using CppType = typename PrimitiveTypeTraits<primitive_type>::CppType;
     std::vector<OrcPredicate> predicates;
diff --git a/be/src/vec/functions/function_encryption.cpp 
b/be/src/vec/functions/function_encryption.cpp
index 339850f61d..e0d9edfce1 100644
--- a/be/src/vec/functions/function_encryption.cpp
+++ b/be/src/vec/functions/function_encryption.cpp
@@ -116,11 +116,11 @@ public:
 };
 
 template <typename Impl, bool is_encrypt>
-static void exectue_result(std::vector<const ColumnString::Offsets*>& 
offsets_list,
-                           std::vector<const ColumnString::Chars*>& 
chars_list, size_t i,
-                           EncryptionMode& encryption_mode, const char* 
iv_raw, int iv_length,
-                           ColumnString::Chars& result_data, 
ColumnString::Offsets& result_offset,
-                           NullMap& null_map) {
+void exectue_result(std::vector<const ColumnString::Offsets*>& offsets_list,
+                    std::vector<const ColumnString::Chars*>& chars_list, 
size_t i,
+                    EncryptionMode& encryption_mode, const char* iv_raw, int 
iv_length,
+                    ColumnString::Chars& result_data, ColumnString::Offsets& 
result_offset,
+                    NullMap& null_map) {
     int src_size = (*offsets_list[0])[i] - (*offsets_list[0])[i - 1];
     const auto src_raw =
             reinterpret_cast<const 
char*>(&(*chars_list[0])[(*offsets_list[0])[i - 1]]);
diff --git a/be/src/vec/functions/function_helpers.h 
b/be/src/vec/functions/function_helpers.h
index 474ac435bf..85b4fcea48 100644
--- a/be/src/vec/functions/function_helpers.h
+++ b/be/src/vec/functions/function_helpers.h
@@ -75,12 +75,12 @@ const ColumnConst* 
check_and_get_column_const_string_or_fixedstring(const IColum
 
 /// Transform anything to Field.
 template <typename T>
-inline std::enable_if_t<!IsDecimalNumber<T>, Field> to_field(const T& x) {
+std::enable_if_t<!IsDecimalNumber<T>, Field> to_field(const T& x) {
     return Field(NearestFieldType<T>(x));
 }
 
 template <typename T>
-inline std::enable_if_t<IsDecimalNumber<T>, Field> to_field(const T& x, UInt32 
scale) {
+std::enable_if_t<IsDecimalNumber<T>, Field> to_field(const T& x, UInt32 scale) 
{
     return Field(NearestFieldType<T>(x, scale));
 }
 
diff --git a/be/src/vec/functions/function_string.h 
b/be/src/vec/functions/function_string.h
index fcd2b9ea41..2a5b698ef7 100644
--- a/be/src/vec/functions/function_string.h
+++ b/be/src/vec/functions/function_string.h
@@ -2020,8 +2020,8 @@ public:
 namespace MoneyFormat {
 
 template <typename T, size_t N>
-static StringRef do_money_format(FunctionContext* context, const T int_value,
-                                 const int32_t frac_value = 0) {
+StringRef do_money_format(FunctionContext* context, const T int_value,
+                          const int32_t frac_value = 0) {
     char local[N];
     char* p = SimpleItoaWithCommas(int_value, local, sizeof(local));
     int32_t string_val_len = local + sizeof(local) - p + 3;
diff --git a/be/src/vec/functions/functions_logical.cpp 
b/be/src/vec/functions/functions_logical.cpp
index c810c82b8a..f5a1f0af09 100644
--- a/be/src/vec/functions/functions_logical.cpp
+++ b/be/src/vec/functions/functions_logical.cpp
@@ -40,7 +40,7 @@ namespace {
 using namespace FunctionsLogicalDetail;
 
 template <class Op>
-static void vector_const(const IColumn* left, const ColumnConst* right, 
IColumn* res, size_t rows) {
+void vector_const(const IColumn* left, const ColumnConst* right, IColumn* res, 
size_t rows) {
     const auto* __restrict l_datas = assert_cast<const 
ColumnUInt8*>(left)->get_data().data();
     auto r_data = (uint8)right->get_uint(0);
     auto* __restrict res_datas = 
assert_cast<ColumnUInt8*>(res)->get_data().data();
@@ -51,7 +51,7 @@ static void vector_const(const IColumn* left, const 
ColumnConst* right, IColumn*
 }
 
 template <class Op>
-static void vector_vector(const IColumn* left, const IColumn* right, IColumn* 
res, size_t rows) {
+void vector_vector(const IColumn* left, const IColumn* right, IColumn* res, 
size_t rows) {
     const auto* __restrict l_datas = assert_cast<const 
ColumnUInt8*>(left)->get_data().data();
     const auto* __restrict r_datas = assert_cast<const 
ColumnUInt8*>(right)->get_data().data();
     auto* __restrict res_datas = 
assert_cast<ColumnUInt8*>(res)->get_data().data();
@@ -71,8 +71,8 @@ std::pair<const IColumn*, ColumnPtr> 
get_nested_and_null_column(const IColumn* c
 }
 
 template <class Op>
-static void vector_const_null(const IColumn* left, const ColumnConst* right, 
IColumn* res,
-                              IColumn* nulls, size_t rows) {
+void vector_const_null(const IColumn* left, const ColumnConst* right, IColumn* 
res, IColumn* nulls,
+                       size_t rows) {
     auto [data_column, null_column_ptr] = get_nested_and_null_column(left);
     const auto* __restrict l_datas =
             assert_cast<const ColumnUInt8*>(data_column)->get_data().data();
@@ -99,8 +99,8 @@ static void vector_const_null(const IColumn* left, const 
ColumnConst* right, ICo
 }
 
 template <class Op>
-static void vector_vector_null(const IColumn* left, const IColumn* right, 
IColumn* res,
-                               IColumn* nulls, size_t rows) {
+void vector_vector_null(const IColumn* left, const IColumn* right, IColumn* 
res, IColumn* nulls,
+                        size_t rows) {
     auto [l_datas_ptr, l_nulls_ptr] = get_nested_and_null_column(left);
     auto [r_datas_ptr, r_nulls_ptr] = get_nested_and_null_column(right);
 
@@ -123,8 +123,8 @@ static void vector_vector_null(const IColumn* left, const 
IColumn* right, IColum
 }
 
 template <class Op>
-static void basic_execute_impl(ColumnRawPtrs arguments, ColumnWithTypeAndName& 
result_info,
-                               size_t input_rows_count) {
+void basic_execute_impl(ColumnRawPtrs arguments, ColumnWithTypeAndName& 
result_info,
+                        size_t input_rows_count) {
     auto col_res = ColumnUInt8::create(input_rows_count);
     if (auto l = check_and_get_column<ColumnConst>(arguments[0])) {
         vector_const<Op>(arguments[1], l, col_res, input_rows_count);
@@ -137,8 +137,8 @@ static void basic_execute_impl(ColumnRawPtrs arguments, 
ColumnWithTypeAndName& r
 }
 
 template <class Op>
-static void null_execute_impl(ColumnRawPtrs arguments, ColumnWithTypeAndName& 
result_info,
-                              size_t input_rows_count) {
+void null_execute_impl(ColumnRawPtrs arguments, ColumnWithTypeAndName& 
result_info,
+                       size_t input_rows_count) {
     auto col_nulls = ColumnUInt8::create(input_rows_count);
     auto col_res = ColumnUInt8::create(input_rows_count);
     if (auto l = check_and_get_column<ColumnConst>(arguments[0])) {
diff --git a/be/src/vec/functions/functions_logical.h 
b/be/src/vec/functions/functions_logical.h
index 9e1f8368b3..93e4f47599 100644
--- a/be/src/vec/functions/functions_logical.h
+++ b/be/src/vec/functions/functions_logical.h
@@ -46,12 +46,12 @@ static constexpr UInt8 True = -1;
 static constexpr UInt8 Null = 1;
 
 template <typename T>
-inline ResultType make_value(T value) {
+ResultType make_value(T value) {
     return value != 0 ? Ternary::True : Ternary::False;
 }
 
 template <typename T>
-inline ResultType make_value(T value, bool is_null) {
+ResultType make_value(T value, bool is_null) {
     if (is_null) return Ternary::Null;
     return make_value<T>(value);
 }
diff --git a/be/src/vec/functions/regexps.h b/be/src/vec/functions/regexps.h
index ffa9d88173..378dd3ec68 100644
--- a/be/src/vec/functions/regexps.h
+++ b/be/src/vec/functions/regexps.h
@@ -89,8 +89,8 @@ private:
 using DeferredConstructedRegexpsPtr = 
std::shared_ptr<DeferredConstructedRegexps>;
 
 template <bool save_indices, bool WithEditDistance>
-inline Regexps constructRegexps(const std::vector<String>& str_patterns,
-                                [[maybe_unused]] std::optional<UInt32> 
edit_distance) {
+Regexps constructRegexps(const std::vector<String>& str_patterns,
+                         [[maybe_unused]] std::optional<UInt32> edit_distance) 
{
     /// Common pointers
     std::vector<const char*> patterns;
     std::vector<unsigned int> flags;
@@ -205,8 +205,8 @@ struct GlobalCacheTable {
 /// If WithEditDistance is False, edit_distance must be nullopt. Also, we use 
templates here because each instantiation of function template
 /// has its own copy of local static variables which must not be the same for 
different hyperscan compilations.
 template <bool save_indices, bool WithEditDistance>
-inline DeferredConstructedRegexpsPtr getOrSet(const std::vector<StringRef>& 
patterns,
-                                              std::optional<UInt32> 
edit_distance) {
+DeferredConstructedRegexpsPtr getOrSet(const std::vector<StringRef>& patterns,
+                                       std::optional<UInt32> edit_distance) {
     static GlobalCacheTable
             pool; /// Different variables for different pattern parameters, 
thread-safe in C++11
 
diff --git a/be/src/vec/io/io_helper.h b/be/src/vec/io/io_helper.h
index 457ae26d50..59512a9e1f 100644
--- a/be/src/vec/io/io_helper.h
+++ b/be/src/vec/io/io_helper.h
@@ -94,17 +94,17 @@ void write_text(Decimal<T> value, UInt32 scale, 
std::ostream& ostr) {
 
 /// Write POD-type in native format. It's recommended to use only with packed 
(dense) data types.
 template <typename Type>
-inline void write_pod_binary(const Type& x, BufferWritable& buf) {
+void write_pod_binary(const Type& x, BufferWritable& buf) {
     buf.write(reinterpret_cast<const char*>(&x), sizeof(x));
 }
 
 template <typename Type>
-inline void write_int_binary(const Type& x, BufferWritable& buf) {
+void write_int_binary(const Type& x, BufferWritable& buf) {
     write_pod_binary(x, buf);
 }
 
 template <typename Type>
-inline void write_float_binary(const Type& x, BufferWritable& buf) {
+void write_float_binary(const Type& x, BufferWritable& buf) {
     write_pod_binary(x, buf);
 }
 
@@ -143,23 +143,23 @@ inline void write_binary(const StringRef& x, 
BufferWritable& buf) {
 }
 
 template <typename Type>
-inline void write_binary(const Type& x, BufferWritable& buf) {
+void write_binary(const Type& x, BufferWritable& buf) {
     write_pod_binary(x, buf);
 }
 
 /// Read POD-type in native format
 template <typename Type>
-inline void read_pod_binary(Type& x, BufferReadable& buf) {
+void read_pod_binary(Type& x, BufferReadable& buf) {
     buf.read(reinterpret_cast<char*>(&x), sizeof(x));
 }
 
 template <typename Type>
-inline void read_int_binary(Type& x, BufferReadable& buf) {
+void read_int_binary(Type& x, BufferReadable& buf) {
     read_pod_binary(x, buf);
 }
 
 template <typename Type>
-inline void read_float_binary(Type& x, BufferReadable& buf) {
+void read_float_binary(Type& x, BufferReadable& buf) {
     read_pod_binary(x, buf);
 }
 
@@ -227,7 +227,7 @@ inline void read_binary(StringRef& x, BufferReadable& buf) {
 }
 
 template <typename Type>
-inline void read_binary(Type& x, BufferReadable& buf) {
+void read_binary(Type& x, BufferReadable& buf) {
     read_pod_binary(x, buf);
 }
 
@@ -360,7 +360,7 @@ bool try_read_int_text(T& x, ReadBuffer& buf) {
 }
 
 template <typename T>
-static inline const char* try_read_first_int_text(T& x, const char* pos, const 
char* end) {
+const char* try_read_first_int_text(T& x, const char* pos, const char* end) {
     const int len = end - pos;
     int i = 0;
     while (i < len) {
diff --git a/be/src/vec/io/var_int.h b/be/src/vec/io/var_int.h
index af979194e8..eda4b6b387 100644
--- a/be/src/vec/io/var_int.h
+++ b/be/src/vec/io/var_int.h
@@ -39,7 +39,7 @@ size_t get_length_of_var_int(Int64 x);
 
 /** Write Int64 in variable length format (base128) */
 template <typename OUT>
-inline void write_var_int(Int64 x, OUT& ostr) {
+void write_var_int(Int64 x, OUT& ostr) {
     write_var_uint(static_cast<UInt64>((x << 1) ^ (x >> 63)), ostr);
 }
 
@@ -49,7 +49,7 @@ inline char* write_var_int(Int64 x, char* ostr) {
 
 /** Read Int64, written in variable length format (base128) */
 template <typename IN>
-inline void read_var_int(Int64& x, IN& istr) {
+void read_var_int(Int64& x, IN& istr) {
     read_var_uint(*reinterpret_cast<UInt64*>(&x), istr);
     x = (static_cast<UInt64>(x) >> 1) ^ -(x & 1);
 }
diff --git a/be/src/vec/utils/arrow_column_to_doris_column.cpp 
b/be/src/vec/utils/arrow_column_to_doris_column.cpp
index b808daae7a..35d5d4956a 100644
--- a/be/src/vec/utils/arrow_column_to_doris_column.cpp
+++ b/be/src/vec/utils/arrow_column_to_doris_column.cpp
@@ -140,8 +140,8 @@ static Status convert_column_with_fixed_size_data(const 
arrow::Array* array, siz
 
 /// Inserts numeric data right into internal column data to reduce an overhead
 template <typename NumericType, typename VectorType = 
ColumnVector<NumericType>>
-static Status convert_column_with_numeric_data(const arrow::Array* array, 
size_t array_idx,
-                                               MutableColumnPtr& data_column, 
size_t num_elements) {
+Status convert_column_with_numeric_data(const arrow::Array* array, size_t 
array_idx,
+                                        MutableColumnPtr& data_column, size_t 
num_elements) {
     auto& column_data = static_cast<VectorType&>(*data_column).get_data();
     /// buffers[0] is a null bitmap and buffers[1] are actual values
     std::shared_ptr<arrow::Buffer> buffer = array->data()->buffers[1];
@@ -181,9 +181,9 @@ static int64_t time_unit_divisor(arrow::TimeUnit::type 
unit) {
 }
 
 template <typename ArrowType>
-static Status convert_column_with_timestamp_data(const arrow::Array* array, 
size_t array_idx,
-                                                 MutableColumnPtr& 
data_column, size_t num_elements,
-                                                 const cctz::time_zone& ctz) {
+Status convert_column_with_timestamp_data(const arrow::Array* array, size_t 
array_idx,
+                                          MutableColumnPtr& data_column, 
size_t num_elements,
+                                          const cctz::time_zone& ctz) {
     auto& column_data = 
static_cast<ColumnVector<Int64>&>(*data_column).get_data();
     auto concrete_array = down_cast<const ArrowType*>(array);
     int64_t divisor = 1;
@@ -213,9 +213,9 @@ static Status convert_column_with_timestamp_data(const 
arrow::Array* array, size
 }
 
 template <typename ArrowType>
-static Status convert_column_with_date_v2_data(const arrow::Array* array, 
size_t array_idx,
-                                               MutableColumnPtr& data_column, 
size_t num_elements,
-                                               const cctz::time_zone& ctz) {
+Status convert_column_with_date_v2_data(const arrow::Array* array, size_t 
array_idx,
+                                        MutableColumnPtr& data_column, size_t 
num_elements,
+                                        const cctz::time_zone& ctz) {
     auto& column_data = 
static_cast<ColumnVector<UInt32>&>(*data_column).get_data();
     auto concrete_array = down_cast<const ArrowType*>(array);
     int64_t divisor = 1;
@@ -242,10 +242,9 @@ static Status convert_column_with_date_v2_data(const 
arrow::Array* array, size_t
 }
 
 template <typename ArrowType>
-static Status convert_column_with_datetime_v2_data(const arrow::Array* array, 
size_t array_idx,
-                                                   MutableColumnPtr& 
data_column,
-                                                   size_t num_elements,
-                                                   const cctz::time_zone& ctz) 
{
+Status convert_column_with_datetime_v2_data(const arrow::Array* array, size_t 
array_idx,
+                                            MutableColumnPtr& data_column, 
size_t num_elements,
+                                            const cctz::time_zone& ctz) {
     auto& column_data = 
static_cast<ColumnVector<UInt64>&>(*data_column).get_data();
     auto concrete_array = down_cast<const ArrowType*>(array);
     int64_t divisor = 1;
diff --git a/be/src/vec/utils/histogram_helpers.hpp 
b/be/src/vec/utils/histogram_helpers.hpp
index 9a6ca5a444..4cba13ed97 100644
--- a/be/src/vec/utils/histogram_helpers.hpp
+++ b/be/src/vec/utils/histogram_helpers.hpp
@@ -53,8 +53,8 @@ public:
  * @return true if the values can be assigned to the buckets, false otherwise.
  */
 template <typename T>
-static bool can_assign_into_buckets(const std::map<T, size_t>& value_map,
-                                    const size_t max_bucket_size, const size_t 
num_buckets) {
+bool can_assign_into_buckets(const std::map<T, size_t>& value_map, const 
size_t max_bucket_size,
+                             const size_t num_buckets) {
     if (value_map.empty()) {
         return false;
     };
@@ -91,8 +91,7 @@ static bool can_assign_into_buckets(const std::map<T, 
size_t>& value_map,
  * @return the maximum number of values that can fit into each bucket
  */
 template <typename T>
-static size_t calculate_bucket_max_values(const std::map<T, size_t>& value_map,
-                                          const size_t num_buckets) {
+size_t calculate_bucket_max_values(const std::map<T, size_t>& value_map, const 
size_t num_buckets) {
     // Ensure that the value map is not empty
     assert(!value_map.empty());
 
@@ -172,8 +171,8 @@ static size_t calculate_bucket_max_values(const std::map<T, 
size_t>& value_map,
  * @return True if the buckets were successfully built, false otherwise.
  */
 template <typename T>
-static bool build_histogram(std::vector<Bucket<T>>& buckets, const std::map<T, 
size_t>& ordered_map,
-                            const size_t max_num_buckets) {
+bool build_histogram(std::vector<Bucket<T>>& buckets, const std::map<T, 
size_t>& ordered_map,
+                     const size_t max_num_buckets) {
     // If the input map is empty, there is nothing to build.
     if (ordered_map.empty()) {
         return false;
@@ -242,8 +241,8 @@ static bool build_histogram(std::vector<Bucket<T>>& 
buckets, const std::map<T, s
 }
 
 template <typename T>
-static bool histogram_to_json(rapidjson::StringBuffer& buffer,
-                              const std::vector<Bucket<T>>& buckets, const 
DataTypePtr& data_type) {
+bool histogram_to_json(rapidjson::StringBuffer& buffer, const 
std::vector<Bucket<T>>& buckets,
+                       const DataTypePtr& data_type) {
     rapidjson::Document doc;
     doc.SetObject();
     rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
diff --git a/be/test/vec/utils/arrow_column_to_doris_column_test.cpp 
b/be/test/vec/utils/arrow_column_to_doris_column_test.cpp
index 57c63fafe1..f16558ae86 100644
--- a/be/test/vec/utils/arrow_column_to_doris_column_test.cpp
+++ b/be/test/vec/utils/arrow_column_to_doris_column_test.cpp
@@ -419,9 +419,9 @@ TEST(ArrowColumnToDorisColumnTest, test_decimalv2) {
 }
 
 template <int bytes_width, bool is_nullable = false>
-static inline std::shared_ptr<arrow::Array> 
create_fixed_size_binary_array(int64_t num_elements,
-                                                                           
const std::string& value,
-                                                                           
size_t& counter) {
+std::shared_ptr<arrow::Array> create_fixed_size_binary_array(int64_t 
num_elements,
+                                                             const 
std::string& value,
+                                                             size_t& counter) {
     auto data_buf_size = bytes_width * num_elements;
     auto data_buf_tmp = arrow::AllocateBuffer(data_buf_size);
     std::shared_ptr<arrow::Buffer> data_buf = 
std::move(data_buf_tmp.ValueOrDie());
@@ -513,9 +513,8 @@ TEST(ArrowColumnToDorisColumnTest, test_fixed_binary) {
 }
 
 template <typename ArrowType, bool is_nullable = false>
-static inline std::shared_ptr<arrow::Array> create_binary_array(int64_t 
num_elements,
-                                                                const 
std::string& value,
-                                                                size_t& 
counter) {
+std::shared_ptr<arrow::Array> create_binary_array(int64_t num_elements, const 
std::string& value,
+                                                  size_t& counter) {
     using offset_type = typename ArrowType::offset_type;
     size_t offsets_bytes = (num_elements + 1) * sizeof(offset_type);
     auto offsets_buf_tmp = arrow::AllocateBuffer(offsets_bytes);
@@ -612,10 +611,11 @@ TEST(ArrowColumnToDorisColumnTest, test_binary) {
 }
 
 template <typename ArrowValueType, bool is_nullable = false>
-static inline std::shared_ptr<arrow::Array> create_array_array(
-        std::vector<ColumnArray::Offset64>& vec_offsets, std::vector<bool>& 
null_map,
-        std::shared_ptr<arrow::DataType> value_type, 
std::shared_ptr<arrow::Array> values,
-        size_t& counter) {
+std::shared_ptr<arrow::Array> 
create_array_array(std::vector<ColumnArray::Offset64>& vec_offsets,
+                                                 std::vector<bool>& null_map,
+                                                 
std::shared_ptr<arrow::DataType> value_type,
+                                                 std::shared_ptr<arrow::Array> 
values,
+                                                 size_t& counter) {
     using offset_type = typename arrow::ListType::offset_type;
     size_t num_rows = vec_offsets.size() - 1;
     DCHECK(null_map.size() == num_rows);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to