|
Apache/2.4.41 (Ubuntu) Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) server ip : 62.171.164.128 | your ip : 127.0.0.1 safemode OFF > / home / a / home / dev2.destoffenstraat.com / vendor / magento / framework / Indexer / |
Filename | /home/a/home/dev2.destoffenstraat.com/vendor/magento/framework/Indexer/BatchProvider.php |
Size | 2.13 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 21-Aug-2025 12:26 |
Last modified | 07-Jan-2021 21:08 |
Last accessed | 22-Aug-2025 21:44 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Indexer;
use \Magento\Framework\DB\Adapter\AdapterInterface;
/**
* Generator of consecutive entity ID ranges that must be handled as a batch.
*
* Some ranges may contain non existent entity IDs.
* So the code that uses the generator must check if any entities were loaded during batch load.
*/
class BatchProvider implements BatchProviderInterface
{
/**
* @inheritdoc
*/
public function getBatches(AdapterInterface $adapter, $tableName, $linkField, $batchSize)
{
$maxLinkFieldValue = $adapter->fetchOne(
$adapter->select()->from(
['entity' => $tableName],
[
'max_value' => new \Zend_Db_Expr('MAX(entity.' . $linkField . ')')
]
)
);
/** @var int $truncatedBatchSize size of the last batch that is smaller than expected batch size */
$truncatedBatchSize = $maxLinkFieldValue % $batchSize;
/** @var int $fullBatchCount count of the batches that have expected batch size */
$fullBatchCount = ($maxLinkFieldValue - $truncatedBatchSize) / $batchSize;
for ($batchIndex = 0; $batchIndex < $fullBatchCount; $batchIndex ++) {
yield ['from' => $batchIndex * $batchSize + 1, 'to' => ($batchIndex + 1) * $batchSize];
}
// return the last batch if it has smaller size
if ($truncatedBatchSize > 0) {
yield ['from' => $fullBatchCount * $batchSize + 1, 'to' => $maxLinkFieldValue];
}
}
/**
* @inheritdoc
*/
public function getBatchIds(
\Magento\Framework\DB\Adapter\AdapterInterface $connection,
\Magento\Framework\DB\Select $select,
array $batch
) {
$betweenCondition = sprintf(
'(%s BETWEEN %s AND %s)',
'entity_id',
$connection->quote($batch['from']),
$connection->quote($batch['to'])
);
$ids = $connection->fetchCol($select->where($betweenCondition));
return array_map('intval', $ids);
}
}
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Indexer;
use \Magento\Framework\DB\Adapter\AdapterInterface;
/**
* Generator of consecutive entity ID ranges that must be handled as a batch.
*
* Some ranges may contain non existent entity IDs.
* So the code that uses the generator must check if any entities were loaded during batch load.
*/
class BatchProvider implements BatchProviderInterface
{
/**
* @inheritdoc
*/
public function getBatches(AdapterInterface $adapter, $tableName, $linkField, $batchSize)
{
$maxLinkFieldValue = $adapter->fetchOne(
$adapter->select()->from(
['entity' => $tableName],
[
'max_value' => new \Zend_Db_Expr('MAX(entity.' . $linkField . ')')
]
)
);
/** @var int $truncatedBatchSize size of the last batch that is smaller than expected batch size */
$truncatedBatchSize = $maxLinkFieldValue % $batchSize;
/** @var int $fullBatchCount count of the batches that have expected batch size */
$fullBatchCount = ($maxLinkFieldValue - $truncatedBatchSize) / $batchSize;
for ($batchIndex = 0; $batchIndex < $fullBatchCount; $batchIndex ++) {
yield ['from' => $batchIndex * $batchSize + 1, 'to' => ($batchIndex + 1) * $batchSize];
}
// return the last batch if it has smaller size
if ($truncatedBatchSize > 0) {
yield ['from' => $fullBatchCount * $batchSize + 1, 'to' => $maxLinkFieldValue];
}
}
/**
* @inheritdoc
*/
public function getBatchIds(
\Magento\Framework\DB\Adapter\AdapterInterface $connection,
\Magento\Framework\DB\Select $select,
array $batch
) {
$betweenCondition = sprintf(
'(%s BETWEEN %s AND %s)',
'entity_id',
$connection->quote($batch['from']),
$connection->quote($batch['to'])
);
$ids = $connection->fetchCol($select->where($betweenCondition));
return array_map('intval', $ids);
}
}