From 1f65f22081c426c9c5f428c69640fb5af32fe511 Mon Sep 17 00:00:00 2001 From: Alexander Burakovskiy Date: Fri, 12 Jan 2018 17:37:35 +0200 Subject: [PATCH 1/4] Add support for SUNION --- README.md | 1 + src/M6Web/Component/RedisMock/RedisMock.php | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/README.md b/README.md index ed0bab4..ac3f991 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Redis command | Description **SADD** *key* *member* *[member ...]* | Adds one or more members to a set **SISMEMBER** *key* *member* | Determines if a member is in a set **SMEMBERS** *key* | Gets all the members in a set +**SUNION** *key* *[key ...]* | Returns the members of the set resulting from the union of all the given sets. **SCARD** *key* | Get cardinality of set (count of members) **SREM** *key* *member* *[member ...]* | Removes one or more members from a set **HDEL** *key* *field* | Delete one hash fields diff --git a/src/M6Web/Component/RedisMock/RedisMock.php b/src/M6Web/Component/RedisMock/RedisMock.php index f392016..41109d1 100644 --- a/src/M6Web/Component/RedisMock/RedisMock.php +++ b/src/M6Web/Component/RedisMock/RedisMock.php @@ -308,6 +308,20 @@ public function smembers($key) return $this->returnPipedInfo(self::$dataValues[$this->storage][$key]); } + public function sunion() + { + $this->stopPipeline(); + $keys = func_get_args(); + $result = array(); + foreach ($keys as $key) { + $result = array_merge($result, $this->smembers($key)); + } + $result = array_values(array_unique($result)); + + $this->restorePipeline(); + + return $this->returnPipedInfo($result); + } public function scard($key) { From e06e0c4837938d75859bc288cb4d14bdf518cb38 Mon Sep 17 00:00:00 2001 From: Alexander Burakovskiy Date: Fri, 12 Jan 2018 20:21:16 +0200 Subject: [PATCH 2/4] Fix SUNION args. Add support for SINTER --- README.md | 1 + src/M6Web/Component/RedisMock/RedisMock.php | 27 +++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ac3f991..328a69a 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Redis command | Description **SISMEMBER** *key* *member* | Determines if a member is in a set **SMEMBERS** *key* | Gets all the members in a set **SUNION** *key* *[key ...]* | Returns the members of the set resulting from the union of all the given sets. +**SINTER** *key* *[key ...]* | Returns the members of the set resulting from the intersection of all the given sets. **SCARD** *key* | Get cardinality of set (count of members) **SREM** *key* *member* *[member ...]* | Removes one or more members from a set **HDEL** *key* *field* | Delete one hash fields diff --git a/src/M6Web/Component/RedisMock/RedisMock.php b/src/M6Web/Component/RedisMock/RedisMock.php index 41109d1..958a2f9 100644 --- a/src/M6Web/Component/RedisMock/RedisMock.php +++ b/src/M6Web/Component/RedisMock/RedisMock.php @@ -308,10 +308,14 @@ public function smembers($key) return $this->returnPipedInfo(self::$dataValues[$this->storage][$key]); } - public function sunion() + public function sunion($key) { $this->stopPipeline(); - $keys = func_get_args(); + if (is_array($key)) { + $keys = $key; + } else { + $keys = func_get_args(); + } $result = array(); foreach ($keys as $key) { $result = array_merge($result, $this->smembers($key)); @@ -323,6 +327,25 @@ public function sunion() return $this->returnPipedInfo($result); } + public function sinter($key) + { + $this->stopPipeline(); + if (is_array($key)) { + $keys = $key; + } else { + $keys = func_get_args(); + } + $result = array(); + foreach ($keys as $key) { + $result[] = $this->smembers($key); + } + $result = call_user_func_array('array_intersect', $result); + + $this->restorePipeline(); + + return $this->returnPipedInfo($result); + } + public function scard($key) { // returns 0 if key not found From 67076b60afabe7add6092037ddbf596ba8ff4eb7 Mon Sep 17 00:00:00 2001 From: Alexander Burakovskiy Date: Mon, 15 Jan 2018 14:57:12 +0200 Subject: [PATCH 3/4] adjust syntax --- src/M6Web/Component/RedisMock/RedisMock.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/M6Web/Component/RedisMock/RedisMock.php b/src/M6Web/Component/RedisMock/RedisMock.php index 958a2f9..1e20270 100644 --- a/src/M6Web/Component/RedisMock/RedisMock.php +++ b/src/M6Web/Component/RedisMock/RedisMock.php @@ -311,11 +311,7 @@ public function smembers($key) public function sunion($key) { $this->stopPipeline(); - if (is_array($key)) { - $keys = $key; - } else { - $keys = func_get_args(); - } + $keys = is_array($key) ? $key : func_get_args(); $result = array(); foreach ($keys as $key) { $result = array_merge($result, $this->smembers($key)); @@ -330,11 +326,7 @@ public function sunion($key) public function sinter($key) { $this->stopPipeline(); - if (is_array($key)) { - $keys = $key; - } else { - $keys = func_get_args(); - } + $keys = is_array($key) ? $key : func_get_args(); $result = array(); foreach ($keys as $key) { $result[] = $this->smembers($key); From 31a379b6a99a897862655d08599e1effe1b704e0 Mon Sep 17 00:00:00 2001 From: Alexander Burakovskiy Date: Mon, 15 Jan 2018 15:21:00 +0200 Subject: [PATCH 4/4] adjust syntax --- src/M6Web/Component/RedisMock/RedisMock.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/M6Web/Component/RedisMock/RedisMock.php b/src/M6Web/Component/RedisMock/RedisMock.php index 1e20270..0dd8e00 100644 --- a/src/M6Web/Component/RedisMock/RedisMock.php +++ b/src/M6Web/Component/RedisMock/RedisMock.php @@ -312,7 +312,7 @@ public function sunion($key) { $this->stopPipeline(); $keys = is_array($key) ? $key : func_get_args(); - $result = array(); + $result = []; foreach ($keys as $key) { $result = array_merge($result, $this->smembers($key)); } @@ -327,7 +327,7 @@ public function sinter($key) { $this->stopPipeline(); $keys = is_array($key) ? $key : func_get_args(); - $result = array(); + $result = []; foreach ($keys as $key) { $result[] = $this->smembers($key); }