13#include "../src/ExpressionJSONHelpers.h"
14#include "../src/IndexJSONHelpers.h"
33 std::vector<framework::ConcreteDataMatcher>
matchers;
37 std::vector<o2::soa::IndexRecord>
records;
48 auto loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"index-records") == 0; });
49 std::stringstream iws(loc->defaultValue.get<std::string>());
52 loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"index-exclusive") == 0; });
53 exclusive = loc->defaultValue.get<
bool>();
59 outputSchema = std::make_shared<arrow::Schema>([](std::vector<o2::soa::IndexRecord>
const& recs) {
60 std::vector<std::shared_ptr<arrow::Field>>
fields;
61 fields.reserve(recs.size());
62 std::ranges::transform(recs, std::back_inserter(
fields), [](
auto&
r) {
return r.field(); });
65 ->WithMetadata(std::make_shared<arrow::KeyValueMetadata>(std::vector{std::string{
"label"}}, std::vector{std::string{
binding}}));
68 framework::Builder createBuilder()
const
89 std::vector<Builder> builders;
90 builders.reserve(requested.size());
91 std::ranges::transform(requested, std::back_inserter(builders), [](
auto const&
i) {
return Buildable{
i}.createBuilder(); });
93 auto outputs = pc.outputs();
94 std::ranges::for_each(builders, [&pc, &outputs](
auto& builder) { outputs.adopt(
Output{builder.
origin, builder.description, builder.version}, builder.materialize(pc)); });
103 std::vector<std::string>
labels;
104 std::vector<framework::ConcreteDataMatcher>
matchers;
114 explicit Spawnable(
InputSpec const& spec)
121 auto loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"projectors") == 0; });
122 std::stringstream iws(loc->defaultValue.get<std::string>());
125 loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"schema") == 0; });
127 iws.str(loc->defaultValue.get<std::string>());
131 std::vector<std::shared_ptr<arrow::Schema>> schemas;
132 for (
auto const&
i : spec.
metadata | views::filter_string_params_starts_with(
"input-schema:")) {
133 labels.emplace_back(
i.name.substr(13));
135 auto json =
i.defaultValue.get<std::string>();
139 std::ranges::transform(spec.
metadata |
140 views::filter_string_params_starts_with(
"input:") |
141 std::ranges::views::transform(
142 [](
auto const&
param) {
143 return DataSpecUtils::fromMetadataString(param.defaultValue.template get<std::string>());
145 std::back_inserter(
matchers), [](
auto const&
i) { return std::get<ConcreteDataMatcher>(i.matcher); });
147 std::vector<std::shared_ptr<arrow::Field>>
fields;
148 std::ranges::for_each(schemas,
149 [&
fields](
auto const& s) {
150 std::ranges::copy(s->fields(), std::back_inserter(
fields));
157 std::shared_ptr<gandiva::Projector> makeProjector()
const
159 std::shared_ptr<gandiva::Projector>
p =
nullptr;
160 auto s = gandiva::Projector::Make(
170 framework::Spawner createMaker()
const
192 std::vector<Spawner> spawners;
193 spawners.reserve(requested.size());
194 std::ranges::transform(requested, std::back_inserter(spawners), [](
auto const&
i) {
return Spawnable{
i}.createMaker(); });
196 auto outputs = pc.outputs();
std::shared_ptr< arrow::Schema > outputSchema
header::DataOrigin origin
std::vector< o2::soa::IndexRecord > records
std::vector< framework::ConcreteDataMatcher > matchers
header::DataDescription description
std::vector< expressions::Projector > projectors
std::vector< std::shared_ptr< gandiva::Expression > > expressions
std::shared_ptr< arrow::Schema > inputSchema
std::vector< std::string > labels
std::vector< std::shared_ptr< arrow::Field > > fields
std::vector< std::shared_ptr< gandiva::Expression > > materializeProjectors(std::vector< expressions::Projector > const &projectors, std::shared_ptr< arrow::Schema > const &inputSchema, std::vector< std::shared_ptr< arrow::Field > > const &outputFields)
void addLabelToSchema(std::shared_ptr< arrow::Schema > &schema, const char *label)
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)
Expression-based column generator to materialize columns.
RuntimeErrorRef runtime_error_f(const char *,...)
std::function< ProcessCallback(InitContext &)> InitCallback
static std::shared_ptr< arrow::Schema > read(std::istream &s)
static ConcreteDataMatcher asConcreteDataMatcher(InputSpec const &input)
static std::vector< expressions::Projector > read(std::istream &s)
static std::vector< o2::soa::IndexRecord > read(std::istream &s)
header::DataOrigin origin
static AlgorithmSpec indexBuilderCallback(ConfigContext const &)
static AlgorithmSpec aodSpawnerCallback(ConfigContext const &)