diff --git a/src/platform/packages/shared/kbn-esql-ast/src/commands/registry/join/utils.ts b/src/platform/packages/shared/kbn-esql-ast/src/commands/registry/join/utils.ts index fae128b4336eb..37ead28a2cecf 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/commands/registry/join/utils.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/commands/registry/join/utils.ts @@ -24,6 +24,7 @@ import type { import type { ICommand } from '../registry'; import type { GetColumnsByTypeFn, ICommandContext, ISuggestionItem } from '../types'; import type { JoinCommandPosition, JoinStaticPosition } from './types'; +import { SuggestionCategory } from '../../../shared/sorting/types'; const REGEX = /^(?\w+((?\s+((?(JOIN|JOI|JO|J)((?\s+((?\S+((?\s+(?(AS|A))?(?\s+(((?\S+)?(?\s+)?)?))?((?(ON|O))?))?))?))?))?))?))?/i; @@ -191,6 +192,7 @@ export const markCommonFields = ( ...suggestion, sortText: '1-' + (suggestion.sortText || suggestion.label), detail, + category: SuggestionCategory.LOOKUP_COMMON_FIELD, documentation: { value: i18n.translate('kbn-esql-ast.esql.autocomplete.join.sharedField', { defaultMessage: 'Field shared between the source and the lookup index', diff --git a/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/priority_provider.ts b/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/priority_provider.ts index 269c370109fc5..0ab1fa6fa820f 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/priority_provider.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/priority_provider.ts @@ -27,6 +27,7 @@ const CATEGORY_PRIORITIES: Record = { [SuggestionCategory.USER_DEFINED_COLUMN]: 300, [SuggestionCategory.RECOMMENDED_FIELD]: 310, + [SuggestionCategory.LOOKUP_COMMON_FIELD]: 315, [SuggestionCategory.ECS_FIELD]: 330, [SuggestionCategory.TIME_FIELD]: 350, [SuggestionCategory.FIELD]: 350, diff --git a/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/suggestion_ordering_engine.test.ts b/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/suggestion_ordering_engine.test.ts index 06b815cac3cfb..47272e27cfd27 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/suggestion_ordering_engine.test.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/suggestion_ordering_engine.test.ts @@ -84,4 +84,20 @@ describe('SuggestionOrderingEngine', () => { expect(statsResult[1].label).toBe('count'); expect(statsResult[2].label).toBe('abs'); }); + + it('should sort LOOKUP_COMMON_FIELD first, then FIELD alphabetically', () => { + const suggestions = [ + createSuggestion('sourceField', SuggestionCategory.FIELD), + createSuggestion('lookupOnlyField', SuggestionCategory.FIELD), + createSuggestion('commonField', SuggestionCategory.LOOKUP_COMMON_FIELD), + createSuggestion('anotherSourceField', SuggestionCategory.FIELD), + ]; + + const result = engine.sort(suggestions, { command: 'JOIN' }); + + expect(result[0].label).toBe('commonField'); + expect(result[1].label).toBe('anotherSourceField'); + expect(result[2].label).toBe('lookupOnlyField'); + expect(result[3].label).toBe('sourceField'); + }); }); diff --git a/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/types.ts b/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/types.ts index 80da9cbb83c6d..e2933bfb21d80 100644 --- a/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/types.ts +++ b/src/platform/packages/shared/kbn-esql-ast/src/shared/sorting/types.ts @@ -14,6 +14,7 @@ export enum SuggestionCategory { USER_DEFINED_COLUMN = 'user_defined_column', TIME_PARAM = 'time_param', RECOMMENDED_FIELD = 'recommended_field', + LOOKUP_COMMON_FIELD = 'lookup_common_field', ECS_FIELD = 'ecs_field', TIME_FIELD = 'time_field', FIELD = 'field',