diff --git a/vendor/magento/framework/Setup/Declaration/Schema/Db/SchemaBuilder.php b/vendor/magento/framework/Setup/Declaration/Schema/Db/SchemaBuilder.php index f73fc44102ec2..5d8f59cb4a949 100644 --- a/vendor/magento/framework/Setup/Declaration/Schema/Db/SchemaBuilder.php +++ b/vendor/magento/framework/Setup/Declaration/Schema/Db/SchemaBuilder.php @@ -1,14 +1,16 @@ elementFactory = $elementFactory; $this->dbSchemaReader = $dbSchemaReader; $this->sharding = $sharding; + $this->readerComposite = $readerComposite; } /** * @inheritdoc + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function build(Schema $schema) { + $data = $this->readerComposite->read(FileResolverByModule::ALL_MODULES); + $tablesWithJsonTypeField = []; + if (isset($data['table'])) { + foreach ($data['table'] as $keyTable => $tableColumns) { + foreach ($tableColumns['column'] as $keyColumn => $columnData) { + if ($columnData['type'] == 'json') { + $tablesWithJsonTypeField[$keyTable] = $keyColumn; + } + } + } + } + foreach ($this->sharding->getResources() as $resource) { foreach ($this->dbSchemaReader->readTables($resource) as $tableName) { $columns = []; @@ -98,6 +122,10 @@ public function build(Schema $schema) // Process columns foreach ($columnsData as $columnData) { + if (isset($tablesWithJsonTypeField[$tableName]) + && $tablesWithJsonTypeField[$tableName] === $columnData['name']) { + $columnData['type'] = 'json'; + } $columnData['table'] = $table; $column = $this->elementFactory->create($columnData['type'], $columnData); $columns[$column->getName()] = $column;