Вход Регистрация
Файл: vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php
Строк: 68
<?php

namespace DoctrineDBALSQLBuilder;

use 
DoctrineDBALException;
use 
DoctrineDBALPlatformsAbstractPlatform;
use 
DoctrineDBALSchemaSchema;
use 
DoctrineDBALSchemaSequence;
use 
DoctrineDBALSchemaTable;

use function 
array_merge;

final class 
CreateSchemaObjectsSQLBuilder
{
    private 
AbstractPlatform $platform;

    public function 
__construct(AbstractPlatform $platform)
    {
        
$this->platform $platform;
    }

    
/**
     * @return list<string>
     *
     * @throws Exception
     */
    
public function buildSQL(Schema $schema): array
    {
        return 
array_merge(
            
$this->buildNamespaceStatements($schema->getNamespaces()),
            
$this->buildSequenceStatements($schema->getSequences()),
            
$this->buildTableStatements($schema->getTables()),
        );
    }

    
/**
     * @param string[] $namespaces
     *
     * @return list<string>
     *
     * @throws Exception
     */
    
private function buildNamespaceStatements(array $namespaces): array
    {
        
$statements = [];

        if (
$this->platform->supportsSchemas()) {
            foreach (
$namespaces as $namespace) {
                
$statements[] = $this->platform->getCreateSchemaSQL($namespace);
            }
        }

        return 
$statements;
    }

    
/**
     * @param Table[] $tables
     *
     * @return list<string>
     *
     * @throws Exception
     */
    
private function buildTableStatements(array $tables): array
    {
        return 
$this->platform->getCreateTablesSQL($tables);
    }

    
/**
     * @param Sequence[] $sequences
     *
     * @return list<string>
     *
     * @throws Exception
     */
    
private function buildSequenceStatements(array $sequences): array
    {
        
$statements = [];

        foreach (
$sequences as $sequence) {
            
$statements[] = $this->platform->getCreateSequenceSQL($sequence);
        }

        return 
$statements;
    }
}
Онлайн: 1
Реклама