Skip to content

Commit b1a7592

Browse files
committed
Mview patch update
-- move framework logic to saas-export
1 parent c5d8fc6 commit b1a7592

File tree

6 files changed

+83
-33
lines changed

6 files changed

+83
-33
lines changed

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

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,34 @@
55
*/
66
namespace Magento\Framework\Mview\Config;
77

8+
use Magento\Framework\Mview\View\AdditionalColumnsProcessor\DefaultProcessor;
9+
use Magento\Framework\Mview\View\ChangeLogBatchIterator;
810
use Magento\Framework\Mview\View\SubscriptionInterface;
911

1012
class Converter implements \Magento\Framework\Config\ConverterInterface
1113
{
14+
/**
15+
* @var string
16+
*/
17+
private $defaultProcessor;
18+
19+
/**
20+
* @var string
21+
*/
22+
private $defaultIterator;
23+
24+
/**
25+
* @param string $defaultProcessor
26+
* @param string $defaultIterator
27+
*/
28+
public function __construct(
29+
string $defaultProcessor = DefaultProcessor::class,
30+
string $defaultIterator = ChangeLogBatchIterator::class
31+
) {
32+
$this->defaultProcessor = $defaultProcessor;
33+
$this->defaultIterator = $defaultIterator;
34+
}
35+
1236
/**
1337
* Convert dom node tree to array
1438
*
@@ -29,7 +53,7 @@ public function convert($source)
2953
$data['action_class'] = $this->getAttributeValue($viewNode, 'class');
3054
$data['group'] = $this->getAttributeValue($viewNode, 'group');
3155
$data['store_scope'] = $this->getAttributeValue($viewNode, 'store_scope');
32-
$data['iterator'] = $this->getAttributeValue($viewNode, 'iterator');
56+
$data['iterator'] = $this->getAttributeValue($viewNode, 'iterator') ?: $this->defaultIterator;
3357
$data['subscriptions'] = [];
3458

3559
/** @var $childNode \DOMNode */
@@ -95,6 +119,7 @@ class_implements(ltrim($subscriptionModel, '\\'))
95119
'subscription_model' => $subscriptionModel,
96120
'additional_columns' => $this->getAdditionalColumns($subscription),
97121
'processor' => $this->getAttributeValue($subscription, 'processor')
122+
?: $this->defaultProcessor
98123
];
99124
}
100125
break;
@@ -116,10 +141,17 @@ private function getAdditionalColumns(\DOMNode $subscription): array
116141
continue;
117142
}
118143

119-
$additionalColumns[] = [
120-
'name' => $this->getAttributeValue($childNode, 'name'),
121-
'cl_name' => $this->getAttributeValue($childNode, 'cl_name'),
122-
];
144+
foreach ($childNode->childNodes as $columnNode) {
145+
if ($columnNode->nodeName !== 'column') {
146+
continue;
147+
}
148+
149+
$additionalColumns[$this->getAttributeValue($columnNode, 'name')] = [
150+
'name' => $this->getAttributeValue($columnNode, 'name'),
151+
'cl_name' => $this->getAttributeValue($columnNode, 'cl_name'),
152+
'constant' => $this->getAttributeValue($columnNode, 'constant'),
153+
];
154+
}
123155
}
124156

125157
return $additionalColumns;

lib/internal/Magento/Framework/Mview/View/AdditionalColumnProcessorInterface.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
namespace Magento\Framework\Mview\View;
88

99
use Magento\Framework\DB\Ddl\Table;
10-
use Magento\Tests\NamingConvention\true\string;
1110

1211
interface AdditionalColumnProcessorInterface
1312
{

lib/internal/Magento/Framework/Mview/View/AdditionalColumnsProcessors/DefaultProcessor.php renamed to lib/internal/Magento/Framework/Mview/View/AdditionalColumnsProcessor/DefaultProcessor.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use Magento\Framework\App\ResourceConnection;
1010
use Magento\Framework\DB\Ddl\Table;
1111
use Magento\Framework\Mview\View\AdditionalColumnProcessorInterface;
12-
use Magento\Tests\NamingConvention\true\string;
1312

1413
class DefaultProcessor implements AdditionalColumnProcessorInterface
1514
{
@@ -42,8 +41,10 @@ public function getTriggerColumns(string $eventPrefix, array $additionalColumns)
4241
$triggersColumns['column_names'][$additionalColumn['name']] = $resource->quoteIdentifier(
4342
$additionalColumn['cl_name']
4443
);
45-
$triggersColumns['column_values'][$additionalColumn['name']] = $eventPrefix .
46-
$resource->quoteIdentifier($additionalColumn['name']);
44+
45+
$triggersColumns['column_values'][$additionalColumn['name']] = isset($additionalColumn['constant']) ?
46+
$resource->quote($additionalColumn['constant']) :
47+
$eventPrefix . $resource->quoteIdentifier($additionalColumn['name']);
4748
}
4849

4950
return $triggersColumns;
@@ -64,9 +65,9 @@ public function processColumnForCLTable(Table $table, string $columnName): void
6465
{
6566
$table->addColumn(
6667
$columnName,
67-
\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
68+
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
6869
null,
69-
['unsigned' => true, 'nullable' => false, 'default' => null],
70+
['unsigned' => true, 'nullable' => true, 'default' => null],
7071
$columnName
7172
);
7273
}

lib/internal/Magento/Framework/Mview/View/Changelog.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
namespace Magento\Framework\Mview\View;
88

9+
use Magento\Framework\App\ObjectManager;
910
use Magento\Framework\DB\Adapter\ConnectionException;
1011
use Magento\Framework\DB\Sql\Expression;
1112
use Magento\Framework\Exception\RuntimeException;
@@ -114,7 +115,8 @@ public function create()
114115

115116
foreach ($this->initAdditionalColumnData() as $columnData) {
116117
/** @var AdditionalColumnProcessorInterface $processor */
117-
$processor = $columnData['processor'];
118+
$processorClass = $columnData['processor'];
119+
$processor = ObjectManager::getInstance()->get($processorClass);
118120
$processor->processColumnForCLTable($table, $columnData['cl_name']);
119121
}
120122

@@ -138,6 +140,7 @@ private function initAdditionalColumnData(): array
138140
foreach ($subscription['additional_columns'] as $additionalColumn) {
139141
//We are gatherig unique change log column names in order to create them later
140142
$additionalColumns[$additionalColumn['cl_name']] = $additionalColumn;
143+
$additionalColumns[$additionalColumn['cl_name']]['processor'] = $subscription['processor'];
141144
}
142145
}
143146
}

