Fixed DQL OrderBy parser bug
This commit is contained in:
parent
906b1fa666
commit
f2a2d3e51e
@ -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() {
|
||||||
|
@ -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']));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -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());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user