[refractor](schema) refractor schema::get_predicate_column_ptr (#16043)

* refractor Schema::get_predicate_column_ptr

* update code format

Co-authored-by: cambyzju <zhuxiaoli01@baidu.com>
This commit is contained in:
camby
2023-01-18 17:47:37 +08:00
committed by GitHub
parent 5265f5142f
commit bac2adfc74
3 changed files with 67 additions and 67 deletions

View File

@ -1294,8 +1294,7 @@ Status SegmentIterator::next_batch(vectorized::Block* block) {
auto cid = _schema.column_id(i);
auto column_desc = _schema.column(cid);
if (_is_pred_column[cid]) {
_current_return_columns[cid] =
Schema::get_predicate_column_nullable_ptr(*column_desc);
_current_return_columns[cid] = Schema::get_predicate_column_ptr(*column_desc);
_current_return_columns[cid]->set_rowset_segment_id(
{_segment->rowset_id(), _segment->id()});
_current_return_columns[cid]->reserve(_opts.block_row_max);

View File

@ -117,12 +117,75 @@ vectorized::IColumn::MutablePtr Schema::get_column_by_field(const Field& field)
return get_data_type_ptr(field)->create_column();
}
vectorized::IColumn::MutablePtr Schema::get_predicate_column_nullable_ptr(const Field& field) {
vectorized::IColumn::MutablePtr Schema::get_predicate_column_ptr(const Field& field) {
if (UNLIKELY(field.type() == OLAP_FIELD_TYPE_ARRAY)) {
return get_data_type_ptr(field)->create_column();
}
vectorized::IColumn::MutablePtr ptr = Schema::get_predicate_column_ptr(field.type());
vectorized::IColumn::MutablePtr ptr = nullptr;
switch (field.type()) {
case OLAP_FIELD_TYPE_BOOL:
ptr = doris::vectorized::PredicateColumnType<TYPE_BOOLEAN>::create();
break;
case OLAP_FIELD_TYPE_TINYINT:
ptr = doris::vectorized::PredicateColumnType<TYPE_TINYINT>::create();
break;
case OLAP_FIELD_TYPE_SMALLINT:
ptr = doris::vectorized::PredicateColumnType<TYPE_SMALLINT>::create();
break;
case OLAP_FIELD_TYPE_INT:
ptr = doris::vectorized::PredicateColumnType<TYPE_INT>::create();
break;
case OLAP_FIELD_TYPE_FLOAT:
ptr = doris::vectorized::PredicateColumnType<TYPE_FLOAT>::create();
break;
case OLAP_FIELD_TYPE_DOUBLE:
ptr = doris::vectorized::PredicateColumnType<TYPE_DOUBLE>::create();
break;
case OLAP_FIELD_TYPE_BIGINT:
ptr = doris::vectorized::PredicateColumnType<TYPE_BIGINT>::create();
break;
case OLAP_FIELD_TYPE_LARGEINT:
ptr = doris::vectorized::PredicateColumnType<TYPE_LARGEINT>::create();
break;
case OLAP_FIELD_TYPE_DATE:
ptr = doris::vectorized::PredicateColumnType<TYPE_DATE>::create();
break;
case OLAP_FIELD_TYPE_DATEV2:
ptr = doris::vectorized::PredicateColumnType<TYPE_DATEV2>::create();
break;
case OLAP_FIELD_TYPE_DATETIMEV2:
ptr = doris::vectorized::PredicateColumnType<TYPE_DATETIMEV2>::create();
break;
case OLAP_FIELD_TYPE_DATETIME:
ptr = doris::vectorized::PredicateColumnType<TYPE_DATETIME>::create();
break;
case OLAP_FIELD_TYPE_CHAR:
case OLAP_FIELD_TYPE_VARCHAR:
case OLAP_FIELD_TYPE_STRING:
if (config::enable_low_cardinality_optimize) {
ptr = doris::vectorized::ColumnDictionary<doris::vectorized::Int32>::create(
field.type());
} else {
ptr = doris::vectorized::PredicateColumnType<TYPE_STRING>::create();
}
break;
case OLAP_FIELD_TYPE_DECIMAL:
ptr = doris::vectorized::PredicateColumnType<TYPE_DECIMALV2>::create();
break;
case OLAP_FIELD_TYPE_DECIMAL32:
ptr = doris::vectorized::PredicateColumnType<TYPE_DECIMAL32>::create();
break;
case OLAP_FIELD_TYPE_DECIMAL64:
ptr = doris::vectorized::PredicateColumnType<TYPE_DECIMAL64>::create();
break;
case OLAP_FIELD_TYPE_DECIMAL128I:
ptr = doris::vectorized::PredicateColumnType<TYPE_DECIMAL128I>::create();
break;
default:
LOG(FATAL) << "Unexpected type when choosing predicate column, type=" << field.type();
}
if (field.is_nullable()) {
return doris::vectorized::ColumnNullable::create(std::move(ptr),
doris::vectorized::ColumnUInt8::create());
@ -130,64 +193,4 @@ vectorized::IColumn::MutablePtr Schema::get_predicate_column_nullable_ptr(const
return ptr;
}
vectorized::IColumn::MutablePtr Schema::get_predicate_column_ptr(FieldType type) {
switch (type) {
case OLAP_FIELD_TYPE_BOOL:
return doris::vectorized::PredicateColumnType<TYPE_BOOLEAN>::create();
case OLAP_FIELD_TYPE_TINYINT:
return doris::vectorized::PredicateColumnType<TYPE_TINYINT>::create();
case OLAP_FIELD_TYPE_SMALLINT:
return doris::vectorized::PredicateColumnType<TYPE_SMALLINT>::create();
case OLAP_FIELD_TYPE_INT:
return doris::vectorized::PredicateColumnType<TYPE_INT>::create();
case OLAP_FIELD_TYPE_FLOAT:
return doris::vectorized::PredicateColumnType<TYPE_FLOAT>::create();
case OLAP_FIELD_TYPE_DOUBLE:
return doris::vectorized::PredicateColumnType<TYPE_DOUBLE>::create();
case OLAP_FIELD_TYPE_BIGINT:
return doris::vectorized::PredicateColumnType<TYPE_BIGINT>::create();
case OLAP_FIELD_TYPE_LARGEINT:
return doris::vectorized::PredicateColumnType<TYPE_LARGEINT>::create();
case OLAP_FIELD_TYPE_DATE:
return doris::vectorized::PredicateColumnType<TYPE_DATE>::create();
case OLAP_FIELD_TYPE_DATEV2:
return doris::vectorized::PredicateColumnType<TYPE_DATEV2>::create();
case OLAP_FIELD_TYPE_DATETIMEV2:
return doris::vectorized::PredicateColumnType<TYPE_DATETIMEV2>::create();
case OLAP_FIELD_TYPE_DATETIME:
return doris::vectorized::PredicateColumnType<TYPE_DATETIME>::create();
case OLAP_FIELD_TYPE_CHAR:
case OLAP_FIELD_TYPE_VARCHAR:
case OLAP_FIELD_TYPE_STRING:
if (config::enable_low_cardinality_optimize) {
return doris::vectorized::ColumnDictionary<doris::vectorized::Int32>::create(type);
}
return doris::vectorized::PredicateColumnType<TYPE_STRING>::create();
case OLAP_FIELD_TYPE_DECIMAL:
return doris::vectorized::PredicateColumnType<TYPE_DECIMALV2>::create();
case OLAP_FIELD_TYPE_DECIMAL32:
return doris::vectorized::PredicateColumnType<TYPE_DECIMAL32>::create();
case OLAP_FIELD_TYPE_DECIMAL64:
return doris::vectorized::PredicateColumnType<TYPE_DECIMAL64>::create();
case OLAP_FIELD_TYPE_DECIMAL128I:
return doris::vectorized::PredicateColumnType<TYPE_DECIMAL128I>::create();
default:
LOG(FATAL) << "Unexpected type when choosing predicate column, type=" << type;
}
}
} // namespace doris

View File

@ -112,9 +112,7 @@ public:
static vectorized::IColumn::MutablePtr get_column_by_field(const Field& field);
static vectorized::IColumn::MutablePtr get_predicate_column_ptr(FieldType type);
static vectorized::IColumn::MutablePtr get_predicate_column_nullable_ptr(const Field& field);
static vectorized::IColumn::MutablePtr get_predicate_column_ptr(const Field& field);
const std::vector<Field*>& columns() const { return _cols; }