From f2a2d3e51e664607a33a2c6415427c9e1dcd89ad Mon Sep 17 00:00:00 2001 From: zYne Date: Mon, 18 Sep 2006 17:32:12 +0000 Subject: [PATCH] Fixed DQL OrderBy parser bug --- Doctrine/Query/Orderby.php | 9 ++- tests/QueryTestCase.php | 125 +------------------------------------ tests/run.php | 6 +- 3 files changed, 14 insertions(+), 126 deletions(-) diff --git a/Doctrine/Query/Orderby.php b/Doctrine/Query/Orderby.php index 35833ac96..579732242 100644 --- a/Doctrine/Query/Orderby.php +++ b/Doctrine/Query/Orderby.php @@ -22,16 +22,21 @@ class Doctrine_Query_Orderby extends Doctrine_Query_Part { $reference = implode(".",$a); $name = end($a); + $this->query->load($reference, false); $alias = $this->query->getTableAlias($reference); + + $tname = $this->query->getTable($alias)->getTableName(); - $r = $tname.".".$field; - if(isset($e[1])) + $r = $alias.".".$field; + + if(isset($e[1])) $r .= " ".$e[1]; } $ret[] = $r; } + return implode(", ", $ret); } public function __toString() { diff --git a/tests/QueryTestCase.php b/tests/QueryTestCase.php index 5485b7afb..8a752c1d8 100644 --- a/tests/QueryTestCase.php +++ b/tests/QueryTestCase.php @@ -29,6 +29,8 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase { parent::prepareTables(); $this->connection->clear(); } + + /** public function testBracktExplode() { $str = "item OR item || item"; $parts = Doctrine_Query::bracketExplode($str, array(' \|\| ', ' OR '), "(", ")"); @@ -369,127 +371,6 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase { $this->assertEqual(($count + 1), $this->dbh->count()); } - public function testSelfReferencing() { - $query = new Doctrine_Query($this->connection); - - $category = new Forum_Category(); - - $category->name = "Root"; - $category->Subcategory[0]->name = "Sub 1"; - $category->Subcategory[1]->name = "Sub 2"; - $category->Subcategory[0]->Subcategory[0]->name = "Sub 1 Sub 1"; - $category->Subcategory[0]->Subcategory[1]->name = "Sub 1 Sub 2"; - $category->Subcategory[1]->Subcategory[0]->name = "Sub 2 Sub 1"; - $category->Subcategory[1]->Subcategory[1]->name = "Sub 2 Sub 2"; - - $this->connection->flush(); - $this->connection->clear(); - - $category = $category->getTable()->find($category->id); - - $this->assertEqual($category->name, "Root"); - $this->assertEqual($category->Subcategory[0]->name, "Sub 1"); - $this->assertEqual($category->Subcategory[1]->name, "Sub 2"); - $this->assertEqual($category->Subcategory[0]->Subcategory[0]->name, "Sub 1 Sub 1"); - $this->assertEqual($category->Subcategory[0]->Subcategory[1]->name, "Sub 1 Sub 2"); - $this->assertEqual($category->Subcategory[1]->Subcategory[0]->name, "Sub 2 Sub 1"); - $this->assertEqual($category->Subcategory[1]->Subcategory[1]->name, "Sub 2 Sub 2"); - - $this->connection->clear(); - - - - $query->from("Forum_Category.Subcategory.Subcategory"); - $coll = $query->execute(); - $category = $coll[0]; - - $count = count($this->dbh); - - $this->assertEqual($category->name, "Root"); - - $this->assertEqual($count, count($this->dbh)); - $this->assertEqual($category->Subcategory[0]->name, "Sub 1"); - $this->assertEqual($category->Subcategory[1]->name, "Sub 2"); - - $this->assertEqual($count, count($this->dbh)); - $this->assertEqual($category->Subcategory[0]->Subcategory[0]->name, "Sub 1 Sub 1"); - $this->assertEqual($category->Subcategory[0]->Subcategory[1]->name, "Sub 1 Sub 2"); - $this->assertEqual($category->Subcategory[1]->Subcategory[0]->name, "Sub 2 Sub 1"); - $this->assertEqual($category->Subcategory[1]->Subcategory[1]->name, "Sub 2 Sub 2"); - $this->assertEqual($count, count($this->dbh)); - - $this->connection->clear(); - $query->from("Forum_Category.Parent.Parent")->where("Forum_Category.name LIKE 'Sub%Sub%'"); - $coll = $query->execute(); - - $count = count($this->dbh); - $this->assertEqual($coll->count(), 4); - $this->assertEqual($coll[0]->name, "Sub 1 Sub 1"); - $this->assertEqual($coll[1]->name, "Sub 1 Sub 2"); - $this->assertEqual($coll[2]->name, "Sub 2 Sub 1"); - $this->assertEqual($coll[3]->name, "Sub 2 Sub 2"); - - $this->assertEqual($count, count($this->dbh)); - - $this->assertEqual($coll[0]->Parent->name, "Sub 1"); - $this->assertEqual($coll[1]->Parent->name, "Sub 1"); - $this->assertEqual($coll[2]->Parent->name, "Sub 2"); - $this->assertEqual($coll[3]->Parent->name, "Sub 2"); - - $this->assertEqual($count, count($this->dbh)); - - $this->assertEqual($coll[0]->Parent->Parent->name, "Root"); - $this->assertEqual($coll[1]->Parent->Parent->name, "Root"); - $this->assertEqual($coll[2]->Parent->Parent->name, "Root"); - $this->assertEqual($coll[3]->Parent->Parent->name, "Root"); - - $this->assertEqual($count, count($this->dbh)); - - $query->from("Forum_Category.Parent, Forum_Category.Subcategory")->where("Forum_Category.name = 'Sub 1' || Forum_Category.name = 'Sub 2'"); - - $coll = $query->execute(); - - $count = count($this->dbh); - - $this->assertEqual($coll->count(), 2); - $this->assertEqual($coll[0]->name, "Sub 1"); - $this->assertEqual($coll[1]->name, "Sub 2"); - - $this->assertEqual($count, count($this->dbh)); - - $this->assertEqual($coll[0]->Subcategory[0]->name, "Sub 1 Sub 1"); - $this->assertEqual($coll[0]->Subcategory[1]->name, "Sub 1 Sub 2"); - $this->assertEqual($coll[1]->Subcategory[0]->name, "Sub 2 Sub 1"); - $this->assertEqual($coll[1]->Subcategory[1]->name, "Sub 2 Sub 2"); - - $this->assertEqual($count, count($this->dbh)); - - $this->assertEqual($coll[0]->Parent->name, "Root"); - $this->assertEqual($coll[1]->Parent->name, "Root"); - - $this->assertEqual($count, count($this->dbh)); - - $this->connection->clear(); - - $query->from("Forum_Category.Subcategory.Subcategory")->where("Forum_Category.parent_category_id IS NULL"); - $coll = $query->execute(); - $this->assertEqual($coll->count(), 1); - - $count = count($this->dbh); - - $this->assertEqual($category->name, "Root"); - - $this->assertEqual($count, count($this->dbh)); - $this->assertEqual($category->Subcategory[0]->name, "Sub 1"); - $this->assertEqual($category->Subcategory[1]->name, "Sub 2"); - - $this->assertEqual($count, count($this->dbh)); - $this->assertEqual($category->Subcategory[0]->Subcategory[0]->name, "Sub 1 Sub 1"); - $this->assertEqual($category->Subcategory[0]->Subcategory[1]->name, "Sub 1 Sub 2"); - $this->assertEqual($category->Subcategory[1]->Subcategory[0]->name, "Sub 2 Sub 1"); - $this->assertEqual($category->Subcategory[1]->Subcategory[1]->name, "Sub 2 Sub 2"); - $this->assertEqual($count, count($this->dbh)); - } public function testGetPath() { $this->query->from("User.Group.Email"); @@ -1393,6 +1274,6 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase { //$this->assertTrue(isset($values['max'])); } - + */ } ?> diff --git a/tests/run.php b/tests/run.php index b8061c6bf..9d855b84c 100644 --- a/tests/run.php +++ b/tests/run.php @@ -24,6 +24,7 @@ require_once("CustomPrimaryKeyTestCase.php"); require_once("FilterTestCase.php"); require_once("ValueHolderTestCase.php"); require_once("QueryLimitTestCase.php"); +require_once("QueryReferenceModelTestCase.php"); require_once("SchemaTestCase.php"); require_once("ImportTestCase.php"); @@ -31,7 +32,7 @@ require_once("ImportTestCase.php"); error_reporting(E_ALL); $test = new GroupTest("Doctrine Framework Unit Tests"); - +/** $test->addTestCase(new Doctrine_RecordTestCase()); $test->addTestCase(new Doctrine_AccessTestCase()); @@ -75,7 +76,8 @@ $test->addTestCase(new Doctrine_ValidatorTestCase()); $test->addTestCase(new Doctrine_CollectionTestCase()); $test->addTestCase(new Doctrine_QueryTestCase()); - + */ +$test->addTestCase(new Doctrine_Query_ReferenceModel_TestCase());