@@ -866,79 +866,50 @@ std::shared_ptr<arrow::Table> spawnerHelper(std::shared_ptr<arrow::Table> const&
866866// / Expression-based column generator to materialize columns
867867template <aod::is_aod_hash D>
868868 requires (soa::has_configurable_extension<typename o2::aod::MetadataTrait<D>::metadata>)
869- auto spawner (std::vector<std:: shared_ptr<arrow::Table>>&& tables , const char * name, o2::framework::expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector)
869+ 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 )
870870{
871871 using placeholders_pack_t = typename o2::aod::MetadataTrait<D>::metadata::placeholders_pack_t ;
872- auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables));
873872 if (fullTable->num_rows () == 0 ) {
874873 return makeEmptyTable (name, placeholders_pack_t {});
875874 }
876- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (placeholders_pack_t {}));
877-
878- return spawnerHelper (fullTable, new_schema, framework::pack_size (placeholders_pack_t {}), projectors, name, projector);
875+ return spawnerHelper (fullTable, schema, framework::pack_size (placeholders_pack_t {}), projectors, name, projector);
879876}
880877
881878template <aod::is_aod_hash D>
882879 requires (soa::has_configurable_extension<typename o2::aod::MetadataTrait<D>::metadata>)
883- auto spawner (std::shared_ptr<arrow::Table> const & fullTable , const char * name, o2::framework::expressions::Projector* projectors, std::shared_ptr<gandiva::Projector>& projector)
880+ 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 )
884881{
885- using placeholders_pack_t = typename o2::aod::MetadataTrait<D>::metadata::placeholders_pack_t ;
886- if (fullTable->num_rows () == 0 ) {
887- return makeEmptyTable (name, placeholders_pack_t {});
888- }
889- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (placeholders_pack_t {}));
890-
891- return spawnerHelper (fullTable, new_schema, framework::pack_size (placeholders_pack_t {}), projectors, name, projector);
882+ auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables));
883+ return spawner<D>(fullTable, name, projectors, projector, schema);
892884}
893885
894886template <aod::is_aod_hash D>
895887 requires (soa::has_extension<typename o2::aod::MetadataTrait<D>::metadata> && !soa::has_configurable_extension<typename o2::aod::MetadataTrait<D>::metadata>)
896- auto spawner (std::vector<std:: shared_ptr<arrow::Table>>&& tables , const char * name, std::shared_ptr<gandiva::Projector>& projector)
888+ 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 )
897889{
898890 using expression_pack_t = typename o2::aod::MetadataTrait<D>::metadata::expression_pack_t ;
899- auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables));
900891 if (fullTable->num_rows () == 0 ) {
901892 return makeEmptyTable (name, expression_pack_t {});
902893 }
903- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (expression_pack_t {}));
904-
905- auto projectors = []<typename ... C>(framework::pack<C...>) -> std::array<expressions::Projector, sizeof ...(C)>
906- {
907- return {{std::move (C::Projector ())...}};
908- }
909- (expression_pack_t {});
910-
911- return spawnerHelper (fullTable, new_schema, framework::pack_size (expression_pack_t {}), projectors.data (), name, projector);
894+ return spawnerHelper (fullTable, schema, framework::pack_size (expression_pack_t {}), projectors, name, projector);
912895}
913896
914897template <aod::is_aod_hash D>
915898 requires (soa::has_extension<typename o2::aod::MetadataTrait<D>::metadata> && !soa::has_configurable_extension<typename o2::aod::MetadataTrait<D>::metadata>)
916- auto spawner (std::shared_ptr<arrow::Table> const & fullTable , const char * name, std::shared_ptr<gandiva::Projector>& projector)
899+ 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 )
917900{
918- using expression_pack_t = typename o2::aod::MetadataTrait<D>::metadata::expression_pack_t ;
919- if (fullTable->num_rows () == 0 ) {
920- return makeEmptyTable (name, expression_pack_t {});
921- }
922- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (expression_pack_t {}));
923- auto projectors = []<typename ... C>(framework::pack<C...>) -> std::array<expressions::Projector, sizeof ...(C)>
924- {
925- return {{std::move (C::Projector ())...}};
926- }
927- (expression_pack_t {});
928-
929- return spawnerHelper (fullTable, new_schema, framework::pack_size (expression_pack_t {}), projectors.data (), name, projector);
901+ auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables));
902+ return spawner<D>(fullTable, name, projectors, projector, schema);
930903}
931904
932905template <typename ... C>
933- auto spawner (framework::pack<C...> columns , std::vector<std::shared_ptr<arrow::Table>>&& tables, const char * name, std::shared_ptr<gandiva::Projector>& projector)
906+ 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 )
934907{
935908 auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables));
936909 if (fullTable->num_rows () == 0 ) {
937910 return makeEmptyTable (name, framework::pack<C...>{});
938911 }
939- static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (columns));
940- std::array<expressions::Projector, sizeof ...(C)> projectors{{std::move (C::Projector ())...}};
941- return spawnerHelper (fullTable, new_schema, sizeof ...(C), projectors.data (), name, projector);
912+ return spawnerHelper (fullTable, schema, sizeof ...(C), projectors, name, projector);
942913}
943914
944915template <typename ... T>
0 commit comments