13#include "common/lang/bitset.h"
14#include "common/log/log.h"
15#include "common/lang/unordered_map.h"
16#include "sql/operator/operator_node.h"
17#include "sql/optimizer/cascade/rules.h"
18#include "sql/optimizer/cascade/property_set.h"
32 : group_id_(-1), contents_(contents), child_groups_(child_groups)
37 int get_group_id()
const {
return group_id_; }
39 void set_group_id(
int id) { group_id_ = id; }
41 const vector<int> &get_child_group_ids()
const {
return child_groups_; }
43 int get_child_group_id(
int child_idx)
const
45 ASSERT(child_idx >= 0 &&
static_cast<size_t>(child_idx) < child_groups_.size(),
46 "child_idx is out of bounds");
47 return child_groups_[child_idx];
52 double get_cost()
const {
return lowest_cost_; }
54 void set_local_cost(
double cost)
56 if (cost < lowest_cost_) {
62 uint64_t hash()
const;
66 return (*contents_ == *(r.contents_)) && (child_groups_ == r.child_groups_);
69 void set_rule_explored(
Rule *rule) { rule_mask_.set(rule->
get_rule_idx(),
true); }
71 bool rule_explored(
Rule *rule) {
return rule_mask_.test(rule->
get_rule_idx()); }
73 size_t get_children_groups_size()
const {
return child_groups_.size(); }
82 std::vector<int> child_groups_;
84 std::bitset<static_cast<uint32_t>(RuleType::NUM_RULES)> rule_mask_;
86 double lowest_cost_ = std::numeric_limits<double>::max();
Definition: group_expr.h:25
GroupExpr(OperatorNode *contents, std::vector< int > &&child_groups)
Definition: group_expr.h:31
Definition: operator_node.h:69
uint32_t get_rule_idx()
Definition: rules.h:107