Refactor: Move table JOINing logic to a separate method

Signed-off-by: Madhura Jayaratne <madhura.cj@gmail.com>
This commit is contained in:
Madhura Jayaratne 2015-06-17 10:53:39 +05:30
parent fae84aca9a
commit f965893c7b

View File

@ -1602,36 +1602,8 @@ class PMA_DbQbe
// Add master tables
$finalized[$master] = '';
}
while (true) {
$added = false;
foreach ($relations as $masterTable => $foreignData) {
foreach ($foreignData as $foreignTable => $clause) {
if (! isset($finalized[$masterTable])
&& isset($finalized[$foreignTable])
) {
$finalized[$masterTable] = $clause;
$added = true;
} elseif (! isset($finalized[$foreignTable])
&& isset($finalized[$masterTable])
&& in_array($foreignTable, $searchTables)
) {
$finalized[$foreignTable] = $clause;
$added = true;
}
if ($added) {
// We are done if all tables are in $finalized
if (count($finalized) == count($searchTables)) {
break 3;
}
}
}
}
// If no new tables were added during this iteration, break;
if (! $added) {
break;
}
}
// Fill the $finalized array with JOIN clauses for each table
$this->_fillJoinClauses($finalized, $relations);
// Tables that can not be combined with the table cluster
// that includes master table
@ -1698,6 +1670,48 @@ class PMA_DbQbe
}
}
/**
* Fills the $finalized arrays with JOIN clauses for each of the tables
*
* @param array $finalized JOIN clauses for each table
* @param array $relations Relations among tables
* @param array $searchTables Tables involved in the search
*
* @return void
*/
private function _fillJoinClauses(&$finalized, $relations)
{
while (true) {
$added = false;
foreach ($relations as $masterTable => $foreignData) {
foreach ($foreignData as $foreignTable => $clause) {
if (! isset($finalized[$masterTable])
&& isset($finalized[$foreignTable])
) {
$finalized[$masterTable] = $clause;
$added = true;
} elseif (! isset($finalized[$foreignTable])
&& isset($finalized[$masterTable])
&& in_array($foreignTable, $searchTables)
) {
$finalized[$foreignTable] = $clause;
$added = true;
}
if ($added) {
// We are done if all tables are in $finalized
if (count($finalized) == count($searchTables)) {
return;
}
}
}
}
// If no new tables were added during this iteration, break;
if (! $added) {
return;
}
}
}
/**
* Provides the generated SQL query
*