/**
  * @fixme Should this return false on lookup fail to match staticGet?
  */
 function pkeyGet($cls, $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;
         }
         foreach ($kv as $k => $v) {
             $i->{$k} = $v;
         }
         if ($i->find(true)) {
             $i->encache();
         } else {
             $i = null;
             $c = self::memcache();
             if (!empty($c)) {
                 $ck = self::multicacheKey($cls, $kv);
                 $c->set($ck, null);
             }
         }
         return $i;
     }
 }
Ejemplo n.º 2
0
 function &pkeyGet($cls, $kv)
 {
     $i = Memcached_DataObject::multicache($cls, $kv);
     if ($i) {
         return $i;
     } else {
         $i = new $cls();
         foreach ($kv as $k => $v) {
             $i->{$k} = $v;
         }
         if ($i->find(true)) {
             $i->encache();
         } else {
             $i = null;
         }
         return $i;
     }
 }
 /**
  * @todo FIXME: Should this return false on lookup fail to match staticGet?
  */
 function pkeyGet($cls, $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;
         }
         foreach ($kv as $k => $v) {
             if (is_null($v)) {
                 // XXX: possible SQL injection...? Don't
                 // pass keys from the browser, eh.
                 $i->whereAdd("{$k} is null");
             } else {
                 $i->{$k} = $v;
             }
         }
         if ($i->find(true)) {
             $i->encache();
         } else {
             $i = null;
             $c = self::memcache();
             if (!empty($c)) {
                 $ck = self::multicacheKey($cls, $kv);
                 $c->set($ck, null);
             }
         }
         return $i;
     }
 }