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