2626#include " Framework/Traits.h"
2727
2828#include < string>
29+ namespace o2 ::framework {
30+ std::string serializeProjectors (std::vector<framework::expressions::Projector>& projectors);
31+ }
32+
2933namespace o2 ::soa
3034{
3135template <TableRef R>
@@ -38,8 +42,6 @@ constexpr auto tableRef2ConfigParamSpec()
3842 {" \"\" " }};
3943}
4044
41- std::string serializeProjectors (std::vector<framework::expressions::Projector>& projectors);
42-
4345namespace
4446{
4547template <soa::with_sources T>
@@ -101,20 +103,23 @@ constexpr auto getCCDBMetadata() -> std::vector<framework::ConfigParamSpec>
101103}
102104
103105template <soa::with_expression_pack T>
104- constexpr auto getExpressionMetadata () -> std::optional <framework::ConfigParamSpec>
106+ constexpr auto getExpressionMetadata () -> std::vector <framework::ConfigParamSpec>
105107{
106108 using expression_pack_t = T::expression_pack_t ;
107109
108110 auto projectors = []<typename ... C>(framework::pack<C...>) -> std::vector<framework::expressions::Projector> {
109- return {C::Projector ()...};
111+ std::vector<framework::expressions::Projector> result;
112+ (result.emplace_back (std::move (C::Projector ())), ...);
113+ return result;
110114 }(expression_pack_t {});
111115
112- auto json = serializeProjectors (projectors);
113- return framework::ConfigParamSpec{" projectors" , framework::VariantType::String, json, {" \"\" " }};
116+ auto json = framework:: serializeProjectors (projectors);
117+ return { framework::ConfigParamSpec{" projectors" , framework::VariantType::String, json, {" \"\" " } }};
114118}
115119
116120template <typename T>
117- constexpr auto getExpressionMetadata () -> std::optional<framework::ConfigParamSpec>
121+ requires (!soa::with_expression_pack<T>)
122+ constexpr auto getExpressionMetadata () -> std::vector<framework::ConfigParamSpec>
118123{
119124 return {};
120125}
@@ -130,9 +135,7 @@ constexpr auto tableRef2InputSpec()
130135 auto ccdbMetadata = getCCDBMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash >>::metadata>();
131136 metadata.insert (metadata.end (), ccdbMetadata.begin (), ccdbMetadata.end ());
132137 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- }
138+ metadata.insert (metadata.end (), p.begin (), p.end ());
136139
137140 return framework::InputSpec{
138141 o2::aod::label<R>(),
0 commit comments