summaryrefslogtreecommitdiff
path: root/framework/Caching
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Caching')
-rw-r--r--framework/Caching/ICache.php64
-rw-r--r--framework/Caching/ICacheDependency.php32
-rw-r--r--framework/Caching/TAPCCache.php1
-rw-r--r--framework/Caching/TApplicationStateCacheDependency.php2
-rw-r--r--framework/Caching/TCache.php16
-rw-r--r--framework/Caching/TCacheDependency.php2
-rw-r--r--framework/Caching/TCacheDependencyList.php1
-rw-r--r--framework/Caching/TDbCache.php26
-rw-r--r--framework/Caching/TDirectoryCacheDependency.php3
-rw-r--r--framework/Caching/TEACache.php2
-rw-r--r--framework/Caching/TGlobalStateCacheDependency.php1
-rw-r--r--framework/Caching/TMemCache.php7
-rw-r--r--framework/Caching/TSqliteCache.php5
-rw-r--r--framework/Caching/TXCache.php1
14 files changed, 141 insertions, 22 deletions
diff --git a/framework/Caching/ICache.php b/framework/Caching/ICache.php
new file mode 100644
index 00000000..f2a13f03
--- /dev/null
+++ b/framework/Caching/ICache.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Core interfaces essential for TApplication class.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2014 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @package Prado\Caching
+ */
+
+namespace Prado\Caching;
+
+/**
+ * ICache interface.
+ *
+ * This interface must be implemented by cache managers.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package Prado\Caching
+ * @since 3.0
+ */
+interface ICache
+{
+ /**
+ * Retrieves a value from cache with a specified key.
+ * @param string a key identifying the cached value
+ * @return mixed the value stored in cache, false if the value is not in the cache or expired.
+ */
+ public function get($id);
+ /**
+ * Stores a value identified by a key into cache.
+ * If the cache already contains such a key, the existing value and
+ * expiration time will be replaced with the new ones.
+ *
+ * @param string the key identifying the value to be cached
+ * @param mixed the value to be cached
+ * @param integer the number of seconds in which the cached value will expire. 0 means never expire.
+ * @param ICacheDependency dependency of the cached item. If the dependency changes, the item is labelled invalid.
+ * @return boolean true if the value is successfully stored into cache, false otherwise
+ */
+ public function set($id,$value,$expire=0,$dependency=null);
+ /**
+ * Stores a value identified by a key into cache if the cache does not contain this key.
+ * Nothing will be done if the cache already contains the key.
+ * @param string the key identifying the value to be cached
+ * @param mixed the value to be cached
+ * @param integer the number of seconds in which the cached value will expire. 0 means never expire.
+ * @param ICacheDependency dependency of the cached item. If the dependency changes, the item is labelled invalid.
+ * @return boolean true if the value is successfully stored into cache, false otherwise
+ */
+ public function add($id,$value,$expire=0,$dependency=null);
+ /**
+ * Deletes a value with the specified key from cache
+ * @param string the key of the value to be deleted
+ * @return boolean if no error happens during deletion
+ */
+ public function delete($id);
+ /**
+ * Deletes all values from cache.
+ * Be careful of performing this operation if the cache is shared by multiple applications.
+ */
+ public function flush();
+} \ No newline at end of file
diff --git a/framework/Caching/ICacheDependency.php b/framework/Caching/ICacheDependency.php
new file mode 100644
index 00000000..4a81b714
--- /dev/null
+++ b/framework/Caching/ICacheDependency.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Core interfaces essential for TApplication class.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2014 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @package Prado\Caching
+ */
+
+namespace Prado\Caching;
+
+/**
+ * ICacheDependency interface.
+ *
+ * This interface must be implemented by classes meant to be used as
+ * cache dependencies.
+ *
+ * Classes implementing this interface must support serialization and unserialization.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package Prado\Caching
+ * @since 3.0
+ */
+interface ICacheDependency
+{
+ /**
+ * @return boolean whether the dependency has changed. Defaults to false.
+ */
+ public function getHasChanged();
+} \ No newline at end of file
diff --git a/framework/Caching/TAPCCache.php b/framework/Caching/TAPCCache.php
index 53f1069e..77c114d8 100644
--- a/framework/Caching/TAPCCache.php
+++ b/framework/Caching/TAPCCache.php
@@ -10,6 +10,7 @@
*/
namespace Prado\Caching;
+use Prado\Exceptions\TConfigurationException;
/**
* TAPCCache class
diff --git a/framework/Caching/TApplicationStateCacheDependency.php b/framework/Caching/TApplicationStateCacheDependency.php
index ee36ba54..db7c38d3 100644
--- a/framework/Caching/TApplicationStateCacheDependency.php
+++ b/framework/Caching/TApplicationStateCacheDependency.php
@@ -10,6 +10,8 @@
*/
namespace Prado\Caching;
+use Prado\Prado;
+use Prado\TApplicationMode;
/**
* TApplicationStateCacheDependency class.
diff --git a/framework/Caching/TCache.php b/framework/Caching/TCache.php
index 88a391c9..a243c236 100644
--- a/framework/Caching/TCache.php
+++ b/framework/Caching/TCache.php
@@ -10,7 +10,9 @@
*/
namespace Prado\Caching;
-Prado::using('System.Collections.TList');
+use Prado\Exceptions\TConfigurationException;
+use Prado\Exceptions\TNotSupportedException;
+use Prado\TPropertyValue;
/**
* TCache class
@@ -38,14 +40,14 @@ Prado::using('System.Collections.TList');
* - {@link deleteValue}
* and optionally {@link flush}
*
- * Since version 3.1.2, TCache implements the ArrayAccess interface such that
+ * Since version 3.1.2, TCache implements the \ArrayAccess interface such that
* the cache acts as an array.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @package Prado\Caching
* @since 3.0
*/
-abstract class TCache extends TModule implements ICache, ArrayAccess
+abstract class TCache extends \Prado\TModule implements ICache, \ArrayAccess
{
private $_prefix=null;
private $_primary=true;
@@ -241,7 +243,7 @@ abstract class TCache extends TModule implements ICache, ArrayAccess
/**
* Returns whether there is a cache entry with a specified key.
- * This method is required by the interface ArrayAccess.
+ * This method is required by the interface \ArrayAccess.
* @param string a key identifying the cached value
* @return boolean
*/
@@ -252,7 +254,7 @@ abstract class TCache extends TModule implements ICache, ArrayAccess
/**
* Retrieves the value from cache with a specified key.
- * This method is required by the interface ArrayAccess.
+ * This method is required by the interface \ArrayAccess.
* @param string a key identifying the cached value
* @return mixed the value stored in cache, false if the value is not in the cache or expired.
*/
@@ -265,7 +267,7 @@ abstract class TCache extends TModule implements ICache, ArrayAccess
* Stores the value identified by a key into cache.
* If the cache already contains such a key, the existing value will be
* replaced with the new ones. To add expiration and dependencies, use the set() method.
- * This method is required by the interface ArrayAccess.
+ * This method is required by the interface \ArrayAccess.
* @param string the key identifying the value to be cached
* @param mixed the value to be cached
*/
@@ -276,7 +278,7 @@ abstract class TCache extends TModule implements ICache, ArrayAccess
/**
* Deletes the value with the specified key from cache
- * This method is required by the interface ArrayAccess.
+ * This method is required by the interface \ArrayAccess.
* @param string the key of the value to be deleted
* @return boolean if no error happens during deletion
*/
diff --git a/framework/Caching/TCacheDependency.php b/framework/Caching/TCacheDependency.php
index 7b2b1261..e10793f6 100644
--- a/framework/Caching/TCacheDependency.php
+++ b/framework/Caching/TCacheDependency.php
@@ -39,6 +39,6 @@ namespace Prado\Caching;
* @package Prado\Caching
* @since 3.1.0
*/
-abstract class TCacheDependency extends TComponent implements ICacheDependency
+abstract class TCacheDependency extends \Prado\TComponent implements ICacheDependency
{
} \ No newline at end of file
diff --git a/framework/Caching/TCacheDependencyList.php b/framework/Caching/TCacheDependencyList.php
index 6e43d428..a093825a 100644
--- a/framework/Caching/TCacheDependencyList.php
+++ b/framework/Caching/TCacheDependencyList.php
@@ -10,6 +10,7 @@
*/
namespace Prado\Caching;
+use Prado\Exceptions\TInvalidDataTypeException;
/**
* TCacheDependencyList class.
diff --git a/framework/Caching/TDbCache.php b/framework/Caching/TDbCache.php
index 968fac30..cee1b193 100644
--- a/framework/Caching/TDbCache.php
+++ b/framework/Caching/TDbCache.php
@@ -10,7 +10,11 @@
*/
namespace Prado\Caching;
-Prado::using('System.Data.TDbConnection');
+use Prado\Prado;
+use Prado\Data\TDataSourceConfig;
+use Prado\Data\TDbConnection;
+use Prado\Exceptions\TConfigurationException;
+use Prado\TPropertyValue;
/**
* TDbCache class
@@ -201,7 +205,7 @@ class TDbCache extends TCache
$this -> getApplication() -> setGlobalState($key, time());
}
}
- catch(Exception $e)
+ catch(\Exception $e)
{
// DB table not exists
if($this->_autoCreate)
@@ -464,7 +468,7 @@ class TDbCache extends TCache
$command=$this->getDbConnection()->createCommand($sql);
return unserialize($command->queryScalar());
}
- catch(Exception $e)
+ catch(\Exception $e)
{
$this->initializeCache(true);
return unserialize($command->queryScalar());
@@ -503,12 +507,12 @@ class TDbCache extends TCache
try
{
$command=$this->getDbConnection()->createCommand($sql);
- $command->bindValue(':key',$key,PDO::PARAM_STR);
- $command->bindValue(':value',serialize($value),PDO::PARAM_LOB);
+ $command->bindValue(':key',$key,\PDO::PARAM_STR);
+ $command->bindValue(':value',serialize($value),\PDO::PARAM_LOB);
$command->execute();
return true;
}
- catch(Exception $e)
+ catch(\Exception $e)
{
try
{
@@ -516,7 +520,7 @@ class TDbCache extends TCache
$command->execute();
return true;
}
- catch(Exception $e)
+ catch(\Exception $e)
{
return false;
}
@@ -535,11 +539,11 @@ class TDbCache extends TCache
try
{
$command=$this->getDbConnection()->createCommand("DELETE FROM {$this->_cacheTable} WHERE itemkey=:key");
- $command->bindValue(':key',$key,PDO::PARAM_STR);
+ $command->bindValue(':key',$key,\PDO::PARAM_STR);
$command->execute();
return true;
}
- catch(Exception $e)
+ catch(\Exception $e)
{
$this->initializeCache(true);
$command->execute();
@@ -559,7 +563,7 @@ class TDbCache extends TCache
$command = $this->getDbConnection()->createCommand("DELETE FROM {$this->_cacheTable}");
$command->execute();
}
- catch(Exception $e)
+ catch(\Exception $e)
{
try
{
@@ -567,7 +571,7 @@ class TDbCache extends TCache
$command->execute();
return true;
}
- catch(Exception $e)
+ catch(\Exception $e)
{
return false;
}
diff --git a/framework/Caching/TDirectoryCacheDependency.php b/framework/Caching/TDirectoryCacheDependency.php
index d78aa87a..28924f12 100644
--- a/framework/Caching/TDirectoryCacheDependency.php
+++ b/framework/Caching/TDirectoryCacheDependency.php
@@ -10,6 +10,9 @@
*/
namespace Prado\Caching;
+use Prado\Exceptions\TInvalidDataValueException;
+use Prado\Exceptions\TIOException;
+use Prado\TPropertyValue;
/**
* TDirectoryCacheDependency class.
diff --git a/framework/Caching/TEACache.php b/framework/Caching/TEACache.php
index 073b7f79..29dabffa 100644
--- a/framework/Caching/TEACache.php
+++ b/framework/Caching/TEACache.php
@@ -1 +1 @@
-<?php /** * TEACache class file * * @author Dario rigolin <drigolin@e-portaltech.it> * @link http://www.pradosoft.com/ * @copyright Copyright &copy; 2005-2014 PradoSoft * @license http://www.pradosoft.com/license/ * @package Prado\Caching */ namespace Prado\Caching; /** * TEACache class * * TEACache implements a cache application module based on {@link http://eaccelerator.net/ eAccelerator}. * * By definition, cache does not ensure the existence of a value * even if it never expires. Cache is not meant to be an persistent storage. * * To use this module, the eAccelerator PHP extension must be loaded and enabled * * Please note that as of v0.9.6, eAccelerator no longer supports data caching. * This means if you still want to use this component, your eAccelerator should be of 0.9.5.x or lower version. * * Some usage examples of TEACache are as follows, * <code> * $cache=new TEACache; // TEACache may also be loaded as a Prado application module * $cache->init(null); * $cache->add('object',$object); * $object2=$cache->get('object'); * </code> * * If loaded, TEACache will register itself with {@link TApplication} as the * cache module. It can be accessed via {@link TApplication::getCache()}. * * TEACache may be configured in application configuration file as follows * <code> * <module id="cache" class="System.Caching.TEACache" /> * </code> * * @author Dario Rigolin <drigolin@e-portaltech.it> * @package Prado\Caching * @since 3.2.2 */ class TEACache extends TCache { /** * Initializes this module. * This method is required by the IModule interface. * @param TXmlElement configuration for this module, can be null * @throws TConfigurationException if eaccelerator extension is not installed or not started, check your php.ini */ public function init($config) { if(!function_exists('eaccelerator_get')) throw new TConfigurationException('eacceleratorcache_extension_required'); parent::init($config); } /** * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string a unique key identifying the cached value * @return string the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { $value = eaccelerator_get($key); return ($value === null) ? false : $value; } /** * Stores a value identified by a key in cache. * This is the implementation of the method declared in the parent class. * * @param string the key identifying the value to be cached * @param string the value to be cached * @param integer the number of seconds in which the cached value will expire. 0 means never expire. * @return boolean true if the value is successfully stored into cache, false otherwise */ protected function setValue($key,$value,$expire) { return eaccelerator_put($key,$value,$expire); } /** * Stores a value identified by a key into cache if the cache does not contain this key. * This is the implementation of the method declared in the parent class. * * @param string the key identifying the value to be cached * @param string the value to be cached * @param integer the number of seconds in which the cached value will expire. 0 means never expire. * @return boolean true if the value is successfully stored into cache, false otherwise */ protected function addValue($key,$value,$expire) { return (null === eaccelerator_get($key)) ? $this->setValue($key,$value,$expire) : false; } /** * Deletes a value with the specified key from cache * This is the implementation of the method declared in the parent class. * @param string the key of the value to be deleted * @return boolean if no error happens during deletion */ protected function deleteValue($key) { return eaccelerator_rm($key); } /** * Deletes all values from cache. * Be careful of performing this operation if the cache is shared by multiple applications. */ public function flush() { // first, remove expired content from cache eaccelerator_gc(); // now, remove leftover cache-keys $keys = eaccelerator_list_keys(); foreach($keys as $key) $this->deleteValue(substr($key['name'], 1)); return true; } } \ No newline at end of file
+<?php /** * TEACache class file * * @author Dario rigolin <drigolin@e-portaltech.it> * @link http://www.pradosoft.com/ * @copyright Copyright &copy; 2005-2014 PradoSoft * @license http://www.pradosoft.com/license/ * @package Prado\Caching */ namespace Prado\Caching; use Prado\Exceptions\TConfigurationException; /** * TEACache class * * TEACache implements a cache application module based on {@link http://eaccelerator.net/ eAccelerator}. * * By definition, cache does not ensure the existence of a value * even if it never expires. Cache is not meant to be an persistent storage. * * To use this module, the eAccelerator PHP extension must be loaded and enabled * * Please note that as of v0.9.6, eAccelerator no longer supports data caching. * This means if you still want to use this component, your eAccelerator should be of 0.9.5.x or lower version. * * Some usage examples of TEACache are as follows, * <code> * $cache=new TEACache; // TEACache may also be loaded as a Prado application module * $cache->init(null); * $cache->add('object',$object); * $object2=$cache->get('object'); * </code> * * If loaded, TEACache will register itself with {@link TApplication} as the * cache module. It can be accessed via {@link TApplication::getCache()}. * * TEACache may be configured in application configuration file as follows * <code> * <module id="cache" class="System.Caching.TEACache" /> * </code> * * @author Dario Rigolin <drigolin@e-portaltech.it> * @package Prado\Caching * @since 3.2.2 */ class TEACache extends TCache { /** * Initializes this module. * This method is required by the IModule interface. * @param TXmlElement configuration for this module, can be null * @throws TConfigurationException if eaccelerator extension is not installed or not started, check your php.ini */ public function init($config) { if(!function_exists('eaccelerator_get')) throw new TConfigurationException('eacceleratorcache_extension_required'); parent::init($config); } /** * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string a unique key identifying the cached value * @return string the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { $value = eaccelerator_get($key); return ($value === null) ? false : $value; } /** * Stores a value identified by a key in cache. * This is the implementation of the method declared in the parent class. * * @param string the key identifying the value to be cached * @param string the value to be cached * @param integer the number of seconds in which the cached value will expire. 0 means never expire. * @return boolean true if the value is successfully stored into cache, false otherwise */ protected function setValue($key,$value,$expire) { return eaccelerator_put($key,$value,$expire); } /** * Stores a value identified by a key into cache if the cache does not contain this key. * This is the implementation of the method declared in the parent class. * * @param string the key identifying the value to be cached * @param string the value to be cached * @param integer the number of seconds in which the cached value will expire. 0 means never expire. * @return boolean true if the value is successfully stored into cache, false otherwise */ protected function addValue($key,$value,$expire) { return (null === eaccelerator_get($key)) ? $this->setValue($key,$value,$expire) : false; } /** * Deletes a value with the specified key from cache * This is the implementation of the method declared in the parent class. * @param string the key of the value to be deleted * @return boolean if no error happens during deletion */ protected function deleteValue($key) { return eaccelerator_rm($key); } /** * Deletes all values from cache. * Be careful of performing this operation if the cache is shared by multiple applications. */ public function flush() { // first, remove expired content from cache eaccelerator_gc(); // now, remove leftover cache-keys $keys = eaccelerator_list_keys(); foreach($keys as $key) $this->deleteValue(substr($key['name'], 1)); return true; } } \ No newline at end of file
diff --git a/framework/Caching/TGlobalStateCacheDependency.php b/framework/Caching/TGlobalStateCacheDependency.php
index b10b5e01..0c622445 100644
--- a/framework/Caching/TGlobalStateCacheDependency.php
+++ b/framework/Caching/TGlobalStateCacheDependency.php
@@ -10,6 +10,7 @@
*/
namespace Prado\Caching;
+use Prado\Prado;
/**
* TGlobalStateCacheDependency class.
diff --git a/framework/Caching/TMemCache.php b/framework/Caching/TMemCache.php
index 8c92bab1..659d9fd5 100644
--- a/framework/Caching/TMemCache.php
+++ b/framework/Caching/TMemCache.php
@@ -11,6 +11,11 @@
*/
namespace Prado\Caching;
+use Prado\Exceptions\TConfigurationException;
+use Prado\Exceptions\TInvalidOperationException;
+use Prado\Prado;
+use Prado\TPropertyValue;
+use Prado\Xml\TXmlElement;
/**
* TMemCache class
@@ -159,7 +164,7 @@ class TMemCache extends TCache
{
if(!extension_loaded('memcache'))
throw new TConfigurationException('memcache_extension_required');
- $this->_cache=new Memcache;
+ $this->_cache=new \Memcache;
$this->loadConfig($config);
if(count($this->_servers))
{
diff --git a/framework/Caching/TSqliteCache.php b/framework/Caching/TSqliteCache.php
index 12d3e225..348a37f0 100644
--- a/framework/Caching/TSqliteCache.php
+++ b/framework/Caching/TSqliteCache.php
@@ -10,6 +10,9 @@
*/
namespace Prado\Caching;
+use Prado\Exceptions\TConfigurationException;
+use Prado\Exceptions\TInvalidOperationException;
+use Prado\Prado;
/**
* TSqliteCache class
@@ -121,7 +124,7 @@ class TSqliteCache extends TCache
if($this->_file===null)
$this->_file=$this->getApplication()->getRuntimePath().'/sqlite.cache';
$error='';
- if(($this->_db=new SQLiteDatabase($this->_file,0666,$error))===false)
+ if(($this->_db=new \SQLiteDatabase($this->_file,0666,$error))===false)
throw new TConfigurationException('sqlitecache_connection_failed',$error);
if(@$this->_db->query('DELETE FROM '.self::CACHE_TABLE.' WHERE expire<>0 AND expire<'.time())===false)
{
diff --git a/framework/Caching/TXCache.php b/framework/Caching/TXCache.php
index 96af68f5..6f3cf815 100644
--- a/framework/Caching/TXCache.php
+++ b/framework/Caching/TXCache.php
@@ -10,6 +10,7 @@
*/
namespace Prado\Caching;
+use Prado\Exceptions\TConfigurationException;
/**
* TXCache class