diff --git a/core/DataAccess/LogQueryBuilder/JoinGenerator.php b/core/DataAccess/LogQueryBuilder/JoinGenerator.php index 7b69184f0b6ec0706117cf7c631349b354d8ebcb..0324bff9b5477dc77a35e9fa0ffe79e1222b2402 100644 --- a/core/DataAccess/LogQueryBuilder/JoinGenerator.php +++ b/core/DataAccess/LogQueryBuilder/JoinGenerator.php @@ -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; } diff --git a/core/DataAccess/LogQueryBuilder/JoinTables.php b/core/DataAccess/LogQueryBuilder/JoinTables.php index 1faad323a7f2868a535fea6145b41d67fed56dee..c77375015593d32e01946103c3c79c3a84775923 100644 --- a/core/DataAccess/LogQueryBuilder/JoinTables.php +++ b/core/DataAccess/LogQueryBuilder/JoinTables.php @@ -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; } diff --git a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php index cb207269680440f4b5778c977efc46edf3de0735..746f2e45ff7aece5eb7854df03225e5b435e152a 100644 --- a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php +++ b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php @@ -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( diff --git a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinTablesTest.php b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinTablesTest.php index 8f5a52fd0bbdbc67bd2669c7bef2418750d13c29..98aeb339ee16acff4f54d88eb80ebb524c4e2be4 100644 --- a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinTablesTest.php +++ b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinTablesTest.php @@ -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');