lib/internal/Magento/Framework/Mview/View/Subscription.php

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,38 @@ protected function getLinkedViews()
198198
return $this->linkedViews;
199199
}
200200

201+
/**
202+
* Prepare columns for trigger statement. Should be protected in order to serve new approach
203+
*
204+
* @param ChangelogInterface $changelog
205+
* @param string $event
206+
* @return array
207+
* @throws \Exception
208+
*/
209+
protected function prepareColumns(ChangelogInterface $changelog, string $event): array
210+
{
211+
$prefix = $event === Trigger::EVENT_DELETE ? 'OLD.' : 'NEW.';
212+
$subscriptionData = $this->mviewConfig->getView($changelog->getViewId())['subscriptions'][$this->getTableName()];
213+
$columns = [
214+
'column_names' => [
215+
'entity_id' => $this->connection->quoteIdentifier($changelog->getColumnName())
216+
],
217+
'column_values' => [
218+
'entity_id' => $this->getEntityColumn($prefix)
219+
]
220+
];
221+
222+
if (!empty($subscriptionData['additional_columns'])) {
223+
$processor = $this->getProcessor();
224+
$columns = array_replace_recursive(
225+
$columns,
226+
$processor->getTriggerColumns($prefix, $subscriptionData['additional_columns'])
227+
);
228+
}
229+
230+
return $columns;
231+
}
232+
201233
/**
202234
* Build trigger statement for INSERT, UPDATE, DELETE events
203235
*
@@ -207,8 +239,6 @@ protected function getLinkedViews()
207239
*/
208240
protected function buildStatement($event, $changelog)
209241
{
210-
$processor = $this->getProcessor();
211-
$prefix = $event === Trigger::EVENT_DELETE ? 'OLD.' : 'NEW.';
212242
$trigger = "%sINSERT IGNORE INTO %s (%s) VALUES (%s);";
213243
switch ($event) {
214244
case Trigger::EVENT_UPDATE:
@@ -235,26 +265,10 @@ protected function buildStatement($event, $changelog)
235265
}
236266
break;
237267
}
238-
239-
$columns = [
240-
'column_names' => [
241-
'entity_id' => $this->connection->quoteIdentifier($changelog->getColumnName())
242-
],
243-
'column_values' => [
244-
'entity_id' => $this->getEntityColumn($prefix)
245-
]
246-
];
247-
248-
if (isset($subscriptionData['additional_columns'])) {
249-
$columns = array_replace_recursive(
250-
$columns,
251-
$processor->getTriggerColumns($prefix, $subscriptionData['additional_columns'])
252-
);
253-
}
254-
268+
$columns = $this->prepareColumns($changelog, $event);
255269
return sprintf(
256270
$trigger,
257-
$processor->getPreStatements(),
271+
$this->getProcessor()->getPreStatements(),
258272
$this->connection->quoteIdentifier($this->resource->getTableName($changelog->getName())),
259273
implode(", " , $columns['column_names']),
260274
implode(", ", $columns['column_values'])
@@ -270,7 +284,7 @@ protected function buildStatement($event, $changelog)
270284
private function getProcessor(): AdditionalColumnProcessorInterface
271285
{
272286
$subscriptionData = $this->mviewConfig->getView($this->getView()->getId())['subscriptions'];
273-
$processorClass = $subscriptionData['processor'];
287+
$processorClass = $subscriptionData[$this->getTableName()]['processor'];
274288
$processor = ObjectManager::getInstance()->get($processorClass);
275289

276290
if (!$processor instanceof AdditionalColumnProcessorInterface) {

lib/internal/Magento/Framework/Mview/etc/mview.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
<xs:complexType name="additionalColumnAttributeType">
9696
<xs:attribute name="name" type="xs:string" />
9797
<xs:attribute name="cl_name" type="xs:string" />
98+
<xs:attribute name="constant" type="xs:string" />
9899
</xs:complexType>
99100

100101
<xs:simpleType name="entityColumnType">

0 commit comments

Comments
 (0)