MCPcopy Create free account
hub / github.com/apache/arrow / ProcessExtensionEmit

Function ProcessExtensionEmit

cpp/src/arrow/engine/substrait/relation_internal.cc:172–195  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

170namespace {
171
172Result<DeclarationInfo> ProcessExtensionEmit(const DeclarationInfo& no_emit_declr,
173 const std::vector<int>& emit_order) {
174 const std::shared_ptr<Schema>& input_schema = no_emit_declr.output_schema;
175 std::vector<compute::Expression> proj_field_refs;
176 proj_field_refs.reserve(emit_order.size());
177 FieldVector emit_fields;
178 emit_fields.reserve(emit_order.size());
179
180 for (int emit_idx : emit_order) {
181 if (emit_idx < 0 || emit_idx >= input_schema->num_fields()) {
182 return Status::Invalid("Out of bounds emit index ", emit_idx);
183 }
184 proj_field_refs.push_back(compute::field_ref(FieldRef(emit_idx)));
185 emit_fields.push_back(input_schema->field(emit_idx));
186 }
187
188 std::shared_ptr<Schema> emit_schema = schema(std::move(emit_fields));
189
190 return DeclarationInfo{
191 acero::Declaration::Sequence(
192 {no_emit_declr.declaration,
193 {"project", acero::ProjectNodeOptions{std::move(proj_field_refs)}}}),
194 std::move(emit_schema)};
195}
196
197Result<DeclarationInfo> GetExtensionInfo(const substrait::Rel& rel,
198 const ExtensionSet& ext_set,

Callers 1

FromProtoFunction · 0.85

Calls 9

field_refFunction · 0.85
push_backMethod · 0.80
InvalidFunction · 0.50
FieldRefFunction · 0.50
schemaFunction · 0.50
reserveMethod · 0.45
sizeMethod · 0.45
num_fieldsMethod · 0.45
fieldMethod · 0.45

Tested by

no test coverage detected