| 267 | } // namespace |
| 268 | |
| 269 | Result<std::shared_ptr<acero::ExecPlan>> DeserializePlan( |
| 270 | const Buffer& buf, const std::shared_ptr<acero::SinkNodeConsumer>& consumer, |
| 271 | const ExtensionIdRegistry* registry, ExtensionSet* ext_set_out, |
| 272 | const ConversionOptions& conversion_options) { |
| 273 | struct SingleConsumer { |
| 274 | std::shared_ptr<acero::SinkNodeConsumer> operator()() { |
| 275 | if (factory_done) { |
| 276 | Status::Invalid("SingleConsumer invoked more than once").Warn(); |
| 277 | return std::shared_ptr<acero::SinkNodeConsumer>{}; |
| 278 | } |
| 279 | factory_done = true; |
| 280 | return consumer; |
| 281 | } |
| 282 | bool factory_done; |
| 283 | std::shared_ptr<acero::SinkNodeConsumer> consumer; |
| 284 | }; |
| 285 | ARROW_ASSIGN_OR_RAISE(auto declarations, |
| 286 | DeserializePlans(buf, SingleConsumer{false, consumer}, registry, |
| 287 | ext_set_out, conversion_options)); |
| 288 | return MakeSingleDeclarationPlan(declarations); |
| 289 | } |
| 290 | |
| 291 | Result<std::shared_ptr<acero::ExecPlan>> DeserializePlan( |
| 292 | const Buffer& buf, const std::shared_ptr<dataset::WriteNodeOptions>& write_options, |