From 84acea5d9a472b441cb0c1f2b75bf65ec9f2bed6 Mon Sep 17 00:00:00 2001 From: gyim Date: Fri, 2 Mar 2007 09:23:24 +0000 Subject: [PATCH] fixed saving records using multiple connections --- lib/Doctrine/Collection.php | 4 ++-- lib/Doctrine/Connection/UnitOfWork.php | 12 ++++++------ lib/Doctrine/Record.php | 2 +- lib/Doctrine/Relation/Association.php | 13 +++++++++---- lib/Doctrine/Relation/ForeignKey.php | 11 ++++++++--- lib/Doctrine/Relation/LocalKey.php | 9 +++++++-- 6 files changed, 33 insertions(+), 18 deletions(-) diff --git a/lib/Doctrine/Collection.php b/lib/Doctrine/Collection.php index f5c24a125..811c4b015 100644 --- a/lib/Doctrine/Collection.php +++ b/lib/Doctrine/Collection.php @@ -720,7 +720,7 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator $conn->beginTransaction(); foreach ($this as $key => $record) { - $record->save(); + $record->save($conn); }; $conn->commit(); @@ -741,7 +741,7 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator $conn->beginTransaction(); foreach ($this as $key => $record) { - $record->delete(); + $record->delete($conn); } $conn->commit(); diff --git a/lib/Doctrine/Connection/UnitOfWork.php b/lib/Doctrine/Connection/UnitOfWork.php index 04735d3da..994b0b4cc 100644 --- a/lib/Doctrine/Connection/UnitOfWork.php +++ b/lib/Doctrine/Connection/UnitOfWork.php @@ -151,19 +151,19 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module implemen if ( ! $record->exists()) { $saveLater[$k] = $fk; } else { - $v->save(); + $v->save($this->conn); } } else { // ONE-TO-ONE relationship $obj = $record->get($fk->getAlias()); if ($obj->state() != Doctrine_Record::STATE_TCLEAN) { - $obj->save(); + $obj->save($this->conn); } } } elseif ($fk instanceof Doctrine_Relation_Association) { - $v->save(); + $v->save($this->conn); } } return $saveLater; @@ -189,7 +189,7 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module implemen $table = $rel->getTable(); $alias = $rel->getAlias(); - $rel->processDiff($record); + $rel->processDiff($record, $this->conn); } } /** @@ -206,7 +206,7 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module implemen case Doctrine_Relation::ONE_COMPOSITE: case Doctrine_Relation::MANY_COMPOSITE: $obj = $record->get($fk->getAlias()); - $obj->delete(); + $obj->delete($this->conn); break; }; } @@ -264,7 +264,7 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module implemen switch ($value->state()) { case Doctrine_Record::STATE_TCLEAN: case Doctrine_Record::STATE_TDIRTY: - $record->save(); + $record->save($this->conn); default: $array[$name] = $value->getIncremented(); $record->set($name, $value->getIncremented()); diff --git a/lib/Doctrine/Record.php b/lib/Doctrine/Record.php index 4226a0074..b786e296f 100644 --- a/lib/Doctrine/Record.php +++ b/lib/Doctrine/Record.php @@ -956,7 +956,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite if (isset($this->references[$alias])) { $obj = $this->references[$alias]; - $obj->save(); + $obj->save($conn); } } diff --git a/lib/Doctrine/Relation/Association.php b/lib/Doctrine/Relation/Association.php index c5d2ff2a2..8c8c7f451 100644 --- a/lib/Doctrine/Relation/Association.php +++ b/lib/Doctrine/Relation/Association.php @@ -45,10 +45,15 @@ class Doctrine_Relation_Association extends Doctrine_Relation /** * processDiff * - * @param Doctrine_Record + * @param Doctrine_Record $record + * @param Doctrine_Connection $conn */ - public function processDiff(Doctrine_Record $record) + public function processDiff(Doctrine_Record $record, $conn = null) { + if (!$conn) { + $conn = $this->getTable()->getConnection(); + } + $asf = $this->getAssociationFactory(); $alias = $this->getAlias(); @@ -65,7 +70,7 @@ class Doctrine_Relation_Association extends Doctrine_Relation . ' WHERE ' . $this->getForeign() . ' = ?' . ' AND ' . $this->getLocal() . ' = ?'; - $this->getTable()->getConnection()->execute($query, array($r->getIncremented(),$record->getIncremented())); + $conn->execute($query, array($r->getIncremented(),$record->getIncremented())); } $operations = Doctrine_Relation::getInsertOperations($record->obtainOriginals($alias),$new); @@ -74,7 +79,7 @@ class Doctrine_Relation_Association extends Doctrine_Relation $reldao = $asf->create(); $reldao->set($this->getForeign(), $r); $reldao->set($this->getLocal(), $record); - $reldao->save(); + $reldao->save($conn); } $record->assignOriginals($alias, clone $record->get($alias)); diff --git a/lib/Doctrine/Relation/ForeignKey.php b/lib/Doctrine/Relation/ForeignKey.php index 31ab31eea..e21826053 100644 --- a/lib/Doctrine/Relation/ForeignKey.php +++ b/lib/Doctrine/Relation/ForeignKey.php @@ -37,17 +37,22 @@ class Doctrine_Relation_ForeignKey extends Doctrine_Relation * processDiff * * @param Doctrine_Record $record + * @param Doctrine_Connection $conn * @return void */ - public function processDiff(Doctrine_Record $record) + public function processDiff(Doctrine_Record $record, $conn = null) { + if (!$conn) { + $conn = $this->getTable()->getConnection(); + } + $alias = $this->getAlias(); if ($this->isOneToOne()) { if ($record->obtainOriginals($alias) && $record->obtainOriginals($alias)->obtainIdentifier() != $this->obtainReference($alias)->obtainIdentifier() ) { - $record->obtainOriginals($alias)->delete(); + $record->obtainOriginals($alias)->delete($conn); } } else { if ($record->hasReference($alias)) { @@ -59,7 +64,7 @@ class Doctrine_Relation_ForeignKey extends Doctrine_Relation $operations = Doctrine_Relation::getDeleteOperations($record->obtainOriginals($alias), $new); foreach ($operations as $r) { - $r->delete(); + $r->delete($conn); } $record->assignOriginals($alias, clone $record->get($alias)); diff --git a/lib/Doctrine/Relation/LocalKey.php b/lib/Doctrine/Relation/LocalKey.php index 4a3c5e20b..68839b944 100644 --- a/lib/Doctrine/Relation/LocalKey.php +++ b/lib/Doctrine/Relation/LocalKey.php @@ -37,15 +37,20 @@ class Doctrine_Relation_LocalKey extends Doctrine_Relation * processDiff * * @param Doctrine_Record $record + * @param Doctrine_Connection $conn */ - public function processDiff(Doctrine_Record $record) + public function processDiff(Doctrine_Record $record, $conn = null) { + if (!$conn) { + $conn = $this->getTable()->getConnection(); + } + $alias = $this->getAlias(); if ($record->obtainOriginals($alias) && $record->obtainOriginals($alias)->obtainIdentifier() != $this->references[$alias]->obtainIdentifier() ) { - $record->obtainOriginals($alias)->delete(); + $record->obtainOriginals($alias)->delete($conn); } } /**