23#ifndef SQL_JOIN_OPTIMIZER_TRIVIAL_RECEIVER_H_
24#define SQL_JOIN_OPTIMIZER_TRIVIAL_RECEIVER_H_
47 int subgraph_pair_limit)
63 int edge_idx [[maybe_unused]]) {
75 assert((left & right) == 0);
constexpr uint64_t TableBitmap(unsigned x)
Definition: bit_utils.h:185
A very simple receiver to be used with DPhyp; all it does is to keep track of which subgraphs it has ...
Definition: trivial_receiver.h:44
int seen_subgraph_pairs
Definition: trivial_receiver.h:81
bool HasSeen(hypergraph::NodeMap subgraph) const
Definition: trivial_receiver.h:52
TrivialReceiver(const JoinHypergraph &graph, MEM_ROOT *mem_root, int subgraph_pair_limit)
Definition: trivial_receiver.h:46
const JoinHypergraph * m_graph
Definition: trivial_receiver.h:85
const int m_subgraph_pair_limit
Definition: trivial_receiver.h:86
mem_root_unordered_set< hypergraph::NodeMap > m_seen_subgraphs
Definition: trivial_receiver.h:84
int seen_nodes
Definition: trivial_receiver.h:80
bool FoundSubgraphPair(hypergraph::NodeMap left, hypergraph::NodeMap right, int edge_idx)
Definition: trivial_receiver.h:62
bool FoundSingleNode(int node_idx)
Definition: trivial_receiver.h:55
std::unordered_set, but allocated on a MEM_ROOT.
Definition: map_helpers.h:260
static MEM_ROOT mem_root
Definition: client_plugin.cc:113
Definition of an undirected (join) hypergraph.
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
bool PassesConflictRules(hypergraph::NodeMap joined_tables, const RelationalExpression *expr)
Definition: relational_expression.h:236
A struct containing a join hypergraph of a single query block, encapsulating the constraints given by...
Definition: make_join_hypergraph.h:77
Mem_root_array< JoinPredicate > edges
Definition: make_join_hypergraph.h:127
A specification that two specific relational expressions (e.g., two tables, or a table and a join bet...
Definition: access_path.h:76
RelationalExpression * expr
Definition: access_path.h:77
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:82