Skip to content

Commit 761542b

Browse files
committed
fix all multis for preserve
1 parent 14b6ad7 commit 761542b

File tree

3 files changed

+64
-6
lines changed

3 files changed

+64
-6
lines changed

packages/client/lib/client/multi-command.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ export default class RedisClientMultiCommand<REPLIES = []> {
9797
const parser = new BasicCommandParser(resp);
9898
command.parseCommand(parser, ...args);
9999
redisArgs = parser.redisArgs;
100+
redisArgs.preserve = parser.preserve;
100101
} else {
101102
redisArgs = command.transformArguments(...args);
102103
}
@@ -118,6 +119,7 @@ export default class RedisClientMultiCommand<REPLIES = []> {
118119
const parser = new BasicCommandParser(resp);
119120
command.parseCommand(parser, ...args);
120121
redisArgs = parser.redisArgs;
122+
redisArgs.preserve = parser.preserve;
121123
} else {
122124
redisArgs = command.transformArguments(...args);
123125
}
@@ -140,6 +142,7 @@ export default class RedisClientMultiCommand<REPLIES = []> {
140142
const parser = new BasicCommandParser(resp);
141143
fn.parseCommand(parser, ...args);
142144
fnArgs = parser.redisArgs;
145+
fnArgs.preserve = parser.preserve;
143146
} else {
144147
fnArgs = fn.transformArguments(...args);
145148
}
@@ -164,6 +167,7 @@ export default class RedisClientMultiCommand<REPLIES = []> {
164167
const parser = new BasicCommandParser(resp);
165168
script.parseCommand(parser, ...args);
166169
redisArgs = parser.redisArgs;
170+
redisArgs.preserve = parser.preserve;
167171
} else {
168172
redisArgs = script.transformArguments(...args);
169173
}

