Repository navigation
tp: keep what binding a pipeline plan finds beside the plan - #8382
Draft
LalitMaganti wants to merge 1 commit into
Draft
LalitMaganti wants to merge 1 commit into
LalitMaganti wants to merge 1 commit into
Conversation
Binding a pipeline plan wrote what it found into the plan itself: a scan's dataframe columns into its payload, and a dataframe argument's column types over the types the plan was written with. After binding, a plan was part what was written and part what was found, and anything after binding had to know which. Binding now records what it finds in Bindings, kept with the plan in a BoundPlan, and leaves the plan as it was written. Lowering reads the dataframes and types from there. Plans are unchanged.
🎨 Perfetto UI Builds & Tests
|
LalitMaganti
force-pushed
the
dev/lalitm/pipe-bindings
branch
from
October 29, 2026 20:56
ac87fd1 to
469d7a6
Compare
This branch has not been deployed
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.
Why
Binding a pipeline plan wrote what it found into the plan itself: a
scan's dataframe columns into its payload, and a dataframe argument's
column types over the types the plan was written with. After binding,
a plan was part what was written and part what was found, so anything
working on a bound plan had to know which. The passes in the PRs above
need the bound facts while they reorder and drop nodes, which is much
simpler when the two are kept apart.
Changes
Bindingsholds what binding finds: by node, the dataframe columnsand row count a scan reads; by column, its type.
BoundPlankeeps aLogicalPlanwith itsBindings.DeserializePlanreturns one,
BindDataframeArgsfills it in, andLowerreads it.ResolveCompiledPlanbinds a plan compiled in this process, whichwas never written.
Bindingsand leavethe plan as it was written. A scan's payload no longer holds its
dataframe columns.
Testing
byte-identical to before.