Skip to content

Commit 66ad52d

Browse files
addressing comments
Signed-off-by: Sarthak Aggarwal <[email protected]>
1 parent e3b4777 commit 66ad52d

File tree

4 files changed

+40
-39
lines changed

4 files changed

+40
-39
lines changed

src/commands.def

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10632,6 +10632,7 @@ commandHistory SET_History[] = {
1063210632
{"6.0.0","Added the `KEEPTTL` option."},
1063310633
{"6.2.0","Added the `GET`, `EXAT` and `PXAT` option."},
1063410634
{"7.0.0","Allowed the `NX` and `GET` options to be used together."},
10635+
{"8.1.0","Added the `IFEQ` option."},
1063510636
};
1063610637
#endif
1063710638

@@ -10649,8 +10650,9 @@ keySpec SET_Keyspecs[1] = {
1064910650

1065010651
/* SET condition argument table */
1065110652
struct COMMAND_ARG SET_condition_Subargs[] = {
10652-
{MAKE_ARG("nx",ARG_TYPE_PURE_TOKEN,-1,"NX",NULL,NULL,CMD_ARG_NONE,0,NULL)},
10653-
{MAKE_ARG("xx",ARG_TYPE_PURE_TOKEN,-1,"XX",NULL,NULL,CMD_ARG_NONE,0,NULL)},
10653+
{MAKE_ARG("nx",ARG_TYPE_PURE_TOKEN,-1,"NX",NULL,"2.6.12",CMD_ARG_NONE,0,NULL)},
10654+
{MAKE_ARG("xx",ARG_TYPE_PURE_TOKEN,-1,"XX",NULL,"2.6.12",CMD_ARG_NONE,0,NULL)},
10655+
{MAKE_ARG("comparison-value",ARG_TYPE_STRING,-1,"IFEQ","Sets the key's value only if the current value matches the specified comparison value.","8.1.0",CMD_ARG_OPTIONAL,0,NULL)},
1065410656
};
1065510657

1065610658
/* SET expiration argument table */
@@ -10666,8 +10668,7 @@ struct COMMAND_ARG SET_expiration_Subargs[] = {
1066610668
struct COMMAND_ARG SET_Args[] = {
1066710669
{MAKE_ARG("key",ARG_TYPE_KEY,0,NULL,NULL,NULL,CMD_ARG_NONE,0,NULL)},
1066810670
{MAKE_ARG("value",ARG_TYPE_STRING,-1,NULL,NULL,NULL,CMD_ARG_NONE,0,NULL)},
10669-
{MAKE_ARG("comparison-value",ARG_TYPE_STRING,-1,"IFEQ","Sets the key's value only if the current value matches the specified comparison value.",NULL,CMD_ARG_OPTIONAL,0,NULL)},
10670-
{MAKE_ARG("condition",ARG_TYPE_ONEOF,-1,NULL,NULL,"2.6.12",CMD_ARG_OPTIONAL,2,NULL),.subargs=SET_condition_Subargs},
10671+
{MAKE_ARG("condition",ARG_TYPE_ONEOF,-1,NULL,NULL,NULL,CMD_ARG_OPTIONAL,3,NULL),.subargs=SET_condition_Subargs},
1067110672
{MAKE_ARG("get",ARG_TYPE_PURE_TOKEN,-1,"GET",NULL,"6.2.0",CMD_ARG_OPTIONAL,0,NULL)},
1067210673
{MAKE_ARG("expiration",ARG_TYPE_ONEOF,-1,NULL,NULL,NULL,CMD_ARG_OPTIONAL,5,NULL),.subargs=SET_expiration_Subargs},
1067310674
};
@@ -11140,7 +11141,7 @@ struct COMMAND_STRUCT serverCommandTable[] = {
1114011141
{MAKE_CMD("mset","Atomically creates or modifies the string values of one or more keys.","O(N) where N is the number of keys to set.","1.0.1",CMD_DOC_NONE,NULL,NULL,"string",COMMAND_GROUP_STRING,MSET_History,0,MSET_Tips,2,msetCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,MSET_Keyspecs,1,NULL,1),.args=MSET_Args},
1114111142
{MAKE_CMD("msetnx","Atomically modifies the string values of one or more keys only when all keys don't exist.","O(N) where N is the number of keys to set.","1.0.1",CMD_DOC_NONE,NULL,NULL,"string",COMMAND_GROUP_STRING,MSETNX_History,0,MSETNX_Tips,0,msetnxCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,MSETNX_Keyspecs,1,NULL,1),.args=MSETNX_Args},
1114211143
{MAKE_CMD("psetex","Sets both string value and expiration time in milliseconds of a key. The key is created if it doesn't exist.","O(1)","2.6.0",CMD_DOC_DEPRECATED,"`SET` with the `PX` argument","2.6.12","string",COMMAND_GROUP_STRING,PSETEX_History,0,PSETEX_Tips,0,psetexCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,PSETEX_Keyspecs,1,NULL,3),.args=PSETEX_Args},
11143-
{MAKE_CMD("set","Sets the string value of a key, ignoring its type. The key is created if it doesn't exist.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,"string",COMMAND_GROUP_STRING,SET_History,4,SET_Tips,0,setCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,SET_Keyspecs,1,setGetKeys,6),.args=SET_Args},
11144+
{MAKE_CMD("set","Sets the string value of a key, ignoring its type. The key is created if it doesn't exist.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,"string",COMMAND_GROUP_STRING,SET_History,5,SET_Tips,0,setCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,SET_Keyspecs,1,setGetKeys,5),.args=SET_Args},
1114411145
{MAKE_CMD("setex","Sets the string value and expiration time of a key. Creates the key if it doesn't exist.","O(1)","2.0.0",CMD_DOC_DEPRECATED,"`SET` with the `EX` argument","2.6.12","string",COMMAND_GROUP_STRING,SETEX_History,0,SETEX_Tips,0,setexCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,SETEX_Keyspecs,1,NULL,3),.args=SETEX_Args},
1114511146
{MAKE_CMD("setnx","Set the string value of a key only when the key doesn't exist.","O(1)","1.0.0",CMD_DOC_DEPRECATED,"`SET` with the `NX` argument","2.6.12","string",COMMAND_GROUP_STRING,SETNX_History,0,SETNX_Tips,0,setnxCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,SETNX_Keyspecs,1,NULL,2),.args=SETNX_Args},
1114611147
{MAKE_CMD("setrange","Overwrites a part of a string value with another by an offset. Creates the key if it doesn't exist.","O(1), not counting the time taken to copy the new string in place. Usually, this string is very small so the amortized complexity is O(1). Otherwise, complexity is O(M) with M being the length of the value argument.","2.2.0",CMD_DOC_NONE,NULL,NULL,"string",COMMAND_GROUP_STRING,SETRANGE_History,0,SETRANGE_Tips,0,setrangeCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,SETRANGE_Keyspecs,1,NULL,3),.args=SETRANGE_Args},

src/commands/set.json

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"Allowed the `NX` and `GET` options to be used together."
2626
],
2727
[
28-
"8.2.0",
28+
"8.1.0",
2929
"Added the `IFEQ` option."
3030
]
3131
],
@@ -89,36 +89,37 @@
8989
"name": "value",
9090
"type": "string"
9191
},
92-
{
93-
"name": "comparison-value",
94-
"type": "string",
95-
"token": "IFEQ",
96-
"since": "8.2.0",
97-
"optional": true,
98-
"summary": "Sets the key's value only if the current value matches the specified comparison value.",
99-
"arguments": [
100-
{
101-
"name": "comparison-value",
102-
"type": "string",
103-
"summary": "The value to compare with the current key's value before setting."
104-
}
105-
]
106-
},
10792
{
10893
"name": "condition",
10994
"type": "oneof",
11095
"optional": true,
111-
"since": "2.6.12",
11296
"arguments": [
11397
{
11498
"name": "nx",
11599
"type": "pure-token",
116-
"token": "NX"
100+
"token": "NX",
101+
"since": "2.6.12"
117102
},
118103
{
119104
"name": "xx",
120105
"type": "pure-token",
121-
"token": "XX"
106+
"token": "XX",
107+
"since": "2.6.12"
108+
},
109+
{
110+
"name": "comparison-value",
111+
"type": "string",
112+
"token": "IFEQ",
113+
"since": "8.1.0",
114+
"optional": true,
115+
"summary": "Sets the key's value only if the current value matches the specified comparison value.",
116+
"arguments": [
117+
{
118+
"name": "comparison-value",
119+
"type": "string",
120+
"summary": "The value to compare with the current key's value before setting."
121+
}
122+
]
122123
}
123124
]
124125
},

src/t_string.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ int parseExtendedStringArgumentsOrReply(client *c, int *flags, int *unit, robj *
337337
}
338338

339339
/* SET key value [NX] [XX] [KEEPTTL] [GET] [EX <seconds>] [PX <milliseconds>]
340-
* [EXAT <seconds-timestamp>][PXAT <milliseconds-timestamp>] [IFEQ <comparison-value>] */
340+
* [EXAT <seconds-timestamp>][PXAT <milliseconds-timestamp>] [IFEQ comparison-value] */
341341
void setCommand(client *c) {
342342
robj *expire = NULL;
343343
robj *comparison = NULL;
@@ -407,11 +407,10 @@ void getCommand(client *c) {
407407
*/
408408
void getexCommand(client *c) {
409409
robj *expire = NULL;
410-
robj *comparison = NULL;
411410
int unit = UNIT_SECONDS;
412411
int flags = OBJ_NO_FLAGS;
413412

414-
if (parseExtendedStringArgumentsOrReply(c, &flags, &unit, &expire, &comparison, COMMAND_GET) != C_OK) {
413+
if (parseExtendedStringArgumentsOrReply(c, &flags, &unit, &expire, NULL, COMMAND_GET) != C_OK) {
415414
return;
416415
}
417416

tests/assets/test_cli_hint_suite.txt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,18 @@
6868
"ZRANGE k 1 2 WITHSCORES " "[BYSCORE|BYLEX] [REV] [LIMIT offset count]"
6969

7070
# Optional one-of args with parameters: SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
71-
"SET key value " "[IFEQ comparison-value] [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
72-
"SET key value EX" "[IFEQ comparison-value] [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
73-
"SET key value EX " "seconds [IFEQ comparison-value] [NX|XX] [GET]"
74-
"SET key value EX 23 " "[IFEQ comparison-value] [NX|XX] [GET]"
75-
"SET key value EXAT" "[IFEQ comparison-value] [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
76-
"SET key value EXAT " "unix-time-seconds [IFEQ comparison-value] [NX|XX] [GET]"
77-
"SET key value PX" "[IFEQ comparison-value] [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
78-
"SET key value PX " "milliseconds [IFEQ comparison-value] [NX|XX] [GET]"
79-
"SET key value PXAT" "[IFEQ comparison-value] [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
80-
"SET key value PXAT " "unix-time-milliseconds [IFEQ comparison-value] [NX|XX] [GET]"
81-
"SET key value KEEPTTL " "[IFEQ comparison-value] [NX|XX] [GET]"
82-
"SET key value XX " "[IFEQ comparison-value] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
71+
"SET key value " "[NX|XX|[IFEQ comparison-value]] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
72+
"SET key value EX" "[NX|XX|[IFEQ comparison-value]] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
73+
"SET key value EX " "seconds [NX|XX|[IFEQ comparison-value]] [GET]"
74+
"SET key value EX 23 " "[NX|XX|[IFEQ comparison-value]] [GET]"
75+
"SET key value EXAT" "[NX|XX|[IFEQ comparison-value]] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
76+
"SET key value EXAT " "unix-time-seconds [NX|XX|[IFEQ comparison-value]] [GET]"
77+
"SET key value PX" "[NX|XX|[IFEQ comparison-value]] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
78+
"SET key value PX " "milliseconds [NX|XX|[IFEQ comparison-value]] [GET]"
79+
"SET key value PXAT" "[NX|XX|[IFEQ comparison-value]] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
80+
"SET key value PXAT " "unix-time-milliseconds [NX|XX|[IFEQ comparison-value]] [GET]"
81+
"SET key value KEEPTTL " "[NX|XX|[IFEQ comparison-value]] [GET]"
82+
"SET key value XX " "[GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]"
8383

8484
# If an input word can't be matched, stop hinting.
8585
"SET key value FOOBAR " ""

0 commit comments

Comments
 (0)