You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pa...@apache.org on 2023/06/08 09:18:02 UTC

[doris] branch master updated: [Bug](Agg-state) try to make test_agg_state stable (#20574)

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 a56449f86e [Bug](Agg-state) try to make test_agg_state stable (#20574)
a56449f86e is described below

commit a56449f86e56b6b3770c7e333584e1b1736d1977
Author: Pxl <px...@qq.com>
AuthorDate: Thu Jun 8 17:17:51 2023 +0800

    [Bug](Agg-state) try to make test_agg_state stable (#20574)
    
    try to make test_agg_state stable
---
 be/src/olap/field.h                                | 49 ++++++++++------------
 be/src/vec/data_types/data_type_factory.cpp        | 32 +-------------
 .../data/datatype_p0/agg_state/test_agg_state.out  |  1 +
 .../datatype_p0/agg_state/test_agg_state.groovy    |  4 +-
 4 files changed, 27 insertions(+), 59 deletions(-)

diff --git a/be/src/olap/field.h b/be/src/olap/field.h
index 8a23fec04b..fc9c87bfb1 100644
--- a/be/src/olap/field.h
+++ b/be/src/olap/field.h
@@ -39,9 +39,9 @@ namespace doris {
 // User can use this class to access or deal with column data in memory.
 class Field {
 public:
-    explicit Field() : _type_info(TypeInfoPtr(nullptr, nullptr)) {}
-    explicit Field(const TabletColumn& column)
+    Field(const TabletColumn& column)
             : _type_info(get_type_info(&column)),
+              _desc(column),
               _length(column.length()),
               _key_coder(get_key_coder(column.type())),
               _name(column.name()),
@@ -83,7 +83,7 @@ public:
     virtual void modify_zone_map_index(char*) const {}
 
     virtual Field* clone() const {
-        auto* local = new Field();
+        auto* local = new Field(_desc);
         this->clone(local);
         return local;
     }
@@ -204,9 +204,11 @@ public:
     void set_scale(int32_t scale) { _scale = scale; }
     int32_t get_precision() const { return _precision; }
     int32_t get_scale() const { return _scale; }
+    const TabletColumn& get_desc() const { return _desc; }
 
 protected:
     TypeInfoPtr _type_info;
+    TabletColumn _desc;
     // unit : byte
     // except for strings, other types have fixed lengths
     // Note that, the struct type itself has fixed length, but due to
@@ -259,7 +261,7 @@ private:
 
 class MapField : public Field {
 public:
-    explicit MapField(const TabletColumn& column) : Field(column) {}
+    MapField(const TabletColumn& column) : Field(column) {}
 
     // make variable_ptr memory allocate to cell_ptr as MapValue
     char* allocate_memory(char* cell_ptr, char* variable_ptr) const override {
@@ -271,7 +273,7 @@ public:
 
 class StructField : public Field {
 public:
-    explicit StructField(const TabletColumn& column) : Field(column) {}
+    StructField(const TabletColumn& column) : Field(column) {}
     char* allocate_memory(char* cell_ptr, char* variable_ptr) const override {
         auto struct_v = (StructValue*)cell_ptr;
         struct_v->set_values(reinterpret_cast<void**>(variable_ptr));
@@ -293,7 +295,7 @@ public:
 
 class ArrayField : public Field {
 public:
-    explicit ArrayField(const TabletColumn& column) : Field(column) {}
+    ArrayField(const TabletColumn& column) : Field(column) {}
 
     char* allocate_memory(char* cell_ptr, char* variable_ptr) const override {
         auto array_v = (CollectionValue*)cell_ptr;
@@ -306,8 +308,7 @@ public:
 
 class CharField : public Field {
 public:
-    explicit CharField() = default;
-    explicit CharField(const TabletColumn& column) : Field(column) {}
+    CharField(const TabletColumn& column) : Field(column) {}
 
     size_t get_variable_len() const override { return _length; }
 
@@ -320,7 +321,7 @@ public:
     }
 
     CharField* clone() const override {
-        auto* local = new CharField();
+        auto* local = new CharField(_desc);
         Field::clone(local);
         return local;
     }
@@ -367,8 +368,7 @@ public:
 
 class VarcharField : public Field {
 public:
-    explicit VarcharField() = default;
-    explicit VarcharField(const TabletColumn& column) : Field(column) {}
+    VarcharField(const TabletColumn& column) : Field(column) {}
 
     size_t get_variable_len() const override { return _length - OLAP_VARCHAR_MAX_BYTES; }
 
@@ -382,7 +382,7 @@ public:
     }
 
     VarcharField* clone() const override {
-        auto* local = new VarcharField();
+        auto* local = new VarcharField(_desc);
         Field::clone(local);
         return local;
     }
@@ -428,8 +428,7 @@ public:
 };
 class StringField : public Field {
 public:
-    explicit StringField() = default;
-    explicit StringField(const TabletColumn& column) : Field(column) {}
+    StringField(const TabletColumn& column) : Field(column) {}
 
     // minus OLAP_VARCHAR_MAX_BYTES here just for being compatible with old storage format
     char* allocate_memory(char* cell_ptr, char* variable_ptr) const override {
@@ -437,7 +436,7 @@ public:
     }
 
     StringField* clone() const override {
-        auto* local = new StringField();
+        auto* local = new StringField(_desc);
         Field::clone(local);
         return local;
     }
@@ -480,8 +479,7 @@ public:
 
 class BitmapAggField : public Field {
 public:
-    explicit BitmapAggField() = default;
-    explicit BitmapAggField(const TabletColumn& column) : Field(column) {}
+    BitmapAggField(const TabletColumn& column) : Field(column) {}
 
     char* allocate_memory(char* cell_ptr, char* variable_ptr) const override {
         auto slice = (Slice*)cell_ptr;
@@ -490,7 +488,7 @@ public:
     }
 
     BitmapAggField* clone() const override {
-        auto* local = new BitmapAggField();
+        auto* local = new BitmapAggField(_desc);
         Field::clone(local);
         return local;
     }
@@ -498,8 +496,7 @@ public:
 
 class QuantileStateAggField : public Field {
 public:
-    explicit QuantileStateAggField() = default;
-    explicit QuantileStateAggField(const TabletColumn& column) : Field(column) {}
+    QuantileStateAggField(const TabletColumn& column) : Field(column) {}
 
     char* allocate_memory(char* cell_ptr, char* variable_ptr) const override {
         auto slice = (Slice*)cell_ptr;
@@ -508,7 +505,7 @@ public:
     }
 
     QuantileStateAggField* clone() const override {
-        auto* local = new QuantileStateAggField();
+        auto* local = new QuantileStateAggField(_desc);
         Field::clone(local);
         return local;
     }
@@ -516,8 +513,7 @@ public:
 
 class AggStateField : public Field {
 public:
-    explicit AggStateField() = default;
-    explicit AggStateField(const TabletColumn& column) : Field(column) {}
+    AggStateField(const TabletColumn& column) : Field(column) {}
 
     char* allocate_memory(char* cell_ptr, char* variable_ptr) const override {
         auto slice = (Slice*)cell_ptr;
@@ -526,7 +522,7 @@ public:
     }
 
     AggStateField* clone() const override {
-        auto* local = new AggStateField();
+        auto* local = new AggStateField(_desc);
         Field::clone(local);
         return local;
     }
@@ -534,8 +530,7 @@ public:
 
 class HllAggField : public Field {
 public:
-    explicit HllAggField() = default;
-    explicit HllAggField(const TabletColumn& column) : Field(column) {}
+    HllAggField(const TabletColumn& column) : Field(column) {}
 
     char* allocate_memory(char* cell_ptr, char* variable_ptr) const override {
         auto slice = (Slice*)cell_ptr;
@@ -544,7 +539,7 @@ public:
     }
 
     HllAggField* clone() const override {
-        auto* local = new HllAggField();
+        auto* local = new HllAggField(_desc);
         Field::clone(local);
         return local;
     }
diff --git a/be/src/vec/data_types/data_type_factory.cpp b/be/src/vec/data_types/data_type_factory.cpp
index 3a2bf13ea7..366cc04c89 100644
--- a/be/src/vec/data_types/data_type_factory.cpp
+++ b/be/src/vec/data_types/data_type_factory.cpp
@@ -38,6 +38,7 @@
 #include "olap/field.h"
 #include "olap/olap_common.h"
 #include "runtime/define_primitive_type.h"
+#include "vec/common/assert_cast.h"
 #include "vec/common/uint128.h"
 #include "vec/core/types.h"
 #include "vec/data_types/data_type.h"
@@ -62,36 +63,7 @@
 namespace doris::vectorized {
 
 DataTypePtr DataTypeFactory::create_data_type(const doris::Field& col_desc) {
-    DataTypePtr nested = nullptr;
-    if (col_desc.type() == FieldType::OLAP_FIELD_TYPE_ARRAY) {
-        DCHECK(col_desc.get_sub_field_count() == 1);
-        nested = std::make_shared<DataTypeArray>(create_data_type(*col_desc.get_sub_field(0)));
-    } else if (col_desc.type() == FieldType::OLAP_FIELD_TYPE_MAP) {
-        DCHECK(col_desc.get_sub_field_count() == 2);
-        nested = std::make_shared<vectorized::DataTypeMap>(
-                create_data_type(*col_desc.get_sub_field(0)),
-                create_data_type(*col_desc.get_sub_field(1)));
-    } else if (col_desc.type() == FieldType::OLAP_FIELD_TYPE_STRUCT) {
-        DCHECK(col_desc.get_sub_field_count() >= 1);
-        size_t field_size = col_desc.get_sub_field_count();
-        DataTypes dataTypes;
-        Strings names;
-        dataTypes.reserve(field_size);
-        names.reserve(field_size);
-        for (size_t i = 0; i < field_size; i++) {
-            dataTypes.push_back(create_data_type(*col_desc.get_sub_field(i)));
-            names.push_back(col_desc.get_sub_field(i)->name());
-        }
-        nested = std::make_shared<DataTypeStruct>(dataTypes, names);
-    } else {
-        nested = _create_primitive_data_type(col_desc.type(), col_desc.get_precision(),
-                                             col_desc.get_scale());
-    }
-
-    if (col_desc.is_nullable() && nested) {
-        return std::make_shared<DataTypeNullable>(nested);
-    }
-    return nested;
+    return create_data_type(col_desc.get_desc(), col_desc.is_nullable());
 }
 
 DataTypePtr DataTypeFactory::create_data_type(const TabletColumn& col_desc, bool is_nullable) {
diff --git a/regression-test/data/datatype_p0/agg_state/test_agg_state.out b/regression-test/data/datatype_p0/agg_state/test_agg_state.out
index 5f6598304b..03b46f74a4 100644
--- a/regression-test/data/datatype_p0/agg_state/test_agg_state.out
+++ b/regression-test/data/datatype_p0/agg_state/test_agg_state.out
@@ -43,3 +43,4 @@
 
 -- !max_by_null --
 \N	\N
+
diff --git a/regression-test/suites/datatype_p0/agg_state/test_agg_state.groovy b/regression-test/suites/datatype_p0/agg_state/test_agg_state.groovy
index 829bb84cd3..142432083e 100644
--- a/regression-test/suites/datatype_p0/agg_state/test_agg_state.groovy
+++ b/regression-test/suites/datatype_p0/agg_state/test_agg_state.groovy
@@ -48,7 +48,7 @@ suite("test_agg_state") {
             )
             aggregate key (k1)
             distributed BY hash(k1) buckets 3
-            properties("replication_num" = "1","disable_auto_compaction" = "true");
+            properties("replication_num" = "1");
         """
 
     sql "insert into a_table select 1,max_by_state(1,3);"
@@ -59,7 +59,7 @@ suite("test_agg_state") {
     qt_group1 """select k1,max_by_merge(k2) from a_table group by k1 order by k1;"""
     qt_merge1 """select max_by_merge(k2) from a_table;"""
     
-    sql "insert into a_table select k1+1, max_by_state(k2,k1) from d_table;"
+    sql "insert into a_table select k1+1, max_by_state(k2,k1+10) from d_table;"
 
     qt_length2 """select k1,length(k2) from a_table order by k1;"""
     qt_group2 """select k1,max_by_merge(k2) from a_table group by k1 order by k1;"""


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org