13 #ifndef PQXX_H_PIPELINE
14 #define PQXX_H_PIPELINE
16 #include "pqxx/compiler-public.hxx"
17 #include "pqxx/internal/compiler-internal-pre.hxx"
23 #include "pqxx/transaction_base.hxx"
78 query_id insert(std::string_view);
113 [[nodiscard]]
bool is_finished(query_id) const;
124 return retrieve(m_queries.find(qid)).second;
129 std::pair<query_id, result> retrieve();
131 [[nodiscard]]
bool empty() const noexcept {
return std::empty(m_queries); }
146 int retain(
int retain_max = 2);
153 struct PQXX_PRIVATE Query
155 explicit Query(std::string_view q) :
156 query{std::make_shared<std::string>(q)}
159 std::shared_ptr<std::string> query;
163 using QueryMap = std::map<query_id, Query>;
170 static constexpr query_id qid_limit() noexcept
176 return (std::numeric_limits<query_id>::max)();
180 PQXX_PRIVATE query_id generate_id();
182 bool have_pending() const noexcept
184 return m_issuedrange.second != m_issuedrange.first;
187 PQXX_PRIVATE
void issue();
190 void set_error_at(query_id qid) noexcept
197 [[noreturn]] PQXX_PRIVATE
void internal_error(std::string
const &err);
199 PQXX_PRIVATE
bool obtain_result(
bool expect_none =
false);
201 PQXX_PRIVATE
void obtain_dummy();
202 PQXX_PRIVATE
void get_further_available_results();
203 PQXX_PRIVATE
void check_end_results();
206 PQXX_PRIVATE
void receive_if_available();
209 PQXX_PRIVATE
void receive(pipeline::QueryMap::const_iterator stop);
210 std::pair<pipeline::query_id, result> retrieve(pipeline::QueryMap::iterator);
213 std::pair<QueryMap::iterator, QueryMap::iterator> m_issuedrange;
215 int m_num_waiting = 0;
219 bool m_dummy_pending =
false;
222 query_id m_error = qid_limit();
228 internal::encoding_group m_encoding;
230 constexpr
static std::string_view s_classname{
"pipeline"};
234 #include "pqxx/internal/compiler-internal-post.hxx"
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:26
Processes several queries in FIFO manner, optimized for high throughput.
Definition: pipeline.hxx:48
pipeline(transaction_base &t)
Start a pipeline.
Definition: pipeline.hxx:57
bool empty() const noexcept
Definition: pipeline.hxx:131
pipeline(transaction_base &t, std::string_view tname)
Start a pipeline. Assign it a name, for more helpful error messages.
Definition: pipeline.hxx:62
pipeline(pipeline const &)=delete
long query_id
Identifying numbers for queries.
Definition: pipeline.hxx:51
pipeline & operator=(pipeline const &)=delete
Result set containing data returned by a query or command.
Definition: result.hxx:71
Interface definition (and common code) for "transaction" classes.
Definition: transaction_base.hxx:75
Base class for things that monopolise a transaction's attention.
Definition: transaction_focus.hxx:28