in src/afs.cc [2235:2280]
void select_prepared_statement()
{
const char* tag = "select prepared statement";
pgstat_report_activity(
STATE_RUNNING, (std::string(Tag) + ": selecting prepared statement").c_str());
auto session = find_session();
SharedSessionReleaser sessionReleaser(sessions_, session);
std::string handle;
auto preparedStatement = find_prepared_statement(session, handle, tag);
P("%s: %s: %s: %s", Tag, tag_, tag, handle.c_str());
if (!preparedStatement)
{
return;
}
ScopedTransaction scopedTransaction;
ScopedSnapshot scopedSnapshot;
SetCurrentStatementStartTimestamp();
SPI_connect();
needFinish_ = true;
struct Data {
Executor* executor;
const char* tag;
} data = {this, tag};
auto status = preparedStatement->select(
[](void* data) {
auto d = static_cast<Data*>(data);
return d->executor->write_record_batches(d->tag);
},
&data);
if (!status.ok())
{
set_error_message(session,
std::string(Tag) + ": " + tag_ + ": " + tag +
": failed to select a prepared statement: <" + handle +
">: " + status.ToString(),
tag);
}
SPI_finish();
needFinish_ = false;
signal_server(tag);
}