Skip to content
Extraits de code Groupes Projets
Valider 34dfe466 rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers

add possibility to use right joins

parent ab3726a0
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -81,7 +81,14 @@ class JoinGenerator
// join condition provided
$alias = isset($table['tableAlias']) ? $table['tableAlias'] : $table['table'];
$this->joinString .= " LEFT JOIN " . Common::prefixTable($table['table']) . " AS " . $alias
if (isset($table['join'])) {
$this->joinString .= ' ' . $table['join'];
} else {
$this->joinString .= ' LEFT JOIN';
}
$this->joinString .= ' ' . Common::prefixTable($table['table']) . " AS " . $alias
. " ON " . $table['joinOn'];
continue;
}
......
......@@ -58,6 +58,7 @@ class JoinTables extends \ArrayObject
&& !empty($table['table'])
&& $table['table'] === $tableToFind
&& (!isset($table['tableAlias']) || $table['tableAlias'] === $tableToFind)
&& (!isset($table['join']) || strtolower($table['join']) === 'left join')
&& isset($table['joinOn']) && $table['joinOn'] === $joinToFind) {
return true;
}
......@@ -77,6 +78,7 @@ class JoinTables extends \ArrayObject
if (is_array($table)
&& !empty($table['table'])
&& $table['table'] === $tableNameToFind
&& (!isset($table['join']) || strtolower($table['join']) === 'left join')
&& (!isset($table['tableAlias']) || $table['tableAlias'] === $tableNameToFind)) {
return $index;
}
......
......@@ -102,6 +102,41 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expected, $generator->getJoinString());
}
public function test_generate_getJoinString_manuallyJoinedAlreadyPlusCustomJoinButAlsoLeft()
{
$generator = $this->generate(array(
'log_link_visit_action',
array('table' => 'log_visit', 'joinOn' => 'log_visit.idvisit = log_link_visit_action.idvisit'),
array('table' => 'log_action', 'join' => 'LeFt JOIN', 'joinOn' => 'log_link_visit_action.idaction_name = log_action.idaction'),
'log_action'
));
$expected = 'log_link_visit_action AS log_link_visit_action ';
$expected .= 'LEFT JOIN log_visit AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit ';
$expected .= 'LEFT JOIN log_action AS log_action ON (log_link_visit_action.idaction_name = log_action.idaction AND log_link_visit_action.idaction_url = log_action.idaction)';
$this->assertEquals($expected, $generator->getJoinString());
}
public function test_generate_getJoinString_manualJoin()
{
$generator = $this->generate(array(
'log_link_visit_action',
array('table' => 'log_visit',
'join' => 'RIGHT JOIN','joinOn' => 'log_visit.idvisit = log_link_visit_action.idvisit'),
array('table' => 'log_action',
'tableAlias' => 'log_action_r',
'join' => 'RIGHT JOIN',
'joinOn' => 'log_link_visit_action.idaction_test = log_action_r.idaction'),
'log_action'
));
$expected = 'log_link_visit_action AS log_link_visit_action ';
$expected .= 'RIGHT JOIN log_visit AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit ';
$expected .= 'RIGHT JOIN log_action AS log_action_r ON log_link_visit_action.idaction_test = log_action_r.idaction ';
$expected .= 'LEFT JOIN log_action AS log_action ON log_link_visit_action.idaction_url = log_action.idaction';
$this->assertEquals($expected, $generator->getJoinString());
}
public function test_generate_getJoinString_allTables()
{
$generator = $this->generate(array(
......
......@@ -88,6 +88,17 @@ class JoinTablesTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($result);
}
public function test_hasJoinedTableManually_shouldReturnFalse_IfTableOrJoinHasCustomJoin()
{
$this->tables = $this->makeTables(array(
'log_visit',
array('table' => 'log_conversion', 'join' => 'right JOIN', 'joinOn' => 'log_conversion.idvisit = log_visit.idvisit'),
'log_action'));
$result = $this->tables->hasJoinedTableManually('log_conversion', 'log_conversion.idvisit = log_visit.idvisit');
$this->assertFalse($result);
}
public function test_hasAddedTableManually_shouldReturnTrue_IfTableWasAddedManually()
{
$result = $this->tables->hasAddedTableManually('log_conversion');
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter