in src/afs.cc [1313:1339]
arrow::Status select(WriteFunc write, void* writeData)
{
if (parameters_.empty())
{
auto result = SPI_execute(query_.c_str(), false, 0);
if (result <= 0)
{
return arrow::Status::Invalid("failed to run a query: ",
SPI_result_code_string(result),
": ",
query_);
}
return write(writeData);
}
for (const auto& recordBatch : parameters_)
{
SPIExecuteOptions options = {};
std::vector<Oid> pgTypes;
ARROW_RETURN_NOT_OK(prepare(options, pgTypes, recordBatch->schema()));
auto plan = SPI_prepare(query_.c_str(), pgTypes.size(), pgTypes.data());
ScopedPlan scopedPlan(plan);
ARROW_RETURN_NOT_OK(
execute(plan, recordBatch, options, [&]() { return write(writeData); }));
}
return arrow::Status::OK();
}