<?php /* * $Id: Hydrate.php 3192 2007-11-19 17:55:23Z romanb $ * * 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.org>. */ /** * Doctrine_Hydrator_Abstract * * @package Doctrine * @subpackage Hydrate * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.org * @since 1.0 * @version $Revision: 3192 $ * @author Konsta Vesterinen <kvesteri@cc.hut.fi> */ abstract class Doctrine_Hydrator_Abstract extends Doctrine_Locator_Injectable { /** * @var array $_aliasMap two dimensional array containing the map for query aliases * Main keys are component aliases * * table table object associated with given alias * * relation the relation object owned by the parent * * parent the alias of the parent * * agg the aggregates of this component * * map the name of the column / aggregate value this * component is mapped to a collection */ protected $_queryComponents = array(); /** * The current hydration mode. */ protected $_hydrationMode = Doctrine::HYDRATE_RECORD; /** * constructor * * @param Doctrine_Connection|null $connection */ public function __construct() {} /** * Sets the fetchmode. * * @param integer $fetchmode One of the Doctrine::HYDRATE_* constants. */ public function setHydrationMode($hydrationMode) { $this->_hydrationMode = $hydrationMode; } /** * setAliasMap * sets the whole component alias map * * @param array $map alias map * @return Doctrine_Hydrate this object */ public function setQueryComponents(array $queryComponents) { $this->_queryComponents = $queryComponents; } /** * getAliasMap * returns the component alias map * * @return array component alias map */ public function getQueryComponents() { return $this->_queryComponents; } /** * hasAliasDeclaration * whether or not this object has a declaration for given component alias * * @param string $componentAlias the component alias the retrieve the declaration from * @return boolean */ public function hasAliasDeclaration($componentAlias) { return isset($this->_queryComponents[$componentAlias]); } /** * getAliasDeclaration * get the declaration for given component alias * * @param string $componentAlias the component alias the retrieve the declaration from * @return array the alias declaration * @deprecated */ public function getAliasDeclaration($componentAlias) { return $this->getQueryComponent($componentAlias); } /** * getQueryComponent * get the declaration for given component alias * * @param string $componentAlias the component alias the retrieve the declaration from * @return array the alias declaration */ public function getQueryComponent($componentAlias) { if ( ! isset($this->_queryComponents[$componentAlias])) { throw new Doctrine_Query_Exception('Unknown component alias ' . $componentAlias); } return $this->_queryComponents[$componentAlias]; } /** * parseData * parses the data returned by statement object * * This is method defines the core of Doctrine object population algorithm * hence this method strives to be as fast as possible * * The key idea is the loop over the rowset only once doing all the needed operations * within this massive loop. * * @todo: Can we refactor this function so that it is not so long and * nested? * * @param mixed $stmt * @return array */ abstract public function hydrateResultSet($stmt, $tableAliases, $hydrationMode = null); }