Skip to content

Commit 97b0be9

Browse files
Modern command construction for SCRIPT
1 parent f880655 commit 97b0be9

File tree

1 file changed

+22
-30
lines changed

1 file changed

+22
-30
lines changed

redis.c

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2828,25 +2828,23 @@ PHP_METHOD(Redis, evalsha) {
28282828

28292829
PHP_REDIS_API int
28302830
redis_build_script_exists_cmd(char **ret, zval *argv, int argc) {
2831-
/* Our command length and iterator */
2832-
int cmd_len = 0, i;
2831+
smart_string cmd = {0};
2832+
zend_string *zstr;
2833+
int i;
28332834

28342835
// Start building our command
2835-
cmd_len = redis_cmd_format_header(ret, "SCRIPT", argc + 1);
2836-
cmd_len = redis_cmd_append_str(ret, cmd_len, "EXISTS", 6);
2837-
2838-
/* Iterate our arguments */
2839-
for(i=0;i<argc;i++) {
2840-
zend_string *zstr = zval_get_string(&argv[i]);
2841-
2842-
// Append this script sha to our SCRIPT EXISTS command
2843-
cmd_len = redis_cmd_append_str(ret, cmd_len, zstr->val, zstr->len);
2836+
REDIS_CMD_INIT_SSTR_STATIC(&cmd, 1 + argc, "SCRIPT");
2837+
redis_cmd_append_sstr(&cmd, "EXISTS", 6);
28442838

2839+
for (i = 0; i < argc; i++) {
2840+
zstr = zval_get_string(&argv[i]);
2841+
redis_cmd_append_sstr(&cmd, zstr->val, zstr->len);
28452842
zend_string_release(zstr);
28462843
}
28472844

28482845
/* Success */
2849-
return cmd_len;
2846+
*ret = cmd.c;
2847+
return cmd.len;
28502848
}
28512849

28522850
/* {{{ proto status Redis::script('flush')
@@ -3275,12 +3273,13 @@ PHP_REDIS_API int
32753273
redis_build_scan_cmd(char **cmd, REDIS_SCAN_TYPE type, char *key, int key_len,
32763274
int iter, char *pattern, int pattern_len, int count)
32773275
{
3276+
smart_string cmdstr = {0};
32783277
char *keyword;
3279-
int arg_count, cmd_len;
3278+
int argc;
32803279

32813280
/* Count our arguments +1 for key if it's got one, and + 2 for pattern */
32823281
/* or count given that they each carry keywords with them. */
3283-
arg_count = 1 + (key_len>0) + (pattern_len>0?2:0) + (count>0?2:0);
3282+
argc = 1 + (key_len > 0) + (pattern_len > 0 ? 2 : 0) + (count > 0 ? 2 : 0);
32843283

32853284
/* Turn our type into a keyword */
32863285
switch(type) {
@@ -3300,32 +3299,25 @@ redis_build_scan_cmd(char **cmd, REDIS_SCAN_TYPE type, char *key, int key_len,
33003299
}
33013300

33023301
/* Start the command */
3303-
cmd_len = redis_cmd_format_header(cmd, keyword, arg_count);
3304-
3305-
/* Add the key in question if we have one */
3306-
if(key_len) {
3307-
cmd_len = redis_cmd_append_str(cmd, cmd_len, key, key_len);
3308-
}
3309-
3310-
/* Add our iterator */
3311-
cmd_len = redis_cmd_append_int(cmd, cmd_len, iter);
3302+
redis_cmd_init_sstr(&cmdstr, argc, keyword, strlen(keyword));
3303+
if (key_len) redis_cmd_append_sstr(&cmdstr, key, key_len);
3304+
redis_cmd_append_sstr_int(&cmdstr, iter);
33123305

33133306
/* Append COUNT if we've got it */
33143307
if(count) {
3315-
cmd_len = redis_cmd_append_str(cmd, cmd_len, "COUNT",
3316-
sizeof("COUNT")-1);
3317-
cmd_len = redis_cmd_append_int(cmd, cmd_len, count);
3308+
REDIS_CMD_APPEND_SSTR_STATIC(&cmdstr, "COUNT");
3309+
redis_cmd_append_sstr_int(&cmdstr, count);
33183310
}
33193311

33203312
/* Append MATCH if we've got it */
33213313
if(pattern_len) {
3322-
cmd_len = redis_cmd_append_str(cmd, cmd_len, "MATCH",
3323-
sizeof("MATCH")-1);
3324-
cmd_len = redis_cmd_append_str(cmd, cmd_len, pattern, pattern_len);
3314+
REDIS_CMD_APPEND_SSTR_STATIC(&cmdstr, "MATCH");
3315+
redis_cmd_append_sstr(&cmdstr, pattern, pattern_len);
33253316
}
33263317

33273318
/* Return our command length */
3328-
return cmd_len;
3319+
*cmd = cmdstr.c;
3320+
return cmdstr.len;
33293321
}
33303322

33313323
/* {{{ proto redis::scan(&$iterator, [pattern, [count]]) */

0 commit comments

Comments
 (0)