1
0
mirror of synced 2025-01-30 20:11:49 +03:00

[2.0] Fixed Query Cache (+testcase) and some E_STRICT errors.

This commit is contained in:
romanb 2009-05-21 19:18:14 +00:00
parent 55d70248a9
commit a421692679
28 changed files with 217 additions and 190 deletions

View File

@ -948,7 +948,7 @@ abstract class AbstractPlatform
* *
* @todo Throw exception by default? * @todo Throw exception by default?
*/ */
public function getDropSequenceSql() public function getDropSequenceSql($sequenceName)
{ {
throw DoctrineException::updateMe('Drop sequence not supported by this driver.'); throw DoctrineException::updateMe('Drop sequence not supported by this driver.');
} }

View File

@ -188,7 +188,8 @@ abstract class AbstractQuery
* *
* @param array $params * @param array $params
*/ */
public function setParams(array $params = array()) { public function setParams(array $params = array())
{
$this->_params = $params; $this->_params = $params;
} }
@ -256,9 +257,9 @@ abstract class AbstractQuery
* *
* @return Doctrine_Cache_Interface Cache driver * @return Doctrine_Cache_Interface Cache driver
*/ */
public function getResultCache() public function getResultCacheDriver()
{ {
if ($this->_resultCache instanceof \Doctrine\ORM\Cache\Cache) { if ($this->_resultCache) {
return $this->_resultCache; return $this->_resultCache;
} else { } else {
return $this->_em->getConfiguration()->getResultCacheImpl(); return $this->_em->getConfiguration()->getResultCacheImpl();
@ -471,10 +472,8 @@ abstract class AbstractQuery
$params = $this->getParams($params); $params = $this->getParams($params);
// Check result cache (Only for SELECT queries) // Check result cache
if ($this->_resultCache && $this->_type === self::SELECT) { if ($cacheDriver = $this->getResultCacheDriver()) {
$cacheDriver = $this->getResultCacheDriver();
// Calculate hash for DQL query. // Calculate hash for DQL query.
$hash = md5($this->getDql() . var_export($params, true)); $hash = md5($this->getDql() . var_export($params, true));
$cached = ($this->_expireResultCache) ? false : $cacheDriver->fetch($hash); $cached = ($this->_expireResultCache) ? false : $cacheDriver->fetch($hash);

View File

@ -22,18 +22,26 @@
namespace Doctrine\ORM; namespace Doctrine\ORM;
/** /**
* The DynamicProxyGenerator is used to generate proxy objects for entities. * The DynamicProxyGenerator is used to generate proxy objects for entities at runtime.
* For that purpose he generates proxy class files on the fly as needed.
* *
* @author Roman Borschel <roman@code-factory.org> * @author Roman Borschel <roman@code-factory.org>
* @since 2.0 * @since 2.0
*/ */
class DynamicProxyGenerator class DynamicProxyGenerator
{ {
/** The namspace for the generated proxy classes. */
private static $_ns = 'Doctrine\Generated\Proxies\\'; private static $_ns = 'Doctrine\Generated\Proxies\\';
private $_cacheDir = '/Users/robo/dev/php/tmp/gen/'; private $_cacheDir;
private $_em; private $_em;
/**
* Initializes a new instance of the <tt>DynamicProxyGenerator</tt> class that is
* connected to the given <tt>EntityManager</tt> and stores proxy class files in
* the given cache directory.
*
* @param EntityManager $em
* @param string $cacheDir
*/
public function __construct(EntityManager $em, $cacheDir = null) public function __construct(EntityManager $em, $cacheDir = null)
{ {
$this->_em = $em; $this->_em = $em;

View File

@ -180,7 +180,7 @@ abstract class AbstractHydrator
$cache[$key]['fieldName'] = $this->_rsm->scalarMappings[$key]; $cache[$key]['fieldName'] = $this->_rsm->scalarMappings[$key];
$cache[$key]['isScalar'] = true; $cache[$key]['isScalar'] = true;
} else if (isset($this->_rsm->fieldMappings[$key])) { } else if (isset($this->_rsm->fieldMappings[$key])) {
$classMetadata = $this->_rsm->getOwningClass($key); $classMetadata = $this->_em->getClassMetadata($this->_rsm->getOwningClass($key));
$fieldName = $this->_rsm->fieldMappings[$key]; $fieldName = $this->_rsm->fieldMappings[$key];
$classMetadata = $this->_lookupDeclaringClass($classMetadata, $fieldName); $classMetadata = $this->_lookupDeclaringClass($classMetadata, $fieldName);
$cache[$key]['fieldName'] = $fieldName; $cache[$key]['fieldName'] = $fieldName;
@ -252,7 +252,7 @@ abstract class AbstractHydrator
$cache[$key]['fieldName'] = $this->_rsm->scalarMappings[$key]; $cache[$key]['fieldName'] = $this->_rsm->scalarMappings[$key];
$cache[$key]['isScalar'] = true; $cache[$key]['isScalar'] = true;
} else { } else {
$classMetadata = $this->_rsm->getOwningClass($key); $classMetadata = $this->_em->getClassMetadata($this->_rsm->getOwningClass($key));
$fieldName = $this->_rsm->fieldMappings[$key]; $fieldName = $this->_rsm->fieldMappings[$key];
$classMetadata = $this->_lookupDeclaringClass($classMetadata, $fieldName); $classMetadata = $this->_lookupDeclaringClass($classMetadata, $fieldName);
$cache[$key]['fieldName'] = $fieldName; $cache[$key]['fieldName'] = $fieldName;
@ -306,7 +306,7 @@ abstract class AbstractHydrator
*/ */
private function _lookupDeclaringClass($class, $fieldName) private function _lookupDeclaringClass($class, $fieldName)
{ {
if ($class->hasField($fieldName)) { if (isset($class->reflFields[$fieldName])) {
return $class; return $class;
} }

View File

@ -45,7 +45,7 @@ class ArrayHydrator extends AbstractHydrator
$this->_resultPointers = array(); $this->_resultPointers = array();
$this->_idTemplate = array(); $this->_idTemplate = array();
$this->_resultCounter = 0; $this->_resultCounter = 0;
foreach ($this->_rsm->getAliasMap() as $dqlAlias => $class) { foreach ($this->_rsm->getAliasMap() as $dqlAlias => $className) {
$this->_identifierMap[$dqlAlias] = array(); $this->_identifierMap[$dqlAlias] = array();
$this->_resultPointers[$dqlAlias] = array(); $this->_resultPointers[$dqlAlias] = array();
$this->_idTemplate[$dqlAlias] = ''; $this->_idTemplate[$dqlAlias] = '';
@ -99,9 +99,9 @@ class ArrayHydrator extends AbstractHydrator
// Get a reference to the right element in the result tree. // Get a reference to the right element in the result tree.
// This element will get the associated element attached. // This element will get the associated element attached.
if ($this->_rsm->isMixed && isset($this->_rootAliases[$parent])) { if ($this->_rsm->isMixed && isset($this->_rootAliases[$parent])) {
$key = key(reset($this->_resultPointers)); $first = reset($this->_resultPointers);
// TODO: Exception if $key === null ? // TODO: Exception if $key === null ?
$baseElement =& $this->_resultPointers[$parent][$key]; $baseElement =& $this->_resultPointers[$parent][key($first)];
} else if (isset($this->_resultPointers[$parent])) { } else if (isset($this->_resultPointers[$parent])) {
$baseElement =& $this->_resultPointers[$parent]; $baseElement =& $this->_resultPointers[$parent];
} else { } else {

View File

@ -68,10 +68,11 @@ class ObjectHydrator extends AbstractHydrator
$this->_resultCounter = 0; $this->_resultCounter = 0;
$this->_fetchedAssociations = array(); $this->_fetchedAssociations = array();
foreach ($this->_rsm->aliasMap as $dqlAlias => $class) { foreach ($this->_rsm->aliasMap as $dqlAlias => $className) {
$this->_identifierMap[$dqlAlias] = array(); $this->_identifierMap[$dqlAlias] = array();
$this->_resultPointers[$dqlAlias] = array(); $this->_resultPointers[$dqlAlias] = array();
$this->_idTemplate[$dqlAlias] = ''; $this->_idTemplate[$dqlAlias] = '';
$class = $this->_em->getClassMetadata($className);
if ( ! isset($this->_ce[$class->name])) { if ( ! isset($this->_ce[$class->name])) {
$this->_ce[$class->name] = $class; $this->_ce[$class->name] = $class;
@ -88,7 +89,7 @@ class ObjectHydrator extends AbstractHydrator
} }
} }
// Remember which classes are "fetch joined" // Remember which associations are "fetch joined"
if (isset($this->_rsm->relationMap[$dqlAlias])) { if (isset($this->_rsm->relationMap[$dqlAlias])) {
$assoc = $this->_rsm->relationMap[$dqlAlias]; $assoc = $this->_rsm->relationMap[$dqlAlias];
$this->_fetchedAssociations[$assoc->sourceEntityName][$assoc->sourceFieldName] = true; $this->_fetchedAssociations[$assoc->sourceEntityName][$assoc->sourceFieldName] = true;
@ -314,7 +315,7 @@ class ObjectHydrator extends AbstractHydrator
// Hydrate the entity data found in the current row. // Hydrate the entity data found in the current row.
foreach ($rowData as $dqlAlias => $data) { foreach ($rowData as $dqlAlias => $data) {
$index = false; $index = false;
$entityName = $this->_rsm->aliasMap[$dqlAlias]->name; $entityName = $this->_rsm->aliasMap[$dqlAlias];
if (isset($this->_rsm->parentAliasMap[$dqlAlias])) { if (isset($this->_rsm->parentAliasMap[$dqlAlias])) {
// It's a joined result // It's a joined result
@ -326,9 +327,9 @@ class ObjectHydrator extends AbstractHydrator
// Get a reference to the right element in the result tree. // Get a reference to the right element in the result tree.
// This element will get the associated element attached. // This element will get the associated element attached.
if ($this->_rsm->isMixed && isset($this->_rootAliases[$parent])) { if ($this->_rsm->isMixed && isset($this->_rootAliases[$parent])) {
$key = key(reset($this->_resultPointers)); $first = reset($this->_resultPointers);
// TODO: Exception if $key === null ? // TODO: Exception if $key === null ?
$baseElement = $this->_resultPointers[$parent][$key]; $baseElement = $this->_resultPointers[$parent][key($first)];
} else if (isset($this->_resultPointers[$parent])) { } else if (isset($this->_resultPointers[$parent])) {
$baseElement = $this->_resultPointers[$parent]; $baseElement = $this->_resultPointers[$parent];
} else { } else {

View File

@ -382,5 +382,5 @@ abstract class AssociationMapping
* @param <type> $entity * @param <type> $entity
* @param <type> $entityManager * @param <type> $entityManager
*/ */
/*abstract*/ public function load($entity, $em) {} /*abstract public function load($entity, $em) {}*/
} }

View File

@ -24,8 +24,8 @@ namespace Doctrine\ORM;
/** /**
* Represents a native SQL query. * Represents a native SQL query.
* *
* @since 2.0
* @author Roman Borschel <roman@code-factory.org> * @author Roman Borschel <roman@code-factory.org>
* @since 2.0
*/ */
class NativeQuery extends AbstractQuery class NativeQuery extends AbstractQuery
{ {
@ -55,7 +55,7 @@ class NativeQuery extends AbstractQuery
/** /**
* Gets the SQL query. * Gets the SQL query.
* *
* @return mixed The built sql query or an array of all sql queries. * @return mixed The built SQL query or an array of all SQL queries.
* @override * @override
*/ */
public function getSql() public function getSql()
@ -67,18 +67,11 @@ class NativeQuery extends AbstractQuery
* Executes the query. * Executes the query.
* *
* @param array $params * @param array $params
* @return Statement The Statement handle. * @return Statement The Statement handle.
* @override * @override
*/ */
protected function _doExecute(array $params) protected function _doExecute(array $params)
{ {
// Assignments for Enums return $this->_em->getConnection()->execute($this->_sql, $this->_prepareParams($params));
//$this->_setEnumParams($this->_parserResult->getEnumParams());
// Converting parameters
$params = $this->_prepareParams($params);
// Executing the query and returning statement
return $this->_em->getConnection()->execute($this->_sql, $params);
} }
} }

View File

@ -117,6 +117,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
*/ */
private $_isDirty = false; private $_isDirty = false;
/** Whether the collection has already been initialized. */
private $_initialized = false; private $_initialized = false;
/** /**

View File

@ -66,19 +66,19 @@ class Query extends AbstractQuery
protected $_parserResult; protected $_parserResult;
/** /**
* @var Doctrine_Cache_Interface The cache driver used for caching queries. * @var CacheDriver The cache driver used for caching queries.
*/ */
//protected $_queryCache; protected $_queryCache;
/** /**
* @var boolean Boolean value that indicates whether or not expire the query cache. * @var boolean Boolean value that indicates whether or not expire the query cache.
*/ */
//protected $_expireQueryCache = false; protected $_expireQueryCache = false;
/** /**
* @var int Query Cache lifetime. * @var int Query Cache lifetime.
*/ */
//protected $_queryCacheTTL; protected $_queryCacheTTL;
// End of Caching Stuff // End of Caching Stuff
@ -130,7 +130,7 @@ class Query extends AbstractQuery
protected function _doExecute(array $params) protected function _doExecute(array $params)
{ {
// If there is a CacheDriver associated to cache queries... // If there is a CacheDriver associated to cache queries...
if ($queryCache = $this->_em->getConfiguration()->getQueryCacheImpl()) { if ($queryCache = $this->getQueryCacheDriver()) {
// Calculate hash for dql query. // Calculate hash for dql query.
$hash = md5($this->getDql() . 'DOCTRINE_QUERY_CACHE_SALT'); $hash = md5($this->getDql() . 'DOCTRINE_QUERY_CACHE_SALT');
$cached = ($this->_expireQueryCache) ? false : $queryCache->fetch($hash); $cached = ($this->_expireQueryCache) ? false : $queryCache->fetch($hash);
@ -138,10 +138,10 @@ class Query extends AbstractQuery
if ($cached === false) { if ($cached === false) {
// Cache miss. // Cache miss.
$executor = $this->parse()->getSqlExecutor(); $executor = $this->parse()->getSqlExecutor();
$queryCache->save($hash, $this->_parserResult->toCachedForm(), null); $queryCache->save($hash, serialize($this->_parserResult), null);
} else { } else {
// Cache hit. // Cache hit.
$this->_parserResult = CacheHandler::fromCachedQuery($this, $cached); $this->_parserResult = unserialize($cached);
$executor = $this->_parserResult->getSqlExecutor(); $executor = $this->_parserResult->getSqlExecutor();
} }
} else { } else {
@ -149,7 +149,7 @@ class Query extends AbstractQuery
} }
// Assignments for Enums // Assignments for Enums
$this->_setEnumParams($this->_parserResult->getEnumParams()); //$this->_setEnumParams($this->_parserResult->getEnumParams());
// Converting parameters // Converting parameters
$params = $this->_prepareParams($params); $params = $this->_prepareParams($params);
@ -168,32 +168,26 @@ class Query extends AbstractQuery
* @param Doctrine_Cache_Interface|null $driver Cache driver * @param Doctrine_Cache_Interface|null $driver Cache driver
* @return Doctrine_ORM_Query * @return Doctrine_ORM_Query
*/ */
/*public function setQueryCache($queryCache) public function setQueryCacheDriver($queryCache)
{ {
if ($queryCache !== null && ! ($queryCache instanceof \Doctrine\ORM\Cache\Cache)) {
throw DoctrineException::updateMe(
'Method setResultCache() accepts only an instance of Doctrine_ORM_Cache_Interface or null.'
);
}
$this->_queryCache = $queryCache; $this->_queryCache = $queryCache;
return $this; return $this;
}*/ }
/** /**
* Returns the cache driver used for caching queries. * Returns the cache driver used for query caching.
* *
* @return Doctrine_Cache_Interface Cache driver * @return CacheDriver The cache driver used for query caching or NULL, if this
* Query does not use query caching.
*/ */
/*public function getQueryCache() public function getQueryCacheDriver()
{ {
if ($this->_queryCache instanceof \Doctrine\ORM\Cache\Cache) { if ($this->_queryCache) {
return $this->_queryCache; return $this->_queryCache;
} else { } else {
return $this->_em->getConnection()->getQueryCacheDriver(); return $this->_em->getConfiguration()->getQueryCacheImpl();
} }
}*/ }
/** /**
* Defines how long the query cache will be active before expire. * Defines how long the query cache will be active before expire.
@ -201,26 +195,25 @@ class Query extends AbstractQuery
* @param integer $timeToLive How long the cache entry is valid * @param integer $timeToLive How long the cache entry is valid
* @return Doctrine_ORM_Query * @return Doctrine_ORM_Query
*/ */
/*public function setQueryCacheLifetime($timeToLive) public function setQueryCacheLifetime($timeToLive)
{ {
if ($timeToLive !== null) { if ($timeToLive !== null) {
$timeToLive = (int) $timeToLive; $timeToLive = (int) $timeToLive;
} }
$this->_queryCacheTTL = $timeToLive; $this->_queryCacheTTL = $timeToLive;
return $this; return $this;
}*/ }
/** /**
* Retrieves the lifetime of resultset cache. * Retrieves the lifetime of resultset cache.
* *
* @return int * @return int
*/ */
/*public function getQueryCacheLifetime() public function getQueryCacheLifetime()
{ {
return $this->_queryCacheTTL; return $this->_queryCacheTTL;
}*/ }
/** /**
* Defines if the query cache is active or not. * Defines if the query cache is active or not.
@ -228,22 +221,22 @@ class Query extends AbstractQuery
* @param boolean $expire Whether or not to force query cache expiration. * @param boolean $expire Whether or not to force query cache expiration.
* @return Doctrine_ORM_Query * @return Doctrine_ORM_Query
*/ */
/*public function setExpireQueryCache($expire = true) public function setExpireQueryCache($expire = true)
{ {
$this->_expireQueryCache = (bool) $expire; $this->_expireQueryCache = $expire;
return $this; return $this;
}*/ }
/** /**
* Retrieves if the query cache is active or not. * Retrieves if the query cache is active or not.
* *
* @return bool * @return bool
*/ */
/*public function getExpireQueryCache() public function getExpireQueryCache()
{ {
return $this->_expireQueryCache; return $this->_expireQueryCache;
}*/ }
/** /**
* @override * @override

View File

@ -44,17 +44,17 @@ abstract class AbstractResult
/** /**
* @var array Enum params. * @var array Enum params.
*/ */
protected $_enumParams = array(); //protected $_enumParams = array();
/** /**
* Returns the enum parameters. * Returns the enum parameters.
* *
* @return mixed Enum parameters. * @return mixed Enum parameters.
*/ */
public function getEnumParams() /*public function getEnumParams()
{ {
return $this->_enumParams; return $this->_enumParams;
} }*/
/** /**
* Returns this object in serialized format, revertable using fromCached*. * Returns this object in serialized format, revertable using fromCached*.

View File

@ -40,8 +40,6 @@ use Doctrine\ORM\Query\Exec;
*/ */
class Parser class Parser
{ {
const SCALAR_QUERYCOMPONENT_ALIAS = 'dctrn';
/** Maps registered string function names to class names. */ /** Maps registered string function names to class names. */
private static $_STRING_FUNCTIONS = array( private static $_STRING_FUNCTIONS = array(
'concat' => 'Doctrine\ORM\Query\AST\Functions\ConcatFunction', 'concat' => 'Doctrine\ORM\Query\AST\Functions\ConcatFunction',
@ -87,14 +85,14 @@ class Parser
/** /**
* A scanner object. * A scanner object.
* *
* @var Doctrine_ORM_Query_Scanner * @var Doctrine\ORM\Query\Lexer
*/ */
private $_lexer; private $_lexer;
/** /**
* The Parser Result object. * The Parser Result object.
* *
* @var Doctrine_ORM_Query_ParserResult * @var Doctrine\ORM\Query\ParserResult
*/ */
private $_parserResult; private $_parserResult;
@ -131,8 +129,7 @@ class Parser
$this->_em = $query->getEntityManager(); $this->_em = $query->getEntityManager();
$this->_lexer = new Lexer($query->getDql()); $this->_lexer = new Lexer($query->getDql());
$this->_parserResult = new ParserResult; $this->_parserResult = new ParserResult;
$this->_parserResult->setEntityManager($this->_em); //$this->_parserResult->setEntityManager($this->_em);
//$this->free(true);
} }
/** /**
@ -495,7 +492,6 @@ class Parser
$identVariable = $this->_lexer->token['value']; $identVariable = $this->_lexer->token['value'];
$this->match('.'); $this->match('.');
} else { } else {
//$identVariable = $this->_parserResult->getDefaultQueryComponentAlias();
throw new DoctrineException("Missing alias qualifier."); throw new DoctrineException("Missing alias qualifier.");
} }
$this->match(Lexer::T_IDENTIFIER); $this->match(Lexer::T_IDENTIFIER);
@ -571,8 +567,7 @@ class Parser
'scalar' => null, 'scalar' => null,
); );
$this->_queryComponents[$deleteClause->getAliasIdentificationVariable()] = $queryComponent; $this->_queryComponents[$deleteClause->getAliasIdentificationVariable()] = $queryComponent;
//$this->_parserResult->setDefaultQueryComponentAlias($deleteClause->getAliasIdentificationVariable());
//$this->_declaredClasses[$deleteClause->getAliasIdentificationVariable()] = $classMetadata;
return $deleteClause; return $deleteClause;
} }
@ -611,11 +606,6 @@ class Parser
$identificationVariableDeclarations[] = $this->_IdentificationVariableDeclaration(); $identificationVariableDeclarations[] = $this->_IdentificationVariableDeclaration();
$firstRangeDecl = $identificationVariableDeclarations[0]->getRangeVariableDeclaration(); $firstRangeDecl = $identificationVariableDeclarations[0]->getRangeVariableDeclaration();
/*if ($firstRangeDecl->getAliasIdentificationVariable()) {
$this->_parserResult->setDefaultQueryComponentAlias($firstRangeDecl->getAliasIdentificationVariable());
} else {
$this->_parserResult->setDefaultQueryComponentAlias($firstRangeDecl->getAbstractSchemaName());
}*/
while ($this->_lexer->isNextToken(',')) { while ($this->_lexer->isNextToken(',')) {
$this->match(','); $this->match(',');
@ -787,7 +777,6 @@ class Parser
// Verify that the association exists, if yes update the ParserResult // Verify that the association exists, if yes update the ParserResult
// with the new component. // with the new component.
//$parentComp = $this->_parserResult->getQueryComponent($joinPathExpression->getIdentificationVariable());
$parentClass = $this->_queryComponents[$joinPathExpression->getIdentificationVariable()]['metadata']; $parentClass = $this->_queryComponents[$joinPathExpression->getIdentificationVariable()]['metadata'];
$assocField = $joinPathExpression->getAssociationField(); $assocField = $joinPathExpression->getAssociationField();
if ( ! $parentClass->hasAssociation($assocField)) { if ( ! $parentClass->hasAssociation($assocField)) {

View File

@ -22,7 +22,8 @@
namespace Doctrine\ORM\Query; namespace Doctrine\ORM\Query;
/** /**
* Doctrine_ORM_Query_ParserResult * Encapsulates the resulting components from a DQL query parsing process that
* can be serialized.
* *
* @author Guilherme Blanco <guilhermeblanco@hotmail.com> * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
* @author Janne Vanhala <jpvanhal@cc.hut.fi> * @author Janne Vanhala <jpvanhal@cc.hut.fi>
@ -31,15 +32,9 @@ namespace Doctrine\ORM\Query;
* @since 2.0 * @since 2.0
* @version $Revision$ * @version $Revision$
*/ */
class ParserResult extends AbstractResult class ParserResult
{ {
/** protected $_sqlExecutor;
* The EntityManager.
*
* @var Doctrine_EntityManager
*/
protected $_em;
protected $_resultSetMapping; protected $_resultSetMapping;
public function __construct() public function __construct()
@ -68,32 +63,12 @@ class ParserResult extends AbstractResult
$this->_resultSetMapping = $rsm; $this->_resultSetMapping = $rsm;
} }
/**
* Sets the Entity Manager.
*
* @param Doctrine_EntityManager $em The Entity Manager.
*/
public function setEntityManager($em)
{
$this->_em = $em;
}
/**
* Gets the Entity Manager.
*
* @return Doctrine_EntityManager
*/
public function getEntityManager()
{
return $this->_em;
}
/** /**
* @nodoc * @nodoc
*/ */
public function setSqlExecutor(\Doctrine\ORM\Query\Exec\AbstractExecutor $executor) public function setSqlExecutor(\Doctrine\ORM\Query\Exec\AbstractExecutor $executor)
{ {
$this->_data = $executor; $this->_sqlExecutor = $executor;
} }
/** /**
@ -101,6 +76,6 @@ class ParserResult extends AbstractResult
*/ */
public function getSqlExecutor() public function getSqlExecutor()
{ {
return $this->_data; return $this->_sqlExecutor;
} }
} }

View File

@ -33,6 +33,8 @@ namespace Doctrine\ORM\Query;
*/ */
class QueryResult extends AbstractResult class QueryResult extends AbstractResult
{ {
protected $_data;
/** /**
* Returns cached resultset. * Returns cached resultset.
* *

View File

@ -69,12 +69,6 @@ class SqlWalker
$this->_em = $query->getEntityManager(); $this->_em = $query->getEntityManager();
$this->_parserResult = $parserResult; $this->_parserResult = $parserResult;
$this->_queryComponents = $queryComponents; $this->_queryComponents = $queryComponents;
// In a mixed query we start alias counting for scalars with 1 since
// index 0 will hold the object.
/*if ($parserResult->isMixedQuery()) {
$this->_scalarResultCounter = 1;
}*/
} }
/** /**
@ -120,10 +114,10 @@ class SqlWalker
foreach ($this->_selectedClasses as $dqlAlias => $class) { foreach ($this->_selectedClasses as $dqlAlias => $class) {
if ($this->_queryComponents[$dqlAlias]['relation'] === null) { if ($this->_queryComponents[$dqlAlias]['relation'] === null) {
$this->_resultSetMapping->addEntityResult($class, $dqlAlias); $this->_resultSetMapping->addEntityResult($class->name, $dqlAlias);
} else { } else {
$this->_resultSetMapping->addJoinedEntityResult( $this->_resultSetMapping->addJoinedEntityResult(
$class, $dqlAlias, $class->name, $dqlAlias,
$this->_queryComponents[$dqlAlias]['parent'], $this->_queryComponents[$dqlAlias]['parent'],
$this->_queryComponents[$dqlAlias]['relation'] $this->_queryComponents[$dqlAlias]['relation']
); );
@ -691,9 +685,7 @@ class SqlWalker
public function walkUpdateItem($updateItem) public function walkUpdateItem($updateItem)
{ {
$sql = ''; $sql = '';
$dqlAlias = $updateItem->getIdentificationVariable() ? $dqlAlias = $updateItem->getIdentificationVariable();
$updateItem->getIdentificationVariable() :
$this->_parserResult->getDefaultQueryComponentAlias();
$qComp = $this->_queryComponents[$dqlAlias]; $qComp = $this->_queryComponents[$dqlAlias];
if ($this->_useSqlTableAliases) { if ($this->_useSqlTableAliases) {

View File

@ -82,7 +82,6 @@ class SchemaTool
$foreignKeyConstraints = array(); // FK SQL statements. Appended to $sql at the end. $foreignKeyConstraints = array(); // FK SQL statements. Appended to $sql at the end.
$sequences = array(); // Sequence SQL statements. Appended to $sql at the end. $sequences = array(); // Sequence SQL statements. Appended to $sql at the end.
// First we create the tables
foreach ($classes as $class) { foreach ($classes as $class) {
if (isset($processedClasses[$class->name])) { if (isset($processedClasses[$class->name])) {
continue; continue;

View File

@ -47,7 +47,7 @@ use Doctrine\ORM\EntityManager;
class UnitOfWork implements PropertyChangedListener class UnitOfWork implements PropertyChangedListener
{ {
/** /**
* An Entity is in managed state when it has a primary key/identifier (and * An entity is in managed state when it has a primary key/identifier (and
* therefore persistent state) and is managed by an EntityManager * therefore persistent state) and is managed by an EntityManager
* (registered in the identity map). * (registered in the identity map).
* In MANAGED state the entity is associated with an EntityManager that manages * In MANAGED state the entity is associated with an EntityManager that manages
@ -56,20 +56,20 @@ class UnitOfWork implements PropertyChangedListener
const STATE_MANAGED = 1; const STATE_MANAGED = 1;
/** /**
* An Entity is new if it does not yet have an identifier/primary key * An entity is new if it does not yet have an identifier/primary key
* and is not (yet) managed by an EntityManager. * and is not (yet) managed by an EntityManager.
*/ */
const STATE_NEW = 2; const STATE_NEW = 2;
/** /**
* A detached Entity is an instance with a persistent identity that is not * A detached entity is an instance with a persistent identity that is not
* (or no longer) associated with an EntityManager (and a UnitOfWork). * (or no longer) associated with an EntityManager (and a UnitOfWork).
* This means its no longer in the identity map. * This means it is no longer in the identity map.
*/ */
const STATE_DETACHED = 3; const STATE_DETACHED = 3;
/** /**
* A removed Entity instance is an instance with a persistent identity, * A removed entity instance is an instance with a persistent identity,
* associated with an EntityManager, whose persistent state has been * associated with an EntityManager, whose persistent state has been
* deleted (or is scheduled for deletion). * deleted (or is scheduled for deletion).
*/ */
@ -657,8 +657,10 @@ class UnitOfWork implements PropertyChangedListener
} }
/** /**
* Registers a new entity. * Registers a new entity. The entity will be scheduled for insertion.
* If the entity already has an identifier, it will be added to the identity map.
* *
* @param object $entity
* @todo Rename to scheduleForInsert(). * @todo Rename to scheduleForInsert().
*/ */
public function registerNew($entity) public function registerNew($entity)
@ -682,9 +684,9 @@ class UnitOfWork implements PropertyChangedListener
} }
/** /**
* Checks whether an entity is registered as new on the unit of work. * Checks whether an entity is registered as new on this unit of work.
* *
* @param Doctrine\ORM\Entity $entity * @param object $entity
* @return boolean * @return boolean
* @todo Rename to isScheduledForInsert(). * @todo Rename to isScheduledForInsert().
*/ */
@ -696,7 +698,7 @@ class UnitOfWork implements PropertyChangedListener
/** /**
* Registers a dirty entity. * Registers a dirty entity.
* *
* @param Doctrine\ORM\Entity $entity * @param object $entity
* @todo Rename to scheduleForUpdate(). * @todo Rename to scheduleForUpdate().
*/ */
public function registerDirty($entity) public function registerDirty($entity)
@ -788,8 +790,8 @@ class UnitOfWork implements PropertyChangedListener
/** /**
* Enter description here... * Enter description here...
* *
* @param Doctrine\ORM\Entity $entity * @param object $entity
* @return unknown * @return boolean
* @todo Rename to isScheduled() * @todo Rename to isScheduled()
*/ */
public function isEntityRegistered($entity) public function isEntityRegistered($entity)
@ -807,7 +809,7 @@ class UnitOfWork implements PropertyChangedListener
* the identity map with the name of the root entity class. So calling detachAll() * the identity map with the name of the root entity class. So calling detachAll()
* with a class name that is not the name of a root entity has no effect. * with a class name that is not the name of a root entity has no effect.
* *
* @return integer The number of detached entities. * @return integer The number of detached entities.
*/ */
public function detachAll($entityName = null) public function detachAll($entityName = null)
{ {
@ -834,7 +836,7 @@ class UnitOfWork implements PropertyChangedListener
* Note that entities in a hierarchy are registered with the class name of * Note that entities in a hierarchy are registered with the class name of
* the root entity. * the root entity.
* *
* @param Doctrine\ORM\Entity $entity The entity to register. * @param object $entity The entity to register.
* @return boolean TRUE if the registration was successful, FALSE if the identity of * @return boolean TRUE if the registration was successful, FALSE if the identity of
* the entity in question is already managed. * the entity in question is already managed.
*/ */
@ -861,7 +863,7 @@ class UnitOfWork implements PropertyChangedListener
* Gets the state of an entity within the current unit of work. * Gets the state of an entity within the current unit of work.
* *
* @param object $entity * @param object $entity
* @return int * @return int The entity state.
*/ */
public function getEntityState($entity) public function getEntityState($entity)
{ {
@ -938,8 +940,7 @@ class UnitOfWork implements PropertyChangedListener
} }
/** /**
* Checks whether an entity is registered in the identity map of the * Checks whether an entity is registered in the identity map of this UnitOfWork.
* UnitOfWork.
* *
* @param object $entity * @param object $entity
* @return boolean * @return boolean

View File

@ -43,7 +43,7 @@ class ConnectionMock extends \Doctrine\DBAL\Connection
/** /**
* @override * @override
*/ */
public function fetchOne($sql) public function fetchOne($statement, array $params = array(), $colnum = 0)
{ {
return $this->_fetchOneResult; return $this->_fetchOneResult;
} }

View File

@ -24,6 +24,7 @@ class AllTests
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\SingleTableInheritanceTest'); $suite->addTestSuite('Doctrine\Tests\ORM\Functional\SingleTableInheritanceTest');
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\ClassTableInheritanceTest'); $suite->addTestSuite('Doctrine\Tests\ORM\Functional\ClassTableInheritanceTest');
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\DetachedEntityTest'); $suite->addTestSuite('Doctrine\Tests\ORM\Functional\DetachedEntityTest');
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\QueryCacheTest');
return $suite; return $suite;
} }

View File

@ -29,7 +29,7 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
$this->_em->flush(); $this->_em->flush();
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'id', 'id'); $rsm->addFieldResult('u', 'id', 'id');
$rsm->addFieldResult('u', 'name', 'name'); $rsm->addFieldResult('u', 'name', 'name');

View File

@ -0,0 +1,57 @@
<?php
namespace Doctrine\Tests\ORM\Functional;
use Doctrine\Tests\Models\CMS\CmsUser;
use Doctrine\ORM\Cache\ArrayCache;
require_once __DIR__ . '/../../TestInit.php';
/**
* QueryCacheTest
*
* @author robo
*/
class QueryCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
{
protected function setUp() {
$this->useModelSet('cms');
parent::setUp();
}
public function testQueryCache()
{
$user = new CmsUser;
$user->name = 'Roman';
$user->username = 'romanb';
$user->status = 'dev';
$this->_em->save($user);
$this->_em->flush();
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
$cache = new ArrayCache;
$query->setQueryCacheDriver($cache);
$this->assertEquals(0, $cache->count());
$users = $query->getResultList();
$this->assertEquals(1, $cache->count());
$this->assertTrue($cache->contains(md5('select ux from Doctrine\Tests\Models\CMS\CmsUser uxDOCTRINE_QUERY_CACHE_SALT')));
$this->assertEquals(1, count($users));
$this->assertEquals('Roman', $users[0]->name);
$this->_em->clear();
$query2 = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
$query2->setQueryCacheDriver($cache);
$users = $query2->getResultList();
$this->assertEquals(1, $cache->count());
$this->assertTrue($cache->contains(md5('select ux from Doctrine\Tests\Models\CMS\CmsUser uxDOCTRINE_QUERY_CACHE_SALT')));
$this->assertEquals(1, count($users));
$this->assertEquals('Roman', $users[0]->name);
}
}

View File

@ -15,7 +15,7 @@ class ArrayHydratorTest extends HydrationTest
public function testNewHydrationSimpleEntityQuery() public function testNewHydrationSimpleEntityQuery()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name'); $rsm->addFieldResult('u', 'u__name', 'name');
@ -51,8 +51,8 @@ class ArrayHydratorTest extends HydrationTest
public function testNewHydrationSimpleMultipleRootEntityQuery() public function testNewHydrationSimpleMultipleRootEntityQuery()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'), 'a'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsArticle', 'a');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name'); $rsm->addFieldResult('u', 'u__name', 'name');
$rsm->addFieldResult('a', 'a__id', 'id'); $rsm->addFieldResult('a', 'a__id', 'id');
@ -102,9 +102,9 @@ class ArrayHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryFetchJoin() public function testNewHydrationMixedQueryFetchJoin()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'), 'Doctrine\Tests\Models\CMS\CmsPhonenumber',
'p', 'p',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
@ -169,7 +169,7 @@ class ArrayHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryNormalJoin() public function testNewHydrationMixedQueryNormalJoin()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status'); $rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'numPhones'); $rsm->addScalarResult('sclr0', 'numPhones');
@ -214,9 +214,9 @@ class ArrayHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryFetchJoinCustomIndex() public function testNewHydrationMixedQueryFetchJoinCustomIndex()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'), 'Doctrine\Tests\Models\CMS\CmsPhonenumber',
'p', 'p',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
@ -289,15 +289,15 @@ class ArrayHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryMultipleFetchJoin() public function testNewHydrationMixedQueryMultipleFetchJoin()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'), 'Doctrine\Tests\Models\CMS\CmsPhonenumber',
'p', 'p',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
); );
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'), 'Doctrine\Tests\Models\CMS\CmsArticle',
'a', 'a',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles')
@ -409,21 +409,21 @@ class ArrayHydratorTest extends HydrationTest
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'), 'Doctrine\Tests\Models\CMS\CmsPhonenumber',
'p', 'p',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
); );
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'), 'Doctrine\Tests\Models\CMS\CmsArticle',
'a', 'a',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles')
); );
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsComment'), 'Doctrine\Tests\Models\CMS\CmsComment',
'c', 'c',
'a', 'a',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle')->getAssociationMapping('comments') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle')->getAssociationMapping('comments')
@ -566,9 +566,9 @@ class ArrayHydratorTest extends HydrationTest
public function testNewHydrationEntityQueryCustomResultSetOrder() public function testNewHydrationEntityQueryCustomResultSetOrder()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory'), 'c'); $rsm->addEntityResult('Doctrine\Tests\Models\Forum\ForumCategory', 'c');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumBoard'), 'Doctrine\Tests\Models\Forum\ForumBoard',
'b', 'b',
'c', 'c',
$this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory')->getAssociationMapping('boards') $this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory')->getAssociationMapping('boards')
@ -633,7 +633,7 @@ class ArrayHydratorTest extends HydrationTest
public function testResultIteration() public function testResultIteration()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name'); $rsm->addFieldResult('u', 'u__name', 'name');

View File

@ -15,7 +15,7 @@ class ObjectHydratorTest extends HydrationTest
public function testNewHydrationSimpleEntityQuery() public function testNewHydrationSimpleEntityQuery()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name'); $rsm->addFieldResult('u', 'u__name', 'name');
@ -52,8 +52,8 @@ class ObjectHydratorTest extends HydrationTest
public function testNewHydrationSimpleMultipleRootEntityQuery() public function testNewHydrationSimpleMultipleRootEntityQuery()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'), 'a'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsArticle', 'a');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name'); $rsm->addFieldResult('u', 'u__name', 'name');
$rsm->addFieldResult('a', 'a__id', 'id'); $rsm->addFieldResult('a', 'a__id', 'id');
@ -108,9 +108,9 @@ class ObjectHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryFetchJoin() public function testNewHydrationMixedQueryFetchJoin()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'), 'Doctrine\Tests\Models\CMS\CmsPhonenumber',
'p', 'p',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
@ -182,7 +182,7 @@ class ObjectHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryNormalJoin() public function testNewHydrationMixedQueryNormalJoin()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status'); $rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'numPhones'); $rsm->addScalarResult('sclr0', 'numPhones');
@ -229,9 +229,9 @@ class ObjectHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryFetchJoinCustomIndex() public function testNewHydrationMixedQueryFetchJoinCustomIndex()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'), 'Doctrine\Tests\Models\CMS\CmsPhonenumber',
'p', 'p',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
@ -308,15 +308,15 @@ class ObjectHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryMultipleFetchJoin() public function testNewHydrationMixedQueryMultipleFetchJoin()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'), 'Doctrine\Tests\Models\CMS\CmsPhonenumber',
'p', 'p',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
); );
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'), 'Doctrine\Tests\Models\CMS\CmsArticle',
'a', 'a',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles')
@ -423,21 +423,21 @@ class ObjectHydratorTest extends HydrationTest
public function testNewHydrationMixedQueryMultipleDeepMixedFetchJoin() public function testNewHydrationMixedQueryMultipleDeepMixedFetchJoin()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'), 'Doctrine\Tests\Models\CMS\CmsPhonenumber',
'p', 'p',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
); );
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'), 'Doctrine\Tests\Models\CMS\CmsArticle',
'a', 'a',
'u', 'u',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles')
); );
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsComment'), 'Doctrine\Tests\Models\CMS\CmsComment',
'c', 'c',
'a', 'a',
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle')->getAssociationMapping('comments') $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle')->getAssociationMapping('comments')
@ -574,9 +574,9 @@ class ObjectHydratorTest extends HydrationTest
public function testNewHydrationEntityQueryCustomResultSetOrder() public function testNewHydrationEntityQueryCustomResultSetOrder()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory'), 'c'); $rsm->addEntityResult('Doctrine\Tests\Models\Forum\ForumCategory', 'c');
$rsm->addJoinedEntityResult( $rsm->addJoinedEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumBoard'), 'Doctrine\Tests\Models\Forum\ForumBoard',
'b', 'b',
'c', 'c',
$this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory')->getAssociationMapping('boards') $this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory')->getAssociationMapping('boards')
@ -643,7 +643,7 @@ class ObjectHydratorTest extends HydrationTest
public function testResultIteration() public function testResultIteration()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name'); $rsm->addFieldResult('u', 'u__name', 'name');

