Skip to content

Commit 9d3c35b

Browse files
csun5285claude
andauthored
[refactor](be) Derive get_storage_field_type from primitive type (#64341)
1. Make IDataType::get_storage_field_type() derive the field type from the primitive type 2. SegmentIterator::_is_char_type (and _vec_init_char_column_id) is deleted Issue Number: close #xxx Related PR: #xxx Problem Summary: ### Release note None ### Check List (For Author) - Test <!-- At least one of them must be included. --> - [ ] Regression test - [ ] Unit Test - [ ] Manual test (add detailed scripts or steps below) - [ ] No need to test or manual test. Explain why: - [x] This is a refactor/code format and no logic has been changed. - [ ] Previous test can cover this change. - [ ] No code files have been changed. - [ ] Other reason <!-- Add your reason? --> - Behavior changed: - [ ] No. - [ ] Yes. <!-- Explain the behavior change --> - Does this need documentation? - [ ] No. - [ ] Yes. <!-- Add document PR link here. eg: apache/doris-website#1214 --> ### Check List (For Reviewer who merge this PR) - [ ] Confirm the release note - [ ] Confirm test cases - [ ] Confirm document - [ ] Add branch pick label <!-- Add branch pick label that this PR should merge into --> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 7f5b6f5 commit 9d3c35b

20 files changed

Lines changed: 9 additions & 133 deletions

be/src/core/data_type/data_type.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "core/data_type/define_primitive_type.h"
3535
#include "core/data_type_serde/data_type_serde.h"
3636
#include "core/field.h"
37+
#include "storage/tablet/tablet_schema.h"
3738

3839
namespace doris {
3940
class BufferWritable;
@@ -45,6 +46,10 @@ IDataType::IDataType() = default;
4546

4647
IDataType::~IDataType() = default;
4748

49+
doris::FieldType IDataType::get_storage_field_type() const {
50+
return TabletColumn::get_field_type_by_type(get_primitive_type());
51+
}
52+
4853
String IDataType::get_name() const {
4954
return do_get_name();
5055
}

be/src/core/data_type/data_type.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ class IDataType : private boost::noncopyable {
8383
virtual const std::string get_family_name() const = 0;
8484
virtual PrimitiveType get_primitive_type() const = 0;
8585

86-
virtual doris::FieldType get_storage_field_type() const = 0;
86+
// Derived from the primitive type by default (e.g. TYPE_CHAR -> OLAP_FIELD_TYPE_CHAR).
87+
// Types without a direct 1:1 mapping override this.
88+
virtual doris::FieldType get_storage_field_type() const;
8789
std::string to_string(const IColumn& column, size_t row_num,
8890
const DataTypeSerDe::FormatOptions& options) const;
8991
// get specific serializer or deserializer

be/src/core/data_type/data_type_agg_state.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,6 @@ class DataTypeAggState : public DataTypeString {
8585

8686
PrimitiveType get_primitive_type() const override { return PrimitiveType::TYPE_AGG_STATE; }
8787

88-
doris::FieldType get_storage_field_type() const override {
89-
return doris::FieldType::OLAP_FIELD_TYPE_AGG_STATE;
90-
}
91-
9288
const DataTypes& get_sub_types() const { return _sub_types; }
9389

9490
void to_pb_column_meta(PColumnMeta* col_meta) const override {

be/src/core/data_type/data_type_array.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,6 @@ class DataTypeArray final : public IDataType {
5959

6060
PrimitiveType get_primitive_type() const override { return PrimitiveType::TYPE_ARRAY; }
6161

62-
doris::FieldType get_storage_field_type() const override {
63-
return doris::FieldType::OLAP_FIELD_TYPE_ARRAY;
64-
}
65-
6662
std::string do_get_name() const override { return "Array(" + nested->get_name() + ")"; }
6763

6864
const std::string get_family_name() const override { return "Array"; }

be/src/core/data_type/data_type_bitmap.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,6 @@ class DataTypeBitMap : public IDataType {
5454
const std::string get_family_name() const override { return "BitMap"; }
5555
PrimitiveType get_primitive_type() const override { return PrimitiveType::TYPE_BITMAP; }
5656

57-
doris::FieldType get_storage_field_type() const override {
58-
return doris::FieldType::OLAP_FIELD_TYPE_BITMAP;
59-
}
60-
6157
int64_t get_uncompressed_serialized_bytes(const IColumn& column,
6258
int be_exec_version) const override;
6359
char* serialize(const IColumn& column, char* buf, int be_exec_version) const override;

be/src/core/data_type/data_type_date.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ class DataTypeDate final : public DataTypeNumberBase<PrimitiveType::TYPE_DATE> {
4242
static constexpr PrimitiveType PType = TYPE_DATE;
4343
PrimitiveType get_primitive_type() const override { return PrimitiveType::TYPE_DATE; }
4444

45-
doris::FieldType get_storage_field_type() const override {
46-
return doris::FieldType::OLAP_FIELD_TYPE_DATE;
47-
}
4845
const std::string get_family_name() const override { return "Date"; }
4946
std::string do_get_name() const override { return "Date"; }
5047

be/src/core/data_type/data_type_date_or_datetime_v2.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,6 @@ class DataTypeDateV2 final : public DataTypeNumberBase<PrimitiveType::TYPE_DATEV
5454
static constexpr PrimitiveType PType = TYPE_DATEV2;
5555
PrimitiveType get_primitive_type() const override { return PrimitiveType::TYPE_DATEV2; }
5656

57-
doris::FieldType get_storage_field_type() const override {
58-
return doris::FieldType::OLAP_FIELD_TYPE_DATEV2;
59-
}
6057
const std::string get_family_name() const override { return "DateV2"; }
6158
std::string do_get_name() const override { return "DateV2"; }
6259

@@ -111,9 +108,6 @@ class DataTypeDateTimeV2 final : public DataTypeNumberBase<PrimitiveType::TYPE_D
111108
scalar_type->set_scale(_scale);
112109
}
113110

114-
doris::FieldType get_storage_field_type() const override {
115-
return doris::FieldType::OLAP_FIELD_TYPE_DATETIMEV2;
116-
}
117111
const std::string get_family_name() const override { return "DateTimeV2"; }
118112
std::string do_get_name() const override {
119113
return "DateTimeV2(" + std::to_string(_scale) + ")";

be/src/core/data_type/data_type_date_time.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,6 @@ class DataTypeDateTime final : public DataTypeNumberBase<PrimitiveType::TYPE_DAT
6969
std::string do_get_name() const override { return "DateTime"; }
7070
PrimitiveType get_primitive_type() const override { return PrimitiveType::TYPE_DATETIME; }
7171

72-
doris::FieldType get_storage_field_type() const override {
73-
return doris::FieldType::OLAP_FIELD_TYPE_DATETIME;
74-
}
75-
7672
bool equals(const IDataType& rhs) const override;
7773
#ifdef BE_TEST
7874
/// TODO: remove this in the future

be/src/core/data_type/data_type_hll.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,6 @@ class DataTypeHLL : public IDataType {
5454

5555
PrimitiveType get_primitive_type() const override { return PrimitiveType::TYPE_HLL; }
5656

57-
doris::FieldType get_storage_field_type() const override {
58-
return doris::FieldType::OLAP_FIELD_TYPE_HLL;
59-
}
60-
6157
int64_t get_uncompressed_serialized_bytes(const IColumn& column,
6258
int be_exec_version) const override;
6359
char* serialize(const IColumn& column, char* buf, int be_exec_version) const override;

be/src/core/data_type/data_type_ipv4.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,6 @@ class DataTypeIPv4 final : public DataTypeNumberBase<PrimitiveType::TYPE_IPV4> {
4545
const std::string get_family_name() const override { return "IPv4"; }
4646
std::string do_get_name() const override { return "IPv4"; }
4747

48-
doris::FieldType get_storage_field_type() const override {
49-
return doris::FieldType::OLAP_FIELD_TYPE_IPV4;
50-
}
51-
5248
bool equals(const IDataType& rhs) const override;
5349

5450
Field get_field(const TExprNode& node) const override;

0 commit comments

Comments
 (0)