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