Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
54c78b3
Fixed duplicated ids to index by mview changelog
MateuszMesek Sep 17, 2022
26c4aa8
Changed the banned names
engcom-Charlie Jul 5, 2023
563c579
Removed banned names
engcom-Charlie Jul 5, 2023
d055eee
Rename ChangeLogBatchWalker to ChangelogBatchWalker
engcom-Charlie Jul 5, 2023
c2f3966
Rename ChangeLogBatchWalke to ChangelogBatchWalker
engcom-Charlie Jul 5, 2023
7623245
Rename ChangeLogBatchWalker to ChangelogBatchWalker
engcom-Charlie Jul 5, 2023
83eaa59
Rename ChangeLogBatchWalker to ChangelogBatchWalker
engcom-Charlie Jul 5, 2023
c6d9d87
Rename ChangeLogBatchWalker to ChangelogBatchWalker
engcom-Charlie Jul 5, 2023
9f7bd6f
Rename ChangeLogBatchWalker to ChangelogBatchWalker
engcom-Charlie Jul 5, 2023
290ed1c
Rename ChangeLogBatchWalker to ChangelogBatchWalker
engcom-Charlie Jul 5, 2023
495a30e
Rename IdsFetcher.php to IdsFetcher.php
engcom-Charlie Jul 5, 2023
9dab03d
Rename IdsSelectBuilder.php to IdsSelectBuilder.php
engcom-Charlie Jul 5, 2023
7ea63ee
Rename IdsTableBuilder.php to IdsTableBuilder.php
engcom-Charlie Jul 5, 2023
3aa3d1c
Refactored remaining files
engcom-Charlie Jul 5, 2023
1e68187
Refactored few files
engcom-Charlie Jul 5, 2023
57889b5
Rename ChangeLogBatchWalker to ChangelogBatchWalker
MateuszMesek Jul 5, 2023
879bbea
Rename ChangeLogBatchWalker to ChangelogBatchWalker
MateuszMesek Jul 5, 2023
bdade4b
Merge branch '2.4-develop' into fixed-duplicated-ids-to-index-by-mvie…
engcom-Echo Aug 14, 2023
b5668b0
Merge branch '2.4-develop' into fixed-duplicated-ids-to-index-by-mvie…
engcom-Echo Aug 18, 2023
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php declare(strict_types=1);
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\Eav\Model\Mview\ChangelogBatchWalker;

use Magento\Framework\App\ResourceConnection;
use Magento\Framework\DB\Select;
use Magento\Framework\Mview\View\ChangelogBatchWalker\IdsFetcherInterface;

class IdsFetcher implements IdsFetcherInterface
{
/**
* @var \Magento\Framework\App\ResourceConnection
*/
private ResourceConnection $resourceConnection;

/**
* @param \Magento\Framework\App\ResourceConnection $resourceConnection
*/
public function __construct(
ResourceConnection $resourceConnection
) {
$this->resourceConnection = $resourceConnection;
}

/**
* @inheritdoc
*/
public function fetch(Select $select): array
{
return $this->resourceConnection->getConnection()->fetchAll($select);
}
}
Original file line number Diff line number Diff line change
@@ -1,47 +1,66 @@
<?php
<?php declare(strict_types=1);
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\Eav\Model\Mview;
namespace Magento\Eav\Model\Mview\ChangelogBatchWalker;

use Magento\Framework\App\ResourceConnection;
use Magento\Framework\DB\Select;
use Magento\Framework\DB\Sql\Expression;
use Magento\Framework\Mview\View\ChangeLogBatchWalkerInterface;
use Magento\Framework\Mview\View\ChangelogBatchWalker\IdsSelectBuilderInterface;
use Magento\Framework\Mview\View\ChangelogInterface;

