@@ -229,11 +229,18 @@ struct TableTransform {
229229// / This helper struct allows you to declare extended tables which should be
230230// / created by the task (as opposed to those pre-defined by data model)
231231template <typename T>
232- concept is_spawnable = soa::is_table<T> && soa::has_metadata<aod::MetadataTrait<T>>;
232+ concept is_spawnable = soa::is_table<T> && soa::has_metadata<aod::MetadataTrait<T>> && !soa::is_index_table<T> ;
233233
234234template <is_spawnable T>
235- struct Spawns : TableTransform<typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata, T::ref> {
236- using metadata = TableTransform<typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata, T::ref>::metadata;
235+ constexpr auto transformBase ()
236+ {
237+ using metadata = typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash >>::metadata;
238+ return TableTransform<metadata, metadata::extension_table_t ::ref>{};
239+ }
240+
241+ template <is_spawnable T>
242+ struct Spawns : decltype (transformBase<T>()) {
243+ using metadata = decltype (transformBase<T>())::metadata;
237244 using extension_t = typename metadata::extension_table_t ;
238245 using base_table_t = typename metadata::base_table_t ;
239246 using expression_pack_t = typename metadata::expression_pack_t ;
@@ -393,9 +400,17 @@ struct IndexBuilder {
393400};
394401
395402// / This helper struct allows you to declare index tables to be created in a task
403+
404+ template <soa::is_index_table T>
405+ constexpr auto transformBase ()
406+ {
407+ using metadata = typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash >>::metadata;
408+ return TableTransform<metadata, T::ref>{};
409+ }
410+
396411template <soa::is_index_table T>
397- struct Builds : TableTransform< typename aod::MetadataTrait<aod::Hash<T::ref.desc_hash>>::metadata, T::ref> {
398- using metadata = TableTransform< typename aod::MetadataTrait<aod::Hash<T::ref.desc_hash>>::metadata, T::ref> ::metadata;
412+ struct Builds : decltype (transformBase<T>()) {
413+ using metadata = decltype (transformBase<T>()) ::metadata;
399414 using IP = std::conditional_t <metadata::exclusive, IndexBuilder<Exclusive>, IndexBuilder<Sparse>>;
400415 using Key = metadata::Key;
401416 using H = typename T::first_t ;
0 commit comments