packages/client/lib/cluster/multi-command.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ export default class RedisClusterMultiCommand<REPLIES = []> {
102102
if (command.parseCommand) {
103103
const parser = new BasicClusterCommandParser(resp);
104104
command.parseCommand(parser, ...args);
105+
redisArgs = parser.redisArgs;
106+
redisArgs.preserve = parser.preserve;
105107
firstKey = parser.firstKey;
106108
} else {
107109
redisArgs = command.transformArguments(...args);
@@ -131,6 +133,8 @@ export default class RedisClusterMultiCommand<REPLIES = []> {
131133
if (command.parseCommand) {
132134
const parser = new BasicClusterCommandParser(resp);
133135
command.parseCommand(parser, ...args);
136+
redisArgs = parser.redisArgs;
137+
redisArgs.preserve = parser.preserve;
134138
firstKey = parser.firstKey;
135139
} else {
136140
redisArgs = command.transformArguments(...args);
@@ -160,6 +164,8 @@ export default class RedisClusterMultiCommand<REPLIES = []> {
160164
if (fn.parseCommand) {
161165
const parser = new BasicClusterCommandParser(resp);
162166
fn.parseCommand(parser, ...args);
167+
fnArgs = parser.redisArgs;
168+
fnArgs.preserve = parser.preserve;
163169
firstKey = parser.firstKey;
164170
} else {
165171
fnArgs = fn.transformArguments(...args);
@@ -192,6 +198,8 @@ export default class RedisClusterMultiCommand<REPLIES = []> {
192198
if (script.parseCommand) {
193199
const parser = new BasicClusterCommandParser(resp);
194200
script.parseCommand(parser, ...args);
201+
scriptArgs = parser.redisArgs;
202+
scriptArgs.preserve = parser.preserve;
195203
firstKey = parser.firstKey;
196204
} else {
197205
scriptArgs = script.transformArguments(...args);

packages/client/lib/sentinel/multi-commands.ts

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import RedisMultiCommand, { MULTI_REPLY, MultiReply, MultiReplyType } from '../m
33
import { ReplyWithTypeMapping, CommandReply, Command, CommandArguments, CommanderConfig, RedisFunctions, RedisModules, RedisScripts, RespVersions, TransformReply, RedisScript, RedisFunction, TypeMapping } from '../RESP/types';
44
import { attachConfig, functionArgumentsPrefix, getTransformReply } from '../commander';
55
import { RedisSentinelType } from './types';
6+
import { BasicCommandParser } from '../client/parser';
67

78
type CommandSignature<
89
REPLIES extends Array<unknown>,
@@ -87,8 +88,18 @@ export type RedisSentinelMultiCommandType<
8788
export default class RedisSentinelMultiCommand<REPLIES = []> {
8889
private static _createCommand(command: Command, resp: RespVersions) {
8990
const transformReply = getTransformReply(command, resp);
91+
9092
return function (this: RedisSentinelMultiCommand, ...args: Array<unknown>) {
91-
const redisArgs = command.transformArguments(...args);
93+
let redisArgs: CommandArguments = [];
94+
if (command.parseCommand) {
95+
const parser = new BasicCommandParser(resp);
96+
command.parseCommand(parser, ...args);
97+
redisArgs = parser.redisArgs;
98+
redisArgs.preserve = parser.preserve;
99+
} else {
100+
redisArgs = command.transformArguments(...args);
101+
}
102+
92103
return this.addCommand(
93104
command.IS_READ_ONLY,
94105
redisArgs,
@@ -99,8 +110,19 @@ export default class RedisSentinelMultiCommand<REPLIES = []> {
99110

100111
private static _createModuleCommand(command: Command, resp: RespVersions) {
101112
const transformReply = getTransformReply(command, resp);
113+
102114
return function (this: { _self: RedisSentinelMultiCommand }, ...args: Array<unknown>) {
103-
const redisArgs = command.transformArguments(...args);
115+
let redisArgs: CommandArguments = [];
116+
117+
if (command.parseCommand) {
118+
const parser = new BasicCommandParser(resp);
119+
command.parseCommand(parser, ...args);
120+
redisArgs = parser.redisArgs;
121+
redisArgs.preserve = parser.preserve;
122+
} else {
123+
redisArgs = command.transformArguments(...args);
124+
}
125+
104126
return this._self.addCommand(
105127
command.IS_READ_ONLY,
106128
redisArgs,
@@ -110,12 +132,24 @@ export default class RedisSentinelMultiCommand<REPLIES = []> {
110132
}
111133

112134
private static _createFunctionCommand(name: string, fn: RedisFunction, resp: RespVersions) {
113-
const prefix = functionArgumentsPrefix(name, fn),
114-
transformReply = getTransformReply(fn, resp);
135+
const prefix = functionArgumentsPrefix(name, fn);
136+
const transformReply = getTransformReply(fn, resp);
137+
115138
return function (this: { _self: RedisSentinelMultiCommand }, ...args: Array<unknown>) {
116-
const fnArgs = fn.transformArguments(...args);
139+
let fnArgs: CommandArguments = [];
140+
141+
if (fn.parseCommand) {
142+
const parser = new BasicCommandParser(resp);
143+
fn.parseCommand(parser, ...args);
144+
fnArgs = parser.redisArgs;
145+
fnArgs.preserve = parser.preserve;
146+
} else {
147+
fnArgs = fn.transformArguments(...args);
148+
}
149+
117150
const redisArgs: CommandArguments = prefix.concat(fnArgs);
118151
redisArgs.preserve = fnArgs.preserve;
152+
119153
return this._self.addCommand(
120154
fn.IS_READ_ONLY,
121155
redisArgs,
@@ -126,8 +160,19 @@ export default class RedisSentinelMultiCommand<REPLIES = []> {
126160

127161
private static _createScriptCommand(script: RedisScript, resp: RespVersions) {
128162
const transformReply = getTransformReply(script, resp);
163+
129164
return function (this: RedisSentinelMultiCommand, ...args: Array<unknown>) {
130-
const scriptArgs = script.transformArguments(...args);
165+
let scriptArgs: CommandArguments = [];
166+
167+
if (script.parseCommand) {
168+
const parser = new BasicCommandParser(resp);
169+
script.parseCommand(parser, ...args);
170+
scriptArgs = parser.redisArgs;
171+
scriptArgs.preserve = parser.preserve;
172+
} else {
173+
scriptArgs = script.transformArguments(...args);
174+
}
175+
131176
this._setState(
132177
script.IS_READ_ONLY
133178
);
@@ -136,6 +181,7 @@ export default class RedisSentinelMultiCommand<REPLIES = []> {
136181
scriptArgs,
137182
transformReply
138183
);
184+
139185
return this;
140186
};
141187
}

0 commit comments

Comments
 (0)