From 33bb25ac20754a699b2868265b7665f58bcb356b Mon Sep 17 00:00:00 2001 From: zYne Date: Wed, 16 May 2007 22:22:54 +0000 Subject: [PATCH] --- lib/Doctrine/Connection.php | 2 +- lib/Doctrine/Connection/UnitOfWork.php | 3 +- lib/Doctrine/Hydrate.php | 2 +- lib/Doctrine/Record.php | 118 ++++--------------------- lib/Doctrine/Record/Filter.php | 29 +++--- 5 files changed, 34 insertions(+), 120 deletions(-) diff --git a/lib/Doctrine/Connection.php b/lib/Doctrine/Connection.php index 0fbf2efc2..9ae939e9f 100644 --- a/lib/Doctrine/Connection.php +++ b/lib/Doctrine/Connection.php @@ -492,7 +492,7 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun // prepare and execute the statement $this->execute($query, array_values($values)); - print $query . '(' . implode(', ', $values) . ")
"; + return true; } /** diff --git a/lib/Doctrine/Connection/UnitOfWork.php b/lib/Doctrine/Connection/UnitOfWork.php index cb48bf6b8..8d7b456be 100644 --- a/lib/Doctrine/Connection/UnitOfWork.php +++ b/lib/Doctrine/Connection/UnitOfWork.php @@ -77,8 +77,9 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module $type = $rel->getType(); // skip self-referenced relations - if ($name === $nm) + if ($name === $nm) { continue; + } if ($rel instanceof Doctrine_Relation_ForeignKey) { if ($index2 !== false) { diff --git a/lib/Doctrine/Hydrate.php b/lib/Doctrine/Hydrate.php index df48f9a5e..96357f63d 100644 --- a/lib/Doctrine/Hydrate.php +++ b/lib/Doctrine/Hydrate.php @@ -403,7 +403,7 @@ class Doctrine_Hydrate // we keep track of all the collections $colls = array(); - $colls[] = $coll; print_r($array); + $colls[] = $coll; $prevRow = array(); /** * iterate over the fetched data diff --git a/lib/Doctrine/Record.php b/lib/Doctrine/Record.php index 6c1b0c44b..0f7b4eae4 100644 --- a/lib/Doctrine/Record.php +++ b/lib/Doctrine/Record.php @@ -107,6 +107,10 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite * @var Doctrine_Validator_ErrorStack error stack object */ protected $_errorStack; + /** + * @var Doctrine_Record_Filter the filter object + */ + protected $_filter; /** * @var array $references an array containing all the references */ @@ -149,6 +153,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite $exists = false; } + + // initialize the filter object + $this->_filter = new Doctrine_Record_Filter($this); // Check if the current connection has the records table in its registry // If not this record is only used for creating table definition and setting up @@ -176,7 +183,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite $count = count($this->_data); // clean data array - $this->cleanData(); + $this->_data = $this->_filter->cleanData($this->_data); $this->prepareIdentifiers($exists); @@ -354,86 +361,6 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite } } } - /** - * cleanData - * this method does several things to records internal data - * - * 1. It unserializes array and object typed columns - * 2. Uncompresses gzip typed columns - * 3. Gets the appropriate enum values for enum typed columns - * 4. Initializes special null object pointer for null values (for fast column existence checking purposes) - * - * - * example: - * - * $data = array("name"=>"John","lastname"=> null, "id" => 1,"unknown" => "unknown"); - * $names = array("name", "lastname", "id"); - * $data after operation: - * $data = array("name"=>"John","lastname" => Object(Doctrine_Null)); - * - * here column 'id' is removed since its auto-incremented primary key (read-only) - * - * @throws Doctrine_Record_Exception if unserialization of array/object typed column fails or - * if uncompression of gzip typed column fails - * - * @return integer - */ - private function cleanData() - { - $tmp = $this->_data; - - $this->_data = array(); - - $count = 0; - - foreach ($this->_table->getColumnNames() as $name) { - $type = $this->_table->getTypeOf($name); - - if ( ! isset($tmp[$name])) { - $this->_data[$name] = self::$null; - } else { - switch ($type) { - case 'array': - case 'object': - if ($tmp[$name] !== self::$null) { - if (is_string($tmp[$name])) { - $value = unserialize($tmp[$name]); - - if ($value === false) - throw new Doctrine_Record_Exception('Unserialization of ' . $name . ' failed.'); - } else { - $value = $tmp[$name]; - } - $this->_data[$name] = $value; - } - break; - case 'gzip': - if ($tmp[$name] !== self::$null) { - $value = gzuncompress($tmp[$name]); - - if ($value === false) - throw new Doctrine_Record_Exception('Uncompressing of ' . $name . ' failed.'); - - $this->_data[$name] = $value; - } - break; - case 'enum': - $this->_data[$name] = $this->_table->enumValue($name, $tmp[$name]); - break; - case 'boolean': - case 'integer': - if ($tmp[$name] !== self::$null && ! ($tmp[$name] instanceof Doctrine_Record)) { - settype($tmp[$name], $type); - } - default: - $this->_data[$name] = $tmp[$name]; - } - $count++; - } - } - - return $count; - } /** * hydrate * hydrates this object from given array @@ -446,7 +373,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite foreach ($data as $k => $v) { $this->_data[$k] = $v; } - $this->cleanData(); + $this->_data = $this->_filter->cleanData($this->_data); $this->prepareIdentifiers(); } /** @@ -562,7 +489,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite $this->_table->getRepository()->add($this); - $this->cleanData(); + $this->_data = $this->_filter->cleanData($this->_data); $this->prepareIdentifiers($this->exists()); @@ -640,10 +567,10 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite } $id = array_values($id); - $query = $this->_table->getQuery()." WHERE ".implode(" = ? AND ",$this->_table->getPrimaryKeys())." = ?"; - $stmt = $this->_table->getConnection()->execute($query,$id); + $query = $this->_table->getQuery() . ' WHERE ' . implode(' = ? AND ', $this->_table->getPrimaryKeys()) . ' = ?'; + $stmt = $this->_table->getConnection()->execute($query,$id); - $this->_data = $stmt->fetch(PDO::FETCH_ASSOC); + $this->_data = $stmt->fetch(PDO::FETCH_ASSOC); if ( ! $this->_data) throw new Doctrine_Record_Exception('Failed to refresh. Record does not exist anymore'); @@ -673,7 +600,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite $this->_data = $this->_table->getData(); $old = $this->_id; - $this->cleanData(); + $this->_data = $this->_filter->cleanData($this->_data); $this->prepareIdentifiers(); @@ -1234,7 +1161,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite { if ($id === false) { $this->_id = array(); - $this->cleanData(); + $this->_data = $this->_filter->cleanData($this->_data); $this->_state = Doctrine_Record::STATE_TCLEAN; $this->_modified = array(); } elseif ($id === true) { @@ -1266,8 +1193,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite final public function getIncremented() { $id = current($this->_id); - if ($id === false) + if ($id === false) { return null; + } return $id; } @@ -1305,18 +1233,6 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite } throw new Doctrine_Record_Exception("Unknown reference $name"); } - /** - * addReference - * @param Doctrine_Record $record - * @param mixed $key - * @return void - */ - public function addReference(Doctrine_Record $record, Doctrine_Relation $connector, $key = null) - { - $alias = $connector->getAlias(); - - $this->references[$alias]->add($record, $key); - } /** * getReferences * @return array all references diff --git a/lib/Doctrine/Record/Filter.php b/lib/Doctrine/Record/Filter.php index 56604fb33..7aa3bd3a0 100644 --- a/lib/Doctrine/Record/Filter.php +++ b/lib/Doctrine/Record/Filter.php @@ -67,31 +67,28 @@ class Doctrine_Record_Filter * * example: * - * $data = array("name"=>"John","lastname"=> null, "id" => 1,"unknown" => "unknown"); - * $names = array("name", "lastname", "id"); + * $data = array("name" => "John", "lastname" => null, "id" => 1, "unknown" => "unknown"); * $data after operation: - * $data = array("name"=>"John","lastname" => Object(Doctrine_Null)); + * $data = array("name" => "John", "lastname" => Object(Doctrine_Null)); * * here column 'id' is removed since its auto-incremented primary key (read-only) * * @throws Doctrine_Record_Exception if unserialization of array/object typed column fails or * if uncompression of gzip typed column fails * + * @param array $data data array to be cleaned * @return integer */ - public function cleanData() + public function cleanData($data) { - $tmp = $this->_data; - - $this->_data = array(); - - $count = 0; + $tmp = $data; + $data = array(); foreach ($this->_table->getColumnNames() as $name) { $type = $this->_table->getTypeOf($name); if ( ! isset($tmp[$name])) { - $this->_data[$name] = self::$null; + $data[$name] = self::$null; } else { switch ($type) { case 'array': @@ -106,7 +103,7 @@ class Doctrine_Record_Filter } else { $value = $tmp[$name]; } - $this->_data[$name] = $value; + $data[$name] = $value; } break; case 'gzip': @@ -117,20 +114,20 @@ class Doctrine_Record_Filter throw new Doctrine_Record_Exception('Uncompressing of ' . $name . ' failed.'); } - $this->_data[$name] = $value; + $data[$name] = $value; } break; case 'enum': - $this->_data[$name] = $this->_table->enumValue($name, $tmp[$name]); + $data[$name] = $this->_table->enumValue($name, $tmp[$name]); break; default: - $this->_data[$name] = $tmp[$name]; + $data[$name] = $tmp[$name]; } - $count++; + } } - return $count; + return $data; } /** * prepareIdentifiers