From e3ee1d2763bbb8cf129d095cdfd157f417ffc4df Mon Sep 17 00:00:00 2001 From: shacharPash Date: Tue, 16 May 2023 16:10:29 +0300 Subject: [PATCH 1/7] Support JSON.MERGE Command --- packages/json/lib/commands/MERGE.spec.ts | 19 +++++++++++++++++++ packages/json/lib/commands/MERGE.ts | 9 +++++++++ packages/json/lib/commands/index.ts | 3 +++ 3 files changed, 31 insertions(+) create mode 100644 packages/json/lib/commands/MERGE.spec.ts create mode 100644 packages/json/lib/commands/MERGE.ts diff --git a/packages/json/lib/commands/MERGE.spec.ts b/packages/json/lib/commands/MERGE.spec.ts new file mode 100644 index 00000000000..650fb4e8730 --- /dev/null +++ b/packages/json/lib/commands/MERGE.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './MERGE'; + +describe('MERGE', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key', '$', 1), + ['JSON.MERGE', 'key', '$', '1'] + ); + }); + + testUtils.testWithClient('client.json.merge', async client => { + assert.equal( + await client.json.merge('key', '$', 'json'), + 'OK' + ); + }, GLOBAL.SERVERS.OPEN); +}); \ No newline at end of file diff --git a/packages/json/lib/commands/MERGE.ts b/packages/json/lib/commands/MERGE.ts new file mode 100644 index 00000000000..1aada1f5200 --- /dev/null +++ b/packages/json/lib/commands/MERGE.ts @@ -0,0 +1,9 @@ +import { RedisJSON, transformRedisJsonArgument } from '.'; + +export const FIRST_KEY_INDEX = 1; + +export function transformArguments(key: string, path: string, json: RedisJSON): Array { + return ['JSON.MERGE', key, path, transformRedisJsonArgument(json)]; +} + +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 efcf156b84d..cc9dc824ca2 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 MERGE from './MERGE'; import * as NUMINCRBY from './NUMINCRBY'; import * as NUMMULTBY from './NUMMULTBY'; import * as OBJKEYS from './OBJKEYS'; @@ -40,6 +41,8 @@ export default { forget: FORGET, GET, get: GET, + MERGE, + merge: MERGE, MGET, mGet: MGET, NUMINCRBY, From 40c7df04c7386bb2435a2ccecd0a0a0bb9159c7c Mon Sep 17 00:00:00 2001 From: shacharPash Date: Wed, 17 May 2023 13:43:48 +0300 Subject: [PATCH 2/7] 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 00000000000..caa31b0fd20 --- /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 00000000000..282fcb03613 --- /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 cc9dc824ca2..58411b905fc 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 f4c4e4eb201..97e189eed81 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 = { From 574e7bd2c6b3814fe71540e7f385b4f91e57ddeb Mon Sep 17 00:00:00 2001 From: shacharPash Date: Wed, 17 May 2023 14:04:46 +0300 Subject: [PATCH 3/7] delete MERGE Command from this PR --- packages/json/lib/commands/MERGE.spec.ts | 19 ------------------- packages/json/lib/commands/MERGE.ts | 9 --------- packages/json/lib/commands/index.ts | 3 --- 3 files changed, 31 deletions(-) delete mode 100644 packages/json/lib/commands/MERGE.spec.ts delete mode 100644 packages/json/lib/commands/MERGE.ts diff --git a/packages/json/lib/commands/MERGE.spec.ts b/packages/json/lib/commands/MERGE.spec.ts deleted file mode 100644 index 650fb4e8730..00000000000 --- a/packages/json/lib/commands/MERGE.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { strict as assert } from 'assert'; -import testUtils, { GLOBAL } from '../test-utils'; -import { transformArguments } from './MERGE'; - -describe('MERGE', () => { - it('transformArguments', () => { - assert.deepEqual( - transformArguments('key', '$', 1), - ['JSON.MERGE', 'key', '$', '1'] - ); - }); - - testUtils.testWithClient('client.json.merge', async client => { - assert.equal( - await client.json.merge('key', '$', 'json'), - 'OK' - ); - }, GLOBAL.SERVERS.OPEN); -}); \ No newline at end of file diff --git a/packages/json/lib/commands/MERGE.ts b/packages/json/lib/commands/MERGE.ts deleted file mode 100644 index 1aada1f5200..00000000000 --- a/packages/json/lib/commands/MERGE.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { RedisJSON, transformRedisJsonArgument } from '.'; - -export const FIRST_KEY_INDEX = 1; - -export function transformArguments(key: string, path: string, json: RedisJSON): Array { - return ['JSON.MERGE', key, path, transformRedisJsonArgument(json)]; -} - -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 58411b905fc..a42ece5f277 100644 --- a/packages/json/lib/commands/index.ts +++ b/packages/json/lib/commands/index.ts @@ -10,7 +10,6 @@ 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'; import * as OBJKEYS from './OBJKEYS'; @@ -42,8 +41,6 @@ export default { forget: FORGET, GET, get: GET, - MERGE, - merge: MERGE, MGET, mGet: MGET, MSET, From 454e87b6784b434d2a2cbe3e727f0b0db5ea2c4b Mon Sep 17 00:00:00 2001 From: shacharPash Date: Wed, 17 May 2023 15:51:53 +0300 Subject: [PATCH 4/7] add JSON.MSET to args --- packages/json/lib/commands/MSET.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/json/lib/commands/MSET.ts b/packages/json/lib/commands/MSET.ts index 282fcb03613..72443a65053 100644 --- a/packages/json/lib/commands/MSET.ts +++ b/packages/json/lib/commands/MSET.ts @@ -12,11 +12,12 @@ export function transformArguments(keyPathValues: Array): Array [ - key, - path, - transformRedisJsonArgument(value) - ]); + + const args: string[] = ['JSON.MSET']; + + keyPathValues.forEach(({ key, path, value }) => { + args.push(key, path, transformRedisJsonArgument(value)); + }); return args; } From 319af5b56648934333721157909b557dec389001 Mon Sep 17 00:00:00 2001 From: shacharPash Date: Thu, 18 May 2023 13:07:00 +0300 Subject: [PATCH 5/7] review --- packages/json/lib/commands/MSET.spec.ts | 6 +++--- packages/json/lib/commands/MSET.ts | 15 ++++++--------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/packages/json/lib/commands/MSET.spec.ts b/packages/json/lib/commands/MSET.spec.ts index caa31b0fd20..3a8e7071e35 100644 --- a/packages/json/lib/commands/MSET.spec.ts +++ b/packages/json/lib/commands/MSET.spec.ts @@ -4,11 +4,11 @@ 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" }]), + transformArguments([{ key: 'key', path: '$', value: 'json' }, { key: 'key2', path: '$', value: 'json2' }]), ['JSON.MSET', 'key', '$', '"json"', 'key2', '$', '"json2"'] ); }); @@ -21,4 +21,4 @@ describe('MSET', () => { '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 index 72443a65053..8c65eddb577 100644 --- a/packages/json/lib/commands/MSET.ts +++ b/packages/json/lib/commands/MSET.ts @@ -1,19 +1,16 @@ -import { RedisJSON, transformRedisJsonArgument } from '.'; +import { RedisJSON, transformRedisJsonArgument} from '.'; +import { RedisCommandArgument, RedisCommandArguments } from '@redis/client/dist/lib/commands'; export const FIRST_KEY_INDEX = 1; export interface KeyPathValue { - key: string; + key: RedisCommandArgument; 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[] = ['JSON.MSET']; +export function transformArguments(keyPathValues: Array): RedisCommandArguments { + const args: RedisCommandArguments = ['JSON.MSET']; keyPathValues.forEach(({ key, path, value }) => { args.push(key, path, transformRedisJsonArgument(value)); @@ -22,4 +19,4 @@ export function transformArguments(keyPathValues: Array): Array Date: Sun, 21 May 2023 14:49:06 +0300 Subject: [PATCH 6/7] fixes after code review --- packages/json/lib/commands/MSET.spec.ts | 10 +++++++++- packages/json/lib/commands/MSET.ts | 6 +++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/json/lib/commands/MSET.spec.ts b/packages/json/lib/commands/MSET.spec.ts index 3a8e7071e35..b271949dd9e 100644 --- a/packages/json/lib/commands/MSET.spec.ts +++ b/packages/json/lib/commands/MSET.spec.ts @@ -8,7 +8,15 @@ describe('MSET', () => { describe('transformArguments', () => { it('transformArguments', () => { assert.deepEqual( - transformArguments([{ key: 'key', path: '$', value: 'json' }, { key: 'key2', path: '$', value: 'json2' }]), + transformArguments([{ + key: 'key', + path: '$', + value: 'json' + }, { + key: 'key2', + path: '$', + value: 'json2' + }]), ['JSON.MSET', 'key', '$', '"json"', 'key2', '$', '"json2"'] ); }); diff --git a/packages/json/lib/commands/MSET.ts b/packages/json/lib/commands/MSET.ts index 8c65eddb577..b3902b9d206 100644 --- a/packages/json/lib/commands/MSET.ts +++ b/packages/json/lib/commands/MSET.ts @@ -5,16 +5,16 @@ export const FIRST_KEY_INDEX = 1; export interface KeyPathValue { key: RedisCommandArgument; - path: string; + path: RedisCommandArgument; value: RedisJSON; } export function transformArguments(keyPathValues: Array): RedisCommandArguments { const args: RedisCommandArguments = ['JSON.MSET']; - keyPathValues.forEach(({ key, path, value }) => { + for (const { key, path, value } of keyPathValues) { args.push(key, path, transformRedisJsonArgument(value)); - }); + } return args; } From e4fa7320ef58e1ca66fb6f89bfdb5b9c183e6c0c Mon Sep 17 00:00:00 2001 From: shacharPash Date: Sun, 21 May 2023 17:25:54 +0300 Subject: [PATCH 7/7] indentation --- packages/json/lib/commands/MSET.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/json/lib/commands/MSET.ts b/packages/json/lib/commands/MSET.ts index b3902b9d206..b116f136d6a 100644 --- a/packages/json/lib/commands/MSET.ts +++ b/packages/json/lib/commands/MSET.ts @@ -14,7 +14,7 @@ export function transformArguments(keyPathValues: Array): RedisCom for (const { key, path, value } of keyPathValues) { args.push(key, path, transformRedisJsonArgument(value)); - } + } return args; }