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;
}
}