From 8d37c115e6f6d709bc57a845de6e158ec71eb93c Mon Sep 17 00:00:00 2001 From: Nanak <36790357+Nanak360@users.noreply.github.com> Date: Sun, 21 May 2023 17:31:17 +0530 Subject: [PATCH] Add support for `TIMEOUT` in `FT.AGGREGATE` and `FT.SEARCH` (#2488) * #2486: add timeout as optional param in FT.Search * return timeout from aggregate * add test case for TIMEOUT in aggregate * add TIMEOUT option in search file * add test cases for TIMEOUT option in search file * uodate search/aggregates to add timeout when it is not undefuned * update search to add timeout when it is not undefuned * update test case for AGGREGATE --- packages/search/lib/commands/AGGREGATE.spec.ts | 7 +++++++ packages/search/lib/commands/AGGREGATE.ts | 5 +++++ packages/search/lib/commands/SEARCH.spec.ts | 9 +++++++++ packages/search/lib/commands/SEARCH.ts | 1 + packages/search/lib/commands/index.ts | 4 ++++ 5 files changed, 26 insertions(+) diff --git a/packages/search/lib/commands/AGGREGATE.spec.ts b/packages/search/lib/commands/AGGREGATE.spec.ts index a233007643..d1e4565339 100644 --- a/packages/search/lib/commands/AGGREGATE.spec.ts +++ b/packages/search/lib/commands/AGGREGATE.spec.ts @@ -454,6 +454,13 @@ describe('AGGREGATE', () => { ['FT.AGGREGATE', 'index', '*', 'DIALECT', '1'] ); }); + + it('with TIMEOUT', () => { + assert.deepEqual( + transformArguments('index', '*', { TIMEOUT: 10 }), + ['FT.AGGREGATE', 'index', '*', 'TIMEOUT', '10'] + ); + }); }); testUtils.testWithClient('client.ft.aggregate', async client => { diff --git a/packages/search/lib/commands/AGGREGATE.ts b/packages/search/lib/commands/AGGREGATE.ts index c32d20b0b1..950d959243 100644 --- a/packages/search/lib/commands/AGGREGATE.ts +++ b/packages/search/lib/commands/AGGREGATE.ts @@ -124,6 +124,7 @@ export interface AggregateOptions { STEPS?: Array; PARAMS?: Params; DIALECT?: number; + TIMEOUT?: number; } export const FIRST_KEY_INDEX = 1; @@ -213,6 +214,10 @@ export function pushAggregatehOptions( args.push('DIALECT', options.DIALECT.toString()); } + if (options?.TIMEOUT !== undefined) { + args.push('TIMEOUT', options.TIMEOUT.toString()); + } + return args; } diff --git a/packages/search/lib/commands/SEARCH.spec.ts b/packages/search/lib/commands/SEARCH.spec.ts index 47c82cf892..931458b3a2 100644 --- a/packages/search/lib/commands/SEARCH.spec.ts +++ b/packages/search/lib/commands/SEARCH.spec.ts @@ -233,6 +233,15 @@ describe('SEARCH', () => { ['FT.SEARCH', 'index', 'query', 'DIALECT', '1'] ); }); + + it('with TIMEOUT', () => { + assert.deepEqual( + transformArguments('index', 'query', { + TIMEOUT: 5 + }), + ['FT.SEARCH', 'index', 'query', 'TIMEOUT', '5'] + ); + }); }); describe('client.ft.search', () => { diff --git a/packages/search/lib/commands/SEARCH.ts b/packages/search/lib/commands/SEARCH.ts index fbccb25058..ef6c0d5c2d 100644 --- a/packages/search/lib/commands/SEARCH.ts +++ b/packages/search/lib/commands/SEARCH.ts @@ -55,6 +55,7 @@ export interface SearchOptions { }; PARAMS?: Params; DIALECT?: number; + TIMEOUT?: number; } export function transformArguments( diff --git a/packages/search/lib/commands/index.ts b/packages/search/lib/commands/index.ts index d56db7bdbb..0470aff213 100644 --- a/packages/search/lib/commands/index.ts +++ b/packages/search/lib/commands/index.ts @@ -510,6 +510,10 @@ export function pushSearchOptions( args.preserve = true; } + if (options?.TIMEOUT !== undefined) { + args.push('TIMEOUT', options.TIMEOUT.toString()); + } + return args; }