Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8c7c5a3

Browse files
Refactor SORT and add SORT_RO command
See #2068
1 parent 1343f50 commit 8c7c5a3

11 files changed

Lines changed: 142 additions & 111 deletions

redis.c

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,27 +1481,12 @@ PHP_METHOD(Redis, sDiffStore) {
14811481

14821482
/* {{{ proto array Redis::sort(string key, array options) */
14831483
PHP_METHOD(Redis, sort) {
1484-
char *cmd;
1485-
int cmd_len, have_store;
1486-
RedisSock *redis_sock;
1487-
1488-
// Grab socket, handle command construction
1489-
if ((redis_sock = redis_sock_get(getThis(), 0)) == NULL ||
1490-
redis_sort_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, &have_store,
1491-
&cmd, &cmd_len, NULL, NULL) == FAILURE)
1492-
{
1493-
RETURN_FALSE;
1494-
}
1484+
REDIS_PROCESS_KW_CMD("SORT", redis_sort_cmd, redis_read_variant_reply);
1485+
}
14951486

1496-
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
1497-
if (IS_ATOMIC(redis_sock)) {
1498-
if (redis_read_variant_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU,
1499-
redis_sock, NULL, NULL) < 0)
1500-
{
1501-
RETURN_FALSE;
1502-
}
1503-
}
1504-
REDIS_PROCESS_RESPONSE(redis_read_variant_reply);
1487+
/* {{{ proto array Redis::sort(string key, array options) */
1488+
PHP_METHOD(Redis, sort_ro) {
1489+
REDIS_PROCESS_KW_CMD("SORT_RO", redis_sort_cmd, redis_read_variant_reply);
15051490
}
15061491

15071492
static void

redis.stub.php

Lines changed: 65 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -566,35 +566,76 @@ public function sismember(string $key, mixed $value): Redis|bool;
566566
public function slaveof(string $host = null, int $port = 6379): bool;
567567

568568
/**
569-
Interact with Redis' slowlog functionality in variousu ways, depending
570-
on the value of 'operations'.
571-
572-
@param string $operation The operation you wish to perform.  This can
573-
be one of the following values:
574-
'get' - Retreive the Redis slowlog as an array.
575-
'len' - Retreive the length of the slowlog.
576-
'reset' - Remove all slowlog entries.
577-
<code>
578-
<?php
579-
$redis->slowllog('get', -1); // Retreive all slowlog entries.
580-
$redis->slowlog('len'); // Retreive slowlog length.
581-
$redis->slowlog('reset'); // Reset the slowlog.
582-
?>
583-
</code>
584-
585-
@param int $length This optional argument can be passed when operation
586-
is 'get' and will specify how many elements to retreive.
587-
If omitted Redis will send up to a default number of
588-
entries, which is configurable.
589-
590-
Note: With Redis >= 7.0.0 you can send -1 to mean "all".
591-
592-
@return mixed
569+
* Interact with Redis' slowlog functionality in variousu ways, depending
570+
* on the value of 'operations'.
571+
*
572+
* @see https://https://redis.io/commands/slowlog/
573+
* @category administration
574+
*
575+
* @param string $operation The operation you wish to perform.  This can
576+
* be one of the following values:
577+
* 'get' - Retreive the Redis slowlog as an array.
578+
* 'len' - Retreive the length of the slowlog.
579+
* 'reset' - Remove all slowlog entries.
580+
* <code>
581+
* <?php
582+
* $redis->slowllog('get', -1); // Retreive all slowlog entries.
583+
* $redis->slowlog('len'); // Retreive slowlog length.
584+
* $redis->slowlog('reset'); // Reset the slowlog.
585+
* ?>
586+
* </code>
587+
*
588+
* @param int $length This optional argument can be passed when operation
589+
* is 'get' and will specify how many elements to retreive.
590+
* If omitted Redis will send up to a default number of
591+
* entries, which is configurable.
592+
*
593+
* Note: With Redis >= 7.0.0 you can send -1 to mean "all".
594+
*
595+
* @return mixed
593596
*/
594597
public function slowlog(string $operation, int $length = 0): mixed;
595598

