summaryrefslogtreecommitdiff
path: root/classes/Memcached_DataObject.php
diff options
context:
space:
mode:
authorRobin Millette <millette@plantard.controlezvous.ca>2009-01-22 20:33:34 +0000
committerRobin Millette <millette@plantard.controlezvous.ca>2009-01-22 20:33:34 +0000
commit9e9b8349a2d32ae664a5b000ef34a7bb13a039f5 (patch)
tree029c69c1c9acf04fbe91994896d971cd25e7a48e /classes/Memcached_DataObject.php
parent5a84d7f975c2ae356d1fbd88757414ecb385ff5e (diff)
parent248fd763bde70537e5e9a14db435c27a52849c9a (diff)
Merge branch 'master' of /var/www/trunk
Diffstat (limited to 'classes/Memcached_DataObject.php')
-rw-r--r--classes/Memcached_DataObject.php49
1 files changed, 39 insertions, 10 deletions
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
index b9f599dbc..97e1ed736 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -21,7 +21,7 @@ if (!defined('LACONICA')) { exit(1); }
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Memcached_DataObject extends DB_DataObject
+class Memcached_DataObject extends DB_DataObject
{
function &staticGet($cls, $k, $v=null)
{
@@ -69,7 +69,7 @@ class Memcached_DataObject extends DB_DataObject
$result = parent::insert();
return $result;
}
-
+
function update($orig=null)
{
if (is_object($orig) && $orig instanceof Memcached_DataObject) {
@@ -81,21 +81,21 @@ class Memcached_DataObject extends DB_DataObject
}
return $result;
}
-
+
function delete()
{
$this->decache(); # while we still have the values!
return parent::delete();
}
-
+
static function memcache() {
return common_memcache();
}
-
+
static function cacheKey($cls, $k, $v) {
return common_cache_key(strtolower($cls).':'.$k.':'.$v);
}
-
+
static function getcached($cls, $k, $v) {
$c = Memcached_DataObject::memcache();
if (!$c) {
@@ -114,7 +114,7 @@ class Memcached_DataObject extends DB_DataObject
}
return $_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"];
}
-
+
function encache()
{
$c = $this->memcache();
@@ -122,7 +122,7 @@ class Memcached_DataObject extends DB_DataObject
return false;
} else {
$pkey = array();
- $pval = array();
+ $pval = array();
$types = $this->keyTypes();
ksort($types);
foreach ($types as $key => $type) {
@@ -139,7 +139,7 @@ class Memcached_DataObject extends DB_DataObject
$c->set($this->cacheKey($this->tableName(), $pkeys, $pvals), $this);
}
}
-
+
function decache()
{
$c = $this->memcache();
@@ -147,7 +147,7 @@ class Memcached_DataObject extends DB_DataObject
return false;
} else {
$pkey = array();
- $pval = array();
+ $pval = array();
$types = $this->keyTypes();
ksort($types);
foreach ($types as $key => $type) {
@@ -201,4 +201,33 @@ class Memcached_DataObject extends DB_DataObject
}
return $search_engine;
}
+
+ static function cachedQuery($cls, $qry, $expiry=3600)
+ {
+ $c = Memcached_DataObject::memcache();
+ if (!$c) {
+ $inst = new $cls();
+ $inst->query($qry);
+ return $inst;
+ }
+ $key_part = common_keyize($cls).':'.md5($qry);
+ $ckey = common_cache_key($key_part);
+ $stored = $c->get($ckey);
+ if ($stored) {
+ return new ArrayWrapper($stored);
+ }
+
+ $inst = new $cls();
+ $result = $inst->query($qry);
+ if (!$result) {
+ return $inst;
+ }
+ $cached = array();
+ while ($inst->fetch()) {
+ $cached[] = clone($inst);
+ }
+ $inst->free();
+ $c->set($ckey, $cached, MEMCACHE_COMPRESSED, $expiry);
+ return new ArrayWrapper($cached);
+ }
}