arrow::Result prepare()

in src/afs.cc [2977:3016]


	arrow::Result<arrow::flight::sql::ActionCreatePreparedStatementResult> prepare(
		uint64_t sessionID, const std::string& query)
	{
#ifdef AFS_VERBOSE
		const char* tag = "prepare";
#endif
		ARROW_ASSIGN_OR_RAISE(auto localSession, find_session(sessionID));
		auto request = std::make_shared<PrepareRequest>(localSession, query);
		{
			std::lock_guard<std::mutex> lock(mutex_);
			prepareRequests_.push_back(request);
		}
		kill(MyProcPid, SIGUSR1);
		{
			std::unique_lock<std::mutex> lock(mutex_);
			conditionVariable_.wait(lock, [&] {
				if (localSession->errorMessage.has_value())
				{
					return true;
				}
				if (INTERRUPTS_PENDING_CONDITION())
				{
					return true;
				}
				return request->finished;
			});
		}
		ARROW_RETURN_NOT_OK(check_local_session_error(localSession));
		if (INTERRUPTS_PENDING_CONDITION())
		{
			return arrow::Status::Invalid("interrupted");
		}
		arrow::flight::sql::ActionCreatePreparedStatementResult result = {
			nullptr,
			nullptr,
			std::move(request->handle),
		};
		P("%s: %s: %s: done", Tag, tag_, tag);
		return result;
	}