Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichael-grunder <michael.grunder@gmail.com>2017-04-29 01:56:07 +0300
committermichael-grunder <michael.grunder@gmail.com>2017-04-29 01:56:07 +0300
commitb3d00dd3902eac1a76404329974e90207e2ff181 (patch)
tree9cdd30a5f9e5206d3d5f0bfc46fcafd2578aa782 /redis_commands.c
parent0eaeae0f4678243a158287582ad09f68b756846b (diff)
Replace redis_cmd_format_static with redis_spprintf
Diffstat (limited to 'redis_commands.c')
-rw-r--r--redis_commands.c116
1 files changed, 61 insertions, 55 deletions
diff --git a/redis_commands.c b/redis_commands.c
index d1a69ab6..dbe7b703 100644
--- a/redis_commands.c
+++ b/redis_commands.c
@@ -25,6 +25,12 @@
#include "redis_commands.h"
#include <zend_exceptions.h>
+/* Local passthrough macro for command construction. Given that these methods
+ * are generic (so they work whether the caller is Redis or RedisCluster) we
+ * will always have redis_sock, slot*, and TSRMLS_CC */
+#define REDIS_CMD_SPPRINTF(ret, kw, fmt, ...) \
+ redis_spprintf(redis_sock, slot TSRMLS_CC, ret, kw, fmt, ##__VA_ARGS__)
+
/* Generic commands based on method signature and what kind of things we're
* processing. Lots of Redis commands take something like key, value, or
* key, value long. Each unique signature like this is written only once */
@@ -34,7 +40,7 @@ int redis_empty_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char *kw, char **cmd, int *cmd_len, short *slot,
void **ctx)
{
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "");
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "");
return SUCCESS;
}
@@ -98,7 +104,7 @@ int redis_str_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, char *kw,
}
// Build the command without molesting the string
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "s", arg, arg_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "s", arg, arg_len);
return SUCCESS;
}
@@ -119,7 +125,7 @@ int redis_key_long_val_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "klv", key, key_len, expire, z_val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "klv", key, key_len, expire, z_val);
return SUCCESS;
}
@@ -139,7 +145,7 @@ int redis_key_long_str_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kds", key, key_len, (int)lval, val, val_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kds", key, key_len, (int)lval, val, val_len);
return SUCCESS;
}
@@ -159,7 +165,7 @@ int redis_kv_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kv", key, key_len, z_val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kv", key, key_len, z_val);
return SUCCESS;
}
@@ -179,7 +185,7 @@ int redis_key_str_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
// Construct command
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "ks", key, key_len, val, val_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "ks", key, key_len, val, val_len);
return SUCCESS;
}
@@ -198,7 +204,7 @@ int redis_key_str_str_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kss", k, klen, v1, v1len, v2, v2len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kss", k, klen, v1, v1len, v2, v2len);
// Success!
return SUCCESS;
@@ -243,7 +249,7 @@ int redis_key_key_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
/* Send keys as normal strings because we manually prefixed to check against
* cross slot error. */
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "ss", k1, k1len, k2, k2len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "ss", k1, k1len, k2, k2len);
/* Clean keys up if we prefixed */
if (k1free) efree(k1);
@@ -267,7 +273,7 @@ int redis_key_long_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kl", key, keylen, lval);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kl", key, keylen, lval);
// Success!
return SUCCESS;
@@ -288,7 +294,7 @@ int redis_key_long_long_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kll", key, key_len, val1, val2);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kll", key, key_len, val1, val2);
return SUCCESS;
}
@@ -307,7 +313,7 @@ int redis_key_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "k", key, key_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "k", key, key_len);
return SUCCESS;
}
@@ -327,7 +333,7 @@ int redis_key_dbl_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kf", key, key_len, val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kf", key, key_len, val);
return SUCCESS;
}
@@ -387,10 +393,10 @@ int redis_zrange_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
if(ws) {
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kdds", key, key_len, start, end,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kdds", key, key_len, start, end,
"WITHSCORES", sizeof("WITHSCORES") - 1);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kdd", key, key_len, start, end);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kdd", key, key_len, start, end);
}
// Push out WITHSCORES option
@@ -457,19 +463,19 @@ int redis_zrangebyscore_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// Construct our command
if (*withscores) {
if (has_limit) {
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "ksssdds", key, key_len,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "ksssdds", key, key_len,
start, start_len, end, end_len, "LIMIT", 5, offset, count,
"WITHSCORES", 10);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "ksss", key, key_len, start,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "ksss", key, key_len, start,
start_len, end, end_len, "WITHSCORES", 10);
}
} else {
if (has_limit) {
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "ksssdd", key, key_len, start,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "ksssdd", key, key_len, start,
start_len, end, end_len, "LIMIT", 5, offset, count);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kss", key, key_len, start,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kss", key, key_len, start,
start_len, end, end_len);
}
}
@@ -760,10 +766,10 @@ int redis_zrangebylex_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
/* Construct command */
if (argc == 3) {
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kss", key, key_len, min, min_len,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kss", key, key_len, min, min_len,
max, max_len);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "ksssll", key, key_len, min, min_len,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "ksssll", key, key_len, min, min_len,
max, max_len, "LIMIT", 5, offset, count);
}
@@ -795,7 +801,7 @@ int redis_gen_zlex_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
/* Construct command */
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "kss", key, key_len, min, min_len,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "kss", key, key_len, min, min_len,
max, max_len);
return SUCCESS;
@@ -1161,23 +1167,23 @@ int redis_set_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
/* Now let's construct the command we want */
if(exp_type && set_type) {
/* SET <key> <value> NX|XX PX|EX <timeout> */
- *cmd_len = REDIS_SPPRINTF(cmd, "SET", "kvsls", key, key_len, z_value,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SET", "kvsls", key, key_len, z_value,
exp_type, 2, expire, set_type, 2);
} else if(exp_type) {
/* SET <key> <value> PX|EX <timeout> */
- *cmd_len = REDIS_SPPRINTF(cmd, "SET", "kvsl", key, key_len, z_value,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SET", "kvsl", key, key_len, z_value,
exp_type, 2, expire);
} else if(set_type) {
/* SET <key> <value> NX|XX */
- *cmd_len = REDIS_SPPRINTF(cmd, "SET", "kvs", key, key_len, z_value,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SET", "kvs", key, key_len, z_value,
set_type, 2);
} else if(expire > 0) {
/* Backward compatible SETEX redirection */
- *cmd_len = REDIS_SPPRINTF(cmd, "SETEX", "klv", key, key_len, expire,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SETEX", "klv", key, key_len, expire,
z_value);
} else {
/* SET <key> <value> */
- *cmd_len = REDIS_SPPRINTF(cmd, "SET", "kv", key, key_len, z_value);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SET", "kv", key, key_len, z_value);
}
return SUCCESS;
@@ -1221,10 +1227,10 @@ int redis_brpoplpush_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// Consistency with Redis, if timeout < 0 use RPOPLPUSH
if(timeout < 0) {
- *cmd_len = REDIS_SPPRINTF(cmd, "RPOPLPUSH", "ss", key1, key1_len,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "RPOPLPUSH", "ss", key1, key1_len,
key2, key2_len);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, "BRPOPLPUSH", "ssd", key1, key1_len,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "BRPOPLPUSH", "ssd", key1, key1_len,
key2, key2_len, timeout);
}
@@ -1259,15 +1265,15 @@ redis_atomic_increment(INTERNAL_FUNCTION_PARAMETERS, int type,
* an INCRBY or DECRBY call */
if (type == TYPE_INCR) {
if (val == 1) {
- *cmd_len = REDIS_SPPRINTF(cmd, "INCR", "k", key, key_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "INCR", "k", key, key_len);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, "INCRBY", "kl", key, key_len, val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "INCRBY", "kl", key, key_len, val);
}
} else {
if (val == 1) {
- *cmd_len = REDIS_SPPRINTF(cmd, "DECR", "k", key, key_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "DECR", "k", key, key_len);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, "DECRBY", "kl", key, key_len, val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "DECRBY", "kl", key, key_len, val);
}
}
@@ -1306,7 +1312,7 @@ int redis_hincrby_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
// Construct command
- *cmd_len = REDIS_SPPRINTF(cmd, "HINCRBY", "ksl", key, key_len, mem, mem_len, byval);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "HINCRBY", "ksl", key, key_len, mem, mem_len, byval);
// Success
return SUCCESS;
@@ -1327,7 +1333,7 @@ int redis_hincrbyfloat_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
// Construct command
- *cmd_len = REDIS_SPPRINTF(cmd, "HINCRBYFLOAT", "ksf", key, key_len, mem,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "HINCRBYFLOAT", "ksf", key, key_len, mem,
mem_len, byval);
// Success
@@ -1508,7 +1514,7 @@ redis_hstrlen_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, "HSTRLEN", "ks", key, key_len, field, field_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "HSTRLEN", "ks", key, key_len, field, field_len);
return SUCCESS;
}
@@ -1536,12 +1542,12 @@ int redis_bitpos_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// Construct command based on arg count
if(argc == 2) {
- *cmd_len = REDIS_SPPRINTF(cmd, "BITPOS", "kd", key, key_len, bit);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "BITPOS", "kd", key, key_len, bit);
} else if(argc == 3) {
- *cmd_len = REDIS_SPPRINTF(cmd, "BITPOS", "kdd", key, key_len, bit,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "BITPOS", "kdd", key, key_len, bit,
start);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, "BITPOS", "kddd", key, key_len, bit,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "BITPOS", "kddd", key, key_len, bit,
start, end);
}
@@ -1631,7 +1637,7 @@ int redis_bitcount_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, "BITCOUNT", "kdd", key, key_len,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "BITCOUNT", "kdd", key, key_len,
(int)start, (int)end);
return SUCCESS;
@@ -1842,7 +1848,7 @@ int redis_auth_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
// Construct our AUTH command
- *cmd_len = REDIS_SPPRINTF(cmd, "AUTH", "s", pw, pw_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "AUTH", "s", pw, pw_len);
// Free previously allocated password, and update
if(redis_sock->auth) efree(redis_sock->auth);
@@ -1874,7 +1880,7 @@ int redis_setbit_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, "SETBIT", "kld", key, key_len, offset, (int)val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SETBIT", "kld", key, key_len, offset, (int)val);
return SUCCESS;
}
@@ -1901,7 +1907,7 @@ int redis_linsert_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
/* Construct command */
- *cmd_len = REDIS_SPPRINTF(cmd, "LINSERT", "ksvv", key, key_len, pos,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "LINSERT", "ksvv", key, key_len, pos,
pos_len, z_pivot, z_val);
// Success
@@ -1924,7 +1930,7 @@ int redis_lrem_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
/* Construct command */
- *cmd_len = REDIS_SPPRINTF(cmd, "LREM", "kdv", key, key_len, count, z_val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "LREM", "kdv", key, key_len, count, z_val);
// Success!
return SUCCESS;
@@ -1962,7 +1968,7 @@ int redis_smove_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
// Construct command
- *cmd_len = REDIS_SPPRINTF(cmd, "SMOVE", "ssv", src, src_len, dst,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SMOVE", "ssv", src, src_len, dst,
dst_len, z_val);
// Cleanup
@@ -1988,7 +1994,7 @@ static int gen_hset_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
/* Construct command */
- *cmd_len = REDIS_SPPRINTF(cmd, kw, "ksv", key, key_len, mem, mem_len, z_val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, kw, "ksv", key, key_len, mem, mem_len, z_val);
// Success
return SUCCESS;
@@ -2030,9 +2036,9 @@ int redis_srandmember_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// Two args means we have the optional COUNT
if (*have_count) {
- *cmd_len = REDIS_SPPRINTF(cmd, "SRANDMEMBER", "kl", key, key_len, count);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SRANDMEMBER", "kl", key, key_len, count);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, "SRANDMEMBER", "k", key, key_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SRANDMEMBER", "k", key, key_len);
}
return SUCCESS;
@@ -2053,7 +2059,7 @@ int redis_zincrby_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
- *cmd_len = REDIS_SPPRINTF(cmd, "ZINCRBY", "kfv", key, key_len, incrby, z_val);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "ZINCRBY", "kfv", key, key_len, incrby, z_val);
return SUCCESS;
}
@@ -2082,7 +2088,7 @@ int redis_sort_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
// If we don't have an options array, the command is quite simple
if (!z_opts || zend_hash_num_elements(Z_ARRVAL_P(z_opts)) == 0) {
// Construct command
- *cmd_len = REDIS_SPPRINTF(cmd, "SORT", "k", key, key_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "SORT", "k", key, key_len);
/* Not storing */
*using_store = 0;
@@ -2464,7 +2470,7 @@ int redis_object_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
// Format our command
- *cmd_len = REDIS_SPPRINTF(cmd, "OBJECT", "sk", subcmd, subcmd_len, key, key_len);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "OBJECT", "sk", subcmd, subcmd_len, key, key_len);
// Push the reply type to our caller
if(subcmd_len == 8 && (!strncasecmp(subcmd,"refcount",8) ||
@@ -2500,10 +2506,10 @@ int redis_geodist_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
/* Construct command */
if (unit != NULL) {
- *cmd_len = REDIS_SPPRINTF(cmd, "GEODIST", "ksss", key, keylen, source,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "GEODIST", "ksss", key, keylen, source,
sourcelen, dest, destlen, unit, unitlen);
} else {
- *cmd_len = REDIS_SPPRINTF(cmd, "GEODIST", "kss", key, keylen, source,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "GEODIST", "kss", key, keylen, source,
sourcelen, dest, destlen);
}
@@ -2873,14 +2879,14 @@ int redis_command_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
/* Construct our command */
if(!kw) {
- *cmd_len = REDIS_SPPRINTF(cmd, "COMMAND", "");
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "COMMAND", "");
} else if (!z_arg) {
/* Sanity check */
if (strncasecmp(kw, "count", sizeof("count") - 1)) {
return FAILURE;
}
/* COMMAND COUNT */
- *cmd_len = REDIS_SPPRINTF(cmd, "COMMAND", "s", "COUNT", sizeof("COUNT") - 1);
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "COMMAND", "s", "COUNT", sizeof("COUNT") - 1);
} else if (Z_TYPE_P(z_arg) == IS_STRING) {
/* Sanity check */
if (strncasecmp(kw, "info", sizeof("info") - 1)) {
@@ -2888,7 +2894,7 @@ int redis_command_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
}
/* COMMAND INFO <cmd> */
- *cmd_len = REDIS_SPPRINTF(cmd, "COMMAND", "ss", "INFO", sizeof("INFO") - 1,
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "COMMAND", "ss", "INFO", sizeof("INFO") - 1,
Z_STRVAL_P(z_arg), Z_STRLEN_P(z_arg));
} else {
int arr_len;