24#ifndef SQL_JOIN_OPTIMIZER_ACCESS_PATH_H 
   25#define SQL_JOIN_OPTIMIZER_ACCESS_PATH_H 
  206                           double output_rows) {
 
  207  assert(init_cost >= 0.0);
 
  208  assert(total_cost >= init_cost);
 
  209  assert(output_rows >= 0.0);
 
  210  if (output_rows <= 1.0) {
 
  213  return init_cost + (total_cost - init_cost) / output_rows;
 
  411    assert(std::isfinite(val));
 
  417    assert(std::isfinite(val));
 
  423    assert(std::isfinite(val));
 
  429    assert(std::isfinite(val));
 
  558    return u.sample_scan;
 
  562    return u.sample_scan;
 
  574    return u.index_distance_scan;
 
  578    return u.index_distance_scan;
 
  590    return u.ref_or_null;
 
  594    return u.ref_or_null;
 
  606    return u.pushed_join_ref;
 
  610    return u.pushed_join_ref;
 
  614    return u.full_text_search;
 
  618    return u.full_text_search;
 
  622    return u.const_table;
 
  626    return u.const_table;
 
  638    return u.follow_tail;
 
  642    return u.follow_tail;
 
  646    return u.index_range_scan;
 
  650    return u.index_range_scan;
 
  654    return u.index_merge;
 
  658    return u.index_merge;
 
  662    return u.rowid_intersection;
 
  666    return u.rowid_intersection;
 
  670    return u.rowid_union;
 
  674    return u.rowid_union;
 
  678    return u.index_skip_scan;
 
  682    return u.index_skip_scan;
 
  686    return u.group_index_skip_scan;
 
  690    return u.group_index_skip_scan;
 
  694    return u.dynamic_index_range_scan;
 
  698    return u.dynamic_index_range_scan;
 
  702    return u.materialized_table_function;
 
  706    return u.materialized_table_function;
 
  710    return u.unqualified_count;
 
  714    return u.unqualified_count;
 
  718    return u.table_value_constructor;
 
  722    return u.table_value_constructor;
 
  726    return u.fake_single_row;
 
  730    return u.fake_single_row;
 
  742    return u.zero_rows_aggregated;
 
  746    return u.zero_rows_aggregated;
 
  766    return u.nested_loop_join;
 
  770    return u.nested_loop_join;
 
  774    return u.nested_loop_semijoin_with_duplicate_removal;
 
  778    return u.nested_loop_semijoin_with_duplicate_removal;
 
  806    return u.temptable_aggregate;
 
  810    return u.temptable_aggregate;
 
  814    return u.limit_offset;
 
  818    return u.limit_offset;
 
  830    return u.materialize;
 
  834    return u.materialize;
 
  838    return u.materialize_information_schema_table;
 
  842    return u.materialize_information_schema_table;
 
  870    return u.remove_duplicates;
 
  874    return u.remove_duplicates;
 
  878    return u.remove_duplicates_on_index;
 
  882    return u.remove_duplicates_on_index;
 
  886    return u.alternative;
 
  890    return u.alternative;
 
  894    return u.cache_invalidator;
 
  898    return u.cache_invalidator;
 
  902    return u.delete_rows;
 
  906    return u.delete_rows;
 
  910    return u.update_rows;
 
  914    return u.update_rows;
 
  920    assert(std::isfinite(val));
 
 1311      const ItemSpan &group_items()
 const {
 
 1351              "AccessPath must be trivially destructible, as it is allocated " 
 1352              "on the MEM_ROOT and not wrapped in unique_ptr_destroy_only" 
 1353              "(because multiple candidates during planning could point to " 
 1354              "the same access paths, and refcounting would be expensive)");
 
 1356              "We are creating a lot of access paths in the join " 
 1357              "optimizer, so be sure not to bloat it without noticing. " 
 1358              "(104 bytes for the base, 52 bytes for the variant.)");
 
 1378                                          bool count_examined_rows) {
 
 1381  path->count_examined_rows = count_examined_rows;
 
 1387                                           double sampling_percentage,
 
 1388                                           bool count_examined_rows) {
 
 1391  path->count_examined_rows = count_examined_rows;
 
 1393  path->sample_scan().sampling_percentage = sampling_percentage;
 
 1399                                          bool count_examined_rows) {
 
 1402  path->count_examined_rows = count_examined_rows;
 
 1404  path->index_scan().idx = idx;
 
 1405  path->index_scan().use_order = use_order;
 
 1412                                    bool count_examined_rows) {
 
 1415  path->count_examined_rows = count_examined_rows;
 
 1418  path->ref().use_order = use_order;
 
 1425                                          bool count_examined_rows) {
 
 1428  path->count_examined_rows = count_examined_rows;
 
 1430  path->ref_or_null().ref = 
ref;
 
 1431  path->ref_or_null().use_order = use_order;
 
 1436                                      bool count_examined_rows) {
 
 1439  path->count_examined_rows = count_examined_rows;
 
 1448                                              bool count_examined_rows) {
 
 1451  path->count_examined_rows = count_examined_rows;
 
 1453  path->pushed_join_ref().ref = 
ref;
 
 1454  path->pushed_join_ref().use_order = use_order;
 
 1455  path->pushed_join_ref().is_unique = is_unique;
 
 1462                                               bool use_order, 
bool use_limit,
 
 1463                                               bool count_examined_rows) {
 
 1466  path->count_examined_rows = count_examined_rows;
 
 1468  path->full_text_search().ref = 
ref;
 
 1469  path->full_text_search().use_order = use_order;
 
 1470  path->full_text_search().use_limit = use_limit;
 
 1471  path->full_text_search().ft_func = ft_func;
 
 1477                                           bool count_examined_rows) {
 
 1480  path->count_examined_rows = count_examined_rows;
 
 1481  path->set_num_output_rows(1.0);
 
 1482  path->set_cost(0.0);
 
 1483  path->set_init_cost(0.0);
 
 1484  path->set_init_once_cost(0.0);
 
 1486  path->const_table().ref = 
ref;
 
 1496  path->mrr().mrr_flags = mrr_flags;
 
 1499  path->mrr().bka_path = 
nullptr;
 
 1505                                           bool count_examined_rows) {
 
 1508  path->count_examined_rows = count_examined_rows;
 
 1517  path->count_examined_rows = count_examined_rows;
 
 1518  path->dynamic_index_range_scan().table = 
table;
 
 1519  path->dynamic_index_range_scan().qep_tab = qep_tab;
 
 1528  path->materialized_table_function().table = 
table;
 
 1529  path->materialized_table_function().table_function = table_function;
 
 1530  path->materialized_table_function().table_path = table_path;
 
 1545    KEY *
key, 
size_t key_len) {
 
 1548  path->nested_loop_semijoin_with_duplicate_removal().outer = outer;
 
 1549  path->nested_loop_semijoin_with_duplicate_removal().inner = inner;
 
 1550  path->nested_loop_semijoin_with_duplicate_removal().table = 
table;
 
 1551  path->nested_loop_semijoin_with_duplicate_removal().key = 
key;
 
 1552  path->nested_loop_semijoin_with_duplicate_removal().key_len = key_len;
 
 1553  path->has_group_skip_scan =
 
 1562  path->filter().child = child;
 
 1563  path->filter().condition = condition;
 
 1564  path->filter().materialize_subqueries = 
false;
 
 1565  path->has_group_skip_scan = child->has_group_skip_scan;
 
 1572                              ORDER *order, 
bool count_examined_rows);
 
 1578  path->aggregate().child = child;
 
 1579  path->aggregate().olap = olap;
 
 1580  path->has_group_skip_scan = child->has_group_skip_scan;
 
 1590  path->temptable_aggregate().subquery_path = subquery_path;
 
 1591  path->temptable_aggregate().join = 
