@@ -38,6 +38,8 @@ constexpr auto tableRef2ConfigParamSpec()
3838 {" \"\" " }};
3939}
4040
41+ std::string serializeProjectors (std::vector<framework::expressions::Projector>& projectors);
42+
4143namespace
4244{
4345template <soa::with_sources T>
@@ -97,6 +99,26 @@ constexpr auto getCCDBMetadata() -> std::vector<framework::ConfigParamSpec>
9799{
98100 return {};
99101}
102+
103+ template <soa::with_expression_pack T>
104+ constexpr auto getExpressionMetadata () -> std::optional<framework::ConfigParamSpec>
105+ {
106+ using expression_pack_t = T::expression_pack_t ;
107+
108+ auto projectors = []<typename ... C>(framework::pack<C...>) -> std::vector<framework::expressions::Projector> {
109+ return {C::Projector ()...};
110+ }(expression_pack_t {});
111+
112+ auto json = serializeProjectors (projectors);
113+ return framework::ConfigParamSpec{" projectors" , framework::VariantType::String, json, {" \"\" " }};
114+ }
115+
116+ template <typename T>
117+ constexpr auto getExpressionMetadata () -> std::optional<framework::ConfigParamSpec>
118+ {
119+ return {};
120+ }
121+
100122} // namespace
101123
102124template <TableRef R>
@@ -107,6 +129,10 @@ constexpr auto tableRef2InputSpec()
107129 metadata.insert (metadata.end (), m.begin (), m.end ());
108130 auto ccdbMetadata = getCCDBMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash >>::metadata>();
109131 metadata.insert (metadata.end (), ccdbMetadata.begin (), ccdbMetadata.end ());
132+ auto p = getExpressionMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash >>::metadata>();
133+ if (p) {
134+ metadata.insert (metadata.end (), p.value ());
135+ }
110136
111137 return framework::InputSpec{
112138 o2::aod::label<R>(),
0 commit comments