Commit b022675a authored by pookey's avatar pookey

little refactorings

parent e75f3598
......@@ -493,8 +493,17 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator
public function loadRelated($name = null) {
$query = new Doctrine_Query($this->table->getSession());
if( ! isset($name))
if( ! isset($name)) {
foreach($this->data as $record):
$value = $record->getIncremented();
if($value !== null)
$list[] = $value;
endforeach;
$query->from($this->table->getComponentName()."(".implode(", ",$this->table->getPrimaryKeys()).")");
$query->where($this->table->getComponentName().".id IN (".substr(str_repeat("?, ", count($list)),0,-2).")");
return $query;
}
$rel = $this->table->getForeignKey($name);
$table = $rel->getTable();
......@@ -516,7 +525,20 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator
$dql = $rel->getRelationDql(count($list), 'collection');
$coll = $query->query($dql, $list);
$this->populateRelated($name, $coll);
}
/**
* populateRelated
*
* @param string $name
* @param Doctrine_Collection $coll
* @return void
*/
public function populateRelated($name, Doctrine_Collection $coll) {
$rel = $this->table->getForeignKey($name);
$table = $rel->getTable();
$foreign = $rel->getForeign();
$local = $rel->getLocal();
if($rel instanceof Doctrine_LocalKey) {
foreach($this->data as $key => $record) {
......@@ -565,7 +587,6 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator
$this->data[$key]->setRelated($name, $sub);
}
}
}
/**
* getNormalIterator
......
......@@ -1140,27 +1140,19 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
}
break;
default:
$query = $fk->getRelationDql(1);
// ONE-TO-MANY
if($fk instanceof Doctrine_ForeignKey) {
$id = $this->get($local);
$query = "FROM ".$table->getComponentName()." WHERE ".$table->getComponentName().".".$fk->getForeign()." = ?";
$coll = $graph->query($query,array($id));
$this->references[$name] = $coll;
$this->references[$name]->setReference($this, $fk);
$this->originals[$name] = clone $coll;
$coll = $graph->query($query,array($id));
$coll->setReference($this, $fk);
} elseif($fk instanceof Doctrine_Association) {
$query = $fk->getRelationDql(1);
$coll = $graph->query($query, array($this->getIncremented()));
$this->references[$name] = $coll;
$this->originals[$name] = clone $coll;
$id = $this->getIncremented();
$coll = $graph->query($query, array($id));
}
$this->references[$name] = $coll;
$this->originals[$name] = clone $coll;
endswitch;
break;
endswitch;
......@@ -1179,17 +1171,6 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
return $this->filters[$componentAlias];
}
/**
* sets enumerated value array for given field
*
* @param string $field
* @param array $values
* @return void
*/
final public function setEnumValues($field, array $values) {
$this->table->setEnumValues($field, $values);
}
/**
* binds One-to-One composite relation
*
......@@ -1230,14 +1211,6 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
final public function hasMany($componentName,$foreignKey, $localKey = null) {
$this->table->bind($componentName,$foreignKey,Doctrine_Relation::MANY_AGGREGATE, $localKey);
}
/**
* setInheritanceMap
* @param array $inheritanceMap
* @return void
*/
final public function setInheritanceMap(array $inheritanceMap) {
$this->table->setInheritanceMap($inheritanceMap);
}
/**
* setPrimaryKey
* @param mixed $key
......@@ -1245,24 +1218,6 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
final public function setPrimaryKey($key) {
$this->table->setPrimaryKey($key);
}
/**
* setTableName
* @param string $name table name
* @return void
*/
final public function setTableName($name) {
$this->table->setTableName($name);
}
/**
* setAttribute
* @param integer $attribute
* @param mixed $value
* @see Doctrine::ATTR_* constants
* @return void
*/
final public function setAttribute($attribute, $value) {
$this->table->setAttribute($attribute,$value);
}
/**
* hasColumn
* sets a column definition
......@@ -1294,6 +1249,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
* @param array $a
*/
public function __call($m,$a) {
if(method_exists($this->table, $m))
return call_user_func_array(array($this->table, $m), $a);
if( ! function_exists($m))
throw new Doctrine_Record_Exception("unknown callback '$m'");
......@@ -1302,16 +1260,8 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
$a[0] = $this->get($column);
$newvalue = call_user_func_array($m, $a);
/**
if( ! isset($a[1]) || $a[1] == Doctrine_Record::CALLBACK_RAW) {
*/
$this->data[$column] = $newvalue;
/**
} elseif($a[1] == Doctrine_Record::CALLBACK_STATEWISE) {
$this->set($column, call_user_func_array($m, $a));
}
*/
$this->data[$column] = $newvalue;
}
return $this;
}
......
......@@ -14,13 +14,7 @@ class Doctrine_CollectionTestCase extends Doctrine_UnitTestCase {
$this->assertTrue($coll->count(),3);
$this->assertEqual($coll->getKeys(), array(0,1,2));
}
public function testLoadRelated() {
$coll = $this->session->query("FROM User");
$q = $coll->loadRelated();
$this->assertTrue($q instanceof Doctrine_Query);
}
public function testLoadRelatedForAssociation() {
$coll = $this->session->query("FROM User");
......@@ -75,7 +69,22 @@ class Doctrine_CollectionTestCase extends Doctrine_UnitTestCase {
$this->session->clear();
}
public function testLoadRelated() {
$coll = $this->session->query("FROM User(id)");
$q = $coll->loadRelated();
$this->assertTrue($q instanceof Doctrine_Query);
$q->addFrom('User.Group');
$coll2 = $q->execute($coll->getPrimaryKeys());
$this->assertEqual($coll2->count(), $coll->count());
$count = $this->dbh->count();
$coll[0]->Group[0];
$this->assertEqual($count, $this->dbh->count());
}
public function testLoadRelatedForLocalKeyRelation() {
$coll = $this->session->query("FROM User");
......
......@@ -23,6 +23,7 @@ require_once("RawSqlTestCase.php");
require_once("CustomPrimaryKeyTestCase.php");
require_once("FilterTestCase.php");
require_once("ValueHolderTestCase.php");
require_once("QueryLimitTestCase.php");
error_reporting(E_ALL);
......@@ -66,6 +67,8 @@ $test->addTestCase(new Doctrine_ValidatorTestCase());
$test->addTestCase(new Doctrine_CollectionTestCase());
$test->addTestCase(new Doctrine_Query_Limit_TestCase());
//$test->addTestCase(new Doctrine_Cache_FileTestCase());
//$test->addTestCase(new Doctrine_Cache_SqliteTestCase());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment