void prepare()

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