24#ifndef SQL_JOIN_OPTIMIZER_TRIVIAL_RECEIVER_H_
25#define SQL_JOIN_OPTIMIZER_TRIVIAL_RECEIVER_H_
48 int subgraph_pair_limit)
64 int edge_idx [[maybe_unused]]) {
76 assert((left & right) == 0);
constexpr uint64_t TableBitmap(unsigned x)
Definition: bit_utils.h:178
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:45
int seen_subgraph_pairs
Definition: trivial_receiver.h:82
bool HasSeen(hypergraph::NodeMap subgraph) const
Definition: trivial_receiver.h:53
TrivialReceiver(const JoinHypergraph &graph, MEM_ROOT *mem_root, int subgraph_pair_limit)
Definition: trivial_receiver.h:47
const JoinHypergraph * m_graph
Definition: trivial_receiver.h:86
const int m_subgraph_pair_limit
Definition: trivial_receiver.h:87
mem_root_unordered_set< hypergraph::NodeMap > m_seen_subgraphs
Definition: trivial_receiver.h:85
int seen_nodes
Definition: trivial_receiver.h:81
bool FoundSubgraphPair(hypergraph::NodeMap left, hypergraph::NodeMap right, int edge_idx)
Definition: trivial_receiver.h:63
bool FoundSingleNode(int node_idx)
Definition: trivial_receiver.h:56
std::unordered_set, but allocated on a MEM_ROOT.
Definition: map_helpers.h:270
static MEM_ROOT mem_root
Definition: client_plugin.cc:114
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:40
bool PassesConflictRules(hypergraph::NodeMap joined_tables, const RelationalExpression *expr)
Definition: relational_expression.h:262
A struct containing a join hypergraph of a single query block, encapsulating the constraints given by...
Definition: make_join_hypergraph.h:88
Mem_root_array< JoinPredicate > edges
Definition: make_join_hypergraph.h:191
A specification that two specific relational expressions (e.g., two tables, or a table and a join bet...
Definition: access_path.h:78
RelationalExpression * expr
Definition: access_path.h:79
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83