Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

query.h

Go to the documentation of this file.
00001 #ifndef MYSQLPP_QUERY_H
00002 #define MYSQLPP_QUERY_H
00003 
00022 
00023 #include "defs.h"
00024 
00025 #include "coldata.h"
00026 #include "connection.h"
00027 #include "result.h"
00028 #include "sql_query.h"
00029 
00030 #include <mysql.h>
00031 
00032 #define mysql_query_define1(RETURN, FUNC) \
00033   RETURN FUNC (const char* str); \
00034   RETURN FUNC (parms &p);\
00035   mysql_query_define0(RETURN,FUNC) \
00036 
00037 #define mysql_query_define2(FUNC) \
00038   template <class T1> void FUNC (T1 &con, const char* str); \
00039   template <class T1> void FUNC (T1 &con, parms &p, query_reset r = RESET_QUERY);\
00040   template <class T1> void FUNC (T1 &con, ss a)\
00041         {FUNC (con, parms() << a);}\
00042   template <class T1> void FUNC (T1 &con, ss a, ss b)\
00043         {FUNC (con, parms() << a << b);}\
00044   template <class T1> void FUNC (T1 &con, ss a, ss b, ss c)\
00045         {FUNC (con, parms() << a << b << c);}\
00046   template <class T1> void FUNC (T1 &con, ss a, ss b, ss c, ss d)\
00047         {FUNC (con, parms() << a << b << c << d);}\
00048   template <class T1> void FUNC (T1 &con, ss a, ss b, ss c, ss d, ss e)\
00049         {FUNC (con, parms() << a << b << c << d << e);} \
00050   template <class T1> void FUNC (T1 &con, ss a, ss b, ss c, ss d, ss e, ss f)\
00051         {FUNC (con, parms() << a << b << c << d << e << f);}\
00052   template <class T1> void FUNC (T1 &con,ss a,ss b,ss c,ss d,ss e,ss f,ss g)\
00053         {FUNC (con, parms() << a << b << c << d << e << f << g);}\
00054   template <class T1> void FUNC (T1 &con,ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h)\
00055         {FUNC (con, parms() << a << b << c << d << e << f << g << h);}\
00056   template <class T1> void FUNC (T1 &con, ss a, ss b, ss c, ss d, ss e, ss f, ss g, ss h, ss i)\
00057         {FUNC (con, parms() << a << b << c << d << e << f << g << h << i);}\
00058   template <class T1> void FUNC (T1 &con, ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j)\
00059         {FUNC (con, parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j);}\
00060   template <class T1> void FUNC (T1 &con, ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j,ss k)\
00061         {FUNC (con, parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j <<k);}\
00062   template <class T1> void FUNC (T1 &con, ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j,ss k,\
00063                            ss l)\
00064         {FUNC (con, parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j <<k <<l);}\
00065 
00066 namespace mysqlpp {
00067 
00074 
00075 class Query : public SQLQuery
00076 {
00077 private:
00078         Connection* mysql;
00079         bool throw_exceptions;
00080 
00081         my_ulonglong affected_rows() const;
00082         my_ulonglong insert_id();
00083         std::string info();
00084         bool lock();
00085         void unlock();
00086 
00087 public:
00094         Query(Connection * c, bool te = false) :
00095         SQLQuery(),
00096         mysql(c),
00097         throw_exceptions(te)
00098         {
00099                 Success = true;
00100         }
00101 
00103         Query(const Query& q);
00104 
00107         std::string error();
00108 
00110         bool success();
00111 
00113         std::string preview() { return str(def); }
00114         std::string preview(parms& p) { return str(p); }
00115 
00130         bool exec(const std::string& str);
00131 
00154         ResNSel execute() { return execute(def); }
00155 
00172         ResUse use() { return use(def); }
00173 
00191         Result store() { return store(def); }
00192 
00211         template<class T1> void storein_sequence(T1& con,
00212                         query_reset r = RESET_QUERY)
00213                         { storein_sequence_(con, def, r); }
00214 
00220         template<class T1> void storein_set(T1& con,
00221                         query_reset r = RESET_QUERY) { storein_set(con, def, r); }
00222 
00241         template<class T1> void storein(T1& con,
00242                         query_reset r = RESET_QUERY) { storein(con, def, r); }
00243 
00254         template<class T> Query& update(const T& o, const T& n)
00255         {
00256                 SQLQuery::update(o, n);
00257                 return *this;
00258         }
00259 
00268         template<class T> Query& insert(const T& v)
00269         {
00270                 SQLQuery::insert(v);
00271                 return *this;
00272         }
00273 
00283         template<class T> Query& replace(const T& v)
00284         {
00285                 SQLQuery::replace(v);
00286                 return *this;
00287         }
00288 
00289         // Declare the remaining overloads.  These are hidden down here partly
00290         // to keep the above code clear, but also so that we may hide them
00291         // from Doxygen, which gets confused by macro instantiations that look
00292         // like method declarations.
00294         mysql_query_define0(std::string, preview)
00295         mysql_query_define1(ResNSel, execute)
00296         mysql_query_define1(ResUse, use)
00297         mysql_query_define1(Result, store)
00298         mysql_query_define2(storein_sequence)
00299         mysql_query_define2(storein_set)
00300         mysql_query_define2(storein)
00302 };
00303 
00305 // Doxygen will not generate documentation for this section.
00306 
00307 template<class Seq>
00308 void Query::storein_sequence(Seq& seq, parms& p, query_reset r)
00309 {
00310         r = parsed.size() ? DONT_RESET : RESET_QUERY;
00311         mysql->storein_sequence(seq, str(p, r));
00312 }
00313 
00314 template<class Set>
00315 void Query::storein_set(Set& sett, parms& p, query_reset r)
00316 {
00317         r = parsed.size() ? DONT_RESET : RESET_QUERY;
00318         mysql->storein_set(sett, str(p, r));
00319 }
00320 
00321 template<class Sequence>
00322 void Query::storein_sequence(Sequence& seq, const char *s)
00323 {
00324         mysql->storein_sequence(seq, s);
00325 }
00326 
00327 template<class Set>
00328 void Query::storein_set(Set& sett, const char *s)
00329 {
00330         mysql->storein_set(sett, s);
00331 }
00332 
00333 template<class T>
00334 void Query::storein(T& con, parms& p, query_reset r)
00335 {
00336         r = parsed.size() ? DONT_RESET : RESET_QUERY;
00337         mysql->storein(con, str(p, r));
00338 }
00339 
00340 template<class T>
00341 void Query::storein(T& con, const char *s)
00342 {
00343         mysql->storein(con, s);
00344 }
00345 
00347 
00348 } // end namespace mysqlpp
00349 
00350 #endif
00351 

Generated on Thu May 5 05:30:43 2005 for MySQL++ by doxygen1.2.18