Skip to content

[ES|QL] add consideration for inline cast to cascade experience capture rules#253819

Merged
eokoneyo merged 4 commits into
elastic:mainfrom
eokoneyo:chore/resolve-253708
Feb 19, 2026
Merged

[ES|QL] add consideration for inline cast to cascade experience capture rules#253819
eokoneyo merged 4 commits into
elastic:mainfrom
eokoneyo:chore/resolve-253708

Conversation

@eokoneyo
Copy link
Copy Markdown
Contributor

Closes #253708

Summary

This PR;

  • Extends the getESQLStatsQueryMeta unsupported grouping function check to also detect inline casts (::) that wrap unsupported functions (e.g., BUCKET(@timestamp, 1 hour)::string), which previously bypassed the validation because the top-level node was an inlineCast rather than a function expression.
  • Simple column casts (e.g., clientip::keyword) and casts wrapping supported functions (e.g., CATEGORIZE) remain valid for the cascade experience.
  • Adds unit tests covering both the invalidation and boundary cases.

Details

Previously, getESQLStatsQueryMeta only checked for bare isFunctionExpression nodes when deciding if a STATS BY group field uses an unsupported function. An inline cast like BUCKET(@timestamp, 1 hour)::string produces an inlineCast AST node at the top level, so the existing check didn't catch it. This meant queries with cast-wrapped unsupported functions could incorrectly qualify for the cascade layout.

Checklist

@eokoneyo eokoneyo self-assigned this Feb 18, 2026
@eokoneyo eokoneyo added release_note:skip Skip the PR/issue when compiling release notes Team:ESQL ES|QL related features in Kibana t// labels Feb 18, 2026
@eokoneyo
Copy link
Copy Markdown
Contributor Author

/ci

@eokoneyo eokoneyo marked this pull request as ready for review February 19, 2026 07:23
@eokoneyo eokoneyo requested a review from a team as a code owner February 19, 2026 07:23
@elasticmachine
Copy link
Copy Markdown
Contributor

Pinging @elastic/kibana-esql (Team:ESQL)

@eokoneyo eokoneyo added the backport:skip This PR does not require backporting label Feb 19, 2026
Copy link
Copy Markdown
Contributor

@stratoula stratoula left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great eyo, thanks a lot!
I created this PR eokoneyo#3 to do a small refactor to make this if a bit more readable. Wdyt?

@stratoula stratoula added the Feature:ES|QL ES|QL related features in Kibana label Feb 19, 2026
@eokoneyo
Copy link
Copy Markdown
Contributor Author

Looks great eyo, thanks a lot! I created this PR eokoneyo#3 to do a small refactor to make this if a bit more readable. Wdyt?

I like it... merged it in

@eokoneyo eokoneyo enabled auto-merge (squash) February 19, 2026 09:01
@eokoneyo eokoneyo merged commit 4e02511 into elastic:main Feb 19, 2026
16 checks passed
@eokoneyo eokoneyo deleted the chore/resolve-253708 branch February 19, 2026 09:19
ersin-erdal pushed a commit to ersin-erdal/kibana that referenced this pull request Feb 19, 2026
…re rules (elastic#253819)

Closes elastic#253708

## Summary

This PR;

- Extends the `getESQLStatsQueryMeta` unsupported grouping function
check to also detect inline casts (`::`) that wrap unsupported functions
(e.g., `BUCKET(@timestamp, 1 hour)::string`), which previously bypassed
the validation because the top-level node was an `inlineCast` rather
than a `function` expression.
- Simple column casts (e.g., `clientip::keyword`) and casts wrapping
supported functions (e.g., `CATEGORIZE`) remain valid for the cascade
experience.
- Adds unit tests covering both the invalidation and boundary cases.

### Details

Previously, `getESQLStatsQueryMeta` only checked for bare
`isFunctionExpression` nodes when deciding if a STATS BY group field
uses an unsupported function. An inline cast like `BUCKET(@timestamp, 1
hour)::string` produces an `inlineCast` AST node at the top level, so
the existing check didn't catch it. This meant queries with cast-wrapped
unsupported functions could incorrectly qualify for the cascade layout.


### Checklist

<!-- 
Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [ ] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
-->

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios

<!--
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [ ] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [ ] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
- [ ] Review the [backport
guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)
and apply applicable `backport:*` labels.

### Identify risks

Does this PR introduce any risks? For example, consider risks like hard
to test bugs, performance regression, potential of data loss.

Describe the risk, its severity, and mitigation for each identified
risk. Invite stakeholders and evaluate how to proceed before merging.

- [ ] [See some risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)
- [ ] ...

-->

---------

Co-authored-by: Stratoula <efstratia.kalafateli@elastic.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:skip This PR does not require backporting Feature:ES|QL ES|QL related features in Kibana release_note:skip Skip the PR/issue when compiling release notes Team:ESQL ES|QL related features in Kibana t// v9.4.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Discover] [Group By] Handle casting on an unsupported grouping function

4 participants