/
githubmirror
/
magento2
Обзор
Документация
Войти
/
githubmirror
/
magento2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
2.4-develop
setup/src/Magento/Setup/Model/BatchInsert.php
124 строки
3 KB
Alexandra Zota
ACP2E-4019: CE copyright updates for 2.4.9-beta1
22 окт 2025, 11:23
22 окт 2025, 11:23
6c2f6e6
Код
Авторство
О чём код?
<?php /** * Copyright 2017 Adobe * All Rights Reserved. */ namespace Magento\Setup\Model; /** * Encapsulate logic that performs batch insert into table */ class BatchInsert { /** * @var \Magento\Framework\App\ResourceConnection */ private $resourceConnection; /** * @var \Magento\Framework\DB\Adapter\AdapterInterface */ private $dbConnection; /** * @var string */ private $insertIntoTable; /** * @var int */ private $batchSize; /** * @var \SplFixedArray */ private $dataStorage; /** * @var int */ private $currentStorageIndex = 0; /** * @param \Magento\Framework\App\ResourceConnection $resourceConnection * @param string $insertIntoTable * @param int $batchSize */ public function __construct( \Magento\Framework\App\ResourceConnection $resourceConnection, $insertIntoTable, $batchSize ) { $this->resourceConnection = $resourceConnection; $this->insertIntoTable = $insertIntoTable; $this->batchSize = $batchSize; $this->dataStorage = new \SplFixedArray($batchSize); } /** * Save data to $dataStorage and automatically flush it to DB when storage size becomes equal to $batchSize * * @param array $dataToInsert * @return void */ public function insert(array $dataToInsert) { $this->dataStorage[$this->currentStorageIndex] = $dataToInsert; $this->currentStorageIndex++; if ($this->currentStorageIndex >= $this->batchSize) { $this->flush(); } } /** * Insert all data form $dataStorage to DB and clear $dataStorage * * @return void */ public function flush() { if ($this->currentStorageIndex > 0) { if ($this->currentStorageIndex < $this->batchSize) { $this->dataStorage->setSize($this->currentStorageIndex); } if (method_exists($this->dataStorage, 'getIterator')) { // PHP > 8.0 $this->dataStorage->getIterator()->rewind(); $columnsToInsert = array_keys($this->dataStorage->getIterator()->current()); } else { // PHP 7.4. compatibility $this->dataStorage->rewind(); $columnsToInsert = array_keys($this->dataStorage->current()); } $this->getDbConnection() ->insertArray( $this->insertIntoTable, $columnsToInsert, $this->dataStorage->toArray() ); $this->dataStorage = new \SplFixedArray($this->batchSize); $this->currentStorageIndex = 0; } } /** * Retrieve current connection to DB * * Method is required to eliminate multiple calls to ResourceConnection class * * @return \Magento\Framework\DB\Adapter\AdapterInterface */ private function getDbConnection() { if ($this->dbConnection === null) { $this->dbConnection = $this->resourceConnection->getConnection(); } return $this->dbConnection; } }