| 588 | } |
| 589 | |
| 590 | void NodeBatchInsert::copyToNodeGroup(transaction::Transaction* transaction, |
| 591 | MemoryManager* mm) const { |
| 592 | auto numAppendedTuples = 0ul; |
| 593 | const auto nodeLocalState = dynamic_cast_checked<NodeBatchInsertLocalState*>(localState.get()); |
| 594 | const auto numTuplesToAppend = nodeLocalState->columnState->getSelVector().getSelSize(); |
| 595 | while (numAppendedTuples < numTuplesToAppend) { |
| 596 | const auto numAppendedTuplesInNodeGroup = |
| 597 | nodeLocalState->chunkedGroup->append(nodeLocalState->columnVectors, numAppendedTuples, |
| 598 | numTuplesToAppend - numAppendedTuples); |
| 599 | numAppendedTuples += numAppendedTuplesInNodeGroup; |
| 600 | if (nodeLocalState->chunkedGroup->isFull()) { |
| 601 | writeAndResetNodeGroup(transaction, nodeLocalState->chunkedGroup, |
| 602 | nodeLocalState->localIndexBuilder, mm, *nodeLocalState->optimisticAllocator); |
| 603 | } |
| 604 | } |
| 605 | const auto nodeInfo = info->ptrCast<NodeBatchInsertInfo>(); |
| 606 | nodeLocalState->stats.update(nodeLocalState->columnVectors, nodeInfo->outputDataColumns.size()); |
| 607 | sharedState->incrementNumRows(numAppendedTuples); |
| 608 | } |
| 609 | |
| 610 | NodeBatchInsertErrorHandler NodeBatchInsert::createErrorHandler(ExecutionContext* context) const { |
| 611 | const auto nodeSharedState = |