MySQL 8.4.2
Source Code Documentation
|
Classes | |
struct | IteratorToBeCreated |
Functions | |
bool | ShouldEnableBatchMode (AccessPath *path) |
bool | FinalizeMaterializedSubqueries (THD *thd, JOIN *join, AccessPath *path) |
If the path is a FILTER path marked that subqueries are to be materialized, do so. More... | |
void | SetupJobsForChildren (MEM_ROOT *mem_root, AccessPath *child, JOIN *join, bool eligible_for_batch_mode, IteratorToBeCreated *job, Mem_root_array< IteratorToBeCreated > *todo) |
void | SetupJobsForChildren (MEM_ROOT *mem_root, AccessPath *outer, AccessPath *inner, JOIN *join, bool inner_eligible_for_batch_mode, IteratorToBeCreated *job, Mem_root_array< IteratorToBeCreated > *todo) |
bool anonymous_namespace{access_path.cc}::FinalizeMaterializedSubqueries | ( | THD * | thd, |
JOIN * | join, | ||
AccessPath * | path | ||
) |
If the path is a FILTER path marked that subqueries are to be materialized, do so.
If not, do nothing.
It is important that this is not called until the entire plan is ready; not just when planning a single query block. The reason is that a query block A with materializable subqueries may itself be part of a materializable subquery B, so if one calls this when planning A, the subqueries in A will irrevocably be materialized, even if that is not the optimal plan given B. Thus, this is done when creating iterators.
void anonymous_namespace{access_path.cc}::SetupJobsForChildren | ( | MEM_ROOT * | mem_root, |
AccessPath * | child, | ||
JOIN * | join, | ||
bool | eligible_for_batch_mode, | ||
IteratorToBeCreated * | job, | ||
Mem_root_array< IteratorToBeCreated > * | todo | ||
) |
void anonymous_namespace{access_path.cc}::SetupJobsForChildren | ( | MEM_ROOT * | mem_root, |
AccessPath * | outer, | ||
AccessPath * | inner, | ||
JOIN * | join, | ||
bool | inner_eligible_for_batch_mode, | ||
IteratorToBeCreated * | job, | ||
Mem_root_array< IteratorToBeCreated > * | todo | ||
) |
bool anonymous_namespace{access_path.cc}::ShouldEnableBatchMode | ( | AccessPath * | path | ) |