599+
/**
600+
* Sort the contents of a Redis key in various ways.
601+
*
602+
* @see https://https://redis.io/commands/sort/
603+
*
604+
* @param string $key The key you wish to sort
605+
* @param array $options Various options controlling how you would like the
606+
* data sorted. See blow for a detailed description
607+
* of this options array.
608+
*
609+
* @return mixed This command can either return an array with the sorted data
610+
* or the number of elements placed in a destination set when
611+
* using the STORE option.
612+
*
613+
* <code>
614+
* <?php
615+
* $options = [
616+
* 'SORT' => 'ASC'|| 'DESC' // Sort in descending or descending order.
617+
* 'ALPHA' => true || false // Whether to sort alphanumerically.
618+
* 'LIMIT' => [0, 10] // Return a subset of the data at offset, count
619+
* 'BY' => 'weight_*' // For each element in the key, read data from the
620+
* external key weight_* and sort based on that value.
621+
* 'GET' => 'weight_*' // For each element in the source key, retreive the
622+
* data from key weight_* and return that in the result
623+
* rather than the source keys' element. This can
624+
* be used in combination with 'BY'
625+
* ];
626+
* ?>
627+
* </code>
628+
*
629+
*/
596630
public function sort(string $key, ?array $options = null): mixed;
597631

632+
/**
633+
* This is simply a read-only variant of the sort command
634+
*
635+
* @see Redis::sort()
636+
*/
637+
public function sort_ro(string $key, ?array $options = null): mixed;
638+
598639
/**
599640
* @deprecated
600641
*/

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: c04531e86379ab5c0de12e8e82868b7c7f024068 */
2+
* Stub hash: 0ff60ed233053935cfc7c5a5ecacd6adaf06a458 */
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, 0, "null")
@@ -804,6 +804,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Redis_sort, 0, 1, IS_MIXED
804804
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
805805
ZEND_END_ARG_INFO()
806806

807+
#define arginfo_class_Redis_sort_ro arginfo_class_Redis_sort
808+
807809
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Redis_sortAsc, 0, 1, IS_ARRAY, 0)
808810
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
809811
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pattern, IS_STRING, 1, "null")
@@ -1286,6 +1288,7 @@ ZEND_METHOD(Redis, sismember);
12861288
ZEND_METHOD(Redis, slaveof);
12871289
ZEND_METHOD(Redis, slowlog);
12881290
ZEND_METHOD(Redis, sort);
1291+
ZEND_METHOD(Redis, sort_ro);
12891292
ZEND_METHOD(Redis, sortAsc);
12901293
ZEND_METHOD(Redis, sortAscAlpha);
12911294
ZEND_METHOD(Redis, sortDesc);
@@ -1532,6 +1535,7 @@ static const zend_function_entry class_Redis_methods[] = {
15321535
ZEND_ME(Redis, slaveof, arginfo_class_Redis_slaveof, ZEND_ACC_PUBLIC)
15331536
ZEND_ME(Redis, slowlog, arginfo_class_Redis_slowlog, ZEND_ACC_PUBLIC)
15341537
ZEND_ME(Redis, sort, arginfo_class_Redis_sort, ZEND_ACC_PUBLIC)
1538+
ZEND_ME(Redis, sort_ro, arginfo_class_Redis_sort_ro, ZEND_ACC_PUBLIC)
15351539
ZEND_ME(Redis, sortAsc, arginfo_class_Redis_sortAsc, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
15361540
ZEND_ME(Redis, sortAscAlpha, arginfo_class_Redis_sortAscAlpha, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
15371541
ZEND_ME(Redis, sortDesc, arginfo_class_Redis_sortDesc, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)

redis_cluster.c

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,28 +1555,12 @@ PHP_METHOD(RedisCluster, bzpopmin) {
15551555

15561556
/* {{{ proto RedisCluster::sort(string key, array options) */
15571557
PHP_METHOD(RedisCluster, sort) {
1558-
redisCluster *c = GET_CONTEXT();
1559-
char *cmd; int cmd_len, have_store; short slot;
1560-
1561-
if (redis_sort_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, c->flags, &have_store,
1562-
&cmd, &cmd_len, &slot, NULL) == FAILURE)
1563-
{
1564-
RETURN_FALSE;
1565-
}
1566-
1567-
if (cluster_send_command(c,slot,cmd,cmd_len) < 0 || c->err != NULL) {
1568-
efree(cmd);
1569-
RETURN_FALSE;
1570-
}
1571-
1572-
efree(cmd);
1558+
CLUSTER_PROCESS_KW_CMD("SORT", redis_sort_cmd, cluster_variant_resp, 0);
1559+
}
15731560

1574-
// Response type differs based on presence of STORE argument
1575-
if (!have_store) {
1576-
cluster_mbulk_resp(INTERNAL_FUNCTION_PARAM_PASSTHRU, c, NULL);
1577-
} else {
1578-
cluster_long_resp(INTERNAL_FUNCTION_PARAM_PASSTHRU, c, NULL);
1579-
}
1561+
/* {{{ proto RedisCluster::sort_ro(string key, array options) */
1562+
PHP_METHOD(RedisCluster, sort_ro) {
1563+
CLUSTER_PROCESS_KW_CMD("SORT_RO", redis_sort_cmd, cluster_variant_resp, 1);
15801564
}
15811565

15821566
/* {{{ proto RedisCluster::object(string subcmd, string key) */

redis_cluster.stub.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,8 +336,16 @@ public function smembers(string $key): RedisCluster|array|false;
336336

337337
public function smove(string $src, string $dst, string $member): RedisCluster|bool;
338338

339+
/**
340+
* @see Redis::sort()
341+
*/
339342
public function sort(string $key, ?array $options = NULL): RedisCluster|array|bool|int|string;
340343

344+
/**
345+
* @see Redis::sort_ro()
346+
*/
347+
public function sort_ro(string $key, ?array $options = NULL): RedisCluster|array|bool|int|string;
348+
341349
public function spop(string $key, int $count = 0): RedisCluster|string|array|false;
342350

343351
public function srandmember(string $key, int $count = 0): RedisCluster|string|array|false;

redis_cluster_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: e761b2a65f9f57254e0201f9643b823e79e2a0a8 */
2+
* Stub hash: 3d10a4c161f9a4bcf65ac9acfebbb86d11f9cf0d */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
55
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 1)
@@ -684,6 +684,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_sort, 0,
684684
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "NULL")
685685
ZEND_END_ARG_INFO()
686686

687+
#define arginfo_class_RedisCluster_sort_ro arginfo_class_RedisCluster_sort
688+
687689
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_spop, 0, 1, RedisCluster, MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_FALSE)
688690
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
689691
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, count, IS_LONG, 0, "0")
@@ -1092,6 +1094,7 @@ ZEND_METHOD(RedisCluster, slowlog);
10921094
ZEND_METHOD(RedisCluster, smembers);
10931095
ZEND_METHOD(RedisCluster, smove);
10941096
ZEND_METHOD(RedisCluster, sort);
1097+
ZEND_METHOD(RedisCluster, sort_ro);
10951098
ZEND_METHOD(RedisCluster, spop);
10961099
ZEND_METHOD(RedisCluster, srandmember);
10971100
ZEND_METHOD(RedisCluster, srem);
@@ -1298,6 +1301,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
12981301
ZEND_ME(RedisCluster, smembers, arginfo_class_RedisCluster_smembers, ZEND_ACC_PUBLIC)
12991302
ZEND_ME(RedisCluster, smove, arginfo_class_RedisCluster_smove, ZEND_ACC_PUBLIC)
13001303
ZEND_ME(RedisCluster, sort, arginfo_class_RedisCluster_sort, ZEND_ACC_PUBLIC)
1304+
ZEND_ME(RedisCluster, sort_ro, arginfo_class_RedisCluster_sort_ro, ZEND_ACC_PUBLIC)
13011305
ZEND_ME(RedisCluster, spop, arginfo_class_RedisCluster_spop, ZEND_ACC_PUBLIC)
13021306
ZEND_ME(RedisCluster, srandmember, arginfo_class_RedisCluster_srandmember, ZEND_ACC_PUBLIC)
13031307
ZEND_ME(RedisCluster, srem, arginfo_class_RedisCluster_srem, 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: e761b2a65f9f57254e0201f9643b823e79e2a0a8 */
2+
* Stub hash: 3d10a4c161f9a4bcf65ac9acfebbb86d11f9cf0d */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
55
ZEND_ARG_INFO(0, name)
@@ -581,6 +581,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster_sort, 0, 0, 1)
581581
ZEND_ARG_INFO(0, options)
582582
ZEND_END_ARG_INFO()
583583