/**
* Class BatchIterator
*/
class ChangeLogBatchWalker implements ChangeLogBatchWalkerInterface
class IdsSelectBuilder implements IdsSelectBuilderInterface
{
private const GROUP_CONCAT_MAX_VARIABLE = 'group_concat_max_len';
/** ID is defined as small int. Default size of it is 5 */
private const DEFAULT_ID_SIZE = 5;

/**
* @var ResourceConnection
* @var \Magento\Framework\App\ResourceConnection
*/
private $resourceConnection;

private ResourceConnection $resourceConnection;
/**
* @var array
*/
private $entityTypeCodes;
private array $entityTypeCodes;

/**
* @param ResourceConnection $resourceConnection
* @param \Magento\Framework\App\ResourceConnection $resourceConnection
* @param array $entityTypeCodes
*/
public function __construct(
ResourceConnection $resourceConnection,
array $entityTypeCodes = []
array $entityTypeCodes = []
) {
$this->resourceConnection = $resourceConnection;
$this->entityTypeCodes = $entityTypeCodes;
}

/**
* @inheritdoc
*/
public function build(ChangelogInterface $changelog): Select
{
$numberOfAttributes = $this->calculateEavAttributeSize($changelog);
$this->setGroupConcatMax($numberOfAttributes);

$changelogTableName = $this->resourceConnection->getTableName($changelog->getName());

$connection = $this->resourceConnection->getConnection();

$columns = [
$changelog->getColumnName(),
'attribute_ids' => new Expression('GROUP_CONCAT(attribute_id)'),
'store_id'
];

return $connection->select()
->from($changelogTableName, $columns)
->group([$changelog->getColumnName(), 'store_id']);
}

/**
* Calculate EAV attributes size
*
Expand All @@ -54,7 +73,7 @@ private function calculateEavAttributeSize(ChangelogInterface $changelog): int
$connection = $this->resourceConnection->getConnection();

if (!isset($this->entityTypeCodes[$changelog->getViewId()])) {
throw new \Exception('Entity type for view was not defined');
throw new \InvalidArgumentException('Entity type for view was not defined');
}

$select = $connection->select();
Expand All @@ -63,12 +82,12 @@ private function calculateEavAttributeSize(ChangelogInterface $changelog): int
new Expression('COUNT(*)')
)
->joinInner(
['type' => $connection->getTableName('eav_entity_type')],
['type' => $connection->getTableName('eav_entity_type')],
'type.entity_type_id=eav_attribute.entity_type_id'
)
->where('type.entity_type_code = ?', $this->entityTypeCodes[$changelog->getViewId()]);

return (int) $connection->fetchOne($select);
return (int)$connection->fetchOne($select);
}

/**
Expand All @@ -87,34 +106,4 @@ private function setGroupConcatMax(int $numberOfAttributes): void
$numberOfAttributes * (self::DEFAULT_ID_SIZE + 1)
));
}

/**
* @inheritdoc
* @throws \Exception
*/
public function walk(ChangelogInterface $changelog, int $fromVersionId, int $toVersion, int $batchSize)
{
$connection = $this->resourceConnection->getConnection();
$numberOfAttributes = $this->calculateEavAttributeSize($changelog);
$this->setGroupConcatMax($numberOfAttributes);
$select = $connection->select()->distinct(true)
->where(
'version_id > ?',
(int) $fromVersionId
)
->where(
'version_id <= ?',
$toVersion
)
->group([$changelog->getColumnName(), 'store_id'])
->limit($batchSize);

$columns = [
$changelog->getColumnName(),
'attribute_ids' => new Expression('GROUP_CONCAT(attribute_id)'),
'store_id'
];
$select->from($changelog->getName(), $columns);
return $connection->fetchAll($select);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php declare(strict_types=1);
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\Eav\Model\Mview\ChangelogBatchWalker;

use Magento\Framework\DB\Adapter\AdapterInterface;
use Magento\Framework\DB\Ddl\Table;
use Magento\Framework\Mview\View\ChangelogBatchWalker\IdsTableBuilder as BaseIdsTableBuilder;
use Magento\Framework\Mview\View\ChangelogInterface;

class IdsTableBuilder extends BaseIdsTableBuilder
{
/**
* @inheritdoc
*/
public function build(ChangelogInterface $changelog): Table
{
$table = parent::build($changelog);
$table->addColumn(
'attribute_ids',
Table::TYPE_TEXT,
null,
['unsigned' => true, 'nullable' => false],
'Attribute IDs'
);
$table->addColumn(
'store_id',
Table::TYPE_INTEGER,
null,
['unsigned' => true, 'nullable' => false],
'Store ID'
);
$table->addIndex(
self::INDEX_NAME_UNIQUE,
[
$changelog->getColumnName(),
'attribute_ids',
'store_id'
],
[
'type' => AdapterInterface::INDEX_TYPE_UNIQUE
]
);

return $table;
}
}
12 changes: 12 additions & 0 deletions app/code/Magento/Eav/etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -221,4 +221,16 @@
<argument name="cache" xsi:type="object">configured_eav_cache</argument>
</arguments>
</type>
<virtualType name="Magento\Eav\Model\Mview\ChangelogBatchWalker" type="Magento\Framework\Mview\View\ChangelogBatchWalker">
<arguments>
<argument name="idsContext" xsi:type="object">Magento\Eav\Model\Mview\ChangelogBatchWalker\IdsContext</argument>
</arguments>
</virtualType>
<virtualType name="Magento\Eav\Model\Mview\ChangelogBatchWalker\IdsContext" type="Magento\Framework\Mview\View\ChangelogBatchWalker\IdsContext">
<arguments>
<argument name="tableBuilder" xsi:type="object">Magento\Eav\Model\Mview\ChangelogBatchWalker\IdsTableBuilder</argument>
<argument name="selectBuilder" xsi:type="object">Magento\Eav\Model\Mview\ChangelogBatchWalker\IdsSelectBuilder</argument>
<argument name="fetcher" xsi:type="object">Magento\Eav\Model\Mview\ChangelogBatchWalker\IdsFetcher</argument>
</arguments>
</virtualType>
</config>
4 changes: 2 additions & 2 deletions lib/internal/Magento/Framework/Mview/Config/Converter.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
namespace Magento\Framework\Mview\Config;

use Magento\Framework\Mview\View\AdditionalColumnsProcessor\DefaultProcessor;
use Magento\Framework\Mview\View\ChangeLogBatchWalker;
use Magento\Framework\Mview\View\ChangelogBatchWalker;
use Magento\Framework\Mview\View\SubscriptionInterface;

class Converter implements \Magento\Framework\Config\ConverterInterface
Expand All @@ -27,7 +27,7 @@ class Converter implements \Magento\Framework\Config\ConverterInterface
*/
public function __construct(
string $defaultProcessor = DefaultProcessor::class,
string $defaultIterator = ChangeLogBatchWalker::class
string $defaultIterator = ChangelogBatchWalker::class
) {
$this->defaultProcessor = $defaultProcessor;
$this->defaultIterator = $defaultIterator;
Expand Down
Loading