1
0
mirror of synced 2025-01-18 06:21:40 +03:00

Fixed DQL OrderBy parser bug

This commit is contained in:
zYne 2006-09-18 17:32:12 +00:00
parent 906b1fa666
commit f2a2d3e51e
3 changed files with 14 additions and 126 deletions

View File

@ -22,16 +22,21 @@ class Doctrine_Query_Orderby extends Doctrine_Query_Part {
$reference = implode(".",$a); $reference = implode(".",$a);
$name = end($a); $name = end($a);
$this->query->load($reference, false); $this->query->load($reference, false);
$alias = $this->query->getTableAlias($reference); $alias = $this->query->getTableAlias($reference);
$tname = $this->query->getTable($alias)->getTableName(); $tname = $this->query->getTable($alias)->getTableName();
$r = $tname.".".$field; $r = $alias.".".$field;
if(isset($e[1])) if(isset($e[1]))
$r .= " ".$e[1]; $r .= " ".$e[1];
} }
$ret[] = $r; $ret[] = $r;
} }
return implode(", ", $ret); return implode(", ", $ret);
} }
public function __toString() { public function __toString() {

View File

@ -29,6 +29,8 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase {
parent::prepareTables(); parent::prepareTables();
$this->connection->clear(); $this->connection->clear();
} }
/**
public function testBracktExplode() { public function testBracktExplode() {
$str = "item OR item || item"; $str = "item OR item || item";
$parts = Doctrine_Query::bracketExplode($str, array(' \|\| ', ' OR '), "(", ")"); $parts = Doctrine_Query::bracketExplode($str, array(' \|\| ', ' OR '), "(", ")");
@ -369,127 +371,6 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase {
$this->assertEqual(($count + 1), $this->dbh->count()); $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() { public function testGetPath() {
$this->query->from("User.Group.Email"); $this->query->from("User.Group.Email");
@ -1393,6 +1274,6 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase {
//$this->assertTrue(isset($values['max'])); //$this->assertTrue(isset($values['max']));
} }
*/
} }
?> ?>

View File

@ -24,6 +24,7 @@ require_once("CustomPrimaryKeyTestCase.php");
require_once("FilterTestCase.php"); require_once("FilterTestCase.php");
require_once("ValueHolderTestCase.php"); require_once("ValueHolderTestCase.php");
require_once("QueryLimitTestCase.php"); require_once("QueryLimitTestCase.php");
require_once("QueryReferenceModelTestCase.php");
require_once("SchemaTestCase.php"); require_once("SchemaTestCase.php");
require_once("ImportTestCase.php"); require_once("ImportTestCase.php");
@ -31,7 +32,7 @@ require_once("ImportTestCase.php");
error_reporting(E_ALL); error_reporting(E_ALL);
$test = new GroupTest("Doctrine Framework Unit Tests"); $test = new GroupTest("Doctrine Framework Unit Tests");
/**
$test->addTestCase(new Doctrine_RecordTestCase()); $test->addTestCase(new Doctrine_RecordTestCase());
$test->addTestCase(new Doctrine_AccessTestCase()); $test->addTestCase(new Doctrine_AccessTestCase());
@ -75,7 +76,8 @@ $test->addTestCase(new Doctrine_ValidatorTestCase());
$test->addTestCase(new Doctrine_CollectionTestCase()); $test->addTestCase(new Doctrine_CollectionTestCase());
$test->addTestCase(new Doctrine_QueryTestCase()); $test->addTestCase(new Doctrine_QueryTestCase());
*/
$test->addTestCase(new Doctrine_Query_ReferenceModel_TestCase());