3 * Laconica - a distributed open-source microblogging tool
4 * Copyright (C) 2008, Controlez-Vous, Inc.
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
16 * You should have received a copy of the GNU Affero General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 if (!defined('LACONICA')) { exit(1); }
22 require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
24 class Memcached_DataObject extends DB_DataObject
26 static function &staticGet($cls, $k, $v=NULL) {
27 $i = $this->getcached($cls, $k, $v);
31 $i = DB_DataObject::staticGet($cls, $k, $v);
40 $result = parent::insert();
47 function update($orig=NULL) {
48 if (!is_null($orig)) {
49 $orig->decache(); # might be different keys
51 $result = parent::update($orig);
58 $this->decache(); # while we still have the values!
59 return parent::delete();
62 static function memcache() {
63 if (!common_config('memcached', 'enabled')) {
66 $cache = new Memcache();
67 $res = $cache->connect(common_config('memcached', 'server'),
68 common_config('memcached', 'port'));
69 return ($res) ? $cache : NULL;
73 static function cacheKey($cls, $k, $v) {
74 return common_cache_key(strtolower($cls) . ':' .
79 static function getcached($cls, $k, $v) {
80 $c = Memcached_DataObject::memcache();
84 return $c->get(Memcached_DataObject::cacheKey($cls, $k, $v));
89 global $_DB_DATAOBJECT;
90 if (!isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"])) {
91 $this->databaseStructure();
94 return $_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"];
98 $c = $this->memcache();
103 $types = ksort($this->keyTypes());
104 foreach ($types as $key => $type) {
108 $c->set($this->cacheKey($this->tableName(), $key, $this->$key),
112 # XXX: figure out what to do with compound pkeys
113 if (count($primary) == 1) {
115 $c->set($this->cacheKey($this->tableName(), $key, $this->$key),
122 $c = $this->memcache();
127 $types = ksort($this->keyTypes());
128 foreach ($types as $key => $type) {
130 $primary[] = $this->$key;
132 $c->delete($this->cacheKey($this->tableName(), $key, $this->$key),
136 # XXX: figure out what to do with compound pkeys
137 if (count($primary) == 1) {
139 $c->delete($this->cacheKey($this->tableName(), $key, $this->$key),