[Beeframework-svn] SF.net SVN: beeframework:[284] trunk/framework/Bee
Brought to you by:
b_hartmann,
m_plomer
From: <m_p...@us...> - 2015-02-16 19:34:33
|
Revision: 284 http://sourceforge.net/p/beeframework/code/284 Author: m_plomer Date: 2015-02-16 19:34:26 +0000 (Mon, 16 Feb 2015) Log Message: ----------- - added some traits Modified Paths: -------------- trunk/framework/Bee/Cache/Manager.php trunk/framework/Bee/Persistence/Doctrine2/GenericDaoBase.php Modified: trunk/framework/Bee/Cache/Manager.php =================================================================== --- trunk/framework/Bee/Cache/Manager.php 2015-02-16 08:43:54 UTC (rev 283) +++ trunk/framework/Bee/Cache/Manager.php 2015-02-16 19:34:26 UTC (rev 284) @@ -218,6 +218,81 @@ return $data; } + /** + * Enter description here... + * + * @param string $key + * @param callback $contentCreator + * @param int $lastModified + * @param bool $returnInfoArray + * @return mixed + */ + public static function &retrieveCachableClosure($key, $contentCreator, $lastModified = 0, $returnInfoArray = false) { + if(is_null(self::$provider)) { + // no cache provider found, no caching or unsupported cache type installed + $data =& $contentCreator(); + $result = $returnInfoArray ? array(self::INFO_NO_CACHE_KEY => true, self::INFO_CACHE_HIT_KEY => false, self::INFO_IN_CACHE_SINCE_KEY => false, self::INFO_DATA_KEY => &$data) : $data; + return $result; + } + + // caching supported, check if in cache and not stale + $key = self::getQualifiedKey($key); + $ctimeKey = $key . self::CTIME_KEY_SUFFIX; + + try { + $inCacheSince = self::$provider->retrieve($ctimeKey); + $inCacheSince = $inCacheSince === false ? -1 : $inCacheSince; + + } catch (Exception $e) { + $inCacheSince = -1; + } + + $mtime = $lastModified; + + if($inCacheSince < $mtime) { + // @todo: provide logging + // resource not found in cache or stale, re-create and store in cache + + $etime = 0; + $data =& $contentCreator($etime); + + self::$provider->store($ctimeKey, $mtime, $etime); + self::$provider->store($key, $data, $etime); + + $cacheHit = false; + } else { + // @todo: provide logging + // resource in cache is current, fetch from cache + try { + $data = self::$provider->retrieve($key); + $cacheHit = true; + + } catch (Exception $e) { + // ACHTUNG!!!!!!!! + // ACHTUNG!!!!!!!! + // ACHTUNG!!!!!!!! + // ACHTUNG!!!!!!!! + // + // hier habe ich einfach ein stück code aus dem if ... zweig dupliziert + // + // @todo: provide logging + // resource not found in cache or stale, re-create and store in cache + $etime = 0; + $data =& $contentCreator($etime); + + self::$provider->store($ctimeKey, $mtime, $etime); + self::$provider->store($key, $data, $etime); + + $cacheHit = false; + } + } + + if($returnInfoArray) { + $data = array(self::INFO_CACHE_HIT_KEY => $cacheHit, self::INFO_IN_CACHE_SINCE_KEY => $inCacheSince, self::INFO_DATA_KEY => &$data); + } + return $data; + } + public static function retrieve($key) { return self::$provider->retrieve(self::getQualifiedKey($key)); } Modified: trunk/framework/Bee/Persistence/Doctrine2/GenericDaoBase.php =================================================================== --- trunk/framework/Bee/Persistence/Doctrine2/GenericDaoBase.php 2015-02-16 08:43:54 UTC (rev 283) +++ trunk/framework/Bee/Persistence/Doctrine2/GenericDaoBase.php 2015-02-16 19:34:26 UTC (rev 284) @@ -163,15 +163,17 @@ return parent::executeListQuery($queryBuilder, $restrictionHolder, $orderAndLimitHolder, $defaultOrderMapping ?: $this->getDefaultOrderMapping(), $hydrationMode ?: $this->getHydrationMode()); } - /** - * @return QueryBuilder - */ - protected function getBaseQuery() { + /** + * @param null $entity + * @return QueryBuilder + */ + protected function getBaseQuery($entity = null) { $baseEntityAlias = $this->getEntityAlias(); + $entity = $entity ?: $this->getEntity(); // $indexBy = count($this->getIdFieldName()) > 1 ? null : $baseEntityAlias . '.' . $this->getIdFieldName(); // return $this->getEntityManager()->createQueryBuilder()->select($baseEntityAlias) // ->from($this->getEntity(), $baseEntityAlias, $indexBy); - $qb = $this->getEntityManager()->createQueryBuilder()->select($baseEntityAlias)->from($this->getEntity(), $baseEntityAlias, $this->getIndexBy()); + $qb = $this->getEntityManager()->createQueryBuilder()->select($baseEntityAlias)->from($entity, $baseEntityAlias, $this->getIndexBy()); $this->addJoinsToBaseQuery($qb); $this->addRestrictionsToBaseQuery($qb); return $qb; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |