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
00037
00038
00039
00040
00041 #ifndef MYSQLPP_MANIP_H
00042 #define MYSQLPP_MANIP_H
00043
00044 #include "common.h"
00045
00046 #include "myset.h"
00047 #include "stadapter.h"
00048
00049 #include <iostream>
00050
00051 namespace mysqlpp {
00052
00053 class SQLQueryParms;
00054
00055
00069
00070 enum quote_type0
00071 {
00072 quote
00073 };
00074
00075
00076 #if !defined(DOXYGEN_IGNORE)
00077
00078
00079 struct quote_type1
00080 {
00081 std::ostream * ostr;
00082 quote_type1(std::ostream * o) :
00083 ostr(o)
00084 {
00085 }
00086 };
00087
00088
00089 inline quote_type1
00090 operator <<(std::ostream& o, quote_type0 )
00091 {
00092 return quote_type1(&o);
00093 }
00094
00095
00096 struct quote_type2
00097 {
00098 SQLQueryParms *qparms;
00099 quote_type2(SQLQueryParms* p) :
00100 qparms(p)
00101 {
00102 }
00103 };
00104
00105
00106 inline quote_type2
00107 operator <<(SQLQueryParms& p, quote_type0 )
00108 {
00109 return quote_type2(&p);
00110 }
00111
00112
00115
00116 MYSQLPP_EXPORT SQLQueryParms& operator <<(quote_type2 p,
00117 SQLTypeAdapter& in);
00118
00119
00122
00123 MYSQLPP_EXPORT std::ostream& operator <<(quote_type1 o,
00124 const SQLTypeAdapter& in);
00125
00126
00133
00134 MYSQLPP_EXPORT std::ostream& operator <<(std::ostream& o,
00135 const SQLTypeAdapter& in);
00136
00137
00138 template <class ST>
00139 inline std::ostream&
00140 operator <<(quote_type1 o, const Set<ST>& in)
00141 {
00142 return *o.ostr << '\'' << in << '\'';
00143 }
00144
00145 #endif // !defined(DOXYGEN_IGNORE)
00146
00147
00155
00156 enum quote_only_type0
00157 {
00158 quote_only
00159 };
00160
00161
00162 #if !defined(DOXYGEN_IGNORE)
00163
00164
00165 struct quote_only_type1
00166 {
00167 std::ostream* ostr;
00168 quote_only_type1(std::ostream* o) :
00169 ostr(o)
00170 {
00171 }
00172 };
00173
00174
00175 inline quote_only_type1
00176 operator <<(std::ostream& o, quote_only_type0 )
00177 {
00178 return quote_only_type1(&o);
00179 }
00180
00181
00182 struct quote_only_type2
00183 {
00184 SQLQueryParms* qparms;
00185 quote_only_type2(SQLQueryParms* p) :
00186 qparms(p)
00187 {
00188 }
00189 };
00190
00191
00192 inline quote_only_type2
00193 operator <<(SQLQueryParms& p, quote_only_type0 )
00194 {
00195 return quote_only_type2(&p);
00196 }
00197
00198
00205
00206 MYSQLPP_EXPORT SQLQueryParms& operator <<(quote_only_type2 p,
00207 SQLTypeAdapter& in);
00208
00209
00210 std::ostream& operator <<(quote_only_type1 o, const SQLTypeAdapter& in);
00211
00212
00213 template <class ST>
00214 inline std::ostream&
00215 operator <<(quote_only_type1 o, const Set<ST>& in)
00216 {
00217 return *o.ostr << '\'' << in << '\'';
00218 }
00219
00220 #endif // !defined(DOXYGEN_IGNORE)
00221
00222
00235
00236 enum quote_double_only_type0
00237 {
00238 quote_double_only
00239 };
00240
00241
00242 #if !defined(DOXYGEN_IGNORE)
00243
00244
00245 struct quote_double_only_type1
00246 {
00247 std::ostream* ostr;
00248 quote_double_only_type1(std::ostream* o) :
00249 ostr(o)
00250 {
00251 }
00252 };
00253
00254
00255 inline quote_double_only_type1
00256 operator <<(std::ostream& o, quote_double_only_type0 )
00257 {
00258 return quote_double_only_type1(&o);
00259 }
00260
00261
00262 struct quote_double_only_type2
00263 {
00264 SQLQueryParms *qparms;
00265 quote_double_only_type2(SQLQueryParms* p) :
00266 qparms(p)
00267 {
00268 }
00269 };
00270
00271
00272 inline quote_double_only_type2
00273 operator <<(SQLQueryParms& p, quote_double_only_type0 )
00274 {
00275 return quote_double_only_type2(&p);
00276 }
00277
00278
00285
00286 MYSQLPP_EXPORT SQLQueryParms&
00287 operator <<(quote_double_only_type2 p, SQLTypeAdapter& in);
00288
00289
00290 std::ostream&
00291 operator <<(quote_double_only_type1 o, const SQLTypeAdapter& in);
00292
00293
00294 template <class ST>
00295 inline std::ostream&
00296 operator <<(quote_double_only_type1 o, const Set<ST>& in)
00297 {
00298 return *o.ostr << '"' << in << '"';
00299 }
00300
00301 #endif // !defined(DOXYGEN_IGNORE)
00302
00303
00314
00315 enum escape_type0 { escape };
00316
00317
00318 #if !defined(DOXYGEN_IGNORE)
00319
00320
00321 struct escape_type1
00322 {
00323 std::ostream* ostr;
00324 escape_type1(std::ostream* o) :
00325 ostr(o)
00326 {
00327 }
00328 };
00329
00330
00331 inline escape_type1
00332 operator <<(std::ostream& o, escape_type0 )
00333 {
00334 return escape_type1(&o);
00335 }
00336
00337
00338 struct escape_type2
00339 {
00340 SQLQueryParms *qparms;
00341 escape_type2(SQLQueryParms* p) :
00342 qparms(p)
00343 {
00344 }
00345 };
00346
00347
00348 inline escape_type2
00349 operator <<(SQLQueryParms& p, escape_type0 )
00350 {
00351 return escape_type2(&p);
00352 }
00353
00354 #endif // !defined(DOXYGEN_IGNORE)
00355
00356
00363
00364 MYSQLPP_EXPORT SQLQueryParms& operator <<(escape_type2 p,
00365 SQLTypeAdapter& in);
00366
00367
00370
00371 MYSQLPP_EXPORT std::ostream& operator <<(escape_type1 o,
00372 const SQLTypeAdapter& in);
00373
00374
00385
00386 enum do_nothing_type0
00387 {
00388 do_nothing
00389 };
00390
00391
00392 #if !defined(DOXYGEN_IGNORE)
00393
00394
00395 struct do_nothing_type1
00396 {
00397 std::ostream* ostr;
00398 do_nothing_type1(std::ostream* o) :
00399 ostr(o)
00400 {
00401 }
00402 };
00403
00404
00405 inline do_nothing_type1
00406 operator <<(std::ostream& o, do_nothing_type0 )
00407 {
00408 return do_nothing_type1(&o);
00409 }
00410
00411
00412 MYSQLPP_EXPORT std::ostream&
00413 operator <<(do_nothing_type1 o, const SQLTypeAdapter& in);
00414
00415
00416 struct do_nothing_type2
00417 {
00418 SQLQueryParms *qparms;
00419 do_nothing_type2(SQLQueryParms* p) :
00420 qparms(p)
00421 {
00422 }
00423 };
00424
00425
00426 inline do_nothing_type2
00427 operator <<(SQLQueryParms& p, do_nothing_type0 )
00428 {
00429 return do_nothing_type2(&p);
00430 }
00431
00432
00435
00436 MYSQLPP_EXPORT SQLQueryParms& operator <<(do_nothing_type2 p,
00437 SQLTypeAdapter& in);
00438
00439 #endif // !defined(DOXYGEN_IGNORE)
00440
00441
00451
00452 enum ignore_type0
00453 {
00454 ignore
00455 };
00456
00457
00458 #if !defined(DOXYGEN_IGNORE)
00459
00460
00461 struct ignore_type2
00462 {
00463 SQLQueryParms* qparms;
00464 ignore_type2(SQLQueryParms* p) :
00465 qparms(p)
00466 {
00467 }
00468 };
00469
00470
00471 inline ignore_type2
00472 operator <<(SQLQueryParms& p, ignore_type0 )
00473 {
00474 return ignore_type2(&p);
00475 }
00476
00477
00480
00481 MYSQLPP_EXPORT SQLQueryParms& operator <<(ignore_type2 p,
00482 SQLTypeAdapter& in);
00483
00484 #endif // !defined(DOXYGEN_IGNORE)
00485
00486 }
00487
00488 #endif