Skip to content

Commit 7b8f914

Browse files
committed
MC-38806: Wrong table comment after reindex
1 parent be1a4d1 commit 7b8f914

File tree

2 files changed

+18
-52
lines changed

2 files changed

+18
-52
lines changed

app/code/Magento/Catalog/Model/ResourceModel/Indexer/ActiveTableSwitcher.php

Lines changed: 6 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,13 @@ class ActiveTableSwitcher
3636
public function switchTable(\Magento\Framework\DB\Adapter\AdapterInterface $connection, array $tableNames)
3737
{
3838
$toRename = [];
39-
$tableComment = '';
40-
$replicaComment = '';
4139
foreach ($tableNames as $tableName) {
4240
$outdatedTableName = $tableName . $this->outdatedTableSuffix;
4341
$replicaTableName = $tableName . $this->additionalTableSuffix;
4442

45-
$tableCreateQuery = 'SHOW CREATE TABLE ' . $tableName;
46-
$tableCreateResult = $connection->fetchRow($tableCreateQuery);
43+
$tableComment = $connection->showTableStatus($tableName)['Comment'];
4744

48-
if (is_array($tableCreateResult)) {
49-
$tableComment = $this->getTableComment($tableCreateResult);
50-
}
51-
52-
$replicaCreateQuery = 'SHOW CREATE TABLE ' . $replicaTableName;
53-
$replicaCreateResult = $connection->fetchRow($replicaCreateQuery);
54-
55-
if (is_array($replicaCreateResult)) {
56-
$replicaComment = $this->getTableComment($replicaCreateResult);
57-
}
45+
$replicaComment = $connection->showTableStatus($replicaTableName)['Comment'];
5846

5947
$renameBatch = [
6048
[
@@ -71,15 +59,14 @@ public function switchTable(\Magento\Framework\DB\Adapter\AdapterInterface $conn
7159
]
7260
];
7361

74-
$toRename = $this->mergeRenameTables($renameBatch, $toRename);
62+
$toRename[] = $renameBatch;
7563

7664
if (!empty($toRename) && $replicaComment !== '' && $tableComment !== $replicaComment) {
77-
$changeTableComment = sprintf("ALTER TABLE %s COMMENT=%s", $tableName, $replicaComment);
78-
$connection->query($changeTableComment);
79-
$changeReplicaComment = sprintf("ALTER TABLE %s COMMENT=%s", $replicaTableName, $tableComment);
80-
$connection->query($changeReplicaComment);
65+
$connection->changeTableComment($tableName, $replicaComment);
66+
$connection->changeTableComment($replicaTableName, $tableComment);
8167
}
8268
}
69+
$toRename = array_merge([], ...$toRename);
8370

8471
if (!empty($toRename)) {
8572
$connection->renameTablesBatch($toRename);
@@ -96,37 +83,4 @@ public function getAdditionalTableName($tableName)
9683
{
9784
return $tableName . $this->additionalTableSuffix;
9885
}
99-
100-
/**
101-
* Returns table comment
102-
*
103-
* @param array $tableCreateResult
104-
* @return string
105-
*/
106-
private function getTableComment($tableCreateResult)
107-
{
108-
$tableComment = '';
109-
$replicaCommentPosition = strpos((string )end($tableCreateResult), "COMMENT=");
110-
if ($replicaCommentPosition) {
111-
$tableComment = substr((string )end($tableCreateResult), $replicaCommentPosition + 8);
112-
}
113-
return $tableComment;
114-
}
115-
116-
/**
117-
* Merges two arrays
118-
*
119-
* @param array $renameBatch
120-
* @param array $toRename
121-
* @return array
122-
*/
123-
private function mergeRenameTables($renameBatch, $toRename)
124-
{
125-
foreach ($renameBatch as $batch) {
126-
if (!in_array($batch, $toRename)) {
127-
array_push($toRename, $batch);
128-
}
129-
}
130-
return $toRename;
131-
}
13286
}

app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Indexer/ActiveTableSwitcherTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,21 @@ protected function setUp(): void
2626
public function testSwitch()
2727
{
2828
$connectionMock = $this->getMockBuilder(AdapterInterface::class)
29+
->addMethods(['changeTableComment'])
2930
->disableOriginalConstructor()
3031
->getMockForAbstractClass();
3132
$tableName = 'tableName';
33+
$tableData = ['Comment' => 'Table comment'];
34+
$replicaName = 'tableName_replica';
35+
$replicaData = ['Comment' => 'Table comment replica'];
36+
37+
$connectionMock->expects($this->any())->method('showTableStatus')->willReturn($replicaData);
38+
39+
$connectionMock->expects($this->any())->method('showTableStatus')->willReturn($tableData);
40+
41+
$connectionMock->expects($this->any())->method('changeTableComment')->with($tableName, $replicaData['Comment']);
42+
43+
$connectionMock->expects($this->any())->method('changeTableComment')->with($replicaName, $tableData['Comment']);
3244

3345
$connectionMock->expects($this->once())->method('renameTablesBatch')->with(
3446
[

0 commit comments

Comments
 (0)