@@ -230,48 +230,15 @@ class TBlockBuilder {
230
230
++RowsCnt_;
231
231
}
232
232
233
- std::vector< TResultBatch::TPtr> Build () {
233
+ TResultBatch::TPtr Build () {
234
234
std::vector<arrow::Datum> columns;
235
235
columns.reserve (ColumnBuilders_.size ());
236
236
for (size_t i = 0 ; i < ColumnBuilders_.size (); ++i) {
237
237
columns.emplace_back (std::move (ColumnBuilders_[i]->Build (false )));
238
238
}
239
- std::vector<std::shared_ptr<TResultBatch>> blocks;
240
- int64_t offset = 0 ;
241
- std::vector<int64_t > currentChunk (columns.size ()), inChunkOffset (columns.size ());
242
- while (RowsCnt_) {
243
- int64_t max_curr_len = RowsCnt_;
244
- for (size_t i = 0 ; i < columns.size (); ++i) {
245
- if (arrow::Datum::Kind::CHUNKED_ARRAY == columns[i].kind ()) {
246
- auto & c_arr = columns[i].chunked_array ();
247
- while (currentChunk[i] < c_arr->num_chunks () && !c_arr->chunk (currentChunk[i])) {
248
- ++currentChunk[i];
249
- }
250
- YQL_ENSURE (currentChunk[i] < c_arr->num_chunks ());
251
- max_curr_len = std::min (max_curr_len, c_arr->chunk (currentChunk[i])->length () - inChunkOffset[i]);
252
- }
253
- }
254
- RowsCnt_ -= max_curr_len;
255
- decltype (columns) result_columns;
256
- result_columns.reserve (columns.size ());
257
- offset += max_curr_len;
258
- for (size_t i = 0 ; i < columns.size (); ++i) {
259
- auto & e = columns[i];
260
- if (arrow::Datum::Kind::CHUNKED_ARRAY == e.kind ()) {
261
- result_columns.emplace_back (e.chunked_array ()->chunk (currentChunk[i])->Slice (inChunkOffset[i], max_curr_len));
262
- if (max_curr_len + inChunkOffset[i] == e.chunked_array ()->chunk (currentChunk[i])->length ()) {
263
- ++currentChunk[i];
264
- inChunkOffset[i] = 0 ;
265
- } else {
266
- inChunkOffset[i] += max_curr_len;
267
- }
268
- } else {
269
- result_columns.emplace_back (e.array ()->Slice (offset - max_curr_len, max_curr_len));
270
- }
271
- }
272
- blocks.emplace_back (std::make_shared<TResultBatch>(max_curr_len, std::move (result_columns)));
273
- }
274
- return blocks;
239
+ auto res = std::make_shared<TResultBatch>(RowsCnt_, std::move (columns));
240
+ RowsCnt_ = 0 ;
241
+ return res;
275
242
}
276
243
277
244
private:
@@ -480,9 +447,7 @@ class TSource : public TNonCopyable {
480
447
}
481
448
}
482
449
if (payload) {
483
- for (auto &e: FallbackHandler (inputIdx, payload)) {
484
- Listener_->HandleFallback (std::move (e));
485
- }
450
+ Listener_->HandleFallback (FallbackHandler (inputIdx, payload));
486
451
InputDone (inputIdx);
487
452
RunRead ();
488
453
}
@@ -494,7 +459,7 @@ class TSource : public TNonCopyable {
494
459
}
495
460
}
496
461
497
- std::vector< TResultBatch::TPtr> FallbackHandler (size_t idx, NYT::TSharedRef payload) {
462
+ TResultBatch::TPtr FallbackHandler (size_t idx, NYT::TSharedRef payload) {
498
463
if (!payload.Size ()) {
499
464
return {};
500
465
}
0 commit comments