|
@@ -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'; }
|
|
|
}
|
|
|
|