Skip to content

Commit b1b0c19

Browse files
Implement DELIFEQ command
Implement the command and add a test.
1 parent b0ba827 commit b1b0c19

9 files changed

Lines changed: 61 additions & 4 deletions

redis.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,10 @@ PHP_METHOD(Redis, del) {
988988
}
989989
/* }}} */
990990

991+
PHP_METHOD(Redis, delifeq) {
992+
REDIS_PROCESS_KW_CMD("DELIFEQ", redis_kv_cmd, redis_long_response);
993+
}
994+
991995
/* {{{ proto long Redis::unlink(string $key1, string $key2 [, string $key3...]) }}}
992996
* {{{ proto long Redis::unlink(array $keys) */
993997
PHP_METHOD(Redis, unlink)

redis.stub.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,16 @@ public function decrBy(string $key, int $value): Redis|int|false;
987987
*/
988988
public function del(array|string $key, string ...$other_keys): Redis|int|false;
989989

990+
/**
991+
* Delete a key if it's equal to the specified value. This command is
992+
* specific to Valkey >= 9.0
993+
*
994+
* @param string $key The key to delete
995+
* @param mixed $value The value to compare against the key's value.
996+
* @return Redis|int|false Returns 1 if the key was deleted, 0 if it was not.
997+
*/
998+
public function delifeq(string $key, mixed $value): Redis|int|false;
999+
9901000
/**
9911001
* @deprecated
9921002
* @alias Redis::del

redis_arginfo.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 89e401bc3bc52dbd6d20f0459f5740b3ec855eb2 */
2+
* Stub hash: d5f56120b09dc6a8240d87efa53dc5749c031f38 */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
55
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
175175
ZEND_ARG_VARIADIC_TYPE_INFO(0, other_keys, IS_STRING, 0)
176176
ZEND_END_ARG_INFO()
177177

178+
#define arginfo_class_Redis_delifeq arginfo_class_Redis_append
179+
178180
#define arginfo_class_Redis_delete arginfo_class_Redis_del
179181