join;
 
 1592  path->temptable_aggregate().temp_table_param = temp_table_param;
 
 1593  path->temptable_aggregate().table = 
table;
 
 1594  path->temptable_aggregate().table_path = table_path;
 
 1595  path->temptable_aggregate().ref_slice = ref_slice;
 
 1601                                            bool count_all_rows,
 
 1602                                            bool reject_multiple_rows,
 
 1603                                            ha_rows *send_records_override) {
 
 1607  path->immediate_update_delete_table = child->immediate_update_delete_table;
 
 1608  path->limit_offset().child = child;
 
 1609  path->limit_offset().limit = limit;
 
 1610  path->limit_offset().offset = offset;
 
 1611  path->limit_offset().count_all_rows = count_all_rows;
 
 1612  path->limit_offset().reject_multiple_rows = reject_multiple_rows;
 
 1613  path->limit_offset().send_records_override = send_records_override;
 
 1620                                              bool count_examined_rows) {
 
 1623  path->count_examined_rows = count_examined_rows;
 
 1624  path->set_num_output_rows(1.0);
 
 1625  path->set_cost(0.0);
 
 1626  path->set_init_cost(0.0);
 
 1627  path->set_init_once_cost(0.0);
 
 1632                                         const char *cause) {
 
 1635  path->zero_rows().child = child;
 
 1636  path->zero_rows().cause = cause;
 
 1637  path->set_num_output_rows(0.0);
 
 1638  path->set_cost(0.0);
 
 1639  path->set_init_cost(0.0);
 
 1640  path->set_init_once_cost(0.0);
 
 1641  path->num_output_rows_before_filter = 0.0;
 
 1642  path->set_cost_before_filter(0.0);
 
 1651                                                   const char *cause) {
 
 1654  path->zero_rows_aggregated().cause = cause;
 
 1655  path->set_num_output_rows(1.0);
 
 1656  path->set_cost(0.0);
 
 1657  path->set_init_cost(0.0);
 
 1667  path->stream().child = child;
 
 1669  path->stream().temp_table_param = temp_table_param;
 
 1671  path->stream().ref_slice = ref_slice;
 
 1673  path->stream().provide_rowid = 
false;
 
 1674  path->has_group_skip_scan = child->has_group_skip_scan;
 
 1682  assert(
path != 
nullptr);
 
 1698    int ref_slice, 
bool rematerialize, 
ha_rows limit_rows,
 
 1699    bool reject_multiple_rows,
 
 1705  if (rematerialize) {
 
 1734  path->materialize().table_path = table_path;
 
 1735  path->materialize().param = param;
 
 1738  if (rematerialize) {
 
 1751  path->materialize_information_schema_table().table_path = table_path;
 
 1752  path->materialize_information_schema_table().table_list = table_list;
 
 1753  path->materialize_information_schema_table().condition = condition;
 
 1787  path->append().children = children;
 
 1791    path->set_init_cost(
AddCost(
path->init_cost(), child.path->init_cost()));
 
 1792    path->set_init_once_cost(
path->init_once_cost() +
 
 1793                             child.path->init_once_cost());
 
 1795        AddRowCount(num_output_rows, child.path->num_output_rows());
 
 1797  path->set_num_output_rows(num_output_rows);
 
 1804                                       int ref_slice, 
bool needs_buffering) {
 
 1807  path->window().child = child;
 
 1808  path->window().window = window;
 
 1809  path->window().temp_table = 
nullptr;
 
 1810  path->window().temp_table_param = temp_table_param;
 
 1811  path->window().ref_slice = ref_slice;
 
 1812  path->window().needs_buffering = needs_buffering;
 
 1813  path->set_num_output_rows(child->num_output_rows());
 
 1821  path->weedout().child = child;
 
 1822  path->weedout().weedout_table = weedout_table;
 
 1823  path->weedout().tables_to_get_rowid_for =
 
 1829    THD *thd, 
AccessPath *child, std::span<Item *> group_items) {
 
 1832  path->remove_duplicates().child = child;
 
 1833  path->remove_duplicates().group_items() = group_items;
 
 1834  path->has_group_skip_scan = child->has_group_skip_scan;
 
 1840    unsigned loosescan_key_len) {
 
 1843  path->remove_duplicates_on_index().child = child;
 
 1844  path->remove_duplicates_on_index().table = 
table;
 
 1845  path->remove_duplicates_on_index().key = 
key;
 
 1846  path->remove_duplicates_on_index().loosescan_key_len = loosescan_key_len;
 
 1847  path->has_group_skip_scan = child->has_group_skip_scan;
 
 1856  path->alternative().table_scan_path = table_scan_path;
 
 1857  path->alternative().child = child;
 
 1858  path->alternative().used_ref = used_ref;
 
 1866  path->cache_invalidator().child = child;
 
 1867  path->cache_invalidator().name = 
name;
 
 1904    bool eligible_for_batch_mode);
 
 1912                                      eligible_for_batch_mode);
 
 1916                              const POSITION *pos, 
bool is_after_filter,
 
 2006                                    int num_where_predicates);
 
 2031                                            int num_where_predicates,
 
 2054    const std::vector<HashJoinCondition> &equijoin_conditions,
 
constexpr double kUnknownCost
To indicate that a cost estimate is not yet made.
Definition: access_path.h:201
 
bool ApplySecondaryEngineNrowsHook(const SecondaryEngineNrowsParameters ¶ms)
Applies the secondary storage engine nrows modification function, if any.
Definition: access_path.cc:133
 
void ExpandSingleFilterAccessPath(THD *thd, const JoinHypergraph &graph, AccessPath *path, const JOIN *join)
Like ExpandFilterAccessPaths(), but expands only the single access path at “path”.
Definition: access_path.cc:1725
 
