Skip to content

Commit 285d17a

Browse files
author
Sergii Kovalenko
committed
MAGETWO-89009: Split database doesn't work on 2.3-develop
1 parent 625fa8a commit 285d17a

File tree

6 files changed

+124
-92
lines changed

6 files changed

+124
-92
lines changed

app/code/Magento/SalesSequence/Setup/Patch/Schema/CreateSequence.php

Lines changed: 0 additions & 68 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\SalesSequence\Setup;
7+
8+
use Magento\Framework\Setup\InstallDataInterface;
9+
use Magento\Framework\Setup\InstallSchemaInterface;
10+
use Magento\Framework\Setup\ModuleContextInterface;
11+
use Magento\Framework\Setup\ModuleDataSetupInterface;
12+
use Magento\Framework\Setup\SchemaSetupInterface;
13+
14+
/**
15+
*/
16+
class Recurring implements InstallSchemaInterface
17+
{
18+
/**
19+
* @var SequenceCreator
20+
*/
21+
private $sequenceCreator;
22+
23+
/**
24+
* @param SequenceCreator $sequenceCreator
25+
*/
26+
public function __construct(
27+
SequenceCreator $sequenceCreator
28+
) {
29+
$this->sequenceCreator = $sequenceCreator;
30+
}
31+
32+
/**
33+
* {@inheritdoc}
34+
*/
35+
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
36+
{
37+
$this->sequenceCreator->create();
38+
}
39+
}

app/code/Magento/Signifyd/etc/db_schema.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
-->
88
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
99
xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
10-
<table name="signifyd_case" resource="default" engine="innodb" comment="signifyd_case">
10+
<table name="signifyd_case" resource="sales" engine="innodb" comment="signifyd_case">
1111
<column xsi:type="int" name="entity_id" padding="10" unsigned="true" nullable="false" identity="true"
1212
comment="Entity_id"/>
1313
<column xsi:type="int" name="order_id" padding="10" unsigned="true" nullable="true" identity="false"

lib/internal/Magento/Framework/Setup/Declaration/Schema/Dto/Table.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,23 @@ public function getPrimaryConstraint()
173173
false;
174174
}
175175

