Skip to content

Commit

Permalink
[ES|QL] add time unit abbreviations (elastic#186424)
Browse files Browse the repository at this point in the history
## Summary

Close elastic#186413

<img width="303" alt="Screenshot 2024-06-18 at 1 35 52 PM"
src="https://github.com/elastic/kibana/assets/315764/92d10866-dc46-4c0f-b6d9-e4aa09e0c9c9">

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Stratoula Kalafateli <efstratia.kalafateli@elastic.co>
  • Loading branch information
3 people authored Jun 20, 2024
1 parent 16bfe57 commit 197fde2
Show file tree
Hide file tree
Showing 7 changed files with 1,030 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { statsAggregationFunctionDefinitions } from '../src/definitions/aggs';
import { evalFunctionDefinitions } from '../src/definitions/functions';
import { groupingFunctionDefinitions } from '../src/definitions/grouping';
import { getFunctionSignatures } from '../src/definitions/helpers';
import { chronoLiterals, timeLiterals } from '../src/definitions/literals';
import { timeUnits, chronoLiterals } from '../src/definitions/literals';
import { nonNullable } from '../src/shared/helpers';
import {
SupportedFieldType,
Expand Down Expand Up @@ -1046,7 +1046,7 @@ function getFieldName(

const literals = {
chrono_literal: chronoLiterals[0].name,
time_literal: timeLiterals[0].name,
time_literal: timeUnits[0],
};

function getLiteralType(typeString: 'chrono_literal' | 'time_literal') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { suggest } from './autocomplete';
import { evalFunctionDefinitions } from '../definitions/functions';
import { builtinFunctions } from '../definitions/builtin';
import { statsAggregationFunctionDefinitions } from '../definitions/aggs';
import { chronoLiterals, timeLiterals } from '../definitions/literals';
import { chronoLiterals, timeUnitsToSuggest } from '../definitions/literals';
import { commandDefinitions } from '../definitions/commands';
import { getUnitDuration, TRIGGER_SUGGESTION_COMMAND } from './factories';
import { camelCase, partition } from 'lodash';
Expand Down Expand Up @@ -203,7 +203,7 @@ function getLiteralsByType(_type: string | string[]) {
const type = Array.isArray(_type) ? _type : [_type];
if (type.includes('time_literal')) {
// return only singular
return timeLiterals.map(({ name }) => `1 ${name}`).filter((s) => !/s$/.test(s));
return timeUnitsToSuggest.map(({ name }) => `1 ${name}`).filter((s) => !/s$/.test(s));
}
if (type.includes('chrono_literal')) {
return chronoLiterals.map(({ name }) => name);
Expand Down Expand Up @@ -1238,7 +1238,7 @@ describe('autocomplete', () => {
testSuggestions('from a | eval var0 = bucket(@timestamp,', getUnitDuration(1));

describe('date math', () => {
const dateSuggestions = timeLiterals.map(({ name }) => name);
const dateSuggestions = timeUnitsToSuggest.map(({ name }) => name);
// If a literal number is detected then suggest also date period keywords
testSuggestions('from a | eval a = 1 ', [
...dateSuggestions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { groupingFunctionDefinitions } from '../definitions/grouping';
import { statsAggregationFunctionDefinitions } from '../definitions/aggs';
import { evalFunctionDefinitions } from '../definitions/functions';
import { getFunctionSignatures, getCommandSignature } from '../definitions/helpers';
import { chronoLiterals, timeLiterals } from '../definitions/literals';
import { chronoLiterals, timeUnitsToSuggest } from '../definitions/literals';
import {
FunctionDefinition,
CommandDefinition,
Expand Down Expand Up @@ -298,7 +298,7 @@ export const buildNoPoliciesAvailableDefinition = (): SuggestionRawDefinition =>
});

export function getUnitDuration(unit: number = 1) {
const filteredTimeLiteral = timeLiterals.filter(({ name }) => {
const filteredTimeLiteral = timeUnitsToSuggest.filter(({ name }) => {
const result = /s$/.test(name);
return unit > 1 ? result : !result;
});
Expand Down Expand Up @@ -332,7 +332,7 @@ export function getCompatibleLiterals(commandName: string, types: string[], name
}
// this is a special type built from the suggestion system, not inherited from the AST
if (types.includes('time_literal_unit')) {
suggestions.push(...buildConstantsDefinitions(timeLiterals.map(({ name }) => name))); // i.e. year, month, ...
suggestions.push(...buildConstantsDefinitions(timeUnitsToSuggest.map(({ name }) => name))); // i.e. year, month, ...
}
if (types.includes('chrono_literal')) {
suggestions.push(...buildConstantsDefinitions(chronoLiterals.map(({ name }) => name))); // i.e. EPOC_DAY, ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import { i18n } from '@kbn/i18n';
import type { Literals } from './types';

export const timeLiterals: Literals[] = [
export const timeUnitsToSuggest: Literals[] = [
{
name: 'year',
description: i18n.translate(
Expand All @@ -28,6 +28,24 @@ export const timeLiterals: Literals[] = [
}
),
},
{
name: 'quarter',
description: i18n.translate(
'kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.quarter',
{
defaultMessage: 'Quarter',
}
),
},
{
name: 'quarters',
description: i18n.translate(
'kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.quarters',
{
defaultMessage: 'Quarters (Plural)',
}
),
},
{
name: 'month',
description: i18n.translate(
Expand Down Expand Up @@ -156,6 +174,20 @@ export const timeLiterals: Literals[] = [
},
];

export const timeUnits: string[] = [
...timeUnitsToSuggest.map((literal) => literal.name),
'ms',
's',
'm',
'h',
'd',
'w',
'mo',
'q',
'y',
'yr',
];

export const chronoLiterals: Literals[] = [
'ALIGNED_DAY_OF_WEEK_IN_MONTH',
'ALIGNED_DAY_OF_WEEK_IN_YEAR',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import { commandDefinitions } from '../definitions/commands';
import { evalFunctionDefinitions } from '../definitions/functions';
import { groupingFunctionDefinitions } from '../definitions/grouping';
import { getFunctionSignatures } from '../definitions/helpers';
import { chronoLiterals, timeLiterals } from '../definitions/literals';
import { timeUnits, chronoLiterals } from '../definitions/literals';
import {
byOption,
metadataOption,
Expand Down Expand Up @@ -376,7 +376,7 @@ export function getAllArrayTypes(
}

export function inKnownTimeInterval(item: ESQLTimeInterval): boolean {
return timeLiterals.some(({ name }) => name === item.unit.toLowerCase());
return timeUnits.some((unit) => unit === item.unit.toLowerCase());
}

/**
Expand Down
Loading

0 comments on commit 197fde2

Please sign in to comment.