13#include "common/lang/unordered_map.h"
14#include "sql/optimizer/cascade/optimizer_context.h"
15#include "sql/optimizer/cascade/pattern.h"
20enum class RuleType : uint32_t
26 LogicalPhysicalDelimiter,
34 AGGREGATE_TO_PHYSICAL,
35 INNER_JOIN_TO_NL_JOIN,
36 INNER_JOIN_TO_HASH_JOIN,
38 PROJECTION_TO_PHYSOCAL,
42 PREDICATE_TO_PHYSICAL,
43 GROUP_BY_TO_PHYSICAL_AGGREGATION,
44 GROUP_BY_TO_PHYSICL_HASH_GROUP_BY,
52enum class RuleSetName : uint32_t
55 PHYSICAL_IMPLEMENTATION
62enum class RulePromise : uint32_t
92 bool is_physical()
const {
return type_ > RuleType::LogicalPhysicalDelimiter; }
97 bool is_logical()
const {
return type_ < RuleType::LogicalPhysicalDelimiter; }
118 return RulePromise::PHYSICAL_PROMISE;
119 return RulePromise::LOGICAL_PROMISE;
134 unique_ptr<Pattern> match_pattern_;
174 for (
auto rule : it.second) {
195 std::unordered_map<uint32_t, std::vector<Rule *>>
rules_map_;
Definition: group_expr.h:25
Definition: operator_node.h:69
Definition: optimizer_context.h:27
std::vector< Rule * > & get_rules_by_name(RuleSetName set)
Definition: rules.h:188
void add_rule(RuleSetName set, Rule *rule)
Definition: rules.h:183
std::unordered_map< uint32_t, std::vector< Rule * > > rules_map_
Definition: rules.h:195
Rule * rule_
Definition: rules.h:158
RulePromise get_promise()
Definition: rules.h:148
RulePromise promise_
Definition: rules.h:163
uint32_t get_rule_idx()
Definition: rules.h:107
bool is_logical() const
Definition: rules.h:97
virtual void transform(OperatorNode *input, std::vector< std::unique_ptr< OperatorNode > > *transformed, OptimizerContext *context) const =0
bool is_physical() const
Definition: rules.h:92
RuleType get_type()
Definition: rules.h:102
virtual RulePromise promise(GroupExpr *group_expr) const
Definition: rules.h:115
Pattern * get_match_pattern() const
Definition: rules.h:87