void select()

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);
	}