ES|QL: Don't reuse the same alias for _fork column#143909
Merged
ioanatia merged 3 commits intoelastic:mainfrom Mar 10, 2026
Merged
ES|QL: Don't reuse the same alias for _fork column#143909ioanatia merged 3 commits intoelastic:mainfrom
ioanatia merged 3 commits intoelastic:mainfrom
Conversation
Collaborator
|
Pinging @elastic/es-search-relevance (Team:Search Relevance) |
carlosdelest
approved these changes
Mar 10, 2026
Member
carlosdelest
left a comment
There was a problem hiding this comment.
LGTM!
I think it would be good to have some unit test for checking this? So we can check that the aliases are indeed different?
Member
Author
|
this is a good point - I think we can prioritise adding some basic golden tests for FORK - let me follow up on that. |
szybia
added a commit
to szybia/elasticsearch
that referenced
this pull request
Mar 10, 2026
…locations * upstream/main: (126 commits) Update KnnIndexTester to use more settings from datasets (elastic#143869) fix: dynamic template vector array is overridden by automatic dense_vector mapping (elastic#143733) ES|QL: Don't reuse the same alias for _fork column (elastic#143909) Close and initialize clients after each node upgrade in logsdb rolling upgrade tests. (elastic#143823) ESQL: Added GroupedTopNOperator for LIMIT BY, compute only (elastic#143476) Handle views in ResolveIndexAction (elastic#143561) Improve reindex rethrottle API in stateless (elastic#143771) Use a copy of the SearchExecutionContext for each Percolator execution (elastic#142765) Log the stacktrace when we encounter a deprecation warning for `default_metric` (elastic#143929) ESQL: evaluate ReferenceAttributes to potentially FieldAttributes for full-text functions restriction (elastic#143893) Add ClusterStateSerializationStats Serializatation Tests (elastic#142703) Adds Coordination Diagnostics Tests (elastic#142709) Upgrade Elasticsearch to Apache Lucene 10.4 (elastic#141882) ESQL: Add configurable bracket-based multi-value support for CSV reader (elastic#143890) time series es819 binary dv use up to a 1mb block size (elastic#143049) Dynamically enable / disable plugins in correspondence to stateless mode. (elastic#142147) ES|QL: Implement first/last_over_time for tdigest (elastic#143832) Document CHANGE_POINT limitation (elastic#143877) Fix OperationsOnSeqNoDisabledIndicesIT (elastic#143892) [Test] Test that sequence numbers are not pruned with retention lease (elastic#143825) ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In the initial version of FORK, only WHERE, LIMIT and SORT where allowed in subbranches - meaning FORK branches could not modify the columns.
Right now, that's no longer the case, and each FORK branch is analyzed separately - even if FORK branches are querying the same indices, we don't reuse the same attributes across FORK branches.
However for the _fork attribute we reuse the same Alias (with the same id) across FORK branches which was a remnant from the initial implementation.
This could get us into all kind of troubles, if for example, we decide to push down filters after FORK into FORK branches, similar to
PushDownFilterAndLimitIntoUnionAll.Take for example the following query:
this executes correctly right now, because we have an implicit LIMIT on fork branches and we don't push down filters like
where _fork == "fork1"into fork bracnhes.When we do add this optimization (PR coming soon) and we no longer have an implicit limit, because of the way constant folding works right now, we won't optimize this correctly and we might end up pushing either
WHERE trueorWHERE falsein both of the branches.