24#ifndef SQL_JOIN_OPTIMIZER_RELATIONAL_EXPRESSION_H 
   25#define SQL_JOIN_OPTIMIZER_RELATIONAL_EXPRESSION_H 
  298template <
class Operator, 
class Func>
 
  300                          std::remove_const_t<Operator>> &&
 
  301           std::is_invocable_v<Func, Operator *>
 
bool IsSubset(uint64_t x, uint64_t y)
Definition: bit_utils.h:221
 
bool Overlaps(uint64_t x, uint64_t y)
Definition: bit_utils.h:229
 
The collection of CompanionSet objects for a given JoinHypergraph.
Definition: relational_expression.h:321
 
CompanionSet * Find(table_map tables)
Definition: relational_expression.h:331
 
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:204
 
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:154
 
std::array< CompanionSet *, MAX_TABLES > m_table_num_to_companion_set
A mapping from table number to CompanionSet.
Definition: relational_expression.h:342
 
CompanionSetCollection & operator=(const CompanionSetCollection &)=delete
 
CompanionSetCollection(THD *thd, struct RelationalExpression *root)
Definition: relational_expression.h:323
 
std::string ToString() const
For trace and debugging.
Definition: relational_expression.cc:186
 
const CompanionSet * Find(table_map tables) const
Definition: relational_expression.h:333
 
RelationalExpression objects in the same companion set are those that are inner-joined against each o...
Definition: relational_expression.h:88
 
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:137
 
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:126
 
CompanionSet(const CompanionSet &)=delete
No copying.
 
CompanionSet(THD *thd)
Definition: relational_expression.h:92
 
std::string ToString() const
For tracing and debugging.
Definition: relational_expression.cc:137
 
void AddEquijoinCondition(THD *thd, const Item_eq_base &eq)
Add the set of equal fields specified by 'eq'.
Definition: relational_expression.cc:71
 
Base class for the equality comparison operators = and <=>.
Definition: item_cmpfunc.h:1045
 
Implements the comparison operator equals (=)
Definition: item_cmpfunc.h:1110
 
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:928
 
virtual table_map used_tables() const
Definition: item.h:2379
 
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:432
 
Definition: overflow_bitset.h:81
 
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
 
table_map map() const
Return table map derived from table number.
Definition: table.h:4122
 
NESTED_JOIN * nested_join
Is non-NULL if this table reference is a nested join, ie it represents the inner tables of an outer j...
Definition: table.h:3994
 
static MEM_ROOT mem_root
Definition: client_plugin.cc:114
 
bool ItemsAreEqual(const Item *a, const Item *b)
Returns true iff the two items are equal, as in a->eq(b), after unwrapping refs and Item_cache object...
Definition: item.cc:11568
 
@ ANTI
Left antijoin, i.e.
 
@ SEMI
Left semijoin, i.e.
 
uint64_t table_map
Definition: my_table_map.h:30
 
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:40
 
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:312
 
bool PassesConflictRules(hypergraph::NodeMap joined_tables, const RelationalExpression *expr)
Definition: relational_expression.h:278
 
void ForEachJoinOperator(Operator *expr, Func &&func)
Definition: relational_expression.h:302
 
bool OperatorIsCommutative(const RelationalExpression &expr)
Definition: relational_expression.h:291
 
File containing constants that can be used throughout the server.
 
Definition: relational_expression.h:55
 
double selectivity
Definition: relational_expression.h:57
 
Mem_root_array< ContainedSubquery > contained_subqueries
Definition: relational_expression.h:56
 
OverflowBitset redundant_against_sargable_predicates
Definition: relational_expression.h:65
 
This represents equality between a set of fields, i.e.
Definition: relational_expression.h:118
 
FieldArray * fields
The fields that are equal to each other.
Definition: relational_expression.h:120
 
table_map tables
A map of all tables in 'fields'.
Definition: relational_expression.h:123
 
Definition: relational_expression.h:73
 
hypergraph::NodeMap required_nodes
Definition: relational_expression.h:75
 
hypergraph::NodeMap needed_to_activate_rule
Definition: relational_expression.h:74
 
uint sj_enabled_strategies
Bitmap of which strategies are enabled for this semi-join nest.
Definition: nested_join.h:136
 
Information about a join condition that can potentially be pushed down as a sargable predicate for a ...
Definition: make_join_hypergraph.h:81
 
Item * cond
The condition that may be pushed as a sargable predicate.
Definition: make_join_hypergraph.h:83
 
Represents an expression tree in the relational algebra of joins.
Definition: relational_expression.h:155
 
int join_predicate_last
Definition: relational_expression.h:241
 
Mem_root_array< CachedPropertiesForPredicate > properties_for_equijoin_conditions
Definition: relational_expression.h:229
 
Mem_root_array< PushableJoinCondition > m_pushable_conditions
Conditions that can be pushed down to the access path for 'table'.
Definition: relational_expression.h:273
 
Mem_root_array< Item_eq_base * > equijoin_conditions
Definition: relational_expression.h:216
 
int join_predicate_first
Definition: relational_expression.h:241
 
Mem_root_array< ConflictRule > conflict_rules
Definition: relational_expression.h:246
 
void enable_semijoin_strategies(const Table_ref *tl)
Definition: relational_expression.h:249
 
enum RelationalExpression::Type type
 
void AddPushable(Item *cond, const RelationalExpression *from)
Add a condition that can be pushed down to the access path for 'table'.
Definition: relational_expression.h:258
 
CompanionSet * companion_set
Definition: relational_expression.h:207
 
RelationalExpression(THD *thd)
Definition: relational_expression.h:188
 
table_map tables_in_subtree
Definition: relational_expression.h:196
 
const Table_ref * table
Definition: relational_expression.h:204
 
hypergraph::NodeMap nodes_in_subtree
Definition: relational_expression.h:201
 
Mem_root_array< RelationalExpression * > multi_children
Definition: relational_expression.h:214
 
uint sj_enabled_strategies
Definition: relational_expression.h:247
 
table_map conditions_used_tables
Definition: relational_expression.h:234
 
Mem_root_array< Item * > join_conditions
Definition: relational_expression.h:215
 
Type
Definition: relational_expression.h:156
 
@ SEMIJOIN
Left semijoin.
Definition: relational_expression.h:161
 
@ MULTI_INNER_JOIN
Definition: relational_expression.h:183
 
@ STRAIGHT_INNER_JOIN
Definition: relational_expression.h:169
 
@ ANTIJOIN
Left antijoin.
Definition: relational_expression.h:164
 
@ INNER_JOIN
Definition: relational_expression.h:157
 
@ FULL_OUTER_JOIN
Definition: relational_expression.h:176
 
@ TABLE
Definition: relational_expression.h:185
 
@ LEFT_JOIN
Definition: relational_expression.h:158
 
bool join_conditions_reject_all_rows
Definition: relational_expression.h:233
 
Mem_root_array< CachedPropertiesForPredicate > properties_for_join_conditions
Definition: relational_expression.h:227
 
RelationalExpression * left
Definition: relational_expression.h:212
 
const Mem_root_array< PushableJoinCondition > & pushable_conditions() const
Definition: relational_expression.h:253
 
RelationalExpression * right
Definition: relational_expression.h:212