AccessPath * NewStreamingAccessPath(THD *thd, AccessPath *child, JOIN *join, Temp_table_param *temp_table_param, TABLE *table, int ref_slice)
Definition: access_path.h:1661
 
AccessPath * NewInvalidatorAccessPath(THD *thd, AccessPath *child, const char *name)
Definition: access_path.h:1862
 
AccessPath * NewRemoveDuplicatesAccessPath(THD *thd, AccessPath *child, std::span< Item * > group_items)
Definition: access_path.h:1828
 
AccessPath * NewRefAccessPath(THD *thd, TABLE *table, Index_lookup *ref, bool use_order, bool reverse, bool count_examined_rows)
Definition: access_path.h:1410
 
AccessPath * NewDeleteRowsAccessPath(THD *thd, AccessPath *child, table_map delete_tables, table_map immediate_tables)
Definition: access_path.cc:183
 
void CopyBasicProperties(const AccessPath &from, AccessPath *to)
Definition: access_path.h:1360
 
AccessPath * NewFullTextSearchAccessPath(THD *thd, TABLE *table, Index_lookup *ref, Item_func_match *ft_func, bool use_order, bool use_limit, bool count_examined_rows)
Definition: access_path.h:1459
 
double AddRowCount(double c1, double c2)
Add row counts c1 and c2, but handle kUnknownRowCount correctly.
Definition: access_path.h:1770
 
AccessPath * NewUpdateRowsAccessPath(THD *thd, AccessPath *child, table_map update_tables, table_map immediate_tables)
Definition: access_path.cc:195
 
table_map GetHashJoinTables(AccessPath *path)
Returns the tables that are part of a hash join.
Definition: access_path.cc:1879
 
AccessPath * NewDynamicIndexRangeScanAccessPath(THD *thd, TABLE *table, QEP_TAB *qep_tab, bool count_examined_rows)
Definition: access_path.h:1513
 
AccessPath * NewMaterializeAccessPath(THD *thd, Mem_root_array< MaterializePathParameters::Operand > operands, Mem_root_array< const AccessPath * > *invalidators, TABLE *table, AccessPath *table_path, Common_table_expr *cte, Query_expression *unit, int ref_slice, bool rematerialize, ha_rows limit_rows, bool reject_multiple_rows, MaterializePathParameters::DedupType dedup_reason=MaterializePathParameters::NO_DEDUP)
Definition: access_path.h:1694
 
AccessPath * NewZeroRowsAggregatedAccessPath(THD *thd, const char *cause)
Definition: access_path.h:1650
 
AccessPath * NewAlternativeAccessPath(THD *thd, AccessPath *child, AccessPath *table_scan_path, Index_lookup *used_ref)
Definition: access_path.h:1851
 
AccessPath * NewMRRAccessPath(THD *thd, TABLE *table, Index_lookup *ref, int mrr_flags)
Definition: access_path.h:1490
 
table_map GetUsedTableMap(const AccessPath *path, bool include_pruned_tables)
Returns a map of all tables read when path or any of its children are executed.
Definition: access_path.cc:432
 
bool IsSecondaryEngineNrowsHookApplicable(AccessPath *path, THD *thd, const JoinHypergraph *graph)
Returns whether SecondaryNrows is applicable given the parameters.
Definition: access_path.cc:101
 
AccessPath * NewAppendAccessPath(THD *thd, Mem_root_array< AppendPathParameters > *children)
Definition: access_path.h:1783
 
AccessPath * NewNestedLoopSemiJoinWithDuplicateRemovalAccessPath(THD *thd, AccessPath *outer, AccessPath *inner, const TABLE *table, KEY *key, size_t key_len)
Definition: access_path.h:1543
 
std::string_view AccessPathTypeName(AccessPath::Type type)
Return the name of an AccessPath::Type enumerator.
Definition: access_path.cc:333
 
void CollectStatusVariables(THD *thd, const JOIN *top_join, const AccessPath &top_path)
Update status variables which count how many scans of various types are used in a query plan.
Definition: access_path.cc:1893
 
AccessPath * NewTemptableAggregateAccessPath(THD *thd, AccessPath *subquery_path, JOIN *join, Temp_table_param *temp_table_param, TABLE *table, AccessPath *table_path, int ref_slice)
Definition: access_path.h:1584
 
AccessPath * NewRemoveDuplicatesOnIndexAccessPath(THD *thd, AccessPath *child, TABLE *table, KEY *key, unsigned loosescan_key_len)
Definition: access_path.h:1838
 
AccessPath * NewFakeSingleRowAccessPath(THD *thd, bool count_examined_rows)
Definition: access_path.h:1619
 
AccessPath * NewTableValueConstructorAccessPath(const THD *thd, const JOIN *join)
Definition: access_path.cc:227
 
Item * ConditionFromFilterPredicates(const Mem_root_array< Predicate > &predicates, OverflowBitset mask, int num_where_predicates)
Extracts the Item expression from the given “filter_predicates” corresponding to the given “mask”.
Definition: access_path.cc:1714
 
AccessPath * NewFilterAccessPath(THD *thd, AccessPath *child, Item *condition)
Definition: access_path.h:1558
 
constexpr double kUnknownRowCount
To indicate that a row estimate is not yet made.
Definition: access_path.h:196
 
void ExpandFilterAccessPaths(THD *thd, const JoinHypergraph &graph, AccessPath *path, const JOIN *join)
For each access path in the (sub)tree rooted at “path”, expand any use of “filter_predicates” into ne...
Definition: access_path.cc:1861
 
AccessPath * NewSortAccessPath(THD *thd, AccessPath *child, Filesort *filesort, ORDER *order, bool count_examined_rows)
Definition: access_path.cc:148
 
bool IsSecondaryNrowsHookEnabledAndApplicable(AccessPath *path, THD *thd, const JoinHypergraph *graph)
Returns whether SecondaryNrows hook enabled and is applicable given the parameters.
Definition: access_path.cc:117
 
AccessPath * NewMaterializedTableFunctionAccessPath(THD *thd, TABLE *table, Table_function *table_function, AccessPath *table_path)
Definition: access_path.h:1523
 
const Mem_root_array< Item * > * GetExtraHashJoinConditions(MEM_ROOT *mem_root, bool using_hypergraph_optimizer, const std::vector< HashJoinCondition > &equijoin_conditions, const Mem_root_array< Item * > &other_conditions)
Get the conditions to put into the extra conditions of the HashJoinIterator.
 
Mem_root_array< TABLE * > CollectTables(THD *thd, AccessPath *root_path)
Find the list of all tables used by this root, stopping at materializations.
Definition: access_path.cc:463
 
AccessPath * NewTableScanAccessPath(THD *thd, TABLE *table, bool count_examined_rows)
Definition: access_path.h:1377
 
AccessPath * NewSampleScanAccessPath(THD *thd, TABLE *table, double sampling_percentage, bool count_examined_rows)
Definition: access_path.h:1386
 
