]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
explicitly skip nulls in Memcached_DataObject::multiGet()
authorEvan Prodromou <evan@status.net>
Thu, 14 Jul 2011 18:41:30 +0000 (14:41 -0400)
committerEvan Prodromou <evan@status.net>
Thu, 14 Jul 2011 18:41:30 +0000 (14:41 -0400)
classes/Memcached_DataObject.php
classes/Notice.php

index f1336e582fc528f987f50cc500b0d0e943b65187..0eae9fb42a835e79087a0845f2449f85afd52e28 100644 (file)
@@ -64,7 +64,17 @@ class Memcached_DataObject extends Safe_DataObject
         return $i;
     }
     
-    function multiGet($cls, $keyCol, $keyVals)
+    /**
+     * Get multiple items from the database by key
+     * 
+     * @param string  $cls       Class to fetch
+     * @param string  $keyCol    name of column for key
+     * @param array   $keyVals   key values to fetch
+     * @param boolean $skipNulls return only non-null results?
+     * 
+     * @return array Array of objects, in order
+     */
+    function multiGet($cls, $keyCol, $keyVals, $skipNulls=true)
     {
        $result = array_fill_keys($keyVals, null);
        
@@ -92,9 +102,34 @@ class Memcached_DataObject extends Safe_DataObject
                                $result[$i->$keyCol] = $copy;
                        }
                }
+               
+               // Save state of DB misses
+               
+               foreach ($toFetch as $keyVal) {
+                       if (empty($result[$keyVal])) {
+                       // save the fact that no such row exists
+                       $c = self::memcache();
+                       if (!empty($c)) {
+                       $ck = self::cachekey($cls, $keyCol, $keyVal);
+                       $c->set($ck, null);
+                       }       
+                       }
+               }
+       }
+       
+       $values = array_values($result);
+       
+       if ($skipNulls) {
+               $tmp = array();
+               foreach ($values as $value) {
+                       if (!empty($value)) {
+                               $tmp[] = $value;
+                       }
+               }
+               $values = $tmp;
        }
        
-       return new ArrayWrapper(array_values($result));
+       return new ArrayWrapper($values);
     }
 
        function columnType($columnName)
index 4476798661eef7149c98652a20add7230b7aa9c7..e82b567e9c7b34e5b4286d553d71006d8503c923 100644 (file)
@@ -84,9 +84,9 @@ class Notice extends Memcached_DataObject
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
 
-       function multiGet($kc, $kvs)
+       function multiGet($kc, $kvs, $skipNulls=true)
        {
-               return Memcached_DataObject::multiGet('Notice', $kc, $kvs);
+               return Memcached_DataObject::multiGet('Notice', $kc, $kvs, $skipNulls);
        }
        
     /* Notice types */