00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00038
00039 #ifndef PQXX_OBJECT_UPDATE_QUERY_H
00040 #define PQXX_OBJECT_UPDATE_QUERY_H
00041
00042 #include <list>
00043 #include <string>
00044 #include <sstream>
00045 #include <utility>
00046
00047 #include <pqxx/util>
00048
00049 #include <pqxx-object/field_base.h>
00050 #include <pqxx-object/query.h>
00051 #include <pqxx-object/query_helpers.h>
00052
00053 namespace pqxxobject
00054 {
00059 class update_query : public query
00060 {
00061 public:
00063 update_query();
00064
00069 explicit update_query(const std::string& table);
00070
00072 update_query(const update_query& rhs);
00073
00075 virtual ~update_query();
00076
00077 typedef std::pair<std::string, std::string> field_value;
00078
00083 template< typename T, template <typename> class F >
00084 void add(F<T>& field)
00085 {
00086 remove(field);
00087 query_helper<T, F> helper;
00088 m_field_list.push_back(helper.apply(field));
00089 }
00090
00095 template< typename T, template <typename> class F >
00096 void where(F<T>& field)
00097 {
00098 m_where.clear();
00099 query_helper<T, F> helper;
00100 std::pair<std::string, std::string> values(helper.apply(field));
00101 std::ostringstream tmp;
00102 tmp << values.first << " = " << values.second;
00103 m_where = tmp.str();
00104 }
00105
00106
00111 void where(const std::string& where_string)
00112 {
00113 m_where = where_string;
00114 }
00115
00120 void remove(const field_base& field);
00121
00126 std::string str();
00127
00128 private:
00129 std::string m_table_name;
00130 std::list<field_value> m_field_list;
00131 std::string m_where;
00132
00133 };
00134
00135 template<typename T>
00136 std::ostream& operator << (std::ostream& os, const update_query& rhs)
00137 {
00138 os << rhs.str();
00139 }
00140
00141 };
00142
00143 #endif // PQXX_OBJECT_UPDATE_QUERY_H