Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

tablereader.hxx

Go to the documentation of this file.
00001 /*------------------------------------------------------------------------- 00002 * 00003 * FILE 00004 * pqxx/tablereader.hxx 00005 * 00006 * DESCRIPTION 00007 * definition of the pqxx::tablereader class. 00008 * pqxx::tablereader enables optimized batch reads from a database table 00009 * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/tablereader instead. 00010 * 00011 * Copyright (c) 2001-2004, Jeroen T. Vermeulen <jtv@xs4all.nl> 00012 * 00013 * See COPYING for copyright license. If you did not receive a file called 00014 * COPYING with this source code, please notify the distributor of this mistake, 00015 * or contact the author. 00016 * 00017 *------------------------------------------------------------------------- 00018 */ 00019 #include <string> 00020 00021 #include "pqxx/result" 00022 #include "pqxx/tablestream" 00023 00024 /* Methods tested in eg. self-test program test001 are marked with "//[t1]" 00025 */ 00026 00027 namespace pqxx 00028 { 00029 00031 00043 class PQXX_LIBEXPORT tablereader : public tablestream 00044 { 00045 public: 00046 tablereader(transaction_base &, 00047 const PGSTD::string &RName, 00048 const PGSTD::string &Null=PGSTD::string()); //[t6] 00049 00051 00053 template<typename ITER> 00054 tablereader(transaction_base &, 00055 const PGSTD::string &RName, 00056 ITER begincolumns, 00057 ITER endcolumns, 00058 const PGSTD::string &Null=PGSTD::string()); //[t80] 00059 00060 ~tablereader() throw (); //[t6] 00061 00062 template<typename TUPLE> tablereader &operator>>(TUPLE &); //[t8] 00063 00064 operator bool() const throw () { return !m_Done; } //[t6] 00065 bool operator!() const throw () { return m_Done; } //[t6] 00066 00068 00071 bool get_raw_line(PGSTD::string &Line); //[t8] 00072 00073 template<typename TUPLE> 00074 void tokenize(PGSTD::string, TUPLE &) const; //[t8] 00075 00077 00084 virtual void complete(); //[t8] 00085 00086 #ifdef PQXX_DEPRECATED_HEADERS 00088 bool GetRawLine(PGSTD::string &L) { return get_raw_line(L); } 00090 template<typename TUPLE> void Tokenize(PGSTD::string L, TUPLE &T) const 00091 { tokenize(L, T); } 00092 #endif 00093 00094 private: 00095 void setup(transaction_base &T, 00096 const PGSTD::string &RName, 00097 const PGSTD::string &Columns=PGSTD::string()); 00098 void reader_close(); 00099 PGSTD::string extract_field(const PGSTD::string &, 00100 PGSTD::string::size_type &) const; 00101 00102 bool m_Done; 00103 }; 00104 00105 00106 // TODO: Find meaningful definition of input iterator 00107 00108 00109 template<typename ITER> inline 00110 tablereader::tablereader(transaction_base &T, 00111 const PGSTD::string &RName, 00112 ITER begincolumns, 00113 ITER endcolumns, 00114 const PGSTD::string &Null) : 00115 tablestream(T, RName, Null, "tablereader"), 00116 m_Done(true) 00117 { 00118 setup(T, RName, columnlist(begincolumns, endcolumns)); 00119 } 00120 00121 00122 template<typename TUPLE> 00123 inline void tablereader::tokenize(PGSTD::string Line, TUPLE &T) const 00124 { 00125 PGSTD::back_insert_iterator<TUPLE> ins = PGSTD::back_inserter(T); 00126 00127 // Filter and tokenize line, inserting tokens at end of T 00128 PGSTD::string::size_type here=0; 00129 while (here < Line.size()) *ins++ = extract_field(Line, here); 00130 } 00131 00132 00133 template<typename TUPLE> 00134 inline tablereader &pqxx::tablereader::operator>>(TUPLE &T) 00135 { 00136 PGSTD::string Line; 00137 if (get_raw_line(Line)) tokenize(Line, T); 00138 return *this; 00139 } 00140 00141 00142 } // namespace pqxx 00143

Generated on Thu Jun 17 18:47:09 2004 for libpqxx by doxygen 1.3.7