13#include "../src/ExpressionJSONHelpers.h"
14#include "../src/IndexJSONHelpers.h"
35 std::vector<o2::soa::IndexRecord>
records;
46 auto loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"index-records") == 0; });
47 std::stringstream iws(loc->defaultValue.get<std::string>());
50 loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"index-exclusive") == 0; });
51 exclusive = loc->defaultValue.get<
bool>();
56 outputSchema = std::make_shared<arrow::Schema>([](std::vector<o2::soa::IndexRecord>
const& recs) {
57 std::vector<std::shared_ptr<arrow::Field>>
fields;
58 for (
auto&
r : recs) {
63 ->WithMetadata(std::make_shared<arrow::KeyValueMetadata>(std::vector{std::string{
"label"}}, std::vector{std::string{
binding}}));
66 framework::Builder createBuilder()
const
86 std::vector<Buildable> buildables;
87 for (
auto&
i : requested) {
88 buildables.emplace_back(
i);
90 std::vector<Builder> builders;
91 for (
auto&
b : buildables) {
92 builders.push_back(
b.createBuilder());
95 auto outputs = pc.outputs();
96 for (
auto& builder : builders) {
97 outputs.adopt(
Output{builder.
origin, builder.description, builder.version}, builder.materialize(pc));
107 std::vector<std::string>
labels;
124 auto loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"projectors") == 0; });
125 std::stringstream iws(loc->defaultValue.get<std::string>());
128 loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"schema") == 0; });
130 iws.str(loc->defaultValue.get<std::string>());
134 std::vector<std::shared_ptr<arrow::Schema>> schemas;
136 if (
i.name.starts_with(
"input-schema:")) {
137 labels.emplace_back(
i.name.substr(13));
139 auto json =
i.defaultValue.get<std::string>();
145 std::vector<std::shared_ptr<arrow::Field>>
fields;
146 for (
auto& s : schemas) {
147 std::copy(s->fields().begin(), s->fields().end(), std::back_inserter(
fields));
154 std::shared_ptr<gandiva::Projector> makeProjector()
const
156 std::shared_ptr<gandiva::Projector>
p =
nullptr;
157 auto s = gandiva::Projector::Make(
167 framework::Spawner createMaker()
const
188 std::vector<Spawnable> spawnables;
189 for (
auto&
i : requested) {
190 spawnables.emplace_back(
i);
192 std::vector<Spawner> spawners;
193 for (
auto& s : spawnables) {
194 spawners.push_back(s.createMaker());
198 auto outputs = pc.outputs();
199 for (
auto&
spawner : spawners) {
std::shared_ptr< arrow::Schema > outputSchema
header::DataOrigin origin
std::vector< o2::soa::IndexRecord > records
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
ServiceRegistryRef services() const
GLboolean GLboolean GLboolean b
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 > > 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 &ctx)
static AlgorithmSpec aodSpawnerCallback(ConfigContext const &ctx)