[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.
|