浏览代码

Better support for options for ZUNION and ZINTER.

Daniele Alessandri 15 年之前
父节点
当前提交
b623144881
共有 1 个文件被更改,包括 22 次插入3 次删除
  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'; }
 }