Lines Matching refs:c
197 void pushGenericCommand(client *c, int where) { in pushGenericCommand() argument
199 robj *lobj = lookupKeyWrite(c->db,c->argv[1]); in pushGenericCommand()
202 addReply(c,shared.wrongtypeerr); in pushGenericCommand()
206 for (j = 2; j < c->argc; j++) { in pushGenericCommand()
207 c->argv[j] = tryObjectEncoding(c->argv[j]); in pushGenericCommand()
212 dbAdd(c->db,c->argv[1],lobj); in pushGenericCommand()
214 listTypePush(lobj,c->argv[j],where); in pushGenericCommand()
217 addReplyLongLong(c, waiting + (lobj ? listTypeLength(lobj) : 0)); in pushGenericCommand()
221 signalModifiedKey(c->db,c->argv[1]); in pushGenericCommand()
222 notifyKeyspaceEvent(NOTIFY_LIST,event,c->argv[1],c->db->id); in pushGenericCommand()
227 void lpushCommand(client *c) { in lpushCommand() argument
228 pushGenericCommand(c,LIST_HEAD); in lpushCommand()
231 void rpushCommand(client *c) { in rpushCommand() argument
232 pushGenericCommand(c,LIST_TAIL); in rpushCommand()
235 void pushxGenericCommand(client *c, robj *refval, robj *val, int where) { in pushxGenericCommand() argument
241 if ((subject = lookupKeyWriteOrReply(c,c->argv[1],shared.czero)) == NULL || in pushxGenericCommand()
242 checkType(c,subject,OBJ_LIST)) return; in pushxGenericCommand()
257 signalModifiedKey(c->db,c->argv[1]); in pushxGenericCommand()
259 c->argv[1],c->db->id); in pushxGenericCommand()
263 addReply(c,shared.cnegone); in pushxGenericCommand()
270 signalModifiedKey(c->db,c->argv[1]); in pushxGenericCommand()
271 notifyKeyspaceEvent(NOTIFY_LIST,event,c->argv[1],c->db->id); in pushxGenericCommand()
275 addReplyLongLong(c,listTypeLength(subject)); in pushxGenericCommand()
278 void lpushxCommand(client *c) { in lpushxCommand() argument
279 c->argv[2] = tryObjectEncoding(c->argv[2]); in lpushxCommand()
280 pushxGenericCommand(c,NULL,c->argv[2],LIST_HEAD); in lpushxCommand()
283 void rpushxCommand(client *c) { in rpushxCommand() argument
284 c->argv[2] = tryObjectEncoding(c->argv[2]); in rpushxCommand()
285 pushxGenericCommand(c,NULL,c->argv[2],LIST_TAIL); in rpushxCommand()
288 void linsertCommand(client *c) { in linsertCommand() argument
289 c->argv[4] = tryObjectEncoding(c->argv[4]); in linsertCommand()
290 if (strcasecmp(c->argv[2]->ptr,"after") == 0) { in linsertCommand()
291 pushxGenericCommand(c,c->argv[3],c->argv[4],LIST_TAIL); in linsertCommand()
292 } else if (strcasecmp(c->argv[2]->ptr,"before") == 0) { in linsertCommand()
293 pushxGenericCommand(c,c->argv[3],c->argv[4],LIST_HEAD); in linsertCommand()
295 addReply(c,shared.syntaxerr); in linsertCommand()
299 void llenCommand(client *c) { in llenCommand() argument
300 robj *o = lookupKeyReadOrReply(c,c->argv[1],shared.czero); in llenCommand()
301 if (o == NULL || checkType(c,o,OBJ_LIST)) return; in llenCommand()
302 addReplyLongLong(c,listTypeLength(o)); in llenCommand()
305 void lindexCommand(client *c) { in lindexCommand() argument
306 robj *o = lookupKeyReadOrReply(c,c->argv[1],shared.nullbulk); in lindexCommand()
307 if (o == NULL || checkType(c,o,OBJ_LIST)) return; in lindexCommand()
311 if ((getLongFromObjectOrReply(c, c->argv[2], &index, NULL) != C_OK)) in lindexCommand()
322 addReplyBulk(c,value); in lindexCommand()
325 addReply(c,shared.nullbulk); in lindexCommand()
332 void lsetCommand(client *c) { in lsetCommand() argument
333 robj *o = lookupKeyWriteOrReply(c,c->argv[1],shared.nokeyerr); in lsetCommand()
334 if (o == NULL || checkType(c,o,OBJ_LIST)) return; in lsetCommand()
336 robj *value = c->argv[3]; in lsetCommand()
338 if ((getLongFromObjectOrReply(c, c->argv[2], &index, NULL) != C_OK)) in lsetCommand()
346 addReply(c,shared.outofrangeerr); in lsetCommand()
348 addReply(c,shared.ok); in lsetCommand()
349 signalModifiedKey(c->db,c->argv[1]); in lsetCommand()
350 notifyKeyspaceEvent(NOTIFY_LIST,"lset",c->argv[1],c->db->id); in lsetCommand()
358 void popGenericCommand(client *c, int where) { in popGenericCommand() argument
359 robj *o = lookupKeyWriteOrReply(c,c->argv[1],shared.nullbulk); in popGenericCommand()
360 if (o == NULL || checkType(c,o,OBJ_LIST)) return; in popGenericCommand()
364 addReply(c,shared.nullbulk); in popGenericCommand()
368 addReplyBulk(c,value); in popGenericCommand()
370 notifyKeyspaceEvent(NOTIFY_LIST,event,c->argv[1],c->db->id); in popGenericCommand()
373 c->argv[1],c->db->id); in popGenericCommand()
374 dbDelete(c->db,c->argv[1]); in popGenericCommand()
376 signalModifiedKey(c->db,c->argv[1]); in popGenericCommand()
381 void lpopCommand(client *c) { in lpopCommand() argument
382 popGenericCommand(c,LIST_HEAD); in lpopCommand()
385 void rpopCommand(client *c) { in rpopCommand() argument
386 popGenericCommand(c,LIST_TAIL); in rpopCommand()
389 void lrangeCommand(client *c) { in lrangeCommand() argument
393 if ((getLongFromObjectOrReply(c, c->argv[2], &start, NULL) != C_OK) || in lrangeCommand()
394 (getLongFromObjectOrReply(c, c->argv[3], &end, NULL) != C_OK)) return; in lrangeCommand()
396 if ((o = lookupKeyReadOrReply(c,c->argv[1],shared.emptymultibulk)) == NULL in lrangeCommand()
397 || checkType(c,o,OBJ_LIST)) return; in lrangeCommand()
408 addReply(c,shared.emptymultibulk); in lrangeCommand()
415 addReplyMultiBulkLen(c,rangelen); in lrangeCommand()
424 addReplyBulkCBuffer(c,qe->value,qe->sz); in lrangeCommand()
426 addReplyBulkLongLong(c,qe->longval); in lrangeCommand()
435 void ltrimCommand(client *c) { in ltrimCommand() argument
439 if ((getLongFromObjectOrReply(c, c->argv[2], &start, NULL) != C_OK) || in ltrimCommand()
440 (getLongFromObjectOrReply(c, c->argv[3], &end, NULL) != C_OK)) return; in ltrimCommand()
442 if ((o = lookupKeyWriteOrReply(c,c->argv[1],shared.ok)) == NULL || in ltrimCommand()
443 checkType(c,o,OBJ_LIST)) return; in ltrimCommand()
471 notifyKeyspaceEvent(NOTIFY_LIST,"ltrim",c->argv[1],c->db->id); in ltrimCommand()
473 dbDelete(c->db,c->argv[1]); in ltrimCommand()
474 notifyKeyspaceEvent(NOTIFY_GENERIC,"del",c->argv[1],c->db->id); in ltrimCommand()
476 signalModifiedKey(c->db,c->argv[1]); in ltrimCommand()
478 addReply(c,shared.ok); in ltrimCommand()
481 void lremCommand(client *c) { in lremCommand() argument
483 obj = c->argv[3]; in lremCommand()
487 if ((getLongFromObjectOrReply(c, c->argv[2], &toremove, NULL) != C_OK)) in lremCommand()
490 subject = lookupKeyWriteOrReply(c,c->argv[1],shared.czero); in lremCommand()
491 if (subject == NULL || checkType(c,subject,OBJ_LIST)) return; in lremCommand()
513 signalModifiedKey(c->db,c->argv[1]); in lremCommand()
514 notifyKeyspaceEvent(NOTIFY_GENERIC,"lrem",c->argv[1],c->db->id); in lremCommand()
518 dbDelete(c->db,c->argv[1]); in lremCommand()
519 notifyKeyspaceEvent(NOTIFY_GENERIC,"del",c->argv[1],c->db->id); in lremCommand()
522 addReplyLongLong(c,removed); in lremCommand()
541 void rpoplpushHandlePush(client *c, robj *dstkey, robj *dstobj, robj *value) { in rpoplpushHandlePush() argument
547 dbAdd(c->db,dstkey,dstobj); in rpoplpushHandlePush()
549 signalModifiedKey(c->db,dstkey); in rpoplpushHandlePush()
551 notifyKeyspaceEvent(NOTIFY_LIST,"lpush",dstkey,c->db->id); in rpoplpushHandlePush()
553 addReplyBulk(c,value); in rpoplpushHandlePush()
556 void rpoplpushCommand(client *c) { in rpoplpushCommand() argument
558 if ((sobj = lookupKeyWriteOrReply(c,c->argv[1],shared.nullbulk)) == NULL || in rpoplpushCommand()
559 checkType(c,sobj,OBJ_LIST)) return; in rpoplpushCommand()
564 addReply(c,shared.nullbulk); in rpoplpushCommand()
566 robj *dobj = lookupKeyWrite(c->db,c->argv[2]); in rpoplpushCommand()
567 robj *touchedkey = c->argv[1]; in rpoplpushCommand()
569 if (dobj && checkType(c,dobj,OBJ_LIST)) return; in rpoplpushCommand()
575 rpoplpushHandlePush(c,c->argv[2],dobj,value); in rpoplpushCommand()
581 notifyKeyspaceEvent(NOTIFY_LIST,"rpop",touchedkey,c->db->id); in rpoplpushCommand()
583 dbDelete(c->db,touchedkey); in rpoplpushCommand()
585 touchedkey,c->db->id); in rpoplpushCommand()
587 signalModifiedKey(c->db,touchedkey); in rpoplpushCommand()
616 void blockForKeys(client *c, robj **keys, int numkeys, mstime_t timeout, robj *target) { in blockForKeys() argument
621 c->bpop.timeout = timeout; in blockForKeys()
622 c->bpop.target = target; in blockForKeys()
628 if (dictAdd(c->bpop.keys,keys[j],NULL) != DICT_OK) continue; in blockForKeys()
632 de = dictFind(c->db->blocking_keys,keys[j]); in blockForKeys()
638 retval = dictAdd(c->db->blocking_keys,keys[j],l); in blockForKeys()
640 serverAssertWithInfo(c,keys[j],retval == DICT_OK); in blockForKeys()
644 listAddNodeTail(l,c); in blockForKeys()
646 blockClient(c,BLOCKED_LIST); in blockForKeys()
651 void unblockClientWaitingData(client *c) { in unblockClientWaitingData() argument
656 serverAssertWithInfo(c,NULL,dictSize(c->bpop.keys) != 0); in unblockClientWaitingData()
657 di = dictGetIterator(c->bpop.keys); in unblockClientWaitingData()
663 l = dictFetchValue(c->db->blocking_keys,key); in unblockClientWaitingData()
664 serverAssertWithInfo(c,key,l != NULL); in unblockClientWaitingData()
665 listDelNode(l,listSearchKey(l,c)); in unblockClientWaitingData()
668 dictDelete(c->db->blocking_keys,key); in unblockClientWaitingData()
673 dictEmpty(c->bpop.keys,NULL); in unblockClientWaitingData()
674 if (c->bpop.target) { in unblockClientWaitingData()
675 decrRefCount(c->bpop.target); in unblockClientWaitingData()
676 c->bpop.target = NULL; in unblockClientWaitingData()
871 void blockingPopGenericCommand(client *c, int where) { in blockingPopGenericCommand() argument
876 if (getTimeoutFromObjectOrReply(c,c->argv[c->argc-1],&timeout,UNIT_SECONDS) in blockingPopGenericCommand()
879 for (j = 1; j < c->argc-1; j++) { in blockingPopGenericCommand()
880 o = lookupKeyWrite(c->db,c->argv[j]); in blockingPopGenericCommand()
883 addReply(c,shared.wrongtypeerr); in blockingPopGenericCommand()
892 addReplyMultiBulkLen(c,2); in blockingPopGenericCommand()
893 addReplyBulk(c,c->argv[j]); in blockingPopGenericCommand()
894 addReplyBulk(c,value); in blockingPopGenericCommand()
897 c->argv[j],c->db->id); in blockingPopGenericCommand()
899 dbDelete(c->db,c->argv[j]); in blockingPopGenericCommand()
901 c->argv[j],c->db->id); in blockingPopGenericCommand()
903 signalModifiedKey(c->db,c->argv[j]); in blockingPopGenericCommand()
907 rewriteClientCommandVector(c,2, in blockingPopGenericCommand()
909 c->argv[j]); in blockingPopGenericCommand()
918 if (c->flags & CLIENT_MULTI) { in blockingPopGenericCommand()
919 addReply(c,shared.nullmultibulk); in blockingPopGenericCommand()
924 blockForKeys(c, c->argv + 1, c->argc - 2, timeout, NULL); in blockingPopGenericCommand()
927 void blpopCommand(client *c) { in blpopCommand() argument
928 blockingPopGenericCommand(c,LIST_HEAD); in blpopCommand()
931 void brpopCommand(client *c) { in brpopCommand() argument
932 blockingPopGenericCommand(c,LIST_TAIL); in brpopCommand()
935 void brpoplpushCommand(client *c) { in brpoplpushCommand() argument
938 if (getTimeoutFromObjectOrReply(c,c->argv[3],&timeout,UNIT_SECONDS) in brpoplpushCommand()
941 robj *key = lookupKeyWrite(c->db, c->argv[1]); in brpoplpushCommand()
944 if (c->flags & CLIENT_MULTI) { in brpoplpushCommand()
947 addReply(c, shared.nullbulk); in brpoplpushCommand()
950 blockForKeys(c, c->argv + 1, 1, timeout, c->argv[2]); in brpoplpushCommand()
954 addReply(c, shared.wrongtypeerr); in brpoplpushCommand()
958 serverAssertWithInfo(c,key,listTypeLength(key) > 0); in brpoplpushCommand()
959 rpoplpushCommand(c); in brpoplpushCommand()