private function BuildIndexes(IConnection $Connection, array $Columns, $DatabaseName, $TableName)
{
$QueryBuilder = $Connection->QueryBuilder();
$QueryBuilder->Append('SELECT * FROM `INFORMATION_SCHEMA`.`STATISTICS` WHERE TRUE ');
$QueryBuilder->AppendValue('AND `TABLE_SCHEMA` = # ', $DatabaseName);
$QueryBuilder->AppendValue('AND `TABLE_NAME` = # ', $TableName);
$QueryBuilder->AppendValue('AND `INDEX_NAME` != # ', 'PRIMARY');
$QueryBuilder->Append('AND `INDEX_NAME` NOT IN (');
$QueryBuilder->Append('SELECT `CONSTRAINT_NAME` FROM `INFORMATION_SCHEMA`.`REFERENTIAL_CONSTRAINTS` WHERE TRUE ');
$QueryBuilder->AppendValue('AND `CONSTRAINT_SCHEMA` = # ', $DatabaseName);
$QueryBuilder->AppendValue('AND `TABLE_NAME` = # ', $TableName);
$QueryBuilder->Append(')');
$IndexRowGroups = $this->GroupColumnsByKey($QueryBuilder->Build()->Execute()->FetchAll(), 'INDEX_NAME');
$Indexes = [];
foreach ($IndexRowGroups as $IndexRows) {
$Indexes[] = $this->BuildIndex($Columns, $IndexRows);
}
return $Indexes;
}