Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

FIX DataQuery::applyRelation was returning the base class.

If the applyRelation() was passed a relation that went to a class with a parent
class with a database table, applyRelation would return the name of the parent
class, rather than the class the relation was actually too.
  • Loading branch information...
commit 070ba56104faeffff9dc908e8af38338ff759346 1 parent 5d39c4d
Simon Welsh simonwelsh authored
Showing with 49 additions and 3 deletions.
  1. +1 −3 model/DataQuery.php
  2. +48 −0 tests/model/DataQueryTest.php
4 model/DataQuery.php
View
@@ -581,7 +581,7 @@ function applyRelation($relation) {
if(!$relation) return $this->dataClass;
if(is_string($relation)) $relation = explode(".", $relation);
-
+
$modelClass = $this->dataClass;
foreach($relation as $rel) {
@@ -601,7 +601,6 @@ function applyRelation($relation) {
foreach($ancestry as $ancestor){
if($ancestor != $component){
$this->query->addInnerJoin($ancestor, "\"$component\".\"ID\" = \"$ancestor\".\"ID\"");
- $component=$ancestor;
}
}
}
@@ -623,7 +622,6 @@ function applyRelation($relation) {
foreach($ancestry as $ancestor){
if($ancestor != $component){
$this->query->addInnerJoin($ancestor, "\"$component\".\"ID\" = \"$ancestor\".\"ID\"");
- $component=$ancestor;
}
}
}
48 tests/model/DataQueryTest.php
View
@@ -13,5 +13,53 @@ function testJoins() {
$dq->leftJoin("Group_Members", "\"Group_Members\".\"MemberID\" = \"Member\".\"ID\"");
$this->assertContains("LEFT JOIN \"Group_Members\" ON \"Group_Members\".\"MemberID\" = \"Member\".\"ID\"", $dq->sql());
}
+
+ function testRelationReturn() {
+ $dq = new DataQuery('DataQueryTest_C');
+ $this->assertEquals('DataQueryTest_A', $dq->applyRelation('TestA'), 'DataQuery::applyRelation should return the name of the related object.');
+ $this->assertEquals('DataQueryTest_A', $dq->applyRelation('TestAs'), 'DataQuery::applyRelation should return the name of the related object.');
+ $this->assertEquals('DataQueryTest_A', $dq->applyRelation('ManyTestAs'), 'DataQuery::applyRelation should return the name of the related object.');
+
+ $this->assertEquals('DataQueryTest_B', $dq->applyRelation('TestB'), 'DataQuery::applyRelation should return the name of the related object.');
+ $this->assertEquals('DataQueryTest_B', $dq->applyRelation('TestBs'), 'DataQuery::applyRelation should return the name of the related object.');
+ $this->assertEquals('DataQueryTest_B', $dq->applyRelation('ManyTestBs'), 'DataQuery::applyRelation should return the name of the related object.');
+ }
+}
+
+
+class DataQueryTest_A extends DataObject implements TestOnly {
+ public static $db = array(
+ 'Name' => 'Varchar',
+ );
+
+ public static $has_one = array(
+ 'TestC' => 'DataQueryTest_C',
+ );
}
+class DataQueryTest_B extends DataQueryTest_A {
+ public static $db = array(
+ 'Title' => 'Varchar',
+ );
+
+ public static $has_one = array(
+ 'TestC' => 'DataQueryTest_C',
+ );
+}
+
+class DataQueryTest_C extends DataObject implements TestOnly {
+ public static $has_one = array(
+ 'TestA' => 'DataQueryTest_A',
+ 'TestB' => 'DataQueryTest_B',
+ );
+
+ public static $has_many = array(
+ 'TestAs' => 'DataQueryTest_A',
+ 'TestBs' => 'DataQueryTest_B',
+ );
+
+ public static $many_many = array(
+ 'ManyTestAs' => 'DataQueryTest_A',
+ 'ManyTestBs' => 'DataQueryTest_B',
+ );
+}
Please sign in to comment.
Something went wrong with that request. Please try again.