Storm\Drivers\Platforms\Mysql\Syncing\DatabaseBuilder::BuildTable PHP Метод

BuildTable() приватный Метод

private BuildTable ( Storm\Drivers\Base\Relational\Queries\IConnection $Connection, $DatabaseName, $TableName, array &$LoadedTables )
$Connection Storm\Drivers\Base\Relational\Queries\IConnection
$LoadedTables array
    private function BuildTable(IConnection $Connection, $DatabaseName, $TableName, array &$LoadedTables)
    {
        if (isset($LoadedTables[$TableName])) {
            return $LoadedTables[$TableName];
        }
        $QueryBuilder = $Connection->QueryBuilder();
        $QueryBuilder->Append('SELECT T.*, C.CHARACTER_SET_NAME FROM ');
        $QueryBuilder->Append('`INFORMATION_SCHEMA`.`TABLES` T ');
        $QueryBuilder->Append('INNER JOIN ');
        $QueryBuilder->Append('`INFORMATION_SCHEMA`.`COLLATION_CHARACTER_SET_APPLICABILITY` C ');
        $QueryBuilder->Append('ON C.COLLATION_NAME = T.TABLE_COLLATION ');
        $QueryBuilder->Append('WHERE TRUE ');
        $QueryBuilder->AppendValue('AND T.`TABLE_SCHEMA` = # ', $DatabaseName);
        $QueryBuilder->AppendValue('AND T.`TABLE_NAME` = # ', $TableName);
        $TableInfoRow = $QueryBuilder->Build()->Execute()->FetchRow();
        $Columns = $this->BuildColumns($Connection, $DatabaseName, $TableName);
        $StructuralTraits = [];
        $RelationalTraits = [];
        $StructuralTraits[] = new Tables\Engine($TableInfoRow['ENGINE']);
        $StructuralTraits[] = new Tables\CharacterSet($TableInfoRow['CHARACTER_SET_NAME']);
        $StructuralTraits[] = new Tables\Collation($TableInfoRow['TABLE_COLLATION']);
        if (strlen($TableInfoRow['TABLE_COMMENT']) > 0) {
            $StructuralTraits[] = new Traits\Comment($TableInfoRow['TABLE_COMMENT']);
        }
        foreach ($this->BuildIndexes($Connection, $Columns, $DatabaseName, $TableName) as $Index) {
            $StructuralTraits[] = $Index;
        }
        $Table = new Relational\Table($TableName, null, $Columns, $StructuralTraits, []);
        $LoadedTables[$TableName] = $Table;
        $ForeignKeys = $this->BuildForeignKeys($Connection, $Columns, $DatabaseName, $TableName, $LoadedTables);
        foreach ($ForeignKeys as $ForeignKey) {
            $Table->AddTrait($ForeignKey);
        }
        return $Table;
    }