Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@gmail.com>2016-12-01 09:03:22 +0300
committerThomas Steur <thomas.steur@gmail.com>2016-12-01 09:03:22 +0300
commit3ffe8af8280a6cac3f40d06ed1fbe4ecf1430240 (patch)
treebadfa2042a4d1fc6d290af3de92cd8a9c4a14461 /tests
parentc10a289bf1e6dc11347b3d0f7235ffd9fa9aaaad (diff)
fix a bug in query builder where tables are sorted randomly
Diffstat (limited to 'tests')
-rw-r--r--tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php58
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);