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

Function GetExtensionSetFromMessage

cpp/src/arrow/engine/substrait/util_internal.h:45–88  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43// and so this utility is templated to support both.
44template <typename MessageType>
45Result<ExtensionSet> GetExtensionSetFromMessage(
46 const MessageType& message, const ConversionOptions& conversion_options,
47 const ExtensionIdRegistry* registry) {
48 if (registry == NULLPTR) {
49 registry = default_extension_id_registry();
50 }
51 std::unordered_map<uint32_t, std::string_view> uris;
52 uris.reserve(message.extension_uris_size());
53 for (const auto& uri : message.extension_uris()) {
54 uris[uri.extension_uri_anchor()] = uri.uri();
55 }
56
57 // NOTE: it's acceptable to use views to memory owned by message; ExtensionSet::Make
58 // will only store views to memory owned by registry.
59
60 std::unordered_map<uint32_t, Id> type_ids, function_ids;
61 for (const auto& ext : message.extensions()) {
62 switch (ext.mapping_type_case()) {
63 case substrait::extensions::SimpleExtensionDeclaration::kExtensionTypeVariation: {
64 return Status::NotImplemented("Type Variations are not yet implemented");
65 }
66
67 case substrait::extensions::SimpleExtensionDeclaration::kExtensionType: {
68 const auto& type = ext.extension_type();
69 std::string_view uri = uris[type.extension_uri_reference()];
70 type_ids[type.type_anchor()] = Id{uri, type.name()};
71 break;
72 }
73
74 case substrait::extensions::SimpleExtensionDeclaration::kExtensionFunction: {
75 const auto& fn = ext.extension_function();
76 std::string_view uri = uris[fn.extension_uri_reference()];
77 function_ids[fn.function_anchor()] = Id{uri, fn.name()};
78 break;
79 }
80
81 default:
82 Unreachable();
83 }
84 }
85
86 return ExtensionSet::Make(std::move(uris), std::move(type_ids), std::move(function_ids),
87 conversion_options, registry);
88}
89
90template <typename Message>
91Status AddExtensionSetToMessage(const ExtensionSet& ext_set, Message* message) {

Callers 2

GetExtensionSetFromPlanFunction · 0.85

Calls 6

UnreachableFunction · 0.85
NotImplementedFunction · 0.70
MakeFunction · 0.50
reserveMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected