Skip to content

Commit 34f131b

Browse files
authored
[BugFix] Fix get struct ordinal index error (backport #44608) (#44667)
Signed-off-by: Seaven <[email protected]>
1 parent 50638ea commit 34f131b

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

be/src/storage/rowset/struct_column_iterator.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "column/nullable_column.h"
1919
#include "column/struct_column.h"
2020
#include "storage/rowset/column_reader.h"
21+
#include "storage/rowset/common.h"
2122
#include "storage/rowset/scalar_column_iterator.h"
2223

2324
namespace starrocks {
@@ -39,7 +40,7 @@ class StructColumnIterator final : public ColumnIterator {
3940

4041
Status seek_to_ordinal(ordinal_t ord) override;
4142

42-
ordinal_t get_current_ordinal() const override { return _field_iters[0]->get_current_ordinal(); }
43+
ordinal_t get_current_ordinal() const override { return _current_ordinal; }
4344

4445
/// for vectorized engine
4546
Status get_row_ranges_by_zone_map(const std::vector<const ColumnPredicate*>& predicates,
@@ -55,6 +56,7 @@ class StructColumnIterator final : public ColumnIterator {
5556
const ColumnAccessPath* _path;
5657

5758
std::vector<uint8_t> _access_flags;
59+
ordinal_t _current_ordinal = 0;
5860
};
5961

6062
StatusOr<std::unique_ptr<ColumnIterator>> create_struct_iter(ColumnReader* _reader,
@@ -117,6 +119,7 @@ Status StructColumnIterator::next_batch(size_t* n, Column* dst) {
117119
if (_access_flags[i]) {
118120
auto num_to_read = *n;
119121
RETURN_IF_ERROR(_field_iters[i]->next_batch(&num_to_read, fields[i].get()));
122+
_current_ordinal = _field_iters[i]->get_current_ordinal();
120123
}
121124
}
122125

@@ -153,6 +156,7 @@ Status StructColumnIterator::next_batch(const SparseRange& range, Column* dst) {
153156
if (_access_flags[i]) {
154157
RETURN_IF_ERROR(_field_iters[i]->next_batch(range, fields[i].get()));
155158
row_count = fields[i]->size();
159+
_current_ordinal = _field_iters[i]->get_current_ordinal();
156160
}
157161
}
158162

@@ -183,6 +187,7 @@ Status StructColumnIterator::fetch_values_by_rowid(const rowid_t* rowids, size_t
183187
for (int i = 0; i < _field_iters.size(); ++i) {
184188
if (_access_flags[i]) {
185189
RETURN_IF_ERROR(_field_iters[i]->fetch_values_by_rowid(rowids, size, fields[i].get()));
190+
_current_ordinal = _field_iters[i]->get_current_ordinal();
186191
}
187192
}
188193

@@ -201,6 +206,7 @@ Status StructColumnIterator::seek_to_first() {
201206
for (auto& iter : _field_iters) {
202207
RETURN_IF_ERROR(iter->seek_to_first());
203208
}
209+
_current_ordinal = _field_iters[0]->get_current_ordinal();
204210
return Status::OK();
205211
}
206212

@@ -211,6 +217,7 @@ Status StructColumnIterator::seek_to_ordinal(ordinal_t ord) {
211217
for (auto& iter : _field_iters) {
212218
RETURN_IF_ERROR(iter->seek_to_ordinal(ord));
213219
}
220+
_current_ordinal = _field_iters[0]->get_current_ordinal();
214221
return Status::OK();
215222
}
216223

@@ -219,5 +226,4 @@ Status StructColumnIterator::get_row_ranges_by_zone_map(const std::vector<const
219226
row_ranges->add({0, static_cast<rowid_t>(_reader->num_rows())});
220227
return Status::OK();
221228
}
222-
223229
} // namespace starrocks

0 commit comments

Comments
 (0)