Browse Source

Better support for options for ZUNION and ZINTER.

Daniele Alessandri 15 years ago
parent
commit
b623144881
1 changed files with 22 additions and 3 deletions
  1. 22 3
      lib/Predis.php

+ 22 - 3
lib/Predis.php

@@ -2081,12 +2081,31 @@ class ZSetRemove extends \Predis\MultiBulkCommand {
 class ZSetUnion extends \Predis\MultiBulkCommand {
     public function getCommandId() { return 'ZUNION'; }
     public function filterArguments(Array $arguments) {
-        // TODO: add explicit support for AGGREGATE [SUM|MIN|MAX] and WEIGHT
-        return $arguments;
+        $options = array();
+        $argc    = count($arguments);
+        if ($argc > 1 && is_array($arguments[$argc - 1])) {
+            $options = $this->prepareOptions(array_pop($arguments));
+        }
+        $args = is_array($arguments[0]) ? $arguments[0] : $arguments;
+        return  array_merge($args, $options);
+    }
+    private function prepareOptions($options) {
+        $opts = array_change_key_case($options, CASE_UPPER);
+        $finalizedOpts = array();
+        if (isset($opts['WEIGHTS']) && is_array($opts['WEIGHTS'])) {
+            $finalizedOpts[] = 'WEIGHTS';
+            $finalizedOpts[] = $opts['WEIGHTS'][0];
+            $finalizedOpts[] = $opts['WEIGHTS'][1];
+        }
+        if (isset($opts['AGGREGATE'])) {
+            $finalizedOpts[] = 'AGGREGATE';
+            $finalizedOpts[] = $opts['AGGREGATE'];
+        }
+        return $finalizedOpts;
     }
 }
 
-class ZSetIntersection extends \Predis\MultiBulkCommand {
+class ZSetIntersection extends \Predis\Commands\ZSetUnion {
     public function getCommandId() { return 'ZINTER'; }
 }