manip.cpp
上传用户:clovervx
上传日期:2010-03-30
资源大小:787k
文件大小:9k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include "manip3.hh"
  3. // quote manipulator
  4. bool dont_quote_auto=false;
  5. SQLQueryParms& operator << (quote_type2 p, SQLString &in) {
  6.   if (in.is_string) {
  7.     if (in.dont_escape) {
  8.       SQLString in2 = "'" + in + "'";
  9.       in2.processed = true;
  10.       return *p.qparms << in2;
  11.     } else {
  12.       char* s = new char[in.size()*2+1];
  13.       mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  14.       SQLString in2 = SQLString("'") + s + "'";
  15.       in2.processed = true;
  16.       *p.qparms << in2;
  17.       delete[] s;
  18.       return *p.qparms;
  19.     }
  20.   } else {
  21.     in.processed = true;
  22.     return *p.qparms << in;
  23.   }
  24. }
  25. //------------------------------------------------------------------------
  26. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  27. /*
  28. template <>
  29. ostream& operator << (quote_type1 o, const string &in) {
  30.   char* s = new char[in.size()*2+1];
  31.   mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  32.   *o.ostr << "'" << s << "'";
  33.   delete[] s;
  34.   return *o.ostr;
  35. }
  36. */
  37. //------------------------------------------------------------------------
  38. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  39. /*
  40. template <>
  41. ostream& operator << (quote_type1 o, const char* const &in) {
  42.   unsigned int size;
  43.   for (size=0; in[size]; size++);
  44.   char* s = new char[size*2+1];
  45.   mysql_escape_string(s, const_cast<char *>(in), size);
  46.   *o.ostr << "'" << s << "'";
  47.   delete[] s;
  48.   return *o.ostr;
  49. }
  50. */
  51. //------------------------------------------------------------------------
  52. template <class Str>
  53. inline ostream& _manip (quote_type1 o, const mysql_ColData<Str>& in) {
  54.   if (in.escape_q()) {
  55.     char *s = new char[in.size()*2+1];
  56.     mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  57.     if (in.quote_q())
  58.       *o.ostr << "'" << s << "'";
  59.     else
  60.       *o.ostr << s;
  61.     delete[] s;
  62.   } else if (in.quote_q()) {
  63.     *o.ostr << "'" << in << "'";
  64.   } else {
  65.     *o.ostr << in;
  66.   }
  67.   return *o.ostr;
  68. }
  69. //------------------------------------------------------------------------
  70. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  71. /*
  72. template <>
  73. ostream& operator << (quote_type1 o, const mysql_ColData<string>& in)
  74. {
  75.   return _manip(o,in);
  76. }
  77. */
  78. //------------------------------------------------------------------------
  79. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  80. /*
  81. template <>
  82. ostream& operator << (quote_type1 o, const mysql_ColData<const_string>& in)
  83. {
  84.   return _manip(o,in);
  85. }
  86. */
  87. //------------------------------------------------------------------------
  88. ostream& operator << (ostream& o, const mysql_ColData<string>& in)
  89. {
  90. if (dont_quote_auto || (o.rdbuf() == cout.rdbuf()) || (o.rdbuf() == cerr.rdbuf())) return o << in.get_string();
  91.   if (in.escape_q()) {
  92.     char *s = new char[in.size()*2+1];
  93.     mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  94.     if (in.quote_q())
  95.       o << "'" << s << "'";
  96.     else
  97.       o << s;
  98.     delete[] s;
  99.   } else if (in.quote_q()) {
  100.     o << "'" << in.get_string() << "'";
  101.   } else {
  102.     o << in.get_string();
  103.   }
  104.   return o;
  105. }
  106. //------------------------------------------------------------------------
  107. ostream& operator << (ostream& o, const mysql_ColData<const_string>& in) {
  108. if (dont_quote_auto || (o.rdbuf() == cout.rdbuf()) || (o.rdbuf() == cerr.rdbuf())) return o << in.get_string();
  109.   if (in.escape_q()) {
  110.     char *s = new char[in.size()*2+1];
  111.     mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  112.     if (in.quote_q())
  113.       o << "'" << s << "'";
  114.     else
  115.       o << s;
  116.     delete[] s;
  117.   } else if (in.quote_q()) {
  118.     o << "'" << in.get_string() << "'";
  119.   } else {
  120.     o << in.get_string();
  121.   }
  122.   return o;
  123. }
  124. //------------------------------------------------------------------------
  125. SQLQuery& operator << (SQLQuery& o, const mysql_ColData<string>& in)
  126. {
  127.   if (dont_quote_auto)
  128.   {
  129.      o << in.get_string();
  130.      return o;
  131.   }
  132.   if (in.escape_q())
  133.   {
  134.     char *s = new char[in.size()*2+1];
  135.     mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  136.     if (in.quote_q())
  137.     {
  138.       o << "'" << s << "'";
  139.     }
  140.     else
  141.       o << s;
  142.     delete[] s;
  143.   }
  144.   else if (in.quote_q())
  145.   {
  146.     o << "'" << in.get_string() << "'";
  147.   }
  148.   else
  149.   {
  150.     o << in.get_string();
  151.   }
  152.   return o;
  153. }
  154. //-------------------------------------------------------------------------
  155. SQLQuery& operator << (SQLQuery& o, const mysql_ColData<const_string>& in)
  156. {
  157. if (dont_quote_auto) {o << in.get_string(); return o;}
  158.   if (in.escape_q()) {
  159.     char *s = new char[in.size()*2+1];
  160.     mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  161.     if (in.quote_q())
  162.       o << "'" << s << "'";
  163.     else
  164.       o << s;
  165.     delete[] s;
  166.   } else if (in.quote_q()) {
  167.     o << "'" << in.get_string() << "'";
  168.   } else {
  169.     o << in.get_string();
  170.   }
  171.   return o;
  172. }
  173. //-----------------------------------------------------------------------
  174. // moved from manip1.hh
  175. SQLQuery& operator << (SQLQuery& o, const char* txt)
  176. {
  177.     o << string(txt);
  178.     return o ;
  179. }
  180. //-----------------------------------------------------------------------
  181. // quote only manipulator
  182. SQLQueryParms & operator << (quote_only_type2 p, SQLString &in) {
  183.   if (in.is_string) {
  184.     SQLString in2 = "'" + in + "'";
  185.     in2.processed = true;
  186.     return *p.qparms << in2;
  187.   } else {
  188.     in.processed = true;
  189.     return *p.qparms << in;
  190.   }
  191. }
  192. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  193. /*
  194. template <>
  195. ostream& operator << (quote_only_type1 o, const mysql_ColData<string>& in) {
  196.   if (in.quote_q()) {
  197.     *o.ostr << "'" << in << "'";
  198.   } else {
  199.     *o.ostr << in;
  200.   }
  201.   return *o.ostr;
  202. }
  203. */
  204. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  205. /*
  206. template <>
  207. ostream& operator << (quote_only_type1 o, const mysql_ColData<const_string>& in) {
  208.   if (in.quote_q()) {
  209.     *o.ostr << "'" << in << "'";
  210.   } else {
  211.     *o.ostr << in;
  212.   }
  213.   return *o.ostr;
  214. }
  215. */
  216. // quote double only manipulator
  217. SQLQueryParms & operator << (quote_double_only_type2 p, SQLString &in) {
  218.   if (in.is_string) {
  219.     SQLString in2 = """ + in + """;
  220.     in2.processed = true;
  221.     return *p.qparms << in2;
  222.   } else {
  223.     in.processed = true;
  224.     return *p.qparms << in;
  225.   }
  226. }
  227. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  228. /*
  229. template <>
  230. ostream& operator << (quote_double_only_type1 o, const mysql_ColData<string>& in) {
  231.   if (in.quote_q()) {
  232.     *o.ostr << "'" << in << "'";
  233.   } else {
  234.     *o.ostr << in;
  235.   }
  236.   return *o.ostr;
  237. }
  238. */
  239. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  240. /*
  241. template <>
  242. ostream& operator << (quote_double_only_type1 o, const mysql_ColData<const_string>& in) {
  243.   if (in.quote_q()) {
  244.     *o.ostr << "'" << in << "'";
  245.   } else {
  246.     *o.ostr << in;
  247.   }
  248.   return *o.ostr;
  249. }
  250. */
  251. // escape manipulator
  252. SQLQueryParms & operator << (escape_type2 p, SQLString &in) {
  253.   if (in.is_string) {
  254.     if (in.dont_escape) {
  255.       in.processed = true;
  256.       return *p.qparms << in;
  257.     } else {
  258.       char* s = new char[in.size()*2+1];
  259.       mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  260.       SQLString in2 = s;
  261.       in2.processed = true;
  262.       *p.qparms << in2;
  263.       delete[] s;
  264.       return *p.qparms;
  265.     }
  266.   } else {
  267.     in.processed = true;
  268.     return *p.qparms << in;
  269.   }
  270. }
  271. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  272. /*
  273. template <>
  274. ostream& operator << (escape_type1 o, const string &in) {
  275.   char* s = new char[in.size()*2+1];
  276.   mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size());
  277.   *o.ostr << s;
  278.   delete[] s;
  279.   return *o.ostr;
  280. }
  281. */
  282. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  283. /*
  284. template <>
  285. ostream& operator << (escape_type1 o, const char* const &in) {
  286.   unsigned int size;
  287.   for (size=0; in[size]; size++);
  288.   char* s = new char[size*2+1];
  289.   mysql_escape_string(s, const_cast<char *>(in), size);
  290.   *o.ostr << s;
  291.   delete[] s; 
  292.   return *o.ostr;
  293. }
  294. */
  295. template <class Str>
  296. inline ostream& _manip (escape_type1 o, const mysql_ColData<Str>& in) {
  297.   if (in.escape_q()) {
  298.     char *s = new char[in.size()*2+1];
  299.     mysql_escape_string(s, const_cast<char *>(in.c_str()), in.size() );
  300.     delete[] s;
  301.   } else {
  302.     *o.ostr << in;
  303.   }
  304.   return *o.ostr;
  305. }
  306. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  307. /*
  308. template <>
  309. ostream& operator << (escape_type1 o, const mysql_ColData<string>& in) {
  310.   return _manip(o,in);
  311. }
  312. */
  313. // FIX: this function has moved to manip1.hh to avoid VC++ linker errors
  314. /*
  315. template <>
  316. ostream& operator << (escape_type1 o, const mysql_ColData<const_string>& in) {
  317.   return _manip(o,in);
  318. }
  319. */