| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | 
							- <?php
 
- /**
 
-  * Rule for searching DB dependency
 
-  *
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- namespace Magento\TestFramework\Dependency;
 
- /**
 
-  * Rule for testing integrity within declarative schema.
 
-  *
 
-  * @package Magento\TestFramework\Dependency
 
-  */
 
- class DeclarativeSchemaRule implements RuleInterface
 
- {
 
-     /**
 
-      * Map of tables and modules
 
-      *
 
-      * @var array
 
-      */
 
-     protected $_moduleTableMap;
 
-     /**
 
-      * Constructor
 
-      *
 
-      * @param array $tables
 
-      */
 
-     public function __construct(array $tables)
 
-     {
 
-         $this->_moduleTableMap = $tables;
 
-     }
 
-     /**
 
-      * Gets external dependencies information for current module by analyzing db_schema.xml files contents.
 
-      *
 
-      * @param string $currentModule
 
-      * @param string $fileType
 
-      * @param string $file
 
-      * @param string $contents
 
-      * @return array
 
-      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
 
-      * @SuppressWarnings(PHPMD.NPathComplexity)
 
-      */
 
-     public function getDependencyInfo($currentModule, $fileType, $file, &$contents)
 
-     {
 
-         if ('db_schema' != $fileType || !preg_match('#.*/db_schema\.xml$#', $file)) {
 
-             return [];
 
-         }
 
-         $dependenciesInfo = [];
 
-         $unKnowTables = [];
 
-         $dom = new \DOMDocument();
 
-         $dom->loadXML($contents);
 
-         $tables = $dom->getElementsByTagName('table');
 
-         $constraints = $dom->getElementsByTagName('constraint');
 
-         $tableNames = [];
 
-         $foreignKeyTables = [];
 
-         $foreignKeyReferenceTables = [];
 
-         /** @var \DOMElement $table */
 
-         foreach ($tables as $table) {
 
-             $tableNames[] = $table->getAttribute('name');
 
-         }
 
-         /** @var \DOMElement $constraint */
 
-         foreach ($constraints as $constraint) {
 
-             $xsiType = $constraint->getAttribute('xsi:type');
 
-             if (strtolower($xsiType) == 'foreign' && $constraint->getAttribute('disabled') !== '1') {
 
-                 $foreignKeyTables[] = $constraint->getAttribute('table');
 
-                 $foreignKeyReferenceTables[] = $constraint->getAttribute('referenceTable');
 
-             }
 
-         }
 
-         $tableNames = array_unique(array_merge($tableNames, $foreignKeyReferenceTables, $foreignKeyTables));
 
-         /** @var string $table */
 
-         foreach ($tableNames as $table) {
 
-             if (!isset($this->_moduleTableMap[$table])) {
 
-                 $unKnowTables[$file][$table] = $table;
 
-                 continue;
 
-             }
 
-             if (strtolower($currentModule) !== strtolower($this->_moduleTableMap[$table])) {
 
-                 $dependenciesInfo[] = [
 
-                     'module' => $this->_moduleTableMap[$table],
 
-                     'type' => RuleInterface::TYPE_HARD,
 
-                     'source' => $table,
 
-                 ];
 
-             }
 
-         }
 
-         foreach ($unKnowTables as $tables) {
 
-             foreach ($tables as $table) {
 
-                 $dependenciesInfo[] = ['module' => 'Unknown', 'source' => $table];
 
-             }
 
-         }
 
-         return $dependenciesInfo;
 
-     }
 
- }
 
 
  |