Storm\Drivers\Base\Relational\Queries\QueryExecutor::Commit PHP Method

Commit() final public method

final public Commit ( Storm\Drivers\Base\Relational\Queries\IConnection $Connection, array $TablesOrderedByPersistingDependency, array $TablesOrderedByDiscardingDependency, Transaction $Transaction )
$Connection Storm\Drivers\Base\Relational\Queries\IConnection
$TablesOrderedByPersistingDependency array
$TablesOrderedByDiscardingDependency array
$Transaction Storm\Core\Relational\Transaction
    public final function Commit(IConnection $Connection, array $TablesOrderedByPersistingDependency, array $TablesOrderedByDiscardingDependency, Relational\Transaction $Transaction)
    {
        try {
            $Connection->BeginTransaction();
            $GroupedDiscardedPrimaryKeys = $Transaction->GetDiscardedPrimaryKeyGroups();
            foreach ($TablesOrderedByDiscardingDependency as $Table) {
                $TableName = $Table->GetName();
                if (isset($GroupedDiscardedPrimaryKeys[$TableName])) {
                    $this->DeleteRowsByPrimaryKeysQuery($Connection, $Table, $GroupedDiscardedPrimaryKeys[$TableName]);
                }
            }
            foreach ($Transaction->GetDiscardedCriteria() as $Criterion) {
                $this->DeleteWhereQuery($Connection, $Criterion);
            }
            foreach ($Transaction->GetProcedures() as $Procedure) {
                $this->ExecuteUpdate($Connection, $Procedure);
            }
            $GroupedPersistedRows = $Transaction->GetPersistedRowGroups();
            foreach ($TablesOrderedByPersistingDependency as $Table) {
                $TableName = $Table->GetName();
                if (isset($GroupedPersistedRows[$TableName])) {
                    $Transaction->TriggerPrePersistEvent($Table);
                    $this->Persister->PersistRows($Connection, $Table, $GroupedPersistedRows[$TableName]);
                    $Transaction->TriggerPostPersistEvent($Table);
                }
            }
            $Connection->CommitTransaction();
        } catch (\Exception $Exception) {
            $Connection->RollbackTransaction();
            throw $Exception;
        }
    }