Skip to content

Commit c36e20b

Browse files
Merge branch '2.4-develop' into PR-VK-2024-06-10-CE
2 parents 7ae41bf + ef81f5a commit c36e20b

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

lib/internal/Magento/Framework/Setup/Declaration/Schema/Db/SchemaBuilder.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use Magento\Framework\Setup\Declaration\Schema\Dto\Schema;
1515
use Magento\Framework\Setup\Declaration\Schema\Dto\Table;
1616
use Magento\Framework\Setup\Declaration\Schema\Sharding;
17+
use Magento\Framework\Config\FileResolverByModule;
18+
use Magento\Framework\Setup\Declaration\Schema\Declaration\ReaderComposite;
1719

1820
/**
1921
* This type of builder is responsible for converting ENTIRE data, that comes from db
@@ -48,28 +50,50 @@ class SchemaBuilder
4850
*/
4951
private $tables;
5052

53+
/**
54+
* @var ReaderComposite
55+
*/
56+
private $readerComposite;
57+
5158
/**
5259
* Constructor.
5360
*
5461
* @param ElementFactory $elementFactory
5562
* @param DbSchemaReaderInterface $dbSchemaReader
5663
* @param Sharding $sharding
64+
* @param ReaderComposite $readerComposite
5765
*/
5866
public function __construct(
5967
ElementFactory $elementFactory,
6068
DbSchemaReaderInterface $dbSchemaReader,
61-
Sharding $sharding
69+
Sharding $sharding,
70+
ReaderComposite $readerComposite
6271
) {
6372
$this->elementFactory = $elementFactory;
6473
$this->dbSchemaReader = $dbSchemaReader;
6574
$this->sharding = $sharding;
75+
$this->readerComposite = $readerComposite;
6676
}
6777

6878
/**
6979
* @inheritdoc
80+
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
81+
* @SuppressWarnings(PHPMD.NPathComplexity)
7082
*/
7183
public function build(Schema $schema)
7284
{
85+
$data = $this->readerComposite->read(FileResolverByModule::ALL_MODULES);
86+
$tablesWithJsonTypeField = [];
87+
if (isset($data['table'])) {
88+
foreach ($data['table'] as $keyTable => $tableColumns) {
89+
foreach ($tableColumns['column'] as $keyColumn => $columnData) {
90+
if ($columnData['type'] == 'json') {
91+
$tablesWithJsonTypeField[$keyTable] = $keyColumn;
92+
}
93+
}
94+
}
95+
}
96+
7397
foreach ($this->sharding->getResources() as $resource) {
7498
foreach ($this->dbSchemaReader->readTables($resource) as $tableName) {
7599
$columns = [];
@@ -98,6 +122,10 @@ public function build(Schema $schema)
98122

99123
// Process columns
100124
foreach ($columnsData as $columnData) {
125+
if (isset($tablesWithJsonTypeField[$tableName])
126+
&& $tablesWithJsonTypeField[$tableName] === $columnData['name']) {
127+
$columnData['type'] = 'json';
128+
}
101129
$columnData['table'] = $table;
102130
$column = $this->elementFactory->create($columnData['type'], $columnData);
103131
$columns[$column->getName()] = $column;

0 commit comments

Comments
 (0)