@@ -799,13 +799,31 @@ std::size_t SpnEstimator::predict_cardinality(const DataModel &_data) const
799
799
800
800
void SpnEstimator::print (std::ostream&) const { }
801
801
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
+
802
818
__attribute__ ((constructor(202 )))
803
819
static void register_cardinality_estimators()
804
820
{
805
821
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
809
827
810
828
C.arg_parser ().add <bool >(
811
829
/* group= */ " Cardinality estimation" ,
0 commit comments