584+
#define arginfo_class_RedisCluster_sort_ro arginfo_class_RedisCluster_sort
585+
584586
#define arginfo_class_RedisCluster_spop arginfo_class_RedisCluster_lpop
585587

586588
#define arginfo_class_RedisCluster_srandmember arginfo_class_RedisCluster_lpop
@@ -944,6 +946,7 @@ ZEND_METHOD(RedisCluster, slowlog);
944946
ZEND_METHOD(RedisCluster, smembers);
945947
ZEND_METHOD(RedisCluster, smove);
946948
ZEND_METHOD(RedisCluster, sort);
949+
ZEND_METHOD(RedisCluster, sort_ro);
947950
ZEND_METHOD(RedisCluster, spop);
948951
ZEND_METHOD(RedisCluster, srandmember);
949952
ZEND_METHOD(RedisCluster, srem);
@@ -1150,6 +1153,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
11501153
ZEND_ME(RedisCluster, smembers, arginfo_class_RedisCluster_smembers, ZEND_ACC_PUBLIC)
11511154
ZEND_ME(RedisCluster, smove, arginfo_class_RedisCluster_smove, ZEND_ACC_PUBLIC)
11521155
ZEND_ME(RedisCluster, sort, arginfo_class_RedisCluster_sort, ZEND_ACC_PUBLIC)
1156+
ZEND_ME(RedisCluster, sort_ro, arginfo_class_RedisCluster_sort_ro, ZEND_ACC_PUBLIC)
11531157
ZEND_ME(RedisCluster, spop, arginfo_class_RedisCluster_spop, ZEND_ACC_PUBLIC)
11541158
ZEND_ME(RedisCluster, srandmember, arginfo_class_RedisCluster_srandmember, ZEND_ACC_PUBLIC)
11551159
ZEND_ME(RedisCluster, srem, arginfo_class_RedisCluster_srem, ZEND_ACC_PUBLIC)

redis_commands.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3535,8 +3535,7 @@ int redis_zincrby_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
35353535

35363536
/* SORT */
35373537
int redis_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
3538-
int *using_store, char **cmd, int *cmd_len, short *slot,
3539-
void **ctx)
3538+
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx)
35403539
{
35413540
zval *z_opts=NULL, *z_ele, z_argv;
35423541
char *key;
@@ -3551,16 +3550,10 @@ int redis_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
35513550
return FAILURE;
35523551
}
35533552

3554-
// Default that we're not using store
3555-
*using_store = 0;
3556-
35573553
// If we don't have an options array, the command is quite simple
35583554
if (!z_opts || zend_hash_num_elements(Z_ARRVAL_P(z_opts)) == 0) {
35593555
// Construct command
3560-
*cmd_len = REDIS_CMD_SPPRINTF(cmd, "SORT", "k", key, key_len);
3561-
3562-
/* Not storing */
3563-
*using_store = 0;
3556+
*cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "k", key, key_len);
35643557

