00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "pqxx/libcompiler.h"
00020
00021 #include <deque>
00022 #include <map>
00023 #include <string>
00024 #include <vector>
00025
00026 #include "pqxx/transaction_base"
00027
00028
00029
00030
00031
00032 namespace pqxx
00033 {
00034
00036
00059 class PQXX_LIBEXPORT pipeline : public internal::transactionfocus
00060 {
00061 public:
00062 typedef unsigned query_id;
00063
00064 explicit pipeline(transaction_base &t,
00065 const PGSTD::string &PName="");
00066
00067 ~pipeline() throw ();
00068
00070
00075 query_id insert(const PGSTD::string &);
00076
00078 void complete();
00079
00081 void flush();
00082
00084 bool is_running(query_id) const;
00085
00087 bool is_finished(query_id) const;
00088
00090
00093 result retrieve(query_id);
00094
00096 PGSTD::pair<query_id, result> retrieve();
00097
00098 bool empty() const throw ();
00099
00101
00117 void retain() { m_retain = true; }
00118
00120 void resume();
00121
00122 private:
00124 query_id generate_id();
00126 void send_waiting();
00128 void consumeresults();
00129
00130 typedef PGSTD::map<query_id, result> ResultsMap;
00131 typedef PGSTD::map<query_id, PGSTD::string> QueryMap;
00132 typedef PGSTD::deque<query_id> QueryQueue;
00133
00135 ResultsMap::value_type deliver(ResultsMap::iterator);
00136
00137 QueryMap m_queries;
00138 QueryQueue m_waiting, m_sent;
00139 ResultsMap m_completed;
00140 query_id m_nextid;
00141 bool m_retain;
00142 bool m_error;
00143
00145 pipeline(const pipeline &);
00147 pipeline &operator=(const pipeline &);
00148 };
00149
00150
00151 }
00152
00153