@@ -368,7 +368,7 @@ class TDqOutputHashPartitionConsumerBlock : public IDqOutputConsumer {
368
368
YQL_ENSURE (false , " Consume() called on wide block stream" );
369
369
}
370
370
371
- void WideConsume (TUnboxedValue* values, ui32 count) final {
371
+ void WideConsume (TUnboxedValue values[] , ui32 count) final {
372
372
YQL_ENSURE (!IsWaitingFlag_);
373
373
YQL_ENSURE (count == OutputWidth_);
374
374
@@ -379,7 +379,7 @@ class TDqOutputHashPartitionConsumerBlock : public IDqOutputConsumer {
379
379
380
380
TVector<const arrow::Datum*> datums;
381
381
datums.reserve (count - 1 );
382
- for (ui32 i = 0 ; i + 1 < count; ++i) {
382
+ for (ui32 i = 0 ; i < count - 1 ; ++i) {
383
383
datums.push_back (&TArrowBlock::From (values[i]).GetDatum ());
384
384
}
385
385
@@ -404,9 +404,10 @@ class TDqOutputHashPartitionConsumerBlock : public IDqOutputConsumer {
404
404
if (src->is_scalar ()) {
405
405
output.emplace_back (*src);
406
406
} else {
407
- IArrayBuilder::TArrayDataItem dataItem;
408
- dataItem.Data = src->array ().get ();
409
- dataItem.StartOffset = 0 ;
407
+ IArrayBuilder::TArrayDataItem dataItem {
408
+ .Data = src->array ().get (),
409
+ .StartOffset = 0 ,
410
+ };
410
411
Builders_[j]->AddMany (&dataItem, 1 , indexes, outputBlockLen);
411
412
output.emplace_back (Builders_[j]->Build (true ));
412
413
}
@@ -418,11 +419,14 @@ class TDqOutputHashPartitionConsumerBlock : public IDqOutputConsumer {
418
419
}
419
420
420
421
void DoConsume (TVector<std::unique_ptr<TArgsDechunker>>&& outputData) const {
422
+ Y_ENSURE (outputData.size () == Outputs_.size ());
423
+
421
424
while (!outputData.empty ()) {
422
425
bool hasData = false ;
423
426
for (size_t i = 0 ; i < Outputs_.size (); ++i) {
424
427
if (Outputs_[i]->IsFull ()) {
425
428
IsWaitingFlag_ = true ;
429
+ Y_ENSURE (OutputData_.empty ());
426
430
OutputData_ = std::move (outputData);
427
431
return ;
428
432
}
@@ -474,7 +478,7 @@ class TDqOutputHashPartitionConsumerBlock : public IDqOutputConsumer {
474
478
return !IsWaitingFlag_;
475
479
}
476
480
477
- size_t GetHashPartitionIndex (const arrow::Datum** values, ui64 blockIndex) {
481
+ size_t GetHashPartitionIndex (const arrow::Datum* values[] , ui64 blockIndex) {
478
482
ui64 hash = 0 ;
479
483
for (size_t keyId = 0 ; keyId < KeyColumns_.size (); keyId++) {
480
484
const ui32 columnIndex = KeyColumns_[keyId].Index ;
@@ -512,7 +516,7 @@ class TDqOutputHashPartitionConsumerBlock : public IDqOutputConsumer {
512
516
if (blockType->GetShape () == NMiniKQL::TBlockType::EShape::Many) {
513
517
auto itemType = blockType->GetItemType ();
514
518
YQL_ENSURE (!itemType->IsPg (), " pg types are not supported yet" );
515
- Builders_.emplace_back (MakeArrayBuilder (helper, itemType, *NYql::NUdf::GetYqlMemoryPool (), maxBlockLen, nullptr ));
519
+ Builders_.emplace_back (MakeArrayBuilder (helper, itemType, *NYql::NUdf::GetYqlMemoryPool (), maxBlockLen, nullptr , {. MinFillPercentage = 100 } ));
516
520
} else {
517
521
Builders_.emplace_back ();
518
522
}
0 commit comments