* POSSIBILITY OF SUCH DAMAGE.
*/
+#include "fmacros.h"
+
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define REDIS_CMD_INLINE 1
#define REDIS_CMD_BULK 2
+#define REDIS_CMD_MULTIBULK 3
#define REDIS_NOTUSED(V) ((void) V)
{"get",2,REDIS_CMD_INLINE},
{"set",3,REDIS_CMD_BULK},
{"setnx",3,REDIS_CMD_BULK},
- {"del",2,REDIS_CMD_INLINE},
+ {"del",-2,REDIS_CMD_INLINE},
{"exists",2,REDIS_CMD_INLINE},
{"incr",2,REDIS_CMD_INLINE},
{"decr",2,REDIS_CMD_INLINE},
{"lrem",4,REDIS_CMD_BULK},
{"sadd",3,REDIS_CMD_BULK},
{"srem",3,REDIS_CMD_BULK},
+ {"smove",4,REDIS_CMD_BULK},
{"sismember",3,REDIS_CMD_BULK},
{"scard",2,REDIS_CMD_INLINE},
+ {"spop",2,REDIS_CMD_INLINE},
+ {"srandmember",2,REDIS_CMD_INLINE},
{"sinter",-2,REDIS_CMD_INLINE},
{"sinterstore",-3,REDIS_CMD_INLINE},
+ {"sunion",-2,REDIS_CMD_INLINE},
+ {"sunionstore",-3,REDIS_CMD_INLINE},
+ {"sdiff",-2,REDIS_CMD_INLINE},
+ {"sdiffstore",-3,REDIS_CMD_INLINE},
{"smembers",2,REDIS_CMD_INLINE},
+ {"zadd",4,REDIS_CMD_BULK},
{"incrby",3,REDIS_CMD_INLINE},
{"decrby",3,REDIS_CMD_INLINE},
+ {"getset",3,REDIS_CMD_BULK},
{"randomkey",1,REDIS_CMD_INLINE},
{"select",2,REDIS_CMD_INLINE},
{"move",3,REDIS_CMD_INLINE},
{"sort",-2,REDIS_CMD_INLINE},
{"info",1,REDIS_CMD_INLINE},
{"mget",-2,REDIS_CMD_INLINE},
+ {"expire",3,REDIS_CMD_INLINE},
+ {"ttl",2,REDIS_CMD_INLINE},
+ {"slaveof",3,REDIS_CMD_INLINE},
+ {"debug",-2,REDIS_CMD_INLINE},
+ {"mset",-3,REDIS_CMD_MULTIBULK},
+ {"msetnx",-3,REDIS_CMD_MULTIBULK},
{NULL,0,0}
};
if ((fd = cliConnect()) == -1) return 1;
/* Build the command to send */
- for (j = 0; j < argc; j++) {
- if (j != 0) cmd = sdscat(cmd," ");
- if (j == argc-1 && rc->flags & REDIS_CMD_BULK) {
- cmd = sdscatprintf(cmd,"%d",sdslen(argv[j]));
- } else {
+ if (rc->flags & REDIS_CMD_MULTIBULK) {
+ cmd = sdscatprintf(cmd,"*%d\r\n",argc);
+ for (j = 0; j < argc; j++) {
+ cmd = sdscatprintf(cmd,"$%d\r\n",sdslen(argv[j]));
cmd = sdscatlen(cmd,argv[j],sdslen(argv[j]));
+ cmd = sdscatlen(cmd,"\r\n",2);
+ }
+ } else {
+ for (j = 0; j < argc; j++) {
+ if (j != 0) cmd = sdscat(cmd," ");
+ if (j == argc-1 && rc->flags & REDIS_CMD_BULK) {
+ cmd = sdscatprintf(cmd,"%d",sdslen(argv[j]));
+ } else {
+ cmd = sdscatlen(cmd,argv[j],sdslen(argv[j]));
+ }
}
- }
- cmd = sdscat(cmd,"\r\n");
- if (rc->flags & REDIS_CMD_BULK) {
- cmd = sdscatlen(cmd,argv[argc-1],sdslen(argv[argc-1]));
cmd = sdscat(cmd,"\r\n");
+ if (rc->flags & REDIS_CMD_BULK) {
+ cmd = sdscatlen(cmd,argv[argc-1],sdslen(argv[argc-1]));
+ cmd = sdscatlen(cmd,"\r\n",2);
+ }
}
anetWrite(fd,cmd,sdslen(cmd));
retval = cliReadReply(fd);
int main(int argc, char **argv) {
int firstarg, j;
char **argvcopy;
+ struct redisCommand *rc;
config.hostip = "127.0.0.1";
config.hostport = 6379;
for(j = 0; j < argc; j++)
argvcopy[j] = sdsnew(argv[j]);
- /* Read the last argument from stdandard input */
- if (!isatty(fileno(stdin))) {
- sds lastarg = readArgFromStdin();
- argvcopy[argc] = lastarg;
- argc++;
- }
-
if (argc < 1) {
fprintf(stderr, "usage: redis-cli [-h host] [-p port] cmd arg1 arg2 arg3 ... argN\n");
fprintf(stderr, "usage: echo \"argN\" | redis-cli [-h host] [-p port] cmd arg1 arg2 ... arg(N-1)\n");
exit(1);
}
+ /* Read the last argument from stdandard input if needed */
+ if ((rc = lookupCommand(argv[0])) != NULL) {
+ if (rc->arity > 0 && argc == rc->arity-1) {
+ sds lastarg = readArgFromStdin();
+ argvcopy[argc] = lastarg;
+ argc++;
+ }
+ }
+
return cliSendCommand(argc, argvcopy);
}