Skip to content

Commit d4dbda3

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-97202' into 2.2-develop-pr20
2 parents 6ae6abb + 9d94947 commit d4dbda3

File tree

2 files changed

+41
-31
lines changed

2 files changed

+41
-31
lines changed

app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,15 @@ protected function prepareSelect(array $data)
7979
}
8080

8181
/**
82-
* {@inheritdoc}
82+
* @inheritdoc
8383
*/
8484
protected function doFindAllByData(array $data)
8585
{
8686
return $this->connection->fetchAll($this->prepareSelect($data));
8787
}
8888

8989
/**
90-
* {@inheritdoc}
90+
* @inheritdoc
9191
*/
9292
protected function doFindOneByData(array $data)
9393
{
@@ -152,26 +152,22 @@ private function deleteOldUrls(array $urls)
152152
$oldUrlsSelect->from(
153153
$this->resource->getTableName(self::TABLE_NAME)
154154
);
155-
/** @var UrlRewrite $url */
156-
foreach ($urls as $url) {
157-
$oldUrlsSelect->orWhere(
158-
$this->connection->quoteIdentifier(
159-
UrlRewrite::ENTITY_TYPE
160-
) . ' = ?',
161-
$url->getEntityType()
162-
);
163-
$oldUrlsSelect->where(
164-
$this->connection->quoteIdentifier(
165-
UrlRewrite::ENTITY_ID
166-
) . ' = ?',
167-
$url->getEntityId()
168-
);
169-
$oldUrlsSelect->where(
170-
$this->connection->quoteIdentifier(
171-
UrlRewrite::STORE_ID
172-
) . ' = ?',
173-
$url->getStoreId()
174-
);
155+
156+
$uniqueEntities = $this->prepareUniqueEntities($urls);
157+
foreach ($uniqueEntities as $storeId => $entityTypes) {
158+
foreach ($entityTypes as $entityType => $entities) {
159+
$oldUrlsSelect->orWhere(
160+
$this->connection->quoteIdentifier(
161+
UrlRewrite::STORE_ID
162+
) . ' = ' . $this->connection->quote($storeId, 'INTEGER') .
163+
' AND ' . $this->connection->quoteIdentifier(
164+
UrlRewrite::ENTITY_ID
165+
) . ' IN (' . $this->connection->quote($entities, 'INTEGER') . ')' .
166+
' AND ' . $this->connection->quoteIdentifier(
167+
UrlRewrite::ENTITY_TYPE
168+
) . ' = ' . $this->connection->quote($entityType)
169+
);
170+
}
175171
}
176172

177173
// prevent query locking in a case when nothing to delete
@@ -189,6 +185,28 @@ private function deleteOldUrls(array $urls)
189185
}
190186
}
191187

188+
/**
189+
* Prepare array with unique entities
190+
*
191+
* @param UrlRewrite[] $urls
192+
* @return array
193+
*/
194+
private function prepareUniqueEntities(array $urls): array
195+
{
196+
$uniqueEntities = [];
197+
/** @var UrlRewrite $url */
198+
foreach ($urls as $url) {
199+
$entityIds = (!empty($uniqueEntities[$url->getStoreId()][$url->getEntityType()])) ?
200+
$uniqueEntities[$url->getStoreId()][$url->getEntityType()] : [];
201+
202+
if (!\in_array($url->getEntityId(), $entityIds)) {
203+
$entityIds[] = $url->getEntityId();
204+
}
205+
$uniqueEntities[$url->getStoreId()][$url->getEntityType()] = $entityIds;
206+
}
207+
return $uniqueEntities;
208+
}
209+
192210
/**
193211
* @inheritDoc
194212
*/
@@ -279,7 +297,7 @@ protected function createFilterDataBasedOnUrls($urls)
279297
}
280298

281299
/**
282-
* {@inheritdoc}
300+
* @inheritdoc
283301
*/
284302
public function deleteByData(array $data)
285303
{

app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -478,10 +478,6 @@ public function testReplace()
478478
->with(DbStorage::TABLE_NAME)
479479
->will($this->returnValue('table_name'));
480480

481-
$this->connectionMock->expects($this->any())
482-
->method('query')
483-
->with('sql delete query');
484-
485481
// insert
486482

487483
$urlFirst->expects($this->any())
@@ -496,10 +492,6 @@ public function testReplace()
496492
->with(DbStorage::TABLE_NAME)
497493
->will($this->returnValue('table_name'));
498494

499-
$this->connectionMock->expects($this->once())
500-
->method('insertMultiple')
501-
->with('table_name', [['row1'], ['row2']]);
502-
503495
$this->storage->replace([$urlFirst, $urlSecond]);
504496
}
505497

0 commit comments

Comments
 (0)