diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts index cdf4a6239a9ab..13d471d53d7ec 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts @@ -137,10 +137,27 @@ describe('autocomplete.suggest', () => { test('when typing inside function left paren', async () => { const { assertSuggestions } = await setup(); const expected = [ - ...getFieldNamesByType([...ESQL_COMMON_NUMERIC_TYPES, 'date', 'boolean', 'ip']), + ...getFieldNamesByType([ + ...ESQL_COMMON_NUMERIC_TYPES, + 'date', + 'boolean', + 'ip', + 'version', + 'text', + 'keyword', + ]), ...getFunctionSignaturesByReturnType( 'stats', - [...ESQL_COMMON_NUMERIC_TYPES, 'date', 'date_period', 'boolean', 'ip'], + [ + ...ESQL_COMMON_NUMERIC_TYPES, + 'date', + 'date_period', + 'boolean', + 'ip', + 'version', + 'text', + 'keyword', + ], { scalar: true, } diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts index 262d7a2fc7b32..4ce0ad1a0f230 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts @@ -155,6 +155,18 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ params: [{ name: 'column', type: 'ip', noNestingFunctions: true }], returnType: 'ip', }, + { + params: [{ name: 'column', type: 'version', noNestingFunctions: true }], + returnType: 'version', + }, + { + params: [{ name: 'column', type: 'keyword', noNestingFunctions: true }], + returnType: 'keyword', + }, + { + params: [{ name: 'column', type: 'text', noNestingFunctions: true }], + returnType: 'text', + }, ], examples: [`from index | stats result = max(field)`, `from index | stats max(field)`], }, @@ -186,6 +198,18 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ params: [{ name: 'column', type: 'ip', noNestingFunctions: true }], returnType: 'ip', }, + { + params: [{ name: 'column', type: 'version', noNestingFunctions: true }], + returnType: 'version', + }, + { + params: [{ name: 'column', type: 'keyword', noNestingFunctions: true }], + returnType: 'keyword', + }, + { + params: [{ name: 'column', type: 'text', noNestingFunctions: true }], + returnType: 'text', + }, ], examples: [`from index | stats result = min(field)`, `from index | stats min(field)`], }, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index 46bdf3c2a13d2..d290bd04b64e5 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -31860,23 +31860,17 @@ }, { "query": "from a_index | stats max(concat(\"20\", \"22\"))", - "error": [ - "Argument of [max] must be [double], found value [concat(\"20\",\"22\")] type [keyword]" - ], + "error": [], "warning": [] }, { "query": "from a_index | stats var = max(textField)", - "error": [ - "Argument of [max] must be [double], found value [textField] type [text]" - ], + "error": [], "warning": [] }, { "query": "from a_index | stats max(textField)", - "error": [ - "Argument of [max] must be [double], found value [textField] type [text]" - ], + "error": [], "warning": [] }, { @@ -31921,6 +31915,110 @@ ], "warning": [] }, + { + "query": "from a_index | stats var = max(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where max(versionField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(versionField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(keywordField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(keywordField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(versionField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(versionField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(versionField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(versionField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(keywordField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(keywordField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(keywordField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(keywordField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, { "query": "from a_index | stats var = min(doubleField)", "error": [], @@ -32500,23 +32598,17 @@ }, { "query": "from a_index | stats min(concat(\"20\", \"22\"))", - "error": [ - "Argument of [min] must be [double], found value [concat(\"20\",\"22\")] type [keyword]" - ], + "error": [], "warning": [] }, { "query": "from a_index | stats var = min(textField)", - "error": [ - "Argument of [min] must be [double], found value [textField] type [text]" - ], + "error": [], "warning": [] }, { "query": "from a_index | stats min(textField)", - "error": [ - "Argument of [min] must be [double], found value [textField] type [text]" - ], + "error": [], "warning": [] }, { @@ -32561,6 +32653,110 @@ ], "warning": [] }, + { + "query": "from a_index | stats var = min(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(keywordField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where min(versionField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(versionField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(keywordField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(keywordField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(versionField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(versionField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(versionField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(versionField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(keywordField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(keywordField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(keywordField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(keywordField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, { "query": "from a_index | stats var = count(textField)", "error": [], diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index bd1de77be408a..c2734049c96a9 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -12270,17 +12270,11 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | stats max(null)', []); testErrorsAndWarnings('row nullVar = null | stats max(nullVar)', []); testErrorsAndWarnings('from a_index | stats max("2022")', []); - testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', [ - 'Argument of [max] must be [double], found value [concat("20","22")] type [keyword]', - ]); + testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', []); - testErrorsAndWarnings('from a_index | stats var = max(textField)', [ - 'Argument of [max] must be [double], found value [textField] type [text]', - ]); + testErrorsAndWarnings('from a_index | stats var = max(textField)', []); - testErrorsAndWarnings('from a_index | stats max(textField)', [ - 'Argument of [max] must be [double], found value [textField] type [text]', - ]); + testErrorsAndWarnings('from a_index | stats max(textField)', []); testErrorsAndWarnings('from a_index | where max(textField)', [ 'WHERE does not support function max', @@ -12305,6 +12299,58 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval max(textField) > 0', [ 'EVAL does not support function max', ]); + testErrorsAndWarnings('from a_index | stats var = max(versionField)', []); + testErrorsAndWarnings('from a_index | stats max(versionField)', []); + testErrorsAndWarnings('from a_index | stats var = max(keywordField)', []); + testErrorsAndWarnings('from a_index | stats max(keywordField)', []); + + testErrorsAndWarnings('from a_index | where max(versionField)', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(versionField) > 0', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(keywordField)', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(keywordField) > 0', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(versionField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(versionField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(versionField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(versionField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(keywordField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(keywordField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(keywordField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(keywordField) > 0', [ + 'EVAL does not support function max', + ]); }); describe('min', () => { @@ -12624,17 +12670,11 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | stats min(null)', []); testErrorsAndWarnings('row nullVar = null | stats min(nullVar)', []); testErrorsAndWarnings('from a_index | stats min("2022")', []); - testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', [ - 'Argument of [min] must be [double], found value [concat("20","22")] type [keyword]', - ]); + testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', []); - testErrorsAndWarnings('from a_index | stats var = min(textField)', [ - 'Argument of [min] must be [double], found value [textField] type [text]', - ]); + testErrorsAndWarnings('from a_index | stats var = min(textField)', []); - testErrorsAndWarnings('from a_index | stats min(textField)', [ - 'Argument of [min] must be [double], found value [textField] type [text]', - ]); + testErrorsAndWarnings('from a_index | stats min(textField)', []); testErrorsAndWarnings('from a_index | where min(textField)', [ 'WHERE does not support function min', @@ -12659,6 +12699,58 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval min(textField) > 0', [ 'EVAL does not support function min', ]); + testErrorsAndWarnings('from a_index | stats var = min(versionField)', []); + testErrorsAndWarnings('from a_index | stats min(versionField)', []); + testErrorsAndWarnings('from a_index | stats var = min(keywordField)', []); + testErrorsAndWarnings('from a_index | stats min(keywordField)', []); + + testErrorsAndWarnings('from a_index | where min(versionField)', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(versionField) > 0', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(keywordField)', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(keywordField) > 0', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(versionField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(versionField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(versionField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(versionField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(keywordField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(keywordField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(keywordField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(keywordField) > 0', [ + 'EVAL does not support function min', + ]); }); describe('count', () => {