Skip to content

Commit 6ecd32b

Browse files
authored
fix(#284): zadd with opts argument does not work (#285)
1 parent 00fa4fd commit 6ecd32b

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

redis.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,23 +1980,31 @@ class RedisImpl implements Redis {
19801980
) {
19811981
const args: (string | number)[] = [key];
19821982
if (Array.isArray(param1)) {
1983+
this.pushZAddOpts(args, param2 as ZAddOpts);
19831984
args.push(...param1.flatMap((e) => e));
19841985
opts = param2 as ZAddOpts;
19851986
} else if (typeof param1 === "object") {
1987+
this.pushZAddOpts(args, param2 as ZAddOpts);
19861988
for (const [member, score] of Object.entries(param1)) {
19871989
args.push(score as number, member);
19881990
}
1989-
opts = param2 as ZAddOpts;
19901991
} else {
1992+
this.pushZAddOpts(args, opts);
19911993
args.push(param1, param2 as string);
19921994
}
1995+
return this.execIntegerReply("ZADD", ...args);
1996+
}
1997+
1998+
private pushZAddOpts(
1999+
args: (string | number)[],
2000+
opts?: ZAddOpts,
2001+
): void {
19932002
if (opts?.mode) {
19942003
args.push(opts.mode);
19952004
}
19962005
if (opts?.ch) {
19972006
args.push("CH");
19982007
}
1999-
return this.execIntegerReply("ZADD", ...args);
20002008
}
20012009

20022010
zaddIncr(

tests/commands/sorted_set.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,23 @@ export async function zsetTests(
5353
);
5454
});
5555

56+
await run("zaddWithMode", async () => {
57+
assertEquals(await client.zadd("key", 1, "1", { mode: "NX" }), 1);
58+
assertEquals(await client.zadd("key", { "1": 1 }, { mode: "XX" }), 0);
59+
assertEquals(
60+
await client.zadd("key", [[1, "1"], [2, "2"]], { mode: "NX" }),
61+
1,
62+
);
63+
});
64+
65+
await run("zaddWithCH", async () => {
66+
assertEquals(await client.zadd("key", [[1, "foo"], [2, "bar"]]), 2);
67+
assertEquals(
68+
await client.zadd("key", { "foo": 1, "bar": 3, "baz": 4 }, { ch: true }),
69+
2,
70+
);
71+
});
72+
5673
await run("zcount", async () => {
5774
await client.zadd("key", { "1": 1, "2": 2 });
5875
assertEquals(await client.zcount("key", 0, 1), 1);

0 commit comments

Comments
 (0)