custom.pl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:26k
源码类别:

模拟服务器

开发平台:

C/C++

  1. open (OUT0, ">custom.hh");
  2. open (OUT, ">custom-macros.hh");
  3. print OUT0 << "---";
  4. // This file is generated from the perl script custom.pl, please do 
  5. // not modify this file directly.
  6. #ifndef __sql_custom_h__
  7. #define __sql_custom_h__
  8. enum sql_dummy_type {sql_dummy};
  9. enum sql_cmp_type {sql_use_compare};
  10. inline int sql_cmp(const string &a, const string &b) {
  11.   return a.compare(b);
  12. }
  13. ---
  14. @types = ("char", "unsigned char", "tiny_int", "int", "unsigned int",
  15.   "short int", "unsigned short int");
  16. foreach $type (@types) {
  17.     print OUT0 << "---";
  18. inline int sql_cmp($type a,$type b) {
  19.   return a-b;
  20. }
  21. ---
  22. }
  23. @types = ("double", "float");
  24. foreach $type (@types) {
  25.     print OUT0 << "---";
  26. inline int sql_cmp($type a,$type b) {
  27.   if (a == b) return 0;
  28.   if (a <  b) return -1;
  29.   return 1;
  30. }
  31. ---
  32. }
  33. print OUT0 << "---";
  34. #ifndef NO_LONG_LONGS
  35. ---
  36. @types = ("longlong", "ulonglong");
  37. foreach $type (@types) {
  38.     print OUT0 << "---";
  39. inline int sql_cmp($type a,$type b) {
  40.   if (a == b) return 0;
  41.   if (a <  b) return -1;
  42.   return 1;
  43. }
  44. ---
  45. }
  46. print OUT0 << "---";
  47. #endif // NO_LONG_LONGS
  48. #include "custom-macros.hh"
  49. #endif
  50. ---
  51. print OUT << "---";
  52. // This file is generated from the perl script custom.pl, please do 
  53. // not modify this file directly unless you wish to cut out unnessary
  54. // macros.
  55. // ---------------------------------------------------
  56. //                Begin Mandatory Compare 
  57. // ---------------------------------------------------
  58. #define sql_compare_define(NAME) \
  59.     bool operator == (const NAME &other) const \
  60.       {return sql_compare_##NAME##<sql_dummy>(*this,other) == 0;} \
  61.     bool operator != (const NAME &other) const \
  62.       {return sql_compare_##NAME##<sql_dummy>(*this,other) != 0;} \
  63.     bool operator > (const NAME &other) const \
  64.       {return sql_compare_##NAME##<sql_dummy>(*this,other) >  0;} \
  65.     bool operator < (const NAME &other) const \
  66.       {return sql_compare_##NAME##<sql_dummy>(*this,other) <  0;} \
  67.     bool operator >= (const NAME &other) const \
  68.       {return sql_compare_##NAME##<sql_dummy>(*this,other) >= 0;} \
  69.     bool operator <= (const NAME &other) const \
  70.       {return sql_compare_##NAME##<sql_dummy>(*this,other) <= 0;} \
  71.     int cmp (const NAME &other) const \
  72.       {return sql_compare_##NAME##<sql_dummy>(*this,other);} \
  73.     int compare (const NAME &other) const \
  74.       {return sql_compare_##NAME##<sql_dummy>(*this,other);}
  75. ---
  76. foreach $j (1..26) {
  77.     $parm0 .= "T$j, C$j";
  78.     $parm0 .= ", " unless $j == 26;
  79.     $parm1 .= "C$j";
  80.     $parm1 .= ", " unless $j == 26;
  81. }
  82. print OUT << "---";
  83. #define sql_compare_define_0(NAME, $parm0)
  84. #define sql_construct_define_0(NAME, $parm0)
  85. #define sql_COMPARE__0(NAME, $parm1)
  86. #define sql_compare_type_def_0(NAME, WHAT, NUM) \
  87.   sql_compare_type_def_##NUM (NAME, WHAT, NUM)
  88. #define sql_compare_type_defe_0(NAME, WHAT, NUM) \
  89.   sql_compare_type_defe_##NUM (NAME, WHAT, NUM)
  90. // ---------------------------------------------------
  91. //                 End Mandatory Compare 
  92. // ---------------------------------------------------
  93. ---
  94. foreach $i (1..26) {
  95.   $compr = ""; $parm2 = ""; $define = "";
  96.   $compr = "    int cmp; \n" unless $i == 1;
  97.   $compp = "";
  98.   foreach $j (1..$i) {
  99.       $compr .= "    if (cmp = sql_cmp(x.##C$j , y.##C$j )) return cmp; \n"
  100.                                                               unless $j == $i;
  101.       $compr .= "    return sql_cmp(x.##C$j , y.##C$j );"   if $j == $i;
  102.       $parm2 .= "const T$j &p$j";
  103.       $parm2 .= ", "  unless $j == $i;
  104.       $define.= "C$j (p$j)";
  105.       $define.= ", "  unless $j == $i;
  106.       $set   .= "    C$j = p$j;\n";
  107.       $compp .= "true";
  108.       $compp .= ", " unless $j == $i;
  109.   }
  110.   print OUT << "---";
  111. // ---------------------------------------------------
  112. //                   Begin Compare $i
  113. // ---------------------------------------------------
  114. #define sql_compare_define_$i(NAME, $parm0) \
  115.   NAME ($parm2) : $define {} \
  116.   void set  ($parm2) { \
  117. $set \
  118.   } \
  119.   sql_compare_define(NAME)
  120. #define sql_construct_define_$i(NAME, $parm0) \
  121.   void set  ($parm2) { \
  122. $set \
  123.   } \
  124.   NAME ($parm2) : $define {}
  125. #define sql_compare_type_def_$i(NAME, WHAT, NUM) \
  126.   return WHAT##_list(d, m, $compp)
  127. #define sql_compare_type_defe_$i(NAME, WHAT, NUM) \
  128.   return WHAT##_list(d, c, m, $compp)
  129. #define sql_COMPARE__$i(NAME, $parm1) \
  130.   template <sql_dummy_type dummy> \
  131.   int sql_compare_##NAME (const NAME &x, const NAME &y) { \
  132. $compr \
  133.   } \
  134.   template <sql_dummy_type dummy> \
  135.   int compare (const NAME &x, const NAME &y) { \
  136. $compr \
  137.   }
  138. // ---------------------------------------------------
  139. //                   End Compare $i
  140. // ---------------------------------------------------
  141. ---
  142. }
  143. print OUT << "---";
  144. ---
  145. foreach $i (1..26) {
  146.     $parm_complete = ""; 
  147.     $parm_order = ""; $parm_order2c = "";
  148.     $parm_simple = ""; $parm_simple2c = "";
  149.     $parm_simple_b = ""; $parm_simple2c_b = "";
  150.     $parm_names = ""; $parm_names2c = "";
  151.     $defs = ""; $popul = ""; $parmc = ""; $parmC = "";
  152.     $value_list = ""; $field_list = ""; $equal_list = "";
  153.     $value_list_cus = ""; $cus_field_list = ""; $cus_equal_list = "";
  154.     $create_bool = ""; $create_list = "";
  155.     $cusparms1 = ""; $cusparms2 = ""; $cusparmsv = "";    
  156.     $cusparms11 = ""; $cusparms22 = "";
  157.     $names = "";$enums = "";
  158.     foreach $j (1 .. $i) {
  159.         $parm_complete .= "T$j, I$j, N$j, O$j";
  160. $parm_complete .= ", " unless $j == $i;
  161. $parm_order    .= "T$j, I$j, O$j";
  162. $parm_order    .= ", " unless $j == $i;
  163.         $parm_order2c  .= "T$j, I$j, #I$j, O$j";
  164. $parm_order2c  .= ", " unless $j == $i;
  165.         $parm_names    .= "T$j, I$j, N$j";
  166. $parm_names    .= ", " unless $j == $i;
  167. $parm_names2c  .= "T$j, I$j, N$j, ". ($j-1);
  168. $parm_names2c  .= ", " unless $j == $i;
  169. $parm_simple   .= "T$j, I$j";
  170. $parm_simple   .= ", " unless $j == $i;
  171. $parm_simple2c .= "T$j, I$j, #I$j, ". ($j-1);
  172. $parm_simple2c .= ", " unless $j == $i;
  173. $parm_simple_b   .= "T$j, I$j";
  174. $parm_simple_b   .= ", " unless $j == $i;
  175. $parm_simple2c_b .= "T$j, I$j, ". ($j-1);
  176. $parm_simple2c_b .= ", " unless $j == $i;
  177. $defs  .= "    T$j I$j;";
  178. $defs  .= "n" unless $j == $i;
  179. $popul .= "    s->##I$j = row[ O$j ];";
  180. $popul .= "n" unless $j == $i;
  181.         $names .= "    N$j ";
  182. $names .= ",n" unless $j == $i;
  183.         $enums .= "    NAME##_##I$j";
  184. $enums .= ",n" unless $j == $i;
  185.         $field_list .= "    s << obj.manip << obj.obj->names[".($j-1)."]";
  186. $field_list .= " << obj.delem;n" unless $j == $i;
  187. $value_list .= "    s << obj.manip << obj.obj->##I$j";
  188. $value_list .= " << obj.delem;n" unless $j == $i;
  189.         $create_bool .= "    if (i$j) (*include)[".($j-1)."]=true;n";
  190.         $create_list .= "    if (i$j == NAME##_NULL) return;n" unless $i == 1;
  191.         $create_list .= "    (*include)[i$j]=true;n";
  192.         $value_list_cus .= "    if ((*obj.include)[".($j-1)."]) { n";
  193. $value_list_cus .= "      if (before) s << obj.delem;n" unless $j == 1;
  194.         $value_list_cus .= "      s << obj.manip << obj.obj->##I$j;n";
  195. $value_list_cus .= "      before = true; n" unless $j == $i;
  196. $value_list_cus .= "     } n";
  197.         $cus_field_list .= "    if ((*obj.include)[".($j-1)."]) { n";
  198. $cus_field_list .= "      if (before) s << obj.delem;n" unless $j == 1;
  199.         $cus_field_list .= "      s << obj.manip << obj.obj->names[".($j-1)."];n";
  200. $cus_field_list .= "      before = true; n" unless $j == $i;
  201. $cus_field_list .= "     } n";
  202.         $cus_equal_list .= "    if ((*obj.include)[".($j-1)."]) { n";
  203. $cus_equal_list .= "      if (before) s << obj.delem;n" unless $j == 1;
  204.         $cus_equal_list .= "      s << obj.obj->names[".($j-1)."] << obj.comp";
  205.         $cus_equal_list .=        " << obj.manip << obj.obj->##I$j;n";
  206. $cus_equal_list .= "      before = true; n" unless $j == $i;
  207. $cus_equal_list .= "     } n";
  208.         $equal_list .= "    s << obj.obj->names[".($j-1)."] << obj.comp";
  209.         $equal_list .= " << obj.manip << obj.obj->##I$j";
  210. $equal_list .= " << obj.delem;n" unless $j == $i;
  211.         $cusparms1  .= "bool i$j"         if     $j == 1;
  212. $cusparms1  .= "bool i$j = false" unless $j == 1;
  213. $cusparms1  .= ", " unless $j == $i;
  214.         $cusparms11  .= "bool i$j" ;
  215. $cusparms11  .= ", " unless $j == $i;
  216. $cusparms2  .= "##NAME##_enum i$j" if $j == 1;
  217. $cusparms2  .= "##NAME##_enum i$j = ##NAME##_NULL" unless $j == 1;
  218. $cusparms2  .= ", " unless $j == $i;
  219. $cusparms22  .= "##NAME##_enum i$j";
  220. $cusparms22  .= ", " unless $j == $i;
  221.         $cusparmsv  .= "i$j";
  222. $cusparmsv  .= ", " unless $j == $i;
  223. $parmC .= "T$j, I$j";
  224. $parmC .= ", " unless $j == 26;
  225.         $parmc .= "I$j";
  226. $parmc .= ", " unless $j == 26;
  227.     }
  228.     foreach $j ($i+1 .. 26) {
  229. $parmC .= "0, 0";
  230. $parmC .= ", " unless $j == 26;
  231.         $parmc .= "0";
  232. $parmc .= ", " unless $j == 26;
  233.     }
  234.     print OUT << "---";
  235. // ---------------------------------------------------
  236. //                  Begin Create $i
  237. // ---------------------------------------------------
  238. ---
  239.     $out = <<"---";
  240. #define sql_create_basic_c_order_$i(NAME, CMP, CONTR, $parm_order)
  241.   struct NAME; 
  242.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  243.   struct NAME { 
  244. $defs 
  245.     NAME () {} 
  246.     NAME (const MysqlRow &row);
  247.     sql_compare_define_##CMP(NAME, $parmC)
  248.   }; 
  249.   template <sql_dummy_type dummy> 
  250.     void populate_##NAME (NAME *s, const MysqlRow &row) { 
  251. $popul 
  252.   } 
  253.   inline NAME##::##NAME (const MysqlRow &row) 
  254.     {populate_##NAME##<sql_dummy>(this, row);} 
  255.   sql_COMPARE__##CMP##(NAME, $parmc )
  256. ---
  257.     print OUT &prepare($out);
  258.     $out = <<"---";
  259. #define sql_create_complete_$i(NAME, CMP, CONTR, $parm_complete) 
  260.   struct NAME; 
  261.   enum NAME##_enum { 
  262. $enums 
  263.     ,NAME##_NULL 
  264.   }; 
  265.   template <class Manip>
  266.   class NAME##_value_list { 
  267.   /*friend ostream& operator << <> (ostream&, const NAME##_value_list&); */
  268.   public: 
  269.     const NAME *obj;
  270.     cchar *delem;
  271.     Manip manip;
  272.   public: 
  273.     NAME##_value_list (const NAME *o, cchar *d, Manip m) 
  274.       : obj(o), delem(d), manip(m) {} 
  275.   };
  276.   template <class Manip>
  277.   class NAME##_##field_list {
  278.   /* friend ostream& operator << <> (ostream&, const NAME##_field_list&); */
  279.   public: 
  280.     const NAME *obj; 
  281.     cchar *delem;
  282.     Manip manip;
  283.   public: 
  284.     NAME##_field_list (const NAME *o, cchar *d, Manip m) 
  285.       : obj(o), delem(d), manip(m) {} 
  286.   };
  287.   template <class Manip>
  288.   class NAME##_equal_list { 
  289.   /* friend ostream& operator << <> (ostream&, const NAME##_equal_list&); */
  290.   public: 
  291.     const NAME *obj;
  292.     cchar *delem;
  293.     cchar *comp;
  294.     Manip manip;
  295.   public: 
  296.     NAME##_equal_list (const NAME *o, cchar *d, cchar *c, Manip m) 
  297.       : obj(o), delem(d), comp(c), manip(m) {}
  298.   };
  299.   template <class Manip>
  300.   class NAME##_cus_value_list {
  301.   /* friend ostream& operator << <> (ostream&, 
  302.      const NAME##_cus_value_list<Manip>&); */
  303.   public:
  304.     const NAME *obj;
  305.     cchar *delem;
  306.     Manip manip;
  307.     vector<bool> *include;
  308.     bool del_vector;
  309.   public: 
  310.     ~##NAME##_cus_value_list () {if (del_vector) delete include;} 
  311.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, $cusparms11);
  312.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, $cusparms22); 
  313.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m ,vector<bool>)
  314.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  315.   };
  316.   template <class Manip>
  317.   class NAME##_cus_field_list { 
  318.   /* friend ostream& operator << <> (ostream&, 
  319.         const NAME##_cus_field_list<Manip>&); */
  320.   public:
  321.     const NAME *obj; 
  322.     cchar *delem;
  323.     Manip manip;
  324.     vector<bool> *include; 
  325.     bool del_vector; 
  326.   public: 
  327.     ~##NAME##_cus_field_list () {if (del_vector) delete include;} 
  328.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, $cusparms11); 
  329.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, $cusparms22); 
  330.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, vector<bool> *i) 
  331.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  332.   };
  333.  template <class Manip>
  334.  class NAME##_cus_equal_list {
  335.  /* friend ostream& operator << <> (ostream&, 
  336.   const NAME##_cus_equal_list<Manip>&); */
  337.   public:
  338.     const NAME *obj;
  339.     vector<bool> *include;
  340.     bool del_vector;
  341.     cchar *delem;
  342.     cchar *comp;
  343.     Manip manip;
  344.   public:
  345.     ~##NAME##_##cus_equal_list () {if (del_vector) delete include;}
  346.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, $cusparms11); 
  347.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, $cusparms22); 
  348.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, vector<bool> *i) 
  349.       : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}
  350.   };
  351.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  352.   struct NAME { 
  353. $defs 
  354.     NAME () {} 
  355.     NAME (const MysqlRow &row);
  356.     void set (const MysqlRow &row);
  357.     sql_compare_define_##CMP(NAME, $parmC)
  358.     sql_construct_define_##CONTR(NAME, $parmC)
  359.     static char *names[];
  360.     static char *_table;
  361.     static char *& table() {return _table;}
  362.     /* cus_data */
  363.     NAME##_cus_value_list<quote_type0> value_list($cusparms1) const {
  364.       return value_list(",", mysql_quote, $cusparmsv);
  365.     }
  366.     NAME##_cus_value_list<quote_type0> value_list($cusparms2) const {
  367.       return value_list(",", mysql_quote, $cusparmsv);
  368.     }
  369.     NAME##_cus_value_list<quote_type0> value_list(vector<bool> *i) const {
  370.       return value_list(",", mysql_quote, i);
  371.     }
  372.     NAME##_cus_value_list<quote_type0> value_list(sql_cmp_type sc) const {
  373.       return value_list(",", mysql_quote, sc);
  374.     }
  375.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, $cusparms1) const {
  376.       return value_list(d, mysql_quote, $cusparmsv);
  377.     }
  378.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, $cusparms2) const {
  379.       return value_list(d, mysql_quote, $cusparmsv);
  380.     }
  381.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  382. vector<bool> *i) const {
  383.       return value_list(d, mysql_quote, i);
  384.     }
  385.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  386. sql_cmp_type sc) const {
  387.       return value_list(d, mysql_quote, sc);
  388.     }
  389.     template <class Manip>
  390.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  391.   $cusparms1) const; 
  392.     template <class Manip>
  393.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  394.   $cusparms2) const; 
  395.     template <class Manip>
  396.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  397.   vector<bool> *i) const;
  398.     template <class Manip>
  399.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  400.   sql_cmp_type sc) const;
  401.     /* cus field */
  402.     NAME##_cus_field_list<do_nothing_type0> field_list($cusparms1) const {
  403.       return field_list(",", mysql_do_nothing, $cusparmsv);
  404.     }
  405.     NAME##_cus_field_list<do_nothing_type0> field_list($cusparms2) const {
  406.       return field_list(",", mysql_do_nothing, $cusparmsv);
  407.     }
  408.     NAME##_cus_field_list<do_nothing_type0> field_list(vector<bool> *i) const {
  409.       return field_list(",", mysql_do_nothing, i);
  410.     }
  411.     NAME##_cus_field_list<do_nothing_type0> field_list(sql_cmp_type sc) const
  412.     {
  413.       return field_list(",", mysql_do_nothing, sc);
  414.     }
  415.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  416.        $cusparms1) const {
  417.       return field_list(d, mysql_do_nothing, $cusparmsv);
  418.     }
  419.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d,
  420.        $cusparms2) const {
  421.       return field_list(d, mysql_do_nothing, $cusparmsv);
  422.     }
  423.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  424. vector<bool> *i) const {
  425.       return field_list(d, mysql_do_nothing, i);
  426.     }
  427.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  428. sql_cmp_type sc) const {
  429.       return field_list(d, mysql_do_nothing, sc);
  430.     }
  431.     template <class Manip>
  432.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  433.     $cusparms1) const; 
  434.     template <class Manip>
  435.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  436.     $cusparms2) const; 
  437.     template <class Manip>
  438.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  439.     vector<bool> *i) const;
  440.     template <class Manip>
  441.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m, 
  442.     sql_cmp_type sc) const;
  443.     /* cus equal */
  444.     NAME##_cus_equal_list<quote_type0> equal_list($cusparms1) const {
  445.       return equal_list(",", " = ", mysql_quote, $cusparmsv);
  446.     }
  447.     NAME##_cus_equal_list<quote_type0> equal_list($cusparms2) const {
  448.       return equal_list(",", " = ", mysql_quote, $cusparmsv);
  449.     }
  450.     NAME##_cus_equal_list<quote_type0> equal_list(vector<bool> *i) const {
  451.       return equal_list(",", " = ", mysql_quote, i);
  452.     }
  453.     NAME##_cus_equal_list<quote_type0> equal_list(sql_cmp_type sc) const {
  454.       return equal_list(",", " = ", mysql_quote, sc);
  455.     }
  456.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, $cusparms1) const {
  457.       return equal_list(d, " = ", mysql_quote, $cusparmsv);
  458.     }
  459.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, $cusparms2) const {
  460.       return equal_list(d, " = ", mysql_quote, $cusparmsv);
  461.     }
  462.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  463. vector<bool> *i) const {
  464.       return equal_list(d, " = ", mysql_quote, i);
  465.     }
  466.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  467. sql_cmp_type sc) const {
  468.       return equal_list(d, " = ", mysql_quote, sc);
  469.     }
  470.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  471.                                                 $cusparms1) const {
  472.       return equal_list(d, c, mysql_quote, $cusparmsv);
  473.     }
  474.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  475.                                                 $cusparms2) const {
  476.       return equal_list(d, c, mysql_quote, $cusparmsv);
  477.     }
  478.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  479. vector<bool> *i) const {
  480.       return equal_list(d, c, mysql_quote, i);
  481.     }
  482.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  483. sql_cmp_type sc) const {
  484.       return equal_list(d, c, mysql_quote, sc);
  485.     }
  486.     template <class Manip>
  487.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  488.     $cusparms1) const; 
  489.     template <class Manip>
  490.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  491.     $cusparms2) const; 
  492.     template <class Manip>
  493.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  494.     vector<bool> *i) const;
  495.     template <class Manip>
  496.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  497.     sql_cmp_type sc) const;
  498.     NAME##_value_list<quote_type0> value_list() const {
  499.       return value_list(",", mysql_quote);}
  500.     NAME##_value_list<quote_type0> value_list(cchar *d) const {
  501.       return value_list(d, mysql_quote);}
  502.     template <class Manip> 
  503.     NAME##_value_list<Manip> value_list(cchar *d, Manip m) const; 
  504.     NAME##_field_list<do_nothing_type0> field_list() const {
  505.       return field_list(",", mysql_do_nothing);}
  506.     NAME##_field_list<do_nothing_type0> field_list(cchar *d) const {
  507.       return field_list(d, mysql_do_nothing);}
  508.     template <class Manip>
  509.     NAME##_field_list<Manip> field_list(cchar *d, Manip m) const; 
  510.     NAME##_equal_list<quote_type0> equal_list(cchar *d = ",", 
  511.                                               cchar *c = " = ") const{
  512.       return equal_list(d, c, mysql_quote);}
  513.     template <class Manip>
  514.     NAME##_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m) const; 
  515.     
  516.   }; 
  517.   char *##NAME##::names[] = { 
  518. $names 
  519.   }; 
  520.   char *##NAME##::_table = #NAME ;  
  521.   template <class Manip>
  522.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  523.   (const NAME *o, cchar *d, Manip m, $cusparms11) 
  524.   { 
  525.     delem = d;
  526.     manip = m;
  527.     del_vector = true;
  528.     obj = o; 
  529.     include = new vector<bool>($i, false);
  530. $create_bool 
  531.   } 
  532.   template <class Manip>
  533.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  534.   (const NAME *o, cchar *d, Manip m, $cusparms22) { 
  535.     delem = d;
  536.     manip = m;
  537.     del_vector = true; 
  538.     obj = o; 
  539.     include = new vector<bool>($i, false); 
  540. $create_list 
  541.   }
  542.   template <class Manip>
  543.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  544.   (const NAME *o, cchar *d, Manip m, $cusparms11) {
  545.     delem = d;
  546.     manip = m;
  547.     del_vector = true; 
  548.     obj = o; 
  549.     include = new vector<bool>($i, false); 
  550. $create_bool 
  551.   } 
  552.   template <class Manip>
  553.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  554.   (const NAME *o, cchar *d, Manip m, $cusparms22) { 
  555.     delem = d;
  556.     manip = m;
  557.     del_vector = true; 
  558.     obj = o; 
  559.     include = new vector<bool>($i, false); 
  560. $create_list 
  561.   }
  562.   template <class Manip>
  563.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  564.   (const NAME *o, cchar *d, cchar *c, Manip m, $cusparms11) { 
  565.     delem = d;
  566.     comp = c;
  567.     manip = m;
  568.     del_vector = true; 
  569.     obj = o; 
  570.     include = new vector<bool>($i, false); 
  571. $create_bool 
  572.   } 
  573.   template <class Manip>
  574.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  575.   (const NAME *o, cchar *d, cchar *c, Manip m, $cusparms22) { 
  576.     delem = d;
  577.     comp = c;
  578.     manip = m;
  579.     del_vector = true; 
  580.     obj = o; 
  581.     include = new vector<bool>($i, false); 
  582. $create_list 
  583.   }
  584.   template <class Manip>
  585.   ostream& operator << (ostream& s, const NAME##_value_list<Manip>& obj) { 
  586. $value_list; 
  587.     return s; 
  588.   } 
  589.   template <class Manip>
  590.   ostream& operator << (ostream& s, const NAME##_field_list<Manip>& obj) { 
  591. $field_list; 
  592.     return s; 
  593.   } 
  594.   template <class Manip>
  595.   ostream& operator << (ostream& s, const NAME##_equal_list<Manip>& obj) { 
  596. $equal_list; 
  597.     return s; 
  598.   } 
  599.   template <class Manip>
  600.   ostream& operator << (ostream& s, const NAME##_cus_value_list<Manip>& obj) { 
  601.     bool before = false; 
  602. $value_list_cus 
  603.     return s; 
  604.   } 
  605.   template <class Manip>
  606.   ostream& operator << (ostream& s, const NAME##_cus_field_list<Manip>& obj) { 
  607.     bool before = false; 
  608. $cus_field_list 
  609.     return s; 
  610.   } 
  611.   template <class Manip>
  612.   ostream& operator << (ostream& s, const NAME##_cus_equal_list<Manip>& obj) { 
  613.     bool before = false; 
  614. $cus_equal_list 
  615.     return s; 
  616.   } 
  617.   template <class Manip>
  618.   inline NAME##_value_list<Manip> NAME##::value_list(cchar *d, Manip m) const { 
  619.     return NAME##_value_list<Manip> (this, d, m); 
  620.   } 
  621.   template <class Manip>
  622.   inline NAME##_field_list<Manip> NAME##::field_list(cchar *d, Manip m) const { 
  623.     return NAME##_field_list<Manip> (this, d, m); 
  624.   } 
  625.   template <class Manip>
  626.   inline NAME##_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m) const { 
  627.     return NAME##_equal_list<Manip> (this, d, c, m); 
  628.   } 
  629.  
  630.   template <class Manip>
  631.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  632.        $cusparms11) const {
  633.     return NAME##_cus_value_list<Manip> (this, d, m, $cusparmsv); 
  634.   } 
  635.   template <class Manip>
  636.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  637.  $cusparms11) const { 
  638.     return NAME##_cus_field_list<Manip> (this, d, m, $cusparmsv); 
  639.   } 
  640.   template <class Manip>
  641.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m,
  642.  $cusparms11) const { 
  643.     return NAME##_cus_equal_list<Manip> (this, d, c, m, $cusparmsv); 
  644.   } 
  645.   template <class Manip>
  646.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  647.        $cusparms22) const { 
  648.     return NAME##_cus_value_list<Manip> (this, d, m, $cusparmsv); 
  649.   } 
  650.   template <class Manip>
  651.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  652.  $cusparms22) const {
  653.     return NAME##_cus_field_list<Manip> (this, d, m, $cusparmsv); 
  654.   } 
  655.   template <class Manip>
  656.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m, 
  657.  $cusparms22) const { 
  658.     return NAME##_cus_equal_list<Manip> (this, d, c, m, $cusparmsv); 
  659.   } 
  660.   template <class Manip>
  661.   inline NAME##_cus_value_list<Manip> 
  662.   NAME##::value_list(cchar *d, Manip m, sql_cmp_type sc) const {
  663.     sql_compare_type_def_##CMP (NAME, value, NUM);
  664.   }
  665.   template <class Manip>
  666.   inline NAME##_cus_field_list<Manip> 
  667.   NAME##::field_list(cchar *d, Manip m, sql_cmp_type sc) const {
  668.     sql_compare_type_def_##CMP (NAME, field, NUM);
  669.   }
  670.   template <class Manip>
  671.   inline NAME##_cus_equal_list<Manip> 
  672.   NAME##::equal_list(cchar *d, cchar *c, Manip m, sql_cmp_type sc) const {
  673.     sql_compare_type_defe_##CMP (NAME, equal, NUM);
  674.   }
  675.   template <sql_dummy_type dummy> 
  676.   void populate_##NAME (NAME *s, const MysqlRow &row) { 
  677. $popul
  678.   } 
  679.   inline NAME##::##NAME (const MysqlRow &row) 
  680.                                         {populate_##NAME##<sql_dummy>(this, row);}
  681.   inline void NAME##::set (const MysqlRow &row)
  682.                                         {populate_##NAME##<sql_dummy>(this, row);}
  683.   sql_COMPARE__##CMP##(NAME, $parmc )
  684. ---
  685. print OUT &prepare($out);
  686. #
  687. # short cut defs
  688. #
  689. print OUT << "---";
  690. #define sql_create_basic_$i(NAME, CMP, CONTR, $parm_simple_b) \
  691.   sql_create_basic_c_order_$i(NAME, CMP, CONTR, $parm_simple2c_b)
  692. #define sql_create_$i(NAME, CMP, CONTR, $parm_simple) \
  693.   sql_create_complete_$i(NAME, CMP, CONTR, $parm_simple2c) \
  694. #define sql_create_c_order_$i(NAME, CMP, CONTR, $parm_order) \
  695.   sql_create_complete_$i(NAME, CMP, CONTR, $parm_order2c)
  696. #define sql_create_c_names_$i(NAME, CMP, CONTR, $parm_names) \
  697.   sql_create_complete_$i(NAME, CMP, CONTR, $parm_names2c)
  698. // ---------------------------------------------------
  699. //                  End Create $i
  700. // ---------------------------------------------------
  701. ---
  702. }
  703. sub prepare {
  704.     local $_ = @_[0];
  705.     s/n+$//;
  706.     s/n[n ]*n/n/g; 
  707.     s/n+/\n/g;
  708.     $_ .= "nn";
  709.     return $_;
  710. }