Implement DELIFEQ command

Implement the command and add a test.
This commit is contained in:
michael-grunder
2025-08-23 11:44:54 -07:00
committed by Michael Grunder
parent b0ba827be2
commit b1b0c19142
9 changed files with 61 additions and 4 deletions

View File

@@ -988,6 +988,10 @@ PHP_METHOD(Redis, del) {
}
/* }}} */
PHP_METHOD(Redis, delifeq) {
REDIS_PROCESS_KW_CMD("DELIFEQ", redis_kv_cmd, redis_long_response);
}
/* {{{ proto long Redis::unlink(string $key1, string $key2 [, string $key3...]) }}}
* {{{ proto long Redis::unlink(array $keys) */
PHP_METHOD(Redis, unlink)

View File

@@ -987,6 +987,16 @@ class Redis {
*/
public function del(array|string $key, string ...$other_keys): Redis|int|false;
/**
* Delete a key if it's equal to the specified value. This command is
* specific to Valkey >= 9.0
*
* @param string $key The key to delete
* @param mixed $value The value to compare against the key's value.
* @return Redis|int|false Returns 1 if the key was deleted, 0 if it was not.
*/
public function delifeq(string $key, mixed $value): Redis|int|false;
/**
* @deprecated
* @alias Redis::del

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 89e401bc3bc52dbd6d20f0459f5740b3ec855eb2 */
* Stub hash: d5f56120b09dc6a8240d87efa53dc5749c031f38 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
@@ -175,6 +175,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_del, 0, 1, Redis
ZEND_ARG_VARIADIC_TYPE_INFO(0, other_keys, IS_STRING, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_Redis_delifeq arginfo_class_Redis_append
#define arginfo_class_Redis_delete arginfo_class_Redis_del
#define arginfo_class_Redis_discard arginfo_class_Redis_bgSave
@@ -1286,6 +1288,7 @@ ZEND_METHOD(Redis, debug);
ZEND_METHOD(Redis, decr);
ZEND_METHOD(Redis, decrBy);
ZEND_METHOD(Redis, del);
ZEND_METHOD(Redis, delifeq);
ZEND_METHOD(Redis, discard);
ZEND_METHOD(Redis, dump);
ZEND_METHOD(Redis, echo);
@@ -1560,6 +1563,7 @@ static const zend_function_entry class_Redis_methods[] = {
ZEND_ME(Redis, decr, arginfo_class_Redis_decr, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, decrBy, arginfo_class_Redis_decrBy, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, del, arginfo_class_Redis_del, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, delifeq, arginfo_class_Redis_delifeq, ZEND_ACC_PUBLIC)
ZEND_MALIAS(Redis, delete, del, arginfo_class_Redis_delete, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
ZEND_ME(Redis, discard, arginfo_class_Redis_discard, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, dump, arginfo_class_Redis_dump, ZEND_ACC_PUBLIC)

View File

@@ -800,6 +800,10 @@ PHP_METHOD(RedisCluster, del) {
cluster_generic_delete(INTERNAL_FUNCTION_PARAM_PASSTHRU, "DEL", sizeof("DEL") - 1);
}
PHP_METHOD(RedisCluster, delifeq) {
CLUSTER_PROCESS_KW_CMD("DELIFEQ", redis_kv_cmd, cluster_long_resp, 0);
}
/* {{{ proto array RedisCluster::unlink(string key1, string key2, ... keyN) */
PHP_METHOD(RedisCluster, unlink) {
cluster_generic_delete(INTERNAL_FUNCTION_PARAM_PASSTHRU, "UNLINK", sizeof("UNLINK") - 1);

View File

@@ -255,6 +255,16 @@ class RedisCluster {
*/
public function del(array|string $key, string ...$other_keys): RedisCluster|int|false;
/**
* Delete a key if it's equal to the specified value. This command is
* specific to Valkey >= 9.0
*
* @param string $key The key to delete
* @param mixed $value The value to compare against the key's value.
* @return RedisCluster|int|false Returns 1 if the key was deleted, 0 if it was not.
*/
public function delifeq(string $key, mixed $value): RedisCluster|int|false;
/**
* @see Redis::discard
*/

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: a4928c230ba6d599b66087fa831dd26bf1d4c5d7 */
* Stub hash: 0f01437681bc6df1d6e2b39e6a0c7c5c77f6237e */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 1)
@@ -198,6 +198,11 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_del, 0, 1
ZEND_ARG_VARIADIC_TYPE_INFO(0, other_keys, IS_STRING, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_delifeq, 0, 2, RedisCluster, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_discard arginfo_class_RedisCluster_clearlasterror
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_dump, 0, 1, RedisCluster, MAY_BE_STRING|MAY_BE_FALSE)
@@ -1167,6 +1172,7 @@ ZEND_METHOD(RedisCluster, decr);
ZEND_METHOD(RedisCluster, decrby);
ZEND_METHOD(RedisCluster, decrbyfloat);
ZEND_METHOD(RedisCluster, del);
ZEND_METHOD(RedisCluster, delifeq);
ZEND_METHOD(RedisCluster, discard);
ZEND_METHOD(RedisCluster, dump);
ZEND_METHOD(RedisCluster, echo);
@@ -1412,6 +1418,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
ZEND_ME(RedisCluster, decrby, arginfo_class_RedisCluster_decrby, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, decrbyfloat, arginfo_class_RedisCluster_decrbyfloat, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, del, arginfo_class_RedisCluster_del, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, delifeq, arginfo_class_RedisCluster_delifeq, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, discard, arginfo_class_RedisCluster_discard, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, dump, arginfo_class_RedisCluster_dump, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, echo, arginfo_class_RedisCluster_echo, ZEND_ACC_PUBLIC)

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: a4928c230ba6d599b66087fa831dd26bf1d4c5d7 */
* Stub hash: 0f01437681bc6df1d6e2b39e6a0c7c5c77f6237e */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
ZEND_ARG_INFO(0, name)
@@ -178,6 +178,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster_del, 0, 0, 1)
ZEND_ARG_VARIADIC_INFO(0, other_keys)
ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_delifeq arginfo_class_RedisCluster_append
#define arginfo_class_RedisCluster_discard arginfo_class_RedisCluster__masters
#define arginfo_class_RedisCluster_dump arginfo_class_RedisCluster__prefix
@@ -1005,6 +1007,7 @@ ZEND_METHOD(RedisCluster, decr);
ZEND_METHOD(RedisCluster, decrby);
ZEND_METHOD(RedisCluster, decrbyfloat);
ZEND_METHOD(RedisCluster, del);
ZEND_METHOD(RedisCluster, delifeq);
ZEND_METHOD(RedisCluster, discard);
ZEND_METHOD(RedisCluster, dump);
ZEND_METHOD(RedisCluster, echo);
@@ -1250,6 +1253,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
ZEND_ME(RedisCluster, decrby, arginfo_class_RedisCluster_decrby, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, decrbyfloat, arginfo_class_RedisCluster_decrbyfloat, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, del, arginfo_class_RedisCluster_del, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, delifeq, arginfo_class_RedisCluster_delifeq, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, discard, arginfo_class_RedisCluster_discard, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, dump, arginfo_class_RedisCluster_dump, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, echo, arginfo_class_RedisCluster_echo, ZEND_ACC_PUBLIC)

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 89e401bc3bc52dbd6d20f0459f5740b3ec855eb2 */
* Stub hash: d5f56120b09dc6a8240d87efa53dc5749c031f38 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
ZEND_ARG_INFO(0, options)
@@ -163,6 +163,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis_del, 0, 0, 1)
ZEND_ARG_VARIADIC_INFO(0, other_keys)
ZEND_END_ARG_INFO()
#define arginfo_class_Redis_delifeq arginfo_class_Redis_append
#define arginfo_class_Redis_delete arginfo_class_Redis_del
#define arginfo_class_Redis_discard arginfo_class_Redis___destruct
@@ -1124,6 +1126,7 @@ ZEND_METHOD(Redis, debug);
ZEND_METHOD(Redis, decr);
ZEND_METHOD(Redis, decrBy);
ZEND_METHOD(Redis, del);
ZEND_METHOD(Redis, delifeq);
ZEND_METHOD(Redis, discard);
ZEND_METHOD(Redis, dump);
ZEND_METHOD(Redis, echo);
@@ -1398,6 +1401,7 @@ static const zend_function_entry class_Redis_methods[] = {
ZEND_ME(Redis, decr, arginfo_class_Redis_decr, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, decrBy, arginfo_class_Redis_decrBy, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, del, arginfo_class_Redis_del, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, delifeq, arginfo_class_Redis_delifeq, ZEND_ACC_PUBLIC)
ZEND_MALIAS(Redis, delete, del, arginfo_class_Redis_delete, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
ZEND_ME(Redis, discard, arginfo_class_Redis_discard, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, dump, arginfo_class_Redis_dump, ZEND_ACC_PUBLIC)

View File

@@ -1093,6 +1093,16 @@ class Redis_Test extends TestSuite {
$this->genericDelUnlink('DEL');
}
public function testDelIfEq() {
if ( ! $this->haveCommand('DELIFEQ'))
$this->markTestSkipped();
$this->assertTrue($this->redis->set('key', 'value'));
$this->assertEquals(0, $this->redis->delifeq('key', 'notvalue'));
$this->assertEquals(1, $this->redis->delifeq('key', 'value'));
$this->assertEquals(0, $this->redis->exists('key'));
}
public function testUnlink() {
if (version_compare($this->version, '4.0.0') < 0)
$this->markTestSkipped();