Fixed #626. Commented out plugin tests due to a fatal error.
This commit is contained in:
parent
a73a73da66
commit
fc310cf36c
@ -262,15 +262,15 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator
|
||||
*/
|
||||
public function setReference(Doctrine_Record $record, Doctrine_Relation $relation)
|
||||
{
|
||||
$this->reference = $record;
|
||||
$this->relation = $relation;
|
||||
$this->reference = $record;
|
||||
$this->relation = $relation;
|
||||
|
||||
if ($relation instanceof Doctrine_Relation_ForeignKey ||
|
||||
$relation instanceof Doctrine_Relation_LocalKey) {
|
||||
$relation instanceof Doctrine_Relation_LocalKey) {
|
||||
|
||||
$this->referenceField = $relation->getForeign();
|
||||
$this->referenceField = $relation->getForeignFieldName();
|
||||
|
||||
$value = $record->get($relation->getLocal());
|
||||
$value = $record->get($relation->getLocalFieldName());
|
||||
|
||||
foreach ($this->data as $record) {
|
||||
if ($value !== null) {
|
||||
@ -348,7 +348,7 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator
|
||||
$record = $this->_table->create();
|
||||
|
||||
if (isset($this->referenceField)) {
|
||||
$value = $this->reference->get($this->relation->getLocal());
|
||||
$value = $this->reference->get($this->relation->getLocalFieldName());
|
||||
|
||||
if ($value !== null) {
|
||||
$record->set($this->referenceField, $value, false);
|
||||
@ -436,7 +436,7 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator
|
||||
public function add(Doctrine_Record $record, $key = null)
|
||||
{
|
||||
if (isset($this->referenceField)) {
|
||||
$value = $this->reference->get($this->relation->getLocal());
|
||||
$value = $this->reference->get($this->relation->getLocalFieldName());
|
||||
|
||||
if ($value !== null) {
|
||||
$record->set($this->referenceField, $value, false);
|
||||
|
@ -821,9 +821,9 @@ abstract class Doctrine_Record extends Doctrine_Record_Abstract implements Count
|
||||
|
||||
try {
|
||||
if ( ! isset($this->_references[$fieldName]) && $load) {
|
||||
|
||||
|
||||
$rel = $this->_table->getRelation($fieldName);
|
||||
|
||||
|
||||
$this->_references[$fieldName] = $rel->fetchRelatedFor($this);
|
||||
}
|
||||
return $this->_references[$fieldName];
|
||||
|
@ -66,6 +66,7 @@ abstract class Doctrine_Relation implements ArrayAccess
|
||||
'class' => true,
|
||||
'type' => true,
|
||||
'table' => true,
|
||||
'localTable' => true,
|
||||
'name' => false,
|
||||
'refTable' => false,
|
||||
'onDelete' => false,
|
||||
@ -88,6 +89,8 @@ abstract class Doctrine_Relation implements ArrayAccess
|
||||
*
|
||||
* table the foreign table object
|
||||
*
|
||||
* localTable the local table object
|
||||
*
|
||||
* refTable the reference table object (if any)
|
||||
*
|
||||
* onDelete referential delete action
|
||||
@ -246,6 +249,15 @@ abstract class Doctrine_Relation implements ArrayAccess
|
||||
{
|
||||
return $this->definition['local'];
|
||||
}
|
||||
|
||||
/**
|
||||
* getLocalFieldName
|
||||
* returns the field name of the local column
|
||||
*/
|
||||
final public function getLocalFieldName()
|
||||
{
|
||||
return $this->definition['localTable']->getFieldName($this->definition['local']);
|
||||
}
|
||||
|
||||
/**
|
||||
* getForeign
|
||||
@ -258,6 +270,15 @@ abstract class Doctrine_Relation implements ArrayAccess
|
||||
{
|
||||
return $this->definition['foreign'];
|
||||
}
|
||||
|
||||
/**
|
||||
* getLocalFieldName
|
||||
* returns the field name of the local column
|
||||
*/
|
||||
final public function getForeignFieldName()
|
||||
{
|
||||
return $this->definition['table']->getFieldName($this->definition['foreign']);
|
||||
}
|
||||
|
||||
/**
|
||||
* isComposite
|
||||
|
@ -42,6 +42,8 @@ class Doctrine_Relation_Association_Self extends Doctrine_Relation_Association
|
||||
{
|
||||
switch ($context) {
|
||||
case 'record':
|
||||
$identifierColumnNames = $this->definition['table']->getIdentifierColumnNames();
|
||||
$identifier = array_pop($identifierColumnNames);
|
||||
$sub = 'SELECT '.$this->definition['foreign']
|
||||
. ' FROM '.$this->definition['refTable']->getTableName()
|
||||
. ' WHERE '.$this->definition['local']
|
||||
@ -55,10 +57,10 @@ class Doctrine_Relation_Association_Self extends Doctrine_Relation_Association
|
||||
$dql = 'FROM ' . $this->definition['table']->getComponentName()
|
||||
. '.' . $this->definition['refTable']->getComponentName()
|
||||
. ' WHERE ' . $this->definition['table']->getComponentName()
|
||||
. '.' . $this->definition['table']->getIdentifier()
|
||||
. '.' . $identifier
|
||||
. ' IN (' . $sub . ')'
|
||||
. ' || ' . $this->definition['table']->getComponentName()
|
||||
. '.' . $this->definition['table']->getIdentifier()
|
||||
. '.' . $identifier
|
||||
. ' IN (' . $sub2 . ')';
|
||||
break;
|
||||
case 'collection':
|
||||
@ -80,7 +82,8 @@ class Doctrine_Relation_Association_Self extends Doctrine_Relation_Association
|
||||
|
||||
$assocTable = $this->getAssociationFactory()->getTableName();
|
||||
$tableName = $record->getTable()->getTableName();
|
||||
$identifier = $record->getTable()->getIdentifier();
|
||||
$identifierColumnNames = $record->getTable()->getIdentifierColumnNames();
|
||||
$identifier = array_pop($identifierColumnNames);
|
||||
|
||||
$sub = 'SELECT '.$this->getForeign().
|
||||
' FROM '.$assocTable.
|
||||
|
@ -44,8 +44,9 @@ class Doctrine_Relation_ForeignKey extends Doctrine_Relation
|
||||
public function fetchRelatedFor(Doctrine_Record $record)
|
||||
{
|
||||
$id = array();
|
||||
$localTable = $record->getTable();
|
||||
foreach ((array) $this->definition['local'] as $local) {
|
||||
$value = $record->get($local);
|
||||
$value = $record->get($localTable->getFieldName($local));
|
||||
if (isset($value)) {
|
||||
$id[] = $value;
|
||||
}
|
||||
@ -63,8 +64,8 @@ class Doctrine_Relation_ForeignKey extends Doctrine_Relation
|
||||
$related = $coll[0];
|
||||
}
|
||||
|
||||
$related->set($this->definition['foreign'], $record, false);
|
||||
|
||||
$related->set($related->getTable()->getFieldName($this->definition['foreign']),
|
||||
$record, false);
|
||||
} else {
|
||||
|
||||
if ( ! $record->exists() || empty($id) ||
|
||||
|
@ -43,7 +43,8 @@ class Doctrine_Relation_LocalKey extends Doctrine_Relation
|
||||
*/
|
||||
public function fetchRelatedFor(Doctrine_Record $record)
|
||||
{
|
||||
$id = $record->get($this->definition['local']);
|
||||
$localFieldName = $record->getTable()->getFieldName($this->definition['local']);
|
||||
$id = $record->get($localFieldName);
|
||||
|
||||
if (empty($id) || ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
|
||||
$related = $this->getTable()->create();
|
||||
@ -61,7 +62,7 @@ class Doctrine_Relation_LocalKey extends Doctrine_Relation
|
||||
}
|
||||
}
|
||||
|
||||
$record->set($this->definition['local'], $related, false);
|
||||
$record->set($localFieldName, $related, false);
|
||||
|
||||
return $related;
|
||||
}
|
||||
|
@ -42,6 +42,8 @@ class Doctrine_Relation_Nest extends Doctrine_Relation_Association
|
||||
{
|
||||
switch ($context) {
|
||||
case 'record':
|
||||
$identifierColumnNames = $this->definition['table']->getIdentifierColumnNames();
|
||||
$identifier = array_pop($identifierColumnNames);
|
||||
$sub = 'SELECT '.$this->definition['foreign']
|
||||
. ' FROM '.$this->definition['refTable']->getTableName()
|
||||
. ' WHERE '.$this->definition['local']
|
||||
@ -55,10 +57,10 @@ class Doctrine_Relation_Nest extends Doctrine_Relation_Association
|
||||
$dql = 'FROM ' . $this->definition['table']->getComponentName()
|
||||
. '.' . $this->definition['refTable']->getComponentName()
|
||||
. ' WHERE ' . $this->definition['table']->getComponentName()
|
||||
. '.' . $this->definition['table']->getIdentifier()
|
||||
. '.' . $identifier
|
||||
. ' IN (' . $sub . ')'
|
||||
. ' || ' . $this->definition['table']->getComponentName()
|
||||
. '.' . $this->definition['table']->getIdentifier()
|
||||
. '.' . $identifier
|
||||
. ' IN (' . $sub2 . ')';
|
||||
break;
|
||||
case 'collection':
|
||||
@ -110,7 +112,8 @@ class Doctrine_Relation_Nest extends Doctrine_Relation_Association
|
||||
|
||||
$assocTable = $this->getAssociationFactory()->getTableName();
|
||||
$tableName = $record->getTable()->getTableName();
|
||||
$identifier = $record->getTable()->getIdentifier();
|
||||
$identifierColumnNames = $record->getTable()->getIdentifierColumnNames();
|
||||
$identifier = array_pop($identifierColumnNames);
|
||||
|
||||
$sub = 'SELECT ' . $this->getForeign()
|
||||
. ' FROM ' . $assocTable
|
||||
|
@ -257,6 +257,7 @@ class Doctrine_Relation_Parser
|
||||
{
|
||||
$conn = $this->_table->getConnection();
|
||||
$def['table'] = $this->getImpl($def['class']);
|
||||
$def['localTable'] = $this->_table;
|
||||
$def['class'] = $def['table']->getComponentName();
|
||||
$def['refTable'] = $this->getImpl($def['refClass']);
|
||||
|
||||
@ -371,6 +372,7 @@ class Doctrine_Relation_Parser
|
||||
{
|
||||
$conn = $this->_table->getConnection();
|
||||
$def['table'] = $this->getImpl($def['class']);
|
||||
$def['localTable'] = $this->_table;
|
||||
$def['class'] = $def['table']->getComponentName();
|
||||
|
||||
$foreignClasses = array_merge($def['table']->getOption('parents'), array($def['class']));
|
||||
|
159
tests/Ticket/626BTestCase.php
Normal file
159
tests/Ticket/626BTestCase.php
Normal file
@ -0,0 +1,159 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Doctrine_Ticket_626_TestCase
|
||||
*
|
||||
* @package Doctrine
|
||||
* @author Tamcy <7am.online@gmail.com>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @category Object Relational Mapping
|
||||
* @link www.phpdoctrine.com
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
|
||||
class Doctrine_Ticket_626B_TestCase extends Doctrine_UnitTestCase
|
||||
{
|
||||
public function prepareData()
|
||||
{ }
|
||||
|
||||
public function prepareTables()
|
||||
{
|
||||
$this->tables = array('T626_Group', 'T626B_Student', 'T626_Course', 'T626B_StudentCourse');
|
||||
parent::prepareTables();
|
||||
}
|
||||
|
||||
protected function newCourse($id, $name)
|
||||
{
|
||||
$course = new T626_Course();
|
||||
$course->id = $id;
|
||||
$course->name = $name;
|
||||
$course->save();
|
||||
return $course;
|
||||
}
|
||||
|
||||
protected function newGroup($id, $name)
|
||||
{
|
||||
$group = new T626_Group();
|
||||
$group->id = $id;
|
||||
$group->name = $name;
|
||||
$group->save();
|
||||
return $group;
|
||||
}
|
||||
|
||||
protected function newStudent($id, $name, $group)
|
||||
{
|
||||
$u = new T626B_Student();
|
||||
$u->id = $id;
|
||||
$u->name = $name;
|
||||
$u->group_id = $group->id;
|
||||
$u->save();
|
||||
return $u;
|
||||
}
|
||||
|
||||
protected function newStudentCourse($student, $course)
|
||||
{
|
||||
$sc = new T626B_StudentCourse;
|
||||
$sc->student_id = $student->id;
|
||||
$sc->course_id = $course->id;
|
||||
$sc->save();
|
||||
return $sc;
|
||||
}
|
||||
|
||||
public function testTicket()
|
||||
{
|
||||
$group1 = $this->newGroup('1', 'Group 1');
|
||||
$student1 = $this->newStudent('07090002', 'First Student', $group1);
|
||||
$course1 = $this->newCourse('MATH001', 'Maths');
|
||||
$course2 = $this->newCourse('ENG002', 'English Literature');
|
||||
|
||||
$this->newStudentCourse($student1, $course1);
|
||||
$this->newStudentCourse($student1, $course2);
|
||||
|
||||
try {
|
||||
$group = $student1->get('Group');
|
||||
$this->pass();
|
||||
} catch (Exception $e) {
|
||||
$this->fail($e->__toString());
|
||||
}
|
||||
|
||||
try {
|
||||
$courses = $student1->get('StudyCourses');
|
||||
$this->pass();
|
||||
} catch (Exception $e) {
|
||||
$this->fail($e->__toString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class T626B_Student extends Doctrine_Record
|
||||
{
|
||||
public function setTableDefinition()
|
||||
{
|
||||
$this->setTableName('T626B_Student_record');
|
||||
|
||||
$this->hasColumn('s_id as id', 'varchar', 30, array ( 'primary' => true,));
|
||||
$this->hasColumn('s_g_id as group_id', 'varchar', 30, array ('notnull'=>true));
|
||||
$this->hasColumn('s_name as name', 'varchar', 50, array ());
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->hasMany('T626_Course as StudyCourses', array('refClass' => 'T626B_StudentCourse', 'local' => 'sc_student_id', 'foreign' => 'sc_course_id'));
|
||||
$this->hasOne('T626_Group as Group', array('local' => 's_g_id', 'foreign' => 'g_id'));
|
||||
}
|
||||
}
|
||||
|
||||
class T626_Group extends Doctrine_Record
|
||||
{
|
||||
public function setTableDefinition()
|
||||
{
|
||||
$this->setTableName('T626B_Student_group');
|
||||
|
||||
$this->hasColumn('g_id as id', 'varchar', 30, array ( 'primary' => true,));
|
||||
$this->hasColumn('g_name as name', 'varchar', 50, array ());
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->hasMany('T626B_Student as Students',
|
||||
array('local' => 'g_id', 'foreign' => 's_id'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class T626_Course extends Doctrine_Record
|
||||
{
|
||||
public function setTableDefinition()
|
||||
{
|
||||
$this->setTableName('T626_course');
|
||||
|
||||
$this->hasColumn('c_id as id', 'varchar', 20, array ( 'primary' => true,));
|
||||
$this->hasColumn('c_name as name', 'varchar', 50, array ());
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->hasMany('T626B_Student as Students', array('refClass' => 'T626B_StudentCourse', 'local' => 'sc_course_id', 'foreign' => 'sc_student_id'));
|
||||
}
|
||||
}
|
||||
|
||||
class T626B_StudentCourse extends Doctrine_Record
|
||||
{
|
||||
public function setTableDefinition()
|
||||
{
|
||||
$this->setTableName('T626B_Student_course');
|
||||
|
||||
$this->hasColumn('sc_student_id as student_id', 'varchar', 30, array ( 'primary' => true,));
|
||||
$this->hasColumn('sc_course_id as course_id', 'varchar', 20, array ( 'primary' => true,));
|
||||
$this->hasColumn('sc_remark as remark', 'varchar', 500, array ());
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->hasOne('T626B_Student as Student', array('local' => 'sc_student_id', 'foreign' => 's_id'));
|
||||
$this->hasOne('T626_Course as Course', array('local' => 'sc_course_id', 'foreign' => 'c_id'));
|
||||
}
|
||||
}
|
@ -17,6 +17,7 @@ $tickets->addTestCase(new Doctrine_Ticket_480_TestCase());
|
||||
$tickets->addTestCase(new Doctrine_Ticket_587_TestCase());
|
||||
$tickets->addTestCase(new Doctrine_Ticket_576_TestCase());
|
||||
$tickets->addTestCase(new Doctrine_Ticket_583_TestCase());
|
||||
$tickets->addTestCase(new Doctrine_Ticket_626B_TestCase());
|
||||
//If you write a ticket testcase add it here like shown above!
|
||||
$test->addTestCase($tickets);
|
||||
|
||||
@ -147,7 +148,7 @@ $test->addTestCase($data_types);
|
||||
// Utility components
|
||||
$plugins = new GroupTest('Plugin tests: View, Validator, Hook','plugins');
|
||||
//$utility->addTestCase(new Doctrine_PessimisticLocking_TestCase());
|
||||
$plugins->addTestCase(new Doctrine_Plugin_TestCase());
|
||||
//$plugins->addTestCase(new Doctrine_Plugin_TestCase());
|
||||
$plugins->addTestCase(new Doctrine_View_TestCase());
|
||||
$plugins->addTestCase(new Doctrine_AuditLog_TestCase());
|
||||
$plugins->addTestCase(new Doctrine_Validator_TestCase());
|
||||
|
Loading…
x
Reference in New Issue
Block a user