in src/afs.cc [865:908]
void select()
{
pgstat_report_activity(STATE_RUNNING, (std::string(Tag) + ": selecting").c_str());
PushActiveSnapshot(GetTransactionSnapshot());
LWLockAcquire(lock_, LW_EXCLUSIVE);
std::string query(
static_cast<const char*>(dsa_get_address(area_, session_->selectQuery)));
dsa_free(area_, session_->selectQuery);
session_->selectQuery = InvalidDsaPointer;
SetCurrentStatementStartTimestamp();
P("%s: %s: select: %s", Tag, tag_, query.c_str());
auto result = SPI_execute(query.c_str(), true, 0);
LWLockRelease(lock_);
if (result == SPI_OK_SELECT)
{
pgstat_report_activity(STATE_RUNNING,
(std::string(Tag) + ": select: writing").c_str());
auto status = write();
if (!status.ok())
{
set_shared_string(session_->errorMessage, status.ToString());
}
}
else
{
set_shared_string(session_->errorMessage,
std::string(Tag) + ": " + tag_ + ": select" +
": failed to run a query: <" + query +
">: " + SPI_result_code_string(result));
}
PopActiveSnapshot();
if (sharedData_->serverPID != InvalidPid)
{
P("%s: %s: select: kill server: %d", Tag, tag_, sharedData_->serverPID);
kill(sharedData_->serverPID, SIGUSR1);
}
pgstat_report_activity(STATE_IDLE, NULL);
}