mutable
A Database System for Research and Fast Prototyping
Loading...
Searching...
No Matches
CostFunctionCout.hpp
Go to the documentation of this file.
1#pragma once
2
6
7
8namespace m {
9
14struct CostFunctionCout : CostFunctionCRTP<CostFunctionCout>
15{
16 template<typename PlanTable>
17 double operator()(calculate_filter_cost_tag, const PlanTable &PT, const QueryGraph &G,
18 const CardinalityEstimator &CE, Subproblem sub, const cnf::CNF &condition) const
19 {
20 return double(CE.predict_cardinality(*PT[sub].model)) + PT[sub].cost;
21 }
22
23 template<typename PlanTable>
24 double operator()(calculate_join_cost_tag, const PlanTable &PT, const QueryGraph &G, const CardinalityEstimator &CE,
25 Subproblem left, Subproblem right, const cnf::CNF &condition) const
26 {
27 return /* |T| = */ double(CE.predict_cardinality(*PT[left|right].model)) +
28 /* C_out(T_1) = */ PT[left].cost +
29 /* C_out(T_2) = */ PT[right].cost;
30 }
31
32 template<typename PlanTable>
33 double operator()(calculate_grouping_cost_tag, const PlanTable &PT, const QueryGraph &G,
34 const CardinalityEstimator &CE, Subproblem sub,
35 const std::vector<const ast::Expr*> &group_by) const
36 {
37 return double(CE.predict_cardinality(*PT[sub].model)) + PT[sub].cost;
38 }
39};
40
41}
‍mutable namespace
Definition: Backend.hpp:10
virtual std::size_t predict_cardinality(const DataModel &data) const =0
Implements the cassical, widely used cost function C_out from Sophie Cluet and Guido Moerkotte.
double operator()(calculate_join_cost_tag, const PlanTable &PT, const QueryGraph &G, const CardinalityEstimator &CE, Subproblem left, Subproblem right, const cnf::CNF &condition) const
double operator()(calculate_grouping_cost_tag, const PlanTable &PT, const QueryGraph &G, const CardinalityEstimator &CE, Subproblem sub, const std::vector< const ast::Expr * > &group_by) const
double operator()(calculate_filter_cost_tag, const PlanTable &PT, const QueryGraph &G, const CardinalityEstimator &CE, Subproblem sub, const cnf::CNF &condition) const
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 CNF represents a conjunction of cnf::Clauses.
Definition: CNF.hpp:134