diff options
author | Thomas Steur <thomas.steur@gmail.com> | 2016-12-01 09:03:22 +0300 |
---|---|---|
committer | Thomas Steur <thomas.steur@gmail.com> | 2016-12-01 09:03:22 +0300 |
commit | 3ffe8af8280a6cac3f40d06ed1fbe4ecf1430240 (patch) | |
tree | badfa2042a4d1fc6d290af3de92cd8a9c4a14461 /tests/PHPUnit | |
parent | c10a289bf1e6dc11347b3d0f7235ffd9fa9aaaad (diff) |
fix a bug in query builder where tables are sorted randomly
Diffstat (limited to 'tests/PHPUnit')
-rw-r--r-- | tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php index cb20726968..45e356d13a 100644 --- a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php +++ b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php @@ -207,6 +207,64 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expected, $tables); } + public function test_sortTablesForJoin_shouldSortCorrecTWhenManyTableJoins() + { + $tables = array( + 'log_link_visit_action', + 'log_action', + array( + 'table' => 'log_link_visit_action', + 'tableAlias' => 'log_link_visit_action_foo', + 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit" + ), + array( + 'table' => 'log_action', + 'tableAlias' => 'log_action_foo', + 'joinOn' => "log_link_visit_action_foo.idaction_url = log_action_foo.idaction" + ), + array( + 'table' => 'log_link_visit_action', + 'tableAlias' => 'log_link_visit_action_bar', + 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_bar.idvisit" + ), + array( + 'table' => 'log_action', + 'tableAlias' => 'log_action_bar', + 'joinOn' => "log_link_visit_action_bar.idaction_url = log_action_bar.idaction" + ) + ); + + $generator = $this->makeGenerator($tables); + usort($tables, array($generator, 'sortTablesForJoin')); + + $expected = array( + array( + 'table' => 'log_link_visit_action', + 'tableAlias' => 'log_link_visit_action_foo', + 'joinOn' => 'log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit', + ), + array( + 'table' => 'log_link_visit_action', + 'tableAlias' => 'log_link_visit_action_bar', + 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_bar.idvisit" + ), + array( + 'table' => 'log_action', + 'tableAlias' => 'log_action_foo', + 'joinOn' => 'log_link_visit_action_foo.idaction_url = log_action_foo.idaction', + ), + array( + 'table' => 'log_action', + 'tableAlias' => 'log_action_bar', + 'joinOn' => "log_link_visit_action_bar.idaction_url = log_action_bar.idaction" + ), + 'log_link_visit_action', + 'log_action', + ); + + $this->assertEquals($expected, $tables); + } + private function generate($tables) { $generator = $this->makeGenerator($tables); |