AccessPath * NewAggregateAccessPath(THD *thd, AccessPath *child, olap_type olap)
Definition: access_path.h:1574
 
double AddCost(double c1, double c2)
Add path costs c1 and c2, but handle kUnknownCost correctly.
Definition: access_path.h:1758
 
AccessPath * NewMaterializeInformationSchemaTableAccessPath(THD *thd, AccessPath *table_path, Table_ref *table_list, Item *condition)
Definition: access_path.h:1747
 
void FindTablesToGetRowidFor(AccessPath *path)
Modifies "path" and the paths below it so that they provide row IDs for all tables.
Definition: access_path.cc:1550
 
TABLE * GetBasicTable(const AccessPath *path)
Return the TABLE* referred from 'path' if it is a basic access path, else a nullptr is returned.
Definition: access_path.cc:276
 
AccessPath * NewRefOrNullAccessPath(THD *thd, TABLE *table, Index_lookup *ref, bool use_order, bool count_examined_rows)
Definition: access_path.h:1423
 
AccessPath * NewLimitOffsetAccessPath(THD *thd, AccessPath *child, ha_rows limit, ha_rows offset, bool count_all_rows, bool reject_multiple_rows, ha_rows *send_records_override)
Definition: access_path.h:1599
 
AccessPath * NewEQRefAccessPath(THD *thd, TABLE *table, Index_lookup *ref, bool count_examined_rows)
Definition: access_path.h:1435
 
AccessPath * NewWindowAccessPath(THD *thd, AccessPath *child, Window *window, Temp_table_param *temp_table_param, int ref_slice, bool needs_buffering)
Definition: access_path.h:1801
 
double FirstRowCost(double init_cost, double total_cost, double output_rows)
Calculate the cost of reading the first row from an access path, given estimates for init cost,...
Definition: access_path.h:205
 
AccessPath * NewFollowTailAccessPath(THD *thd, TABLE *table, bool count_examined_rows)
Definition: access_path.h:1504
 
AccessPath * NewConstTableAccessPath(THD *thd, TABLE *table, Index_lookup *ref, bool count_examined_rows)
Definition: access_path.h:1475
 
MutableOverflowBitset ClearFilterPredicates(OverflowBitset predicates, int num_where_predicates, MEM_ROOT *mem_root)
Clear all the bits representing filter predicates in a bitset, and keep only the bits representing ap...
Definition: access_path.cc:1870
 
unique_ptr_destroy_only< RowIterator > CreateIteratorFromAccessPath(THD *thd, MEM_ROOT *mem_root, AccessPath *path, JOIN *join, bool eligible_for_batch_mode)
Definition: access_path.cc:699
 
AccessPath * NewWeedoutAccessPath(THD *thd, AccessPath *child, SJ_TMP_TABLE *weedout_table)
Definition: access_path.h:1817
 
AccessPath * NewPushedJoinRefAccessPath(THD *thd, TABLE *table, Index_lookup *ref, bool use_order, bool is_unique, bool count_examined_rows)
Definition: access_path.h:1445
 
AccessPath * NewZeroRowsAccessPath(THD *thd, AccessPath *child, const char *cause)
Definition: access_path.h:1631
 
AccessPath * NewUnqualifiedCountAccessPath(THD *thd)
Definition: access_path.h:1534
 
AccessPath * NewIndexScanAccessPath(THD *thd, TABLE *table, int idx, bool use_order, bool reverse, bool count_examined_rows)
Definition: access_path.h:1397
 
Mem_root_array< MaterializePathParameters::Operand > SingleMaterializeQueryBlock(THD *thd, AccessPath *path, int select_number, JOIN *join, bool copy_items, Temp_table_param *temp_table_param)
Definition: access_path.h:1679
 
After parsing, a Common Table Expression is accessed through a Table_ref.
Definition: table.h:4580
 
API for getting cost estimates for server operations that are not directly related to a table object.
Definition: opt_costmodel.h:54
 
Sorting related info.
Definition: filesort.h:52
 
A class that represents a join condition in a hash join.
Definition: item_cmpfunc.h:92
 
Definition: item_func.h:3601
 
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:928
 
Definition: sql_optimizer.h:133
 
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:432
 
Definition: overflow_bitset.h:179
 
Definition: overflow_bitset.h:81
 
Definition: sql_executor.h:256
 
Definition: range_optimizer.h:69
 
