Skip to content

Commit a56dfc0

Browse files
[Catalog] Fix template instantiation of CEs.
Fix template instantiation of cardinality estimators by manually instantiating the templated method for both types of plan tables.
1 parent a79db43 commit a56dfc0

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

src/catalog/CardinalityEstimator.cpp

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -799,13 +799,31 @@ std::size_t SpnEstimator::predict_cardinality(const DataModel &_data) const
799799

800800
void SpnEstimator::print(std::ostream&) const { }
801801

802+
803+
#define LIST_CE(X) \
804+
X(CartesianProductEstimator, "CartesianProduct", "estimates cardinalities as Cartesian product") \
805+
X(InjectionCardinalityEstimator, "Injected", "estimates cardinalities based on a JSON file") \
806+
X(SpnEstimator, "Spn", "estimates cardinalities based on Sum-Product Networks")
807+
808+
#define INSTANTIATE(TYPE, _1, _2) \
809+
template std::unique_ptr<DataModel> TYPE::operator()(estimate_join_all_tag, PlanTableSmallOrDense &&PT, \
810+
const QueryGraph &G, Subproblem to_join, \
811+
const cnf::CNF &condition) const; \
812+
template std::unique_ptr<DataModel> TYPE::operator()(estimate_join_all_tag, PlanTableLargeAndSparse &&PT, \
813+
const QueryGraph &G, Subproblem to_join, \
814+
const cnf::CNF &condition) const;
815+
LIST_CE(INSTANTIATE)
816+
#undef INSTANTIATE
817+
802818
__attribute__((constructor(202)))
803819
static void register_cardinality_estimators()
804820
{
805821
Catalog &C = Catalog::Get();
806-
C.register_cardinality_estimator<CartesianProductEstimator>("CartesianProduct", "estimates cardinalities as Cartesian product");
807-
C.register_cardinality_estimator<InjectionCardinalityEstimator>("Injected", "estimates cardinalities based on a JSON file");
808-
C.register_cardinality_estimator<SpnEstimator>("Spn", "estimates cardinalities based on Sum-Product Networks");
822+
823+
#define REGISTER(TYPE, NAME, DESCRIPTION) \
824+
C.register_cardinality_estimator<TYPE>(NAME, DESCRIPTION);
825+
LIST_CE(REGISTER)
826+
#undef REGISTER
809827

810828
C.arg_parser().add<bool>(
811829
/* group= */ "Cardinality estimation",

0 commit comments

Comments
 (0)