View File

@ -29,7 +29,7 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
public function testBasicResultSetMapping() public function testBasicResultSetMapping()
{ {
$this->_rsm->addEntityResult( $this->_rsm->addEntityResult(
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'Doctrine\Tests\Models\CMS\CmsUser',
'u' 'u'
); );
$this->_rsm->addFieldResult('u', 'id', 'id'); $this->_rsm->addFieldResult('u', 'id', 'id');
@ -42,10 +42,9 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
$this->assertFalse($this->_rsm->isScalarResult('username')); $this->assertFalse($this->_rsm->isScalarResult('username'));
$this->assertFalse($this->_rsm->isScalarResult('name')); $this->assertFalse($this->_rsm->isScalarResult('name'));
$this->assertTrue($this->_rsm->getClass('u') instanceof ClassMetadata); $this->assertTrue($this->_rsm->getClass('u') == 'Doctrine\Tests\Models\CMS\CmsUser');
$class = $this->_rsm->getOwningClass('id'); $class = $this->_rsm->getOwningClass('id');
$this->assertTrue($class instanceof ClassMetadata); $this->assertTrue($class == 'Doctrine\Tests\Models\CMS\CmsUser');
$this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $class->name);
$this->assertEquals('u', $this->_rsm->getEntityAlias('id')); $this->assertEquals('u', $this->_rsm->getEntityAlias('id'));
$this->assertEquals('u', $this->_rsm->getEntityAlias('status')); $this->assertEquals('u', $this->_rsm->getEntityAlias('status'));

View File

@ -15,7 +15,7 @@ class ScalarHydratorTest extends HydrationTest
public function testNewHydrationSimpleEntityQuery() public function testNewHydrationSimpleEntityQuery()
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name'); $rsm->addFieldResult('u', 'u__name', 'name');

View File

@ -55,7 +55,7 @@ class SingleScalarHydratorTest extends HydrationTest
public function testHydrateSingleScalar($name, $resultSet) public function testHydrateSingleScalar($name, $resultSet)
{ {
$rsm = new ResultSetMapping; $rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u'); $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name'); $rsm->addFieldResult('u', 'u__name', 'name');

View File

@ -11,6 +11,8 @@ class OrmFunctionalTestCase extends OrmTestCase
{ {
/* The metadata cache shared between all functional tests. */ /* The metadata cache shared between all functional tests. */
private static $_metadataCacheImpl = null; private static $_metadataCacheImpl = null;
/* The query cache shared between all functional tests. */
private static $_queryCacheImpl = null;
/** The EntityManager for this testcase. */ /** The EntityManager for this testcase. */
protected $_em; protected $_em;
@ -123,8 +125,12 @@ class OrmFunctionalTestCase extends OrmTestCase
if (is_null(self::$_metadataCacheImpl)) { if (is_null(self::$_metadataCacheImpl)) {
self::$_metadataCacheImpl = new \Doctrine\ORM\Cache\ArrayCache; self::$_metadataCacheImpl = new \Doctrine\ORM\Cache\ArrayCache;
} }
if (is_null(self::$_queryCacheImpl)) {
self::$_queryCacheImpl = new \Doctrine\ORM\Cache\ArrayCache;
}
$config = new \Doctrine\ORM\Configuration(); $config = new \Doctrine\ORM\Configuration();
$config->setMetadataCacheImpl(self::$_metadataCacheImpl); $config->setMetadataCacheImpl(self::$_metadataCacheImpl);
$config->setQueryCacheImpl(self::$_queryCacheImpl);
$eventManager = new \Doctrine\Common\EventManager(); $eventManager = new \Doctrine\Common\EventManager();
$conn = $this->sharedFixture['conn']; $conn = $this->sharedFixture['conn'];
return \Doctrine\ORM\EntityManager::create($conn, $config, $eventManager); return \Doctrine\ORM\EntityManager::create($conn, $config, $eventManager);

View File

@ -9,6 +9,8 @@ class OrmTestCase extends DoctrineTestCase
{ {
/** The metadata cache that is shared between all ORM tests (except functional tests). */ /** The metadata cache that is shared between all ORM tests (except functional tests). */
private static $_metadataCacheImpl = null; private static $_metadataCacheImpl = null;
/** The query cache that is shared between all ORM tests (except functional tests). */
private static $_queryCacheImpl = null;
/** /**
* Creates an EntityManager for testing purposes. * Creates an EntityManager for testing purposes.
@ -24,6 +26,7 @@ class OrmTestCase extends DoctrineTestCase
{ {
$config = new \Doctrine\ORM\Configuration(); $config = new \Doctrine\ORM\Configuration();
$config->setMetadataCacheImpl(self::getSharedMetadataCacheImpl()); $config->setMetadataCacheImpl(self::getSharedMetadataCacheImpl());
$config->setQueryCacheImpl(self::getSharedQueryCacheImpl());
$eventManager = new \Doctrine\Common\EventManager(); $eventManager = new \Doctrine\Common\EventManager();
if ($conn === null) { if ($conn === null) {
$conn = array( $conn = array(
@ -43,4 +46,12 @@ class OrmTestCase extends DoctrineTestCase
} }
return self::$_metadataCacheImpl; return self::$_metadataCacheImpl;
} }
private static function getSharedQueryCacheImpl()
{
if (self::$_queryCacheImpl === null) {
self::$_queryCacheImpl = new \Doctrine\ORM\Cache\ArrayCache;
}
return self::$_queryCacheImpl;
}
} }