protected function getSortedJoins($table, &$leftJoinDependency, &$tableJoins, &$finalJoins)
{
if (isset($this->expandingJoins[$table])) {
$path = implode("' => '", array_map(function ($value) {
return $this->reservedTableNames[$value];
}, array_merge(array_keys($this->expandingJoins), [$table])));
throw new Nette\InvalidArgumentException("Circular reference detected at left join conditions (tables '{$path}').");
}
if (isset($tableJoins[$table])) {
$this->expandingJoins[$table] = TRUE;
if (isset($leftJoinDependency[$table])) {
foreach ($leftJoinDependency[$table] as $requiredTable) {
if ($requiredTable === $table) {
continue;
}
$this->getSortedJoins($requiredTable, $leftJoinDependency, $tableJoins, $finalJoins);
}
}
if ($tableJoins[$table]) {
foreach ($tableJoins[$table] as $requiredTable => $tmp) {
if ($requiredTable === $table) {
continue;
}
$this->getSortedJoins($requiredTable, $leftJoinDependency, $tableJoins, $finalJoins);
}
}
$finalJoins += $tableJoins[$table];
$this->parameters['joinConditionSorted'] += isset($this->parameters['joinCondition'][$this->reservedTableNames[$table]]) ? [$table => $this->parameters['joinCondition'][$this->reservedTableNames[$table]]] : [];
unset($tableJoins[$table]);
unset($this->expandingJoins[$table]);
}
}