mirror of
https://github.com/fluencelabs/redis
synced 2025-04-02 15:51:05 +00:00
Fixed misuse of the new iterator semantics in ZUNIONSTORE
This commit is contained in:
parent
d070abe44c
commit
cb16b6c389
@ -1521,6 +1521,8 @@ void zunionInterGenericCommand(redisClient *c, robj *dstkey, int op) {
|
|||||||
|
|
||||||
score = src[0].weight * zval.score;
|
score = src[0].weight * zval.score;
|
||||||
for (j = 1; j < setnum; j++) {
|
for (j = 1; j < setnum; j++) {
|
||||||
|
/* It is not safe to access the hash we zset we are
|
||||||
|
* iterating, so explicitly check for equal object. */
|
||||||
if (src[j].subject == src[0].subject) {
|
if (src[j].subject == src[0].subject) {
|
||||||
value = zval.score*src[j].weight;
|
value = zval.score*src[j].weight;
|
||||||
zunionInterAggregate(&score,value,aggregate);
|
zunionInterAggregate(&score,value,aggregate);
|
||||||
@ -1564,7 +1566,12 @@ void zunionInterGenericCommand(redisClient *c, robj *dstkey, int op) {
|
|||||||
/* Because the inputs are sorted by size, it's only possible
|
/* Because the inputs are sorted by size, it's only possible
|
||||||
* for sets at larger indices to hold this element. */
|
* for sets at larger indices to hold this element. */
|
||||||
for (j = (i+1); j < setnum; j++) {
|
for (j = (i+1); j < setnum; j++) {
|
||||||
if (zuiFind(&src[j],&zval,&value)) {
|
/* It is not safe to access the hash we zset we are
|
||||||
|
* iterating, so explicitly check for equal object. */
|
||||||
|
if(src[j].subject == src[i].subject) {
|
||||||
|
value = zval.score*src[j].weight;
|
||||||
|
zunionInterAggregate(&score,value,aggregate);
|
||||||
|
} else if (zuiFind(&src[j],&zval,&value)) {
|
||||||
value *= src[j].weight;
|
value *= src[j].weight;
|
||||||
zunionInterAggregate(&score,value,aggregate);
|
zunionInterAggregate(&score,value,aggregate);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user