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); } }