From e075afe628a5bd28f353e08fdb23d28844cbb550 Mon Sep 17 00:00:00 2001 From: "H. Temelski" Date: Fri, 14 Feb 2025 11:05:24 +0200 Subject: [PATCH 1/4] [CAE-563] Changed the default dialect --- .../search/lib/commands/AGGREGATE.spec.ts | 69 ++++++++++--------- packages/search/lib/commands/AGGREGATE.ts | 10 ++- .../lib/commands/AGGREGATE_WITHCURSOR.spec.ts | 7 +- .../lib/commands/AGGREGATE_WITHCURSOR.ts | 5 +- packages/search/lib/commands/EXPLAIN.spec.ts | 5 +- packages/search/lib/commands/EXPLAIN.ts | 4 +- .../search/lib/commands/EXPLAINCLI.spec.ts | 3 +- packages/search/lib/commands/EXPLAINCLI.ts | 2 + .../lib/commands/PROFILE_AGGREGATE.spec.ts | 5 +- .../lib/commands/PROFILE_SEARCH.spec.ts | 7 +- packages/search/lib/commands/SEARCH.spec.ts | 52 +++++++------- packages/search/lib/commands/SEARCH.ts | 5 +- .../lib/commands/SEARCH_NOCONTENT.spec.ts | 3 +- .../search/lib/commands/SEARCH_NOCONTENT.ts | 2 +- .../search/lib/commands/SPELLCHECK.spec.ts | 9 +-- packages/search/lib/commands/SPELLCHECK.ts | 3 + packages/search/lib/dialect/default.ts | 1 + 17 files changed, 109 insertions(+), 83 deletions(-) create mode 100644 packages/search/lib/dialect/default.ts diff --git a/packages/search/lib/commands/AGGREGATE.spec.ts b/packages/search/lib/commands/AGGREGATE.spec.ts index 787fbd1472f..414b622bd39 100644 --- a/packages/search/lib/commands/AGGREGATE.spec.ts +++ b/packages/search/lib/commands/AGGREGATE.spec.ts @@ -2,13 +2,14 @@ import { strict as assert } from 'node:assert'; import testUtils, { GLOBAL } from '../test-utils'; import AGGREGATE from './AGGREGATE'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; +import { DefaultDialect } from '../dialect/default'; -describe('AGGREGATE', () => { +describe('AGGREGATE', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(AGGREGATE, 'index', '*'), - ['FT.AGGREGATE', 'index', '*'] + ['FT.AGGREGATE', 'index', '*', 'DIALECT', DefaultDialect] ); }); @@ -17,14 +18,14 @@ describe('AGGREGATE', () => { parseArgs(AGGREGATE, 'index', '*', { VERBATIM: true }), - ['FT.AGGREGATE', 'index', '*', 'VERBATIM'] + ['FT.AGGREGATE', 'index', '*', 'VERBATIM', 'DIALECT', DefaultDialect] ); }); it('with ADDSCORES', () => { assert.deepEqual( parseArgs(AGGREGATE, 'index', '*', { ADDSCORES: true }), - ['FT.AGGREGATE', 'index', '*', 'ADDSCORES'] + ['FT.AGGREGATE', 'index', '*', 'ADDSCORES', 'DIALECT', DefaultDialect] ); }); @@ -36,7 +37,7 @@ describe('AGGREGATE', () => { parseArgs(AGGREGATE, 'index', '*', { LOAD: '@property' }), - ['FT.AGGREGATE', 'index', '*', 'LOAD', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'LOAD', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -47,7 +48,7 @@ describe('AGGREGATE', () => { identifier: '@property' } }), - ['FT.AGGREGATE', 'index', '*', 'LOAD', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'LOAD', '1', '@property', 'DIALECT', DefaultDialect] ); }); }); @@ -60,7 +61,7 @@ describe('AGGREGATE', () => { AS: 'alias' } }), - ['FT.AGGREGATE', 'index', '*', 'LOAD', '3', '@property', 'AS', 'alias'] + ['FT.AGGREGATE', 'index', '*', 'LOAD', '3', '@property', 'AS', 'alias', 'DIALECT', DefaultDialect] ); }); }); @@ -70,7 +71,7 @@ describe('AGGREGATE', () => { parseArgs(AGGREGATE, 'index', '*', { LOAD: ['@1', '@2'] }), - ['FT.AGGREGATE', 'index', '*', 'LOAD', '2', '@1', '@2'] + ['FT.AGGREGATE', 'index', '*', 'LOAD', '2', '@1', '@2', 'DIALECT', DefaultDialect] ); }); }); @@ -89,7 +90,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT', '0'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT', '0', 'DIALECT', DefaultDialect] ); }); @@ -104,7 +105,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT', '0', 'AS', 'count'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT', '0', 'AS', 'count', 'DIALECT', DefaultDialect] ); }); }); @@ -121,7 +122,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '1', '@property', 'REDUCE', 'COUNT', '0'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '1', '@property', 'REDUCE', 'COUNT', '0', 'DIALECT', DefaultDialect] ); }); @@ -136,7 +137,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '2', '@1', '@2', 'REDUCE', 'COUNT', '0'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '2', '@1', '@2', 'REDUCE', 'COUNT', '0', 'DIALECT', DefaultDialect] ); }); }); @@ -153,7 +154,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT_DISTINCT', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT_DISTINCT', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -168,7 +169,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT_DISTINCTISH', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT_DISTINCTISH', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -183,7 +184,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'SUM', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'SUM', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -198,7 +199,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'MIN', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'MIN', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -213,7 +214,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'MAX', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'MAX', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -228,7 +229,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'AVG', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'AVG', '1', '@property', 'DIALECT', DefaultDialect] ); }); it('STDDEV', () => { @@ -242,7 +243,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'STDDEV', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'STDDEV', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -258,7 +259,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'QUANTILE', '2', '@property', '0.5'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'QUANTILE', '2', '@property', '0.5', 'DIALECT', DefaultDialect] ); }); @@ -273,7 +274,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'TOLIST', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'TOLIST', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -289,7 +290,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '1', '@property'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '1', '@property', 'DIALECT', DefaultDialect] ); }); @@ -307,7 +308,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '3', '@property', 'BY', '@by'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '3', '@property', 'BY', '@by', 'DIALECT', DefaultDialect] ); }); @@ -326,7 +327,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '3', '@property', 'BY', '@by'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '3', '@property', 'BY', '@by', 'DIALECT', DefaultDialect] ); }); }); @@ -346,7 +347,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '4', '@property', 'BY', '@by', 'ASC'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '4', '@property', 'BY', '@by', 'ASC', 'DIALECT', DefaultDialect] ); }); }); @@ -364,7 +365,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'RANDOM_SAMPLE', '2', '@property', '1'] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'RANDOM_SAMPLE', '2', '@property', '1', 'DIALECT', DefaultDialect] ); }); }); @@ -378,7 +379,7 @@ describe('AGGREGATE', () => { BY: '@by' }] }), - ['FT.AGGREGATE', 'index', '*', 'SORTBY', '1', '@by'] + ['FT.AGGREGATE', 'index', '*', 'SORTBY', '1', '@by', 'DIALECT', DefaultDialect] ); }); @@ -390,7 +391,7 @@ describe('AGGREGATE', () => { BY: ['@1', '@2'] }] }), - ['FT.AGGREGATE', 'index', '*', 'SORTBY', '2', '@1', '@2'] + ['FT.AGGREGATE', 'index', '*', 'SORTBY', '2', '@1', '@2', 'DIALECT', DefaultDialect] ); }); @@ -403,7 +404,7 @@ describe('AGGREGATE', () => { MAX: 1 }] }), - ['FT.AGGREGATE', 'index', '*', 'SORTBY', '3', '@by', 'MAX', '1'] + ['FT.AGGREGATE', 'index', '*', 'SORTBY', '3', '@by', 'MAX', '1', 'DIALECT', DefaultDialect] ); }); }); @@ -417,7 +418,7 @@ describe('AGGREGATE', () => { AS: 'as' }] }), - ['FT.AGGREGATE', 'index', '*', 'APPLY', '@field + 1', 'AS', 'as'] + ['FT.AGGREGATE', 'index', '*', 'APPLY', '@field + 1', 'AS', 'as', 'DIALECT', DefaultDialect] ); }); @@ -430,7 +431,7 @@ describe('AGGREGATE', () => { size: 1 }] }), - ['FT.AGGREGATE', 'index', '*', 'LIMIT', '0', '1'] + ['FT.AGGREGATE', 'index', '*', 'LIMIT', '0', '1', 'DIALECT', DefaultDialect] ); }); @@ -442,7 +443,7 @@ describe('AGGREGATE', () => { expression: '@field != ""' }] }), - ['FT.AGGREGATE', 'index', '*', 'FILTER', '@field != ""'] + ['FT.AGGREGATE', 'index', '*', 'FILTER', '@field != ""', 'DIALECT', DefaultDialect] ); }); }); @@ -454,7 +455,7 @@ describe('AGGREGATE', () => { param: 'value' } }), - ['FT.AGGREGATE', 'index', '*', 'PARAMS', '2', 'param', 'value'] + ['FT.AGGREGATE', 'index', '*', 'PARAMS', '2', 'param', 'value', 'DIALECT', DefaultDialect] ); }); @@ -470,7 +471,7 @@ describe('AGGREGATE', () => { it('with TIMEOUT', () => { assert.deepEqual( parseArgs(AGGREGATE, 'index', '*', { TIMEOUT: 10 }), - ['FT.AGGREGATE', 'index', '*', 'TIMEOUT', '10'] + ['FT.AGGREGATE', 'index', '*', 'TIMEOUT', '10', 'DIALECT', DefaultDialect] ); }); }); diff --git a/packages/search/lib/commands/AGGREGATE.ts b/packages/search/lib/commands/AGGREGATE.ts index 925a91da008..806321f6912 100644 --- a/packages/search/lib/commands/AGGREGATE.ts +++ b/packages/search/lib/commands/AGGREGATE.ts @@ -3,6 +3,7 @@ import { ArrayReply, BlobStringReply, Command, MapReply, NumberReply, RedisArgum import { RediSearchProperty } from './CREATE'; import { FtSearchParams, parseParamsArgument } from './SEARCH'; import { transformTuplesReply } from '@redis/client/dist/lib/commands/generic-transformers'; +import { DefaultDialect } from '../dialect/default'; type LoadField = RediSearchProperty | { identifier: RediSearchProperty; @@ -12,12 +13,12 @@ type LoadField = RediSearchProperty | { export const FT_AGGREGATE_STEPS = { GROUPBY: 'GROUPBY', SORTBY: 'SORTBY', - APPLY: 'APPLY', + APPLY: 'APPLY', LIMIT: 'LIMIT', FILTER: 'FILTER' } as const; -type FT_AGGREGATE_STEPS = typeof FT_AGGREGATE_STEPS; +type FT_AGGREGATE_STEPS = typeof FT_AGGREGATE_STEPS; export type FtAggregateStep = FT_AGGREGATE_STEPS[keyof FT_AGGREGATE_STEPS]; @@ -124,6 +125,7 @@ export interface FtAggregateOptions { TIMEOUT?: number; STEPS?: Array; PARAMS?: FtSearchParams; + SKIPDIALECT?: boolean; DIALECT?: number; } @@ -249,8 +251,10 @@ export function parseAggregateOptions(parser: CommandParser , options?: FtAggreg parseParamsArgument(parser, options?.PARAMS); - if (options?.DIALECT !== undefined) { + if (options?.DIALECT) { parser.push('DIALECT', options.DIALECT.toString()); + } else { + parser.push('DIALECT', DefaultDialect); } } diff --git a/packages/search/lib/commands/AGGREGATE_WITHCURSOR.spec.ts b/packages/search/lib/commands/AGGREGATE_WITHCURSOR.spec.ts index 57f46d1e32c..7fbbcff2583 100644 --- a/packages/search/lib/commands/AGGREGATE_WITHCURSOR.spec.ts +++ b/packages/search/lib/commands/AGGREGATE_WITHCURSOR.spec.ts @@ -2,13 +2,14 @@ import { strict as assert } from 'node:assert'; import testUtils, { GLOBAL } from '../test-utils'; import AGGREGATE_WITHCURSOR from './AGGREGATE_WITHCURSOR'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; +import { DefaultDialect } from '../dialect/default'; describe('AGGREGATE WITHCURSOR', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(AGGREGATE_WITHCURSOR, 'index', '*'), - ['FT.AGGREGATE', 'index', '*', 'WITHCURSOR'] + ['FT.AGGREGATE', 'index', '*', 'DIALECT', DefaultDialect, 'WITHCURSOR'] ); }); @@ -17,7 +18,7 @@ describe('AGGREGATE WITHCURSOR', () => { parseArgs(AGGREGATE_WITHCURSOR, 'index', '*', { COUNT: 1 }), - ['FT.AGGREGATE', 'index', '*', 'WITHCURSOR', 'COUNT', '1'] + ['FT.AGGREGATE', 'index', '*', 'DIALECT', DefaultDialect, 'WITHCURSOR', 'COUNT', '1'] ); }); @@ -26,7 +27,7 @@ describe('AGGREGATE WITHCURSOR', () => { parseArgs(AGGREGATE_WITHCURSOR, 'index', '*', { MAXIDLE: 1 }), - ['FT.AGGREGATE', 'index', '*', 'WITHCURSOR', 'MAXIDLE', '1'] + ['FT.AGGREGATE', 'index', '*', 'DIALECT', DefaultDialect, 'WITHCURSOR', 'MAXIDLE', '1'] ); }); }); diff --git a/packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts b/packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts index 8dfca7169ef..ea9f872326a 100644 --- a/packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts +++ b/packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts @@ -21,13 +21,14 @@ export default { IS_READ_ONLY: AGGREGATE.IS_READ_ONLY, parseCommand(parser: CommandParser, index: RedisArgument, query: RedisArgument, options?: FtAggregateWithCursorOptions) { AGGREGATE.parseCommand(parser, index, query, options); + parser.push('WITHCURSOR'); - if (options?.COUNT !== undefined) { + if (options?.COUNT) { parser.push('COUNT', options.COUNT.toString()); } - if(options?.MAXIDLE !== undefined) { + if(options?.MAXIDLE) { parser.push('MAXIDLE', options.MAXIDLE.toString()); } }, diff --git a/packages/search/lib/commands/EXPLAIN.spec.ts b/packages/search/lib/commands/EXPLAIN.spec.ts index ddc551fbd71..eda74cc71a7 100644 --- a/packages/search/lib/commands/EXPLAIN.spec.ts +++ b/packages/search/lib/commands/EXPLAIN.spec.ts @@ -3,13 +3,14 @@ import EXPLAIN from './EXPLAIN'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; import testUtils, { GLOBAL } from '../test-utils'; import { SCHEMA_FIELD_TYPE } from './CREATE'; +import { DefaultDialect } from '../dialect/default'; describe('EXPLAIN', () => { describe('transformArguments', () => { it('simple', () => { assert.deepEqual( parseArgs(EXPLAIN, 'index', '*'), - ['FT.EXPLAIN', 'index', '*'] + ['FT.EXPLAIN', 'index', '*', 'DIALECT', DefaultDialect] ); }); @@ -20,7 +21,7 @@ describe('EXPLAIN', () => { param: 'value' } }), - ['FT.EXPLAIN', 'index', '*', 'PARAMS', '2', 'param', 'value'] + ['FT.EXPLAIN', 'index', '*', 'PARAMS', '2', 'param', 'value', 'DIALECT', DefaultDialect] ); }); diff --git a/packages/search/lib/commands/EXPLAIN.ts b/packages/search/lib/commands/EXPLAIN.ts index dcd7c3c0d2d..e3f809a32c9 100644 --- a/packages/search/lib/commands/EXPLAIN.ts +++ b/packages/search/lib/commands/EXPLAIN.ts @@ -1,7 +1,7 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, SimpleStringReply, Command } from '@redis/client/dist/lib/RESP/types'; import { FtSearchParams, parseParamsArgument } from './SEARCH'; - +import { DefaultDialect } from '../dialect/default'; export interface FtExplainOptions { PARAMS?: FtSearchParams; DIALECT?: number; @@ -22,6 +22,8 @@ export default { if (options?.DIALECT) { parser.push('DIALECT', options.DIALECT.toString()); + } else { + parser.push('DIALECT', DefaultDialect); } }, transformReply: undefined as unknown as () => SimpleStringReply diff --git a/packages/search/lib/commands/EXPLAINCLI.spec.ts b/packages/search/lib/commands/EXPLAINCLI.spec.ts index cf46a1740c5..9c43e3a2021 100644 --- a/packages/search/lib/commands/EXPLAINCLI.spec.ts +++ b/packages/search/lib/commands/EXPLAINCLI.spec.ts @@ -1,12 +1,13 @@ import { strict as assert } from 'node:assert'; import EXPLAINCLI from './EXPLAINCLI'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; +import { DefaultDialect } from '../dialect/default'; describe('EXPLAINCLI', () => { it('transformArguments', () => { assert.deepEqual( parseArgs(EXPLAINCLI, 'index', '*'), - ['FT.EXPLAINCLI', 'index', '*'] + ['FT.EXPLAINCLI', 'index', '*', 'DIALECT', DefaultDialect] ); }); }); diff --git a/packages/search/lib/commands/EXPLAINCLI.ts b/packages/search/lib/commands/EXPLAINCLI.ts index 53711067058..0df4c91cbc7 100644 --- a/packages/search/lib/commands/EXPLAINCLI.ts +++ b/packages/search/lib/commands/EXPLAINCLI.ts @@ -1,11 +1,13 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, ArrayReply, BlobStringReply, Command } from '@redis/client/dist/lib/RESP/types'; +import { DefaultDialect } from '../dialect/default'; export default { NOT_KEYED_COMMAND: true, IS_READ_ONLY: true, parseCommand(parser: CommandParser, index: RedisArgument, query: RedisArgument) { parser.push('FT.EXPLAINCLI', index, query); + parser.push('DIALECT', DefaultDialect) }, transformReply: undefined as unknown as () => ArrayReply } as const satisfies Command; diff --git a/packages/search/lib/commands/PROFILE_AGGREGATE.spec.ts b/packages/search/lib/commands/PROFILE_AGGREGATE.spec.ts index ee112118c95..aa139838d25 100644 --- a/packages/search/lib/commands/PROFILE_AGGREGATE.spec.ts +++ b/packages/search/lib/commands/PROFILE_AGGREGATE.spec.ts @@ -4,13 +4,14 @@ import { FT_AGGREGATE_STEPS } from './AGGREGATE'; import PROFILE_AGGREGATE from './PROFILE_AGGREGATE'; import { SCHEMA_FIELD_TYPE } from './CREATE'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; +import { DefaultDialect } from '../dialect/default'; describe('PROFILE AGGREGATE', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(PROFILE_AGGREGATE, 'index', 'query'), - ['FT.PROFILE', 'index', 'AGGREGATE', 'QUERY', 'query'] + ['FT.PROFILE', 'index', 'AGGREGATE', 'QUERY', 'query', 'DIALECT', DefaultDialect] ); }); @@ -25,7 +26,7 @@ describe('PROFILE AGGREGATE', () => { }] }), ['FT.PROFILE', 'index', 'AGGREGATE', 'LIMITED', 'QUERY', 'query', - 'VERBATIM', 'SORTBY', '1', '@by'] + 'VERBATIM', 'SORTBY', '1', '@by', 'DIALECT', DefaultDialect] ); }); }); diff --git a/packages/search/lib/commands/PROFILE_SEARCH.spec.ts b/packages/search/lib/commands/PROFILE_SEARCH.spec.ts index 524ff1a5228..62ace64a08a 100644 --- a/packages/search/lib/commands/PROFILE_SEARCH.spec.ts +++ b/packages/search/lib/commands/PROFILE_SEARCH.spec.ts @@ -3,14 +3,14 @@ import testUtils, { GLOBAL } from '../test-utils'; import PROFILE_SEARCH from './PROFILE_SEARCH'; import { SCHEMA_FIELD_TYPE } from './CREATE'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; - +import { DefaultDialect } from '../dialect/default'; describe('PROFILE SEARCH', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(PROFILE_SEARCH, 'index', 'query'), - ['FT.PROFILE', 'index', 'SEARCH', 'QUERY', 'query'] + ['FT.PROFILE', 'index', 'SEARCH', 'QUERY', 'query', 'DIALECT', DefaultDialect] ); }); @@ -22,7 +22,7 @@ describe('PROFILE SEARCH', () => { INKEYS: 'key' }), ['FT.PROFILE', 'index', 'SEARCH', 'LIMITED', 'QUERY', 'query', - 'VERBATIM', 'INKEYS', '1', 'key'] + 'VERBATIM', 'INKEYS', '1', 'key', 'DIALECT', DefaultDialect] ); }); }); @@ -36,6 +36,7 @@ describe('PROFILE SEARCH', () => { ]); const res = await client.ft.profileSearch('index', '*'); + assert.strictEqual('None', res.profile.warning); assert.ok(typeof res.profile.iteratorsProfile.counter === 'number'); assert.ok(typeof res.profile.parsingTime === 'string'); diff --git a/packages/search/lib/commands/SEARCH.spec.ts b/packages/search/lib/commands/SEARCH.spec.ts index 24248b4cf15..01071111cdc 100644 --- a/packages/search/lib/commands/SEARCH.spec.ts +++ b/packages/search/lib/commands/SEARCH.spec.ts @@ -2,13 +2,15 @@ import { strict as assert } from 'node:assert'; import testUtils, { GLOBAL } from '../test-utils'; import SEARCH from './SEARCH'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; +import { DefaultDialect } from '../dialect/default'; + describe('FT.SEARCH', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(SEARCH, 'index', 'query'), - ['FT.SEARCH', 'index', 'query'] + ['FT.SEARCH', 'index', 'query', 'DIALECT', DefaultDialect] ); }); @@ -17,7 +19,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { VERBATIM: true }), - ['FT.SEARCH', 'index', 'query', 'VERBATIM'] + ['FT.SEARCH', 'index', 'query', 'VERBATIM', 'DIALECT', DefaultDialect] ); }); @@ -26,7 +28,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { NOSTOPWORDS: true }), - ['FT.SEARCH', 'index', 'query', 'NOSTOPWORDS'] + ['FT.SEARCH', 'index', 'query', 'NOSTOPWORDS', 'DIALECT', DefaultDialect] ); }); @@ -35,7 +37,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { INKEYS: 'key' }), - ['FT.SEARCH', 'index', 'query', 'INKEYS', '1', 'key'] + ['FT.SEARCH', 'index', 'query', 'INKEYS', '1', 'key', 'DIALECT', DefaultDialect] ); }); @@ -44,7 +46,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { INFIELDS: 'field' }), - ['FT.SEARCH', 'index', 'query', 'INFIELDS', '1', 'field'] + ['FT.SEARCH', 'index', 'query', 'INFIELDS', '1', 'field', 'DIALECT', DefaultDialect] ); }); @@ -53,7 +55,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { RETURN: 'return' }), - ['FT.SEARCH', 'index', 'query', 'RETURN', '1', 'return'] + ['FT.SEARCH', 'index', 'query', 'RETURN', '1', 'return', 'DIALECT', DefaultDialect] ); }); @@ -63,7 +65,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { SUMMARIZE: true }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE'] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'DIALECT', DefaultDialect] ); }); @@ -75,7 +77,7 @@ describe('FT.SEARCH', () => { FIELDS: '@field' } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FIELDS', '1', '@field'] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FIELDS', '1', '@field', 'DIALECT', DefaultDialect] ); }); @@ -86,7 +88,7 @@ describe('FT.SEARCH', () => { FIELDS: ['@1', '@2'] } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FIELDS', '2', '@1', '@2'] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FIELDS', '2', '@1', '@2', 'DIALECT', DefaultDialect] ); }); }); @@ -98,7 +100,7 @@ describe('FT.SEARCH', () => { FRAGS: 1 } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FRAGS', '1'] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FRAGS', '1', 'DIALECT', DefaultDialect] ); }); @@ -109,7 +111,7 @@ describe('FT.SEARCH', () => { LEN: 1 } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'LEN', '1'] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'LEN', '1', 'DIALECT', DefaultDialect] ); }); @@ -120,7 +122,7 @@ describe('FT.SEARCH', () => { SEPARATOR: 'separator' } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'SEPARATOR', 'separator'] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'SEPARATOR', 'separator', 'DIALECT', DefaultDialect] ); }); }); @@ -131,7 +133,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { HIGHLIGHT: true }), - ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT'] + ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'DIALECT', DefaultDialect] ); }); @@ -143,7 +145,7 @@ describe('FT.SEARCH', () => { FIELDS: ['@field'] } }), - ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'FIELDS', '1', '@field'] + ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'FIELDS', '1', '@field', 'DIALECT', DefaultDialect] ); }); @@ -154,7 +156,7 @@ describe('FT.SEARCH', () => { FIELDS: ['@1', '@2'] } }), - ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'FIELDS', '2', '@1', '@2'] + ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'FIELDS', '2', '@1', '@2', 'DIALECT', DefaultDialect] ); }); }); @@ -169,7 +171,7 @@ describe('FT.SEARCH', () => { } } }), - ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'TAGS', 'open', 'close'] + ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'TAGS', 'open', 'close', 'DIALECT', DefaultDialect] ); }); }); @@ -179,7 +181,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { SLOP: 1 }), - ['FT.SEARCH', 'index', 'query', 'SLOP', '1'] + ['FT.SEARCH', 'index', 'query', 'SLOP', '1', 'DIALECT', DefaultDialect] ); }); @@ -188,7 +190,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { TIMEOUT: 1 }), - ['FT.SEARCH', 'index', 'query', 'TIMEOUT', '1'] + ['FT.SEARCH', 'index', 'query', 'TIMEOUT', '1', 'DIALECT', DefaultDialect] ); }); @@ -197,7 +199,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { INORDER: true }), - ['FT.SEARCH', 'index', 'query', 'INORDER'] + ['FT.SEARCH', 'index', 'query', 'INORDER', 'DIALECT', DefaultDialect] ); }); @@ -206,7 +208,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { LANGUAGE: 'Arabic' }), - ['FT.SEARCH', 'index', 'query', 'LANGUAGE', 'Arabic'] + ['FT.SEARCH', 'index', 'query', 'LANGUAGE', 'Arabic', 'DIALECT', DefaultDialect] ); }); @@ -215,7 +217,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { EXPANDER: 'expender' }), - ['FT.SEARCH', 'index', 'query', 'EXPANDER', 'expender'] + ['FT.SEARCH', 'index', 'query', 'EXPANDER', 'expender', 'DIALECT', DefaultDialect] ); }); @@ -224,7 +226,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { SCORER: 'scorer' }), - ['FT.SEARCH', 'index', 'query', 'SCORER', 'scorer'] + ['FT.SEARCH', 'index', 'query', 'SCORER', 'scorer', 'DIALECT', DefaultDialect] ); }); @@ -233,7 +235,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { SORTBY: '@by' }), - ['FT.SEARCH', 'index', 'query', 'SORTBY', '@by'] + ['FT.SEARCH', 'index', 'query', 'SORTBY', '@by', 'DIALECT', DefaultDialect] ); }); @@ -245,7 +247,7 @@ describe('FT.SEARCH', () => { size: 1 } }), - ['FT.SEARCH', 'index', 'query', 'LIMIT', '0', '1'] + ['FT.SEARCH', 'index', 'query', 'LIMIT', '0', '1', 'DIALECT', DefaultDialect] ); }); @@ -258,7 +260,7 @@ describe('FT.SEARCH', () => { number: 1 } }), - ['FT.SEARCH', 'index', 'query', 'PARAMS', '6', 'string', 'string', 'buffer', Buffer.from('buffer'), 'number', '1'] + ['FT.SEARCH', 'index', 'query', 'PARAMS', '6', 'string', 'string', 'buffer', Buffer.from('buffer'), 'number', '1', 'DIALECT', DefaultDialect] ); }); diff --git a/packages/search/lib/commands/SEARCH.ts b/packages/search/lib/commands/SEARCH.ts index c2d2a9d2696..ff15fc298f7 100644 --- a/packages/search/lib/commands/SEARCH.ts +++ b/packages/search/lib/commands/SEARCH.ts @@ -2,6 +2,7 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, Command, ReplyUnion } from '@redis/client/dist/lib/RESP/types'; import { RedisVariadicArgument, parseOptionalVariadicArgument } from '@redis/client/dist/lib/commands/generic-transformers'; import { RediSearchProperty, RediSearchLanguage } from './CREATE'; +import { DefaultDialect } from '../dialect/default'; export type FtSearchParams = Record; @@ -150,8 +151,10 @@ export function parseSearchOptions(parser: CommandParser, options?: FtSearchOpti parseParamsArgument(parser, options?.PARAMS); - if (options?.DIALECT !== undefined) { + if (options?.DIALECT) { parser.push('DIALECT', options.DIALECT.toString()); + } else { + parser.push('DIALECT', DefaultDialect); } } diff --git a/packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts b/packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts index bfcca8b4bda..ef885009375 100644 --- a/packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts +++ b/packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts @@ -2,13 +2,14 @@ import { strict as assert } from 'assert'; import testUtils, { GLOBAL } from '../test-utils'; import SEARCH_NOCONTENT from './SEARCH_NOCONTENT'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; +import { DefaultDialect } from '../dialect/default'; describe('FT.SEARCH NOCONTENT', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(SEARCH_NOCONTENT, 'index', 'query'), - ['FT.SEARCH', 'index', 'query', 'NOCONTENT'] + ['FT.SEARCH', 'index', 'query', 'DIALECT', DefaultDialect, 'NOCONTENT'] ); }); }); diff --git a/packages/search/lib/commands/SEARCH_NOCONTENT.ts b/packages/search/lib/commands/SEARCH_NOCONTENT.ts index c0a152375d9..a6968851acd 100644 --- a/packages/search/lib/commands/SEARCH_NOCONTENT.ts +++ b/packages/search/lib/commands/SEARCH_NOCONTENT.ts @@ -5,7 +5,7 @@ export default { NOT_KEYED_COMMAND: SEARCH.NOT_KEYED_COMMAND, IS_READ_ONLY: SEARCH.IS_READ_ONLY, parseCommand(...args: Parameters) { - SEARCH.parseCommand(...args); + SEARCH.parseCommand(...args); args[0].push('NOCONTENT'); }, transformReply: { diff --git a/packages/search/lib/commands/SPELLCHECK.spec.ts b/packages/search/lib/commands/SPELLCHECK.spec.ts index 4f5a3628f4d..854789f0374 100644 --- a/packages/search/lib/commands/SPELLCHECK.spec.ts +++ b/packages/search/lib/commands/SPELLCHECK.spec.ts @@ -2,13 +2,14 @@ import { strict as assert } from 'node:assert'; import testUtils, { GLOBAL } from '../test-utils'; import SPELLCHECK from './SPELLCHECK'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; +import { DefaultDialect } from '../dialect/default'; describe('FT.SPELLCHECK', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(SPELLCHECK, 'index', 'query'), - ['FT.SPELLCHECK', 'index', 'query'] + ['FT.SPELLCHECK', 'index', 'query', 'DIALECT', DefaultDialect] ); }); @@ -17,7 +18,7 @@ describe('FT.SPELLCHECK', () => { parseArgs(SPELLCHECK, 'index', 'query', { DISTANCE: 2 }), - ['FT.SPELLCHECK', 'index', 'query', 'DISTANCE', '2'] + ['FT.SPELLCHECK', 'index', 'query', 'DISTANCE', '2', 'DIALECT', DefaultDialect] ); }); @@ -30,7 +31,7 @@ describe('FT.SPELLCHECK', () => { dictionary: 'dictionary' } }), - ['FT.SPELLCHECK', 'index', 'query', 'TERMS', 'INCLUDE', 'dictionary'] + ['FT.SPELLCHECK', 'index', 'query', 'TERMS', 'INCLUDE', 'dictionary', 'DIALECT', DefaultDialect] ); }); @@ -45,7 +46,7 @@ describe('FT.SPELLCHECK', () => { dictionary: 'exclude' }] }), - ['FT.SPELLCHECK', 'index', 'query', 'TERMS', 'INCLUDE', 'include', 'TERMS', 'EXCLUDE', 'exclude'] + ['FT.SPELLCHECK', 'index', 'query', 'TERMS', 'INCLUDE', 'include', 'TERMS', 'EXCLUDE', 'exclude', 'DIALECT', DefaultDialect] ); }); }); diff --git a/packages/search/lib/commands/SPELLCHECK.ts b/packages/search/lib/commands/SPELLCHECK.ts index ae95b72c249..d6abc44b8aa 100644 --- a/packages/search/lib/commands/SPELLCHECK.ts +++ b/packages/search/lib/commands/SPELLCHECK.ts @@ -1,5 +1,6 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, Command, ReplyUnion } from '@redis/client/dist/lib/RESP/types'; +import { DefaultDialect } from '../dialect/default'; export interface Terms { mode: 'INCLUDE' | 'EXCLUDE'; @@ -34,6 +35,8 @@ export default { if (options?.DIALECT) { parser.push('DIALECT', options.DIALECT.toString()); + } else { + parser.push('DIALECT', DefaultDialect); } }, transformReply: { diff --git a/packages/search/lib/dialect/default.ts b/packages/search/lib/dialect/default.ts new file mode 100644 index 00000000000..1d8895ee4d7 --- /dev/null +++ b/packages/search/lib/dialect/default.ts @@ -0,0 +1 @@ +export const DefaultDialect = '2'; \ No newline at end of file From fc1003ff3de55a320b4aa6155d2204307a8ffebc Mon Sep 17 00:00:00 2001 From: "H. Temelski" Date: Fri, 14 Feb 2025 11:14:17 +0200 Subject: [PATCH 2/4] [CAE-563] Removed unused field --- packages/search/lib/commands/AGGREGATE.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/search/lib/commands/AGGREGATE.ts b/packages/search/lib/commands/AGGREGATE.ts index 806321f6912..b9dddb7c340 100644 --- a/packages/search/lib/commands/AGGREGATE.ts +++ b/packages/search/lib/commands/AGGREGATE.ts @@ -125,7 +125,6 @@ export interface FtAggregateOptions { TIMEOUT?: number; STEPS?: Array; PARAMS?: FtSearchParams; - SKIPDIALECT?: boolean; DIALECT?: number; } From 13329105118eb34957595557a69b3ecd9542c089 Mon Sep 17 00:00:00 2001 From: "H. Temelski" Date: Fri, 14 Feb 2025 13:13:28 +0200 Subject: [PATCH 3/4] [CAE-563] Minor formatting fixes --- packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts | 5 ++--- packages/search/lib/commands/EXPLAIN.ts | 1 + packages/search/lib/commands/PROFILE_SEARCH.spec.ts | 1 - packages/search/lib/dialect/default.ts | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts b/packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts index ea9f872326a..8dfca7169ef 100644 --- a/packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts +++ b/packages/search/lib/commands/AGGREGATE_WITHCURSOR.ts @@ -21,14 +21,13 @@ export default { IS_READ_ONLY: AGGREGATE.IS_READ_ONLY, parseCommand(parser: CommandParser, index: RedisArgument, query: RedisArgument, options?: FtAggregateWithCursorOptions) { AGGREGATE.parseCommand(parser, index, query, options); - parser.push('WITHCURSOR'); - if (options?.COUNT) { + if (options?.COUNT !== undefined) { parser.push('COUNT', options.COUNT.toString()); } - if(options?.MAXIDLE) { + if(options?.MAXIDLE !== undefined) { parser.push('MAXIDLE', options.MAXIDLE.toString()); } }, diff --git a/packages/search/lib/commands/EXPLAIN.ts b/packages/search/lib/commands/EXPLAIN.ts index e3f809a32c9..774d055530b 100644 --- a/packages/search/lib/commands/EXPLAIN.ts +++ b/packages/search/lib/commands/EXPLAIN.ts @@ -2,6 +2,7 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, SimpleStringReply, Command } from '@redis/client/dist/lib/RESP/types'; import { FtSearchParams, parseParamsArgument } from './SEARCH'; import { DefaultDialect } from '../dialect/default'; + export interface FtExplainOptions { PARAMS?: FtSearchParams; DIALECT?: number; diff --git a/packages/search/lib/commands/PROFILE_SEARCH.spec.ts b/packages/search/lib/commands/PROFILE_SEARCH.spec.ts index 62ace64a08a..710f9ae95c5 100644 --- a/packages/search/lib/commands/PROFILE_SEARCH.spec.ts +++ b/packages/search/lib/commands/PROFILE_SEARCH.spec.ts @@ -36,7 +36,6 @@ describe('PROFILE SEARCH', () => { ]); const res = await client.ft.profileSearch('index', '*'); - assert.strictEqual('None', res.profile.warning); assert.ok(typeof res.profile.iteratorsProfile.counter === 'number'); assert.ok(typeof res.profile.parsingTime === 'string'); diff --git a/packages/search/lib/dialect/default.ts b/packages/search/lib/dialect/default.ts index 1d8895ee4d7..4f007616331 100644 --- a/packages/search/lib/dialect/default.ts +++ b/packages/search/lib/dialect/default.ts @@ -1 +1 @@ -export const DefaultDialect = '2'; \ No newline at end of file +export const DefaultDialect = '2'; From aee7271d2f345e2e1e53a74368842134cef06f82 Mon Sep 17 00:00:00 2001 From: "H. Temelski" Date: Mon, 17 Feb 2025 09:52:40 +0200 Subject: [PATCH 4/4] [CAE-563] Renamed constant, added dialect option to exlpaincli --- .../search/lib/commands/AGGREGATE.spec.ts | 68 +++++++++---------- packages/search/lib/commands/AGGREGATE.ts | 4 +- .../lib/commands/AGGREGATE_WITHCURSOR.spec.ts | 8 +-- packages/search/lib/commands/EXPLAIN.spec.ts | 6 +- packages/search/lib/commands/EXPLAIN.ts | 4 +- .../search/lib/commands/EXPLAINCLI.spec.ts | 11 ++- packages/search/lib/commands/EXPLAINCLI.ts | 20 +++++- .../lib/commands/PROFILE_AGGREGATE.spec.ts | 6 +- .../lib/commands/PROFILE_SEARCH.spec.ts | 6 +- packages/search/lib/commands/SEARCH.spec.ts | 52 +++++++------- packages/search/lib/commands/SEARCH.ts | 4 +- .../lib/commands/SEARCH_NOCONTENT.spec.ts | 4 +- .../search/lib/commands/SPELLCHECK.spec.ts | 10 +-- packages/search/lib/commands/SPELLCHECK.ts | 4 +- packages/search/lib/dialect/default.ts | 2 +- 15 files changed, 115 insertions(+), 94 deletions(-) diff --git a/packages/search/lib/commands/AGGREGATE.spec.ts b/packages/search/lib/commands/AGGREGATE.spec.ts index 414b622bd39..420911c5600 100644 --- a/packages/search/lib/commands/AGGREGATE.spec.ts +++ b/packages/search/lib/commands/AGGREGATE.spec.ts @@ -2,14 +2,14 @@ import { strict as assert } from 'node:assert'; import testUtils, { GLOBAL } from '../test-utils'; import AGGREGATE from './AGGREGATE'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('AGGREGATE', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(AGGREGATE, 'index', '*'), - ['FT.AGGREGATE', 'index', '*', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -18,14 +18,14 @@ describe('AGGREGATE', () => { parseArgs(AGGREGATE, 'index', '*', { VERBATIM: true }), - ['FT.AGGREGATE', 'index', '*', 'VERBATIM', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'VERBATIM', 'DIALECT', DEFAULT_DIALECT] ); }); it('with ADDSCORES', () => { assert.deepEqual( parseArgs(AGGREGATE, 'index', '*', { ADDSCORES: true }), - ['FT.AGGREGATE', 'index', '*', 'ADDSCORES', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'ADDSCORES', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -37,7 +37,7 @@ describe('AGGREGATE', () => { parseArgs(AGGREGATE, 'index', '*', { LOAD: '@property' }), - ['FT.AGGREGATE', 'index', '*', 'LOAD', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'LOAD', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -48,7 +48,7 @@ describe('AGGREGATE', () => { identifier: '@property' } }), - ['FT.AGGREGATE', 'index', '*', 'LOAD', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'LOAD', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -61,7 +61,7 @@ describe('AGGREGATE', () => { AS: 'alias' } }), - ['FT.AGGREGATE', 'index', '*', 'LOAD', '3', '@property', 'AS', 'alias', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'LOAD', '3', '@property', 'AS', 'alias', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -71,7 +71,7 @@ describe('AGGREGATE', () => { parseArgs(AGGREGATE, 'index', '*', { LOAD: ['@1', '@2'] }), - ['FT.AGGREGATE', 'index', '*', 'LOAD', '2', '@1', '@2', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'LOAD', '2', '@1', '@2', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -90,7 +90,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT', '0', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT', '0', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -105,7 +105,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT', '0', 'AS', 'count', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT', '0', 'AS', 'count', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -122,7 +122,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '1', '@property', 'REDUCE', 'COUNT', '0', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '1', '@property', 'REDUCE', 'COUNT', '0', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -137,7 +137,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '2', '@1', '@2', 'REDUCE', 'COUNT', '0', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '2', '@1', '@2', 'REDUCE', 'COUNT', '0', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -154,7 +154,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT_DISTINCT', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT_DISTINCT', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -169,7 +169,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT_DISTINCTISH', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'COUNT_DISTINCTISH', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -184,7 +184,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'SUM', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'SUM', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -199,7 +199,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'MIN', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'MIN', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -214,7 +214,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'MAX', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'MAX', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -229,7 +229,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'AVG', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'AVG', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); it('STDDEV', () => { @@ -243,7 +243,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'STDDEV', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'STDDEV', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -259,7 +259,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'QUANTILE', '2', '@property', '0.5', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'QUANTILE', '2', '@property', '0.5', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -274,7 +274,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'TOLIST', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'TOLIST', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -290,7 +290,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '1', '@property', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '1', '@property', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -308,7 +308,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '3', '@property', 'BY', '@by', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '3', '@property', 'BY', '@by', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -327,7 +327,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '3', '@property', 'BY', '@by', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '3', '@property', 'BY', '@by', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -347,7 +347,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '4', '@property', 'BY', '@by', 'ASC', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'FIRST_VALUE', '4', '@property', 'BY', '@by', 'ASC', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -365,7 +365,7 @@ describe('AGGREGATE', () => { } }] }), - ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'RANDOM_SAMPLE', '2', '@property', '1', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'GROUPBY', '0', 'REDUCE', 'RANDOM_SAMPLE', '2', '@property', '1', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -379,7 +379,7 @@ describe('AGGREGATE', () => { BY: '@by' }] }), - ['FT.AGGREGATE', 'index', '*', 'SORTBY', '1', '@by', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'SORTBY', '1', '@by', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -391,7 +391,7 @@ describe('AGGREGATE', () => { BY: ['@1', '@2'] }] }), - ['FT.AGGREGATE', 'index', '*', 'SORTBY', '2', '@1', '@2', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'SORTBY', '2', '@1', '@2', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -404,7 +404,7 @@ describe('AGGREGATE', () => { MAX: 1 }] }), - ['FT.AGGREGATE', 'index', '*', 'SORTBY', '3', '@by', 'MAX', '1', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'SORTBY', '3', '@by', 'MAX', '1', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -418,7 +418,7 @@ describe('AGGREGATE', () => { AS: 'as' }] }), - ['FT.AGGREGATE', 'index', '*', 'APPLY', '@field + 1', 'AS', 'as', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'APPLY', '@field + 1', 'AS', 'as', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -431,7 +431,7 @@ describe('AGGREGATE', () => { size: 1 }] }), - ['FT.AGGREGATE', 'index', '*', 'LIMIT', '0', '1', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'LIMIT', '0', '1', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -443,7 +443,7 @@ describe('AGGREGATE', () => { expression: '@field != ""' }] }), - ['FT.AGGREGATE', 'index', '*', 'FILTER', '@field != ""', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'FILTER', '@field != ""', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -455,7 +455,7 @@ describe('AGGREGATE', () => { param: 'value' } }), - ['FT.AGGREGATE', 'index', '*', 'PARAMS', '2', 'param', 'value', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'PARAMS', '2', 'param', 'value', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -471,7 +471,7 @@ describe('AGGREGATE', () => { it('with TIMEOUT', () => { assert.deepEqual( parseArgs(AGGREGATE, 'index', '*', { TIMEOUT: 10 }), - ['FT.AGGREGATE', 'index', '*', 'TIMEOUT', '10', 'DIALECT', DefaultDialect] + ['FT.AGGREGATE', 'index', '*', 'TIMEOUT', '10', 'DIALECT', DEFAULT_DIALECT] ); }); }); diff --git a/packages/search/lib/commands/AGGREGATE.ts b/packages/search/lib/commands/AGGREGATE.ts index b9dddb7c340..b2589a52a54 100644 --- a/packages/search/lib/commands/AGGREGATE.ts +++ b/packages/search/lib/commands/AGGREGATE.ts @@ -3,7 +3,7 @@ import { ArrayReply, BlobStringReply, Command, MapReply, NumberReply, RedisArgum import { RediSearchProperty } from './CREATE'; import { FtSearchParams, parseParamsArgument } from './SEARCH'; import { transformTuplesReply } from '@redis/client/dist/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; type LoadField = RediSearchProperty | { identifier: RediSearchProperty; @@ -253,7 +253,7 @@ export function parseAggregateOptions(parser: CommandParser , options?: FtAggreg if (options?.DIALECT) { parser.push('DIALECT', options.DIALECT.toString()); } else { - parser.push('DIALECT', DefaultDialect); + parser.push('DIALECT', DEFAULT_DIALECT); } } diff --git a/packages/search/lib/commands/AGGREGATE_WITHCURSOR.spec.ts b/packages/search/lib/commands/AGGREGATE_WITHCURSOR.spec.ts index 7fbbcff2583..0e89346c49f 100644 --- a/packages/search/lib/commands/AGGREGATE_WITHCURSOR.spec.ts +++ b/packages/search/lib/commands/AGGREGATE_WITHCURSOR.spec.ts @@ -2,14 +2,14 @@ import { strict as assert } from 'node:assert'; import testUtils, { GLOBAL } from '../test-utils'; import AGGREGATE_WITHCURSOR from './AGGREGATE_WITHCURSOR'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('AGGREGATE WITHCURSOR', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(AGGREGATE_WITHCURSOR, 'index', '*'), - ['FT.AGGREGATE', 'index', '*', 'DIALECT', DefaultDialect, 'WITHCURSOR'] + ['FT.AGGREGATE', 'index', '*', 'DIALECT', DEFAULT_DIALECT, 'WITHCURSOR'] ); }); @@ -18,7 +18,7 @@ describe('AGGREGATE WITHCURSOR', () => { parseArgs(AGGREGATE_WITHCURSOR, 'index', '*', { COUNT: 1 }), - ['FT.AGGREGATE', 'index', '*', 'DIALECT', DefaultDialect, 'WITHCURSOR', 'COUNT', '1'] + ['FT.AGGREGATE', 'index', '*', 'DIALECT', DEFAULT_DIALECT, 'WITHCURSOR', 'COUNT', '1'] ); }); @@ -27,7 +27,7 @@ describe('AGGREGATE WITHCURSOR', () => { parseArgs(AGGREGATE_WITHCURSOR, 'index', '*', { MAXIDLE: 1 }), - ['FT.AGGREGATE', 'index', '*', 'DIALECT', DefaultDialect, 'WITHCURSOR', 'MAXIDLE', '1'] + ['FT.AGGREGATE', 'index', '*', 'DIALECT', DEFAULT_DIALECT, 'WITHCURSOR', 'MAXIDLE', '1'] ); }); }); diff --git a/packages/search/lib/commands/EXPLAIN.spec.ts b/packages/search/lib/commands/EXPLAIN.spec.ts index eda74cc71a7..d1691bc7c25 100644 --- a/packages/search/lib/commands/EXPLAIN.spec.ts +++ b/packages/search/lib/commands/EXPLAIN.spec.ts @@ -3,14 +3,14 @@ import EXPLAIN from './EXPLAIN'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; import testUtils, { GLOBAL } from '../test-utils'; import { SCHEMA_FIELD_TYPE } from './CREATE'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('EXPLAIN', () => { describe('transformArguments', () => { it('simple', () => { assert.deepEqual( parseArgs(EXPLAIN, 'index', '*'), - ['FT.EXPLAIN', 'index', '*', 'DIALECT', DefaultDialect] + ['FT.EXPLAIN', 'index', '*', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -21,7 +21,7 @@ describe('EXPLAIN', () => { param: 'value' } }), - ['FT.EXPLAIN', 'index', '*', 'PARAMS', '2', 'param', 'value', 'DIALECT', DefaultDialect] + ['FT.EXPLAIN', 'index', '*', 'PARAMS', '2', 'param', 'value', 'DIALECT', DEFAULT_DIALECT] ); }); diff --git a/packages/search/lib/commands/EXPLAIN.ts b/packages/search/lib/commands/EXPLAIN.ts index 774d055530b..39a430f4371 100644 --- a/packages/search/lib/commands/EXPLAIN.ts +++ b/packages/search/lib/commands/EXPLAIN.ts @@ -1,7 +1,7 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, SimpleStringReply, Command } from '@redis/client/dist/lib/RESP/types'; import { FtSearchParams, parseParamsArgument } from './SEARCH'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; export interface FtExplainOptions { PARAMS?: FtSearchParams; @@ -24,7 +24,7 @@ export default { if (options?.DIALECT) { parser.push('DIALECT', options.DIALECT.toString()); } else { - parser.push('DIALECT', DefaultDialect); + parser.push('DIALECT', DEFAULT_DIALECT); } }, transformReply: undefined as unknown as () => SimpleStringReply diff --git a/packages/search/lib/commands/EXPLAINCLI.spec.ts b/packages/search/lib/commands/EXPLAINCLI.spec.ts index 9c43e3a2021..1812b674094 100644 --- a/packages/search/lib/commands/EXPLAINCLI.spec.ts +++ b/packages/search/lib/commands/EXPLAINCLI.spec.ts @@ -1,13 +1,20 @@ import { strict as assert } from 'node:assert'; import EXPLAINCLI from './EXPLAINCLI'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('EXPLAINCLI', () => { it('transformArguments', () => { assert.deepEqual( parseArgs(EXPLAINCLI, 'index', '*'), - ['FT.EXPLAINCLI', 'index', '*', 'DIALECT', DefaultDialect] + ['FT.EXPLAINCLI', 'index', '*', 'DIALECT', DEFAULT_DIALECT] + ); + }); + + it('with dialect', () => { + assert.deepEqual( + parseArgs(EXPLAINCLI, 'index', '*', {DIALECT: 1}), + ['FT.EXPLAINCLI', 'index', '*', 'DIALECT', '1'] ); }); }); diff --git a/packages/search/lib/commands/EXPLAINCLI.ts b/packages/search/lib/commands/EXPLAINCLI.ts index 0df4c91cbc7..4ef5fba88d6 100644 --- a/packages/search/lib/commands/EXPLAINCLI.ts +++ b/packages/search/lib/commands/EXPLAINCLI.ts @@ -1,13 +1,27 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, ArrayReply, BlobStringReply, Command } from '@redis/client/dist/lib/RESP/types'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; + +export interface FtExplainCLIOptions { + DIALECT?: number; +} export default { NOT_KEYED_COMMAND: true, IS_READ_ONLY: true, - parseCommand(parser: CommandParser, index: RedisArgument, query: RedisArgument) { + parseCommand( + parser: CommandParser, + index: RedisArgument, + query: RedisArgument, + options?: FtExplainCLIOptions + ) { parser.push('FT.EXPLAINCLI', index, query); - parser.push('DIALECT', DefaultDialect) + + if (options?.DIALECT) { + parser.push('DIALECT', options.DIALECT.toString()); + } else { + parser.push('DIALECT', DEFAULT_DIALECT); + } }, transformReply: undefined as unknown as () => ArrayReply } as const satisfies Command; diff --git a/packages/search/lib/commands/PROFILE_AGGREGATE.spec.ts b/packages/search/lib/commands/PROFILE_AGGREGATE.spec.ts index aa139838d25..5cfa0500a0a 100644 --- a/packages/search/lib/commands/PROFILE_AGGREGATE.spec.ts +++ b/packages/search/lib/commands/PROFILE_AGGREGATE.spec.ts @@ -4,14 +4,14 @@ import { FT_AGGREGATE_STEPS } from './AGGREGATE'; import PROFILE_AGGREGATE from './PROFILE_AGGREGATE'; import { SCHEMA_FIELD_TYPE } from './CREATE'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('PROFILE AGGREGATE', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(PROFILE_AGGREGATE, 'index', 'query'), - ['FT.PROFILE', 'index', 'AGGREGATE', 'QUERY', 'query', 'DIALECT', DefaultDialect] + ['FT.PROFILE', 'index', 'AGGREGATE', 'QUERY', 'query', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -26,7 +26,7 @@ describe('PROFILE AGGREGATE', () => { }] }), ['FT.PROFILE', 'index', 'AGGREGATE', 'LIMITED', 'QUERY', 'query', - 'VERBATIM', 'SORTBY', '1', '@by', 'DIALECT', DefaultDialect] + 'VERBATIM', 'SORTBY', '1', '@by', 'DIALECT', DEFAULT_DIALECT] ); }); }); diff --git a/packages/search/lib/commands/PROFILE_SEARCH.spec.ts b/packages/search/lib/commands/PROFILE_SEARCH.spec.ts index 710f9ae95c5..60f1e8b7474 100644 --- a/packages/search/lib/commands/PROFILE_SEARCH.spec.ts +++ b/packages/search/lib/commands/PROFILE_SEARCH.spec.ts @@ -3,14 +3,14 @@ import testUtils, { GLOBAL } from '../test-utils'; import PROFILE_SEARCH from './PROFILE_SEARCH'; import { SCHEMA_FIELD_TYPE } from './CREATE'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('PROFILE SEARCH', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(PROFILE_SEARCH, 'index', 'query'), - ['FT.PROFILE', 'index', 'SEARCH', 'QUERY', 'query', 'DIALECT', DefaultDialect] + ['FT.PROFILE', 'index', 'SEARCH', 'QUERY', 'query', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -22,7 +22,7 @@ describe('PROFILE SEARCH', () => { INKEYS: 'key' }), ['FT.PROFILE', 'index', 'SEARCH', 'LIMITED', 'QUERY', 'query', - 'VERBATIM', 'INKEYS', '1', 'key', 'DIALECT', DefaultDialect] + 'VERBATIM', 'INKEYS', '1', 'key', 'DIALECT', DEFAULT_DIALECT] ); }); }); diff --git a/packages/search/lib/commands/SEARCH.spec.ts b/packages/search/lib/commands/SEARCH.spec.ts index 01071111cdc..ab480808ffa 100644 --- a/packages/search/lib/commands/SEARCH.spec.ts +++ b/packages/search/lib/commands/SEARCH.spec.ts @@ -2,7 +2,7 @@ import { strict as assert } from 'node:assert'; import testUtils, { GLOBAL } from '../test-utils'; import SEARCH from './SEARCH'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('FT.SEARCH', () => { @@ -10,7 +10,7 @@ describe('FT.SEARCH', () => { it('without options', () => { assert.deepEqual( parseArgs(SEARCH, 'index', 'query'), - ['FT.SEARCH', 'index', 'query', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -19,7 +19,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { VERBATIM: true }), - ['FT.SEARCH', 'index', 'query', 'VERBATIM', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'VERBATIM', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -28,7 +28,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { NOSTOPWORDS: true }), - ['FT.SEARCH', 'index', 'query', 'NOSTOPWORDS', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'NOSTOPWORDS', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -37,7 +37,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { INKEYS: 'key' }), - ['FT.SEARCH', 'index', 'query', 'INKEYS', '1', 'key', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'INKEYS', '1', 'key', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -46,7 +46,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { INFIELDS: 'field' }), - ['FT.SEARCH', 'index', 'query', 'INFIELDS', '1', 'field', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'INFIELDS', '1', 'field', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -55,7 +55,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { RETURN: 'return' }), - ['FT.SEARCH', 'index', 'query', 'RETURN', '1', 'return', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'RETURN', '1', 'return', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -65,7 +65,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { SUMMARIZE: true }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -77,7 +77,7 @@ describe('FT.SEARCH', () => { FIELDS: '@field' } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FIELDS', '1', '@field', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FIELDS', '1', '@field', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -88,7 +88,7 @@ describe('FT.SEARCH', () => { FIELDS: ['@1', '@2'] } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FIELDS', '2', '@1', '@2', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FIELDS', '2', '@1', '@2', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -100,7 +100,7 @@ describe('FT.SEARCH', () => { FRAGS: 1 } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FRAGS', '1', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'FRAGS', '1', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -111,7 +111,7 @@ describe('FT.SEARCH', () => { LEN: 1 } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'LEN', '1', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'LEN', '1', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -122,7 +122,7 @@ describe('FT.SEARCH', () => { SEPARATOR: 'separator' } }), - ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'SEPARATOR', 'separator', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SUMMARIZE', 'SEPARATOR', 'separator', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -133,7 +133,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { HIGHLIGHT: true }), - ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -145,7 +145,7 @@ describe('FT.SEARCH', () => { FIELDS: ['@field'] } }), - ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'FIELDS', '1', '@field', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'FIELDS', '1', '@field', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -156,7 +156,7 @@ describe('FT.SEARCH', () => { FIELDS: ['@1', '@2'] } }), - ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'FIELDS', '2', '@1', '@2', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'FIELDS', '2', '@1', '@2', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -171,7 +171,7 @@ describe('FT.SEARCH', () => { } } }), - ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'TAGS', 'open', 'close', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'HIGHLIGHT', 'TAGS', 'open', 'close', 'DIALECT', DEFAULT_DIALECT] ); }); }); @@ -181,7 +181,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { SLOP: 1 }), - ['FT.SEARCH', 'index', 'query', 'SLOP', '1', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SLOP', '1', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -190,7 +190,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { TIMEOUT: 1 }), - ['FT.SEARCH', 'index', 'query', 'TIMEOUT', '1', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'TIMEOUT', '1', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -199,7 +199,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { INORDER: true }), - ['FT.SEARCH', 'index', 'query', 'INORDER', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'INORDER', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -208,7 +208,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { LANGUAGE: 'Arabic' }), - ['FT.SEARCH', 'index', 'query', 'LANGUAGE', 'Arabic', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'LANGUAGE', 'Arabic', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -217,7 +217,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { EXPANDER: 'expender' }), - ['FT.SEARCH', 'index', 'query', 'EXPANDER', 'expender', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'EXPANDER', 'expender', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -226,7 +226,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { SCORER: 'scorer' }), - ['FT.SEARCH', 'index', 'query', 'SCORER', 'scorer', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SCORER', 'scorer', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -235,7 +235,7 @@ describe('FT.SEARCH', () => { parseArgs(SEARCH, 'index', 'query', { SORTBY: '@by' }), - ['FT.SEARCH', 'index', 'query', 'SORTBY', '@by', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'SORTBY', '@by', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -247,7 +247,7 @@ describe('FT.SEARCH', () => { size: 1 } }), - ['FT.SEARCH', 'index', 'query', 'LIMIT', '0', '1', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'LIMIT', '0', '1', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -260,7 +260,7 @@ describe('FT.SEARCH', () => { number: 1 } }), - ['FT.SEARCH', 'index', 'query', 'PARAMS', '6', 'string', 'string', 'buffer', Buffer.from('buffer'), 'number', '1', 'DIALECT', DefaultDialect] + ['FT.SEARCH', 'index', 'query', 'PARAMS', '6', 'string', 'string', 'buffer', Buffer.from('buffer'), 'number', '1', 'DIALECT', DEFAULT_DIALECT] ); }); diff --git a/packages/search/lib/commands/SEARCH.ts b/packages/search/lib/commands/SEARCH.ts index ff15fc298f7..f48ac056784 100644 --- a/packages/search/lib/commands/SEARCH.ts +++ b/packages/search/lib/commands/SEARCH.ts @@ -2,7 +2,7 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, Command, ReplyUnion } from '@redis/client/dist/lib/RESP/types'; import { RedisVariadicArgument, parseOptionalVariadicArgument } from '@redis/client/dist/lib/commands/generic-transformers'; import { RediSearchProperty, RediSearchLanguage } from './CREATE'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; export type FtSearchParams = Record; @@ -154,7 +154,7 @@ export function parseSearchOptions(parser: CommandParser, options?: FtSearchOpti if (options?.DIALECT) { parser.push('DIALECT', options.DIALECT.toString()); } else { - parser.push('DIALECT', DefaultDialect); + parser.push('DIALECT', DEFAULT_DIALECT); } } diff --git a/packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts b/packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts index ef885009375..cd37409b5bb 100644 --- a/packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts +++ b/packages/search/lib/commands/SEARCH_NOCONTENT.spec.ts @@ -2,14 +2,14 @@ import { strict as assert } from 'assert'; import testUtils, { GLOBAL } from '../test-utils'; import SEARCH_NOCONTENT from './SEARCH_NOCONTENT'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('FT.SEARCH NOCONTENT', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(SEARCH_NOCONTENT, 'index', 'query'), - ['FT.SEARCH', 'index', 'query', 'DIALECT', DefaultDialect, 'NOCONTENT'] + ['FT.SEARCH', 'index', 'query', 'DIALECT', DEFAULT_DIALECT, 'NOCONTENT'] ); }); }); diff --git a/packages/search/lib/commands/SPELLCHECK.spec.ts b/packages/search/lib/commands/SPELLCHECK.spec.ts index 854789f0374..482deed6a45 100644 --- a/packages/search/lib/commands/SPELLCHECK.spec.ts +++ b/packages/search/lib/commands/SPELLCHECK.spec.ts @@ -2,14 +2,14 @@ import { strict as assert } from 'node:assert'; import testUtils, { GLOBAL } from '../test-utils'; import SPELLCHECK from './SPELLCHECK'; import { parseArgs } from '@redis/client/lib/commands/generic-transformers'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; describe('FT.SPELLCHECK', () => { describe('transformArguments', () => { it('without options', () => { assert.deepEqual( parseArgs(SPELLCHECK, 'index', 'query'), - ['FT.SPELLCHECK', 'index', 'query', 'DIALECT', DefaultDialect] + ['FT.SPELLCHECK', 'index', 'query', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -18,7 +18,7 @@ describe('FT.SPELLCHECK', () => { parseArgs(SPELLCHECK, 'index', 'query', { DISTANCE: 2 }), - ['FT.SPELLCHECK', 'index', 'query', 'DISTANCE', '2', 'DIALECT', DefaultDialect] + ['FT.SPELLCHECK', 'index', 'query', 'DISTANCE', '2', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -31,7 +31,7 @@ describe('FT.SPELLCHECK', () => { dictionary: 'dictionary' } }), - ['FT.SPELLCHECK', 'index', 'query', 'TERMS', 'INCLUDE', 'dictionary', 'DIALECT', DefaultDialect] + ['FT.SPELLCHECK', 'index', 'query', 'TERMS', 'INCLUDE', 'dictionary', 'DIALECT', DEFAULT_DIALECT] ); }); @@ -46,7 +46,7 @@ describe('FT.SPELLCHECK', () => { dictionary: 'exclude' }] }), - ['FT.SPELLCHECK', 'index', 'query', 'TERMS', 'INCLUDE', 'include', 'TERMS', 'EXCLUDE', 'exclude', 'DIALECT', DefaultDialect] + ['FT.SPELLCHECK', 'index', 'query', 'TERMS', 'INCLUDE', 'include', 'TERMS', 'EXCLUDE', 'exclude', 'DIALECT', DEFAULT_DIALECT] ); }); }); diff --git a/packages/search/lib/commands/SPELLCHECK.ts b/packages/search/lib/commands/SPELLCHECK.ts index d6abc44b8aa..3b909cdca32 100644 --- a/packages/search/lib/commands/SPELLCHECK.ts +++ b/packages/search/lib/commands/SPELLCHECK.ts @@ -1,6 +1,6 @@ import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, Command, ReplyUnion } from '@redis/client/dist/lib/RESP/types'; -import { DefaultDialect } from '../dialect/default'; +import { DEFAULT_DIALECT } from '../dialect/default'; export interface Terms { mode: 'INCLUDE' | 'EXCLUDE'; @@ -36,7 +36,7 @@ export default { if (options?.DIALECT) { parser.push('DIALECT', options.DIALECT.toString()); } else { - parser.push('DIALECT', DefaultDialect); + parser.push('DIALECT', DEFAULT_DIALECT); } }, transformReply: { diff --git a/packages/search/lib/dialect/default.ts b/packages/search/lib/dialect/default.ts index 4f007616331..54cde05d119 100644 --- a/packages/search/lib/dialect/default.ts +++ b/packages/search/lib/dialect/default.ts @@ -1 +1 @@ -export const DefaultDialect = '2'; +export const DEFAULT_DIALECT = '2';