@@ -307,13 +307,49 @@ bool prepareOutput(ProcessingContext& context, T& builds)
307307
308308template <is_defines T>
309309bool prepareOutput (ProcessingContext& context, T& defines)
310+ requires(T::delayed == false )
310311{
311312 using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t ::ref.desc_hash >>::metadata;
312313 auto originalTable = soa::ArrowHelpers::joinTables (extractOriginals<metadata::sources.size (), metadata::sources>(context), std::span{metadata::base_table_t ::originalLabels});
313314 if (originalTable->schema ()->fields ().empty () == true ) {
314315 using base_table_t = typename T::base_table_t ::table_t ;
315316 originalTable = makeEmptyTable<base_table_t >(o2::aod::label<metadata::extension_table_t ::ref>());
316317 }
318+ if (defines.inputSchema == nullptr ) {
319+ defines.inputSchema = originalTable->schema ();
320+ }
321+ using D = o2::aod::Hash<metadata::extension_table_t ::ref.desc_hash >;
322+
323+ defines.extension = std::make_shared<typename T::extension_t >(o2::framework::spawner<D>(originalTable,
324+ o2::aod::label<metadata::extension_table_t ::ref>(),
325+ defines.projectors .data (),
326+ defines.projector ,
327+ defines.schema ));
328+ defines.table = std::make_shared<typename T::spawnable_t ::table_t >(soa::ArrowHelpers::joinTables ({defines.extension ->asArrowTable (), originalTable}, std::span{T::spawnable_t ::table_t ::originalLabels}));
329+ return true ;
330+ }
331+
332+ template <typename T>
333+ bool prepareDelayedOutput (ProcessingContext&, T&)
334+ {
335+ return false ;
336+ }
337+
338+ template <is_defines T>
339+ bool prepareDelayedOutput (ProcessingContext& context, T& defines)
340+ {
341+ if (defines.needRecompilation ) {
342+ defines.recompile ();
343+ }
344+ using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t ::ref.desc_hash >>::metadata;
345+ auto originalTable = soa::ArrowHelpers::joinTables (extractOriginals<metadata::sources.size (), metadata::sources>(context), std::span{metadata::base_table_t ::originalLabels});
346+ if (originalTable->schema ()->fields ().empty () == true ) {
347+ using base_table_t = typename T::base_table_t ::table_t ;
348+ originalTable = makeEmptyTable<base_table_t >(o2::aod::label<metadata::extension_table_t ::ref>());
349+ }
350+ if (defines.inputSchema == nullptr ) {
351+ defines.inputSchema = originalTable->schema ();
352+ }
317353 using D = o2::aod::Hash<metadata::extension_table_t ::ref.desc_hash >;
318354
319355 defines.extension = std::make_shared<typename T::extension_t >(o2::framework::spawner<D>(originalTable,
0 commit comments