MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / scanCallback

Function scanCallback

src/db.cpp:1097–1124  ·  view source on GitHub ↗

This callback is used by scanGenericCommand in order to collect elements * returned by the dictionary iterator into a list. */

Source from the content-addressed store, hash-verified

1095/* This callback is used by scanGenericCommand in order to collect elements
1096 * returned by the dictionary iterator into a list. */
1097void scanCallback(void *privdata, const dictEntry *de) {
1098 void **pd = (void**) privdata;
1099 list *keys = (list*)pd[0];
1100 robj *o = (robj*)pd[1];
1101 robj *key, *val = NULL;
1102
1103 if (o == NULL) {
1104 sds sdskey = (sds)dictGetKey(de);
1105 key = createStringObject(sdskey, sdslen(sdskey));
1106 } else if (o->type == OBJ_SET) {
1107 sds keysds = (sds)dictGetKey(de);
1108 key = createStringObject(keysds,sdslen(keysds));
1109 } else if (o->type == OBJ_HASH) {
1110 sds sdskey = (sds)dictGetKey(de);
1111 sds sdsval = (sds)dictGetVal(de);
1112 key = createStringObject(sdskey,sdslen(sdskey));
1113 val = createStringObject(sdsval,sdslen(sdsval));
1114 } else if (o->type == OBJ_ZSET) {
1115 sds sdskey = (sds)dictGetKey(de);
1116 key = createStringObject(sdskey,sdslen(sdskey));
1117 val = createStringObjectFromLongDouble(*(double*)dictGetVal(de),0);
1118 } else {
1119 serverPanic("Type not handled in SCAN callback.");
1120 }
1121
1122 listAddNodeTail(keys, key);
1123 if (val) listAddNodeTail(keys, val);
1124}
1125
1126/* Try to parse a SCAN cursor stored at object 'o':
1127 * if the cursor is valid, store it as unsigned integer into *cursor and

Callers

nothing calls this directly

Calls 4

sdslenFunction · 0.85
listAddNodeTailFunction · 0.85
createStringObjectFunction · 0.70

Tested by

no test coverage detected