23#ifndef SQL_JOIN_OPTIMIZER_GRAPH_SIMPLIFICATION_H_
24#define SQL_JOIN_OPTIMIZER_GRAPH_SIMPLIFICATION_H_
134 assert(
m_done_steps.size() <
size_t{std::numeric_limits<int>::max()});
140 assert(
m_undone_steps.size() <
size_t{std::numeric_limits<int>::max()});
292 (*cache)->index_in_pq = index;
297 std::vector<NeighborCache *, Mem_root_allocator<NeighborCache *>>,
298 CompareByBenefit, MarkNeighborCache>
A wrapper class which provides array bounds checking.
Definition: sql_array.h:46
Definition: graph_simplification.h:86
ALWAYS_INLINE bool EdgesAreNeighboring(size_t edge1_idx, size_t edge2_idx, ProposedSimplificationStep *step)
Definition: graph_simplification.cc:635
Bounds_checked_array< NeighborCache > m_cache
Definition: graph_simplification.h:280
Bounds_checked_array< EdgeCardinalities > m_edge_cardinalities
Definition: graph_simplification.h:226
void RecalculateNeighbors(size_t edge1_idx, size_t begin, size_t end)
Definition: graph_simplification.cc:584
SimplificationStep ConcretizeSimplificationStep(GraphSimplifier::ProposedSimplificationStep step)
Definition: graph_simplification.cc:757
JoinHypergraph * m_graph
Definition: graph_simplification.h:229
SimplificationResult
Definition: graph_simplification.h:93
@ APPLIED_REDO_STEP
Definition: graph_simplification.h:111
@ NO_SIMPLIFICATION_POSSIBLE
Definition: graph_simplification.h:95
@ APPLIED_SIMPLIFICATION
Definition: graph_simplification.h:99
@ APPLIED_NOOP
Definition: graph_simplification.h:106
void UndoSimplificationStep()
Definition: graph_simplification.cc:886
SimplificationResult DoSimplificationStep()
Definition: graph_simplification.cc:812
Mem_root_array< SimplificationStep > m_undone_steps
Definition: graph_simplification.h:211
void UpdatePQ(size_t edge_idx)
Definition: graph_simplification.cc:564
int num_steps_done() const
Definition: graph_simplification.h:133
int num_steps_undone() const
Definition: graph_simplification.h:139
Priority_queue< NeighborCache *, std::vector< NeighborCache *, Mem_root_allocator< NeighborCache * > >, CompareByBenefit, MarkNeighborCache > m_pq
Definition: graph_simplification.h:299
OnlineCycleFinder m_cycles
Definition: graph_simplification.h:234
Mem_root_array< SimplificationStep > m_done_steps
Definition: graph_simplification.h:205
GraphSimplifier(JoinHypergraph *graph, MEM_ROOT *mem_root)
Definition: graph_simplification.cc:540
Mem_root_allocator is a C++ STL memory allocator based on MEM_ROOT.
Definition: mem_root_allocator.h:67
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:425
A fast online cycle finder, based on [Pea03].
Definition: online_cycle_finder.h:53
Implements a priority queue using a vector-based max-heap.
Definition: priority_queue.h:103
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
void SimplifyQueryGraph(THD *thd, int subgraph_pair_limit, JoinHypergraph *graph, GraphSimplifier *simplifier, std::string *trace)
void SetNumberOfSimplifications(int num_simplifications, GraphSimplifier *simplifier)
Definition: graph_simplification.cc:899
Definition of an undirected (join) hypergraph.
Header for compiler-dependent features.
#define ALWAYS_INLINE
Definition: my_compiler.h:98
void * begin(THD *thd, const TABLE *table, size_t data_size, size_t memory, size_t num_threads) noexcept
Definition: bulk_data_service.cc:1533
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:191
Definition: graph_simplification.h:285
bool operator()(const NeighborCache *a, const NeighborCache *b) const
Definition: graph_simplification.h:286
Definition: graph_simplification.h:222
double left
Definition: graph_simplification.h:223
double right
Definition: graph_simplification.h:224
Definition: graph_simplification.h:290
void operator()(size_t index, NeighborCache **cache)
Definition: graph_simplification.h:291
Definition: graph_simplification.h:262
int best_neighbor
Definition: graph_simplification.h:269
ProposedSimplificationStep best_step
Definition: graph_simplification.h:270
int index_in_pq
Definition: graph_simplification.h:278
Definition: graph_simplification.h:176
int before_edge_idx
Definition: graph_simplification.h:178
int after_edge_idx
Definition: graph_simplification.h:179
double benefit
Definition: graph_simplification.h:177
Definition: graph_simplification.h:188
int after_edge_idx
Definition: graph_simplification.h:190
int before_edge_idx
Definition: graph_simplification.h:189
hypergraph::Hyperedge new_edge
Definition: graph_simplification.h:194
hypergraph::Hyperedge old_edge
Definition: graph_simplification.h:193
A struct containing a join hypergraph of a single query block, encapsulating the constraints given by...
Definition: make_join_hypergraph.h:77
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:82
Definition: hypergraph.h:79