diff --git a/src/platform/packages/shared/kbn-esql-utils/src/utils/cascaded_documents_helpers/index.ts b/src/platform/packages/shared/kbn-esql-utils/src/utils/cascaded_documents_helpers/index.ts index 6cb5de94c30f9..f89574c10295f 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/utils/cascaded_documents_helpers/index.ts +++ b/src/platform/packages/shared/kbn-esql-utils/src/utils/cascaded_documents_helpers/index.ts @@ -30,6 +30,7 @@ import type { ESQLBinaryExpression, ESQLUnaryExpression, ESQLPostfixUnaryExpression, + ESQLProperNode, } from '@kbn/esql-language/src/types'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { ESQLControlVariable } from '@kbn/esql-types'; @@ -54,6 +55,22 @@ import { isCategorizeFunctionWithFunctionArgument, } from './utils'; +const hasUnsupportedGroupingFunction = (definition: ESQLProperNode): boolean => { + const funcExpr = isFunctionExpression(definition) + ? definition + : isInlineCast(definition) && isFunctionExpression(definition.value) + ? definition.value + : null; + + if (!funcExpr) { + return false; + } + + return ( + !isSupportedStatsFunction(funcExpr.name) || isCategorizeFunctionWithFunctionArgument(funcExpr) + ); +}; + type NodeType = 'group' | 'leaf'; export interface AppliedStatsFunction { @@ -143,14 +160,7 @@ export const getESQLStatsQueryMeta = (queryString: string): ESQLStatsQueryMeta = const groupFieldDefinition = getFieldDefinitionFromArg(groupFieldNode.arg); - if ( - (isFunctionExpression(groupFieldDefinition) && - (!isSupportedStatsFunction(groupFieldDefinition.name) || - isCategorizeFunctionWithFunctionArgument(groupFieldDefinition))) || - (isInlineCast(groupFieldDefinition) && - isFunctionExpression(groupFieldDefinition.value) && - !isSupportedStatsFunction(groupFieldDefinition.value.name)) - ) { + if (hasUnsupportedGroupingFunction(groupFieldDefinition)) { // if the group field has a grouping function that is not supported, // this nullifies the entire query to count as a valid query for the cascade experience groupByFields.splice(0, groupByFields.length);