mutable
A Database System for Research and Fast Prototyping
Loading...
Searching...
No Matches
CostFunction.hpp
Go to the documentation of this file.
1#pragma once
2
5
6
7namespace m {
8
9namespace ast {
10
11struct Expr;
12
13}
14
15namespace cnf { struct CNF; }
16struct CardinalityEstimator;
17struct FilterOperator;
18struct GroupingOperator;
19struct JoinOperator;
20struct PlanTableLargeAndSparse;
21struct PlanTableSmallOrDense;
22struct QueryGraph;
23
24struct calculate_filter_cost_tag : const_virtual_crtp_helper<calculate_filter_cost_tag>::
25 returns<double>::
26 crtp_args<const PlanTableSmallOrDense&, const PlanTableLargeAndSparse&>::
27 args<const QueryGraph&, const CardinalityEstimator&, SmallBitset, const cnf::CNF&> { };
28struct calculate_join_cost_tag : const_virtual_crtp_helper<calculate_join_cost_tag>::
29 returns<double>::
30 crtp_args<const PlanTableSmallOrDense&, const PlanTableLargeAndSparse&>::
31 args<const QueryGraph&, const CardinalityEstimator&, SmallBitset, SmallBitset, const cnf::CNF&> { };
32struct calculate_grouping_cost_tag : const_virtual_crtp_helper<calculate_grouping_cost_tag>::
33 returns<double>::
34 crtp_args<const PlanTableSmallOrDense&, const PlanTableLargeAndSparse&>::
35 args<const QueryGraph&, const CardinalityEstimator&, SmallBitset, const std::vector<const ast::Expr*>&> { };
36
37struct CostFunction : calculate_filter_cost_tag::base_type
38 , calculate_join_cost_tag::base_type
39 , calculate_grouping_cost_tag::base_type
40{
42
43 public:
45 virtual ~CostFunction() = default;
46
47 using calculate_filter_cost_tag::base_type::operator();
48 using calculate_join_cost_tag::base_type::operator();
49 using calculate_grouping_cost_tag::base_type::operator();
50
52 template<typename PlanTable>
53 double calculate_filter_cost(const QueryGraph &G, const PlanTable &PT, const CardinalityEstimator &CE,
54 Subproblem sub, const cnf::CNF &condition) const
55 {
56 return operator()(calculate_filter_cost_tag{}, PT, G, CE, sub, condition);
57 }
58
60 template<typename PlanTable>
61 double calculate_join_cost(const QueryGraph &G, const PlanTable &PT, const CardinalityEstimator &CE,
62 Subproblem left, Subproblem right, const cnf::CNF &condition) const
63 {
64 return operator()(calculate_join_cost_tag{}, PT, G, CE, left, right, condition);
65 }
66
67
69 template<typename PlanTable>
70 double calculate_grouping_cost(const QueryGraph &G, const PlanTable &PT, const CardinalityEstimator &CE,
71 Subproblem sub, const std::vector<const ast::Expr*> &group_by) const
72 {
73 return operator()(calculate_grouping_cost_tag{}, PT, G, CE, sub, group_by);
74 }
75};
76
77template<typename Actual>
79 , calculate_filter_cost_tag::derived_type<Actual>
80 , calculate_join_cost_tag::derived_type<Actual>
81 , calculate_grouping_cost_tag::derived_type<Actual>
82{ };
83
84}
struct @5 args
const Expr
Definition: AST.hpp:437
‍mutable namespace
Definition: Backend.hpp:10
double calculate_join_cost(const QueryGraph &G, const PlanTable &PT, const CardinalityEstimator &CE, Subproblem left, Subproblem right, const cnf::CNF &condition) const
Returns the total cost of performing a Join operation.
double calculate_filter_cost(const QueryGraph &G, const PlanTable &PT, const CardinalityEstimator &CE, Subproblem sub, const cnf::CNF &condition) const
Returns the total cost of performing a Filter operation.
virtual ~CostFunction()=default
double calculate_grouping_cost(const QueryGraph &G, const PlanTable &PT, const CardinalityEstimator &CE, Subproblem sub, const std::vector< const ast::Expr * > &group_by) const
Returns the total cost of performing a Grouping operation.
The query graph represents all data sources and joins in a graph structure.
Definition: QueryGraph.hpp:172
Implements a small and efficient set over integers in the range of 0 to 63 (including).
Definition: ADT.hpp:26
A helper class to introduce a virtual method overload per type to a class hierarchy.
Definition: crtp.hpp:93
A CNF represents a conjunction of cnf::Clauses.
Definition: CNF.hpp:134