176+
/**
177+
* Retrieve internal constraints
178+
*
179+
* @return array
180+
*/
181+
public function getInternalConstraints() : array
182+
{
183+
$constraints = [];
184+
foreach ($this->getConstraints() as $constraint) {
185+
if ($constraint instanceof Internal) {
186+
$constraints[] = $constraint;
187+
}
188+
}
189+
190+
return $constraints;
191+
}
192+
176193
/**
177194
* @param string $name
178195
* @return Index | bool

lib/internal/Magento/Framework/Setup/Declaration/Schema/Operations/CreateTable.php

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -91,21 +91,6 @@ public function isOperationDestructive()
9191
return false;
9292
}
9393

94-
/**
95-
* In some cases according to backward compatibility we want to use old table,
96-
* for example in case of table recreation or table renaming
97-
*
98-
* We need to use definition of old table in order to prevent removal of 3-rd party columns, indexes, etc..
99-
* added not with declarative schema
100-
*
101-
* @param ElementHistory $elementHistory
102-
* @return ElementInterface
103-
*/
104-
private function prepareTable(ElementHistory $elementHistory) : ElementInterface
105-
{
106-
return $elementHistory->getOld() ? $elementHistory->getOld() : $elementHistory->getNew();
107-
}
108-
10994
/**
11095
* Setup callbacks for newely created columns
11196
*
@@ -158,7 +143,7 @@ private function setupTableTriggers(Table $table, Statement $createTableStatemen
158143
public function doOperation(ElementHistory $elementHistory)
159144
{
160145
/** @var Table $table */
161-
$table = $this->prepareTable($elementHistory);
146+
$table = $elementHistory->getNew();
162147
$definition = [];
163148
$data = [
164149
Column::TYPE => $table->getColumns(),

lib/internal/Magento/Framework/Setup/Declaration/Schema/Operations/ReCreateTable.php

Lines changed: 66 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88

99
use Magento\Framework\Setup\Declaration\Schema\Db\MySQL\DDL\Triggers\MigrateDataBetweenShards;
1010
use Magento\Framework\Setup\Declaration\Schema\Db\Statement;
11+
use Magento\Framework\Setup\Declaration\Schema\Dto\ElementFactory;
1112
use Magento\Framework\Setup\Declaration\Schema\Dto\Table;
1213
use Magento\Framework\Setup\Declaration\Schema\ElementHistory;
14+
use Magento\Framework\Setup\Declaration\Schema\ElementHistoryFactory;
1315
use Magento\Framework\Setup\Declaration\Schema\OperationInterface;
1416

1517
/**
@@ -38,21 +40,37 @@ class ReCreateTable implements OperationInterface
3840
*/
3941
private $migrateDataBetweenShards;
4042

43+
/**
44+
* @var ElementHistoryFactory
45+
*/
46+
private $elementHistoryFactory;
47+
48+
/**
49+
* @var ElementFactory
50+
*/
51+
private $elementFactory;
52+
4153
/**
4254
* Constructor.
4355
*
4456
* @param CreateTable $createTable
4557
* @param DropTable $dropTable
4658
* @param MigrateDataBetweenShards $migrateDataBetweenShards
59+
* @param ElementHistoryFactory $elementHistoryFactory
60+
* @param ElementFactory $elementFactory
4761
*/
4862
public function __construct(
4963
CreateTable $createTable,
5064
DropTable $dropTable,
51-
MigrateDataBetweenShards $migrateDataBetweenShards
65+
MigrateDataBetweenShards $migrateDataBetweenShards,
66+
ElementHistoryFactory $elementHistoryFactory,
67+
ElementFactory $elementFactory
5268
) {
5369
$this->createTable = $createTable;
5470
$this->dropTable = $dropTable;
5571
$this->migrateDataBetweenShards = $migrateDataBetweenShards;
72+
$this->elementHistoryFactory = $elementHistoryFactory;
73+
$this->elementFactory = $elementFactory;
5674
}
5775

5876
/**
@@ -71,21 +89,62 @@ public function getOperationName()
7189
return self::OPERATION_NAME;
7290
}
7391

92+
/**
93+
* Merge 2 tables: take old data from new table, columns and indexes from old tables:
94+
* we need to take in account, that 3-rd party extensions can add columns and indexes and also
95+
* internal constraints in old way: with UpgradeSchema/InstallSchema scripts
96+
*
97+
* @param ElementHistory $elementHistory
98+
* @return Table
99+
*/
100+
private function getRecreatedTable(ElementHistory $elementHistory) : Table
101+
{
102+
/** @var Table $newTable */
103+
$newTable = $elementHistory->getNew();
104+
/** @var Table $oldTable */
105+
$oldTable = $elementHistory->getOld();
106+
/** @var Table $recreationTable */
107+
$recreationTable = $this->elementFactory->create(
108+
'table',
109+
[
110+
'name' => $newTable->getName(),
111+
'type' => 'table',
112+
'nameWithoutPrefix' => $newTable->getNameWithoutPrefix(),
113+
'resource' => $newTable->getResource(),
114+
'engine' => $newTable->getEngine(),
115+
'charset' => $newTable->getCharset(),
116+
'collation' => $newTable->getCollation(),
117+
'onCreate' => $newTable->getOnCreate(),
118+
'comment' => $newTable->getOnCreate(),
119+
'columns' => $oldTable->getColumns(),
120+
'indexes' => $oldTable->getIndexes(),
121+
'constraints' => array_merge($oldTable->getInternalConstraints(), $newTable->getReferenceConstraints())
122+
]
123+
);
124+
125+
return $recreationTable;
126+
}
127+
74128
/**
75129
* {@inheritdoc}
76130
*/
77131
public function doOperation(ElementHistory $elementHistory)
78132
{
79-
/** @var Table $table */
80-
$table = $elementHistory->getNew();
81-
$statements = $this->createTable->doOperation($elementHistory);
133+
$recreatedTable = $this->getRecreatedTable($elementHistory);
134+
$recreatedElementHistory = $this->elementHistoryFactory->create(
135+
[
136+
'old' => $elementHistory->getOld(),
137+
'new' => $recreatedTable
138+
]
139+
);
140+
$statements = $this->createTable->doOperation($recreatedElementHistory);
82141
/** @var Statement $statement */
83142
foreach ($statements as $statement) {
84-
if ($this->migrateDataBetweenShards->isApplicable((string) $table->getOnCreate())) {
85-
$statement->addTrigger($this->migrateDataBetweenShards->getCallback($elementHistory));
143+
if ($this->migrateDataBetweenShards->isApplicable((string) $recreatedTable->getOnCreate())) {
144+
$statement->addTrigger($this->migrateDataBetweenShards->getCallback($recreatedElementHistory));
86145
}
87146
}
88147

89-
return array_merge($statements, $this->dropTable->doOperation($elementHistory));
148+
return array_merge($statements, $this->dropTable->doOperation($recreatedElementHistory));
90149
}
91150
}

0 commit comments

Comments
 (0)