From 40c7df04c7386bb2435a2ccecd0a0a0bb9159c7c Mon Sep 17 00:00:00 2001 From: shacharPash Date: Wed, 17 May 2023 13:43:48 +0300 Subject: [PATCH] Support JSON.MERGE Command --- packages/json/lib/commands/MSET.spec.ts | 24 ++++++++++++++++++++++++ packages/json/lib/commands/MSET.ts | 24 ++++++++++++++++++++++++ packages/json/lib/commands/index.ts | 3 +++ packages/json/lib/test-utils.ts | 3 ++- 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 packages/json/lib/commands/MSET.spec.ts create mode 100644 packages/json/lib/commands/MSET.ts diff --git a/packages/json/lib/commands/MSET.spec.ts b/packages/json/lib/commands/MSET.spec.ts new file mode 100644 index 0000000000..caa31b0fd2 --- /dev/null +++ b/packages/json/lib/commands/MSET.spec.ts @@ -0,0 +1,24 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './MSET'; + +describe('MSET', () => { + testUtils.isVersionGreaterThanHook([2, 6]); + + describe('transformArguments', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments([{ key: "key", path: "$", value: "json" }, { key: "key2", path: "$", value: "json2" }]), + ['JSON.MSET', 'key', '$', '"json"', 'key2', '$', '"json2"'] + ); + }); + }); + + + testUtils.testWithClient('client.json.mSet', async client => { + assert.equal( + await client.json.mSet([{ key: "key", path: "$", value: "json" }, { key: "key2", path: "$", value: "json2" }]), + 'OK' + ); + }, GLOBAL.SERVERS.OPEN); +}); \ No newline at end of file diff --git a/packages/json/lib/commands/MSET.ts b/packages/json/lib/commands/MSET.ts new file mode 100644 index 0000000000..282fcb0361 --- /dev/null +++ b/packages/json/lib/commands/MSET.ts @@ -0,0 +1,24 @@ +import { RedisJSON, transformRedisJsonArgument } from '.'; + +export const FIRST_KEY_INDEX = 1; + +export interface KeyPathValue { + key: string; + path: string; + value: RedisJSON; +} + +export function transformArguments(keyPathValues: Array): Array { + if (keyPathValues.length === 0) { + throw new Error('ERR wrong number of arguments for \'MSET\' command'); + } + const args: string[] = keyPathValues.flatMap(({ key, path, value }) => [ + key, + path, + transformRedisJsonArgument(value) + ]); + + return args; +} + +export declare function transformReply(): 'OK' | null; \ No newline at end of file diff --git a/packages/json/lib/commands/index.ts b/packages/json/lib/commands/index.ts index cc9dc824ca..58411b905f 100644 --- a/packages/json/lib/commands/index.ts +++ b/packages/json/lib/commands/index.ts @@ -9,6 +9,7 @@ import * as DEL from './DEL'; import * as FORGET from './FORGET'; import * as GET from './GET'; import * as MGET from './MGET'; +import * as MSET from './MSET'; import * as MERGE from './MERGE'; import * as NUMINCRBY from './NUMINCRBY'; import * as NUMMULTBY from './NUMMULTBY'; @@ -45,6 +46,8 @@ export default { merge: MERGE, MGET, mGet: MGET, + MSET, + mSet: MSET, NUMINCRBY, numIncrBy: NUMINCRBY, NUMMULTBY, diff --git a/packages/json/lib/test-utils.ts b/packages/json/lib/test-utils.ts index f4c4e4eb20..97e189eed8 100644 --- a/packages/json/lib/test-utils.ts +++ b/packages/json/lib/test-utils.ts @@ -3,7 +3,8 @@ import RedisJSON from '.'; export default new TestUtils({ dockerImageName: 'redislabs/rejson', - dockerImageVersionArgument: 'rejson-version' + dockerImageVersionArgument: 'rejson-version', + defaultDockerVersion: 'edge' }); export const GLOBAL = {