protected function SyncDatabase(IConnection $Connection, Relational\Database $Database, IDatabaseBuilder $Builder, IDatabaseModifier $Modifier)
{
$CurrentDatabase = $Builder->Build($Connection);
$this->DropRelationalTraits($Connection, $Modifier, $CurrentDatabase);
$Tables = $Database->GetTables();
$CurrentTables = $CurrentDatabase->GetTables();
if (!$this->IdentifiersAreCaseSensitive) {
$Tables = array_change_key_case($Tables);
$CurrentTables = array_change_key_case($CurrentTables);
}
foreach ($Tables as $TableName => $Table) {
$this->SyncTable($Connection, $Modifier, $Table, isset($CurrentTables[$TableName]) ? $CurrentTables[$TableName] : null);
}
foreach ($CurrentDatabase->GetTables() as $TableName => $CurrentTable) {
if (!isset($CurrentTables[$TableName])) {
$this->SyncTable($Connection, $Modifier, null, $CurrentTable);
}
}
$this->AddRelationalTraits($Connection, $Modifier, $Database);
}