Storm\Drivers\Platforms\Development\Syncing\DatabaseSyncer::SyncTable PHP Метод

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

private SyncTable ( Storm\Drivers\Base\Relational\Queries\IConnection $Connection, Storm\Drivers\Base\Relational\Syncing\IDatabaseModifier $Modifier, Table $Table = null, Table $CurrentTable = null )
$Connection Storm\Drivers\Base\Relational\Queries\IConnection
$Modifier Storm\Drivers\Base\Relational\Syncing\IDatabaseModifier
$Table Storm\Drivers\Base\Relational\Table
$CurrentTable Storm\Drivers\Base\Relational\Table
    private function SyncTable(IConnection $Connection, IDatabaseModifier $Modifier, Relational\Table $Table = null, Relational\Table $CurrentTable = null)
    {
        if ($Table === null && $CurrentTable === null) {
            return;
        }
        if ($CurrentTable === null) {
            $this->CreateTable($Connection, $Modifier, $Table);
        } else {
            if ($Table === null) {
                if ($this->DropUnspecifiedTables) {
                    $Modifier->DropTable($Connection, $CurrentTable);
                }
            } else {
                list($TraitsToAdd, $TraitsToRemove) = $this->GetTableStructuralTraits($Table, $CurrentTable);
                list($ColumnsToModify, $ColumnsToAdd, $ColumnsToRemove) = $this->GetTableColumns($Table->GetColumns(), $CurrentTable->GetColumns());
                foreach ($TraitsToRemove as $TraitToRemove) {
                    $Modifier->DropTableTrait($Connection, $Table, $TraitToRemove);
                }
                if ($this->DropUnspecifiedColumns) {
                    foreach ($ColumnsToRemove as $ColumnToRemove) {
                        $Modifier->DropColumn($Connection, $Table, $ColumnToRemove);
                    }
                }
                ksort($ColumnsToAdd, SORT_NUMERIC);
                ksort($ColumnsToModify, SORT_NUMERIC);
                $AllColumns = array_values($Table->GetColumns());
                $MinimumPositionIndex = min(array_keys($AllColumns));
                foreach ($ColumnsToAdd as $Position => $ColumnToAdd) {
                    $PreviousColumn = null;
                    if ($Position !== $MinimumPositionIndex) {
                        $PreviousColumn = $AllColumns[$Position - 1];
                    }
                    $Modifier->AddColumn($Connection, $Table, $ColumnToAdd, $PreviousColumn);
                }
                foreach ($ColumnsToModify as $Position => $ColumnToModify) {
                    $PreviousColumn = null;
                    if ($Position !== $MinimumPositionIndex) {
                        $PreviousColumn = $AllColumns[$Position - 1];
                    }
                    $Modifier->ModifyColumn($Connection, $Table, $ColumnToModify, $PreviousColumn);
                }
                foreach ($TraitsToAdd as $TraitToAdd) {
                    $Modifier->AddTableTrait($Connection, $Table, $TraitToAdd);
                }
            }
        }
    }