From fcdaa8795810ac7aa6b750a9d27c3356d6231298 Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Wed, 22 Feb 2023 23:08:56 -0500 Subject: [PATCH 1/7] ref #2419 - fix FT.SEARCH RETURN [] --- packages/search/lib/commands/SEARCH.spec.ts | 6 +++++- packages/search/lib/commands/SEARCH.ts | 11 ++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/search/lib/commands/SEARCH.spec.ts b/packages/search/lib/commands/SEARCH.spec.ts index a5d8ae9e6c4..4f74202cbc7 100644 --- a/packages/search/lib/commands/SEARCH.spec.ts +++ b/packages/search/lib/commands/SEARCH.spec.ts @@ -267,7 +267,8 @@ describe('SEARCH', () => { client.ft.create('index', { field: SchemaFieldTypes.NUMERIC }), - client.hSet('1', 'field', '1') + client.hSet('1', 'field', '1'), + client.hSet('2', 'field', '2') ]); assert.deepEqual( @@ -279,6 +280,9 @@ describe('SEARCH', () => { documents: [{ id: '1', value: Object.create(null) + }, { + id: '2', + value: Object.create(null) }] } ); diff --git a/packages/search/lib/commands/SEARCH.ts b/packages/search/lib/commands/SEARCH.ts index bed06e22c36..d40467f507f 100644 --- a/packages/search/lib/commands/SEARCH.ts +++ b/packages/search/lib/commands/SEARCH.ts @@ -62,21 +62,23 @@ export function transformArguments( query: string, options?: SearchOptions ): RedisCommandArguments { - return pushSearchOptions( + const args = pushSearchOptions( ['FT.SEARCH', index, query], options ); + + args.preserve = options?.RETURN.length === 0; } export type SearchRawReply = Array; -export function transformReply(reply: SearchRawReply): SearchReply { +export function transformReply(reply: SearchRawReply, hasDocuments: boolean): SearchReply { const documents = []; let i = 1; while (i < reply.length) { documents.push({ id: reply[i++], - value: documentValue(reply[i++]) + value: hasDocuments ? documentValue(reply[i++]) : null }); } @@ -88,8 +90,7 @@ export function transformReply(reply: SearchRawReply): SearchReply { function documentValue(tuples: any) { const message = Object.create(null); - if (tuples === undefined) return message; - + let i = 0; while (i < tuples.length) { const key = tuples[i++], From 0beb5814037254fbe7b00e06f2ec3e1bdc40e8ac Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Wed, 22 Feb 2023 23:11:57 -0500 Subject: [PATCH 2/7] fix transformReply --- packages/search/lib/commands/SEARCH.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/search/lib/commands/SEARCH.ts b/packages/search/lib/commands/SEARCH.ts index d40467f507f..78c2922b90d 100644 --- a/packages/search/lib/commands/SEARCH.ts +++ b/packages/search/lib/commands/SEARCH.ts @@ -72,13 +72,13 @@ export function transformArguments( export type SearchRawReply = Array; -export function transformReply(reply: SearchRawReply, hasDocuments: boolean): SearchReply { +export function transformReply(reply: SearchRawReply, withoutDocuments: boolean): SearchReply { const documents = []; let i = 1; while (i < reply.length) { documents.push({ id: reply[i++], - value: hasDocuments ? documentValue(reply[i++]) : null + value: withoutDocuments ? Object.create(null) : documentValue(reply[i++]) }); } @@ -90,7 +90,7 @@ export function transformReply(reply: SearchRawReply, hasDocuments: boolean): Se function documentValue(tuples: any) { const message = Object.create(null); - + let i = 0; while (i < tuples.length) { const key = tuples[i++], From 9a8f7ea5f0470d3d8c8d6a19e0b93cf6c466e24d Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Wed, 22 Feb 2023 23:23:26 -0500 Subject: [PATCH 3/7] fix PROFILE SEARCH as well --- packages/search/lib/commands/PROFILE_SEARCH.ts | 10 ++++++---- packages/search/lib/commands/SEARCH.ts | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/search/lib/commands/PROFILE_SEARCH.ts b/packages/search/lib/commands/PROFILE_SEARCH.ts index 8040ccb5e05..5e2a379a8aa 100644 --- a/packages/search/lib/commands/PROFILE_SEARCH.ts +++ b/packages/search/lib/commands/PROFILE_SEARCH.ts @@ -9,21 +9,23 @@ export function transformArguments( query: string, options?: ProfileOptions & SearchOptions ): RedisCommandArguments { - const args = ['FT.PROFILE', index, 'SEARCH']; + let args = ['FT.PROFILE', index, 'SEARCH']; if (options?.LIMITED) { args.push('LIMITED'); } args.push('QUERY', query); - return pushSearchOptions(args, options); + args = pushSearchOptions(args, options); + args.preserve = options?.RETURN?.length === 0; + return args; } type ProfileSearchRawReply = ProfileRawReply; -export function transformReply(reply: ProfileSearchRawReply): ProfileReply { +export function transformReply(reply: ProfileSearchRawReply, withoutDocuments: boolean): ProfileReply { return { - results: transformSearchReply(reply[0]), + results: transformSearchReply(reply[0], withoutDocuments), profile: transformProfile(reply[1]) }; } diff --git a/packages/search/lib/commands/SEARCH.ts b/packages/search/lib/commands/SEARCH.ts index 78c2922b90d..b7d1701a948 100644 --- a/packages/search/lib/commands/SEARCH.ts +++ b/packages/search/lib/commands/SEARCH.ts @@ -67,7 +67,7 @@ export function transformArguments( options ); - args.preserve = options?.RETURN.length === 0; + args.preserve = options?.RETURN?.length === 0; } export type SearchRawReply = Array; From 88fba30869d6f713d55828916c83db0b6f254840 Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Wed, 22 Feb 2023 23:32:14 -0500 Subject: [PATCH 4/7] fix PROFILE SEARCH preserve --- packages/search/lib/commands/PROFILE_SEARCH.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/search/lib/commands/PROFILE_SEARCH.ts b/packages/search/lib/commands/PROFILE_SEARCH.ts index 5e2a379a8aa..a1b63dd15a4 100644 --- a/packages/search/lib/commands/PROFILE_SEARCH.ts +++ b/packages/search/lib/commands/PROFILE_SEARCH.ts @@ -9,7 +9,7 @@ export function transformArguments( query: string, options?: ProfileOptions & SearchOptions ): RedisCommandArguments { - let args = ['FT.PROFILE', index, 'SEARCH']; + let args: RedisCommandArguments = ['FT.PROFILE', index, 'SEARCH']; if (options?.LIMITED) { args.push('LIMITED'); From caf6bf9017d24b22f611a86340d4e52f118972fc Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Wed, 22 Feb 2023 23:41:26 -0500 Subject: [PATCH 5/7] move preserve login to `pushSearchOptions` --- packages/search/lib/commands/PROFILE_SEARCH.ts | 4 +--- packages/search/lib/commands/SEARCH.ts | 4 +--- packages/search/lib/commands/index.ts | 2 ++ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/search/lib/commands/PROFILE_SEARCH.ts b/packages/search/lib/commands/PROFILE_SEARCH.ts index a1b63dd15a4..94fba8a6a54 100644 --- a/packages/search/lib/commands/PROFILE_SEARCH.ts +++ b/packages/search/lib/commands/PROFILE_SEARCH.ts @@ -16,9 +16,7 @@ export function transformArguments( } args.push('QUERY', query); - args = pushSearchOptions(args, options); - args.preserve = options?.RETURN?.length === 0; - return args; + return pushSearchOptions(args, options); } type ProfileSearchRawReply = ProfileRawReply; diff --git a/packages/search/lib/commands/SEARCH.ts b/packages/search/lib/commands/SEARCH.ts index b7d1701a948..fbccb25058b 100644 --- a/packages/search/lib/commands/SEARCH.ts +++ b/packages/search/lib/commands/SEARCH.ts @@ -62,12 +62,10 @@ export function transformArguments( query: string, options?: SearchOptions ): RedisCommandArguments { - const args = pushSearchOptions( + return pushSearchOptions( ['FT.SEARCH', index, query], options ); - - args.preserve = options?.RETURN?.length === 0; } export type SearchRawReply = Array; diff --git a/packages/search/lib/commands/index.ts b/packages/search/lib/commands/index.ts index 74a49cb1bba..78a79ce17c8 100644 --- a/packages/search/lib/commands/index.ts +++ b/packages/search/lib/commands/index.ts @@ -506,6 +506,8 @@ export function pushSearchOptions( args.push('DIALECT', options.DIALECT.toString()); } + args.preserve = options?.RETURN?.length === 0; + return args; } From 848ec31e75dcdeb3cb76446d3c45346cf738efcc Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Thu, 23 Feb 2023 11:50:30 -0500 Subject: [PATCH 6/7] attach preserve only if true --- packages/search/lib/commands/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/search/lib/commands/index.ts b/packages/search/lib/commands/index.ts index 78a79ce17c8..d56db7bdbbe 100644 --- a/packages/search/lib/commands/index.ts +++ b/packages/search/lib/commands/index.ts @@ -506,7 +506,9 @@ export function pushSearchOptions( args.push('DIALECT', options.DIALECT.toString()); } - args.preserve = options?.RETURN?.length === 0; + if (options?.RETURN?.length === 0) { + args.preserve = true; + } return args; } From 26ba8d72e536fb7a07f2ec1e95ab1faa5bf35166 Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Thu, 23 Feb 2023 12:03:05 -0500 Subject: [PATCH 7/7] fix RETURN: [] test --- packages/search/lib/commands/SEARCH.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/search/lib/commands/SEARCH.spec.ts b/packages/search/lib/commands/SEARCH.spec.ts index 4f74202cbc7..47c82cf892b 100644 --- a/packages/search/lib/commands/SEARCH.spec.ts +++ b/packages/search/lib/commands/SEARCH.spec.ts @@ -276,7 +276,7 @@ describe('SEARCH', () => { RETURN: [] }), { - total: 1, + total: 2, documents: [{ id: '1', value: Object.create(null)