feat: make sure the query plan nodes have unique ids #3297
Merged
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.
A lot of our planner rules transform the existing plan nodes into completely different ones. For example,
PushDownGroupAggregateRule
collapsesrange |> window |> agg
intoReadWindowAggregate
.In this process, we usually manually create the new physical nodes without numbering them. So if such planner rules are applied more than once in a query (a query with join or table functions or
chain()
), the plan nodes those rules created will have the same node ID and thus the same dataset ID. This will confuse the execution engine and generate undefined results.This PR addresses it by introducing a new
CreateUniquePhysicalNode
method that can read the next plan node ID from the context and apply it.