00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "pqxx/compiler.h"
00020
00021 #include <map>
00022 #include <string>
00023
00024 #include "pqxx/transaction_base"
00025
00026
00027
00028
00029
00030 namespace pqxx
00031 {
00032
00033
00034
00035
00036
00037
00038
00040
00057 class PQXX_LIBEXPORT pipeline
00058 {
00059 public:
00060 explicit pipeline(transaction_base &t) :
00061 m_home(t), m_queries(), m_waiting(), m_completed(), m_nextid(1) {}
00062
00063 typedef unsigned query_id;
00064
00066 query_id insert(const PGSTD::string &);
00067
00069 void drain();
00070
00072 void flush();
00073
00074
00076 void cancel(query_id);
00077
00078
00080 bool is_running(query_id) const;
00081
00083 bool is_finished(query_id) const;
00084
00086
00089 PGSTD::pair<query_id, result> retrieve(query_id);
00090
00092 result retrieve();
00093
00094 bool empty() const throw ();
00095
00096 private:
00098 void attach();
00100 void detach();
00102 void send_waiting();
00104 void consumeresults();
00105
00106 transaction_base &m_home;
00107 PGSTD::map<query_id, PGSTD::string> m_queries;
00108 PGSTD::vector<query_id> m_waiting, m_sent;
00109 PGSTD::map<query_id, result> m_completed;
00110 query_id m_nextid;
00111
00113 pipeline(const pipeline &);
00115 pipeline &operator=(const pipeline &);
00116 };
00117
00118
00119 }
00120
00121