Commit a2046460 authored by zYne's avatar zYne

Relation model rewrite, draft 2

parent 94e5ce73
...@@ -684,7 +684,7 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun ...@@ -684,7 +684,7 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
} }
} catch(Doctrine_Adapter_Exception $e) { } catch(Doctrine_Adapter_Exception $e) {
} catch(PDOException $e) { } } catch(PDOException $e) { }
print Doctrine_Lib::formatSql($query);
$this->rethrowException($e); $this->rethrowException($e);
} }
/** /**
...@@ -742,18 +742,22 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun ...@@ -742,18 +742,22 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
* @param string $name component name * @param string $name component name
* @return object Doctrine_Table * @return object Doctrine_Table
*/ */
public function getTable($name) public function getTable($name, $allowExport = true)
{ {
if (isset($this->tables[$name])) { if (isset($this->tables[$name])) {
return $this->tables[$name]; return $this->tables[$name];
} }
$class = $name."Table"; $class = $name . 'Table';
if (class_exists($class) && in_array("Doctrine_Table", class_parents($class))) { if (class_exists($class) && in_array('Doctrine_Table', class_parents($class))) {
return new $class($name, $this); $table = new $class($name, $this, $allowExport);
} else { } else {
return new Doctrine_Table($name, $this); $table = new Doctrine_Table($name, $this, $allowExport);
} }
$this->tables[$name] = $table;
return $table;
} }
/** /**
* returns an array of all initialized tables * returns an array of all initialized tables
......
...@@ -47,13 +47,13 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module implemen ...@@ -47,13 +47,13 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module implemen
{ {
$tree = array(); $tree = array();
foreach ($tables as $k => $table) { foreach ($tables as $k => $table) {
$k = $k.$table;
if ( ! ($table instanceof Doctrine_Table)) { if ( ! ($table instanceof Doctrine_Table)) {
$table = $this->conn->getTable($table); $table = $this->conn->getTable($table);
} }
$nm = $table->getComponentName(); $nm = $table->getComponentName();
$index = array_search($nm,$tree); $index = array_search($nm, $tree);
if ($index === false) { if ($index === false) {
$tree[] = $nm; $tree[] = $nm;
...@@ -110,17 +110,17 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module implemen ...@@ -110,17 +110,17 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module implemen
if ($index2 !== false) if ($index2 !== false)
unset($tree[$index2]); unset($tree[$index2]);
array_splice($tree,$index, 0,$name); array_splice($tree, $index, 0, $name);
$index++; $index++;
$index3 = array_search($n,$tree); $index3 = array_search($n, $tree);
if ($index3 !== false) { if ($index3 !== false) {
if ($index3 >= $index) if ($index3 >= $index)
continue; continue;
unset($tree[$index]); unset($tree[$index]);
array_splice($tree,$index3,0,$n); array_splice($tree, $index3, 0, $n);
$index = $index2; $index = $index2;
} else { } else {
$tree[] = $n; $tree[] = $n;
......
...@@ -583,14 +583,15 @@ class Doctrine_Export extends Doctrine_Connection_Module ...@@ -583,14 +583,15 @@ class Doctrine_Export extends Doctrine_Connection_Module
*/ */
public function getIndexFieldDeclarationList(array $fields) public function getIndexFieldDeclarationList(array $fields)
{ {
$ret = array();
foreach ($fields as $field => $definition) { foreach ($fields as $field => $definition) {
if(is_array($definition)) { if(is_array($definition)) {
$fields[] = $this->conn->quoteIdentifier($field); $ret[] = $this->conn->quoteIdentifier($field);
} else { } else {
$fields[] = $definition; $ret[] = $this->conn->quoteIdentifier($definition);
} }
} }
return implode(', ', $fields); return implode(', ', $ret);
} }
/** /**
* getForeignKeyDeclaration * getForeignKeyDeclaration
...@@ -686,6 +687,7 @@ class Doctrine_Export extends Doctrine_Connection_Module ...@@ -686,6 +687,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
$sql .= 'CONSTRAINT ' . $definition['name'] . ' '; $sql .= 'CONSTRAINT ' . $definition['name'] . ' ';
} }
$sql .= 'FOREIGN KEY '; $sql .= 'FOREIGN KEY ';
if ( ! isset($definition['local'])) { if ( ! isset($definition['local'])) {
throw new Doctrine_Export_Exception('Local reference field missing from definition.'); throw new Doctrine_Export_Exception('Local reference field missing from definition.');
} }
......
...@@ -776,7 +776,6 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite ...@@ -776,7 +776,6 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
$this->loadReference($name); $this->loadReference($name);
} }
} catch(Doctrine_Table_Exception $e) { } catch(Doctrine_Table_Exception $e) {
print $e;
throw new Doctrine_Record_Exception("Unknown property / related component '$name'."); throw new Doctrine_Record_Exception("Unknown property / related component '$name'.");
} }
...@@ -1378,9 +1377,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite ...@@ -1378,9 +1377,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
* @param string $fkField * @param string $fkField
* @return void * @return void
*/ */
final public function ownsOne($componentName, $foreignKey, $localKey = null) final public function ownsOne($componentName, $foreignKey, $options = null)
{ {
$this->_table->bind($componentName, $foreignKey, Doctrine_Relation::ONE_COMPOSITE, $localKey); $this->_table->bind($componentName, $foreignKey, Doctrine_Relation::ONE_COMPOSITE, $options);
} }
/** /**
* binds One-to-Many composite relation * binds One-to-Many composite relation
...@@ -1389,9 +1388,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite ...@@ -1389,9 +1388,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
* @param string $fkField * @param string $fkField
* @return void * @return void
*/ */
final public function ownsMany($componentName, $foreignKey, $localKey = null) final public function ownsMany($componentName, $foreignKey, $options = null)
{ {
$this->_table->bind($componentName, $foreignKey, Doctrine_Relation::MANY_COMPOSITE, $localKey); $this->_table->bind($componentName, $foreignKey, Doctrine_Relation::MANY_COMPOSITE, $options);
} }
/** /**
* binds One-to-One aggregate relation * binds One-to-One aggregate relation
...@@ -1400,9 +1399,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite ...@@ -1400,9 +1399,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
* @param string $fkField * @param string $fkField
* @return void * @return void
*/ */
final public function hasOne($componentName, $foreignKey, $localKey = null) final public function hasOne($componentName, $foreignKey, $options = null)
{ {
$this->_table->bind($componentName, $foreignKey, Doctrine_Relation::ONE_AGGREGATE, $localKey); $this->_table->bind($componentName, $foreignKey, Doctrine_Relation::ONE_AGGREGATE, $options);
} }
/** /**
* binds One-to-Many aggregate relation * binds One-to-Many aggregate relation
...@@ -1411,9 +1410,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite ...@@ -1411,9 +1410,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
* @param string $fkField * @param string $fkField
* @return void * @return void
*/ */
final public function hasMany($componentName, $foreignKey, $localKey = null) final public function hasMany($componentName, $foreignKey, $options = null)
{ {
$this->_table->bind($componentName, $foreignKey, Doctrine_Relation::MANY_AGGREGATE, $localKey); $this->_table->bind($componentName, $foreignKey, Doctrine_Relation::MANY_AGGREGATE, $options);
} }
/** /**
* hasColumn * hasColumn
......
...@@ -56,16 +56,22 @@ abstract class Doctrine_Relation ...@@ -56,16 +56,22 @@ abstract class Doctrine_Relation
const ONE = 0; const ONE = 0;
const MANY = 1; const MANY = 1;
protected $definition = array('alias' => true, protected $definition = array('alias' => true,
'foreign' => true, 'foreign' => true,
'local' => true, 'local' => true,
'table' => true, 'class' => true,
'type' => true,
'name' => false,
'assocTable' => false,
'onDelete' => false,
'onUpdate' => false,
'deferred' => false,
); );
/** /**
* constructor * constructor
* *
* @param array $definition an associative array with the following structure: * @param array $definition an associative array with the following structure:
* name related class name * name foreign key constraint name
* *
* local the local field(s) * local the local field(s)
* *
...@@ -106,13 +112,26 @@ abstract class Doctrine_Relation ...@@ -106,13 +112,26 @@ abstract class Doctrine_Relation
*/ */
public function __construct(array $definition) public function __construct(array $definition)
{ {
foreach (array_keys($this->definition) as $key) { $def = array();
if ( ! isset($definition[$key])) { foreach ($this->definition as $key => $val) {
if ( ! isset($definition[$key]) && $val) {
throw new Doctrine_Exception($key . ' is required!'); throw new Doctrine_Exception($key . ' is required!');
} }
if (isset($definition[$key])) {
$def[$key] = $definition[$key];
}
} }
$this->definition = $definition; $this->definition = $def;
}
/**
* toArray
*
* @return array
*/
public function toArray()
{
return $this->definition;
} }
/** /**
* getAlias * getAlias
...@@ -143,7 +162,7 @@ abstract class Doctrine_Relation ...@@ -143,7 +162,7 @@ abstract class Doctrine_Relation
*/ */
final public function getTable() final public function getTable()
{ {
return $this->definition['table']; return Doctrine_Manager::connection()->getTable($this->definition['class']);
} }
/** /**
* getLocal * getLocal
...@@ -196,7 +215,7 @@ abstract class Doctrine_Relation ...@@ -196,7 +215,7 @@ abstract class Doctrine_Relation
*/ */
public function getRelationDql($count) public function getRelationDql($count)
{ {
$component = $this->definition['table']->getComponentName(); $component = $this->getTable()->getComponentName();
$dql = 'FROM ' . $component $dql = 'FROM ' . $component
. ' WHERE ' . $component . '.' . $this->definition['foreign'] . ' WHERE ' . $component . '.' . $this->definition['foreign']
......
...@@ -97,14 +97,14 @@ class Doctrine_Relation_Association extends Doctrine_Relation ...@@ -97,14 +97,14 @@ class Doctrine_Relation_Association extends Doctrine_Relation
' IN (' . substr(str_repeat("?, ", $count),0,-2) . ' IN (' . substr(str_repeat("?, ", $count),0,-2) .
')'; ')';
$dql = 'FROM ' . $this->definition['table']->getComponentName(); $dql = 'FROM ' . $this->getTable()->getComponentName();
$dql .= '.' . $component; $dql .= '.' . $component;
$dql .= ' WHERE ' . $this->definition['table']->getComponentName() $dql .= ' WHERE ' . $this->getTable()->getComponentName()
. '.' . $this->definition['table']->getIdentifier() . ' IN (' . $sub . ')'; . '.' . $this->getTable()->getIdentifier() . ' IN (' . $sub . ')';
break; break;
case "collection": case "collection":
$sub = substr(str_repeat("?, ", $count),0,-2); $sub = substr(str_repeat("?, ", $count),0,-2);
$dql = 'FROM ' . $component . '.' . $this->definition['table']->getComponentName(); $dql = 'FROM ' . $component . '.' . $this->getTable()->getComponentName();
$dql .= ' WHERE ' . $component . '.' . $this->definition['local'] . ' IN (' . $sub . ')'; $dql .= ' WHERE ' . $component . '.' . $this->definition['local'] . ' IN (' . $sub . ')';
break; break;
} }
...@@ -123,7 +123,7 @@ class Doctrine_Relation_Association extends Doctrine_Relation ...@@ -123,7 +123,7 @@ class Doctrine_Relation_Association extends Doctrine_Relation
{ {
$id = $record->getIncremented(); $id = $record->getIncremented();
if (empty($id)) { if (empty($id)) {
$coll = new Doctrine_Collection($this->definition['table']); $coll = new Doctrine_Collection($this->getTable());
} else { } else {
$coll = Doctrine_Query::create()->parseQuery($this->getRelationDql(1))->execute(array($id)); $coll = Doctrine_Query::create()->parseQuery($this->getRelationDql(1))->execute(array($id));
} }
......
...@@ -80,13 +80,13 @@ class Doctrine_Relation_ForeignKey extends Doctrine_Relation ...@@ -80,13 +80,13 @@ class Doctrine_Relation_ForeignKey extends Doctrine_Relation
if ($this->isOneToOne()) { if ($this->isOneToOne()) {
if (empty($id)) { if (empty($id)) {
$related = $this->definition['table']->create(); $related = $this->getTable()->create();
} else { } else {
$dql = 'FROM ' . $this->definition['table']->getComponentName() $dql = 'FROM ' . $this->getTable()->getComponentName()
. ' WHERE ' . $this->definition['table']->getComponentName() . ' WHERE ' . $this->getTable()->getComponentName()
. '.' . $this->definition['foreign'] . ' = ?'; . '.' . $this->definition['foreign'] . ' = ?';
$coll = $this->definition['table']->getConnection()->query($dql, array($id)); $coll = $this->getTable()->getConnection()->query($dql, array($id));
$related = $coll[0]; $related = $coll[0];
} }
...@@ -95,10 +95,10 @@ class Doctrine_Relation_ForeignKey extends Doctrine_Relation ...@@ -95,10 +95,10 @@ class Doctrine_Relation_ForeignKey extends Doctrine_Relation
} else { } else {
if (empty($id)) { if (empty($id)) {
$related = new Doctrine_Collection($this->definition['table']); $related = new Doctrine_Collection($this->getTable());
} else { } else {
$query = $this->getRelationDql(1); $query = $this->getRelationDql(1);
$related = $this->definition['table']->getConnection()->query($query, array($id)); $related = $this->getTable()->getConnection()->query($query, array($id));
} }
$related->setReference($record, $this); $related->setReference($record, $this);
} }
......
...@@ -61,10 +61,10 @@ class Doctrine_Relation_LocalKey extends Doctrine_Relation ...@@ -61,10 +61,10 @@ class Doctrine_Relation_LocalKey extends Doctrine_Relation
$id = $record->get($this->definition['local']); $id = $record->get($this->definition['local']);
if (empty($id)) { if (empty($id)) {
$related = $this->definition['table']->create(); $related = $this->getTable()->create();
} else { } else {
if ( ! ($related = $this->definition['table']->find($id))) { if ( ! ($related = $this->getTable()->find($id))) {
$related = $this->definition['table']->create(); $related = $this->getTable()->create();
} }
} }
......
...@@ -172,7 +172,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -172,7 +172,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
* @throws Doctrine_Table_Exception if there is already an instance of this table * @throws Doctrine_Table_Exception if there is already an instance of this table
* @return void * @return void
*/ */
public function __construct($name, Doctrine_Connection $conn) public function __construct($name, Doctrine_Connection $conn, $allowExport)
{ {
$this->conn = $conn; $this->conn = $conn;
...@@ -303,8 +303,9 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -303,8 +303,9 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
$record->setUp(); $record->setUp();
// if tree, set up tree // if tree, set up tree
if($this->isTree()) if ($this->isTree()) {
$this->getTree()->setUp(); $this->getTree()->setUp();
}
// save parents // save parents
array_pop($names); array_pop($names);
...@@ -312,10 +313,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -312,10 +313,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
$this->query = 'SELECT ' . implode(', ', array_keys($this->columns)) . ' FROM ' . $this->getTableName(); $this->query = 'SELECT ' . implode(', ', array_keys($this->columns)) . ' FROM ' . $this->getTableName();
// check if an instance of this table is already initialized
if ( ! $this->conn->addTable($this)) {
throw new Doctrine_Table_Exception();
}
$this->repository = new Doctrine_Table_Repository($this); $this->repository = new Doctrine_Table_Repository($this);
} }
/** /**
...@@ -360,6 +358,14 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -360,6 +358,14 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
$primary[] = $name; $primary[] = $name;
} }
} }
/**
foreach ($this->getRelations() as $name => $relation) {
$fk = $relation->toArray();
$fk['foreignTable'] = $relation->getTable()->getTableName();
$options['foreignKeys'][] = $fk;
} */
$options['primary'] = $primary; $options['primary'] = $primary;
$this->conn->export->createTable($this->options['tableName'], $columns, array_merge($this->options, $options)); $this->conn->export->createTable($this->options['tableName'], $columns, array_merge($this->options, $options));
...@@ -675,15 +681,14 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -675,15 +681,14 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
*/ */
public function getBoundForName($name, $component) public function getBoundForName($name, $component)
{ {
foreach ($this->bound as $k => $bound) { foreach ($this->bound as $k => $bound) {
$e = explode('.', $bound['field']); $e = explode('.', $bound['field']);
if ($bound['name'] == $name && $e[0] == $component) { if ($bound['class'] == $name && $e[0] == $component) {
return $this->bound[$k]; return $this->bound[$k];
} }
} }
throw new Doctrine_Table_Exception('Unknown bound '.$name); throw new Doctrine_Table_Exception('Unknown bound ' . $name);
} }
/** /**
* returns the alias for given component name * returns the alias for given component name
...@@ -751,7 +756,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -751,7 +756,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
* @param string $field * @param string $field
* @return void * @return void
*/ */
public function bind($name, $field, $type, $local = null, $options = array()) public function bind($name, $field, $type, $options = null)
{ {
if (isset($this->relations[$name])) { if (isset($this->relations[$name])) {
unset($this->relations[$name]); unset($this->relations[$name]);
...@@ -775,10 +780,18 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -775,10 +780,18 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
$this->bound[$alias] = array('field' => $field, $this->bound[$alias] = array('field' => $field,
'type' => $type, 'type' => $type,
'local' => $local, 'class' => $name,
'name' => $name,
'options' => $options,
'alias' => $alias); 'alias' => $alias);
if ($options !== null) {
$opt = array();
if (is_string($options)) {
$opt['local'] = $options;
} else {
$opt = (array) $options;
}
$this->bound[$alias] = array_merge($this->bound[$alias], $opt);
}
} }
/** /**
* @return Doctrine_Connection * @return Doctrine_Connection
...@@ -829,7 +842,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -829,7 +842,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
list($component, $definition['foreign']) = explode('.', $definition['field']); list($component, $definition['foreign']) = explode('.', $definition['field']);
unset($definition['field']); unset($definition['field']);
$definition['table'] = $this->conn->getTable($definition['name']); $definition['table'] = $this->conn->getTable($definition['class'], false);
if ($component == $this->options['name'] || in_array($component, $this->options['parents'])) { if ($component == $this->options['name'] || in_array($component, $this->options['parents'])) {
...@@ -850,14 +863,16 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -850,14 +863,16 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
if ( ! isset($definition['local'])) { if ( ! isset($definition['local'])) {
$tmp = $definition['table']->getIdentifier(); $tmp = $definition['table']->getIdentifier();
$definition['local'] = $tmp;
} }
$definition['local'] = $tmp;
//$definition['foreign'] = $tmp; //$definition['foreign'] = $tmp;
$relation = new Doctrine_Relation_ForeignKey($definition); $relation = new Doctrine_Relation_ForeignKey($definition);
} }
} elseif ($component == $definition['name'] || } elseif ($component == $definition['class'] ||
($component == $definition['alias'])) { // && ($name == $this->options['name'] || in_array($name,$this->parents)) ($component == $definition['alias'])) { // && ($name == $this->options['name'] || in_array($name,$this->parents))
if ( ! isset($defintion['local'])) { if ( ! isset($defintion['local'])) {
...@@ -874,7 +889,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -874,7 +889,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
throw new Doctrine_Table_Exception("Only aggregate relations are allowed for many-to-many relations"); throw new Doctrine_Table_Exception("Only aggregate relations are allowed for many-to-many relations");
} }
$classes = array_merge($this->parents, array($this->options['name'])); $classes = array_merge($this->options['parents'], array($this->options['name']));
foreach (array_reverse($classes) as $class) { foreach (array_reverse($classes) as $class) {
try { try {
...@@ -895,7 +910,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -895,7 +910,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
if ($e2[0] != $component) { if ($e2[0] != $component) {
throw new Doctrine_Table_Exception($e2[0] . ' doesn\'t match ' . $component); throw new Doctrine_Table_Exception($e2[0] . ' doesn\'t match ' . $component);
} }
$associationTable = $this->conn->getTable($e2[0]); $associationTable = $this->conn->getTable($e2[0], false);
if (count($fields) > 1) { if (count($fields) > 1) {
// SELF-REFERENCING THROUGH JOIN TABLE // SELF-REFERENCING THROUGH JOIN TABLE
...@@ -904,6 +919,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -904,6 +919,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
$def['local'] = $this->identifier; $def['local'] = $this->identifier;
$def['foreign'] = $fields[0]; $def['foreign'] = $fields[0];
$def['alias'] = $e2[0]; $def['alias'] = $e2[0];
$def['class'] = $e2[0];
$def['type'] = Doctrine_Relation::MANY_COMPOSITE; $def['type'] = Doctrine_Relation::MANY_COMPOSITE;
$this->relations[$e2[0]] = new Doctrine_Relation_ForeignKey($def); $this->relations[$e2[0]] = new Doctrine_Relation_ForeignKey($def);
...@@ -933,6 +949,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -933,6 +949,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
$def['foreign'] = $e2[1]; $def['foreign'] = $e2[1];
$def['local'] = $definition['local']; $def['local'] = $definition['local'];
$def['alias'] = $e2[0]; $def['alias'] = $e2[0];
$def['class'] = $e2[0];
$def['type'] = Doctrine_Relation::MANY_COMPOSITE; $def['type'] = Doctrine_Relation::MANY_COMPOSITE;
$this->relations[$e2[0]] = new Doctrine_Relation_ForeignKey($def); $this->relations[$e2[0]] = new Doctrine_Relation_ForeignKey($def);
...@@ -966,7 +983,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable ...@@ -966,7 +983,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
final public function getRelations() final public function getRelations()
{ {
$a = array(); $a = array();
foreach ($this->bound as $k=>$v) { foreach ($this->bound as $k => $v) {
$this->getRelation($k); $this->getRelation($k);
} }
......
...@@ -109,6 +109,7 @@ class Doctrine_Validator ...@@ -109,6 +109,7 @@ class Doctrine_Validator
if ($record->getTable()->getAttribute(Doctrine::ATTR_AUTO_LENGTH_VLD)) { if ($record->getTable()->getAttribute(Doctrine::ATTR_AUTO_LENGTH_VLD)) {
if (!$this->validateLength($column, $key, $value)) { if (!$this->validateLength($column, $key, $value)) {
$errorStack->add($key, 'length'); $errorStack->add($key, 'length');
continue; continue;
} }
} }
......
...@@ -31,9 +31,8 @@ ...@@ -31,9 +31,8 @@
* @version $Revision$ * @version $Revision$
*/ */
class Doctrine_BatchIterator_TestCase extends Doctrine_UnitTestCase { class Doctrine_BatchIterator_TestCase extends Doctrine_UnitTestCase {
public function prepareTables() { public function prepareTables() {
$this->tables = array("Entity", "User","Group","Address","Phonenumber"); $this->tables = array("Entity", "User", "Group", "Address", "Email", "Phonenumber");
parent::prepareTables(); parent::prepareTables();
} }
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
* @version $Revision$ * @version $Revision$
*/ */
class Doctrine_Connection_TestCase extends Doctrine_UnitTestCase { class Doctrine_Connection_TestCase extends Doctrine_UnitTestCase {
public function testUnknownModule() { public function testUnknownModule() {
try { try {
$this->connection->unknown; $this->connection->unknown;
...@@ -46,7 +47,7 @@ class Doctrine_Connection_TestCase extends Doctrine_UnitTestCase { ...@@ -46,7 +47,7 @@ class Doctrine_Connection_TestCase extends Doctrine_UnitTestCase {
$this->assertTrue($this->connection->transaction instanceof Doctrine_Transaction); $this->assertTrue($this->connection->transaction instanceof Doctrine_Transaction);
$this->assertTrue($this->connection->export instanceof Doctrine_Export); $this->assertTrue($this->connection->export instanceof Doctrine_Export);
} }
public function testFetchAll() { public function testFetchAll() {
$this->conn->exec('DROP TABLE entity'); $this->conn->exec('DROP TABLE entity');
$this->conn->exec('CREATE TABLE entity (id INT, name TEXT)'); $this->conn->exec('CREATE TABLE entity (id INT, name TEXT)');
......
...@@ -208,5 +208,6 @@ class Doctrine_EventListener_TestCase extends Doctrine_UnitTestCase { ...@@ -208,5 +208,6 @@ class Doctrine_EventListener_TestCase extends Doctrine_UnitTestCase {
$this->tables = array('EventListenerTest'); $this->tables = array('EventListenerTest');
parent::prepareTables(); parent::prepareTables();
} }
} }
?> ?>
<?php
require_once("UnitTestCase.php");
class Doctrine_Filter_TestCase extends Doctrine_UnitTestCase {
public function prepareData() { }
public function prepareTables() {
$this->tables = array("FilterTest","FilterTest2");
}
public function testOperations() {
$t = new FilterTest;
}
}
?>
<?php <?php
require_once("UnitTestCase.php"); /*
* $Id$
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>.
*/
/**
* Doctrine_Record_TestCase
*
* @package Doctrine
* @author Konsta Vesterinen <kvesteri@cc.hut.fi>
* @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_Record_TestCase extends Doctrine_UnitTestCase { class Doctrine_Record_TestCase extends Doctrine_UnitTestCase {
/**
public function prepareTables() { public function prepareTables() {
$this->tables[] = "enumTest"; $this->tables[] = "enumTest";
$this->tables[] = "fieldNameTest"; $this->tables[] = "fieldNameTest";
$this->tables[] = "GzipTest"; $this->tables[] = "GzipTest";
parent::prepareTables(); parent::prepareTables();
} }
*/
public function testIssetForPrimaryKey() { public function testIssetForPrimaryKey() {
$this->assertTrue(isset($this->users[0]->id)); $this->assertTrue(isset($this->users[0]->id));
$this->assertTrue(isset($this->users[0]['id'])); $this->assertTrue(isset($this->users[0]['id']));
...@@ -21,9 +50,10 @@ class Doctrine_Record_TestCase extends Doctrine_UnitTestCase { ...@@ -21,9 +50,10 @@ class Doctrine_Record_TestCase extends Doctrine_UnitTestCase {
$this->assertFalse(isset($user['id'])); $this->assertFalse(isset($user['id']));
$this->assertFalse($user->contains('id')); $this->assertFalse($user->contains('id'));
} }
/**
public function testUnknownColumn() { public function testUnknownColumn() {
} }
public function testNotNullConstraint() { public function testNotNullConstraint() {
$null = new NotNullTest(); $null = new NotNullTest();
...@@ -935,6 +965,6 @@ class Doctrine_Record_TestCase extends Doctrine_UnitTestCase { ...@@ -935,6 +965,6 @@ class Doctrine_Record_TestCase extends Doctrine_UnitTestCase {
$user = $this->connection->getTable("User")->find(4); $user = $this->connection->getTable("User")->find(4);
$this->assertTrue($user->getIterator() instanceof ArrayIterator); $this->assertTrue($user->getIterator() instanceof ArrayIterator);
} }
*/
} }
?> ?>
...@@ -85,6 +85,8 @@ class Doctrine_UnitTestCase extends UnitTestCase { ...@@ -85,6 +85,8 @@ class Doctrine_UnitTestCase extends UnitTestCase {
try { try {
$this->conn = $this->connection = $this->manager->getConnection($this->driverName); $this->conn = $this->connection = $this->manager->getConnection($this->driverName);
$this->manager->setCurrentConnection($this->driverName);
$this->connection->evictTables(); $this->connection->evictTables();
$this->dbh = $this->adapter = $this->connection->getDbh(); $this->dbh = $this->adapter = $this->connection->getDbh();
$this->listener = $this->manager->getAttribute(Doctrine::ATTR_LISTENER); $this->listener = $this->manager->getAttribute(Doctrine::ATTR_LISTENER);
...@@ -110,7 +112,7 @@ class Doctrine_UnitTestCase extends UnitTestCase { ...@@ -110,7 +112,7 @@ class Doctrine_UnitTestCase extends UnitTestCase {
$this->listener = new Doctrine_EventListener_Debugger(); $this->listener = new Doctrine_EventListener_Debugger();
$this->manager->setAttribute(Doctrine::ATTR_LISTENER, $this->listener); $this->manager->setAttribute(Doctrine::ATTR_LISTENER, $this->listener);
} }
if($this->driverName !== 'main') { if ($this->driverName !== 'main') {
$this->export = $this->connection->export; $this->export = $this->connection->export;
$this->transaction = $this->connection->transaction; $this->transaction = $this->connection->transaction;
$this->dataDict = $this->connection->dataDict; $this->dataDict = $this->connection->dataDict;
...@@ -121,9 +123,11 @@ class Doctrine_UnitTestCase extends UnitTestCase { ...@@ -121,9 +123,11 @@ class Doctrine_UnitTestCase extends UnitTestCase {
$this->unitOfWork = $this->connection->unitOfWork; $this->unitOfWork = $this->connection->unitOfWork;
$this->connection->setListener(new Doctrine_EventListener()); $this->connection->setListener(new Doctrine_EventListener());
$this->query = new Doctrine_Query($this->connection); $this->query = new Doctrine_Query($this->connection);
$this->prepareTables();
$this->prepareData();
if ($this->driverName === 'main') {
$this->prepareTables();
$this->prepareData();
}
$this->valueHolder = new Doctrine_ValueHolder($this->connection->getTable('User')); $this->valueHolder = new Doctrine_ValueHolder($this->connection->getTable('User'));
} }
...@@ -208,9 +212,12 @@ class Doctrine_UnitTestCase extends UnitTestCase { ...@@ -208,9 +212,12 @@ class Doctrine_UnitTestCase extends UnitTestCase {
} }
public function assertDeclarationType($type, $type2) { public function assertDeclarationType($type, $type2) {
$dec = $this->getDeclaration($type); $dec = $this->getDeclaration($type);
if( ! is_array($type2))
if ( ! is_array($type2)) {
$type2 = array($type2); $type2 = array($type2);
$this->assertEqual($dec[0], $type2); }
$this->assertEqual($dec['type'], $type2);
} }
public function getDeclaration($type) { public function getDeclaration($type) {
return $this->dataDict->getPortableDeclaration(array('type' => $type, 'name' => 'colname', 'length' => 1, 'fixed' => true)); return $this->dataDict->getPortableDeclaration(array('type' => $type, 'name' => 'colname', 'length' => 1, 'fixed' => true));
......
...@@ -197,6 +197,7 @@ class Doctrine_Validator_TestCase extends Doctrine_UnitTestCase { ...@@ -197,6 +197,7 @@ class Doctrine_Validator_TestCase extends Doctrine_UnitTestCase {
*/ */
public function testSave() { public function testSave() {
$this->manager->setAttribute(Doctrine::ATTR_VLD, true); $this->manager->setAttribute(Doctrine::ATTR_VLD, true);
$this->manager->setAttribute(Doctrine::ATTR_AUTO_LENGTH_VLD, true);
$user = $this->connection->getTable("User")->find(4); $user = $this->connection->getTable("User")->find(4);
try { try {
$user->name = "this is an example of too long name not very good example but an example nevertheless"; $user->name = "this is an example of too long name not very good example but an example nevertheless";
...@@ -212,7 +213,7 @@ class Doctrine_Validator_TestCase extends Doctrine_UnitTestCase { ...@@ -212,7 +213,7 @@ class Doctrine_Validator_TestCase extends Doctrine_UnitTestCase {
try { try {
$user = $this->connection->create("User"); $user = $this->connection->create("User");
$user->Email->address = "jackdaniels@drinkmore.info..."; $user->Email->address = "jackdaniels@drinkmore.info...";
$user->name = "this is an example of too long user name not very good example but an example nevertheles"; $user->name = "this is an example of too long user name not very good example but an example nevertheless";
$user->save(); $user->save();
$this->fail(); $this->fail();
} catch(Doctrine_Validator_Exception $e) { } catch(Doctrine_Validator_Exception $e) {
...@@ -228,6 +229,7 @@ class Doctrine_Validator_TestCase extends Doctrine_UnitTestCase { ...@@ -228,6 +229,7 @@ class Doctrine_Validator_TestCase extends Doctrine_UnitTestCase {
$this->assertTrue(in_array('email', $emailStack['address'])); $this->assertTrue(in_array('email', $emailStack['address']));
$this->assertTrue(in_array('length', $userStack['name'])); $this->assertTrue(in_array('length', $userStack['name']));
$this->manager->setAttribute(Doctrine::ATTR_VLD, false); $this->manager->setAttribute(Doctrine::ATTR_VLD, false);
$this->manager->setAttribute(Doctrine::ATTR_AUTO_LENGTH_VLD, false);
} }
/** /**
......
...@@ -47,8 +47,9 @@ spl_autoload_register('autoload'); ...@@ -47,8 +47,9 @@ spl_autoload_register('autoload');
require_once dirname(__FILE__) . '/../models/location.php'; require_once dirname(__FILE__) . '/../models/location.php';
require_once('classes.php'); require_once('classes.php');
require_once('simpletest/unit_tester.php'); require_once dirname(__FILE__) . '/../vendor/simpletest/unit_tester.php';
require_once('simpletest/reporter.php'); require_once dirname(__FILE__) . '/../vendor/simpletest/reporter.php';
require_once('UnitTestCase.php'); require_once('UnitTestCase.php');
require_once('DriverTestCase.php'); require_once('DriverTestCase.php');
...@@ -60,7 +61,6 @@ $test = new GroupTest('Doctrine Framework Unit Tests'); ...@@ -60,7 +61,6 @@ $test = new GroupTest('Doctrine Framework Unit Tests');
// DATABASE ABSTRACTION tests // DATABASE ABSTRACTION tests
// Connection drivers (not yet fully tested) // Connection drivers (not yet fully tested)
...@@ -102,8 +102,8 @@ $test->addTestCase(new Doctrine_Sequence_Pgsql_TestCase()); ...@@ -102,8 +102,8 @@ $test->addTestCase(new Doctrine_Sequence_Pgsql_TestCase());
$test->addTestCase(new Doctrine_Sequence_Oracle_TestCase()); $test->addTestCase(new Doctrine_Sequence_Oracle_TestCase());
$test->addTestCase(new Doctrine_Sequence_Sqlite_TestCase()); $test->addTestCase(new Doctrine_Sequence_Sqlite_TestCase());
// Export module (not yet fully tested) // Export module (not yet fully tested)
$test->addTestCase(new Doctrine_Export_TestCase()); $test->addTestCase(new Doctrine_Export_TestCase());
//$test->addTestCase(new Doctrine_Export_Reporter_TestCase()); //$test->addTestCase(new Doctrine_Export_Reporter_TestCase());
$test->addTestCase(new Doctrine_Export_Firebird_TestCase()); $test->addTestCase(new Doctrine_Export_Firebird_TestCase());
...@@ -114,6 +114,7 @@ $test->addTestCase(new Doctrine_Export_Pgsql_TestCase()); ...@@ -114,6 +114,7 @@ $test->addTestCase(new Doctrine_Export_Pgsql_TestCase());
$test->addTestCase(new Doctrine_Export_Oracle_TestCase()); $test->addTestCase(new Doctrine_Export_Oracle_TestCase());
$test->addTestCase(new Doctrine_Export_Sqlite_TestCase()); $test->addTestCase(new Doctrine_Export_Sqlite_TestCase());
// Import module (not yet fully tested) // Import module (not yet fully tested)
//$test->addTestCase(new Doctrine_Import_TestCase()); //$test->addTestCase(new Doctrine_Import_TestCase());
$test->addTestCase(new Doctrine_Import_Firebird_TestCase()); $test->addTestCase(new Doctrine_Import_Firebird_TestCase());
...@@ -139,6 +140,7 @@ $test->addTestCase(new Doctrine_Expression_Sqlite_TestCase()); ...@@ -139,6 +140,7 @@ $test->addTestCase(new Doctrine_Expression_Sqlite_TestCase());
$test->addTestCase(new Doctrine_Access_TestCase()); $test->addTestCase(new Doctrine_Access_TestCase());
//$test->addTestCase(new Doctrine_Configurable_TestCase()); //$test->addTestCase(new Doctrine_Configurable_TestCase());
$test->addTestCase(new Doctrine_Manager_TestCase()); $test->addTestCase(new Doctrine_Manager_TestCase());
$test->addTestCase(new Doctrine_Connection_TestCase()); $test->addTestCase(new Doctrine_Connection_TestCase());
$test->addTestCase(new Doctrine_Table_TestCase()); $test->addTestCase(new Doctrine_Table_TestCase());
...@@ -147,15 +149,14 @@ $test->addTestCase(new Doctrine_UnitOfWork_TestCase()); ...@@ -147,15 +149,14 @@ $test->addTestCase(new Doctrine_UnitOfWork_TestCase());
$test->addTestCase(new Doctrine_Connection_Transaction_TestCase()); $test->addTestCase(new Doctrine_Connection_Transaction_TestCase());
$test->addTestCase(new Doctrine_Collection_TestCase()); $test->addTestCase(new Doctrine_Collection_TestCase());
// Relation handling // Relation handling
$test->addTestCase(new Doctrine_TreeStructure_TestCase());
$test->addTestCase(new Doctrine_Relation_TestCase()); $test->addTestCase(new Doctrine_Relation_TestCase());
$test->addTestCase(new Doctrine_Relation_Access_TestCase()); $test->addTestCase(new Doctrine_Relation_Access_TestCase());
$test->addTestCase(new Doctrine_Relation_ManyToMany_TestCase()); $test->addTestCase(new Doctrine_Relation_ManyToMany_TestCase());
$test->addTestCase(new Doctrine_Relation_OneToOne_TestCase()); $test->addTestCase(new Doctrine_Relation_OneToOne_TestCase());
$test->addTestCase(new Doctrine_TreeStructure_TestCase());
// Datatypes // Datatypes
$test->addTestCase(new Doctrine_Enum_TestCase()); $test->addTestCase(new Doctrine_Enum_TestCase());
$test->addTestCase(new Doctrine_Boolean_TestCase()); $test->addTestCase(new Doctrine_Boolean_TestCase());
...@@ -164,9 +165,10 @@ $test->addTestCase(new Doctrine_Boolean_TestCase()); ...@@ -164,9 +165,10 @@ $test->addTestCase(new Doctrine_Boolean_TestCase());
// Utility components // Utility components
$test->addTestCase(new Doctrine_Hook_TestCase()); $test->addTestCase(new Doctrine_Hook_TestCase());
$test->addTestCase(new Doctrine_PessimisticLocking_TestCase()); $test->addTestCase(new Doctrine_PessimisticLocking_TestCase());
$test->addTestCase(new Doctrine_Validator_TestCase());
$test->addTestCase(new Doctrine_RawSql_TestCase()); $test->addTestCase(new Doctrine_RawSql_TestCase());
$test->addTestCase(new Doctrine_View_TestCase()); $test->addTestCase(new Doctrine_View_TestCase());
$test->addTestCase(new Doctrine_Validator_TestCase());
// Db component // Db component
...@@ -174,27 +176,31 @@ $test->addTestCase(new Doctrine_Db_TestCase()); ...@@ -174,27 +176,31 @@ $test->addTestCase(new Doctrine_Db_TestCase());
$test->addTestCase(new Doctrine_Db_Profiler_TestCase()); $test->addTestCase(new Doctrine_Db_Profiler_TestCase());
// Eventlisteners
$test->addTestCase(new Doctrine_EventListener_TestCase());
$test->addTestCase(new Doctrine_EventListener_Chain_TestCase());
// Record // Record
$test->addTestCase(new Doctrine_Record_TestCase()); $test->addTestCase(new Doctrine_Record_TestCase());
$test->addTestCase(new Doctrine_Record_State_TestCase()); $test->addTestCase(new Doctrine_Record_State_TestCase());
//$test->addTestCase(new Doctrine_Record_Filter_TestCase()); //$test->addTestCase(new Doctrine_Record_Filter_TestCase());
// Eventlisteners
$test->addTestCase(new Doctrine_EventListener_TestCase());
$test->addTestCase(new Doctrine_EventListener_Chain_TestCase());
// Old test cases (should be removed) // Old test cases (should be removed)
$test->addTestCase(new Doctrine_SchemaTestCase()); $test->addTestCase(new Doctrine_SchemaTestCase());
$test->addTestCase(new Doctrine_BatchIterator_TestCase()); $test->addTestCase(new Doctrine_BatchIterator_TestCase());
$test->addTestCase(new Doctrine_Query_Condition_TestCase());
$test->addTestCase(new Doctrine_CustomPrimaryKey_TestCase()); $test->addTestCase(new Doctrine_CustomPrimaryKey_TestCase());
$test->addTestCase(new Doctrine_CustomResultSetOrderTestCase()); $test->addTestCase(new Doctrine_CustomResultSetOrderTestCase());
$test->addTestCase(new Doctrine_Filter_TestCase());
//$test->addTestCase(new Doctrine_Collection_Offset_TestCase()); //$test->addTestCase(new Doctrine_Collection_Offset_TestCase());
// Query tests // Query tests
$test->addTestCase(new Doctrine_Query_MultiJoin_TestCase()); $test->addTestCase(new Doctrine_Query_MultiJoin_TestCase());
$test->addTestCase(new Doctrine_Query_ReferenceModel_TestCase()); $test->addTestCase(new Doctrine_Query_ReferenceModel_TestCase());
$test->addTestCase(new Doctrine_Query_Condition_TestCase());
$test->addTestCase(new Doctrine_Query_ComponentAlias_TestCase()); $test->addTestCase(new Doctrine_Query_ComponentAlias_TestCase());
$test->addTestCase(new Doctrine_Query_TestCase()); $test->addTestCase(new Doctrine_Query_TestCase());
...@@ -208,11 +214,14 @@ $test->addTestCase(new Doctrine_Query_AggregateValue_TestCase()); ...@@ -208,11 +214,14 @@ $test->addTestCase(new Doctrine_Query_AggregateValue_TestCase());
$test->addTestCase(new Doctrine_Query_Select_TestCase()); $test->addTestCase(new Doctrine_Query_Select_TestCase());
$test->addTestCase(new Doctrine_Query_Expression_TestCase()); $test->addTestCase(new Doctrine_Query_Expression_TestCase());
$test->addTestCase(new Doctrine_Query_Having_TestCase()); $test->addTestCase(new Doctrine_Query_Having_TestCase());
$test->addTestCase(new Doctrine_Query_Join_TestCase());
$test->addTestCase(new Doctrine_Query_From_TestCase()); $test->addTestCase(new Doctrine_Query_From_TestCase());
$test->addTestCase(new Doctrine_Query_JoinCondition_TestCase()); $test->addTestCase(new Doctrine_Query_JoinCondition_TestCase());
$test->addTestCase(new Doctrine_ColumnAlias_TestCase()); $test->addTestCase(new Doctrine_ColumnAlias_TestCase());
$test->addTestCase(new Doctrine_Query_Subquery_TestCase()); $test->addTestCase(new Doctrine_Query_Subquery_TestCase());
$test->addTestCase(new Doctrine_Query_Join_TestCase());
$test->addTestCase(new Doctrine_Query_Orderby_TestCase()); $test->addTestCase(new Doctrine_Query_Orderby_TestCase());
$test->addTestCase(new Doctrine_Cache_TestCase()); $test->addTestCase(new Doctrine_Cache_TestCase());
......
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