From 043c7e649334a11954418f11b4fc1f01e3bfb0b2 Mon Sep 17 00:00:00 2001 From: doctrine Date: Tue, 30 May 2006 08:59:08 +0000 Subject: [PATCH] Added a folder remotely --- Doctrine/Collection/Batch.php | 163 ++++++++++++++++++++++++++++++ Doctrine/Collection/Immediate.php | 19 ++++ Doctrine/Collection/Lazy.php | 18 ++++ Doctrine/Collection/Offset.php | 31 ++++++ 4 files changed, 231 insertions(+) create mode 100644 Doctrine/Collection/Batch.php create mode 100644 Doctrine/Collection/Immediate.php create mode 100644 Doctrine/Collection/Lazy.php create mode 100644 Doctrine/Collection/Offset.php diff --git a/Doctrine/Collection/Batch.php b/Doctrine/Collection/Batch.php new file mode 100644 index 000000000..58fae729e --- /dev/null +++ b/Doctrine/Collection/Batch.php @@ -0,0 +1,163 @@ +batchSize = $this->getTable()->getAttribute(Doctrine::ATTR_BATCH_SIZE); + } + + /** + * @param integer $batchSize batch size + * @return boolean + */ + public function setBatchSize($batchSize) { + $batchSize = (int) $batchSize; + if($batchSize <= 0) + return false; + + $this->batchSize = $batchSize; + return true; + } + /** + * returns the batch size of this collection + * + * @return integer + */ + public function getBatchSize() { + return $this->batchSize; + } + /** + * load + * loads a specified element, by loading the batch the element is part of + * + * @param Doctrine_Record $record record to be loaded + * @return boolean whether or not the load operation was successful + */ + public function load(Doctrine_Record $record) { + if(empty($this->data)) + return false; + + $id = $record->getID(); + $identifier = $this->table->getIdentifier(); + foreach($this->data as $key => $v) { + if(is_object($v)) { + if($v->getID() == $id) + break; + + } elseif(is_array($v[$identifier])) { + if($v[$identifier] == $id) + break; + } + } + $x = floor($key / $this->batchSize); + + if( ! isset($this->loaded[$x])) { + + $e = $x * $this->batchSize; + $e2 = ($x + 1)* $this->batchSize; + + $a = array(); + $proxies = array(); + + for($i = $e; $i < $e2 && $i < $this->count(); $i++): + if($this->data[$i] instanceof Doctrine_Record) + $id = $this->data[$i]->getID(); + elseif(is_array($this->data[$i])) + $id = $this->data[$i][$identifier]; + + + $a[$i] = $id; + endfor; + + $c = count($a); + + $pk = $this->table->getPrimaryKeys(); + $query = $this->table->getQuery()." WHERE "; + $query .= ($c > 1)?$identifier." IN (":$pk[0]." = "; + $query .= substr(str_repeat("?, ",count($a)),0,-2); + $query .= ($c > 1)?") ORDER BY ".$pk[0]." ASC":""; + + $stmt = $this->table->getSession()->execute($query,array_values($a)); + + foreach($a as $k => $id) { + $row = $stmt->fetch(PDO::FETCH_ASSOC); + + if($row === false) + break; + + $this->table->setData($row); + if(is_object($this->data[$k])) { + $this->data[$k]->factoryRefresh($this->table); + } else { + $this->data[$k] = $this->table->getRecord(); + } + + } + + $this->loaded[$x] = true; + return true; + } else { + return false; + } + } + + /** + * get + * @param mixed $key the key of the record + * @return object Doctrine_Record record + */ + public function get($key) { + if(isset($this->data[$key])) { + switch(gettype($this->data[$key])): + case "array": + // Doctrine_Record didn't exist in cache + $this->table->setData($this->data[$key]); + $this->data[$key] = $this->table->getProxy(); + + $this->data[$key]->addCollection($this); + break; + endswitch; + } else { + + $this->expand($key); + + if( ! isset($this->data[$key])) + $this->data[$key] = $this->table->create(); + + } + + + if(isset($this->reference_field)) + $this->data[$key]->rawSet($this->reference_field,$this->reference); + + + return $this->data[$key]; + } + /** + * @return Doctrine_Iterator + */ + public function getIterator() { + return new Doctrine_Iterator_Expandable($this); + } +} +?> diff --git a/Doctrine/Collection/Immediate.php b/Doctrine/Collection/Immediate.php new file mode 100644 index 000000000..3d98b8a85 --- /dev/null +++ b/Doctrine/Collection/Immediate.php @@ -0,0 +1,19 @@ + diff --git a/Doctrine/Collection/Lazy.php b/Doctrine/Collection/Lazy.php new file mode 100644 index 000000000..3bf35efbe --- /dev/null +++ b/Doctrine/Collection/Lazy.php @@ -0,0 +1,18 @@ + diff --git a/Doctrine/Collection/Offset.php b/Doctrine/Collection/Offset.php new file mode 100644 index 000000000..6bbc1bd2d --- /dev/null +++ b/Doctrine/Collection/Offset.php @@ -0,0 +1,31 @@ +limit = $table->getAttribute(Doctrine::ATTR_COLL_LIMIT); + } + /** + * @return integer + */ + public function getLimit() { + return $this->limit; + } + /** + * @return Doctrine_Iterator_Offset + */ + public function getIterator() { + return new Doctrine_Iterator_Expandable($this); + } +} +?>