23#ifndef SQL_JOIN_OPTIMIZER_RELATIONAL_EXPRESSION_H
24#define SQL_JOIN_OPTIMIZER_RELATIONAL_EXPRESSION_H
bool IsSubset(uint64_t x, uint64_t y)
Definition: bit_utils.h:228
bool Overlaps(uint64_t x, uint64_t y)
Definition: bit_utils.h:236
The collection of CompanionSet objects for a given JoinHypergraph.
Definition: relational_expression.h:276
CompanionSet * Find(table_map tables)
Definition: relational_expression.h:286
CompanionSet * FindInternal(table_map tables) const
For a given set of tables, find the CompanionSet they are part of Returns nullptr if the tables are i...
Definition: relational_expression.cc:198
CompanionSetCollection(const CompanionSetCollection &)=delete
No copying.
void Compute(THD *thd, RelationalExpression *expr, CompanionSet *current_set)
Compute the CompanionSet of 'expr' and all of its descendants.
Definition: relational_expression.cc:148
std::array< CompanionSet *, MAX_TABLES > m_table_num_to_companion_set
A mapping from table number to CompanionSet.
Definition: relational_expression.h:297
CompanionSetCollection & operator=(const CompanionSetCollection &)=delete
CompanionSetCollection(THD *thd, struct RelationalExpression *root)
Definition: relational_expression.h:278
std::string ToString() const
For trace and debugging.
Definition: relational_expression.cc:180
const CompanionSet * Find(table_map tables) const
Definition: relational_expression.h:288
RelationalExpression objects in the same companion set are those that are inner-joined against each o...
Definition: relational_expression.h:77
CompanionSet & operator=(const CompanionSet &)=delete
Mem_root_array< EqualTerm > m_equal_terms
The set of sets of fields in equijoin predicates in this companion set.
Definition: relational_expression.h:126
table_map GetEqualityMap(const Field &field) const
If 'field' is part of an equijoin predicate in this CompanionSet, return a table_map of the tables in...
Definition: relational_expression.cc:120
CompanionSet(const CompanionSet &)=delete
No copying.
CompanionSet(THD *thd)
Definition: relational_expression.h:81
std::string ToString() const
For tracing and debugging.
Definition: relational_expression.cc:131
void AddEquijoinCondition(THD *thd, const Item_func_eq &eq)
Add the set of equal fields specified by 'func_eq'.
Definition: relational_expression.cc:65
Base class for the equality comparison operators = and <=>.
Definition: item_cmpfunc.h:980
Implements the comparison operator equals (=)
Definition: item_cmpfunc.h:1045
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:425
Definition: overflow_bitset.h:76
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
static MEM_ROOT mem_root
Definition: client_plugin.cc:113
uint64_t table_map
Definition: my_table_map.h:29
uint64_t NodeMap
Since our graphs can never have more than 61 tables, node sets and edge lists are implemented using 6...
Definition: node_map.h:39
OverflowBitset is a fixed-size (once allocated) bitmap that is optimized for the common case of few e...
void ForEachOperator(RelationalExpression *expr, Func &&func)
Definition: relational_expression.h:267
void ForEachJoinOperator(RelationalExpression *expr, Func &&func)
Definition: relational_expression.h:257
bool PassesConflictRules(hypergraph::NodeMap joined_tables, const RelationalExpression *expr)
Definition: relational_expression.h:236
bool OperatorIsCommutative(const RelationalExpression &expr)
Definition: relational_expression.h:249
Access paths are a query planning structure that correspond 1:1 to iterators, in that an access path ...
Definition: access_path.h:193
Definition: relational_expression.h:44
double selectivity
Definition: relational_expression.h:46
Mem_root_array< ContainedSubquery > contained_subqueries
Definition: relational_expression.h:45
OverflowBitset redundant_against_sargable_predicates
Definition: relational_expression.h:54
This represents equality between a set of fields, i.e.
Definition: relational_expression.h:107
FieldArray * fields
The fields that are equal to each other.
Definition: relational_expression.h:109
table_map tables
A map of all tables in 'fields'.
Definition: relational_expression.h:112
Definition: relational_expression.h:62
hypergraph::NodeMap required_nodes
Definition: relational_expression.h:64
hypergraph::NodeMap needed_to_activate_rule
Definition: relational_expression.h:63
Represents an expression tree in the relational algebra of joins.
Definition: relational_expression.h:144
int join_predicate_last
Definition: relational_expression.h:226
Mem_root_array< CachedPropertiesForPredicate > properties_for_equijoin_conditions
Definition: relational_expression.h:214
Mem_root_array< Item_eq_base * > equijoin_conditions
Definition: relational_expression.h:201
int join_predicate_first
Definition: relational_expression.h:226
Mem_root_array< ConflictRule > conflict_rules
Definition: relational_expression.h:231
enum RelationalExpression::Type type
CompanionSet * companion_set
Definition: relational_expression.h:192
RelationalExpression(THD *thd)
Definition: relational_expression.h:173
table_map tables_in_subtree
Definition: relational_expression.h:180
const Table_ref * table
Definition: relational_expression.h:188
hypergraph::NodeMap nodes_in_subtree
Definition: relational_expression.h:185
Mem_root_array< RelationalExpression * > multi_children
Definition: relational_expression.h:199
Mem_root_array< Item * > join_conditions_pushable_to_this
Definition: relational_expression.h:189
table_map conditions_used_tables
Definition: relational_expression.h:219
Mem_root_array< Item * > join_conditions
Definition: relational_expression.h:200
Type
Definition: relational_expression.h:145
@ SEMIJOIN
Definition: relational_expression.h:148
@ MULTI_INNER_JOIN
Definition: relational_expression.h:168
@ STRAIGHT_INNER_JOIN
Definition: relational_expression.h:154
@ ANTIJOIN
Definition: relational_expression.h:149
@ INNER_JOIN
Definition: relational_expression.h:146
@ FULL_OUTER_JOIN
Definition: relational_expression.h:161
@ TABLE
Definition: relational_expression.h:170
@ LEFT_JOIN
Definition: relational_expression.h:147
bool join_conditions_reject_all_rows
Definition: relational_expression.h:218
Mem_root_array< CachedPropertiesForPredicate > properties_for_join_conditions
Definition: relational_expression.h:212
RelationalExpression * left
Definition: relational_expression.h:197
RelationalExpression * right
Definition: relational_expression.h:197