MySQL 9.1.0
Source Code Documentation
|
Represents an expression tree in the relational algebra of joins. More...
#include <relational_expression.h>
Public Types | |
enum | Type { INNER_JOIN = static_cast<int>(JoinType::INNER) , LEFT_JOIN = static_cast<int>(JoinType::OUTER) , SEMIJOIN = static_cast<int>(JoinType::SEMI) , ANTIJOIN = static_cast<int>(JoinType::ANTI) , STRAIGHT_INNER_JOIN = 101 , FULL_OUTER_JOIN = static_cast<int>(JoinType::FULL_OUTER) , MULTI_INNER_JOIN = 102 , TABLE = 100 } |
Public Member Functions | |
RelationalExpression (THD *thd) | |
void | enable_semijoin_strategies (const Table_ref *tl) |
const Mem_root_array< Item * > & | pushable_conditions () const |
void | AddPushable (Item *cond) |
Add a condition that can be pushed down to the acces path for 'table'. More... | |
Private Attributes | |
Mem_root_array< Item * > | m_pushable_conditions |
Conditions that can be pushed down to the acces path for 'table'. More... | |
Represents an expression tree in the relational algebra of joins.
Expressions are either tables, or joins of two expressions. (Joins can have join conditions, but more general filters are not represented in this structure.)
These are used as an abstract precursor to the join hypergraph; they represent the joins in the query block more or less directly, without any reordering. (The parser should largely have output a structure like this instead of Table_ref, but we are not there yet.) The only real manipulation we do on them is pushing down conditions, identifying equijoin conditions from other join conditions, and identifying join conditions that touch given tables (also a form of pushdown).
|
inlineexplicit |
|
inline |
Add a condition that can be pushed down to the acces path for 'table'.
|
inline |
|
inline |
CompanionSet* RelationalExpression::companion_set {nullptr} |
table_map RelationalExpression::conditions_used_tables {0} |
Mem_root_array<ConflictRule> RelationalExpression::conflict_rules |
Mem_root_array<Item_eq_base *> RelationalExpression::equijoin_conditions |
Mem_root_array<Item *> RelationalExpression::join_conditions |
bool RelationalExpression::join_conditions_reject_all_rows {false} |
int RelationalExpression::join_predicate_first {0} |
int RelationalExpression::join_predicate_last {0} |
RelationalExpression* RelationalExpression::left |
|
private |
Conditions that can be pushed down to the acces path for 'table'.
Mem_root_array<RelationalExpression *> RelationalExpression::multi_children |
hypergraph::NodeMap RelationalExpression::nodes_in_subtree |
Mem_root_array<CachedPropertiesForPredicate> RelationalExpression::properties_for_equijoin_conditions |
Mem_root_array<CachedPropertiesForPredicate> RelationalExpression::properties_for_join_conditions |
RelationalExpression * RelationalExpression::right |
uint RelationalExpression::sj_enabled_strategies {0} |
const Table_ref* RelationalExpression::table |
table_map RelationalExpression::tables_in_subtree |
enum RelationalExpression::Type RelationalExpression::type |