@@ -768,80 +768,51 @@ std::shared_ptr<arrow::Table> spawnerHelper(std::shared_ptr<arrow::Table> const&
768768// / Expression-based column generator to materialize columns
769769template <aod::is_aod_hash D>
770770 requires (soa::has_configurable_extension<typename o2::aod::MetadataTrait<D>::metadata>)
771- auto spawner (std::vector<std:: shared_ptr<arrow::Table>>&& tables , const char * name, o2::framework::expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector)
771+ auto spawner (std::shared_ptr<arrow::Table> const & fullTable , const char * name, o2::framework::expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector, std::shared_ptr<arrow::Schema> const & schema )
772772{
773773 using placeholders_pack_t = typename o2::aod::MetadataTrait<D>::metadata::placeholders_pack_t ;
774- auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables), std::span{o2::aod::MetadataTrait<D>::metadata::base_table_t ::originalLabels});
775774 if (fullTable->num_rows () == 0 ) {
776775 return makeEmptyTable (name, placeholders_pack_t {});
777776 }
778- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (placeholders_pack_t {}));
779-
780- return spawnerHelper (fullTable, new_schema, framework::pack_size (placeholders_pack_t {}), projectors, name, projector);
777+ return spawnerHelper (fullTable, schema, framework::pack_size (placeholders_pack_t {}), projectors, name, projector);
781778}
782779
783780template <aod::is_aod_hash D>
784781 requires (soa::has_configurable_extension<typename o2::aod::MetadataTrait<D>::metadata>)
785- auto spawner (std::shared_ptr<arrow::Table> const & fullTable , const char * name, o2::framework::expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector)
782+ auto spawner (std::vector<std:: shared_ptr<arrow::Table>>&& tables , const char * name, o2::framework::expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector, std::shared_ptr<arrow::Schema> const & schema )
786783{
787- using placeholders_pack_t = typename o2::aod::MetadataTrait<D>::metadata::placeholders_pack_t ;
788- if (fullTable->num_rows () == 0 ) {
789- return makeEmptyTable (name, placeholders_pack_t {});
790- }
791- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (placeholders_pack_t {}));
792-
793- return spawnerHelper (fullTable, new_schema, framework::pack_size (placeholders_pack_t {}), projectors, name, projector);
784+ auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables), std::span{o2::aod::MetadataTrait<D>::metadata::base_table_t ::originalLabels});
785+ return spawner<D>(fullTable, name, projectors, projector, schema);
794786}
795787
796788template <aod::is_aod_hash D>
797789 requires (soa::has_extension<typename o2::aod::MetadataTrait<D>::metadata> && !soa::has_configurable_extension<typename o2::aod::MetadataTrait<D>::metadata>)
798- auto spawner (std::vector<std:: shared_ptr<arrow::Table>>&& tables , const char * name, std::shared_ptr<gandiva::Projector>& projector)
790+ auto spawner (std::shared_ptr<arrow::Table> const & fullTable , const char * name, expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector, std::shared_ptr<arrow::Schema> const & schema )
799791{
800792 using expression_pack_t = typename o2::aod::MetadataTrait<D>::metadata::expression_pack_t ;
801- auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables), std::span{o2::aod::MetadataTrait<D>::metadata::base_table_t ::originalLabels});
802793 if (fullTable->num_rows () == 0 ) {
803794 return makeEmptyTable (name, expression_pack_t {});
804795 }
805- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (expression_pack_t {}));
806-
807- auto projectors = []<typename ... C>(framework::pack<C...>) -> std::array<expressions::Projector, sizeof ...(C)>
808- {
809- return {{std::move (C::Projector ())...}};
810- }
811- (expression_pack_t {});
812-
813- return spawnerHelper (fullTable, new_schema, framework::pack_size (expression_pack_t {}), projectors.data (), name, projector);
796+ return spawnerHelper (fullTable, schema, framework::pack_size (expression_pack_t {}), projectors, name, projector);
814797}
815798
816799template <aod::is_aod_hash D>
817800 requires (soa::has_extension<typename o2::aod::MetadataTrait<D>::metadata> && !soa::has_configurable_extension<typename o2::aod::MetadataTrait<D>::metadata>)
818- auto spawner (std::shared_ptr<arrow::Table> const & fullTable , const char * name, std::shared_ptr<gandiva::Projector>& projector)
801+ auto spawner (std::vector<std:: shared_ptr<arrow::Table>>&& tables , const char * name, expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector, std::shared_ptr<arrow::Schema> const & schema )
819802{
820- using expression_pack_t = typename o2::aod::MetadataTrait<D>::metadata::expression_pack_t ;
821- if (fullTable->num_rows () == 0 ) {
822- return makeEmptyTable (name, expression_pack_t {});
823- }
824- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (expression_pack_t {}));
825- auto projectors = []<typename ... C>(framework::pack<C...>) -> std::array<expressions::Projector, sizeof ...(C)>
826- {
827- return {{std::move (C::Projector ())...}};
828- }
829- (expression_pack_t {});
830-
831- return spawnerHelper (fullTable, new_schema, framework::pack_size (expression_pack_t {}), projectors.data (), name, projector);
803+ auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables), std::span{o2::aod::MetadataTrait<D>::metadata::base_table_t ::originalLabels});
804+ return spawner<D>(fullTable, name, projectors, projector, schema);
832805}
833806
834807template <typename ... C>
835- auto spawner (framework::pack<C...> columns , std::vector<std::shared_ptr<arrow::Table>>&& tables, const char * name, std::shared_ptr<gandiva::Projector>& projector)
808+ auto spawner (framework::pack<C...>, std::vector<std::shared_ptr<arrow::Table>>&& tables, const char * name, expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector, std::shared_ptr<arrow::Schema> const & schema )
836809{
837810 std::array<const char *, 1 > labels{" original" };
838811 auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables), std::span<const char * const >{labels});
839812 if (fullTable->num_rows () == 0 ) {
840813 return makeEmptyTable (name, framework::pack<C...>{});
841814 }
842- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (columns));
843- std::array<expressions::Projector, sizeof ...(C)> projectors{{std::move (C::Projector ())...}};
844- return spawnerHelper (fullTable, new_schema, sizeof ...(C), projectors.data (), name, projector);
815+ return spawnerHelper (fullTable, schema, sizeof ...(C), projectors, name, projector);
845816}
846817
847818template <typename ... T>
0 commit comments