diff --git a/CHANGELOG.md b/CHANGELOG.md index 76c1c9d1..c818aac3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### Unreleased ### Added +- Added missing VSIM argument (#1582) + ### Changed ### Fixed diff --git a/src/ClientContextInterface.php b/src/ClientContextInterface.php index 72d43b4f..144c2561 100644 --- a/src/ClientContextInterface.php +++ b/src/ClientContextInterface.php @@ -349,7 +349,7 @@ use Predis\Command\Redis\VADD; * @method $this vrandmember(string $key, int $count = null) * @method $this vrem(string $key, string $elem) * @method $this vsetattr(string $key, string $elem, string|array $attributes) - * @method $this vsim(string $key, string|array $vectorOrElem, bool $isElem = false, bool $withScores = false, int $count = null, int $ef = null, string $filter = null, int $filterEf = null, bool $truth = false, bool $noThread = false) + * @method $this vsim(string $key, string|array $vectorOrElem, bool $isElem = false, bool $withScores = false, int $count = null, float $epsilon = null, int $ef = null, string $filter = null, int $filterEf = null, bool $truth = false, bool $noThread = false) * @method $this watch($key) * @method $this eval($script, $numkeys, $keyOrArg1 = null, $keyOrArgN = null) * @method $this eval_ro(string $script, array $keys, ...$argument) diff --git a/src/ClientInterface.php b/src/ClientInterface.php index 1c52d1d2..037a08b8 100644 --- a/src/ClientInterface.php +++ b/src/ClientInterface.php @@ -360,7 +360,7 @@ use Predis\Response\Status; * @method array|null vlinks(string $key, string $elem, bool $withScores = false) * @method string|array|null vrandmember(string $key, int $count = null) * @method bool vrem(string $key, string $elem) - * @method array vsim(string $key, string|array $vectorOrElem, bool $isElem = false, bool $withScores = false, int $count = null, int $ef = null, string $filter = null, int $filterEf = null, bool $truth = false, bool $noThread = false) + * @method array vsim(string $key, string|array $vectorOrElem, bool $isElem = false, bool $withScores = false, int $count = null, float $epsilon = null, int $ef = null, string $filter = null, int $filterEf = null, bool $truth = false, bool $noThread = false) * @method bool vsetattr(string $key, string $elem, string|array $attributes) * @method array waitaof(int $numLocal, int $numReplicas, int $timeout) * @method mixed watch(string[]|string $keyOrKeys) diff --git a/src/Command/Redis/VSIM.php b/src/Command/Redis/VSIM.php index cca6e300..371bbc4e 100644 --- a/src/Command/Redis/VSIM.php +++ b/src/Command/Redis/VSIM.php @@ -51,22 +51,26 @@ class VSIM extends RedisCommand } if (isset($arguments[5])) { - array_push($processedArguments, 'EF', $arguments[5]); + array_push($processedArguments, 'EPSILON', $arguments[5]); } if (isset($arguments[6])) { - array_push($processedArguments, 'FILTER', $arguments[6]); + array_push($processedArguments, 'EF', $arguments[6]); } if (isset($arguments[7])) { - array_push($processedArguments, 'FILTER-EF', $arguments[7]); + array_push($processedArguments, 'FILTER', $arguments[7]); } - if (isset($arguments[8]) && false !== $arguments[8]) { - $processedArguments[] = 'TRUTH'; + if (isset($arguments[8])) { + array_push($processedArguments, 'FILTER-EF', $arguments[8]); } if (isset($arguments[9]) && false !== $arguments[9]) { + $processedArguments[] = 'TRUTH'; + } + + if (isset($arguments[10]) && false !== $arguments[10]) { $processedArguments[] = 'NOTHREAD'; } diff --git a/tests/Predis/Command/Redis/VSIM_Test.php b/tests/Predis/Command/Redis/VSIM_Test.php index 45477780..8378535c 100644 --- a/tests/Predis/Command/Redis/VSIM_Test.php +++ b/tests/Predis/Command/Redis/VSIM_Test.php @@ -123,11 +123,11 @@ class VSIM_Test extends PredisCommandTestCase $this->assertTrue($redis->vsetattr('key', 'elem3', ['years' => 16])); $this->assertTrue($redis->vsetattr('key', 'elem1', ['years' => 19])); - // with Filter expression + // with Filter expression and Epsilon $this->assertSame( ['elem2', 'elem1'], $redis->vsim( - 'key', [0.9, 0.8, 0.7, 0.6], false, false, null, null, + 'key', [0.9, 0.8, 0.7, 0.6], false, false, null, 0.2, null, '.years >= 18' ) ); @@ -192,11 +192,11 @@ class VSIM_Test extends PredisCommandTestCase $this->assertTrue($redis->vsetattr('key', 'elem3', ['years' => 16])); $this->assertTrue($redis->vsetattr('key', 'elem1', ['years' => 19])); - // with Filter expression + // with Filter expression and Epsilon $this->assertSame( ['elem2', 'elem1'], $redis->vsim( - 'key', [0.9, 0.8, 0.7, 0.6], false, false, null, null, + 'key', [0.9, 0.8, 0.7, 0.6], false, false, null, 0.2, null, '.years >= 18' ) ); @@ -225,24 +225,28 @@ class VSIM_Test extends PredisCommandTestCase ['key', 'elem1', true, false, 10], ['key', 'ELE', 'elem1', 'COUNT', 10], ], + 'with EPSILON' => [ + ['key', 'elem1', true, false, null, 0.01], + ['key', 'ELE', 'elem1', 'EPSILON', 0.01], + ], 'with EF' => [ - ['key', 'elem1', true, false, null, 50], + ['key', 'elem1', true, false, null, null, 50], ['key', 'ELE', 'elem1', 'EF', 50], ], 'with FILTER' => [ - ['key', 'elem1', true, false, null, null, '.year >= 1980 and .rating > 7'], + ['key', 'elem1', true, false, null, null, null, '.year >= 1980 and .rating > 7'], ['key', 'ELE', 'elem1', 'FILTER', '.year >= 1980 and .rating > 7'], ], 'with FILTER-EF' => [ - ['key', 'elem1', true, false, null, null, null, 50], + ['key', 'elem1', true, false, null, null, null, null, 50], ['key', 'ELE', 'elem1', 'FILTER-EF', 50], ], 'with TRUTH' => [ - ['key', 'elem1', true, false, null, null, null, null, true], + ['key', 'elem1', true, false, null, null, null, null, null, true], ['key', 'ELE', 'elem1', 'TRUTH'], ], 'with NOTHREAD' => [ - ['key', 'elem1', true, false, null, null, null, null, false, true], + ['key', 'elem1', true, false, null, null, null, null, null, false, true], ['key', 'ELE', 'elem1', 'NOTHREAD'], ], ];