/* If we have a target key where to store the resulting set
* create this key with an empty set inside */
dstset = createSetObject();
- deleteKey(c->db,dstkey);
- dictAdd(c->db->dict,dstkey,dstset);
- incrRefCount(dstkey);
}
/* Iterate all the elements of the first (smallest) set, and test
}
dictReleaseIterator(di);
+ if (dstkey) {
+ /* Store the resulting set into the target */
+ deleteKey(c->db,dstkey);
+ dictAdd(c->db->dict,dstkey,dstset);
+ incrRefCount(dstkey);
+ }
+
if (!dstkey) {
lenobj->ptr = sdscatprintf(sdsempty(),"*%d\r\n",cardinality);
} else {
* this set object will be the resulting object to set into the target key*/
dstset = createSetObject();
- /* The first thing we should output is the total number of elements...
- * since this is a multi-bulk write, but at this stage we don't know
- * the intersection set size, so we use a trick, append an empty object
- * to the output list and save the pointer to later modify it with the
- * right length */
- if (dstkey) {
- /* If we have a target key where to store the resulting set
- * create this key with an empty set inside */
- deleteKey(c->db,dstkey);
- dictAdd(c->db->dict,dstkey,dstset);
- incrRefCount(dstkey);
- server.dirty++;
- }
-
/* Iterate all the elements of all the sets, add every element a single
* time to the result set */
for (j = 0; j < setsnum; j++) {
addReply(c,shared.crlf);
}
dictReleaseIterator(di);
+ } else {
+ /* If we have a target key where to store the resulting set
+ * create this key with the result set inside */
+ deleteKey(c->db,dstkey);
+ dictAdd(c->db->dict,dstkey,dstset);
+ incrRefCount(dstkey);
+ server.dirty++;
}
/* Cleanup */
lsort [$r smembers setres]
} [lsort -uniq "[$r smembers set1] [$r smembers set2]"]
+ test {SUNIONSTORE with same src and dest} {
+ $r sunionstore set1 set1 set1
+ $r scard set1
+ } {1000}
+
test {SINTER against three sets} {
$r sadd set3 999
$r sadd set3 995
lsort [$r smembers setres]
} {995 999}
+ test {SINTERSTORE with same src and dest} {
+ $r sinterstore set1 set1 set1
+ $r scard set1
+ } {1000}
+
test {SUNION with non existing keys} {
lsort [$r sunion nokey1 set1 set2 nokey2]
} [lsort -uniq "[$r smembers set1] [$r smembers set2]"]