My Project
|
#include <table.h>
Public Attributes | |
List< TABLE_LIST > | join_list |
table_map | used_tables |
table_map | not_null_tables |
struct st_join_table * | first_nested |
uint | nj_total |
uint | nj_counter |
nested_join_map | nj_map |
table_map | sj_depends_on |
table_map | sj_corr_tables |
uint | query_block_id |
List< Item > | sj_outer_exprs |
List< Item > | sj_inner_exprs |
Semijoin_mat_optimize | sjm |
Struct st_nested_join is used to represent how tables are connected through outer join operations and semi-join operations to form a query block. Out of the parser, inner joins are also represented by st_nested_join structs, but these are later flattened out by simplify_joins(). Some outer join nests are also flattened, when it can be determined that they can be processed as inner joins instead of outer joins.
Used for pointing out the first table in the plan being covered by this join nest. It is used exclusively within make_outerjoin_info().
Used to count tables in the nested join in 2 isolated places: 1. In make_outerjoin_info(). 2. check_interleaving_with_nj/backout_nj_state (these are called by the join optimizer. Before each use the counters are zeroed by reset_nj_counters.
nested_join_map st_nested_join::nj_map |
Bit identifying this nested join. Only nested joins representing the outer join structure need this, other nests have bit set to zero.
Number of tables and outer join nests administered by this nested join object for the sake of cost analysis. Includes direct member tables as well as tables included through semi-join nests, but notice that semi-join nests themselves are not counted.
Query block id if this struct is generated from a subquery transform.
table_map st_nested_join::sj_corr_tables |
Outer non-trivially correlated tables, a true subset of sj_depends_on
table_map st_nested_join::sj_depends_on |
Tables outside the semi-join that are used within the semi-join's ON condition (ie. the subquery WHERE clause and optional IN equalities).