This class represents a query expression (one query block or several query blocks combined with UNION...
Definition: sql_lex.h:643
 
A context for reading through a single table using a chosen access method: index read,...
Definition: row_iterator.h:82
 
Definition: sql_executor.h:95
 
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
 
MEM_ROOT * mem_root
Definition: sql_lexer_thd.h:40
 
Class representing a table function.
Definition: table_function.h:53
 
Object containing parameters used when creating and using temporary tables.
Definition: temp_table_param.h:97
 
Represents the (explicit) window of a SQL 2003 section 7.11 <window clause>, or the implicit (inlined...
Definition: window.h:110
 
static MEM_ROOT mem_root
Definition: client_plugin.cc:114
 
void EstimateLimitOffsetCost(AccessPath *path)
Estimate the costs and row count for a WINDOW AccessPath.
Definition: cost_model.cc:1677
 
bool filesort(THD *thd, Filesort *filesort, RowIterator *source_iterator, table_map tables_to_get_rowid_for, ha_rows num_rows_estimate, Filesort_info *fs_info, Sort_result *sort_result, ha_rows *found_rows)
Sort a table.
Definition: filesort.cc:367
 
void SetCostOnTableAccessPath(const Cost_model_server &cost_model, const POSITION *pos, bool is_after_filter, AccessPath *path)
Definition: sql_executor.cc:2009
 
std::bitset< kMaxSupportedFDs > FunctionalDependencySet
Definition: interesting_orders_defs.h:63
 
JoinType
Definition: join_type.h:28
 
unsigned char byte
Blob class.
Definition: common.h:151
 
static mi_bit_type mask[]
Definition: mi_packrec.cc:141
 
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
 
std::unique_ptr< T, Destroy_only< T > > unique_ptr_destroy_only
std::unique_ptr, but only destroying.
Definition: my_alloc.h:480
 
This file includes constants used by all storage engines.
 
my_off_t ha_rows
Definition: my_base.h:1217
 
#define HA_POS_ERROR
Definition: my_base.h:1219
 
uint64_t table_map
Definition: my_table_map.h:30
 
static char * path
Definition: mysqldump.cc:150
 
static PFS_engine_table_share_proxy table
Definition: pfs.cc:61
 
PT & ref(PT *tp)
Definition: tablespace_impl.cc:359
 
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
 
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
 
RangeReverse< Range > reverse(Range &x)
Iterate over a range in reverse.
Definition: utilities.h:132
 
std::string join(const detail::range auto &rng, std::string_view delim)
join elements of a range into a string separated by a delimiter.
Definition: string.h:74
 
int delete_tables(PFS_engine_table_share_proxy **, unsigned int) noexcept
Definition: pfs_plugin_table_v1_all_empty.cc:39
 
olap_type
Definition: olap.h:31
 
OverflowBitset is a fixed-size (once allocated) bitmap that is optimized for the common case of few e...
 
required string key
Definition: replication_asynchronous_connection_failover.proto:60
 
required string type
Definition: replication_group_member_actions.proto:34
 
case opt name
Definition: sslopt-case.h:29
 
Access paths are a query planning structure that correspond 1:1 to iterators, in that an access path ...
Definition: access_path.h:238
 
auto & weedout()
Definition: access_path.h:860
 
auto & filter()
Definition: access_path.h:780
 
bool count_all_rows
Definition: access_path.h:1250
 
AccessPath * bka_path
Definition: access_path.h:1019
 
struct AccessPath::@67::@97 filter
 
auto & ref_or_null()
Definition: access_path.h:588
 
auto & materialized_table_function()
Definition: access_path.h:700
 
AccessPath * cpk_child
Definition: access_path.h:1080
 
auto & rowid_union()
Definition: access_path.h:668
 
hypergraph::NodeMap parameter_tables
If nonzero, a bitmap of other tables whose joined-in rows must already be loaded when rows from this ...
Definition: access_path.h:532
 
const auto & bka_join() const
Definition: access_path.h:760
 
struct AccessPath::@67::@93 hash_join
 
TABLE * temp_table
Definition: access_path.h:1290
 
OverflowBitset equijoin_predicates
Definition: access_path.h:1190
 
double rescan_cost() const
Return the cost of scanning the given path for the second time (or later) in the given query block.
Definition: access_path.h:440
 
auto & materialize()
Definition: access_path.h:828
 
const auto & temptable_aggregate() const
Definition: access_path.h:808
 
OverflowBitset & subsumed_sargable_join_predicates()
Similar to applied_sargable_join_predicates, bitmap of sargable join predicates that have been applie...
Definition: access_path.h:504
 
auto & index_scan()
Definition: access_path.h:564
 
struct AccessPath::@67::@85 group_index_skip_scan
 
struct AccessPath::@67::@79 follow_tail
 
const auto & delete_rows() const
Definition: access_path.h:904
 
struct AccessPath::@67::@92 zero_rows_aggregated
 
struct AccessPath::@67::@89 table_value_constructor
 
const auto & filter() const
Definition: access_path.h:784
 
struct AccessPath::@67::@84 index_skip_scan
 
struct AccessPath::@67::@77 const_table
 
const auto & index_distance_scan() const
Definition: access_path.h:576
 
auto & delete_rows()
Definition: access_path.h:900
 
bool reuse_handler
Definition: access_path.h:1057
 
KEY_PART * used_key_part
Definition: access_path.h:1031
 
double m_init_cost
Expected cost to initialize this access path; ie., cost to read k out of N rows would be init_cost + ...
Definition: access_path.h:939
 
olap_type olap
Definition: access_path.h:1236
 
struct AccessPath::@67::@73 ref_or_null
 
OverflowBitset & applied_sargable_join_predicates()
Bitmap of sargable join predicates that have already been applied in this access path by means of an ...
Definition: access_path.h:484
 
Item * condition
Definition: access_path.h:1208
 
const auto & index_merge() const
Definition: access_path.h:656
 
const auto & update_rows() const
Definition: access_path.h:912
 
double subquery_rows
The number of materialized rows (as opposed to the number of rows fetched by table_path).
Definition: access_path.h:1277
 
enum AccessPath::Type type
 
auto & alternative()
Definition: access_path.h:884
 
auto & pushed_join_ref()
Definition: access_path.h:604
 
void set_cost(double val)
Definition: access_path.h:410
 
AccessPath * outer
Definition: access_path.h:1164
 
std::span< Item * > ItemSpan
Definition: access_path.h:1301
 
auto & index_skip_scan()
Definition: access_path.h:676
 
bool rewrite_semi_to_inner
Definition: access_path.h:1168
 
const auto & zero_rows_aggregated() const
Definition: access_path.h:744
 
auto & group_index_skip_scan()
Definition: access_path.h:684
 
struct AccessPath::@67::@107 weedout
 
const auto & eq_ref() const
Definition: access_path.h:600
 
bool use_order
Definition: access_path.h:975
 
bool pfs_batch_mode
Definition: access_path.h:1182
 
auto & temptable_aggregate()
Definition: access_path.h:804
 
GroupIndexSkipScanParameters * param
Definition: access_path.h:1124
 
auto & rowid_intersection()
Definition: access_path.h:660
 
double init_cost() const
Definition: access_path.h:399
 
bool materialize_subqueries
Definition: access_path.h:1218
 
AccessPath * child
Definition: access_path.h:1152
 
bool allow_spill_to_disk
Definition: access_path.h:1166
 
struct AccessPath::@67::@82 rowid_intersection
 
struct AccessPath::@67::@83 rowid_union
 
Index_lookup * used_ref
Definition: access_path.h:1332
 
auto & mrr()
Definition: access_path.h:628
 
std::byte m_group_items[sizeof(ItemSpan)]
Definition: access_path.h:1319
 
auto & sample_scan()
Definition: access_path.h:556
 
const auto & index_scan() const
Definition: access_path.h:568
 
const auto & fake_single_row() const
Definition: access_path.h:728
 
struct AccessPath::@67::@102 stream
 
bool reject_multiple_rows
Definition: access_path.h:1251
 
struct AccessPath::@67::@81 index_merge
 
bool allow_clustered_primary_key_scan
Definition: access_path.h:1072
 
const char * name
Definition: access_path.h:1336
 
bool use_limit
Definition: access_path.h:1009
 
Window * window
Definition: access_path.h:1289
 
table_map tables_to_get_rowid_for
Definition: access_path.h:1169
 
auto & materialize_information_schema_table()
Definition: access_path.h:836
 
auto & bka_join()
Definition: access_path.h:756
 
struct AccessPath::@67::@96 nested_loop_semijoin_with_duplicate_removal
 
const auto & follow_tail() const
Definition: access_path.h:640
 
SJ_TMP_TABLE * weedout_table
Definition: access_path.h:1297
 
bool has_group_skip_scan
Whether this access path contains a GROUP_INDEX_SKIP_SCAN.
Definition: access_path.h:334
 
Index_lookup * ref
Definition: access_path.h:986
 
struct AccessPath::@67::@101 limit_offset
 
const auto & window() const
Definition: access_path.h:856
 
void set_init_once_cost(double val)
Definition: access_path.h:422
 
const auto & materialized_table_function() const
Definition: access_path.h:704
 
auto & unqualified_count()
Definition: access_path.h:708
 
bool keep_current_rowid
Definition: access_path.h:1021
 
bool using_extended_key_parts
Definition: access_path.h:1067
 
auto & nested_loop_join()
Definition: access_path.h:764
 
const auto & full_text_search() const
Definition: access_path.h:616
 
struct AccessPath::@67::@87 materialized_table_function
 
bool can_be_used_for_ror
Definition: access_path.h:1047
 
float rec_per_key
Definition: access_path.h:1175
 
Safety safe_for_rowid
Whether it is safe to get row IDs (for sorting) from this access path.
Definition: access_path.h:325
 
JOIN * join
Definition: access_path.h:1240
 
unsigned index
Definition: access_path.h:1043
 
unsigned mrr_buf_size
Definition: access_path.h:1039
 
auto & remove_duplicates()
Definition: access_path.h:868
 
RowIterator * iterator
If an iterator has been instantiated for this access path, points to the iterator.
Definition: access_path.h:395
 
const auto & stream() const
Definition: access_path.h:824
 
struct AccessPath::@67::@71 index_distance_scan
 
const auto & remove_duplicates() const
Definition: access_path.h:872
 
auto & window()
Definition: access_path.h:852
 
bool need_rows_in_rowid_order
Definition: access_path.h:1051
 
Table_ref * table_list
Definition: access_path.h:1281
 
const auto & unqualified_count() const
Definition: access_path.h:712
 
void * secondary_engine_data
Auxiliary data used by a secondary storage engine while processing the access path during optimizatio...
Definition: access_path.h:541
 
struct AccessPath::@67::@68 table_scan
 
struct AccessPath::@67::@110 alternative
 
void set_init_cost(double val)
Definition: access_path.h:416
 
void set_num_output_rows(double val)
Definition: access_path.h:919
 
bool is_covering
Definition: access_path.h:1100
 
const auto & mrr() const
Definition: access_path.h:632
 
void set_cost_before_filter(double val)
Definition: access_path.h:428
 
bool remove_duplicates
Definition: access_path.h:1230
 
table_map tables_to_update
Definition: access_path.h:1345
 
const auto & table_value_constructor() const
Definition: access_path.h:720
 
KEY * key
Definition: access_path.h:1202
 
bool HasConsistentCostsAndRows(const JoinHypergraph &graph) const
Return true if costs and row counts are consistent.
Definition: access_path.cc:1971
 
auto & table_value_constructor()
Definition: access_path.h:716
 
auto & stream()
Definition: access_path.h:820
 
size_t key_len
Definition: access_path.h:1203
 
const OverflowBitset & subsumed_sargable_join_predicates() const
Definition: access_path.h:507
 
const auto & zero_rows() const
Definition: access_path.h:736
 
const auto & append() const
Definition: access_path.h:848
 
ha_rows offset
Definition: access_path.h:1249
 
int idx
Definition: access_path.h:974
 
auto & hash_join()
Definition: access_path.h:748
 
auto & cache_invalidator()
Definition: access_path.h:892
 
struct AccessPath::@67::@90 fake_single_row
 
bool force_sort_rowids
Definition: access_path.h:1232
 
unsigned num_used_key_parts
Definition: access_path.h:1044
 
unsigned num_ranges
Definition: access_path.h:1036
 
ORDER * order
Definition: access_path.h:1228
 
auto & sort()
Definition: access_path.h:788
 
struct AccessPath::@67::@80 index_range_scan
 
auto & fake_single_row()
Definition: access_path.h:724
 
ha_rows limit
Definition: access_path.h:1229
 
auto & follow_tail()
Definition: access_path.h:636
 
double m_num_output_rows
Expected number of output rows.
Definition: access_path.h:927
 
const auto & sample_scan() const
Definition: access_path.h:560
 
const JoinPredicate * join_predicate
Definition: access_path.h:1165
 
const auto & const_table() const
Definition: access_path.h:624
 
const auto & dynamic_index_range_scan() const
Definition: access_path.h:696
 
const auto & table_scan() const
Definition: access_path.h:552
 
struct AccessPath::@67::@70 index_scan
 
unsigned mrr_flags
Definition: access_path.h:1038
 
int ref_slice
Definition: access_path.h:1244
 
struct AccessPath::@67::@112 delete_rows
 
OverflowBitset filter_predicates
Bitmap of WHERE predicates that we are including on this access path, referring to the “predicates” a...
Definition: access_path.h:468
 
bool can_be_used_for_imerge
Definition: access_path.h:1054
 
bool forced_by_hint
Definition: access_path.h:1071
 
auto & limit_offset()
Definition: access_path.h:812
 
AccessPath * inner
Definition: access_path.h:1164
 
QUICK_RANGE * range
Definition: access_path.h:981
 
bool provide_rowid
Definition: access_path.h:1261
 
const auto & index_range_scan() const
Definition: access_path.h:648
 
struct AccessPath::@67::@99 aggregate
 
struct AccessPath::@67::@75 pushed_join_ref
 
const auto & ref() const
Definition: access_path.h:584
 
struct AccessPath::@67::@91 zero_rows
 
bool forced_by_dbug
Whether this access path is forced preferred over all others by means of a SET DEBUG force_subplan_0x...
Definition: access_path.h:339
 
Item_func_match * ft_func
Definition: access_path.h:1010
 
ha_rows * send_records_override
Definition: access_path.h:1254
 
auto & table_scan()
Definition: access_path.h:548
 
const auto & hash_join() const
Definition: access_path.h:752
 
QEP_TAB * qep_tab
Definition: access_path.h:1128
 
Table_function * table_function
Definition: access_path.h:1132
 
struct AccessPath::@67::@109 remove_duplicates_on_index
 
auto & zero_rows_aggregated()
Definition: access_path.h:740
 
const auto & sort() const
Definition: access_path.h:792
 
bool unwrap_rollup
Definition: access_path.h:1231
 
struct AccessPath::@67::@74 eq_ref
 
struct AccessPath::@67::@94 bka_join
 
struct AccessPath::@67::@78 mrr
 
Type
Definition: access_path.h:239
 
@ FOLLOW_TAIL
Definition: access_path.h:254
 
@ FILTER
Definition: access_path.h:278
 
@ PUSHED_JOIN_REF
Definition: access_path.h:250
 
@ ZERO_ROWS_AGGREGATED
Definition: access_path.h:267
 
@ UPDATE_ROWS
Definition: access_path.h:296
 
@ AGGREGATE
Definition: access_path.h:280
 
@ BKA_JOIN
Definition: access_path.h:274
 
@ ZERO_ROWS
Definition: access_path.h:266
 
@ CONST_TABLE
Definition: access_path.h:252
 
@ GROUP_INDEX_SKIP_SCAN
Definition: access_path.h:260
 
@ SAMPLE_SCAN
Definition: access_path.h:244
 
@ INDEX_RANGE_SCAN
Definition: access_path.h:255
 
@ UNQUALIFIED_COUNT
Definition: access_path.h:269
 
@ EQ_REF
Definition: access_path.h:249
 
@ FAKE_SINGLE_ROW
Definition: access_path.h:265
 
@ MATERIALIZE_INFORMATION_SCHEMA_TABLE
Definition: access_path.h:285
 
@ WINDOW
Definition: access_path.h:287
 
@ REF_OR_NULL
Definition: access_path.h:248
 
@ MATERIALIZE
Definition: access_path.h:284
 
@ NESTED_LOOP_SEMIJOIN_WITH_DUPLICATE_REMOVAL
Definition: access_path.h:273
 
@ ROWID_UNION
Definition: access_path.h:258
 
@ INDEX_SKIP_SCAN
Definition: access_path.h:259
 
@ MRR
Definition: access_path.h:253
 
@ CACHE_INVALIDATOR
Definition: access_path.h:292
 
@ INDEX_SCAN
Definition: access_path.h:245
 
@ TABLE_VALUE_CONSTRUCTOR
Definition: access_path.h:264
 
@ WEEDOUT
Definition: access_path.h:288
 
@ MATERIALIZED_TABLE_FUNCTION
Definition: access_path.h:268
 
@ REMOVE_DUPLICATES_ON_INDEX
Definition: access_path.h:290
 
@ TABLE_SCAN
Definition: access_path.h:243
 
@ REF
Definition: access_path.h:247
 
@ TEMPTABLE_AGGREGATE
Definition: access_path.h:281
 
@ LIMIT_OFFSET
Definition: access_path.h:282
 
@ APPEND
Definition: access_path.h:286
 
@ NESTED_LOOP_JOIN
Definition: access_path.h:272
 
@ INDEX_MERGE
Definition: access_path.h:256
 
@ FULL_TEXT_SEARCH
Definition: access_path.h:251
 
@ ALTERNATIVE
Definition: access_path.h:291
 
@ STREAM
Definition: access_path.h:283
 
@ REMOVE_DUPLICATES
Definition: access_path.h:289
 
@ ROWID_INTERSECTION
Definition: access_path.h:257
 
@ DYNAMIC_INDEX_RANGE_SCAN
Definition: access_path.h:261
 
@ DELETE_ROWS
Definition: access_path.h:295
 
@ SORT
Definition: access_path.h:279
 
@ INDEX_DISTANCE_SCAN
Definition: access_path.h:246
 
@ HASH_JOIN
Definition: access_path.h:275
 
bool retrieve_full_rows
Definition: access_path.h:1083
 
double m_init_once_cost
Of init_cost, how much of the initialization needs only to be done once per query block.
Definition: access_path.h:951
 
struct AccessPath::@67::@86 dynamic_index_range_scan
 
const auto & rowid_union() const
Definition: access_path.h:672
 
const TABLE * table
Definition: access_path.h:1201
 
const auto & index_skip_scan() const
Definition: access_path.h:680
 
auto & dynamic_index_range_scan()
Definition: access_path.h:692
 
const auto & pushed_join_ref() const
Definition: access_path.h:608
 
struct AccessPath::@67::@111 cache_invalidator
 
auto & remove_duplicates_on_index()
Definition: access_path.h:876
 
table_map immediate_tables
Definition: access_path.h:1341
 
double m_cost_before_filter
If no filter, identical to cost.
Definition: access_path.h:955
 
double cost() const
Definition: access_path.h:397
 
struct AccessPath::@67::@88 unqualified_count
 
int mrr_flags
Definition: access_path.h:1020
 
auto & full_text_search()
Definition: access_path.h:612
 
const auto & materialize() const
Definition: access_path.h:832
 
int ordering_state
Which ordering the rows produced by this path follow, if any (see interesting_orders....
Definition: access_path.h:389
 
auto & eq_ref()
Definition: access_path.h:596
 
JoinType join_type
Definition: access_path.h:1173
 
const auto & limit_offset() const
Definition: access_path.h:816
 
MaterializePathParameters * param
Definition: access_path.h:1272
 
const char * cause
Definition: access_path.h:1155
 
auto & update_rows()
Definition: access_path.h:908
 
auto & index_merge()
Definition: access_path.h:652
 
auto & aggregate()
Definition: access_path.h:796
 
struct AccessPath::@67::@104 materialize_information_schema_table
 
double m_cost
Expected cost to read all of this access path once.
Definition: access_path.h:930
 
const auto & group_index_skip_scan() const
Definition: access_path.h:688
 
auto & zero_rows()
Definition: access_path.h:732
 
AccessPath * subquery_path
Definition: access_path.h:1239
 
Mem_root_array< AppendPathParameters > * children
Definition: access_path.h:1285
 
const auto & nested_loop_join() const
Definition: access_path.h:768
 
bool already_expanded_predicates
Definition: access_path.h:1183
 
const auto & remove_duplicates_on_index() const
Definition: access_path.h:880
 
Temp_table_param * temp_table_param
Definition: access_path.h:1241
 
auto & nested_loop_semijoin_with_duplicate_removal()
Definition: access_path.h:772
 
bool reverse
Definition: access_path.h:976
 
AccessPath * table_scan_path
Definition: access_path.h:1328
 
struct AccessPath::@67::@113 update_rows
 
struct AccessPath::@67::@98 sort
 
enum tablesample_type sampling_type
Definition: access_path.h:970
 
const auto & materialize_information_schema_table() const
Definition: access_path.h:840
 
double subquery_cost
The total cost of executing the queries that we materialize.
Definition: access_path.h:1274
 
bool geometry
Definition: access_path.h:1060
 
bool count_examined_rows
Whether this access path counts as one that scans a base table, and thus should be counted towards ex...
Definition: access_path.h:331
 
unsigned loosescan_key_len
Definition: access_path.h:1325
 
auto & index_distance_scan()
Definition: access_path.h:572
 
auto & ref()
Definition: access_path.h:580
 
struct AccessPath::@67::@100 temptable_aggregate
 
double first_row_cost() const
The cost of reading the first row.
Definition: access_path.h:402
 
table_map tables_to_delete_from
Definition: access_path.h:1340
 
struct AccessPath::@67::@69 sample_scan
 
double init_once_cost() const
Definition: access_path.h:406
 
IndexSkipScanParameters * param
Definition: access_path.h:1115
 
const OverflowBitset & applied_sargable_join_predicates() const
Definition: access_path.h:487
 
Mem_root_array< AccessPath * > * children
Definition: access_path.h:1073
 
OverflowBitset delayed_predicates
Bitmap of WHERE predicates that touch tables we have joined in, but that we could not apply yet (for ...
Definition: access_path.h:496
 
AccessPath * table_path
Definition: access_path.h:1133
 
const auto & aggregate() const
Definition: access_path.h:800
 
TABLE * table
Definition: access_path.h:965
 
auto & append()
Definition: access_path.h:844
 
double cost_before_filter() const
Definition: access_path.h:408
 
const auto & weedout() const
Definition: access_path.h:864
 
const auto & cache_invalidator() const
Definition: access_path.h:896
 
double sampling_percentage
Definition: access_path.h:969
 
bool needs_buffering
Definition: access_path.h:1293
 
int8_t immediate_update_delete_table
For UPDATE and DELETE statements: The node index of a table which can be updated or deleted from imme...
Definition: access_path.h:383
 
QUICK_RANGE ** ranges
Definition: access_path.h:1035
 
bool is_unique
Definition: access_path.h:1003
 
const auto & alternative() const
Definition: access_path.h:888
 
Safety
A general enum to describe the safety of a given operation.
Definition: access_path.h:306
 
@ SAFE_IF_SCANNED_ONCE
The given operation is safe if this access path is scanned once, but not if it's scanned multiple tim...
Definition: access_path.h:315
 
@ UNSAFE
The given operation is unsafe on this access path, no matter how many or few times it's scanned.
Definition: access_path.h:321
 
@ SAFE
The given operation is always safe on this access path.
Definition: access_path.h:308
 
struct AccessPath::@67::@103 materialize
 
auto & const_table()
Definition: access_path.h:620
 
unsigned mrr_length_per_rec
Definition: access_path.h:1174
 
struct AccessPath::@67::@76 full_text_search
 
const auto & rowid_intersection() const
Definition: access_path.h:664
 
Mem_root_array< Item_values_column * > * output_refs
Definition: access_path.h:1139
 
auto & index_range_scan()
Definition: access_path.h:644
 
double num_output_rows() const
Definition: access_path.h:917
 
double num_output_rows_before_filter
If no filter, identical to num_output_rows.
Definition: access_path.h:446
 
size_t signature
Signature used to uniquely identify the access path.
Definition: access_path.h:545
 
const auto & ref_or_null() const
Definition: access_path.h:592
 
struct AccessPath::@67::@95 nested_loop_join
 
Filesort * filesort
Definition: access_path.h:1222
 
struct AccessPath::@67::@105 append
 
bool store_rowids
Definition: access_path.h:1167
 
const auto & nested_loop_semijoin_with_duplicate_removal() const
Definition: access_path.h:776
 
Definition: access_path.h:190
 
JOIN * join
Definition: access_path.h:192
 
AccessPath * path
Definition: access_path.h:191
 
Definition: group_index_skip_scan_plan.h:45
 
Logically a part of AccessPath::index_skip_scan(), but is too large, so split out into its own struct...
Definition: index_skip_scan_plan.h:73
 
Structure used for index-based lookups.
Definition: sql_opt_exec_shared.h:67
 
A struct containing a join hypergraph of a single query block, encapsulating the constraints given by...
Definition: make_join_hypergraph.h:98
 
A specification that two specific relational expressions (e.g., two tables, or a table and a join bet...
Definition: access_path.h:80
 
FunctionalDependencySet functional_dependencies
Definition: access_path.h:97
 
Mem_root_array< int > functional_dependencies_idx
Definition: access_path.h:102
 
RelationalExpression * expr
Definition: access_path.h:81
 
double selectivity
Definition: access_path.h:82
 
int ordering_idx_needed_for_semijoin_rewrite
Definition: access_path.h:120
 
std::span< Item * > semijoin_group
Definition: access_path.h:125
 
size_t estimated_bytes_per_row
Definition: access_path.h:86
 
Definition: range_optimizer.h:55
 
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
 
Definition: materialize_path_parameters.h:42
 
AccessPath * subquery_path
Definition: materialize_path_parameters.h:43
 
int select_number
Definition: materialize_path_parameters.h:44
 
JOIN * join
Definition: materialize_path_parameters.h:45
 
bool copy_items
Definition: materialize_path_parameters.h:47
 
Temp_table_param * temp_table_param
Definition: materialize_path_parameters.h:48
 
bool disable_deduplication_by_hash_field
Definition: materialize_path_parameters.h:46
 
Definition: materialize_path_parameters.h:40
 
bool rematerialize
True if rematerializing on every Init() call (e.g., because we have a dependency on a value from outs...
Definition: materialize_path_parameters.h:80
 
DedupType deduplication_reason
Definition: materialize_path_parameters.h:111
 
Mem_root_array< Operand > m_operands
Definition: materialize_path_parameters.h:58
 
Common_table_expr * cte
If materializing a CTE, points to it (see m_cte), otherwise nullptr.
Definition: materialize_path_parameters.h:65
 
DedupType
The context for which deduplication is being used.
Definition: materialize_path_parameters.h:106
 
@ NO_DEDUP
Definition: materialize_path_parameters.h:109
 
bool reject_multiple_rows
True if this is the top level iterator for a materialized derived table transformed from a scalar sub...
Definition: materialize_path_parameters.h:99
 
ha_rows limit_rows
Used for when pushing LIMIT down to MaterializeIterator; this is more efficient than having a LimitOf...
Definition: materialize_path_parameters.h:92
 
TABLE * table
Handle to table to materialize into.
Definition: materialize_path_parameters.h:62
 
int ref_slice
Definition: materialize_path_parameters.h:74
 
Query_expression * unit
The query expression we are materializing.
Definition: materialize_path_parameters.h:68
 
Mem_root_array< const AccessPath * > * invalidators
Definition: materialize_path_parameters.h:59
 
A position of table within a join order.
Definition: sql_select.h:355
 
A filter of some sort that is not a join condition (those are stored in JoinPredicate objects).
Definition: access_path.h:133
 
hypergraph::NodeMap total_eligibility_set
Definition: access_path.h:146
 
bool was_join_condition
Definition: access_path.h:159
 
Mem_root_array< int > functional_dependencies_idx
Definition: access_path.h:182
 
bool possibly_null_complemented_later
Definition: access_path.h:170
 
FunctionalDependencySet functional_dependencies
Definition: access_path.h:181
 
int source_multiple_equality_idx
Definition: access_path.h:178
 
hypergraph::NodeMap used_nodes
Definition: access_path.h:137
 
Item * condition
Definition: access_path.h:134
 
double selectivity
Definition: access_path.h:148
 
Mem_root_array< ContainedSubquery > contained_subqueries
Definition: access_path.h:187
 
Represents an expression tree in the relational algebra of joins.
Definition: relational_expression.h:155
 
Type for signature generation and for retrieving nrows estimate from secondary engine for current Acc...
Definition: handler.h:2477
 
tablesample_type
Definition: tablesample.h:27