180182
#define arginfo_class_Redis_discard arginfo_class_Redis_bgSave
@@ -1286,6 +1288,7 @@ ZEND_METHOD(Redis, debug);
12861288
ZEND_METHOD(Redis, decr);
12871289
ZEND_METHOD(Redis, decrBy);
12881290
ZEND_METHOD(Redis, del);
1291+
ZEND_METHOD(Redis, delifeq);
12891292
ZEND_METHOD(Redis, discard);
12901293
ZEND_METHOD(Redis, dump);
12911294
ZEND_METHOD(Redis, echo);
@@ -1560,6 +1563,7 @@ static const zend_function_entry class_Redis_methods[] = {
15601563
ZEND_ME(Redis, decr, arginfo_class_Redis_decr, ZEND_ACC_PUBLIC)
15611564
ZEND_ME(Redis, decrBy, arginfo_class_Redis_decrBy, ZEND_ACC_PUBLIC)
15621565
ZEND_ME(Redis, del, arginfo_class_Redis_del, ZEND_ACC_PUBLIC)
1566+
ZEND_ME(Redis, delifeq, arginfo_class_Redis_delifeq, ZEND_ACC_PUBLIC)
15631567
ZEND_MALIAS(Redis, delete, del, arginfo_class_Redis_delete, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
15641568
ZEND_ME(Redis, discard, arginfo_class_Redis_discard, ZEND_ACC_PUBLIC)
15651569
ZEND_ME(Redis, dump, arginfo_class_Redis_dump, ZEND_ACC_PUBLIC)

redis_cluster.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,10 @@ PHP_METHOD(RedisCluster, del) {
800800
cluster_generic_delete(INTERNAL_FUNCTION_PARAM_PASSTHRU, "DEL", sizeof("DEL") - 1);
801801
}
802802

803+
PHP_METHOD(RedisCluster, delifeq) {
804+
CLUSTER_PROCESS_KW_CMD("DELIFEQ", redis_kv_cmd, cluster_long_resp, 0);
805+
}
806+
803807
/* {{{ proto array RedisCluster::unlink(string key1, string key2, ... keyN) */
804808
PHP_METHOD(RedisCluster, unlink) {
805809
cluster_generic_delete(INTERNAL_FUNCTION_PARAM_PASSTHRU, "UNLINK", sizeof("UNLINK") - 1);

redis_cluster.stub.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,16 @@ public function decrbyfloat(string $key, float $value): float;
255255
*/
256256
public function del(array|string $key, string ...$other_keys): RedisCluster|int|false;
257257

258+
/**
259+
* Delete a key if it's equal to the specified value. This command is
260+
* specific to Valkey >= 9.0
261+
*
262+
* @param string $key The key to delete
263+
* @param mixed $value The value to compare against the key's value.
264+
* @return RedisCluster|int|false Returns 1 if the key was deleted, 0 if it was not.
265+
*/
266+
public function delifeq(string $key, mixed $value): RedisCluster|int|false;
267+
258268
/**
259269
* @see Redis::discard
260270
*/

redis_cluster_arginfo.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: a4928c230ba6d599b66087fa831dd26bf1d4c5d7 */
2+
* Stub hash: 0f01437681bc6df1d6e2b39e6a0c7c5c77f6237e */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
55
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
198198
ZEND_ARG_VARIADIC_TYPE_INFO(0, other_keys, IS_STRING, 0)
199199
ZEND_END_ARG_INFO()
200200

201+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_delifeq, 0, 2, RedisCluster, MAY_BE_LONG|MAY_BE_FALSE)
202+
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
203+
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
204+
ZEND_END_ARG_INFO()
205+
201206
#define arginfo_class_RedisCluster_discard arginfo_class_RedisCluster_clearlasterror
202207

203208
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);
11671172
ZEND_METHOD(RedisCluster, decrby);
11681173
ZEND_METHOD(RedisCluster, decrbyfloat);
11691174
ZEND_METHOD(RedisCluster, del);
1175+
ZEND_METHOD(RedisCluster, delifeq);
11701176
ZEND_METHOD(RedisCluster, discard);
11711177
ZEND_METHOD(RedisCluster, dump);
11721178
ZEND_METHOD(RedisCluster, echo);
@@ -1412,6 +1418,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
14121418
ZEND_ME(RedisCluster, decrby, arginfo_class_RedisCluster_decrby, ZEND_ACC_PUBLIC)
14131419
ZEND_ME(RedisCluster, decrbyfloat, arginfo_class_RedisCluster_decrbyfloat, ZEND_ACC_PUBLIC)
14141420
ZEND_ME(RedisCluster, del, arginfo_class_RedisCluster_del, ZEND_ACC_PUBLIC)
1421+
ZEND_ME(RedisCluster, delifeq, arginfo_class_RedisCluster_delifeq, ZEND_ACC_PUBLIC)
14151422
ZEND_ME(RedisCluster, discard, arginfo_class_RedisCluster_discard, ZEND_ACC_PUBLIC)
14161423
ZEND_ME(RedisCluster, dump, arginfo_class_RedisCluster_dump, ZEND_ACC_PUBLIC)
14171424
ZEND_ME(RedisCluster, echo, arginfo_class_RedisCluster_echo, ZEND_ACC_PUBLIC)

redis_cluster_legacy_arginfo.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: a4928c230ba6d599b66087fa831dd26bf1d4c5d7 */
2+
* Stub hash: 0f01437681bc6df1d6e2b39e6a0c7c5c77f6237e */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
55
ZEND_ARG_INFO(0, name)
@@ -178,6 +178,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster_del, 0, 0, 1)
178178
ZEND_ARG_VARIADIC_INFO(0, other_keys)
179179
ZEND_END_ARG_INFO()
180180

181+
#define arginfo_class_RedisCluster_delifeq arginfo_class_RedisCluster_append
182+
181183
#define arginfo_class_RedisCluster_discard arginfo_class_RedisCluster__masters
182184

