From 2d77dfe703a7d30ab9209ef494d5fa2cb0688c21 Mon Sep 17 00:00:00 2001 From: Avital-Fine Date: Mon, 28 Feb 2022 12:54:11 +0100 Subject: [PATCH 1/2] Support OBJECT [...] commands --- packages/client/lib/client/commands.ts | 12 +++++++++++ .../lib/commands/OBJECT_ENCODING.spec.ts | 20 +++++++++++++++++++ .../client/lib/commands/OBJECT_ENCODING.ts | 9 +++++++++ .../client/lib/commands/OBJECT_FREQ.spec.ts | 19 ++++++++++++++++++ packages/client/lib/commands/OBJECT_FREQ.ts | 9 +++++++++ .../lib/commands/OBJECT_IDLETIME.spec.ts | 20 +++++++++++++++++++ .../client/lib/commands/OBJECT_IDLETIME.ts | 9 +++++++++ .../lib/commands/OBJECT_REFCOUNT.spec.ts | 20 +++++++++++++++++++ .../client/lib/commands/OBJECT_REFCOUNT.ts | 9 +++++++++ 9 files changed, 127 insertions(+) create mode 100644 packages/client/lib/commands/OBJECT_ENCODING.spec.ts create mode 100644 packages/client/lib/commands/OBJECT_ENCODING.ts create mode 100644 packages/client/lib/commands/OBJECT_FREQ.spec.ts create mode 100644 packages/client/lib/commands/OBJECT_FREQ.ts create mode 100644 packages/client/lib/commands/OBJECT_IDLETIME.spec.ts create mode 100644 packages/client/lib/commands/OBJECT_IDLETIME.ts create mode 100644 packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts create mode 100644 packages/client/lib/commands/OBJECT_REFCOUNT.ts diff --git a/packages/client/lib/client/commands.ts b/packages/client/lib/client/commands.ts index 029a5e60f62..e2601a77fb3 100644 --- a/packages/client/lib/client/commands.ts +++ b/packages/client/lib/client/commands.ts @@ -58,6 +58,10 @@ import * as MODULE_LIST from '../commands/MODULE_LIST'; import * as MODULE_LOAD from '../commands/MODULE_LOAD'; import * as MODULE_UNLOAD from '../commands/MODULE_UNLOAD'; import * as MOVE from '../commands/MOVE'; +import * as OBJECT_ENCODING from '../commands/OBJECT_ENCODING'; +import * as OBJECT_FREQ from '../commands/OBJECT_FREQ'; +import * as OBJECT_IDLETIME from '../commands/OBJECT_IDLETIME'; +import * as OBJECT_REFCOUNT from '../commands/OBJECT_REFCOUNT'; import * as PING from '../commands/PING'; import * as PUBSUB_CHANNELS from '../commands/PUBSUB_CHANNELS'; import * as PUBSUB_NUMPAT from '../commands/PUBSUB_NUMPAT'; @@ -201,6 +205,14 @@ export default { moduleUnload: MODULE_UNLOAD, MOVE, move: MOVE, + OBJECT_ENCODING, + objectEncoding: OBJECT_ENCODING, + OBJECT_FREQ, + objectFreq: OBJECT_FREQ, + OBJECT_IDLETIME, + objectIdleTime: OBJECT_IDLETIME, + OBJECT_REFCOUNT, + objectRefCount: OBJECT_REFCOUNT, PING, ping: PING, PUBSUB_CHANNELS, diff --git a/packages/client/lib/commands/OBJECT_ENCODING.spec.ts b/packages/client/lib/commands/OBJECT_ENCODING.spec.ts new file mode 100644 index 00000000000..6d40f9b9e7f --- /dev/null +++ b/packages/client/lib/commands/OBJECT_ENCODING.spec.ts @@ -0,0 +1,20 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './OBJECT_ENCODING'; + +describe('OBJECT ENCODING', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['OBJECT', 'ENCODING', 'key'] + ); + }); + + testUtils.testWithClient('client.objectEncoding', async client => { + client.lPush('key', 'hello world'); + assert.equal( + await client.objectEncoding('key'), + 'quicklist' + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/client/lib/commands/OBJECT_ENCODING.ts b/packages/client/lib/commands/OBJECT_ENCODING.ts new file mode 100644 index 00000000000..725ddbfcdc1 --- /dev/null +++ b/packages/client/lib/commands/OBJECT_ENCODING.ts @@ -0,0 +1,9 @@ +import { RedisCommandArgument, RedisCommandArguments } from '.'; + +export const IS_READ_ONLY = true; + +export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { + return ['OBJECT', 'ENCODING', key]; +} + +export declare function transformReply(): String; diff --git a/packages/client/lib/commands/OBJECT_FREQ.spec.ts b/packages/client/lib/commands/OBJECT_FREQ.spec.ts new file mode 100644 index 00000000000..6d2513cf18c --- /dev/null +++ b/packages/client/lib/commands/OBJECT_FREQ.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './OBJECT_FREQ'; + +describe('OBJECT FREQ', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['OBJECT', 'FREQ', 'key'] + ); + }); + + testUtils.testWithClient('client.objectFreq', async client => { + assert.equal( + await client.objectFreq('key'), + null + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/client/lib/commands/OBJECT_FREQ.ts b/packages/client/lib/commands/OBJECT_FREQ.ts new file mode 100644 index 00000000000..ffbebded742 --- /dev/null +++ b/packages/client/lib/commands/OBJECT_FREQ.ts @@ -0,0 +1,9 @@ +import { RedisCommandArgument, RedisCommandArguments } from '.'; + +export const IS_READ_ONLY = true; + +export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { + return ['OBJECT', 'FREQ', key]; +} + +export declare function transformReply(): number; diff --git a/packages/client/lib/commands/OBJECT_IDLETIME.spec.ts b/packages/client/lib/commands/OBJECT_IDLETIME.spec.ts new file mode 100644 index 00000000000..a406b4551fe --- /dev/null +++ b/packages/client/lib/commands/OBJECT_IDLETIME.spec.ts @@ -0,0 +1,20 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './OBJECT_IDLETIME'; + +describe('OBJECT IDLETIME', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['OBJECT', 'IDLETIME', 'key'] + ); + }); + + testUtils.testWithClient('client.objectIdleTime', async client => { + client.lPush('key', 'hello world'); + assert.equal( + await client.objectIdleTime('key'), + 0 + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/client/lib/commands/OBJECT_IDLETIME.ts b/packages/client/lib/commands/OBJECT_IDLETIME.ts new file mode 100644 index 00000000000..fd053e34162 --- /dev/null +++ b/packages/client/lib/commands/OBJECT_IDLETIME.ts @@ -0,0 +1,9 @@ +import { RedisCommandArgument, RedisCommandArguments } from '.'; + +export const IS_READ_ONLY = true; + +export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { + return ['OBJECT', 'IDLETIME', key]; +} + +export declare function transformReply(): number; diff --git a/packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts b/packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts new file mode 100644 index 00000000000..10ef98f77e7 --- /dev/null +++ b/packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts @@ -0,0 +1,20 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './OBJECT_REFCOUNT'; + +describe('OBJECT REFCOUNT', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['OBJECT', 'REFCOUNT', 'key'] + ); + }); + + testUtils.testWithClient('client.objectRefCount', async client => { + client.lPush('key', 'hello world'); + assert.equal( + await client.objectRefCount('key'), + 1 + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/client/lib/commands/OBJECT_REFCOUNT.ts b/packages/client/lib/commands/OBJECT_REFCOUNT.ts new file mode 100644 index 00000000000..4adb66ffcd7 --- /dev/null +++ b/packages/client/lib/commands/OBJECT_REFCOUNT.ts @@ -0,0 +1,9 @@ +import { RedisCommandArgument, RedisCommandArguments } from '.'; + +export const IS_READ_ONLY = true; + +export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { + return ['OBJECT', 'REFCOUNT', key]; +} + +export declare function transformReply(): number; From da1ee8f25881c153e56cac692d14a8754dfb9afd Mon Sep 17 00:00:00 2001 From: leibale Date: Thu, 10 Mar 2022 12:30:07 -0500 Subject: [PATCH 2/2] move commands to cluster/commands.ts --- packages/client/lib/client/commands.ts | 12 ------------ packages/client/lib/cluster/commands.ts | 12 ++++++++++++ packages/client/lib/commands/OBJECT_ENCODING.spec.ts | 3 +-- packages/client/lib/commands/OBJECT_ENCODING.ts | 4 +++- packages/client/lib/commands/OBJECT_FREQ.ts | 4 +++- packages/client/lib/commands/OBJECT_IDLETIME.spec.ts | 3 +-- packages/client/lib/commands/OBJECT_IDLETIME.ts | 4 +++- packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts | 3 +-- packages/client/lib/commands/OBJECT_REFCOUNT.ts | 4 +++- 9 files changed, 27 insertions(+), 22 deletions(-) diff --git a/packages/client/lib/client/commands.ts b/packages/client/lib/client/commands.ts index e2601a77fb3..029a5e60f62 100644 --- a/packages/client/lib/client/commands.ts +++ b/packages/client/lib/client/commands.ts @@ -58,10 +58,6 @@ import * as MODULE_LIST from '../commands/MODULE_LIST'; import * as MODULE_LOAD from '../commands/MODULE_LOAD'; import * as MODULE_UNLOAD from '../commands/MODULE_UNLOAD'; import * as MOVE from '../commands/MOVE'; -import * as OBJECT_ENCODING from '../commands/OBJECT_ENCODING'; -import * as OBJECT_FREQ from '../commands/OBJECT_FREQ'; -import * as OBJECT_IDLETIME from '../commands/OBJECT_IDLETIME'; -import * as OBJECT_REFCOUNT from '../commands/OBJECT_REFCOUNT'; import * as PING from '../commands/PING'; import * as PUBSUB_CHANNELS from '../commands/PUBSUB_CHANNELS'; import * as PUBSUB_NUMPAT from '../commands/PUBSUB_NUMPAT'; @@ -205,14 +201,6 @@ export default { moduleUnload: MODULE_UNLOAD, MOVE, move: MOVE, - OBJECT_ENCODING, - objectEncoding: OBJECT_ENCODING, - OBJECT_FREQ, - objectFreq: OBJECT_FREQ, - OBJECT_IDLETIME, - objectIdleTime: OBJECT_IDLETIME, - OBJECT_REFCOUNT, - objectRefCount: OBJECT_REFCOUNT, PING, ping: PING, PUBSUB_CHANNELS, diff --git a/packages/client/lib/cluster/commands.ts b/packages/client/lib/cluster/commands.ts index 4b2aba6a7ae..ad2d34c5c5a 100644 --- a/packages/client/lib/cluster/commands.ts +++ b/packages/client/lib/cluster/commands.ts @@ -71,6 +71,10 @@ import * as MGET from '../commands/MGET'; import * as MIGRATE from '../commands/MIGRATE'; import * as MSET from '../commands/MSET'; import * as MSETNX from '../commands/MSETNX'; +import * as OBJECT_ENCODING from '../commands/OBJECT_ENCODING'; +import * as OBJECT_FREQ from '../commands/OBJECT_FREQ'; +import * as OBJECT_IDLETIME from '../commands/OBJECT_IDLETIME'; +import * as OBJECT_REFCOUNT from '../commands/OBJECT_REFCOUNT'; import * as PERSIST from '../commands/PERSIST'; import * as PEXPIRE from '../commands/PEXPIRE'; import * as PEXPIREAT from '../commands/PEXPIREAT'; @@ -321,6 +325,14 @@ export default { mSet: MSET, MSETNX, mSetNX: MSETNX, + OBJECT_ENCODING, + objectEncoding: OBJECT_ENCODING, + OBJECT_FREQ, + objectFreq: OBJECT_FREQ, + OBJECT_IDLETIME, + objectIdleTime: OBJECT_IDLETIME, + OBJECT_REFCOUNT, + objectRefCount: OBJECT_REFCOUNT, PERSIST, persist: PERSIST, PEXPIRE, diff --git a/packages/client/lib/commands/OBJECT_ENCODING.spec.ts b/packages/client/lib/commands/OBJECT_ENCODING.spec.ts index 6d40f9b9e7f..6f42969d547 100644 --- a/packages/client/lib/commands/OBJECT_ENCODING.spec.ts +++ b/packages/client/lib/commands/OBJECT_ENCODING.spec.ts @@ -11,10 +11,9 @@ describe('OBJECT ENCODING', () => { }); testUtils.testWithClient('client.objectEncoding', async client => { - client.lPush('key', 'hello world'); assert.equal( await client.objectEncoding('key'), - 'quicklist' + null ); }, GLOBAL.SERVERS.OPEN); }); diff --git a/packages/client/lib/commands/OBJECT_ENCODING.ts b/packages/client/lib/commands/OBJECT_ENCODING.ts index 725ddbfcdc1..ac219ae89ed 100644 --- a/packages/client/lib/commands/OBJECT_ENCODING.ts +++ b/packages/client/lib/commands/OBJECT_ENCODING.ts @@ -1,9 +1,11 @@ import { RedisCommandArgument, RedisCommandArguments } from '.'; +export const FIRST_KEY_INDEX = 2; + export const IS_READ_ONLY = true; export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { return ['OBJECT', 'ENCODING', key]; } -export declare function transformReply(): String; +export declare function transformReply(): string | null; diff --git a/packages/client/lib/commands/OBJECT_FREQ.ts b/packages/client/lib/commands/OBJECT_FREQ.ts index ffbebded742..071d16f2748 100644 --- a/packages/client/lib/commands/OBJECT_FREQ.ts +++ b/packages/client/lib/commands/OBJECT_FREQ.ts @@ -1,9 +1,11 @@ import { RedisCommandArgument, RedisCommandArguments } from '.'; +export const FIRST_KEY_INDEX = 2; + export const IS_READ_ONLY = true; export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { return ['OBJECT', 'FREQ', key]; } -export declare function transformReply(): number; +export declare function transformReply(): number | null; diff --git a/packages/client/lib/commands/OBJECT_IDLETIME.spec.ts b/packages/client/lib/commands/OBJECT_IDLETIME.spec.ts index a406b4551fe..61529e1366b 100644 --- a/packages/client/lib/commands/OBJECT_IDLETIME.spec.ts +++ b/packages/client/lib/commands/OBJECT_IDLETIME.spec.ts @@ -11,10 +11,9 @@ describe('OBJECT IDLETIME', () => { }); testUtils.testWithClient('client.objectIdleTime', async client => { - client.lPush('key', 'hello world'); assert.equal( await client.objectIdleTime('key'), - 0 + null ); }, GLOBAL.SERVERS.OPEN); }); diff --git a/packages/client/lib/commands/OBJECT_IDLETIME.ts b/packages/client/lib/commands/OBJECT_IDLETIME.ts index fd053e34162..38847d6f4cf 100644 --- a/packages/client/lib/commands/OBJECT_IDLETIME.ts +++ b/packages/client/lib/commands/OBJECT_IDLETIME.ts @@ -1,9 +1,11 @@ import { RedisCommandArgument, RedisCommandArguments } from '.'; +export const FIRST_KEY_INDEX = 2; + export const IS_READ_ONLY = true; export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { return ['OBJECT', 'IDLETIME', key]; } -export declare function transformReply(): number; +export declare function transformReply(): number | null; diff --git a/packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts b/packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts index 10ef98f77e7..199dca3fe82 100644 --- a/packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts +++ b/packages/client/lib/commands/OBJECT_REFCOUNT.spec.ts @@ -11,10 +11,9 @@ describe('OBJECT REFCOUNT', () => { }); testUtils.testWithClient('client.objectRefCount', async client => { - client.lPush('key', 'hello world'); assert.equal( await client.objectRefCount('key'), - 1 + null ); }, GLOBAL.SERVERS.OPEN); }); diff --git a/packages/client/lib/commands/OBJECT_REFCOUNT.ts b/packages/client/lib/commands/OBJECT_REFCOUNT.ts index 4adb66ffcd7..9fd259b5b90 100644 --- a/packages/client/lib/commands/OBJECT_REFCOUNT.ts +++ b/packages/client/lib/commands/OBJECT_REFCOUNT.ts @@ -1,9 +1,11 @@ import { RedisCommandArgument, RedisCommandArguments } from '.'; +export const FIRST_KEY_INDEX = 2; + export const IS_READ_ONLY = true; export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { return ['OBJECT', 'REFCOUNT', key]; } -export declare function transformReply(): number; +export declare function transformReply(): number | null;