35653558
return SUCCESS;
35663559
}
@@ -3627,7 +3620,7 @@ int redis_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
36273620
add_next_index_stringl(&z_argv, Z_STRVAL_P(z_ele), Z_STRLEN_P(z_ele));
36283621

36293622
// We are using STORE
3630-
*using_store = 1;
3623+
*ctx = PHPREDIS_CTX_PTR;
36313624
}
36323625

36333626
// GET option
@@ -3725,8 +3718,7 @@ int redis_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
37253718

37263719
// Start constructing our command
37273720
HashTable *ht_argv = Z_ARRVAL_P(&z_argv);
3728-
redis_cmd_init_sstr(&cmdstr, zend_hash_num_elements(ht_argv), "SORT",
3729-
sizeof("SORT")-1);
3721+
redis_cmd_init_sstr(&cmdstr, zend_hash_num_elements(ht_argv), kw, strlen(kw));
37303722

37313723
// Iterate through our arguments
37323724
ZEND_HASH_FOREACH_VAL(ht_argv, z_ele) {

redis_commands.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,6 @@ int redis_srandmember_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
264264
int redis_zincrby_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
265265
char **cmd, int *cmd_len, short *slot, void **ctx);
266266

267-
int redis_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
268-
int *using_store, char **cmd, int *cmd_len, short *slot, void **ctx);
269-
270267
int redis_hdel_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
271268
char **cmd, int *cmd_len, short *slot, void **ctx);
272269

@@ -365,6 +362,9 @@ int redis_sentinel_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
365362
int redis_sentinel_str_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
366363
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx);
367364

365+
int redis_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
366+
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx);
367+
368368
/* Commands that don't communicate with Redis at all (such as getOption,
369369
* setOption, _prefix, _serialize, etc). These can be handled in one place
370370
* with the method of grabbing our RedisSock* object in different ways

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: c04531e86379ab5c0de12e8e82868b7c7f024068 */
2+
* Stub hash: 0ff60ed233053935cfc7c5a5ecacd6adaf06a458 */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
55
ZEND_ARG_INFO(0, options)
@@ -678,6 +678,8 @@ ZEND_END_ARG_INFO()
678678

679679
#define arginfo_class_Redis_sort arginfo_class_Redis_getEx
680680

681+
#define arginfo_class_Redis_sort_ro arginfo_class_Redis_getEx
682+
681683
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis_sortAsc, 0, 0, 1)
682684
ZEND_ARG_INFO(0, key)
683685
ZEND_ARG_INFO(0, pattern)
@@ -1118,6 +1120,7 @@ ZEND_METHOD(Redis, sismember);
11181120
ZEND_METHOD(Redis, slaveof);
11191121
ZEND_METHOD(Redis, slowlog);
11201122
ZEND_METHOD(Redis, sort);
1123+
ZEND_METHOD(Redis, sort_ro);
11211124
ZEND_METHOD(Redis, sortAsc);
11221125
ZEND_METHOD(Redis, sortAscAlpha);
11231126
ZEND_METHOD(Redis, sortDesc);
@@ -1364,6 +1367,7 @@ static const zend_function_entry class_Redis_methods[] = {
13641367
ZEND_ME(Redis, slaveof, arginfo_class_Redis_slaveof, ZEND_ACC_PUBLIC)
13651368
ZEND_ME(Redis, slowlog, arginfo_class_Redis_slowlog, ZEND_ACC_PUBLIC)
13661369
ZEND_ME(Redis, sort, arginfo_class_Redis_sort, ZEND_ACC_PUBLIC)
1370+
ZEND_ME(Redis, sort_ro, arginfo_class_Redis_sort_ro, ZEND_ACC_PUBLIC)
13671371
ZEND_ME(Redis, sortAsc, arginfo_class_Redis_sortAsc, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
13681372
ZEND_ME(Redis, sortAscAlpha, arginfo_class_Redis_sortAscAlpha, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
13691373
ZEND_ME(Redis, sortDesc, arginfo_class_Redis_sortDesc, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)

0 commit comments

Comments
 (0)