@@ -307,13 +307,50 @@ 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+ requires (T::delayed == true )
340+ bool prepareDelayedOutput (ProcessingContext& context, T& defines)
341+ {
342+ if (defines.needRecompilation ) {
343+ defines.recompile ();
344+ }
345+ using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t ::ref.desc_hash >>::metadata;
346+ auto originalTable = soa::ArrowHelpers::joinTables (extractOriginals<metadata::sources.size (), metadata::sources>(context), std::span{metadata::base_table_t ::originalLabels});
347+ if (originalTable->schema ()->fields ().empty () == true ) {
348+ using base_table_t = typename T::base_table_t ::table_t ;
349+ originalTable = makeEmptyTable<base_table_t >(o2::aod::label<metadata::extension_table_t ::ref>());
350+ }
351+ if (defines.inputSchema == nullptr ) {
352+ defines.inputSchema = originalTable->schema ();
353+ }
317354 using D = o2::aod::Hash<metadata::extension_table_t ::ref.desc_hash >;
318355
319356 defines.extension = std::make_shared<typename T::extension_t >(o2::framework::spawner<D>(originalTable,
0 commit comments