[2.0] Fixed Query Cache (+testcase) and some E_STRICT errors.
This commit is contained in:
parent
55d70248a9
commit
a421692679
@ -948,7 +948,7 @@ abstract class AbstractPlatform
|
||||
*
|
||||
* @todo Throw exception by default?
|
||||
*/
|
||||
public function getDropSequenceSql()
|
||||
public function getDropSequenceSql($sequenceName)
|
||||
{
|
||||
throw DoctrineException::updateMe('Drop sequence not supported by this driver.');
|
||||
}
|
||||
|
@ -188,7 +188,8 @@ abstract class AbstractQuery
|
||||
*
|
||||
* @param array $params
|
||||
*/
|
||||
public function setParams(array $params = array()) {
|
||||
public function setParams(array $params = array())
|
||||
{
|
||||
$this->_params = $params;
|
||||
}
|
||||
|
||||
@ -256,9 +257,9 @@ abstract class AbstractQuery
|
||||
*
|
||||
* @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;
|
||||
} else {
|
||||
return $this->_em->getConfiguration()->getResultCacheImpl();
|
||||
@ -471,10 +472,8 @@ abstract class AbstractQuery
|
||||
|
||||
$params = $this->getParams($params);
|
||||
|
||||
// Check result cache (Only for SELECT queries)
|
||||
if ($this->_resultCache && $this->_type === self::SELECT) {
|
||||
$cacheDriver = $this->getResultCacheDriver();
|
||||
|
||||
// Check result cache
|
||||
if ($cacheDriver = $this->getResultCacheDriver()) {
|
||||
// Calculate hash for DQL query.
|
||||
$hash = md5($this->getDql() . var_export($params, true));
|
||||
$cached = ($this->_expireResultCache) ? false : $cacheDriver->fetch($hash);
|
||||
|
@ -22,18 +22,26 @@
|
||||
namespace Doctrine\ORM;
|
||||
|
||||
/**
|
||||
* The DynamicProxyGenerator is used to generate proxy objects for entities.
|
||||
* For that purpose he generates proxy class files on the fly as needed.
|
||||
* The DynamicProxyGenerator is used to generate proxy objects for entities at runtime.
|
||||
*
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
* @since 2.0
|
||||
*/
|
||||
class DynamicProxyGenerator
|
||||
{
|
||||
/** The namspace for the generated proxy classes. */
|
||||
private static $_ns = 'Doctrine\Generated\Proxies\\';
|
||||
private $_cacheDir = '/Users/robo/dev/php/tmp/gen/';
|
||||
private $_cacheDir;
|
||||
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)
|
||||
{
|
||||
$this->_em = $em;
|
||||
|
@ -180,7 +180,7 @@ abstract class AbstractHydrator
|
||||
$cache[$key]['fieldName'] = $this->_rsm->scalarMappings[$key];
|
||||
$cache[$key]['isScalar'] = true;
|
||||
} 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];
|
||||
$classMetadata = $this->_lookupDeclaringClass($classMetadata, $fieldName);
|
||||
$cache[$key]['fieldName'] = $fieldName;
|
||||
@ -252,7 +252,7 @@ abstract class AbstractHydrator
|
||||
$cache[$key]['fieldName'] = $this->_rsm->scalarMappings[$key];
|
||||
$cache[$key]['isScalar'] = true;
|
||||
} else {
|
||||
$classMetadata = $this->_rsm->getOwningClass($key);
|
||||
$classMetadata = $this->_em->getClassMetadata($this->_rsm->getOwningClass($key));
|
||||
$fieldName = $this->_rsm->fieldMappings[$key];
|
||||
$classMetadata = $this->_lookupDeclaringClass($classMetadata, $fieldName);
|
||||
$cache[$key]['fieldName'] = $fieldName;
|
||||
@ -306,7 +306,7 @@ abstract class AbstractHydrator
|
||||
*/
|
||||
private function _lookupDeclaringClass($class, $fieldName)
|
||||
{
|
||||
if ($class->hasField($fieldName)) {
|
||||
if (isset($class->reflFields[$fieldName])) {
|
||||
return $class;
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ class ArrayHydrator extends AbstractHydrator
|
||||
$this->_resultPointers = array();
|
||||
$this->_idTemplate = array();
|
||||
$this->_resultCounter = 0;
|
||||
foreach ($this->_rsm->getAliasMap() as $dqlAlias => $class) {
|
||||
foreach ($this->_rsm->getAliasMap() as $dqlAlias => $className) {
|
||||
$this->_identifierMap[$dqlAlias] = array();
|
||||
$this->_resultPointers[$dqlAlias] = array();
|
||||
$this->_idTemplate[$dqlAlias] = '';
|
||||
@ -99,9 +99,9 @@ class ArrayHydrator extends AbstractHydrator
|
||||
// Get a reference to the right element in the result tree.
|
||||
// This element will get the associated element attached.
|
||||
if ($this->_rsm->isMixed && isset($this->_rootAliases[$parent])) {
|
||||
$key = key(reset($this->_resultPointers));
|
||||
$first = reset($this->_resultPointers);
|
||||
// TODO: Exception if $key === null ?
|
||||
$baseElement =& $this->_resultPointers[$parent][$key];
|
||||
$baseElement =& $this->_resultPointers[$parent][key($first)];
|
||||
} else if (isset($this->_resultPointers[$parent])) {
|
||||
$baseElement =& $this->_resultPointers[$parent];
|
||||
} else {
|
||||
|
@ -68,10 +68,11 @@ class ObjectHydrator extends AbstractHydrator
|
||||
$this->_resultCounter = 0;
|
||||
$this->_fetchedAssociations = array();
|
||||
|
||||
foreach ($this->_rsm->aliasMap as $dqlAlias => $class) {
|
||||
foreach ($this->_rsm->aliasMap as $dqlAlias => $className) {
|
||||
$this->_identifierMap[$dqlAlias] = array();
|
||||
$this->_resultPointers[$dqlAlias] = array();
|
||||
$this->_idTemplate[$dqlAlias] = '';
|
||||
$class = $this->_em->getClassMetadata($className);
|
||||
|
||||
if ( ! isset($this->_ce[$class->name])) {
|
||||
$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])) {
|
||||
$assoc = $this->_rsm->relationMap[$dqlAlias];
|
||||
$this->_fetchedAssociations[$assoc->sourceEntityName][$assoc->sourceFieldName] = true;
|
||||
@ -314,7 +315,7 @@ class ObjectHydrator extends AbstractHydrator
|
||||
// Hydrate the entity data found in the current row.
|
||||
foreach ($rowData as $dqlAlias => $data) {
|
||||
$index = false;
|
||||
$entityName = $this->_rsm->aliasMap[$dqlAlias]->name;
|
||||
$entityName = $this->_rsm->aliasMap[$dqlAlias];
|
||||
|
||||
if (isset($this->_rsm->parentAliasMap[$dqlAlias])) {
|
||||
// It's a joined result
|
||||
@ -326,9 +327,9 @@ class ObjectHydrator extends AbstractHydrator
|
||||
// Get a reference to the right element in the result tree.
|
||||
// This element will get the associated element attached.
|
||||
if ($this->_rsm->isMixed && isset($this->_rootAliases[$parent])) {
|
||||
$key = key(reset($this->_resultPointers));
|
||||
$first = reset($this->_resultPointers);
|
||||
// TODO: Exception if $key === null ?
|
||||
$baseElement = $this->_resultPointers[$parent][$key];
|
||||
$baseElement = $this->_resultPointers[$parent][key($first)];
|
||||
} else if (isset($this->_resultPointers[$parent])) {
|
||||
$baseElement = $this->_resultPointers[$parent];
|
||||
} else {
|
||||
|
@ -382,5 +382,5 @@ abstract class AssociationMapping
|
||||
* @param <type> $entity
|
||||
* @param <type> $entityManager
|
||||
*/
|
||||
/*abstract*/ public function load($entity, $em) {}
|
||||
/*abstract public function load($entity, $em) {}*/
|
||||
}
|
@ -24,8 +24,8 @@ namespace Doctrine\ORM;
|
||||
/**
|
||||
* Represents a native SQL query.
|
||||
*
|
||||
* @since 2.0
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
* @since 2.0
|
||||
*/
|
||||
class NativeQuery extends AbstractQuery
|
||||
{
|
||||
@ -55,7 +55,7 @@ class NativeQuery extends AbstractQuery
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public function getSql()
|
||||
@ -67,18 +67,11 @@ class NativeQuery extends AbstractQuery
|
||||
* Executes the query.
|
||||
*
|
||||
* @param array $params
|
||||
* @return Statement The Statement handle.
|
||||
* @return Statement The Statement handle.
|
||||
* @override
|
||||
*/
|
||||
protected function _doExecute(array $params)
|
||||
{
|
||||
// Assignments for Enums
|
||||
//$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);
|
||||
return $this->_em->getConnection()->execute($this->_sql, $this->_prepareParams($params));
|
||||
}
|
||||
}
|
@ -116,7 +116,8 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
|
||||
* @var boolean
|
||||
*/
|
||||
private $_isDirty = false;
|
||||
|
||||
|
||||
/** Whether the collection has already been initialized. */
|
||||
private $_initialized = false;
|
||||
|
||||
/**
|
||||
|
@ -66,19 +66,19 @@ class Query extends AbstractQuery
|
||||
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.
|
||||
*/
|
||||
//protected $_expireQueryCache = false;
|
||||
protected $_expireQueryCache = false;
|
||||
|
||||
/**
|
||||
* @var int Query Cache lifetime.
|
||||
*/
|
||||
//protected $_queryCacheTTL;
|
||||
protected $_queryCacheTTL;
|
||||
|
||||
// End of Caching Stuff
|
||||
|
||||
@ -130,7 +130,7 @@ class Query extends AbstractQuery
|
||||
protected function _doExecute(array $params)
|
||||
{
|
||||
// If there is a CacheDriver associated to cache queries...
|
||||
if ($queryCache = $this->_em->getConfiguration()->getQueryCacheImpl()) {
|
||||
if ($queryCache = $this->getQueryCacheDriver()) {
|
||||
// Calculate hash for dql query.
|
||||
$hash = md5($this->getDql() . 'DOCTRINE_QUERY_CACHE_SALT');
|
||||
$cached = ($this->_expireQueryCache) ? false : $queryCache->fetch($hash);
|
||||
@ -138,10 +138,10 @@ class Query extends AbstractQuery
|
||||
if ($cached === false) {
|
||||
// Cache miss.
|
||||
$executor = $this->parse()->getSqlExecutor();
|
||||
$queryCache->save($hash, $this->_parserResult->toCachedForm(), null);
|
||||
$queryCache->save($hash, serialize($this->_parserResult), null);
|
||||
} else {
|
||||
// Cache hit.
|
||||
$this->_parserResult = CacheHandler::fromCachedQuery($this, $cached);
|
||||
$this->_parserResult = unserialize($cached);
|
||||
$executor = $this->_parserResult->getSqlExecutor();
|
||||
}
|
||||
} else {
|
||||
@ -149,7 +149,7 @@ class Query extends AbstractQuery
|
||||
}
|
||||
|
||||
// Assignments for Enums
|
||||
$this->_setEnumParams($this->_parserResult->getEnumParams());
|
||||
//$this->_setEnumParams($this->_parserResult->getEnumParams());
|
||||
|
||||
// Converting parameters
|
||||
$params = $this->_prepareParams($params);
|
||||
@ -168,32 +168,26 @@ class Query extends AbstractQuery
|
||||
* @param Doctrine_Cache_Interface|null $driver Cache driver
|
||||
* @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;
|
||||
|
||||
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;
|
||||
} else {
|
||||
return $this->_em->getConnection()->getQueryCacheDriver();
|
||||
return $this->_em->getConfiguration()->getQueryCacheImpl();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @return Doctrine_ORM_Query
|
||||
*/
|
||||
/*public function setQueryCacheLifetime($timeToLive)
|
||||
public function setQueryCacheLifetime($timeToLive)
|
||||
{
|
||||
if ($timeToLive !== null) {
|
||||
$timeToLive = (int) $timeToLive;
|
||||
}
|
||||
|
||||
$this->_queryCacheTTL = $timeToLive;
|
||||
|
||||
return $this;
|
||||
}*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the lifetime of resultset cache.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
/*public function getQueryCacheLifetime()
|
||||
public function getQueryCacheLifetime()
|
||||
{
|
||||
return $this->_queryCacheTTL;
|
||||
}*/
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @return Doctrine_ORM_Query
|
||||
*/
|
||||
/*public function setExpireQueryCache($expire = true)
|
||||
public function setExpireQueryCache($expire = true)
|
||||
{
|
||||
$this->_expireQueryCache = (bool) $expire;
|
||||
$this->_expireQueryCache = $expire;
|
||||
|
||||
return $this;
|
||||
}*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves if the query cache is active or not.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
/*public function getExpireQueryCache()
|
||||
public function getExpireQueryCache()
|
||||
{
|
||||
return $this->_expireQueryCache;
|
||||
}*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @override
|
||||
|
@ -44,17 +44,17 @@ abstract class AbstractResult
|
||||
/**
|
||||
* @var array Enum params.
|
||||
*/
|
||||
protected $_enumParams = array();
|
||||
//protected $_enumParams = array();
|
||||
|
||||
/**
|
||||
* Returns the enum parameters.
|
||||
*
|
||||
* @return mixed Enum parameters.
|
||||
*/
|
||||
public function getEnumParams()
|
||||
/*public function getEnumParams()
|
||||
{
|
||||
return $this->_enumParams;
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* Returns this object in serialized format, revertable using fromCached*.
|
||||
|
@ -40,8 +40,6 @@ use Doctrine\ORM\Query\Exec;
|
||||
*/
|
||||
class Parser
|
||||
{
|
||||
const SCALAR_QUERYCOMPONENT_ALIAS = 'dctrn';
|
||||
|
||||
/** Maps registered string function names to class names. */
|
||||
private static $_STRING_FUNCTIONS = array(
|
||||
'concat' => 'Doctrine\ORM\Query\AST\Functions\ConcatFunction',
|
||||
@ -87,14 +85,14 @@ class Parser
|
||||
/**
|
||||
* A scanner object.
|
||||
*
|
||||
* @var Doctrine_ORM_Query_Scanner
|
||||
* @var Doctrine\ORM\Query\Lexer
|
||||
*/
|
||||
private $_lexer;
|
||||
|
||||
/**
|
||||
* The Parser Result object.
|
||||
*
|
||||
* @var Doctrine_ORM_Query_ParserResult
|
||||
* @var Doctrine\ORM\Query\ParserResult
|
||||
*/
|
||||
private $_parserResult;
|
||||
|
||||
@ -131,8 +129,7 @@ class Parser
|
||||
$this->_em = $query->getEntityManager();
|
||||
$this->_lexer = new Lexer($query->getDql());
|
||||
$this->_parserResult = new ParserResult;
|
||||
$this->_parserResult->setEntityManager($this->_em);
|
||||
//$this->free(true);
|
||||
//$this->_parserResult->setEntityManager($this->_em);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -495,7 +492,6 @@ class Parser
|
||||
$identVariable = $this->_lexer->token['value'];
|
||||
$this->match('.');
|
||||
} else {
|
||||
//$identVariable = $this->_parserResult->getDefaultQueryComponentAlias();
|
||||
throw new DoctrineException("Missing alias qualifier.");
|
||||
}
|
||||
$this->match(Lexer::T_IDENTIFIER);
|
||||
@ -571,8 +567,7 @@ class Parser
|
||||
'scalar' => null,
|
||||
);
|
||||
$this->_queryComponents[$deleteClause->getAliasIdentificationVariable()] = $queryComponent;
|
||||
//$this->_parserResult->setDefaultQueryComponentAlias($deleteClause->getAliasIdentificationVariable());
|
||||
//$this->_declaredClasses[$deleteClause->getAliasIdentificationVariable()] = $classMetadata;
|
||||
|
||||
return $deleteClause;
|
||||
}
|
||||
|
||||
@ -611,11 +606,6 @@ class Parser
|
||||
$identificationVariableDeclarations[] = $this->_IdentificationVariableDeclaration();
|
||||
|
||||
$firstRangeDecl = $identificationVariableDeclarations[0]->getRangeVariableDeclaration();
|
||||
/*if ($firstRangeDecl->getAliasIdentificationVariable()) {
|
||||
$this->_parserResult->setDefaultQueryComponentAlias($firstRangeDecl->getAliasIdentificationVariable());
|
||||
} else {
|
||||
$this->_parserResult->setDefaultQueryComponentAlias($firstRangeDecl->getAbstractSchemaName());
|
||||
}*/
|
||||
|
||||
while ($this->_lexer->isNextToken(',')) {
|
||||
$this->match(',');
|
||||
@ -787,7 +777,6 @@ class Parser
|
||||
|
||||
// Verify that the association exists, if yes update the ParserResult
|
||||
// with the new component.
|
||||
//$parentComp = $this->_parserResult->getQueryComponent($joinPathExpression->getIdentificationVariable());
|
||||
$parentClass = $this->_queryComponents[$joinPathExpression->getIdentificationVariable()]['metadata'];
|
||||
$assocField = $joinPathExpression->getAssociationField();
|
||||
if ( ! $parentClass->hasAssociation($assocField)) {
|
||||
|
@ -22,7 +22,8 @@
|
||||
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 Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
@ -31,15 +32,9 @@ namespace Doctrine\ORM\Query;
|
||||
* @since 2.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class ParserResult extends AbstractResult
|
||||
class ParserResult
|
||||
{
|
||||
/**
|
||||
* The EntityManager.
|
||||
*
|
||||
* @var Doctrine_EntityManager
|
||||
*/
|
||||
protected $_em;
|
||||
|
||||
protected $_sqlExecutor;
|
||||
protected $_resultSetMapping;
|
||||
|
||||
public function __construct()
|
||||
@ -67,33 +62,13 @@ class ParserResult extends AbstractResult
|
||||
{
|
||||
$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
|
||||
*/
|
||||
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()
|
||||
{
|
||||
return $this->_data;
|
||||
return $this->_sqlExecutor;
|
||||
}
|
||||
}
|
@ -33,6 +33,8 @@ namespace Doctrine\ORM\Query;
|
||||
*/
|
||||
class QueryResult extends AbstractResult
|
||||
{
|
||||
protected $_data;
|
||||
|
||||
/**
|
||||
* Returns cached resultset.
|
||||
*
|
||||
|
@ -69,12 +69,6 @@ class SqlWalker
|
||||
$this->_em = $query->getEntityManager();
|
||||
$this->_parserResult = $parserResult;
|
||||
$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) {
|
||||
if ($this->_queryComponents[$dqlAlias]['relation'] === null) {
|
||||
$this->_resultSetMapping->addEntityResult($class, $dqlAlias);
|
||||
$this->_resultSetMapping->addEntityResult($class->name, $dqlAlias);
|
||||
} else {
|
||||
$this->_resultSetMapping->addJoinedEntityResult(
|
||||
$class, $dqlAlias,
|
||||
$class->name, $dqlAlias,
|
||||
$this->_queryComponents[$dqlAlias]['parent'],
|
||||
$this->_queryComponents[$dqlAlias]['relation']
|
||||
);
|
||||
@ -691,9 +685,7 @@ class SqlWalker
|
||||
public function walkUpdateItem($updateItem)
|
||||
{
|
||||
$sql = '';
|
||||
$dqlAlias = $updateItem->getIdentificationVariable() ?
|
||||
$updateItem->getIdentificationVariable() :
|
||||
$this->_parserResult->getDefaultQueryComponentAlias();
|
||||
$dqlAlias = $updateItem->getIdentificationVariable();
|
||||
$qComp = $this->_queryComponents[$dqlAlias];
|
||||
|
||||
if ($this->_useSqlTableAliases) {
|
||||
|
@ -82,7 +82,6 @@ class SchemaTool
|
||||
$foreignKeyConstraints = array(); // FK 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) {
|
||||
if (isset($processedClasses[$class->name])) {
|
||||
continue;
|
||||
|
@ -47,7 +47,7 @@ use Doctrine\ORM\EntityManager;
|
||||
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
|
||||
* (registered in the identity map).
|
||||
* In MANAGED state the entity is associated with an EntityManager that manages
|
||||
@ -56,20 +56,20 @@ class UnitOfWork implements PropertyChangedListener
|
||||
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.
|
||||
*/
|
||||
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).
|
||||
* This means its no longer in the identity map.
|
||||
* This means it is no longer in the identity map.
|
||||
*/
|
||||
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
|
||||
* 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().
|
||||
*/
|
||||
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
|
||||
* @todo Rename to isScheduledForInsert().
|
||||
*/
|
||||
@ -696,7 +698,7 @@ class UnitOfWork implements PropertyChangedListener
|
||||
/**
|
||||
* Registers a dirty entity.
|
||||
*
|
||||
* @param Doctrine\ORM\Entity $entity
|
||||
* @param object $entity
|
||||
* @todo Rename to scheduleForUpdate().
|
||||
*/
|
||||
public function registerDirty($entity)
|
||||
@ -788,8 +790,8 @@ class UnitOfWork implements PropertyChangedListener
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @param Doctrine\ORM\Entity $entity
|
||||
* @return unknown
|
||||
* @param object $entity
|
||||
* @return boolean
|
||||
* @todo Rename to isScheduled()
|
||||
*/
|
||||
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()
|
||||
* 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)
|
||||
{
|
||||
@ -834,7 +836,7 @@ class UnitOfWork implements PropertyChangedListener
|
||||
* Note that entities in a hierarchy are registered with the class name of
|
||||
* 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
|
||||
* 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.
|
||||
*
|
||||
* @param object $entity
|
||||
* @return int
|
||||
* @return int The entity state.
|
||||
*/
|
||||
public function getEntityState($entity)
|
||||
{
|
||||
@ -938,8 +940,7 @@ class UnitOfWork implements PropertyChangedListener
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether an entity is registered in the identity map of the
|
||||
* UnitOfWork.
|
||||
* Checks whether an entity is registered in the identity map of this UnitOfWork.
|
||||
*
|
||||
* @param object $entity
|
||||
* @return boolean
|
||||
|
@ -43,7 +43,7 @@ class ConnectionMock extends \Doctrine\DBAL\Connection
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
public function fetchOne($sql)
|
||||
public function fetchOne($statement, array $params = array(), $colnum = 0)
|
||||
{
|
||||
return $this->_fetchOneResult;
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ class AllTests
|
||||
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\SingleTableInheritanceTest');
|
||||
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\ClassTableInheritanceTest');
|
||||
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\DetachedEntityTest');
|
||||
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\QueryCacheTest');
|
||||
|
||||
return $suite;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$this->_em->flush();
|
||||
|
||||
$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', 'name', 'name');
|
||||
|
||||
|
57
tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php
Normal file
57
tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php
Normal 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);
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ class ArrayHydratorTest extends HydrationTest
|
||||
public function testNewHydrationSimpleEntityQuery()
|
||||
{
|
||||
$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__name', 'name');
|
||||
|
||||
@ -51,8 +51,8 @@ class ArrayHydratorTest extends HydrationTest
|
||||
public function testNewHydrationSimpleMultipleRootEntityQuery()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'), 'a');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsArticle', 'a');
|
||||
$rsm->addFieldResult('u', 'u__id', 'id');
|
||||
$rsm->addFieldResult('u', 'u__name', 'name');
|
||||
$rsm->addFieldResult('a', 'a__id', 'id');
|
||||
@ -102,9 +102,9 @@ class ArrayHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryFetchJoin()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
|
||||
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
|
||||
'p',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
|
||||
@ -169,7 +169,7 @@ class ArrayHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryNormalJoin()
|
||||
{
|
||||
$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__status', 'status');
|
||||
$rsm->addScalarResult('sclr0', 'numPhones');
|
||||
@ -214,9 +214,9 @@ class ArrayHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryFetchJoinCustomIndex()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
|
||||
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
|
||||
'p',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
|
||||
@ -289,15 +289,15 @@ class ArrayHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryMultipleFetchJoin()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
|
||||
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
|
||||
'p',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
|
||||
);
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'),
|
||||
'Doctrine\Tests\Models\CMS\CmsArticle',
|
||||
'a',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles')
|
||||
@ -409,21 +409,21 @@ class ArrayHydratorTest extends HydrationTest
|
||||
{
|
||||
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
|
||||
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
|
||||
'p',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
|
||||
);
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'),
|
||||
'Doctrine\Tests\Models\CMS\CmsArticle',
|
||||
'a',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles')
|
||||
);
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsComment'),
|
||||
'Doctrine\Tests\Models\CMS\CmsComment',
|
||||
'c',
|
||||
'a',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle')->getAssociationMapping('comments')
|
||||
@ -566,9 +566,9 @@ class ArrayHydratorTest extends HydrationTest
|
||||
public function testNewHydrationEntityQueryCustomResultSetOrder()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory'), 'c');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\Forum\ForumCategory', 'c');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumBoard'),
|
||||
'Doctrine\Tests\Models\Forum\ForumBoard',
|
||||
'b',
|
||||
'c',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory')->getAssociationMapping('boards')
|
||||
@ -633,7 +633,7 @@ class ArrayHydratorTest extends HydrationTest
|
||||
public function testResultIteration()
|
||||
{
|
||||
$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__name', 'name');
|
||||
|
||||
|
@ -15,7 +15,7 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testNewHydrationSimpleEntityQuery()
|
||||
{
|
||||
$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__name', 'name');
|
||||
|
||||
@ -52,8 +52,8 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testNewHydrationSimpleMultipleRootEntityQuery()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'), 'a');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsArticle', 'a');
|
||||
$rsm->addFieldResult('u', 'u__id', 'id');
|
||||
$rsm->addFieldResult('u', 'u__name', 'name');
|
||||
$rsm->addFieldResult('a', 'a__id', 'id');
|
||||
@ -108,9 +108,9 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryFetchJoin()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
|
||||
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
|
||||
'p',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
|
||||
@ -182,7 +182,7 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryNormalJoin()
|
||||
{
|
||||
$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__status', 'status');
|
||||
$rsm->addScalarResult('sclr0', 'numPhones');
|
||||
@ -229,9 +229,9 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryFetchJoinCustomIndex()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
|
||||
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
|
||||
'p',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
|
||||
@ -308,15 +308,15 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryMultipleFetchJoin()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
|
||||
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
|
||||
'p',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
|
||||
);
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'),
|
||||
'Doctrine\Tests\Models\CMS\CmsArticle',
|
||||
'a',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles')
|
||||
@ -423,21 +423,21 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testNewHydrationMixedQueryMultipleDeepMixedFetchJoin()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), 'u');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
|
||||
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
|
||||
'p',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('phonenumbers')
|
||||
);
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'),
|
||||
'Doctrine\Tests\Models\CMS\CmsArticle',
|
||||
'a',
|
||||
'u',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser')->getAssociationMapping('articles')
|
||||
);
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsComment'),
|
||||
'Doctrine\Tests\Models\CMS\CmsComment',
|
||||
'c',
|
||||
'a',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle')->getAssociationMapping('comments')
|
||||
@ -574,9 +574,9 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testNewHydrationEntityQueryCustomResultSetOrder()
|
||||
{
|
||||
$rsm = new ResultSetMapping;
|
||||
$rsm->addEntityResult($this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory'), 'c');
|
||||
$rsm->addEntityResult('Doctrine\Tests\Models\Forum\ForumCategory', 'c');
|
||||
$rsm->addJoinedEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumBoard'),
|
||||
'Doctrine\Tests\Models\Forum\ForumBoard',
|
||||
'b',
|
||||
'c',
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumCategory')->getAssociationMapping('boards')
|
||||
@ -643,7 +643,7 @@ class ObjectHydratorTest extends HydrationTest
|
||||
public function testResultIteration()
|
||||
{
|
||||
$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__name', 'name');
|
||||
|
||||
|
@ -29,7 +29,7 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
|
||||
public function testBasicResultSetMapping()
|
||||
{
|
||||
$this->_rsm->addEntityResult(
|
||||
$this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'),
|
||||
'Doctrine\Tests\Models\CMS\CmsUser',
|
||||
'u'
|
||||
);
|
||||
$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('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');
|
||||
$this->assertTrue($class instanceof ClassMetadata);
|
||||
$this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $class->name);
|
||||
$this->assertTrue($class == 'Doctrine\Tests\Models\CMS\CmsUser');
|
||||
|
||||
$this->assertEquals('u', $this->_rsm->getEntityAlias('id'));
|
||||
$this->assertEquals('u', $this->_rsm->getEntityAlias('status'));
|
||||
|
@ -15,7 +15,7 @@ class ScalarHydratorTest extends HydrationTest
|
||||
public function testNewHydrationSimpleEntityQuery()
|
||||
{
|
||||
$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__name', 'name');
|
||||
|
||||
|
@ -55,7 +55,7 @@ class SingleScalarHydratorTest extends HydrationTest
|
||||
public function testHydrateSingleScalar($name, $resultSet)
|
||||
{
|
||||
$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__name', 'name');
|
||||
|
||||
|
@ -11,6 +11,8 @@ class OrmFunctionalTestCase extends OrmTestCase
|
||||
{
|
||||
/* The metadata cache shared between all functional tests. */
|
||||
private static $_metadataCacheImpl = null;
|
||||
/* The query cache shared between all functional tests. */
|
||||
private static $_queryCacheImpl = null;
|
||||
|
||||
/** The EntityManager for this testcase. */
|
||||
protected $_em;
|
||||
@ -123,8 +125,12 @@ class OrmFunctionalTestCase extends OrmTestCase
|
||||
if (is_null(self::$_metadataCacheImpl)) {
|
||||
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->setMetadataCacheImpl(self::$_metadataCacheImpl);
|
||||
$config->setQueryCacheImpl(self::$_queryCacheImpl);
|
||||
$eventManager = new \Doctrine\Common\EventManager();
|
||||
$conn = $this->sharedFixture['conn'];
|
||||
return \Doctrine\ORM\EntityManager::create($conn, $config, $eventManager);
|
||||
|
@ -9,6 +9,8 @@ class OrmTestCase extends DoctrineTestCase
|
||||
{
|
||||
/** The metadata cache that is shared between all ORM tests (except functional tests). */
|
||||
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.
|
||||
@ -24,6 +26,7 @@ class OrmTestCase extends DoctrineTestCase
|
||||
{
|
||||
$config = new \Doctrine\ORM\Configuration();
|
||||
$config->setMetadataCacheImpl(self::getSharedMetadataCacheImpl());
|
||||
$config->setQueryCacheImpl(self::getSharedQueryCacheImpl());
|
||||
$eventManager = new \Doctrine\Common\EventManager();
|
||||
if ($conn === null) {
|
||||
$conn = array(
|
||||
@ -43,4 +46,12 @@ class OrmTestCase extends DoctrineTestCase
|
||||
}
|
||||
return self::$_metadataCacheImpl;
|
||||
}
|
||||
|
||||
private static function getSharedQueryCacheImpl()
|
||||
{
|
||||
if (self::$_queryCacheImpl === null) {
|
||||
self::$_queryCacheImpl = new \Doctrine\ORM\Cache\ArrayCache;
|
||||
}
|
||||
return self::$_queryCacheImpl;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user