1
0
mirror of synced 2024-12-05 03:06:05 +03:00

DQL alias bug fixed

This commit is contained in:
doctrine 2006-05-17 17:58:40 +00:00
parent c9e345d4ac
commit 94005a9fdd
6 changed files with 35 additions and 12 deletions

View File

@ -601,6 +601,7 @@ class Doctrine_Query extends Doctrine_Access {
$field = array_pop($a);
$reference = implode(".",$a);
$name = end($a);
$this->load($reference);
$tname = $this->tables[$name]->getTableName();
@ -788,14 +789,20 @@ class Doctrine_Query extends Doctrine_Access {
$operator = array_shift($e);
$value = implode(" ",$e);
$reference = implode(".",$a);
$objTable = $this->session->getTable(end($a));
if(count($a) > 1)
$objTable = $this->tables[$a[0]]->getForeignKey(end($a))->getTable();
else
$objTable = $this->session->getTable(end($a));
$where = $objTable->getTableName().".".$field." ".$operator." ".$value;
if(count($a) > 1 && isset($a[1])) {
$root = $a[0];
$fk = $this->tables[$root]->getForeignKey($a[1]);
if($fk instanceof Doctrine_Association) {
$asf = $fk->getAssociationFactory();
$asf = $fk->getAssociationFactory();
switch($fk->getType()):
case Doctrine_Relation::ONE_AGGREGATE:
case Doctrine_Relation::ONE_COMPOSITE:
@ -803,15 +810,15 @@ class Doctrine_Query extends Doctrine_Access {
break;
case Doctrine_Relation::MANY_AGGREGATE:
case Doctrine_Relation::MANY_COMPOSITE:
$b = array_shift($a);
$b = array_shift($a);
$b = $fk->getTable()->getComponentName();
$graph = new Doctrine_Query($this->session);
$graph->parseQuery("FROM $b-l WHERE $where");
$where = $this->tables[$root]->getTableName().".".$this->tables[$root]->getIdentifier()." IN (SELECT ".$fk->getLocal()." FROM ".$asf->getTableName()." WHERE ".$fk->getForeign()." IN (".$graph->getQuery()."))";
break;
endswitch;
} else
$this->load($reference);
$this->load($reference);
} else
$this->load($reference);

View File

@ -23,7 +23,7 @@ class Doctrine_Table extends Doctrine_Configurable {
/**
* @var array $relations an array containing all the Doctrine_Relation objects for this table
*/
private $relations = array();
private $relations = array();
/**
* @var array $primaryKeys an array containing all primary key column names
*/

View File

@ -1,5 +1,20 @@
<?php
class Doctrine_QueryTestCase extends Doctrine_UnitTestCase {
public function testQueryWithAliases() {
$task = new Task();
$task->name = "Task 1";
$task->ResourceAlias[0]->name = "Resource 1";
$task->ResourceAlias[1]->name = "Resource 2";
$task->save();
$query = new Doctrine_Query($this->session);
$coll = $query->query("FROM Task WHERE Task.ResourceAlias.name = 'Resource 1'");
$this->assertEqual($coll->count(), 1);
$this->assertTrue($coll[0] instanceof Task);
}
public function testQueryArgs() {
$query = new Doctrine_Query($this->session);
$query = $query->from("User-l");
@ -75,7 +90,9 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase {
$this->assertEqual($users->count(),8);
$this->assertTrue($users[0]->name == "Arnold Schwarzenegger");
}
public function testQuery() {
$query = new Doctrine_Query($this->session);
$this->graph = $query;
@ -244,8 +261,6 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase {
$this->assertTrue($users instanceof Doctrine_Collection);
$this->assertEqual($users->count(),1);
$values = $query->query("SELECT COUNT(User.name) AS users, MAX(User.name) AS max FROM User");
$this->assertEqual(trim($query->getQuery()),"SELECT COUNT(entity.name) AS users, MAX(entity.name) AS max FROM entity WHERE (entity.type = 0)");
$this->assertTrue(is_array($values));

View File

@ -1,6 +1,7 @@
<?php
require_once("UnitTestCase.class.php");
class Doctrine_TableTestCase extends Doctrine_UnitTestCase {
public function testGetIdentifier() {
$table = $this->session->getTable("User");
}
@ -27,7 +28,7 @@ class Doctrine_TableTestCase extends Doctrine_UnitTestCase {
$this->assertTrue($fk->getLocal() == $this->objTable->getIdentifier());
$this->assertTrue($fk->getForeign() == "entity_id");
}
public function testGetComponentName() {
$this->assertTrue($this->objTable->getComponentName() == "User");

View File

@ -98,6 +98,7 @@ class Phonenumber extends Doctrine_Record {
$this->hasColumn("entity_id","integer");
}
}
class Element extends Doctrine_Record {
public function setTableDefinition() {
$this->hasColumn("name", "string", 100);

View File

@ -27,13 +27,13 @@ $test = new GroupTest("Doctrine Framework Unit Tests");
$test->addTestCase(new Doctrine_TableTestCase());
$test->addTestCase(new Doctrine_SessionTestCase());
$test->addTestCase(new Doctrine_RecordTestCase());
$test->addTestCase(new Doctrine_TableTestCase());
$test->addTestCase(new Doctrine_ValidatorTestCase());
@ -54,7 +54,6 @@ $test->addTestCase(new Doctrine_Collection_OffsetTestCase());
$test->addTestCase(new Sensei_UnitTestCase());
$test->addTestCase(new Doctrine_QueryTestCase());
//$test->addTestCase(new Doctrine_Cache_FileTestCase());
//$test->addTestCase(new Doctrine_Cache_SqliteTestCase());