in src/afs.cc [2098:2131]
void prepare()
{
const char* tag = "prepare";
pgstat_report_activity(STATE_RUNNING, (std::string(Tag) + ": preparing").c_str());
auto session = find_session();
SharedSessionReleaser sessionReleaser(sessions_, session);
if (!DsaPointerIsValid(session->prepareQuery))
{
set_error_message(
session,
std::string(Tag) + ": " + tag_ + ": " + tag + ": query is missing",
tag);
return;
}
std::string query;
{
ProcessorLockGuard lock(this);
query =
static_cast<const char*>(dsa_get_address(area_, session->prepareQuery));
dsa_free(area_, session->prepareQuery);
session->prepareQuery = InvalidDsaPointer;
}
P("%s: %s: %s: %s", Tag, tag_, tag, query.c_str());
std::string handle(std::to_string(nextPreparedStatementID_++));
preparedStatements_.insert(
std::make_pair(handle, PreparedStatement(std::move(query))));
{
ProcessorLockGuard lock(this);
set_shared_string(session->preparedStatementHandle, handle);
}
signal_server(tag);
}