Skip to content

Commit d6bd9f0

Browse files
AC-13182::[Upgrade Build] Manual Upgrade Build 2.4.7-p2 -> 2.4.8-beta1
1 parent da1bb21 commit d6bd9f0

File tree

2 files changed

+57
-3
lines changed

2 files changed

+57
-3
lines changed

lib/internal/Magento/Framework/Mview/Config/Converter.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Magento\Framework\Mview\View\AdditionalColumnsProcessor\DefaultProcessor;
99
use Magento\Framework\Mview\View\ChangelogBatchWalker;
1010
use Magento\Framework\Mview\View\SubscriptionInterface;
11+
use Magento\Framework\App\ResourceConnection;
1112

1213
class Converter implements \Magento\Framework\Config\ConverterInterface
1314
{
@@ -22,13 +23,21 @@ class Converter implements \Magento\Framework\Config\ConverterInterface
2223
private $defaultIterator;
2324

2425
/**
26+
* @var ResourceConnection
27+
*/
28+
private $resourceConnection;
29+
30+
/**
31+
* @param ResourceConnection $resourceConnection
2532
* @param string $defaultProcessor
2633
* @param string $defaultIterator
2734
*/
2835
public function __construct(
36+
ResourceConnection $resourceConnection,
2937
string $defaultProcessor = DefaultProcessor::class,
3038
string $defaultIterator = ChangelogBatchWalker::class
3139
) {
40+
$this->resourceConnection = $resourceConnection;
3241
$this->defaultProcessor = $defaultProcessor;
3342
$this->defaultIterator = $defaultIterator;
3443
}
@@ -100,6 +109,7 @@ protected function convertChild(\DOMNode $childNode, $data)
100109
}
101110
$name = $this->getAttributeValue($subscription, 'name');
102111
$column = $this->getAttributeValue($subscription, 'entity_column');
112+
$column = $this->checkColumnOrReturnPrimarykeyColumn($name, $column);
103113
$subscriptionModel = $this->getAttributeValue($subscription, 'subscription_model');
104114

105115
if (!empty($subscriptionModel)
@@ -155,4 +165,32 @@ private function getAdditionalColumns(\DOMNode $subscription): array
155165

156166
return $additionalColumns;
157167
}
168+
169+
/**
170+
* Check if column exists in table, otherwise return primary key column
171+
*
172+
* @param string $tableName
173+
* @param string $columnName
174+
* @return string
175+
*/
176+
private function checkColumnOrReturnPrimarykeyColumn($tableName, $columnName)
177+
{
178+
$connection = $this->resourceConnection->getConnection();
179+
$tableName = $this->resourceConnection->getTableName($tableName);
180+
181+
if (!$connection->isTableExists($tableName) || $connection->tableColumnExists($tableName, $columnName)) {
182+
return $columnName;
183+
}
184+
185+
$primarykeyColumn = null;
186+
$columns = $connection->describeTable($tableName);
187+
foreach ($columns as $column) {
188+
if (!empty($column['PRIMARY'])) {
189+
$primarykeyColumn = $column['COLUMN_NAME'];
190+
break;
191+
}
192+
}
193+
194+
return $primarykeyColumn;
195+
}
158196
}

lib/internal/Magento/Framework/Mview/Test/Unit/Config/ConverterTest.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2015 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

88
namespace Magento\Framework\Mview\Test\Unit\Config;
99

10+
use Magento\Framework\App\ResourceConnection;
11+
use Magento\Framework\DB\Adapter\AdapterInterface;
1012
use Magento\Framework\Mview\Config\Converter;
1113
use PHPUnit\Framework\MockObject\MockObject;
1214
use PHPUnit\Framework\TestCase;
@@ -18,13 +20,27 @@ class ConverterTest extends TestCase
1820
*/
1921
protected $_model;
2022

23+
/**
24+
* @var ResourceConnection|MockObject
25+
*/
26+
protected $resourceConnectionMock;
27+
28+
/**
29+
* @var \Magento\Framework\DB\Adapter\AdapterInterface|MockObject
30+
*/
31+
protected $connectionMock;
32+
2133
protected function setUp(): void
2234
{
23-
$this->_model = new Converter();
35+
$this->connectionMock = $this->createMock(AdapterInterface::class);
36+
$this->resourceConnectionMock = $this->createMock(ResourceConnection::class);
37+
$this->_model = new Converter($this->resourceConnectionMock);
2438
}
2539

2640
public function testConvert()
2741
{
42+
$this->resourceConnectionMock->method('getConnection')
43+
->willReturn($this->connectionMock);
2844
$data = include __DIR__ . '/../_files/mview_config.php';
2945
$dom = new \DOMDocument();
3046
$dom->loadXML($data['inputXML']);

0 commit comments

Comments
 (0)