From e2869fcf0a4f64132b989fd6223e3bbd3e7c78d3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 22 Jan 2009 18:48:52 +0100 Subject: Move NoticeWrapper to a generalized ArrayWrapper class We need to use array wrappers for other kinds of queries, so I generalized the NoticeWrapper and tested it in the Notice class. --- classes/Notice.php | 6 ++--- classes/NoticeWrapper.php | 62 ----------------------------------------------- 2 files changed, 3 insertions(+), 65 deletions(-) delete mode 100644 classes/NoticeWrapper.php (limited to 'classes') diff --git a/classes/Notice.php b/classes/Notice.php index 5fa078205..de7540705 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -443,7 +443,7 @@ class Notice extends Memcached_DataObject # On a cache hit, return a DB-object-like wrapper if ($notices !== false) { - $wrapper = new NoticeWrapper(array_slice($notices, $offset, $limit)); + $wrapper = new ArrayWrapper(array_slice($notices, $offset, $limit)); return $wrapper; } @@ -483,7 +483,7 @@ class Notice extends Memcached_DataObject # return a wrapper of the array for use now - return new NoticeWrapper(array_slice($notices, $offset, $limit)); + return new ArrayWrapper(array_slice($notices, $offset, $limit)); } } @@ -514,7 +514,7 @@ class Notice extends Memcached_DataObject # return a wrapper of the array for use now - $wrapper = new NoticeWrapper(array_slice($notices, $offset, $limit)); + $wrapper = new ArrayWrapper(array_slice($notices, $offset, $limit)); return $wrapper; } diff --git a/classes/NoticeWrapper.php b/classes/NoticeWrapper.php deleted file mode 100644 index 233340ccd..000000000 --- a/classes/NoticeWrapper.php +++ /dev/null @@ -1,62 +0,0 @@ -. - */ - -if (!defined('LACONICA')) { exit(1); } - -require_once(INSTALLDIR.'/classes/Notice.php'); - -class NoticeWrapper extends Notice -{ - - public $id; // int(4) primary_key not_null - public $profile_id; // int(4) not_null - public $uri; // varchar(255) unique_key - public $content; // varchar(140) - public $rendered; // text() - public $url; // varchar(255) - public $created; // datetime() not_null - public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP - public $reply_to; // int(4) - public $is_local; // tinyint(1) - public $source; // varchar(32) - - var $notices = null; - var $i = -1; - - function __construct($arr) - { - $this->notices = $arr; - } - - function fetch() - { - static $fields = array('id', 'profile_id', 'uri', 'content', 'rendered', - 'url', 'created', 'modified', 'reply_to', 'is_local', 'source'); - $this->i++; - if ($this->i >= count($this->notices)) { - return false; - } else { - $n = $this->notices[$this->i]; - foreach ($fields as $f) { - $this->$f = $n->$f; - } - return true; - } - } -} \ No newline at end of file -- cgit v1.2.3-54-g00ecf From 8c79646e53b201434d5c8f36e85b2c9cb1026f0f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 22 Jan 2009 19:13:26 +0100 Subject: Add a method the memcached_object that lets it cache query results --- classes/Memcached_DataObject.php | 49 ++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 10 deletions(-) (limited to 'classes') diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index b9f599dbc..c670e99c8 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 $cls; + } + $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 ArrayWrapper($cached); + } } -- cgit v1.2.3-54-g00ecf From dde1c00ce727b311c399271d02cb077f6725edb5 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 22 Jan 2009 19:54:05 +0000 Subject: Return $inst, not $cls, if no cache in Memcached_DataObject --- classes/Memcached_DataObject.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index c670e99c8..3ec761389 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -208,7 +208,7 @@ class Memcached_DataObject extends DB_DataObject if (!$c) { $inst = new $cls(); $inst->query($qry); - return $cls; + return $inst; } $key_part = common_keyize($cls).':'.md5($qry); $ckey = common_cache_key($key_part); -- cgit v1.2.3-54-g00ecf From 0642b6aa634bc37f86fd54441a3c8358e8da1284 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 22 Jan 2009 20:16:19 +0000 Subject: Fixed bug in caching of queries --- classes/Memcached_DataObject.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index 3ec761389..97e1ed736 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -228,6 +228,6 @@ class Memcached_DataObject extends DB_DataObject } $inst->free(); $c->set($ckey, $cached, MEMCACHE_COMPRESSED, $expiry); - return ArrayWrapper($cached); + return new ArrayWrapper($cached); } } -- cgit v1.2.3-54-g00ecf