X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FMemcached_DataObject.php;h=0df9164b40c81217636137dca29f948132c0a7a3;hb=2770ef9718fb29110b6ab43ea6cffffa8cc4c27b;hp=72eb9b9188ad62429eb83d4fc9e28b8d62254872;hpb=97ce71e55d719af3ff53d70367c5e72312bcd136;p=quix0rs-gnu-social.git diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index 72eb9b9188..0df9164b40 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -41,13 +41,9 @@ class Memcached_DataObject extends Safe_DataObject } $k = $keys[0]; } - $i = Memcached_DataObject::getcached($cls, $k, $v); + $i = self::getcached($cls, $k, $v); if ($i === false) { // false == cache miss - $i = DB_DataObject::factory($cls); - if (empty($i)) { - $i = false; - return $i; - } + $i = new $cls; $result = $i->get($k, $v); if ($result) { // Hit! @@ -75,9 +71,9 @@ class Memcached_DataObject extends Safe_DataObject * * @return array Array of objects, in order */ - function multiGet($cls, $keyCol, $keyVals, $skipNulls=true) + static function multiGetClass($cls, $keyCol, array $keyVals, $skipNulls=true) { - $result = self::pivotGet($cls, $keyCol, $keyVals); + $result = self::pivotGetClass($cls, $keyCol, $keyVals); $values = array_values($result); @@ -104,7 +100,7 @@ class Memcached_DataObject extends Safe_DataObject * * @return array Array mapping $keyVals to objects, or null if not found */ - static function pivotGet($cls, $keyCol, $keyVals, $otherCols = array()) + static function pivotGetClass($cls, $keyCol, array $keyVals, array $otherCols = array()) { if (is_array($keyCol)) { foreach ($keyVals as $keyVal) { @@ -140,11 +136,7 @@ class Memcached_DataObject extends Safe_DataObject } if (count($toFetch) > 0) { - $i = DB_DataObject::factory($cls); - if (empty($i)) { - // TRANS: Exception thrown when a program code class (%s) cannot be instantiated. - throw new Exception(sprintf(_('Cannot instantiate class %s.'),$cls)); - } + $i = new $cls; foreach ($otherCols as $otherKeyCol => $otherKeyVal) { $i->$otherKeyCol = $otherKeyVal; } @@ -248,11 +240,7 @@ class Memcached_DataObject extends Safe_DataObject static function pkeyCols($cls) { - $i = DB_DataObject::factory($cls); - if (empty($i)) { - // TRANS: Exception thrown when a program code class (%s) cannot be instantiated. - throw new Exception(sprintf(_('Cannot instantiate class %s.'),$cls)); - } + $i = new $cls; $types = $i->keyTypes(); ksort($types); @@ -267,7 +255,18 @@ class Memcached_DataObject extends Safe_DataObject return $pkey; } - static function listGetClass($cls, $keyCol, $keyVals) + static function listFindClass($cls, $keyCol, array $keyVals) + { + $i = new $cls; + $i->whereAddIn($keyCol, $keyVals, $i->columnType($keyCol)); + if (!$i->find()) { + throw new NoResultException($i); + } + + return $i; + } + + static function listGetClass($cls, $keyCol, array $keyVals) { $pkeyMap = array_fill_keys($keyVals, array()); $result = array_fill_keys($keyVals, array()); @@ -292,7 +291,7 @@ class Memcached_DataObject extends Safe_DataObject } if (count($allPkeys) > 0) { - $keyResults = self::pivotGet($cls, $pkeyCols, $allPkeys); + $keyResults = self::pivotGetClass($cls, $pkeyCols, $allPkeys); foreach ($pkeyMap as $keyVal => $pkeyList) { foreach ($pkeyList as $pkeyVal) { @@ -305,14 +304,9 @@ class Memcached_DataObject extends Safe_DataObject } if (count($toFetch) > 0) { - $i = DB_DataObject::factory($cls); - if (empty($i)) { - // TRANS: Exception thrown when a program code class (%s) cannot be instantiated. - throw new Exception(sprintf(_('Cannot instantiate class %s.'),$cls)); - } - $i->whereAddIn($keyCol, $toFetch, $i->columnType($keyCol)); - if ($i->find()) { - sprintf(__CLASS__ . "() got {$i->N} results for class $cls key $keyCol"); + try { + $i = self::listFindClass($cls, $keyCol, $toFetch); + while ($i->fetch()) { $copy = clone($i); $copy->encache(); @@ -323,6 +317,8 @@ class Memcached_DataObject extends Safe_DataObject } $pkeyMap[$i->$keyCol][] = $pkeyVal; } + } catch (NoResultException $e) { + // no results found for our keyVals, so we leave them as empty arrays } foreach ($toFetch as $keyVal) { self::cacheSet(sprintf("%s:list-ids:%s:%s", strtolower($cls), $keyCol, $keyVal), @@ -352,16 +348,13 @@ class Memcached_DataObject extends Safe_DataObject /** * @todo FIXME: Should this return false on lookup fail to match getKV? */ - static function pkeyGetClass($cls, $kv) + static function pkeyGetClass($cls, array $kv) { $i = Memcached_DataObject::multicache($cls, $kv); if ($i !== false) { // false == cache miss return $i; } else { - $i = DB_DataObject::factory($cls); - if (empty($i) || PEAR::isError($i)) { - return false; - } + $i = new $cls; foreach ($kv as $k => $v) { if (is_null($v)) { // XXX: possible SQL injection...? Don't @@ -738,12 +731,12 @@ class Memcached_DataObject extends Safe_DataObject function _connect() { - global $_DB_DATAOBJECT; + global $_DB_DATAOBJECT, $_PEAR; $sum = $this->_getDbDsnMD5(); if (!empty($_DB_DATAOBJECT['CONNECTIONS'][$sum]) && - !PEAR::isError($_DB_DATAOBJECT['CONNECTIONS'][$sum])) { + !$_PEAR->isError($_DB_DATAOBJECT['CONNECTIONS'][$sum])) { $exists = true; } else { $exists = false;