183185
#define arginfo_class_RedisCluster_dump arginfo_class_RedisCluster__prefix
@@ -1005,6 +1007,7 @@ ZEND_METHOD(RedisCluster, decr);
10051007
ZEND_METHOD(RedisCluster, decrby);
10061008
ZEND_METHOD(RedisCluster, decrbyfloat);
10071009
ZEND_METHOD(RedisCluster, del);
1010+
ZEND_METHOD(RedisCluster, delifeq);
10081011
ZEND_METHOD(RedisCluster, discard);
10091012
ZEND_METHOD(RedisCluster, dump);
10101013
ZEND_METHOD(RedisCluster, echo);
@@ -1250,6 +1253,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
12501253
ZEND_ME(RedisCluster, decrby, arginfo_class_RedisCluster_decrby, ZEND_ACC_PUBLIC)
12511254
ZEND_ME(RedisCluster, decrbyfloat, arginfo_class_RedisCluster_decrbyfloat, ZEND_ACC_PUBLIC)
12521255
ZEND_ME(RedisCluster, del, arginfo_class_RedisCluster_del, ZEND_ACC_PUBLIC)
1256+
ZEND_ME(RedisCluster, delifeq, arginfo_class_RedisCluster_delifeq, ZEND_ACC_PUBLIC)
12531257
ZEND_ME(RedisCluster, discard, arginfo_class_RedisCluster_discard, ZEND_ACC_PUBLIC)
12541258
ZEND_ME(RedisCluster, dump, arginfo_class_RedisCluster_dump, ZEND_ACC_PUBLIC)
12551259
ZEND_ME(RedisCluster, echo, arginfo_class_RedisCluster_echo, ZEND_ACC_PUBLIC)

redis_legacy_arginfo.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 89e401bc3bc52dbd6d20f0459f5740b3ec855eb2 */
2+
* Stub hash: d5f56120b09dc6a8240d87efa53dc5749c031f38 */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
55
ZEND_ARG_INFO(0, options)
@@ -163,6 +163,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis_del, 0, 0, 1)
163163
ZEND_ARG_VARIADIC_INFO(0, other_keys)
164164
ZEND_END_ARG_INFO()
165165

166+
#define arginfo_class_Redis_delifeq arginfo_class_Redis_append
167+
166168
#define arginfo_class_Redis_delete arginfo_class_Redis_del
167169

168170
#define arginfo_class_Redis_discard arginfo_class_Redis___destruct
@@ -1124,6 +1126,7 @@ ZEND_METHOD(Redis, debug);
11241126
ZEND_METHOD(Redis, decr);
11251127
ZEND_METHOD(Redis, decrBy);
11261128
ZEND_METHOD(Redis, del);
1129+
ZEND_METHOD(Redis, delifeq);
11271130
ZEND_METHOD(Redis, discard);
11281131
ZEND_METHOD(Redis, dump);
11291132
ZEND_METHOD(Redis, echo);
@@ -1398,6 +1401,7 @@ static const zend_function_entry class_Redis_methods[] = {
13981401
ZEND_ME(Redis, decr, arginfo_class_Redis_decr, ZEND_ACC_PUBLIC)
13991402
ZEND_ME(Redis, decrBy, arginfo_class_Redis_decrBy, ZEND_ACC_PUBLIC)
14001403
ZEND_ME(Redis, del, arginfo_class_Redis_del, ZEND_ACC_PUBLIC)
1404+
ZEND_ME(Redis, delifeq, arginfo_class_Redis_delifeq, ZEND_ACC_PUBLIC)
14011405
ZEND_MALIAS(Redis, delete, del, arginfo_class_Redis_delete, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
14021406
ZEND_ME(Redis, discard, arginfo_class_Redis_discard, ZEND_ACC_PUBLIC)
14031407
ZEND_ME(Redis, dump, arginfo_class_Redis_dump, ZEND_ACC_PUBLIC)

tests/RedisTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,6 +1093,16 @@ public function testDelete() {
10931093
$this->genericDelUnlink('DEL');
10941094
}
10951095

1096+
public function testDelIfEq() {
1097+
if ( ! $this->haveCommand('DELIFEQ'))
1098+
$this->markTestSkipped();
1099+
1100+
$this->assertTrue($this->redis->set('key', 'value'));
1101+
$this->assertEquals(0, $this->redis->delifeq('key', 'notvalue'));
1102+
$this->assertEquals(1, $this->redis->delifeq('key', 'value'));
1103+
$this->assertEquals(0, $this->redis->exists('key'));
1104+
}
1105+
10961106
public function testUnlink() {
10971107
if (version_compare($this->version, '4.0.0') < 0)
10981108
$this->markTestSkipped();

0 commit comments

Comments
 (0)