csun5285 commented on code in PR #55152:
URL: https://github.com/apache/doris/pull/55152#discussion_r2302744338
##########
be/src/olap/rowset/segment_v2/column_reader.cpp:
##########
@@ -1712,6 +1713,78 @@ Status RowIdColumnIteratorV2::read_by_rowids(const
rowid_t* rowids, const size_t
}
return Status::OK();
}
+
+CastColumnIterator::CastColumnIterator(std::unique_ptr<ColumnIterator>
child_iterator,
+ const vectorized::DataTypePtr& src_type,
+ const vectorized::DataTypePtr& dst_type)
+ : _child_iterator(std::move(child_iterator)), _src_type(src_type),
_dst_type(dst_type) {
+ _src_block.insert({src_type->create_column(), src_type, ""});
+ _src_block.insert({dst_type->create_column(), dst_type, ""});
Review Comment:
这个 dst type 创建的column没有用
##########
be/src/olap/rowset/segment_v2/column_reader.h:
##########
@@ -566,6 +566,53 @@ class ArrayFileColumnIterator final : public
ColumnIterator {
Status _seek_by_offsets(ordinal_t ord);
};
+class CastColumnIterator : public ColumnIterator {
+public:
+ CastColumnIterator(std::unique_ptr<ColumnIterator> child_iterator,
+ const vectorized::DataTypePtr& src_type,
+ const vectorized::DataTypePtr& dst_type);
+
+ Status init(const ColumnIteratorOptions& opts) override { return
_child_iterator->init(opts); }
+
+ Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool*
has_null) override;
+
+ Status read_by_rowids(const rowid_t* rowids, const size_t count,
+ vectorized::MutableColumnPtr& dst) override;
+
+ Status seek_to_ordinal(ordinal_t ord) override;
+
+ ordinal_t get_current_ordinal() const override {
+ return _child_iterator->get_current_ordinal();
+ }
+
+ Status get_row_ranges_by_zone_map(const AndBlockColumnPredicate*
col_predicates,
+ const std::vector<const
ColumnPredicate*>* delete_predicates,
+ RowRanges* row_ranges) override {
+ return _child_iterator->get_row_ranges_by_zone_map(col_predicates,
delete_predicates,
+ row_ranges);
+ }
+
+ Status get_row_ranges_by_bloom_filter(const AndBlockColumnPredicate*
col_predicates,
+ RowRanges* row_ranges) override {
+ return _child_iterator->get_row_ranges_by_bloom_filter(col_predicates,
row_ranges);
+ }
+
+ Status get_row_ranges_by_dict(const AndBlockColumnPredicate*
col_predicates,
+ RowRanges* row_ranges) override {
+ return _child_iterator->get_row_ranges_by_dict(col_predicates,
row_ranges);
+ }
+
+ bool is_all_dict_encoding() const override { return
_child_iterator->is_all_dict_encoding(); }
+
+private:
+ Status _perform_cast(vectorized::MutableColumnPtr& dst);
+
+ std::shared_ptr<ColumnIterator> _child_iterator;
+ vectorized::DataTypePtr _src_type;
+ vectorized::DataTypePtr _dst_type;
+ vectorized::Block _src_block;
Review Comment:
may be 仅需要一个 _src_column
##########
be/src/olap/rowset/segment_v2/column_reader.h:
##########
@@ -566,6 +566,53 @@ class ArrayFileColumnIterator final : public
ColumnIterator {
Status _seek_by_offsets(ordinal_t ord);
};
+class CastColumnIterator : public ColumnIterator {
+public:
+ CastColumnIterator(std::unique_ptr<ColumnIterator> child_iterator,
+ const vectorized::DataTypePtr& src_type,
+ const vectorized::DataTypePtr& dst_type);
+
+ Status init(const ColumnIteratorOptions& opts) override { return
_child_iterator->init(opts); }
+
+ Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool*
has_null) override;
+
+ Status read_by_rowids(const rowid_t* rowids, const size_t count,
+ vectorized::MutableColumnPtr& dst) override;
+
+ Status seek_to_ordinal(ordinal_t ord) override;
+
+ ordinal_t get_current_ordinal() const override {
+ return _child_iterator->get_current_ordinal();
+ }
+
+ Status get_row_ranges_by_zone_map(const AndBlockColumnPredicate*
col_predicates,
+ const std::vector<const
ColumnPredicate*>* delete_predicates,
+ RowRanges* row_ranges) override {
+ return _child_iterator->get_row_ranges_by_zone_map(col_predicates,
delete_predicates,
+ row_ranges);
+ }
+
+ Status get_row_ranges_by_bloom_filter(const AndBlockColumnPredicate*
col_predicates,
+ RowRanges* row_ranges) override {
+ return _child_iterator->get_row_ranges_by_bloom_filter(col_predicates,
row_ranges);
+ }
+
+ Status get_row_ranges_by_dict(const AndBlockColumnPredicate*
col_predicates,
+ RowRanges* row_ranges) override {
+ return _child_iterator->get_row_ranges_by_dict(col_predicates,
row_ranges);
+ }
+
+ bool is_all_dict_encoding() const override { return
_child_iterator->is_all_dict_encoding(); }
+
+private:
+ Status _perform_cast(vectorized::MutableColumnPtr& dst);
+
+ std::shared_ptr<ColumnIterator> _child_iterator;
Review Comment:
std::unqiue_ptr
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]