QueryPlan is what we call the ability to statically analyze a viewmodel to know ahead of time what data it will use.
QueryPlan is used to efficiently fetch the data for a view.
Since views may shift what data they show (seekers or when base nesting on variables) the QueryPlan logic is active even after view creation - to make sure the slow performing lazy fetch does not kick in.
Lazy fetch is a strategy to fetch the object needed for a object locator just in time. This is practical but if every object would fetch itself with a roundtrip to server the application would not scale at all.
QueryPlan has multiple steps:
- Statically figure out Hierarcy building expressions (the nestings). On this level we only collect Class and Relation + the classes that expressions used the allinstances operator on
- Statically figure out what the other columns use (the non nestings)
From these 2 steps we have static information about what TYPE of information that will - at one point or another - be used by the view - per hierarcy level