18
18
#include " column/nullable_column.h"
19
19
#include " column/struct_column.h"
20
20
#include " storage/rowset/column_reader.h"
21
+ #include " storage/rowset/common.h"
21
22
#include " storage/rowset/scalar_column_iterator.h"
22
23
23
24
namespace starrocks {
@@ -39,7 +40,7 @@ class StructColumnIterator final : public ColumnIterator {
39
40
40
41
Status seek_to_ordinal (ordinal_t ord) override ;
41
42
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 ; }
43
44
44
45
// / for vectorized engine
45
46
Status get_row_ranges_by_zone_map (const std::vector<const ColumnPredicate*>& predicates,
@@ -55,6 +56,7 @@ class StructColumnIterator final : public ColumnIterator {
55
56
const ColumnAccessPath* _path;
56
57
57
58
std::vector<uint8_t > _access_flags;
59
+ ordinal_t _current_ordinal = 0 ;
58
60
};
59
61
60
62
StatusOr<std::unique_ptr<ColumnIterator>> create_struct_iter (ColumnReader* _reader,
@@ -117,6 +119,7 @@ Status StructColumnIterator::next_batch(size_t* n, Column* dst) {
117
119
if (_access_flags[i]) {
118
120
auto num_to_read = *n;
119
121
RETURN_IF_ERROR (_field_iters[i]->next_batch (&num_to_read, fields[i].get ()));
122
+ _current_ordinal = _field_iters[i]->get_current_ordinal ();
120
123
}
121
124
}
122
125
@@ -153,6 +156,7 @@ Status StructColumnIterator::next_batch(const SparseRange& range, Column* dst) {
153
156
if (_access_flags[i]) {
154
157
RETURN_IF_ERROR (_field_iters[i]->next_batch (range, fields[i].get ()));
155
158
row_count = fields[i]->size ();
159
+ _current_ordinal = _field_iters[i]->get_current_ordinal ();
156
160
}
157
161
}
158
162
@@ -183,6 +187,7 @@ Status StructColumnIterator::fetch_values_by_rowid(const rowid_t* rowids, size_t
183
187
for (int i = 0 ; i < _field_iters.size (); ++i) {
184
188
if (_access_flags[i]) {
185
189
RETURN_IF_ERROR (_field_iters[i]->fetch_values_by_rowid (rowids, size, fields[i].get ()));
190
+ _current_ordinal = _field_iters[i]->get_current_ordinal ();
186
191
}
187
192
}
188
193
@@ -201,6 +206,7 @@ Status StructColumnIterator::seek_to_first() {
201
206
for (auto & iter : _field_iters) {
202
207
RETURN_IF_ERROR (iter->seek_to_first ());
203
208
}
209
+ _current_ordinal = _field_iters[0 ]->get_current_ordinal ();
204
210
return Status::OK ();
205
211
}
206
212
@@ -211,6 +217,7 @@ Status StructColumnIterator::seek_to_ordinal(ordinal_t ord) {
211
217
for (auto & iter : _field_iters) {
212
218
RETURN_IF_ERROR (iter->seek_to_ordinal (ord));
213
219
}
220
+ _current_ordinal = _field_iters[0 ]->get_current_ordinal ();
214
221
return Status::OK ();
215
222
}
216
223
@@ -219,5 +226,4 @@ Status StructColumnIterator::get_row_ranges_by_zone_map(const std::vector<const
219
226
row_ranges->add ({0 , static_cast <rowid_t >(_reader->num_rows ())});
220
227
return Status::OK ();
221
228
}
222
-
223
229
} // namespace starrocks
0 commit comments