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

yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new d2926d1891d [branch-4.1](be) Move storage field type conversion to 
core (#65717) (#65755)
d2926d1891d is described below

commit d2926d1891d9805948c2ca9fbd3ae9fb79125f5b
Author: Chenyang Sun <[email protected]>
AuthorDate: Sat Jul 18 23:43:32 2026 +0800

    [branch-4.1](be) Move storage field type conversion to core (#65717) 
(#65755)
    
    pick from master #65717
---
 be/src/core/column/column_variant.cpp              |   3 +-
 be/src/core/data_type/data_type.cpp                |   4 +-
 be/src/core/data_type/data_type.h                  |   1 +
 be/src/core/data_type/define_primitive_type.h      |   3 +
 be/src/core/data_type/storage_field_type.cpp       | 202 +++++++++++++++++++++
 be/src/core/data_type/storage_field_type.h         |  32 ++++
 .../data_type_serde/data_type_decimal_serde.cpp    |   4 +-
 .../data_type_serde/data_type_number_serde.cpp     |   3 +-
 be/src/core/data_type_serde/data_type_serde.cpp    |   4 +-
 be/src/exec/common/variant_util.cpp                |   9 +-
 be/src/storage/olap_common.h                       |   4 +-
 be/src/storage/tablet/tablet_schema.cpp            | 130 +------------
 be/src/storage/tablet/tablet_schema.h              |   2 -
 be/test/core/data_type/storage_field_type_test.cpp | 171 +++++++++++++++++
 14 files changed, 430 insertions(+), 142 deletions(-)

diff --git a/be/src/core/column/column_variant.cpp 
b/be/src/core/column/column_variant.cpp
index 84b009b093e..694562ac553 100644
--- a/be/src/core/column/column_variant.cpp
+++ b/be/src/core/column/column_variant.cpp
@@ -59,6 +59,7 @@
 #include "core/data_type/define_primitive_type.h"
 #include "core/data_type/get_least_supertype.h"
 #include "core/data_type/primitive_type.h"
+#include "core/data_type/storage_field_type.h"
 #include "core/field.h"
 #include "core/string_buffer.hpp"
 #include "core/types.h"
@@ -2729,7 +2730,7 @@ void 
ColumnVariant::Subcolumn::deserialize_from_binary_column(const ColumnString
     const auto& data_ref = value->get_data_at(row);
     const auto* start_data = reinterpret_cast<const uint8_t*>(data_ref.data);
     const PrimitiveType type =
-            
TabletColumn::get_primitive_type_by_field_type(static_cast<FieldType>(*start_data));
+            
storage_field_type_to_primitive_type(static_cast<FieldType>(*start_data));
     auto check_end = [&](const uint8_t* end_ptr) {
         DCHECK_EQ(end_ptr - reinterpret_cast<const uint8_t*>(data_ref.data), 
data_ref.size);
     };
diff --git a/be/src/core/data_type/data_type.cpp 
b/be/src/core/data_type/data_type.cpp
index 2781e5df164..36c3c38bdf0 100644
--- a/be/src/core/data_type/data_type.cpp
+++ b/be/src/core/data_type/data_type.cpp
@@ -32,9 +32,9 @@
 #include "core/column/column.h"
 #include "core/column/column_const.h"
 #include "core/data_type/define_primitive_type.h"
+#include "core/data_type/storage_field_type.h"
 #include "core/data_type_serde/data_type_serde.h"
 #include "core/field.h"
-#include "storage/tablet/tablet_schema.h"
 
 namespace doris {
 class BufferWritable;
@@ -48,7 +48,7 @@ IDataType::IDataType() = default;
 IDataType::~IDataType() = default;
 
 doris::FieldType IDataType::get_storage_field_type() const {
-    return TabletColumn::get_field_type_by_type(get_primitive_type());
+    return primitive_type_to_storage_field_type(get_primitive_type());
 }
 
 String IDataType::get_name() const {
diff --git a/be/src/core/data_type/data_type.h 
b/be/src/core/data_type/data_type.h
index bc18f704d81..b976809bbfd 100644
--- a/be/src/core/data_type/data_type.h
+++ b/be/src/core/data_type/data_type.h
@@ -38,6 +38,7 @@
 #include "core/cow.h"
 #include "core/data_type/define_primitive_type.h"
 #include "core/data_type/primitive_type.h"
+#include "core/data_type/storage_field_type.h"
 #include "core/data_type_serde/data_type_serde.h"
 #include "core/types.h"
 
diff --git a/be/src/core/data_type/define_primitive_type.h 
b/be/src/core/data_type/define_primitive_type.h
index b47218afc1b..852b68a96b5 100644
--- a/be/src/core/data_type/define_primitive_type.h
+++ b/be/src/core/data_type/define_primitive_type.h
@@ -23,6 +23,9 @@ namespace doris {
 
 using PrimitiveNative = uint8_t;
 
+// Compute-layer types. When adding a new value, decide how it maps to 
FieldType and explicitly
+// define its behavior in primitive_type_to_storage_field_type() and
+// storage_field_type_to_primitive_type(), either by providing a mapping or by 
throwing.
 enum PrimitiveType : PrimitiveNative {
     INVALID_TYPE = 0,
     TYPE_NULL,     /* 1 */
diff --git a/be/src/core/data_type/storage_field_type.cpp 
b/be/src/core/data_type/storage_field_type.cpp
new file mode 100644
index 00000000000..269015401dc
--- /dev/null
+++ b/be/src/core/data_type/storage_field_type.cpp
@@ -0,0 +1,202 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include "core/data_type/storage_field_type.h"
+
+#include "common/exception.h"
+#include "storage/olap_common.h"
+
+namespace doris {
+
+// NOLINTNEXTLINE(readability-function-size): keep the exhaustive mapping 
together for auditability.
+FieldType primitive_type_to_storage_field_type(PrimitiveType type) {
+    switch (type) {
+    case PrimitiveType::INVALID_TYPE:
+        return FieldType::OLAP_FIELD_TYPE_UNKNOWN;
+    case PrimitiveType::TYPE_NULL:
+        return FieldType::OLAP_FIELD_TYPE_NONE;
+    case PrimitiveType::TYPE_BOOLEAN:
+        return FieldType::OLAP_FIELD_TYPE_BOOL;
+    case PrimitiveType::TYPE_TINYINT:
+        return FieldType::OLAP_FIELD_TYPE_TINYINT;
+    case PrimitiveType::TYPE_SMALLINT:
+        return FieldType::OLAP_FIELD_TYPE_SMALLINT;
+    case PrimitiveType::TYPE_INT:
+        return FieldType::OLAP_FIELD_TYPE_INT;
+    case PrimitiveType::TYPE_BIGINT:
+        return FieldType::OLAP_FIELD_TYPE_BIGINT;
+    case PrimitiveType::TYPE_LARGEINT:
+        return FieldType::OLAP_FIELD_TYPE_LARGEINT;
+    case PrimitiveType::TYPE_FLOAT:
+        return FieldType::OLAP_FIELD_TYPE_FLOAT;
+    case PrimitiveType::TYPE_DOUBLE:
+        return FieldType::OLAP_FIELD_TYPE_DOUBLE;
+    case PrimitiveType::TYPE_VARCHAR:
+        return FieldType::OLAP_FIELD_TYPE_VARCHAR;
+    case PrimitiveType::TYPE_DATE:
+        return FieldType::OLAP_FIELD_TYPE_DATE;
+    case PrimitiveType::TYPE_DATETIME:
+        return FieldType::OLAP_FIELD_TYPE_DATETIME;
+    case PrimitiveType::TYPE_CHAR:
+        return FieldType::OLAP_FIELD_TYPE_CHAR;
+    case PrimitiveType::TYPE_STRUCT:
+        return FieldType::OLAP_FIELD_TYPE_STRUCT;
+    case PrimitiveType::TYPE_ARRAY:
+        return FieldType::OLAP_FIELD_TYPE_ARRAY;
+    case PrimitiveType::TYPE_MAP:
+        return FieldType::OLAP_FIELD_TYPE_MAP;
+    case PrimitiveType::TYPE_HLL:
+        return FieldType::OLAP_FIELD_TYPE_HLL;
+    case PrimitiveType::TYPE_DECIMALV2:
+        return FieldType::OLAP_FIELD_TYPE_DECIMAL;
+    case PrimitiveType::TYPE_BITMAP:
+        return FieldType::OLAP_FIELD_TYPE_BITMAP;
+    case PrimitiveType::TYPE_STRING:
+        return FieldType::OLAP_FIELD_TYPE_STRING;
+    case PrimitiveType::TYPE_QUANTILE_STATE:
+        return FieldType::OLAP_FIELD_TYPE_QUANTILE_STATE;
+    case PrimitiveType::TYPE_DATEV2:
+        return FieldType::OLAP_FIELD_TYPE_DATEV2;
+    case PrimitiveType::TYPE_DATETIMEV2:
+        return FieldType::OLAP_FIELD_TYPE_DATETIMEV2;
+    case PrimitiveType::TYPE_TIMEV2:
+        return FieldType::OLAP_FIELD_TYPE_TIMEV2;
+    case PrimitiveType::TYPE_DECIMAL32:
+        return FieldType::OLAP_FIELD_TYPE_DECIMAL32;
+    case PrimitiveType::TYPE_DECIMAL64:
+        return FieldType::OLAP_FIELD_TYPE_DECIMAL64;
+    case PrimitiveType::TYPE_DECIMAL128I:
+        return FieldType::OLAP_FIELD_TYPE_DECIMAL128I;
+    case PrimitiveType::TYPE_JSONB:
+        return FieldType::OLAP_FIELD_TYPE_JSONB;
+    case PrimitiveType::TYPE_VARIANT:
+        return FieldType::OLAP_FIELD_TYPE_VARIANT;
+    case PrimitiveType::TYPE_AGG_STATE:
+        return FieldType::OLAP_FIELD_TYPE_AGG_STATE;
+    case PrimitiveType::TYPE_DECIMAL256:
+        return FieldType::OLAP_FIELD_TYPE_DECIMAL256;
+    case PrimitiveType::TYPE_IPV4:
+        return FieldType::OLAP_FIELD_TYPE_IPV4;
+    case PrimitiveType::TYPE_IPV6:
+        return FieldType::OLAP_FIELD_TYPE_IPV6;
+    case PrimitiveType::TYPE_UINT32:
+        return FieldType::OLAP_FIELD_TYPE_UNSIGNED_INT;
+    case PrimitiveType::TYPE_UINT64:
+        return FieldType::OLAP_FIELD_TYPE_UNSIGNED_BIGINT;
+    case PrimitiveType::TYPE_TIMESTAMPTZ:
+        return FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ;
+    case PrimitiveType::TYPE_BINARY:
+    case static_cast<PrimitiveType>(14): // TYPE_DECIMAL (deprecated)
+    case static_cast<PrimitiveType>(21): // TYPE_TIME (deprecated)
+    case static_cast<PrimitiveType>(33): // TYPE_LAMBDA_FUNCTION (deprecated)
+    case PrimitiveType::TYPE_FIXED_LENGTH_OBJECT:
+    case PrimitiveType::TYPE_VARBINARY:
+        break;
+    }
+
+    throw Exception(ErrorCode::INTERNAL_ERROR, "Cannot convert PrimitiveType 
{} to FieldType",
+                    static_cast<int>(type));
+}
+
+// NOLINTNEXTLINE(readability-function-size): keep the exhaustive mapping 
together for auditability.
+PrimitiveType storage_field_type_to_primitive_type(FieldType type) {
+    switch (type) {
+    case FieldType::OLAP_FIELD_TYPE_TINYINT:
+        return PrimitiveType::TYPE_TINYINT;
+    case FieldType::OLAP_FIELD_TYPE_SMALLINT:
+        return PrimitiveType::TYPE_SMALLINT;
+    case FieldType::OLAP_FIELD_TYPE_INT:
+        return PrimitiveType::TYPE_INT;
+    case FieldType::OLAP_FIELD_TYPE_UNSIGNED_INT:
+        return PrimitiveType::TYPE_UINT32;
+    case FieldType::OLAP_FIELD_TYPE_BIGINT:
+        return PrimitiveType::TYPE_BIGINT;
+    case FieldType::OLAP_FIELD_TYPE_UNSIGNED_BIGINT:
+        return PrimitiveType::TYPE_UINT64;
+    case FieldType::OLAP_FIELD_TYPE_LARGEINT:
+        return PrimitiveType::TYPE_LARGEINT;
+    case FieldType::OLAP_FIELD_TYPE_FLOAT:
+        return PrimitiveType::TYPE_FLOAT;
+    case FieldType::OLAP_FIELD_TYPE_DOUBLE:
+        return PrimitiveType::TYPE_DOUBLE;
+    case FieldType::OLAP_FIELD_TYPE_CHAR:
+        return PrimitiveType::TYPE_CHAR;
+    case FieldType::OLAP_FIELD_TYPE_DATE:
+        return PrimitiveType::TYPE_DATE;
+    case FieldType::OLAP_FIELD_TYPE_DATETIME:
+        return PrimitiveType::TYPE_DATETIME;
+    case FieldType::OLAP_FIELD_TYPE_DECIMAL:
+        return PrimitiveType::TYPE_DECIMALV2;
+    case FieldType::OLAP_FIELD_TYPE_VARCHAR:
+        return PrimitiveType::TYPE_VARCHAR;
+    case FieldType::OLAP_FIELD_TYPE_STRUCT:
+        return PrimitiveType::TYPE_STRUCT;
+    case FieldType::OLAP_FIELD_TYPE_ARRAY:
+        return PrimitiveType::TYPE_ARRAY;
+    case FieldType::OLAP_FIELD_TYPE_MAP:
+        return PrimitiveType::TYPE_MAP;
+    case FieldType::OLAP_FIELD_TYPE_UNKNOWN:
+        return PrimitiveType::INVALID_TYPE;
+    case FieldType::OLAP_FIELD_TYPE_NONE:
+        return PrimitiveType::TYPE_NULL;
+    case FieldType::OLAP_FIELD_TYPE_HLL:
+        return PrimitiveType::TYPE_HLL;
+    case FieldType::OLAP_FIELD_TYPE_BOOL:
+        return PrimitiveType::TYPE_BOOLEAN;
+    case FieldType::OLAP_FIELD_TYPE_BITMAP:
+        return PrimitiveType::TYPE_BITMAP;
+    case FieldType::OLAP_FIELD_TYPE_STRING:
+        return PrimitiveType::TYPE_STRING;
+    case FieldType::OLAP_FIELD_TYPE_QUANTILE_STATE:
+        return PrimitiveType::TYPE_QUANTILE_STATE;
+    case FieldType::OLAP_FIELD_TYPE_DATEV2:
+        return PrimitiveType::TYPE_DATEV2;
+    case FieldType::OLAP_FIELD_TYPE_DATETIMEV2:
+        return PrimitiveType::TYPE_DATETIMEV2;
+    case FieldType::OLAP_FIELD_TYPE_TIMEV2:
+        return PrimitiveType::TYPE_TIMEV2;
+    case FieldType::OLAP_FIELD_TYPE_DECIMAL32:
+        return PrimitiveType::TYPE_DECIMAL32;
+    case FieldType::OLAP_FIELD_TYPE_DECIMAL64:
+        return PrimitiveType::TYPE_DECIMAL64;
+    case FieldType::OLAP_FIELD_TYPE_DECIMAL128I:
+        return PrimitiveType::TYPE_DECIMAL128I;
+    case FieldType::OLAP_FIELD_TYPE_JSONB:
+        return PrimitiveType::TYPE_JSONB;
+    case FieldType::OLAP_FIELD_TYPE_VARIANT:
+        return PrimitiveType::TYPE_VARIANT;
+    case FieldType::OLAP_FIELD_TYPE_AGG_STATE:
+        return PrimitiveType::TYPE_AGG_STATE;
+    case FieldType::OLAP_FIELD_TYPE_DECIMAL256:
+        return PrimitiveType::TYPE_DECIMAL256;
+    case FieldType::OLAP_FIELD_TYPE_IPV4:
+        return PrimitiveType::TYPE_IPV4;
+    case FieldType::OLAP_FIELD_TYPE_IPV6:
+        return PrimitiveType::TYPE_IPV6;
+    case FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ:
+        return PrimitiveType::TYPE_TIMESTAMPTZ;
+    case FieldType::OLAP_FIELD_TYPE_UNSIGNED_TINYINT:
+    case FieldType::OLAP_FIELD_TYPE_UNSIGNED_SMALLINT:
+    case FieldType::OLAP_FIELD_TYPE_DISCRETE_DOUBLE:
+        break;
+    }
+
+    throw Exception(ErrorCode::INTERNAL_ERROR, "Cannot convert FieldType {} to 
PrimitiveType",
+                    static_cast<int>(type));
+}
+
+} // namespace doris
diff --git a/be/src/core/data_type/storage_field_type.h 
b/be/src/core/data_type/storage_field_type.h
new file mode 100644
index 00000000000..a1d48e53eea
--- /dev/null
+++ b/be/src/core/data_type/storage_field_type.h
@@ -0,0 +1,32 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include "core/data_type/define_primitive_type.h"
+
+namespace doris {
+
+enum class FieldType;
+
+// Throws Exception when the primitive type has no storage field type mapping.
+[[nodiscard]] FieldType primitive_type_to_storage_field_type(PrimitiveType 
type);
+
+// Throws Exception when the storage field type has no primitive type mapping.
+[[nodiscard]] PrimitiveType storage_field_type_to_primitive_type(FieldType 
type);
+
+} // namespace doris
diff --git a/be/src/core/data_type_serde/data_type_decimal_serde.cpp 
b/be/src/core/data_type_serde/data_type_decimal_serde.cpp
index 1a097a4e3d4..6393e9965fc 100644
--- a/be/src/core/data_type_serde/data_type_decimal_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_decimal_serde.cpp
@@ -31,13 +31,13 @@
 #include "core/column/column_decimal.h"
 #include "core/data_type/data_type_decimal.h"
 #include "core/data_type/define_primitive_type.h"
+#include "core/data_type/storage_field_type.h"
 #include "core/data_type_serde/decoded_column_view.h"
 #include "core/types.h"
 #include "exec/common/arithmetic_overflow.h"
 #include "exprs/function/cast/cast_to_decimal.h"
 #include "exprs/function/cast/cast_to_string.h"
 #include "orc/Int128.hh"
-#include "storage/tablet/tablet_schema.h"
 #include "util/jsonb_document.h"
 #include "util/jsonb_document_cast.h"
 #include "util/jsonb_writer.h"
@@ -824,7 +824,7 @@ template <PrimitiveType T>
 void DataTypeDecimalSerDe<T>::write_one_cell_to_binary(const IColumn& 
src_column,
                                                        ColumnString::Chars& 
chars,
                                                        int64_t row_num) const {
-    const uint8_t type = (const 
uint8_t)TabletColumn::get_field_type_by_type(T);
+    const uint8_t type = 
static_cast<uint8_t>(primitive_type_to_storage_field_type(T));
     const auto& data_ref = assert_cast<const 
ColumnDecimal<T>&>(src_column).get_data_at(row_num);
     const auto& prec = static_cast<uint8_t>(precision);
     const auto& sc = static_cast<uint8_t>(scale);
diff --git a/be/src/core/data_type_serde/data_type_number_serde.cpp 
b/be/src/core/data_type_serde/data_type_number_serde.cpp
index 2700ddbf7a6..7a4db5c4b4a 100644
--- a/be/src/core/data_type_serde/data_type_number_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_number_serde.cpp
@@ -28,6 +28,7 @@
 #include "core/column/column_nullable.h"
 #include "core/data_type/define_primitive_type.h"
 #include "core/data_type/primitive_type.h"
+#include "core/data_type/storage_field_type.h"
 #include "core/data_type_serde/data_type_serde.h"
 #include "core/data_type_serde/decoded_column_view.h"
 #include "core/packed_int128.h"
@@ -1074,7 +1075,7 @@ template <PrimitiveType T>
 void DataTypeNumberSerDe<T>::write_one_cell_to_binary(const IColumn& 
src_column,
                                                       ColumnString::Chars& 
chars,
                                                       int64_t row_num) const {
-    const uint8_t type = (const 
uint8_t)TabletColumn::get_field_type_by_type(T);
+    const uint8_t type = 
static_cast<uint8_t>(primitive_type_to_storage_field_type(T));
     const auto& data_ref = assert_cast<const 
ColumnType&>(src_column).get_data_at(row_num);
 
     const size_t old_size = chars.size();
diff --git a/be/src/core/data_type_serde/data_type_serde.cpp 
b/be/src/core/data_type_serde/data_type_serde.cpp
index ff3f3c45024..da5db282337 100644
--- a/be/src/core/data_type_serde/data_type_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_serde.cpp
@@ -42,6 +42,7 @@
 #include "core/data_type/data_type_map.h"
 #include "core/data_type/data_type_nullable.h"
 #include "core/data_type/data_type_struct.h"
+#include "core/data_type/storage_field_type.h"
 #include "core/data_type_serde/data_type_array_serde.h"
 #include "core/data_type_serde/data_type_datetimev2_serde.h"
 #include "core/data_type_serde/data_type_datev2_serde.h"
@@ -57,6 +58,7 @@
 #include "core/value/vdatetime_value.h"
 #include "exprs/function/cast/cast_base.h"
 #include "runtime/descriptors.h"
+#include "storage/olap_common.h"
 #include "util/jsonb_document.h"
 #include "util/jsonb_writer.h"
 namespace doris {
@@ -1132,7 +1134,7 @@ const uint8_t* 
DataTypeSerDe::deserialize_binary_to_column(const uint8_t* data,
 const uint8_t* DataTypeSerDe::deserialize_binary_to_field(const uint8_t* data, 
Field& field,
                                                           FieldInfo& info) {
     const FieldType type = static_cast<FieldType>(*data++);
-    info.scalar_type_id = TabletColumn::get_primitive_type_by_field_type(type);
+    info.scalar_type_id = storage_field_type_to_primitive_type(type);
     const uint8_t* end = data;
     switch (type) {
 #define HANDLE_SIMPLE_SERDE(FT, SERDE)                               \
diff --git a/be/src/exec/common/variant_util.cpp 
b/be/src/exec/common/variant_util.cpp
index c7ca413e008..dd84522b695 100644
--- a/be/src/exec/common/variant_util.cpp
+++ b/be/src/exec/common/variant_util.cpp
@@ -73,6 +73,7 @@
 #include "core/data_type/define_primitive_type.h"
 #include "core/data_type/get_least_supertype.h"
 #include "core/data_type/primitive_type.h"
+#include "core/data_type/storage_field_type.h"
 #include "core/field.h"
 #include "core/typeid_cast.h"
 #include "core/types.h"
@@ -1749,26 +1750,26 @@ static void append_field_to_binary_chars(const Field& 
field, ColumnString::Chars
     }
     case PrimitiveType::TYPE_BOOLEAN: {
         append_binary_type(chars,
-                           
TabletColumn::get_field_type_by_type(PrimitiveType::TYPE_BOOLEAN));
+                           
primitive_type_to_storage_field_type(PrimitiveType::TYPE_BOOLEAN));
         const auto v = 
static_cast<UInt8>(field.get<PrimitiveType::TYPE_BOOLEAN>());
         append_binary_bytes(chars, &v, sizeof(UInt8));
         return;
     }
     case PrimitiveType::TYPE_BIGINT: {
-        append_binary_type(chars, 
TabletColumn::get_field_type_by_type(PrimitiveType::TYPE_BIGINT));
+        append_binary_type(chars, 
primitive_type_to_storage_field_type(PrimitiveType::TYPE_BIGINT));
         const auto v = field.get<PrimitiveType::TYPE_BIGINT>();
         append_binary_bytes(chars, &v, sizeof(Int64));
         return;
     }
     case PrimitiveType::TYPE_LARGEINT: {
         append_binary_type(chars,
-                           
TabletColumn::get_field_type_by_type(PrimitiveType::TYPE_LARGEINT));
+                           
primitive_type_to_storage_field_type(PrimitiveType::TYPE_LARGEINT));
         const auto v = field.get<PrimitiveType::TYPE_LARGEINT>();
         append_binary_bytes(chars, &v, sizeof(int128_t));
         return;
     }
     case PrimitiveType::TYPE_DOUBLE: {
-        append_binary_type(chars, 
TabletColumn::get_field_type_by_type(PrimitiveType::TYPE_DOUBLE));
+        append_binary_type(chars, 
primitive_type_to_storage_field_type(PrimitiveType::TYPE_DOUBLE));
         const auto v = field.get<PrimitiveType::TYPE_DOUBLE>();
         append_binary_bytes(chars, &v, sizeof(Float64));
         return;
diff --git a/be/src/storage/olap_common.h b/be/src/storage/olap_common.h
index bfb79da2ac0..243f064ada9 100644
--- a/be/src/storage/olap_common.h
+++ b/be/src/storage/olap_common.h
@@ -118,7 +118,9 @@ struct TabletSize {
 
 // Storage-engine cell types, used by TabletColumn / KeyCoder and the
 // data_type traits chain. When adding a new value, also extend CppTypeTraits,
-// FieldTypeTraits and the field_type_size() switch in storage/types.h.
+// FieldTypeTraits and the field_type_size() switch in storage/types.h. Decide 
how it maps to
+// PrimitiveType and explicitly define its behavior in 
primitive_type_to_storage_field_type() and
+// storage_field_type_to_primitive_type(), either by providing a mapping or by 
throwing.
 enum class FieldType {
     OLAP_FIELD_TYPE_TINYINT = 1, // MYSQL_TYPE_TINY
     OLAP_FIELD_TYPE_UNSIGNED_TINYINT = 2,
diff --git a/be/src/storage/tablet/tablet_schema.cpp 
b/be/src/storage/tablet/tablet_schema.cpp
index bce66484aa2..eefdfb31f6a 100644
--- a/be/src/storage/tablet/tablet_schema.cpp
+++ b/be/src/storage/tablet/tablet_schema.cpp
@@ -56,134 +56,6 @@
 
 namespace doris {
 #include "common/compile_check_begin.h"
-FieldType TabletColumn::get_field_type_by_type(PrimitiveType primitiveType) {
-    switch (primitiveType) {
-    case PrimitiveType::INVALID_TYPE:
-        return FieldType::OLAP_FIELD_TYPE_UNKNOWN;
-    case PrimitiveType::TYPE_NULL:
-        return FieldType::OLAP_FIELD_TYPE_NONE;
-    case PrimitiveType::TYPE_BOOLEAN:
-        return FieldType::OLAP_FIELD_TYPE_BOOL;
-    case PrimitiveType::TYPE_TINYINT:
-        return FieldType::OLAP_FIELD_TYPE_TINYINT;
-    case PrimitiveType::TYPE_SMALLINT:
-        return FieldType::OLAP_FIELD_TYPE_SMALLINT;
-    case PrimitiveType::TYPE_INT:
-        return FieldType::OLAP_FIELD_TYPE_INT;
-    case PrimitiveType::TYPE_BIGINT:
-        return FieldType::OLAP_FIELD_TYPE_BIGINT;
-    case PrimitiveType::TYPE_LARGEINT:
-        return FieldType::OLAP_FIELD_TYPE_LARGEINT;
-    case PrimitiveType::TYPE_FLOAT:
-        return FieldType::OLAP_FIELD_TYPE_FLOAT;
-    case PrimitiveType::TYPE_DOUBLE:
-        return FieldType::OLAP_FIELD_TYPE_DOUBLE;
-    case PrimitiveType::TYPE_VARCHAR:
-        return FieldType::OLAP_FIELD_TYPE_VARCHAR;
-    case PrimitiveType::TYPE_DATE:
-        return FieldType::OLAP_FIELD_TYPE_DATE;
-    case PrimitiveType::TYPE_DATETIME:
-        return FieldType::OLAP_FIELD_TYPE_DATETIME;
-    case PrimitiveType::TYPE_BINARY:
-        return FieldType::OLAP_FIELD_TYPE_UNKNOWN; // Not implemented
-    case PrimitiveType::TYPE_CHAR:
-        return FieldType::OLAP_FIELD_TYPE_CHAR;
-    case PrimitiveType::TYPE_STRUCT:
-        return FieldType::OLAP_FIELD_TYPE_STRUCT;
-    case PrimitiveType::TYPE_ARRAY:
-        return FieldType::OLAP_FIELD_TYPE_ARRAY;
-    case PrimitiveType::TYPE_MAP:
-        return FieldType::OLAP_FIELD_TYPE_MAP;
-    case PrimitiveType::TYPE_HLL:
-        return FieldType::OLAP_FIELD_TYPE_HLL;
-    case PrimitiveType::TYPE_DECIMALV2:
-        return FieldType::OLAP_FIELD_TYPE_UNKNOWN; // Not implemented
-    case PrimitiveType::TYPE_BITMAP:
-        return FieldType::OLAP_FIELD_TYPE_BITMAP;
-    case PrimitiveType::TYPE_STRING:
-        return FieldType::OLAP_FIELD_TYPE_STRING;
-    case PrimitiveType::TYPE_QUANTILE_STATE:
-        return FieldType::OLAP_FIELD_TYPE_QUANTILE_STATE;
-    case PrimitiveType::TYPE_DATEV2:
-        return FieldType::OLAP_FIELD_TYPE_DATEV2;
-    case PrimitiveType::TYPE_DATETIMEV2:
-        return FieldType::OLAP_FIELD_TYPE_DATETIMEV2;
-    case PrimitiveType::TYPE_TIMESTAMPTZ:
-        return FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ;
-    case PrimitiveType::TYPE_TIMEV2:
-        return FieldType::OLAP_FIELD_TYPE_TIMEV2;
-    case PrimitiveType::TYPE_DECIMAL32:
-        return FieldType::OLAP_FIELD_TYPE_DECIMAL32;
-    case PrimitiveType::TYPE_DECIMAL64:
-        return FieldType::OLAP_FIELD_TYPE_DECIMAL64;
-    case PrimitiveType::TYPE_DECIMAL128I:
-        return FieldType::OLAP_FIELD_TYPE_DECIMAL128I;
-    case PrimitiveType::TYPE_DECIMAL256:
-        return FieldType::OLAP_FIELD_TYPE_DECIMAL256;
-    case PrimitiveType::TYPE_JSONB:
-        return FieldType::OLAP_FIELD_TYPE_JSONB;
-    case PrimitiveType::TYPE_VARIANT:
-        return FieldType::OLAP_FIELD_TYPE_VARIANT;
-    case PrimitiveType::TYPE_IPV4:
-        return FieldType::OLAP_FIELD_TYPE_IPV4;
-    case PrimitiveType::TYPE_IPV6:
-        return FieldType::OLAP_FIELD_TYPE_IPV6;
-    case PrimitiveType::TYPE_AGG_STATE:
-        return FieldType::OLAP_FIELD_TYPE_AGG_STATE;
-    default:
-        return FieldType::OLAP_FIELD_TYPE_UNKNOWN;
-    }
-}
-
-PrimitiveType TabletColumn::get_primitive_type_by_field_type(FieldType type) {
-    static const PrimitiveType mapping[] = {
-            /*  0 */ PrimitiveType::INVALID_TYPE,
-            /*  1 OLAP_FIELD_TYPE_TINYINT           */ 
PrimitiveType::TYPE_TINYINT,
-            /*  2 OLAP_FIELD_TYPE_UNSIGNED_TINYINT  */ 
PrimitiveType::INVALID_TYPE,
-            /*  3 OLAP_FIELD_TYPE_SMALLINT          */ 
PrimitiveType::TYPE_SMALLINT,
-            /*  4 OLAP_FIELD_TYPE_UNSIGNED_SMALLINT */ 
PrimitiveType::INVALID_TYPE,
-            /*  5 OLAP_FIELD_TYPE_INT               */ PrimitiveType::TYPE_INT,
-            /*  6 OLAP_FIELD_TYPE_UNSIGNED_INT      */ 
PrimitiveType::INVALID_TYPE,
-            /*  7 OLAP_FIELD_TYPE_BIGINT            */ 
PrimitiveType::TYPE_BIGINT,
-            /*  8 OLAP_FIELD_TYPE_UNSIGNED_BIGINT   */ 
PrimitiveType::INVALID_TYPE,
-            /*  9 OLAP_FIELD_TYPE_LARGEINT          */ 
PrimitiveType::TYPE_LARGEINT,
-            /* 10 OLAP_FIELD_TYPE_FLOAT             */ 
PrimitiveType::TYPE_FLOAT,
-            /* 11 OLAP_FIELD_TYPE_DOUBLE            */ 
PrimitiveType::TYPE_DOUBLE,
-            /* 12 OLAP_FIELD_TYPE_DISCRETE_DOUBLE   */ 
PrimitiveType::INVALID_TYPE,
-            /* 13 OLAP_FIELD_TYPE_CHAR              */ 
PrimitiveType::TYPE_CHAR,
-            /* 14 OLAP_FIELD_TYPE_DATE              */ 
PrimitiveType::TYPE_DATE,
-            /* 15 OLAP_FIELD_TYPE_DATETIME          */ 
PrimitiveType::TYPE_DATETIME,
-            /* 16 OLAP_FIELD_TYPE_DECIMAL           */ 
PrimitiveType::INVALID_TYPE,
-            /* 17 OLAP_FIELD_TYPE_VARCHAR           */ 
PrimitiveType::TYPE_VARCHAR,
-            /* 18 OLAP_FIELD_TYPE_STRUCT            */ 
PrimitiveType::TYPE_STRUCT,
-            /* 19 OLAP_FIELD_TYPE_ARRAY             */ 
PrimitiveType::TYPE_ARRAY,
-            /* 20 OLAP_FIELD_TYPE_MAP               */ PrimitiveType::TYPE_MAP,
-            /* 21 OLAP_FIELD_TYPE_UNKNOWN           */ 
PrimitiveType::INVALID_TYPE,
-            /* 22 OLAP_FIELD_TYPE_NONE              */ 
PrimitiveType::TYPE_NULL,
-            /* 23 OLAP_FIELD_TYPE_HLL               */ PrimitiveType::TYPE_HLL,
-            /* 24 OLAP_FIELD_TYPE_BOOL              */ 
PrimitiveType::TYPE_BOOLEAN,
-            /* 25 OLAP_FIELD_TYPE_BITMAP            */ 
PrimitiveType::TYPE_BITMAP,
-            /* 26 OLAP_FIELD_TYPE_STRING            */ 
PrimitiveType::TYPE_STRING,
-            /* 27 OLAP_FIELD_TYPE_QUANTILE_STATE    */ 
PrimitiveType::TYPE_QUANTILE_STATE,
-            /* 28 OLAP_FIELD_TYPE_DATEV2            */ 
PrimitiveType::TYPE_DATEV2,
-            /* 29 OLAP_FIELD_TYPE_DATETIMEV2        */ 
PrimitiveType::TYPE_DATETIMEV2,
-            /* 30 OLAP_FIELD_TYPE_TIMEV2            */ 
PrimitiveType::TYPE_TIMEV2,
-            /* 31 OLAP_FIELD_TYPE_DECIMAL32         */ 
PrimitiveType::TYPE_DECIMAL32,
-            /* 32 OLAP_FIELD_TYPE_DECIMAL64         */ 
PrimitiveType::TYPE_DECIMAL64,
-            /* 33 OLAP_FIELD_TYPE_DECIMAL128I       */ 
PrimitiveType::TYPE_DECIMAL128I,
-            /* 34 OLAP_FIELD_TYPE_JSONB             */ 
PrimitiveType::TYPE_JSONB,
-            /* 35 OLAP_FIELD_TYPE_VARIANT           */ 
PrimitiveType::TYPE_VARIANT,
-            /* 36 OLAP_FIELD_TYPE_AGG_STATE         */ 
PrimitiveType::TYPE_AGG_STATE,
-            /* 37 OLAP_FIELD_TYPE_DECIMAL256        */ 
PrimitiveType::TYPE_DECIMAL256,
-            /* 38 OLAP_FIELD_TYPE_IPV4              */ 
PrimitiveType::TYPE_IPV4,
-            /* 39 OLAP_FIELD_TYPE_IPV6              */ 
PrimitiveType::TYPE_IPV6,
-            /* 40 OLAP_FIELD_TYPE_TIMESTAMPTZ       */ 
PrimitiveType::TYPE_TIMESTAMPTZ,
-    };
-
-    int idx = static_cast<int>(type);
-    return mapping[idx];
-}
-
 FieldType TabletColumn::get_field_type_by_string(const std::string& type_str) {
     std::string upper_type_str = type_str;
     std::transform(type_str.begin(), type_str.end(), upper_type_str.begin(),
@@ -239,6 +111,8 @@ FieldType TabletColumn::get_field_type_by_string(const 
std::string& type_str) {
     } else if (0 == upper_type_str.compare("DECIMAL256")) {
         type = FieldType::OLAP_FIELD_TYPE_DECIMAL256;
     } else if (0 == upper_type_str.compare(0, 7, "DECIMAL")) {
+        // Keep this generic prefix match after all specific DECIMAL types; 
otherwise DECIMAL32,
+        // DECIMAL64, DECIMAL128I, and DECIMAL256 would all be classified as 
DECIMAL.
         type = FieldType::OLAP_FIELD_TYPE_DECIMAL;
     } else if (0 == upper_type_str.compare(0, 7, "VARCHAR")) {
         type = FieldType::OLAP_FIELD_TYPE_VARCHAR;
diff --git a/be/src/storage/tablet/tablet_schema.h 
b/be/src/storage/tablet/tablet_schema.h
index 9094a112d09..7a2430702c2 100644
--- a/be/src/storage/tablet/tablet_schema.h
+++ b/be/src/storage/tablet/tablet_schema.h
@@ -182,8 +182,6 @@ public:
     static std::string get_string_by_field_type(FieldType type);
     static std::string get_string_by_aggregation_type(FieldAggregationMethod 
aggregation_type);
     static FieldType get_field_type_by_string(const std::string& str);
-    static FieldType get_field_type_by_type(PrimitiveType type);
-    static PrimitiveType get_primitive_type_by_field_type(FieldType type);
     static FieldAggregationMethod get_aggregation_type_by_string(const 
std::string& str);
     static uint32_t get_field_length_by_type(TPrimitiveType::type type, 
uint32_t string_length);
     bool is_row_store_column() const;
diff --git a/be/test/core/data_type/storage_field_type_test.cpp 
b/be/test/core/data_type/storage_field_type_test.cpp
new file mode 100644
index 00000000000..af621ceb9c6
--- /dev/null
+++ b/be/test/core/data_type/storage_field_type_test.cpp
@@ -0,0 +1,171 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include "core/data_type/storage_field_type.h"
+
+#include <gtest/gtest.h>
+
+#include <array>
+#include <cstddef>
+
+#include "common/exception.h"
+#include "storage/olap_common.h"
+
+namespace doris {
+
+namespace {
+
+struct TypePair {
+    PrimitiveType primitive_type;
+    FieldType field_type;
+};
+
+constexpr std::array supported_mappings {
+        TypePair {PrimitiveType::INVALID_TYPE, 
FieldType::OLAP_FIELD_TYPE_UNKNOWN},
+        TypePair {PrimitiveType::TYPE_NULL, FieldType::OLAP_FIELD_TYPE_NONE},
+        TypePair {PrimitiveType::TYPE_BOOLEAN, 
FieldType::OLAP_FIELD_TYPE_BOOL},
+        TypePair {PrimitiveType::TYPE_TINYINT, 
FieldType::OLAP_FIELD_TYPE_TINYINT},
+        TypePair {PrimitiveType::TYPE_SMALLINT, 
FieldType::OLAP_FIELD_TYPE_SMALLINT},
+        TypePair {PrimitiveType::TYPE_INT, FieldType::OLAP_FIELD_TYPE_INT},
+        TypePair {PrimitiveType::TYPE_BIGINT, 
FieldType::OLAP_FIELD_TYPE_BIGINT},
+        TypePair {PrimitiveType::TYPE_LARGEINT, 
FieldType::OLAP_FIELD_TYPE_LARGEINT},
+        TypePair {PrimitiveType::TYPE_FLOAT, FieldType::OLAP_FIELD_TYPE_FLOAT},
+        TypePair {PrimitiveType::TYPE_DOUBLE, 
FieldType::OLAP_FIELD_TYPE_DOUBLE},
+        TypePair {PrimitiveType::TYPE_VARCHAR, 
FieldType::OLAP_FIELD_TYPE_VARCHAR},
+        TypePair {PrimitiveType::TYPE_DATE, FieldType::OLAP_FIELD_TYPE_DATE},
+        TypePair {PrimitiveType::TYPE_DATETIME, 
FieldType::OLAP_FIELD_TYPE_DATETIME},
+        TypePair {PrimitiveType::TYPE_CHAR, FieldType::OLAP_FIELD_TYPE_CHAR},
+        TypePair {PrimitiveType::TYPE_STRUCT, 
FieldType::OLAP_FIELD_TYPE_STRUCT},
+        TypePair {PrimitiveType::TYPE_ARRAY, FieldType::OLAP_FIELD_TYPE_ARRAY},
+        TypePair {PrimitiveType::TYPE_MAP, FieldType::OLAP_FIELD_TYPE_MAP},
+        TypePair {PrimitiveType::TYPE_HLL, FieldType::OLAP_FIELD_TYPE_HLL},
+        TypePair {PrimitiveType::TYPE_DECIMALV2, 
FieldType::OLAP_FIELD_TYPE_DECIMAL},
+        TypePair {PrimitiveType::TYPE_BITMAP, 
FieldType::OLAP_FIELD_TYPE_BITMAP},
+        TypePair {PrimitiveType::TYPE_STRING, 
FieldType::OLAP_FIELD_TYPE_STRING},
+        TypePair {PrimitiveType::TYPE_QUANTILE_STATE, 
FieldType::OLAP_FIELD_TYPE_QUANTILE_STATE},
+        TypePair {PrimitiveType::TYPE_DATEV2, 
FieldType::OLAP_FIELD_TYPE_DATEV2},
+        TypePair {PrimitiveType::TYPE_DATETIMEV2, 
FieldType::OLAP_FIELD_TYPE_DATETIMEV2},
+        TypePair {PrimitiveType::TYPE_TIMEV2, 
FieldType::OLAP_FIELD_TYPE_TIMEV2},
+        TypePair {PrimitiveType::TYPE_DECIMAL32, 
FieldType::OLAP_FIELD_TYPE_DECIMAL32},
+        TypePair {PrimitiveType::TYPE_DECIMAL64, 
FieldType::OLAP_FIELD_TYPE_DECIMAL64},
+        TypePair {PrimitiveType::TYPE_DECIMAL128I, 
FieldType::OLAP_FIELD_TYPE_DECIMAL128I},
+        TypePair {PrimitiveType::TYPE_JSONB, FieldType::OLAP_FIELD_TYPE_JSONB},
+        TypePair {PrimitiveType::TYPE_VARIANT, 
FieldType::OLAP_FIELD_TYPE_VARIANT},
+        TypePair {PrimitiveType::TYPE_AGG_STATE, 
FieldType::OLAP_FIELD_TYPE_AGG_STATE},
+        TypePair {PrimitiveType::TYPE_DECIMAL256, 
FieldType::OLAP_FIELD_TYPE_DECIMAL256},
+        TypePair {PrimitiveType::TYPE_IPV4, FieldType::OLAP_FIELD_TYPE_IPV4},
+        TypePair {PrimitiveType::TYPE_IPV6, FieldType::OLAP_FIELD_TYPE_IPV6},
+        TypePair {PrimitiveType::TYPE_UINT32, 
FieldType::OLAP_FIELD_TYPE_UNSIGNED_INT},
+        TypePair {PrimitiveType::TYPE_UINT64, 
FieldType::OLAP_FIELD_TYPE_UNSIGNED_BIGINT},
+        TypePair {PrimitiveType::TYPE_TIMESTAMPTZ, 
FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ},
+};
+
+TEST(StorageFieldTypeTest, SupportedMappingsRoundTrip) {
+    for (const auto& [primitive_type, field_type] : supported_mappings) {
+        SCOPED_TRACE(static_cast<int>(primitive_type));
+        EXPECT_EQ(primitive_type_to_storage_field_type(primitive_type), 
field_type);
+        EXPECT_EQ(storage_field_type_to_primitive_type(field_type), 
primitive_type);
+    }
+}
+
+TEST(StorageFieldTypeTest, UnsupportedPrimitiveTypesThrow) {
+    constexpr std::array unsupported_types {
+            PrimitiveType::TYPE_BINARY,
+            static_cast<PrimitiveType>(14), // TYPE_DECIMAL (deprecated)
+            static_cast<PrimitiveType>(21), // TYPE_TIME (deprecated)
+            static_cast<PrimitiveType>(33), // TYPE_LAMBDA_FUNCTION 
(deprecated)
+            PrimitiveType::TYPE_FIXED_LENGTH_OBJECT,
+            PrimitiveType::TYPE_VARBINARY,
+            static_cast<PrimitiveType>(43),
+            static_cast<PrimitiveType>(255),
+    };
+
+    for (const auto type : unsupported_types) {
+        SCOPED_TRACE(static_cast<int>(type));
+        EXPECT_THROW((void)primitive_type_to_storage_field_type(type), 
Exception);
+    }
+}
+
+TEST(StorageFieldTypeTest, UnsupportedOrInvalidFieldTypesThrow) {
+    constexpr std::array unsupported_types {
+            FieldType::OLAP_FIELD_TYPE_UNSIGNED_TINYINT,
+            FieldType::OLAP_FIELD_TYPE_UNSIGNED_SMALLINT,
+            FieldType::OLAP_FIELD_TYPE_DISCRETE_DOUBLE,
+            static_cast<FieldType>(-1),
+            static_cast<FieldType>(0),
+            static_cast<FieldType>(41),
+            static_cast<FieldType>(255),
+    };
+
+    for (const auto type : unsupported_types) {
+        SCOPED_TRACE(static_cast<int>(type));
+        EXPECT_THROW((void)storage_field_type_to_primitive_type(type), 
Exception);
+    }
+}
+
+TEST(StorageFieldTypeTest, PersistedFieldTypeValuesStayStable) {
+    constexpr std::array persisted_types {
+            FieldType::OLAP_FIELD_TYPE_TINYINT,
+            FieldType::OLAP_FIELD_TYPE_UNSIGNED_TINYINT,
+            FieldType::OLAP_FIELD_TYPE_SMALLINT,
+            FieldType::OLAP_FIELD_TYPE_UNSIGNED_SMALLINT,
+            FieldType::OLAP_FIELD_TYPE_INT,
+            FieldType::OLAP_FIELD_TYPE_UNSIGNED_INT,
+            FieldType::OLAP_FIELD_TYPE_BIGINT,
+            FieldType::OLAP_FIELD_TYPE_UNSIGNED_BIGINT,
+            FieldType::OLAP_FIELD_TYPE_LARGEINT,
+            FieldType::OLAP_FIELD_TYPE_FLOAT,
+            FieldType::OLAP_FIELD_TYPE_DOUBLE,
+            FieldType::OLAP_FIELD_TYPE_DISCRETE_DOUBLE,
+            FieldType::OLAP_FIELD_TYPE_CHAR,
+            FieldType::OLAP_FIELD_TYPE_DATE,
+            FieldType::OLAP_FIELD_TYPE_DATETIME,
+            FieldType::OLAP_FIELD_TYPE_DECIMAL,
+            FieldType::OLAP_FIELD_TYPE_VARCHAR,
+            FieldType::OLAP_FIELD_TYPE_STRUCT,
+            FieldType::OLAP_FIELD_TYPE_ARRAY,
+            FieldType::OLAP_FIELD_TYPE_MAP,
+            FieldType::OLAP_FIELD_TYPE_UNKNOWN,
+            FieldType::OLAP_FIELD_TYPE_NONE,
+            FieldType::OLAP_FIELD_TYPE_HLL,
+            FieldType::OLAP_FIELD_TYPE_BOOL,
+            FieldType::OLAP_FIELD_TYPE_BITMAP,
+            FieldType::OLAP_FIELD_TYPE_STRING,
+            FieldType::OLAP_FIELD_TYPE_QUANTILE_STATE,
+            FieldType::OLAP_FIELD_TYPE_DATEV2,
+            FieldType::OLAP_FIELD_TYPE_DATETIMEV2,
+            FieldType::OLAP_FIELD_TYPE_TIMEV2,
+            FieldType::OLAP_FIELD_TYPE_DECIMAL32,
+            FieldType::OLAP_FIELD_TYPE_DECIMAL64,
+            FieldType::OLAP_FIELD_TYPE_DECIMAL128I,
+            FieldType::OLAP_FIELD_TYPE_JSONB,
+            FieldType::OLAP_FIELD_TYPE_VARIANT,
+            FieldType::OLAP_FIELD_TYPE_AGG_STATE,
+            FieldType::OLAP_FIELD_TYPE_DECIMAL256,
+            FieldType::OLAP_FIELD_TYPE_IPV4,
+            FieldType::OLAP_FIELD_TYPE_IPV6,
+            FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ,
+    };
+
+    for (size_t i = 0; i < persisted_types.size(); ++i) {
+        EXPECT_EQ(static_cast<size_t>(persisted_types[i]), i + 1);
+    }
+}
+
+} // namespace
+
+} // namespace doris


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


Reply via email to