Quellcode durchsuchen

No more implicit serialization for an array instance passed as the single argument of a MultiBulkCommand.

Daniele Alessandri vor 15 Jahren
Ursprung
Commit
ea9c3388da
1 geänderte Dateien mit 14 neuen und 6 gelöschten Zeilen
  1. 14 6
      lib/Predis.php

+ 14 - 6
lib/Predis.php

@@ -422,11 +422,7 @@ abstract class MultiBulkCommand extends Command {
         $argsc    = count($arguments);
 
         if ($argsc === 1 && is_array($arguments[0])) {
-            $cmd_args = array();
-            foreach ($arguments[0] as $k => $v) {
-                $cmd_args[] = $k;
-                $cmd_args[] = $v;
-            }
+            $cmd_args = $arguments[0];
             $argsc = count($cmd_args);
         }
         else {
@@ -1802,9 +1798,21 @@ class SetPreserve extends \Predis\BulkCommand {
 class SetMultiple extends \Predis\MultiBulkCommand {
     public function canBeHashed()  { return false; }
     public function getCommandId() { return 'MSET'; }
+    public function filterArguments(Array $arguments) {
+        if (count($arguments) === 1 && is_array($arguments[0])) {
+            $flattenedKVs = array();
+            $args = &$arguments[0];
+            foreach ($args as $k => $v) {
+                $flattenedKVs[] = $k;
+                $flattenedKVs[] = $v;
+            }
+            return $flattenedKVs;
+        }
+        return $arguments;
+    }
 }
 
-class SetMultiplePreserve extends \Predis\MultiBulkCommand {
+class SetMultiplePreserve extends \Predis\Commands\SetMultiple {
     public function canBeHashed()  { return false; }
     public function getCommandId() { return 'MSETNX'; }
     public function parseResponse($data) { return (bool) $data; }