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
00119
00121
void resume();
00122
00123
private:
00125 query_id generate_id();
00127
void send_waiting();
00129
void consumeresults();
00130
00131
typedef PGSTD::map<query_id, result> ResultsMap;
00132
typedef PGSTD::map<query_id, PGSTD::string> QueryMap;
00133
typedef PGSTD::deque<query_id> QueryQueue;
00134
00136 ResultsMap::value_type deliver(ResultsMap::iterator);
00137
00138 QueryMap m_queries;
00139 QueryQueue m_waiting, m_sent;
00140 ResultsMap m_completed;
00141 query_id m_nextid;
00142
bool m_retain;
00143
bool m_error;
00144
00146
bool m_bsgt;
00147
00149 pipeline(
const pipeline &);
00151 pipeline &operator=(
const pipeline &);
00152 };
00153
00154
00155 }
00156
00157