From 85091cde5a6d4f9dffb44f706e3bbd90300a0c5a Mon Sep 17 00:00:00 2001 From: fast-facts <107660271+fast-facts@users.noreply.github.com> Date: Sun, 21 May 2023 08:08:27 -0400 Subject: [PATCH] Add `count` option to `FT.CURSOR READ` (#2492) * feat: Add count option to FT.CURSOR READ * Update CURSOR_READ.spec.ts --------- Co-authored-by: Leibale Eidelman --- .../search/lib/commands/CURSOR_READ.spec.ts | 21 +++++++++++++------ packages/search/lib/commands/CURSOR_READ.ts | 15 +++++++++++-- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/packages/search/lib/commands/CURSOR_READ.spec.ts b/packages/search/lib/commands/CURSOR_READ.spec.ts index 5b4f4122d4..bb68e2b639 100644 --- a/packages/search/lib/commands/CURSOR_READ.spec.ts +++ b/packages/search/lib/commands/CURSOR_READ.spec.ts @@ -4,15 +4,24 @@ import testUtils, { GLOBAL } from '../test-utils'; import { transformArguments } from './CURSOR_READ'; describe('CURSOR READ', () => { - it('transformArguments', () => { - assert.deepEqual( - transformArguments('index', 0), - ['FT.CURSOR', 'READ', 'index', '0'] - ); + describe('transformArguments', () => { + it('without options', () => { + assert.deepEqual( + transformArguments('index', 0), + ['FT.CURSOR', 'READ', 'index', '0'] + ); + }); + + it('with COUNT', () => { + assert.deepEqual( + transformArguments('index', 0, { COUNT: 1 }), + ['FT.CURSOR', 'READ', 'index', '0', 'COUNT', '1'] + ); + }); }); testUtils.testWithClient('client.ft.cursorRead', async client => { - const [ ,, { cursor } ] = await Promise.all([ + const [, , { cursor }] = await Promise.all([ client.ft.create('idx', { field: { type: SchemaFieldTypes.TEXT diff --git a/packages/search/lib/commands/CURSOR_READ.ts b/packages/search/lib/commands/CURSOR_READ.ts index 1e828cc3e4..35cf1bc4f0 100644 --- a/packages/search/lib/commands/CURSOR_READ.ts +++ b/packages/search/lib/commands/CURSOR_READ.ts @@ -4,16 +4,27 @@ export const FIRST_KEY_INDEX = 1; export const IS_READ_ONLY = true; +interface CursorReadOptions { + COUNT?: number; +} + export function transformArguments( index: RedisCommandArgument, - cursor: number + cursor: number, + options?: CursorReadOptions ): RedisCommandArguments { - return [ + const args = [ 'FT.CURSOR', 'READ', index, cursor.toString() ]; + + if (options?.COUNT) { + args.push('COUNT', options.COUNT.toString()); + } + + return args; } export { transformReply } from './AGGREGATE_WITHCURSOR';