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

模拟服务器

开发平台:

C/C++

  1.       return equal_list(d, " = ", mysql_quote, sc);
  2.     }
  3.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  4.                                                 bool i1) const {
  5.       return equal_list(d, c, mysql_quote, i1);
  6.     }
  7.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  8.                                                 ##NAME##_enum i1) const {
  9.       return equal_list(d, c, mysql_quote, i1);
  10.     }
  11.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  12. vector<bool> *i) const {
  13.       return equal_list(d, c, mysql_quote, i);
  14.     }
  15.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  16. sql_cmp_type sc) const {
  17.       return equal_list(d, c, mysql_quote, sc);
  18.     }
  19.     template <class Manip>
  20.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  21.     bool i1) const; 
  22.     template <class Manip>
  23.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  24.     ##NAME##_enum i1) const; 
  25.     template <class Manip>
  26.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  27.     vector<bool> *i) const;
  28.     template <class Manip>
  29.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  30.     sql_cmp_type sc) const;
  31.     NAME##_value_list<quote_type0> value_list() const {
  32.       return value_list(",", mysql_quote);}
  33.     NAME##_value_list<quote_type0> value_list(cchar *d) const {
  34.       return value_list(d, mysql_quote);}
  35.     template <class Manip> 
  36.     NAME##_value_list<Manip> value_list(cchar *d, Manip m) const; 
  37.     NAME##_field_list<do_nothing_type0> field_list() const {
  38.       return field_list(",", mysql_do_nothing);}
  39.     NAME##_field_list<do_nothing_type0> field_list(cchar *d) const {
  40.       return field_list(d, mysql_do_nothing);}
  41.     template <class Manip>
  42.     NAME##_field_list<Manip> field_list(cchar *d, Manip m) const; 
  43.     NAME##_equal_list<quote_type0> equal_list(cchar *d = ",", 
  44.                                               cchar *c = " = ") const{
  45.       return equal_list(d, c, mysql_quote);}
  46.     template <class Manip>
  47.     NAME##_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m) const; 
  48.   }; 
  49.   char *##NAME##::names[] = { 
  50.     N1  
  51.   }; 
  52.   char *##NAME##::_table = #NAME ;  
  53.   template <class Manip>
  54.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  55.   (const NAME *o, cchar *d, Manip m, bool i1) 
  56.   { 
  57.     delem = d;
  58.     manip = m;
  59.     del_vector = true;
  60.     obj = o; 
  61.     include = new vector<bool>(1, false);
  62.     if (i1) (*include)[0]=true;
  63.   } 
  64.   template <class Manip>
  65.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  66.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1) { 
  67.     delem = d;
  68.     manip = m;
  69.     del_vector = true; 
  70.     obj = o; 
  71.     include = new vector<bool>(1, false); 
  72.     (*include)[i1]=true;
  73.   }
  74.   template <class Manip>
  75.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  76.   (const NAME *o, cchar *d, Manip m, bool i1) {
  77.     delem = d;
  78.     manip = m;
  79.     del_vector = true; 
  80.     obj = o; 
  81.     include = new vector<bool>(1, false); 
  82.     if (i1) (*include)[0]=true;
  83.   } 
  84.   template <class Manip>
  85.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  86.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1) { 
  87.     delem = d;
  88.     manip = m;
  89.     del_vector = true; 
  90.     obj = o; 
  91.     include = new vector<bool>(1, false); 
  92.     (*include)[i1]=true;
  93.   }
  94.   template <class Manip>
  95.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  96.   (const NAME *o, cchar *d, cchar *c, Manip m, bool i1) { 
  97.     delem = d;
  98.     comp = c;
  99.     manip = m;
  100.     del_vector = true; 
  101.     obj = o; 
  102.     include = new vector<bool>(1, false); 
  103.     if (i1) (*include)[0]=true;
  104.   } 
  105.   template <class Manip>
  106.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  107.   (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1) { 
  108.     delem = d;
  109.     comp = c;
  110.     manip = m;
  111.     del_vector = true; 
  112.     obj = o; 
  113.     include = new vector<bool>(1, false); 
  114.     (*include)[i1]=true;
  115.   }
  116.   template <class Manip>
  117.   ostream& operator << (ostream& s, const NAME##_value_list<Manip>& obj) { 
  118.     s << obj.manip << obj.obj->##I1; 
  119.     return s; 
  120.   } 
  121.   template <class Manip>
  122.   ostream& operator << (ostream& s, const NAME##_field_list<Manip>& obj) { 
  123.     s << obj.manip << obj.obj->names[0]; 
  124.     return s; 
  125.   } 
  126.   template <class Manip>
  127.   ostream& operator << (ostream& s, const NAME##_equal_list<Manip>& obj) { 
  128.     s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1; 
  129.     return s; 
  130.   } 
  131.   template <class Manip>
  132.   ostream& operator << (ostream& s, const NAME##_cus_value_list<Manip>& obj) { 
  133.     bool before = false; 
  134.     if ((*obj.include)[0]) { 
  135.       s << obj.manip << obj.obj->##I1;
  136.      } 
  137.     return s; 
  138.   } 
  139.   template <class Manip>
  140.   ostream& operator << (ostream& s, const NAME##_cus_field_list<Manip>& obj) { 
  141.     bool before = false; 
  142.     if ((*obj.include)[0]) { 
  143.       s << obj.manip << obj.obj->names[0];
  144.      } 
  145.     return s; 
  146.   } 
  147.   template <class Manip>
  148.   ostream& operator << (ostream& s, const NAME##_cus_equal_list<Manip>& obj) { 
  149.     bool before = false; 
  150.     if ((*obj.include)[0]) { 
  151.       s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1;
  152.      } 
  153.     return s; 
  154.   } 
  155.   template <class Manip>
  156.   inline NAME##_value_list<Manip> NAME##::value_list(cchar *d, Manip m) const { 
  157.     return NAME##_value_list<Manip> (this, d, m); 
  158.   } 
  159.   template <class Manip>
  160.   inline NAME##_field_list<Manip> NAME##::field_list(cchar *d, Manip m) const { 
  161.     return NAME##_field_list<Manip> (this, d, m); 
  162.   } 
  163.   template <class Manip>
  164.   inline NAME##_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m) const { 
  165.     return NAME##_equal_list<Manip> (this, d, c, m); 
  166.   } 
  167.   template <class Manip>
  168.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  169.        bool i1) const {
  170.     return NAME##_cus_value_list<Manip> (this, d, m, i1); 
  171.   } 
  172.   template <class Manip>
  173.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  174.  bool i1) const { 
  175.     return NAME##_cus_field_list<Manip> (this, d, m, i1); 
  176.   } 
  177.   template <class Manip>
  178.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m,
  179.  bool i1) const { 
  180.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1); 
  181.   } 
  182.   template <class Manip>
  183.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  184.        ##NAME##_enum i1) const { 
  185.     return NAME##_cus_value_list<Manip> (this, d, m, i1); 
  186.   } 
  187.   template <class Manip>
  188.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  189.  ##NAME##_enum i1) const {
  190.     return NAME##_cus_field_list<Manip> (this, d, m, i1); 
  191.   } 
  192.   template <class Manip>
  193.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m, 
  194.  ##NAME##_enum i1) const { 
  195.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1); 
  196.   } 
  197.   template <class Manip>
  198.   inline NAME##_cus_value_list<Manip> 
  199.   NAME##::value_list(cchar *d, Manip m, sql_cmp_type sc) const {
  200.     sql_compare_type_def_##CMP (NAME, value, NUM);
  201.   }
  202.   template <class Manip>
  203.   inline NAME##_cus_field_list<Manip> 
  204.   NAME##::field_list(cchar *d, Manip m, sql_cmp_type sc) const {
  205.     sql_compare_type_def_##CMP (NAME, field, NUM);
  206.   }
  207.   template <class Manip>
  208.   inline NAME##_cus_equal_list<Manip> 
  209.   NAME##::equal_list(cchar *d, cchar *c, Manip m, sql_cmp_type sc) const {
  210.     sql_compare_type_defe_##CMP (NAME, equal, NUM);
  211.   }
  212.   template <sql_dummy_type dummy> 
  213.   void populate_##NAME (NAME *s, const MysqlRow &row) { 
  214.     s->##I1 = row[ O1 ];
  215.   } 
  216.   inline NAME##::##NAME (const MysqlRow &row) 
  217.                                         {populate_##NAME##<sql_dummy>(this, row);}
  218.   inline void NAME##::set (const MysqlRow &row)
  219.                                         {populate_##NAME##<sql_dummy>(this, row);}
  220.   sql_COMPARE__##CMP##(NAME, I1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  221. #define sql_create_basic_1(NAME, CMP, CONTR, T1, I1) 
  222.   sql_create_basic_c_order_1(NAME, CMP, CONTR, T1, I1, 0)
  223. #define sql_create_1(NAME, CMP, CONTR, T1, I1) 
  224.   sql_create_complete_1(NAME, CMP, CONTR, T1, I1, #I1, 0) 
  225. #define sql_create_c_order_1(NAME, CMP, CONTR, T1, I1, O1) 
  226.   sql_create_complete_1(NAME, CMP, CONTR, T1, I1, #I1, O1)
  227. #define sql_create_c_names_1(NAME, CMP, CONTR, T1, I1, N1) 
  228.   sql_create_complete_1(NAME, CMP, CONTR, T1, I1, N1, 0)
  229. // ---------------------------------------------------
  230. //                  End Create 1
  231. // ---------------------------------------------------
  232. // ---------------------------------------------------
  233. //                  Begin Create 2
  234. // ---------------------------------------------------
  235. #define sql_create_basic_c_order_2(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2)
  236.   struct NAME; 
  237.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  238.   struct NAME { 
  239.     T1 I1;
  240.     T2 I2; 
  241.     NAME () {} 
  242.     NAME (const MysqlRow &row);
  243.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  244.   }; 
  245.   template <sql_dummy_type dummy> 
  246.     void populate_##NAME (NAME *s, const MysqlRow &row) { 
  247.     s->##I1 = row[ O1 ];
  248.     s->##I2 = row[ O2 ]; 
  249.   } 
  250.   inline NAME##::##NAME (const MysqlRow &row) 
  251.     {populate_##NAME##<sql_dummy>(this, row);} 
  252.   sql_COMPARE__##CMP##(NAME, I1, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  253. #define sql_create_complete_2(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2) 
  254.   struct NAME; 
  255.   enum NAME##_enum { 
  256.     NAME##_##I1,
  257.     NAME##_##I2 
  258.     ,NAME##_NULL 
  259.   }; 
  260.   template <class Manip>
  261.   class NAME##_value_list { 
  262.   /*friend ostream& operator << <> (ostream&, const NAME##_value_list&); */
  263.   public: 
  264.     const NAME *obj;
  265.     cchar *delem;
  266.     Manip manip;
  267.   public: 
  268.     NAME##_value_list (const NAME *o, cchar *d, Manip m) 
  269.       : obj(o), delem(d), manip(m) {} 
  270.   };
  271.   template <class Manip>
  272.   class NAME##_##field_list {
  273.   /* friend ostream& operator << <> (ostream&, const NAME##_field_list&); */
  274.   public: 
  275.     const NAME *obj; 
  276.     cchar *delem;
  277.     Manip manip;
  278.   public: 
  279.     NAME##_field_list (const NAME *o, cchar *d, Manip m) 
  280.       : obj(o), delem(d), manip(m) {} 
  281.   };
  282.   template <class Manip>
  283.   class NAME##_equal_list { 
  284.   /* friend ostream& operator << <> (ostream&, const NAME##_equal_list&); */
  285.   public: 
  286.     const NAME *obj;
  287.     cchar *delem;
  288.     cchar *comp;
  289.     Manip manip;
  290.   public: 
  291.     NAME##_equal_list (const NAME *o, cchar *d, cchar *c, Manip m) 
  292.       : obj(o), delem(d), comp(c), manip(m) {}
  293.   };
  294.   template <class Manip>
  295.   class NAME##_cus_value_list {
  296.   /* friend ostream& operator << <> (ostream&, 
  297.      const NAME##_cus_value_list<Manip>&); */
  298.   public:
  299.     const NAME *obj;
  300.     cchar *delem;
  301.     Manip manip;
  302.     vector<bool> *include;
  303.     bool del_vector;
  304.   public: 
  305.     ~##NAME##_cus_value_list () {if (del_vector) delete include;} 
  306.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2);
  307.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2); 
  308.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m ,vector<bool>)
  309.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  310.   };
  311.   template <class Manip>
  312.   class NAME##_cus_field_list { 
  313.   /* friend ostream& operator << <> (ostream&, 
  314.         const NAME##_cus_field_list<Manip>&); */
  315.   public:
  316.     const NAME *obj; 
  317.     cchar *delem;
  318.     Manip manip;
  319.     vector<bool> *include; 
  320.     bool del_vector; 
  321.   public: 
  322.     ~##NAME##_cus_field_list () {if (del_vector) delete include;} 
  323.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2); 
  324.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2); 
  325.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, vector<bool> *i) 
  326.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  327.   };
  328.  template <class Manip>
  329.  class NAME##_cus_equal_list {
  330.  /* friend ostream& operator << <> (ostream&, 
  331.   const NAME##_cus_equal_list<Manip>&); */
  332.   public:
  333.     const NAME *obj;
  334.     vector<bool> *include;
  335.     bool del_vector;
  336.     cchar *delem;
  337.     cchar *comp;
  338.     Manip manip;
  339.   public:
  340.     ~##NAME##_##cus_equal_list () {if (del_vector) delete include;}
  341.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2); 
  342.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2); 
  343.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, vector<bool> *i) 
  344.       : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}
  345.   };
  346.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  347.   struct NAME { 
  348.     T1 I1;
  349.     T2 I2; 
  350.     NAME () {} 
  351.     NAME (const MysqlRow &row);
  352.     void set (const MysqlRow &row);
  353.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  354.     sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  355.     static char *names[];
  356.     static char *_table;
  357.     static char *& table() {return _table;}
  358.     /* cus_data */
  359.     NAME##_cus_value_list<quote_type0> value_list(bool i1, bool i2 = false) const {
  360.       return value_list(",", mysql_quote, i1, i2);
  361.     }
  362.     NAME##_cus_value_list<quote_type0> value_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const {
  363.       return value_list(",", mysql_quote, i1, i2);
  364.     }
  365.     NAME##_cus_value_list<quote_type0> value_list(vector<bool> *i) const {
  366.       return value_list(",", mysql_quote, i);
  367.     }
  368.     NAME##_cus_value_list<quote_type0> value_list(sql_cmp_type sc) const {
  369.       return value_list(",", mysql_quote, sc);
  370.     }
  371.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, bool i1, bool i2 = false) const {
  372.       return value_list(d, mysql_quote, i1, i2);
  373.     }
  374.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const {
  375.       return value_list(d, mysql_quote, i1, i2);
  376.     }
  377.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  378. vector<bool> *i) const {
  379.       return value_list(d, mysql_quote, i);
  380.     }
  381.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  382. sql_cmp_type sc) const {
  383.       return value_list(d, mysql_quote, sc);
  384.     }
  385.     template <class Manip>
  386.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  387.   bool i1, bool i2 = false) const; 
  388.     template <class Manip>
  389.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  390.   ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const; 
  391.     template <class Manip>
  392.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  393.   vector<bool> *i) const;
  394.     template <class Manip>
  395.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  396.   sql_cmp_type sc) const;
  397.     /* cus field */
  398.     NAME##_cus_field_list<do_nothing_type0> field_list(bool i1, bool i2 = false) const {
  399.       return field_list(",", mysql_do_nothing, i1, i2);
  400.     }
  401.     NAME##_cus_field_list<do_nothing_type0> field_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const {
  402.       return field_list(",", mysql_do_nothing, i1, i2);
  403.     }
  404.     NAME##_cus_field_list<do_nothing_type0> field_list(vector<bool> *i) const {
  405.       return field_list(",", mysql_do_nothing, i);
  406.     }
  407.     NAME##_cus_field_list<do_nothing_type0> field_list(sql_cmp_type sc) const
  408.     {
  409.       return field_list(",", mysql_do_nothing, sc);
  410.     }
  411.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  412.        bool i1, bool i2 = false) const {
  413.       return field_list(d, mysql_do_nothing, i1, i2);
  414.     }
  415.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d,
  416.        ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const {
  417.       return field_list(d, mysql_do_nothing, i1, i2);
  418.     }
  419.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  420. vector<bool> *i) const {
  421.       return field_list(d, mysql_do_nothing, i);
  422.     }
  423.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  424. sql_cmp_type sc) const {
  425.       return field_list(d, mysql_do_nothing, sc);
  426.     }
  427.     template <class Manip>
  428.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  429.     bool i1, bool i2 = false) const; 
  430.     template <class Manip>
  431.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  432.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const; 
  433.     template <class Manip>
  434.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  435.     vector<bool> *i) const;
  436.     template <class Manip>
  437.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m, 
  438.     sql_cmp_type sc) const;
  439.     /* cus equal */
  440.     NAME##_cus_equal_list<quote_type0> equal_list(bool i1, bool i2 = false) const {
  441.       return equal_list(",", " = ", mysql_quote, i1, i2);
  442.     }
  443.     NAME##_cus_equal_list<quote_type0> equal_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const {
  444.       return equal_list(",", " = ", mysql_quote, i1, i2);
  445.     }
  446.     NAME##_cus_equal_list<quote_type0> equal_list(vector<bool> *i) const {
  447.       return equal_list(",", " = ", mysql_quote, i);
  448.     }
  449.     NAME##_cus_equal_list<quote_type0> equal_list(sql_cmp_type sc) const {
  450.       return equal_list(",", " = ", mysql_quote, sc);
  451.     }
  452.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, bool i1, bool i2 = false) const {
  453.       return equal_list(d, " = ", mysql_quote, i1, i2);
  454.     }
  455.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const {
  456.       return equal_list(d, " = ", mysql_quote, i1, i2);
  457.     }
  458.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  459. vector<bool> *i) const {
  460.       return equal_list(d, " = ", mysql_quote, i);
  461.     }
  462.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  463. sql_cmp_type sc) const {
  464.       return equal_list(d, " = ", mysql_quote, sc);
  465.     }
  466.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  467.                                                 bool i1, bool i2 = false) const {
  468.       return equal_list(d, c, mysql_quote, i1, i2);
  469.     }
  470.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  471.                                                 ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const {
  472.       return equal_list(d, c, mysql_quote, i1, i2);
  473.     }
  474.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  475. vector<bool> *i) const {
  476.       return equal_list(d, c, mysql_quote, i);
  477.     }
  478.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  479. sql_cmp_type sc) const {
  480.       return equal_list(d, c, mysql_quote, sc);
  481.     }
  482.     template <class Manip>
  483.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  484.     bool i1, bool i2 = false) const; 
  485.     template <class Manip>
  486.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  487.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL) const; 
  488.     template <class Manip>
  489.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  490.     vector<bool> *i) const;
  491.     template <class Manip>
  492.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  493.     sql_cmp_type sc) const;
  494.     NAME##_value_list<quote_type0> value_list() const {
  495.       return value_list(",", mysql_quote);}
  496.     NAME##_value_list<quote_type0> value_list(cchar *d) const {
  497.       return value_list(d, mysql_quote);}
  498.     template <class Manip> 
  499.     NAME##_value_list<Manip> value_list(cchar *d, Manip m) const; 
  500.     NAME##_field_list<do_nothing_type0> field_list() const {
  501.       return field_list(",", mysql_do_nothing);}
  502.     NAME##_field_list<do_nothing_type0> field_list(cchar *d) const {
  503.       return field_list(d, mysql_do_nothing);}
  504.     template <class Manip>
  505.     NAME##_field_list<Manip> field_list(cchar *d, Manip m) const; 
  506.     NAME##_equal_list<quote_type0> equal_list(cchar *d = ",", 
  507.                                               cchar *c = " = ") const{
  508.       return equal_list(d, c, mysql_quote);}
  509.     template <class Manip>
  510.     NAME##_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m) const; 
  511.   }; 
  512.   char *##NAME##::names[] = { 
  513.     N1 ,
  514.     N2  
  515.   }; 
  516.   char *##NAME##::_table = #NAME ;  
  517.   template <class Manip>
  518.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  519.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2) 
  520.   { 
  521.     delem = d;
  522.     manip = m;
  523.     del_vector = true;
  524.     obj = o; 
  525.     include = new vector<bool>(2, false);
  526.     if (i1) (*include)[0]=true;
  527.     if (i2) (*include)[1]=true;
  528.   } 
  529.   template <class Manip>
  530.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  531.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2) { 
  532.     delem = d;
  533.     manip = m;
  534.     del_vector = true; 
  535.     obj = o; 
  536.     include = new vector<bool>(2, false); 
  537.     if (i1 == NAME##_NULL) return;
  538.     (*include)[i1]=true;
  539.     if (i2 == NAME##_NULL) return;
  540.     (*include)[i2]=true;
  541.   }
  542.   template <class Manip>
  543.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  544.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2) {
  545.     delem = d;
  546.     manip = m;
  547.     del_vector = true; 
  548.     obj = o; 
  549.     include = new vector<bool>(2, false); 
  550.     if (i1) (*include)[0]=true;
  551.     if (i2) (*include)[1]=true;
  552.   } 
  553.   template <class Manip>
  554.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  555.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2) { 
  556.     delem = d;
  557.     manip = m;
  558.     del_vector = true; 
  559.     obj = o; 
  560.     include = new vector<bool>(2, false); 
  561.     if (i1 == NAME##_NULL) return;
  562.     (*include)[i1]=true;
  563.     if (i2 == NAME##_NULL) return;
  564.     (*include)[i2]=true;
  565.   }
  566.   template <class Manip>
  567.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  568.   (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2) { 
  569.     delem = d;
  570.     comp = c;
  571.     manip = m;
  572.     del_vector = true; 
  573.     obj = o; 
  574.     include = new vector<bool>(2, false); 
  575.     if (i1) (*include)[0]=true;
  576.     if (i2) (*include)[1]=true;
  577.   } 
  578.   template <class Manip>
  579.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  580.   (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2) { 
  581.     delem = d;
  582.     comp = c;
  583.     manip = m;
  584.     del_vector = true; 
  585.     obj = o; 
  586.     include = new vector<bool>(2, false); 
  587.     if (i1 == NAME##_NULL) return;
  588.     (*include)[i1]=true;
  589.     if (i2 == NAME##_NULL) return;
  590.     (*include)[i2]=true;
  591.   }
  592.   template <class Manip>
  593.   ostream& operator << (ostream& s, const NAME##_value_list<Manip>& obj) { 
  594.     s << obj.manip << obj.obj->##I1 << obj.delem;
  595.     s << obj.manip << obj.obj->##I2; 
  596.     return s; 
  597.   } 
  598.   template <class Manip>
  599.   ostream& operator << (ostream& s, const NAME##_field_list<Manip>& obj) { 
  600.     s << obj.manip << obj.obj->names[0] << obj.delem;
  601.     s << obj.manip << obj.obj->names[1]; 
  602.     return s; 
  603.   } 
  604.   template <class Manip>
  605.   ostream& operator << (ostream& s, const NAME##_equal_list<Manip>& obj) { 
  606.     s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1 << obj.delem;
  607.     s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->##I2; 
  608.     return s; 
  609.   } 
  610.   template <class Manip>
  611.   ostream& operator << (ostream& s, const NAME##_cus_value_list<Manip>& obj) { 
  612.     bool before = false; 
  613.     if ((*obj.include)[0]) { 
  614.       s << obj.manip << obj.obj->##I1;
  615.       before = true; 
  616.      } 
  617.     if ((*obj.include)[1]) { 
  618.       if (before) s << obj.delem;
  619.       s << obj.manip << obj.obj->##I2;
  620.      } 
  621.     return s; 
  622.   } 
  623.   template <class Manip>
  624.   ostream& operator << (ostream& s, const NAME##_cus_field_list<Manip>& obj) { 
  625.     bool before = false; 
  626.     if ((*obj.include)[0]) { 
  627.       s << obj.manip << obj.obj->names[0];
  628.       before = true; 
  629.      } 
  630.     if ((*obj.include)[1]) { 
  631.       if (before) s << obj.delem;
  632.       s << obj.manip << obj.obj->names[1];
  633.      } 
  634.     return s; 
  635.   } 
  636.   template <class Manip>
  637.   ostream& operator << (ostream& s, const NAME##_cus_equal_list<Manip>& obj) { 
  638.     bool before = false; 
  639.     if ((*obj.include)[0]) { 
  640.       s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1;
  641.       before = true; 
  642.      } 
  643.     if ((*obj.include)[1]) { 
  644.       if (before) s << obj.delem;
  645.       s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->##I2;
  646.      } 
  647.     return s; 
  648.   } 
  649.   template <class Manip>
  650.   inline NAME##_value_list<Manip> NAME##::value_list(cchar *d, Manip m) const { 
  651.     return NAME##_value_list<Manip> (this, d, m); 
  652.   } 
  653.   template <class Manip>
  654.   inline NAME##_field_list<Manip> NAME##::field_list(cchar *d, Manip m) const { 
  655.     return NAME##_field_list<Manip> (this, d, m); 
  656.   } 
  657.   template <class Manip>
  658.   inline NAME##_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m) const { 
  659.     return NAME##_equal_list<Manip> (this, d, c, m); 
  660.   } 
  661.   template <class Manip>
  662.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  663.        bool i1, bool i2) const {
  664.     return NAME##_cus_value_list<Manip> (this, d, m, i1, i2); 
  665.   } 
  666.   template <class Manip>
  667.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  668.  bool i1, bool i2) const { 
  669.     return NAME##_cus_field_list<Manip> (this, d, m, i1, i2); 
  670.   } 
  671.   template <class Manip>
  672.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m,
  673.  bool i1, bool i2) const { 
  674.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1, i2); 
  675.   } 
  676.   template <class Manip>
  677.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  678.        ##NAME##_enum i1, ##NAME##_enum i2) const { 
  679.     return NAME##_cus_value_list<Manip> (this, d, m, i1, i2); 
  680.   } 
  681.   template <class Manip>
  682.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  683.  ##NAME##_enum i1, ##NAME##_enum i2) const {
  684.     return NAME##_cus_field_list<Manip> (this, d, m, i1, i2); 
  685.   } 
  686.   template <class Manip>
  687.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m, 
  688.  ##NAME##_enum i1, ##NAME##_enum i2) const { 
  689.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1, i2); 
  690.   } 
  691.   template <class Manip>
  692.   inline NAME##_cus_value_list<Manip> 
  693.   NAME##::value_list(cchar *d, Manip m, sql_cmp_type sc) const {
  694.     sql_compare_type_def_##CMP (NAME, value, NUM);
  695.   }
  696.   template <class Manip>
  697.   inline NAME##_cus_field_list<Manip> 
  698.   NAME##::field_list(cchar *d, Manip m, sql_cmp_type sc) const {
  699.     sql_compare_type_def_##CMP (NAME, field, NUM);
  700.   }
  701.   template <class Manip>
  702.   inline NAME##_cus_equal_list<Manip> 
  703.   NAME##::equal_list(cchar *d, cchar *c, Manip m, sql_cmp_type sc) const {
  704.     sql_compare_type_defe_##CMP (NAME, equal, NUM);
  705.   }
  706.   template <sql_dummy_type dummy> 
  707.   void populate_##NAME (NAME *s, const MysqlRow &row) { 
  708.     s->##I1 = row[ O1 ];
  709.     s->##I2 = row[ O2 ];
  710.   } 
  711.   inline NAME##::##NAME (const MysqlRow &row) 
  712.                                         {populate_##NAME##<sql_dummy>(this, row);}
  713.   inline void NAME##::set (const MysqlRow &row)
  714.                                         {populate_##NAME##<sql_dummy>(this, row);}
  715.   sql_COMPARE__##CMP##(NAME, I1, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  716. #define sql_create_basic_2(NAME, CMP, CONTR, T1, I1, T2, I2) 
  717.   sql_create_basic_c_order_2(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1)
  718. #define sql_create_2(NAME, CMP, CONTR, T1, I1, T2, I2) 
  719.   sql_create_complete_2(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1) 
  720. #define sql_create_c_order_2(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2) 
  721.   sql_create_complete_2(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2)
  722. #define sql_create_c_names_2(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2) 
  723.   sql_create_complete_2(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1)
  724. // ---------------------------------------------------
  725. //                  End Create 2
  726. // ---------------------------------------------------
  727. // ---------------------------------------------------
  728. //                  Begin Create 3
  729. // ---------------------------------------------------
  730. #define sql_create_basic_c_order_3(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3)
  731.   struct NAME; 
  732.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  733.   struct NAME { 
  734.     T1 I1;
  735.     T2 I2;
  736.     T3 I3; 
  737.     NAME () {} 
  738.     NAME (const MysqlRow &row);
  739.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  740.   }; 
  741.   template <sql_dummy_type dummy> 
  742.     void populate_##NAME (NAME *s, const MysqlRow &row) { 
  743.     s->##I1 = row[ O1 ];
  744.     s->##I2 = row[ O2 ];
  745.     s->##I3 = row[ O3 ]; 
  746.   } 
  747.   inline NAME##::##NAME (const MysqlRow &row) 
  748.     {populate_##NAME##<sql_dummy>(this, row);} 
  749.   sql_COMPARE__##CMP##(NAME, I1, I2, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  750. #define sql_create_complete_3(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3) 
  751.   struct NAME; 
  752.   enum NAME##_enum { 
  753.     NAME##_##I1,
  754.     NAME##_##I2,
  755.     NAME##_##I3 
  756.     ,NAME##_NULL 
  757.   }; 
  758.   template <class Manip>
  759.   class NAME##_value_list { 
  760.   /*friend ostream& operator << <> (ostream&, const NAME##_value_list&); */
  761.   public: 
  762.     const NAME *obj;
  763.     cchar *delem;
  764.     Manip manip;
  765.   public: 
  766.     NAME##_value_list (const NAME *o, cchar *d, Manip m) 
  767.       : obj(o), delem(d), manip(m) {} 
  768.   };
  769.   template <class Manip>
  770.   class NAME##_##field_list {
  771.   /* friend ostream& operator << <> (ostream&, const NAME##_field_list&); */
  772.   public: 
  773.     const NAME *obj; 
  774.     cchar *delem;
  775.     Manip manip;
  776.   public: 
  777.     NAME##_field_list (const NAME *o, cchar *d, Manip m) 
  778.       : obj(o), delem(d), manip(m) {} 
  779.   };
  780.   template <class Manip>
  781.   class NAME##_equal_list { 
  782.   /* friend ostream& operator << <> (ostream&, const NAME##_equal_list&); */
  783.   public: 
  784.     const NAME *obj;
  785.     cchar *delem;
  786.     cchar *comp;
  787.     Manip manip;
  788.   public: 
  789.     NAME##_equal_list (const NAME *o, cchar *d, cchar *c, Manip m) 
  790.       : obj(o), delem(d), comp(c), manip(m) {}
  791.   };
  792.   template <class Manip>
  793.   class NAME##_cus_value_list {
  794.   /* friend ostream& operator << <> (ostream&, 
  795.      const NAME##_cus_value_list<Manip>&); */
  796.   public:
  797.     const NAME *obj;
  798.     cchar *delem;
  799.     Manip manip;
  800.     vector<bool> *include;
  801.     bool del_vector;
  802.   public: 
  803.     ~##NAME##_cus_value_list () {if (del_vector) delete include;} 
  804.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3);
  805.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3); 
  806.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m ,vector<bool>)
  807.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  808.   };
  809.   template <class Manip>
  810.   class NAME##_cus_field_list { 
  811.   /* friend ostream& operator << <> (ostream&, 
  812.         const NAME##_cus_field_list<Manip>&); */
  813.   public:
  814.     const NAME *obj; 
  815.     cchar *delem;
  816.     Manip manip;
  817.     vector<bool> *include; 
  818.     bool del_vector; 
  819.   public: 
  820.     ~##NAME##_cus_field_list () {if (del_vector) delete include;} 
  821.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3); 
  822.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3); 
  823.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, vector<bool> *i) 
  824.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  825.   };
  826.  template <class Manip>
  827.  class NAME##_cus_equal_list {
  828.  /* friend ostream& operator << <> (ostream&, 
  829.   const NAME##_cus_equal_list<Manip>&); */
  830.   public:
  831.     const NAME *obj;
  832.     vector<bool> *include;
  833.     bool del_vector;
  834.     cchar *delem;
  835.     cchar *comp;
  836.     Manip manip;
  837.   public:
  838.     ~##NAME##_##cus_equal_list () {if (del_vector) delete include;}
  839.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2, bool i3); 
  840.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3); 
  841.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, vector<bool> *i) 
  842.       : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}
  843.   };
  844.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  845.   struct NAME { 
  846.     T1 I1;
  847.     T2 I2;
  848.     T3 I3; 
  849.     NAME () {} 
  850.     NAME (const MysqlRow &row);
  851.     void set (const MysqlRow &row);
  852.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  853.     sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  854.     static char *names[];
  855.     static char *_table;
  856.     static char *& table() {return _table;}
  857.     /* cus_data */
  858.     NAME##_cus_value_list<quote_type0> value_list(bool i1, bool i2 = false, bool i3 = false) const {
  859.       return value_list(",", mysql_quote, i1, i2, i3);
  860.     }
  861.     NAME##_cus_value_list<quote_type0> value_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const {
  862.       return value_list(",", mysql_quote, i1, i2, i3);
  863.     }
  864.     NAME##_cus_value_list<quote_type0> value_list(vector<bool> *i) const {
  865.       return value_list(",", mysql_quote, i);
  866.     }
  867.     NAME##_cus_value_list<quote_type0> value_list(sql_cmp_type sc) const {
  868.       return value_list(",", mysql_quote, sc);
  869.     }
  870.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, bool i1, bool i2 = false, bool i3 = false) const {
  871.       return value_list(d, mysql_quote, i1, i2, i3);
  872.     }
  873.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const {
  874.       return value_list(d, mysql_quote, i1, i2, i3);
  875.     }
  876.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  877. vector<bool> *i) const {
  878.       return value_list(d, mysql_quote, i);
  879.     }
  880.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  881. sql_cmp_type sc) const {
  882.       return value_list(d, mysql_quote, sc);
  883.     }
  884.     template <class Manip>
  885.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  886.   bool i1, bool i2 = false, bool i3 = false) const; 
  887.     template <class Manip>
  888.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  889.   ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const; 
  890.     template <class Manip>
  891.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  892.   vector<bool> *i) const;
  893.     template <class Manip>
  894.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  895.   sql_cmp_type sc) const;
  896.     /* cus field */
  897.     NAME##_cus_field_list<do_nothing_type0> field_list(bool i1, bool i2 = false, bool i3 = false) const {
  898.       return field_list(",", mysql_do_nothing, i1, i2, i3);
  899.     }
  900.     NAME##_cus_field_list<do_nothing_type0> field_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const {
  901.       return field_list(",", mysql_do_nothing, i1, i2, i3);
  902.     }
  903.     NAME##_cus_field_list<do_nothing_type0> field_list(vector<bool> *i) const {
  904.       return field_list(",", mysql_do_nothing, i);
  905.     }
  906.     NAME##_cus_field_list<do_nothing_type0> field_list(sql_cmp_type sc) const
  907.     {
  908.       return field_list(",", mysql_do_nothing, sc);
  909.     }
  910.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  911.        bool i1, bool i2 = false, bool i3 = false) const {
  912.       return field_list(d, mysql_do_nothing, i1, i2, i3);
  913.     }
  914.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d,
  915.        ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const {
  916.       return field_list(d, mysql_do_nothing, i1, i2, i3);
  917.     }
  918.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  919. vector<bool> *i) const {
  920.       return field_list(d, mysql_do_nothing, i);
  921.     }
  922.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  923. sql_cmp_type sc) const {
  924.       return field_list(d, mysql_do_nothing, sc);
  925.     }
  926.     template <class Manip>
  927.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  928.     bool i1, bool i2 = false, bool i3 = false) const; 
  929.     template <class Manip>
  930.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  931.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const; 
  932.     template <class Manip>
  933.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  934.     vector<bool> *i) const;
  935.     template <class Manip>
  936.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m, 
  937.     sql_cmp_type sc) const;
  938.     /* cus equal */
  939.     NAME##_cus_equal_list<quote_type0> equal_list(bool i1, bool i2 = false, bool i3 = false) const {
  940.       return equal_list(",", " = ", mysql_quote, i1, i2, i3);
  941.     }
  942.     NAME##_cus_equal_list<quote_type0> equal_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const {
  943.       return equal_list(",", " = ", mysql_quote, i1, i2, i3);
  944.     }
  945.     NAME##_cus_equal_list<quote_type0> equal_list(vector<bool> *i) const {
  946.       return equal_list(",", " = ", mysql_quote, i);
  947.     }
  948.     NAME##_cus_equal_list<quote_type0> equal_list(sql_cmp_type sc) const {
  949.       return equal_list(",", " = ", mysql_quote, sc);
  950.     }
  951.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, bool i1, bool i2 = false, bool i3 = false) const {
  952.       return equal_list(d, " = ", mysql_quote, i1, i2, i3);
  953.     }
  954.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const {
  955.       return equal_list(d, " = ", mysql_quote, i1, i2, i3);
  956.     }
  957.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  958. vector<bool> *i) const {
  959.       return equal_list(d, " = ", mysql_quote, i);
  960.     }
  961.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  962. sql_cmp_type sc) const {
  963.       return equal_list(d, " = ", mysql_quote, sc);
  964.     }
  965.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  966.                                                 bool i1, bool i2 = false, bool i3 = false) const {
  967.       return equal_list(d, c, mysql_quote, i1, i2, i3);
  968.     }
  969.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  970.                                                 ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const {
  971.       return equal_list(d, c, mysql_quote, i1, i2, i3);
  972.     }
  973.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  974. vector<bool> *i) const {
  975.       return equal_list(d, c, mysql_quote, i);
  976.     }
  977.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  978. sql_cmp_type sc) const {
  979.       return equal_list(d, c, mysql_quote, sc);
  980.     }
  981.     template <class Manip>
  982.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  983.     bool i1, bool i2 = false, bool i3 = false) const; 
  984.     template <class Manip>
  985.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  986.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL) const; 
  987.     template <class Manip>
  988.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  989.     vector<bool> *i) const;
  990.     template <class Manip>
  991.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  992.     sql_cmp_type sc) const;
  993.     NAME##_value_list<quote_type0> value_list() const {
  994.       return value_list(",", mysql_quote);}
  995.     NAME##_value_list<quote_type0> value_list(cchar *d) const {
  996.       return value_list(d, mysql_quote);}
  997.     template <class Manip> 
  998.     NAME##_value_list<Manip> value_list(cchar *d, Manip m) const; 
  999.     NAME##_field_list<do_nothing_type0> field_list() const {
  1000.       return field_list(",", mysql_do_nothing);}
  1001.     NAME##_field_list<do_nothing_type0> field_list(cchar *d) const {
  1002.       return field_list(d, mysql_do_nothing);}
  1003.     template <class Manip>
  1004.     NAME##_field_list<Manip> field_list(cchar *d, Manip m) const; 
  1005.     NAME##_equal_list<quote_type0> equal_list(cchar *d = ",", 
  1006.                                               cchar *c = " = ") const{
  1007.       return equal_list(d, c, mysql_quote);}
  1008.     template <class Manip>
  1009.     NAME##_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m) const; 
  1010.   }; 
  1011.   char *##NAME##::names[] = { 
  1012.     N1 ,
  1013.     N2 ,
  1014.     N3  
  1015.   }; 
  1016.   char *##NAME##::_table = #NAME ;  
  1017.   template <class Manip>
  1018.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  1019.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3) 
  1020.   { 
  1021.     delem = d;
  1022.     manip = m;
  1023.     del_vector = true;
  1024.     obj = o; 
  1025.     include = new vector<bool>(3, false);
  1026.     if (i1) (*include)[0]=true;
  1027.     if (i2) (*include)[1]=true;
  1028.     if (i3) (*include)[2]=true;
  1029.   } 
  1030.   template <class Manip>
  1031.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  1032.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3) { 
  1033.     delem = d;
  1034.     manip = m;
  1035.     del_vector = true; 
  1036.     obj = o; 
  1037.     include = new vector<bool>(3, false); 
  1038.     if (i1 == NAME##_NULL) return;
  1039.     (*include)[i1]=true;
  1040.     if (i2 == NAME##_NULL) return;
  1041.     (*include)[i2]=true;
  1042.     if (i3 == NAME##_NULL) return;
  1043.     (*include)[i3]=true;
  1044.   }
  1045.   template <class Manip>
  1046.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  1047.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3) {
  1048.     delem = d;
  1049.     manip = m;
  1050.     del_vector = true; 
  1051.     obj = o; 
  1052.     include = new vector<bool>(3, false); 
  1053.     if (i1) (*include)[0]=true;
  1054.     if (i2) (*include)[1]=true;
  1055.     if (i3) (*include)[2]=true;
  1056.   } 
  1057.   template <class Manip>
  1058.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  1059.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3) { 
  1060.     delem = d;
  1061.     manip = m;
  1062.     del_vector = true; 
  1063.     obj = o; 
  1064.     include = new vector<bool>(3, false); 
  1065.     if (i1 == NAME##_NULL) return;
  1066.     (*include)[i1]=true;
  1067.     if (i2 == NAME##_NULL) return;
  1068.     (*include)[i2]=true;
  1069.     if (i3 == NAME##_NULL) return;
  1070.     (*include)[i3]=true;
  1071.   }
  1072.   template <class Manip>
  1073.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  1074.   (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2, bool i3) { 
  1075.     delem = d;
  1076.     comp = c;
  1077.     manip = m;
  1078.     del_vector = true; 
  1079.     obj = o; 
  1080.     include = new vector<bool>(3, false); 
  1081.     if (i1) (*include)[0]=true;
  1082.     if (i2) (*include)[1]=true;
  1083.     if (i3) (*include)[2]=true;
  1084.   } 
  1085.   template <class Manip>
  1086.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  1087.   (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3) { 
  1088.     delem = d;
  1089.     comp = c;
  1090.     manip = m;
  1091.     del_vector = true; 
  1092.     obj = o; 
  1093.     include = new vector<bool>(3, false); 
  1094.     if (i1 == NAME##_NULL) return;
  1095.     (*include)[i1]=true;
  1096.     if (i2 == NAME##_NULL) return;
  1097.     (*include)[i2]=true;
  1098.     if (i3 == NAME##_NULL) return;
  1099.     (*include)[i3]=true;
  1100.   }
  1101.   template <class Manip>
  1102.   ostream& operator << (ostream& s, const NAME##_value_list<Manip>& obj) { 
  1103.     s << obj.manip << obj.obj->##I1 << obj.delem;
  1104.     s << obj.manip << obj.obj->##I2 << obj.delem;
  1105.     s << obj.manip << obj.obj->##I3; 
  1106.     return s; 
  1107.   } 
  1108.   template <class Manip>
  1109.   ostream& operator << (ostream& s, const NAME##_field_list<Manip>& obj) { 
  1110.     s << obj.manip << obj.obj->names[0] << obj.delem;
  1111.     s << obj.manip << obj.obj->names[1] << obj.delem;
  1112.     s << obj.manip << obj.obj->names[2]; 
  1113.     return s; 
  1114.   } 
  1115.   template <class Manip>
  1116.   ostream& operator << (ostream& s, const NAME##_equal_list<Manip>& obj) { 
  1117.     s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1 << obj.delem;
  1118.     s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->##I2 << obj.delem;
  1119.     s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->##I3; 
  1120.     return s; 
  1121.   } 
  1122.   template <class Manip>
  1123.   ostream& operator << (ostream& s, const NAME##_cus_value_list<Manip>& obj) { 
  1124.     bool before = false; 
  1125.     if ((*obj.include)[0]) { 
  1126.       s << obj.manip << obj.obj->##I1;
  1127.       before = true; 
  1128.      } 
  1129.     if ((*obj.include)[1]) { 
  1130.       if (before) s << obj.delem;
  1131.       s << obj.manip << obj.obj->##I2;
  1132.       before = true; 
  1133.      } 
  1134.     if ((*obj.include)[2]) { 
  1135.       if (before) s << obj.delem;
  1136.       s << obj.manip << obj.obj->##I3;
  1137.      } 
  1138.     return s; 
  1139.   } 
  1140.   template <class Manip>
  1141.   ostream& operator << (ostream& s, const NAME##_cus_field_list<Manip>& obj) { 
  1142.     bool before = false; 
  1143.     if ((*obj.include)[0]) { 
  1144.       s << obj.manip << obj.obj->names[0];
  1145.       before = true; 
  1146.      } 
  1147.     if ((*obj.include)[1]) { 
  1148.       if (before) s << obj.delem;
  1149.       s << obj.manip << obj.obj->names[1];
  1150.       before = true; 
  1151.      } 
  1152.     if ((*obj.include)[2]) { 
  1153.       if (before) s << obj.delem;
  1154.       s << obj.manip << obj.obj->names[2];
  1155.      } 
  1156.     return s; 
  1157.   } 
  1158.   template <class Manip>
  1159.   ostream& operator << (ostream& s, const NAME##_cus_equal_list<Manip>& obj) { 
  1160.     bool before = false; 
  1161.     if ((*obj.include)[0]) { 
  1162.       s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1;
  1163.       before = true; 
  1164.      } 
  1165.     if ((*obj.include)[1]) { 
  1166.       if (before) s << obj.delem;
  1167.       s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->##I2;
  1168.       before = true; 
  1169.      } 
  1170.     if ((*obj.include)[2]) { 
  1171.       if (before) s << obj.delem;
  1172.       s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->##I3;
  1173.      } 
  1174.     return s; 
  1175.   } 
  1176.   template <class Manip>
  1177.   inline NAME##_value_list<Manip> NAME##::value_list(cchar *d, Manip m) const { 
  1178.     return NAME##_value_list<Manip> (this, d, m); 
  1179.   } 
  1180.   template <class Manip>
  1181.   inline NAME##_field_list<Manip> NAME##::field_list(cchar *d, Manip m) const { 
  1182.     return NAME##_field_list<Manip> (this, d, m); 
  1183.   } 
  1184.   template <class Manip>
  1185.   inline NAME##_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m) const { 
  1186.     return NAME##_equal_list<Manip> (this, d, c, m); 
  1187.   } 
  1188.   template <class Manip>
  1189.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  1190.        bool i1, bool i2, bool i3) const {
  1191.     return NAME##_cus_value_list<Manip> (this, d, m, i1, i2, i3); 
  1192.   } 
  1193.   template <class Manip>
  1194.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  1195.  bool i1, bool i2, bool i3) const { 
  1196.     return NAME##_cus_field_list<Manip> (this, d, m, i1, i2, i3); 
  1197.   } 
  1198.   template <class Manip>
  1199.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m,
  1200.  bool i1, bool i2, bool i3) const { 
  1201.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1, i2, i3); 
  1202.   } 
  1203.   template <class Manip>
  1204.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  1205.        ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3) const { 
  1206.     return NAME##_cus_value_list<Manip> (this, d, m, i1, i2, i3); 
  1207.   } 
  1208.   template <class Manip>
  1209.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  1210.  ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3) const {
  1211.     return NAME##_cus_field_list<Manip> (this, d, m, i1, i2, i3); 
  1212.   } 
  1213.   template <class Manip>
  1214.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m, 
  1215.  ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3) const { 
  1216.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1, i2, i3); 
  1217.   } 
  1218.   template <class Manip>
  1219.   inline NAME##_cus_value_list<Manip> 
  1220.   NAME##::value_list(cchar *d, Manip m, sql_cmp_type sc) const {
  1221.     sql_compare_type_def_##CMP (NAME, value, NUM);
  1222.   }
  1223.   template <class Manip>
  1224.   inline NAME##_cus_field_list<Manip> 
  1225.   NAME##::field_list(cchar *d, Manip m, sql_cmp_type sc) const {
  1226.     sql_compare_type_def_##CMP (NAME, field, NUM);
  1227.   }
  1228.   template <class Manip>
  1229.   inline NAME##_cus_equal_list<Manip> 
  1230.   NAME##::equal_list(cchar *d, cchar *c, Manip m, sql_cmp_type sc) const {
  1231.     sql_compare_type_defe_##CMP (NAME, equal, NUM);
  1232.   }
  1233.   template <sql_dummy_type dummy> 
  1234.   void populate_##NAME (NAME *s, const MysqlRow &row) { 
  1235.     s->##I1 = row[ O1 ];
  1236.     s->##I2 = row[ O2 ];
  1237.     s->##I3 = row[ O3 ];
  1238.   } 
  1239.   inline NAME##::##NAME (const MysqlRow &row) 
  1240.                                         {populate_##NAME##<sql_dummy>(this, row);}
  1241.   inline void NAME##::set (const MysqlRow &row)
  1242.                                         {populate_##NAME##<sql_dummy>(this, row);}
  1243.   sql_COMPARE__##CMP##(NAME, I1, I2, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  1244. #define sql_create_basic_3(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3) 
  1245.   sql_create_basic_c_order_3(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2)
  1246. #define sql_create_3(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3) 
  1247.   sql_create_complete_3(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2) 
  1248. #define sql_create_c_order_3(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3) 
  1249.   sql_create_complete_3(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3)
  1250. #define sql_create_c_names_3(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3) 
  1251.   sql_create_complete_3(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2)
  1252. // ---------------------------------------------------
  1253. //                  End Create 3
  1254. // ---------------------------------------------------
  1255. // ---------------------------------------------------
  1256. //                  Begin Create 4
  1257. // ---------------------------------------------------
  1258. #define sql_create_basic_c_order_4(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4)
  1259.   struct NAME; 
  1260.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  1261.   struct NAME { 
  1262.     T1 I1;
  1263.     T2 I2;
  1264.     T3 I3;
  1265.     T4 I4; 
  1266.     NAME () {} 
  1267.     NAME (const MysqlRow &row);
  1268.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  1269.   }; 
  1270.   template <sql_dummy_type dummy> 
  1271.     void populate_##NAME (NAME *s, const MysqlRow &row) { 
  1272.     s->##I1 = row[ O1 ];
  1273.     s->##I2 = row[ O2 ];
  1274.     s->##I3 = row[ O3 ];
  1275.     s->##I4 = row[ O4 ]; 
  1276.   } 
  1277.   inline NAME##::##NAME (const MysqlRow &row) 
  1278.     {populate_##NAME##<sql_dummy>(this, row);} 
  1279.   sql_COMPARE__##CMP##(NAME, I1, I2, I3, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  1280. #define sql_create_complete_4(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4) 
  1281.   struct NAME; 
  1282.   enum NAME##_enum { 
  1283.     NAME##_##I1,
  1284.     NAME##_##I2,
  1285.     NAME##_##I3,
  1286.     NAME##_##I4 
  1287.     ,NAME##_NULL 
  1288.   }; 
  1289.   template <class Manip>
  1290.   class NAME##_value_list { 
  1291.   /*friend ostream& operator << <> (ostream&, const NAME##_value_list&); */
  1292.   public: 
  1293.     const NAME *obj;
  1294.     cchar *delem;
  1295.     Manip manip;
  1296.   public: 
  1297.     NAME##_value_list (const NAME *o, cchar *d, Manip m) 
  1298.       : obj(o), delem(d), manip(m) {} 
  1299.   };
  1300.   template <class Manip>
  1301.   class NAME##_##field_list {
  1302.   /* friend ostream& operator << <> (ostream&, const NAME##_field_list&); */
  1303.   public: 
  1304.     const NAME *obj; 
  1305.     cchar *delem;
  1306.     Manip manip;
  1307.   public: 
  1308.     NAME##_field_list (const NAME *o, cchar *d, Manip m) 
  1309.       : obj(o), delem(d), manip(m) {} 
  1310.   };
  1311.   template <class Manip>
  1312.   class NAME##_equal_list { 
  1313.   /* friend ostream& operator << <> (ostream&, const NAME##_equal_list&); */
  1314.   public: 
  1315.     const NAME *obj;
  1316.     cchar *delem;
  1317.     cchar *comp;
  1318.     Manip manip;
  1319.   public: 
  1320.     NAME##_equal_list (const NAME *o, cchar *d, cchar *c, Manip m) 
  1321.       : obj(o), delem(d), comp(c), manip(m) {}
  1322.   };
  1323.   template <class Manip>
  1324.   class NAME##_cus_value_list {
  1325.   /* friend ostream& operator << <> (ostream&, 
  1326.      const NAME##_cus_value_list<Manip>&); */
  1327.   public:
  1328.     const NAME *obj;
  1329.     cchar *delem;
  1330.     Manip manip;
  1331.     vector<bool> *include;
  1332.     bool del_vector;
  1333.   public: 
  1334.     ~##NAME##_cus_value_list () {if (del_vector) delete include;} 
  1335.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4);
  1336.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4); 
  1337.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m ,vector<bool>)
  1338.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  1339.   };
  1340.   template <class Manip>
  1341.   class NAME##_cus_field_list { 
  1342.   /* friend ostream& operator << <> (ostream&, 
  1343.         const NAME##_cus_field_list<Manip>&); */
  1344.   public:
  1345.     const NAME *obj; 
  1346.     cchar *delem;
  1347.     Manip manip;
  1348.     vector<bool> *include; 
  1349.     bool del_vector; 
  1350.   public: 
  1351.     ~##NAME##_cus_field_list () {if (del_vector) delete include;} 
  1352.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4); 
  1353.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4); 
  1354.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, vector<bool> *i) 
  1355.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  1356.   };
  1357.  template <class Manip>
  1358.  class NAME##_cus_equal_list {
  1359.  /* friend ostream& operator << <> (ostream&, 
  1360.   const NAME##_cus_equal_list<Manip>&); */
  1361.   public:
  1362.     const NAME *obj;
  1363.     vector<bool> *include;
  1364.     bool del_vector;
  1365.     cchar *delem;
  1366.     cchar *comp;
  1367.     Manip manip;
  1368.   public:
  1369.     ~##NAME##_##cus_equal_list () {if (del_vector) delete include;}
  1370.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4); 
  1371.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4); 
  1372.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, vector<bool> *i) 
  1373.       : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}
  1374.   };
  1375.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  1376.   struct NAME { 
  1377.     T1 I1;
  1378.     T2 I2;
  1379.     T3 I3;
  1380.     T4 I4; 
  1381.     NAME () {} 
  1382.     NAME (const MysqlRow &row);
  1383.     void set (const MysqlRow &row);
  1384.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  1385.     sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  1386.     static char *names[];
  1387.     static char *_table;
  1388.     static char *& table() {return _table;}
  1389.     /* cus_data */
  1390.     NAME##_cus_value_list<quote_type0> value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {
  1391.       return value_list(",", mysql_quote, i1, i2, i3, i4);
  1392.     }
  1393.     NAME##_cus_value_list<quote_type0> value_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const {
  1394.       return value_list(",", mysql_quote, i1, i2, i3, i4);
  1395.     }
  1396.     NAME##_cus_value_list<quote_type0> value_list(vector<bool> *i) const {
  1397.       return value_list(",", mysql_quote, i);
  1398.     }
  1399.     NAME##_cus_value_list<quote_type0> value_list(sql_cmp_type sc) const {
  1400.       return value_list(",", mysql_quote, sc);
  1401.     }
  1402.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {
  1403.       return value_list(d, mysql_quote, i1, i2, i3, i4);
  1404.     }
  1405.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const {
  1406.       return value_list(d, mysql_quote, i1, i2, i3, i4);
  1407.     }
  1408.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  1409. vector<bool> *i) const {
  1410.       return value_list(d, mysql_quote, i);
  1411.     }
  1412.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  1413. sql_cmp_type sc) const {
  1414.       return value_list(d, mysql_quote, sc);
  1415.     }
  1416.     template <class Manip>
  1417.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  1418.   bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const; 
  1419.     template <class Manip>
  1420.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  1421.   ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const; 
  1422.     template <class Manip>
  1423.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  1424.   vector<bool> *i) const;
  1425.     template <class Manip>
  1426.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  1427.   sql_cmp_type sc) const;
  1428.     /* cus field */
  1429.     NAME##_cus_field_list<do_nothing_type0> field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {
  1430.       return field_list(",", mysql_do_nothing, i1, i2, i3, i4);
  1431.     }
  1432.     NAME##_cus_field_list<do_nothing_type0> field_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const {
  1433.       return field_list(",", mysql_do_nothing, i1, i2, i3, i4);
  1434.     }
  1435.     NAME##_cus_field_list<do_nothing_type0> field_list(vector<bool> *i) const {
  1436.       return field_list(",", mysql_do_nothing, i);
  1437.     }
  1438.     NAME##_cus_field_list<do_nothing_type0> field_list(sql_cmp_type sc) const
  1439.     {
  1440.       return field_list(",", mysql_do_nothing, sc);
  1441.     }
  1442.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  1443.        bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {
  1444.       return field_list(d, mysql_do_nothing, i1, i2, i3, i4);
  1445.     }
  1446.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d,
  1447.        ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const {
  1448.       return field_list(d, mysql_do_nothing, i1, i2, i3, i4);
  1449.     }
  1450.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  1451. vector<bool> *i) const {
  1452.       return field_list(d, mysql_do_nothing, i);
  1453.     }
  1454.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  1455. sql_cmp_type sc) const {
  1456.       return field_list(d, mysql_do_nothing, sc);
  1457.     }
  1458.     template <class Manip>
  1459.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  1460.     bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const; 
  1461.     template <class Manip>
  1462.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  1463.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const; 
  1464.     template <class Manip>
  1465.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  1466.     vector<bool> *i) const;
  1467.     template <class Manip>
  1468.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m, 
  1469.     sql_cmp_type sc) const;
  1470.     /* cus equal */
  1471.     NAME##_cus_equal_list<quote_type0> equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {
  1472.       return equal_list(",", " = ", mysql_quote, i1, i2, i3, i4);
  1473.     }
  1474.     NAME##_cus_equal_list<quote_type0> equal_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const {
  1475.       return equal_list(",", " = ", mysql_quote, i1, i2, i3, i4);
  1476.     }
  1477.     NAME##_cus_equal_list<quote_type0> equal_list(vector<bool> *i) const {
  1478.       return equal_list(",", " = ", mysql_quote, i);
  1479.     }
  1480.     NAME##_cus_equal_list<quote_type0> equal_list(sql_cmp_type sc) const {
  1481.       return equal_list(",", " = ", mysql_quote, sc);
  1482.     }
  1483.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {
  1484.       return equal_list(d, " = ", mysql_quote, i1, i2, i3, i4);
  1485.     }
  1486.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const {
  1487.       return equal_list(d, " = ", mysql_quote, i1, i2, i3, i4);
  1488.     }
  1489.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  1490. vector<bool> *i) const {
  1491.       return equal_list(d, " = ", mysql_quote, i);
  1492.     }
  1493.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  1494. sql_cmp_type sc) const {
  1495.       return equal_list(d, " = ", mysql_quote, sc);
  1496.     }
  1497.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  1498.                                                 bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {
  1499.       return equal_list(d, c, mysql_quote, i1, i2, i3, i4);
  1500.     }
  1501.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  1502.                                                 ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const {
  1503.       return equal_list(d, c, mysql_quote, i1, i2, i3, i4);
  1504.     }
  1505.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  1506. vector<bool> *i) const {
  1507.       return equal_list(d, c, mysql_quote, i);
  1508.     }
  1509.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  1510. sql_cmp_type sc) const {
  1511.       return equal_list(d, c, mysql_quote, sc);
  1512.     }
  1513.     template <class Manip>
  1514.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  1515.     bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const; 
  1516.     template <class Manip>
  1517.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  1518.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL) const; 
  1519.     template <class Manip>
  1520.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  1521.     vector<bool> *i) const;
  1522.     template <class Manip>
  1523.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  1524.     sql_cmp_type sc) const;
  1525.     NAME##_value_list<quote_type0> value_list() const {
  1526.       return value_list(",", mysql_quote);}
  1527.     NAME##_value_list<quote_type0> value_list(cchar *d) const {
  1528.       return value_list(d, mysql_quote);}
  1529.     template <class Manip> 
  1530.     NAME##_value_list<Manip> value_list(cchar *d, Manip m) const; 
  1531.     NAME##_field_list<do_nothing_type0> field_list() const {
  1532.       return field_list(",", mysql_do_nothing);}
  1533.     NAME##_field_list<do_nothing_type0> field_list(cchar *d) const {
  1534.       return field_list(d, mysql_do_nothing);}
  1535.     template <class Manip>
  1536.     NAME##_field_list<Manip> field_list(cchar *d, Manip m) const; 
  1537.     NAME##_equal_list<quote_type0> equal_list(cchar *d = ",", 
  1538.                                               cchar *c = " = ") const{
  1539.       return equal_list(d, c, mysql_quote);}
  1540.     template <class Manip>
  1541.     NAME##_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m) const; 
  1542.   }; 
  1543.   char *##NAME##::names[] = { 
  1544.     N1 ,
  1545.     N2 ,
  1546.     N3 ,
  1547.     N4  
  1548.   }; 
  1549.   char *##NAME##::_table = #NAME ;  
  1550.   template <class Manip>
  1551.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  1552.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4) 
  1553.   { 
  1554.     delem = d;
  1555.     manip = m;
  1556.     del_vector = true;
  1557.     obj = o; 
  1558.     include = new vector<bool>(4, false);
  1559.     if (i1) (*include)[0]=true;
  1560.     if (i2) (*include)[1]=true;
  1561.     if (i3) (*include)[2]=true;
  1562.     if (i4) (*include)[3]=true;
  1563.   } 
  1564.   template <class Manip>
  1565.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  1566.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4) { 
  1567.     delem = d;
  1568.     manip = m;
  1569.     del_vector = true; 
  1570.     obj = o; 
  1571.     include = new vector<bool>(4, false); 
  1572.     if (i1 == NAME##_NULL) return;
  1573.     (*include)[i1]=true;
  1574.     if (i2 == NAME##_NULL) return;
  1575.     (*include)[i2]=true;
  1576.     if (i3 == NAME##_NULL) return;
  1577.     (*include)[i3]=true;
  1578.     if (i4 == NAME##_NULL) return;
  1579.     (*include)[i4]=true;
  1580.   }
  1581.   template <class Manip>
  1582.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  1583.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4) {
  1584.     delem = d;
  1585.     manip = m;
  1586.     del_vector = true; 
  1587.     obj = o; 
  1588.     include = new vector<bool>(4, false); 
  1589.     if (i1) (*include)[0]=true;
  1590.     if (i2) (*include)[1]=true;
  1591.     if (i3) (*include)[2]=true;
  1592.     if (i4) (*include)[3]=true;
  1593.   } 
  1594.   template <class Manip>
  1595.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  1596.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4) { 
  1597.     delem = d;
  1598.     manip = m;
  1599.     del_vector = true; 
  1600.     obj = o; 
  1601.     include = new vector<bool>(4, false); 
  1602.     if (i1 == NAME##_NULL) return;
  1603.     (*include)[i1]=true;
  1604.     if (i2 == NAME##_NULL) return;
  1605.     (*include)[i2]=true;
  1606.     if (i3 == NAME##_NULL) return;
  1607.     (*include)[i3]=true;
  1608.     if (i4 == NAME##_NULL) return;
  1609.     (*include)[i4]=true;
  1610.   }
  1611.   template <class Manip>
  1612.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  1613.   (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4) { 
  1614.     delem = d;
  1615.     comp = c;
  1616.     manip = m;
  1617.     del_vector = true; 
  1618.     obj = o; 
  1619.     include = new vector<bool>(4, false); 
  1620.     if (i1) (*include)[0]=true;
  1621.     if (i2) (*include)[1]=true;
  1622.     if (i3) (*include)[2]=true;
  1623.     if (i4) (*include)[3]=true;
  1624.   } 
  1625.   template <class Manip>
  1626.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  1627.   (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4) { 
  1628.     delem = d;
  1629.     comp = c;
  1630.     manip = m;
  1631.     del_vector = true; 
  1632.     obj = o; 
  1633.     include = new vector<bool>(4, false); 
  1634.     if (i1 == NAME##_NULL) return;
  1635.     (*include)[i1]=true;
  1636.     if (i2 == NAME##_NULL) return;
  1637.     (*include)[i2]=true;
  1638.     if (i3 == NAME##_NULL) return;
  1639.     (*include)[i3]=true;
  1640.     if (i4 == NAME##_NULL) return;
  1641.     (*include)[i4]=true;
  1642.   }
  1643.   template <class Manip>
  1644.   ostream& operator << (ostream& s, const NAME##_value_list<Manip>& obj) { 
  1645.     s << obj.manip << obj.obj->##I1 << obj.delem;
  1646.     s << obj.manip << obj.obj->##I2 << obj.delem;
  1647.     s << obj.manip << obj.obj->##I3 << obj.delem;
  1648.     s << obj.manip << obj.obj->##I4; 
  1649.     return s; 
  1650.   } 
  1651.   template <class Manip>
  1652.   ostream& operator << (ostream& s, const NAME##_field_list<Manip>& obj) { 
  1653.     s << obj.manip << obj.obj->names[0] << obj.delem;
  1654.     s << obj.manip << obj.obj->names[1] << obj.delem;
  1655.     s << obj.manip << obj.obj->names[2] << obj.delem;
  1656.     s << obj.manip << obj.obj->names[3]; 
  1657.     return s; 
  1658.   } 
  1659.   template <class Manip>
  1660.   ostream& operator << (ostream& s, const NAME##_equal_list<Manip>& obj) { 
  1661.     s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1 << obj.delem;
  1662.     s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->##I2 << obj.delem;
  1663.     s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->##I3 << obj.delem;
  1664.     s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->##I4; 
  1665.     return s; 
  1666.   } 
  1667.   template <class Manip>
  1668.   ostream& operator << (ostream& s, const NAME##_cus_value_list<Manip>& obj) { 
  1669.     bool before = false; 
  1670.     if ((*obj.include)[0]) { 
  1671.       s << obj.manip << obj.obj->##I1;
  1672.       before = true; 
  1673.      } 
  1674.     if ((*obj.include)[1]) { 
  1675.       if (before) s << obj.delem;
  1676.       s << obj.manip << obj.obj->##I2;
  1677.       before = true; 
  1678.      } 
  1679.     if ((*obj.include)[2]) { 
  1680.       if (before) s << obj.delem;
  1681.       s << obj.manip << obj.obj->##I3;
  1682.       before = true; 
  1683.      } 
  1684.     if ((*obj.include)[3]) { 
  1685.       if (before) s << obj.delem;
  1686.       s << obj.manip << obj.obj->##I4;
  1687.      } 
  1688.     return s; 
  1689.   } 
  1690.   template <class Manip>
  1691.   ostream& operator << (ostream& s, const NAME##_cus_field_list<Manip>& obj) { 
  1692.     bool before = false; 
  1693.     if ((*obj.include)[0]) { 
  1694.       s << obj.manip << obj.obj->names[0];
  1695.       before = true; 
  1696.      } 
  1697.     if ((*obj.include)[1]) { 
  1698.       if (before) s << obj.delem;
  1699.       s << obj.manip << obj.obj->names[1];
  1700.       before = true; 
  1701.      } 
  1702.     if ((*obj.include)[2]) { 
  1703.       if (before) s << obj.delem;
  1704.       s << obj.manip << obj.obj->names[2];
  1705.       before = true; 
  1706.      } 
  1707.     if ((*obj.include)[3]) { 
  1708.       if (before) s << obj.delem;
  1709.       s << obj.manip << obj.obj->names[3];
  1710.      } 
  1711.     return s; 
  1712.   } 
  1713.   template <class Manip>
  1714.   ostream& operator << (ostream& s, const NAME##_cus_equal_list<Manip>& obj) { 
  1715.     bool before = false; 
  1716.     if ((*obj.include)[0]) { 
  1717.       s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1;
  1718.       before = true; 
  1719.      } 
  1720.     if ((*obj.include)[1]) { 
  1721.       if (before) s << obj.delem;
  1722.       s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->##I2;
  1723.       before = true; 
  1724.      } 
  1725.     if ((*obj.include)[2]) { 
  1726.       if (before) s << obj.delem;
  1727.       s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->##I3;
  1728.       before = true; 
  1729.      } 
  1730.     if ((*obj.include)[3]) { 
  1731.       if (before) s << obj.delem;
  1732.       s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->##I4;
  1733.      } 
  1734.     return s; 
  1735.   } 
  1736.   template <class Manip>
  1737.   inline NAME##_value_list<Manip> NAME##::value_list(cchar *d, Manip m) const { 
  1738.     return NAME##_value_list<Manip> (this, d, m); 
  1739.   } 
  1740.   template <class Manip>
  1741.   inline NAME##_field_list<Manip> NAME##::field_list(cchar *d, Manip m) const { 
  1742.     return NAME##_field_list<Manip> (this, d, m); 
  1743.   } 
  1744.   template <class Manip>
  1745.   inline NAME##_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m) const { 
  1746.     return NAME##_equal_list<Manip> (this, d, c, m); 
  1747.   } 
  1748.   template <class Manip>
  1749.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  1750.        bool i1, bool i2, bool i3, bool i4) const {
  1751.     return NAME##_cus_value_list<Manip> (this, d, m, i1, i2, i3, i4); 
  1752.   } 
  1753.   template <class Manip>
  1754.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  1755.  bool i1, bool i2, bool i3, bool i4) const { 
  1756.     return NAME##_cus_field_list<Manip> (this, d, m, i1, i2, i3, i4); 
  1757.   } 
  1758.   template <class Manip>
  1759.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m,
  1760.  bool i1, bool i2, bool i3, bool i4) const { 
  1761.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1, i2, i3, i4); 
  1762.   } 
  1763.   template <class Manip>
  1764.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  1765.        ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4) const { 
  1766.     return NAME##_cus_value_list<Manip> (this, d, m, i1, i2, i3, i4); 
  1767.   } 
  1768.   template <class Manip>
  1769.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  1770.  ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4) const {
  1771.     return NAME##_cus_field_list<Manip> (this, d, m, i1, i2, i3, i4); 
  1772.   } 
  1773.   template <class Manip>
  1774.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m, 
  1775.  ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4) const { 
  1776.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1, i2, i3, i4); 
  1777.   } 
  1778.   template <class Manip>
  1779.   inline NAME##_cus_value_list<Manip> 
  1780.   NAME##::value_list(cchar *d, Manip m, sql_cmp_type sc) const {
  1781.     sql_compare_type_def_##CMP (NAME, value, NUM);
  1782.   }
  1783.   template <class Manip>
  1784.   inline NAME##_cus_field_list<Manip> 
  1785.   NAME##::field_list(cchar *d, Manip m, sql_cmp_type sc) const {
  1786.     sql_compare_type_def_##CMP (NAME, field, NUM);
  1787.   }
  1788.   template <class Manip>
  1789.   inline NAME##_cus_equal_list<Manip> 
  1790.   NAME##::equal_list(cchar *d, cchar *c, Manip m, sql_cmp_type sc) const {
  1791.     sql_compare_type_defe_##CMP (NAME, equal, NUM);
  1792.   }
  1793.   template <sql_dummy_type dummy> 
  1794.   void populate_##NAME (NAME *s, const MysqlRow &row) { 
  1795.     s->##I1 = row[ O1 ];
  1796.     s->##I2 = row[ O2 ];
  1797.     s->##I3 = row[ O3 ];
  1798.     s->##I4 = row[ O4 ];
  1799.   } 
  1800.   inline NAME##::##NAME (const MysqlRow &row) 
  1801.                                         {populate_##NAME##<sql_dummy>(this, row);}
  1802.   inline void NAME##::set (const MysqlRow &row)
  1803.                                         {populate_##NAME##<sql_dummy>(this, row);}
  1804.   sql_COMPARE__##CMP##(NAME, I1, I2, I3, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  1805. #define sql_create_basic_4(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4) 
  1806.   sql_create_basic_c_order_4(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3)
  1807. #define sql_create_4(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4) 
  1808.   sql_create_complete_4(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3) 
  1809. #define sql_create_c_order_4(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4) 
  1810.   sql_create_complete_4(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4)
  1811. #define sql_create_c_names_4(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4) 
  1812.   sql_create_complete_4(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3)
  1813. // ---------------------------------------------------
  1814. //                  End Create 4
  1815. // ---------------------------------------------------
  1816. // ---------------------------------------------------
  1817. //                  Begin Create 5
  1818. // ---------------------------------------------------
  1819. #define sql_create_basic_c_order_5(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5)
  1820.   struct NAME; 
  1821.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  1822.   struct NAME { 
  1823.     T1 I1;
  1824.     T2 I2;
  1825.     T3 I3;
  1826.     T4 I4;
  1827.     T5 I5; 
  1828.     NAME () {} 
  1829.     NAME (const MysqlRow &row);
  1830.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  1831.   }; 
  1832.   template <sql_dummy_type dummy> 
  1833.     void populate_##NAME (NAME *s, const MysqlRow &row) { 
  1834.     s->##I1 = row[ O1 ];
  1835.     s->##I2 = row[ O2 ];
  1836.     s->##I3 = row[ O3 ];
  1837.     s->##I4 = row[ O4 ];
  1838.     s->##I5 = row[ O5 ]; 
  1839.   } 
  1840.   inline NAME##::##NAME (const MysqlRow &row) 
  1841.     {populate_##NAME##<sql_dummy>(this, row);} 
  1842.   sql_COMPARE__##CMP##(NAME, I1, I2, I3, I4, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  1843. #define sql_create_complete_5(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5) 
  1844.   struct NAME; 
  1845.   enum NAME##_enum { 
  1846.     NAME##_##I1,
  1847.     NAME##_##I2,
  1848.     NAME##_##I3,
  1849.     NAME##_##I4,
  1850.     NAME##_##I5 
  1851.     ,NAME##_NULL 
  1852.   }; 
  1853.   template <class Manip>
  1854.   class NAME##_value_list { 
  1855.   /*friend ostream& operator << <> (ostream&, const NAME##_value_list&); */
  1856.   public: 
  1857.     const NAME *obj;
  1858.     cchar *delem;
  1859.     Manip manip;
  1860.   public: 
  1861.     NAME##_value_list (const NAME *o, cchar *d, Manip m) 
  1862.       : obj(o), delem(d), manip(m) {} 
  1863.   };
  1864.   template <class Manip>
  1865.   class NAME##_##field_list {
  1866.   /* friend ostream& operator << <> (ostream&, const NAME##_field_list&); */
  1867.   public: 
  1868.     const NAME *obj; 
  1869.     cchar *delem;
  1870.     Manip manip;
  1871.   public: 
  1872.     NAME##_field_list (const NAME *o, cchar *d, Manip m) 
  1873.       : obj(o), delem(d), manip(m) {} 
  1874.   };
  1875.   template <class Manip>
  1876.   class NAME##_equal_list { 
  1877.   /* friend ostream& operator << <> (ostream&, const NAME##_equal_list&); */
  1878.   public: 
  1879.     const NAME *obj;
  1880.     cchar *delem;
  1881.     cchar *comp;
  1882.     Manip manip;
  1883.   public: 
  1884.     NAME##_equal_list (const NAME *o, cchar *d, cchar *c, Manip m) 
  1885.       : obj(o), delem(d), comp(c), manip(m) {}
  1886.   };
  1887.   template <class Manip>
  1888.   class NAME##_cus_value_list {
  1889.   /* friend ostream& operator << <> (ostream&, 
  1890.      const NAME##_cus_value_list<Manip>&); */
  1891.   public:
  1892.     const NAME *obj;
  1893.     cchar *delem;
  1894.     Manip manip;
  1895.     vector<bool> *include;
  1896.     bool del_vector;
  1897.   public: 
  1898.     ~##NAME##_cus_value_list () {if (del_vector) delete include;} 
  1899.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5);
  1900.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5); 
  1901.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m ,vector<bool>)
  1902.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  1903.   };
  1904.   template <class Manip>
  1905.   class NAME##_cus_field_list { 
  1906.   /* friend ostream& operator << <> (ostream&, 
  1907.         const NAME##_cus_field_list<Manip>&); */
  1908.   public:
  1909.     const NAME *obj; 
  1910.     cchar *delem;
  1911.     Manip manip;
  1912.     vector<bool> *include; 
  1913.     bool del_vector; 
  1914.   public: 
  1915.     ~##NAME##_cus_field_list () {if (del_vector) delete include;} 
  1916.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5); 
  1917.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5); 
  1918.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, vector<bool> *i) 
  1919.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  1920.   };
  1921.  template <class Manip>
  1922.  class NAME##_cus_equal_list {
  1923.  /* friend ostream& operator << <> (ostream&, 
  1924.   const NAME##_cus_equal_list<Manip>&); */
  1925.   public:
  1926.     const NAME *obj;
  1927.     vector<bool> *include;
  1928.     bool del_vector;
  1929.     cchar *delem;
  1930.     cchar *comp;
  1931.     Manip manip;
  1932.   public:
  1933.     ~##NAME##_##cus_equal_list () {if (del_vector) delete include;}
  1934.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5); 
  1935.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5); 
  1936.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, vector<bool> *i) 
  1937.       : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}
  1938.   };
  1939.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  1940.   struct NAME { 
  1941.     T1 I1;
  1942.     T2 I2;
  1943.     T3 I3;
  1944.     T4 I4;
  1945.     T5 I5; 
  1946.     NAME () {} 
  1947.     NAME (const MysqlRow &row);
  1948.     void set (const MysqlRow &row);
  1949.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  1950.     sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  1951.     static char *names[];
  1952.     static char *_table;
  1953.     static char *& table() {return _table;}
  1954.     /* cus_data */
  1955.     NAME##_cus_value_list<quote_type0> value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {
  1956.       return value_list(",", mysql_quote, i1, i2, i3, i4, i5);
  1957.     }
  1958.     NAME##_cus_value_list<quote_type0> value_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const {
  1959.       return value_list(",", mysql_quote, i1, i2, i3, i4, i5);
  1960.     }
  1961.     NAME##_cus_value_list<quote_type0> value_list(vector<bool> *i) const {
  1962.       return value_list(",", mysql_quote, i);
  1963.     }
  1964.     NAME##_cus_value_list<quote_type0> value_list(sql_cmp_type sc) const {
  1965.       return value_list(",", mysql_quote, sc);
  1966.     }
  1967.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {
  1968.       return value_list(d, mysql_quote, i1, i2, i3, i4, i5);
  1969.     }
  1970.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const {
  1971.       return value_list(d, mysql_quote, i1, i2, i3, i4, i5);
  1972.     }
  1973.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  1974. vector<bool> *i) const {
  1975.       return value_list(d, mysql_quote, i);
  1976.     }
  1977.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  1978. sql_cmp_type sc) const {
  1979.       return value_list(d, mysql_quote, sc);
  1980.     }
  1981.     template <class Manip>
  1982.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  1983.   bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const; 
  1984.     template <class Manip>
  1985.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  1986.   ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const; 
  1987.     template <class Manip>
  1988.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  1989.   vector<bool> *i) const;
  1990.     template <class Manip>
  1991.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  1992.   sql_cmp_type sc) const;
  1993.     /* cus field */
  1994.     NAME##_cus_field_list<do_nothing_type0> field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {
  1995.       return field_list(",", mysql_do_nothing, i1, i2, i3, i4, i5);
  1996.     }
  1997.     NAME##_cus_field_list<do_nothing_type0> field_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const {
  1998.       return field_list(",", mysql_do_nothing, i1, i2, i3, i4, i5);
  1999.     }
  2000.     NAME##_cus_field_list<do_nothing_type0> field_list(vector<bool> *i) const {
  2001.       return field_list(",", mysql_do_nothing, i);
  2002.     }
  2003.     NAME##_cus_field_list<do_nothing_type0> field_list(sql_cmp_type sc) const
  2004.     {
  2005.       return field_list(",", mysql_do_nothing, sc);
  2006.     }
  2007.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  2008.        bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {
  2009.       return field_list(d, mysql_do_nothing, i1, i2, i3, i4, i5);
  2010.     }
  2011.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d,
  2012.        ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const {
  2013.       return field_list(d, mysql_do_nothing, i1, i2, i3, i4, i5);
  2014.     }
  2015.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  2016. vector<bool> *i) const {
  2017.       return field_list(d, mysql_do_nothing, i);
  2018.     }
  2019.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  2020. sql_cmp_type sc) const {
  2021.       return field_list(d, mysql_do_nothing, sc);
  2022.     }
  2023.     template <class Manip>
  2024.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  2025.     bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const; 
  2026.     template <class Manip>
  2027.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  2028.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const; 
  2029.     template <class Manip>
  2030.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  2031.     vector<bool> *i) const;
  2032.     template <class Manip>
  2033.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m, 
  2034.     sql_cmp_type sc) const;
  2035.     /* cus equal */
  2036.     NAME##_cus_equal_list<quote_type0> equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {
  2037.       return equal_list(",", " = ", mysql_quote, i1, i2, i3, i4, i5);
  2038.     }
  2039.     NAME##_cus_equal_list<quote_type0> equal_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const {
  2040.       return equal_list(",", " = ", mysql_quote, i1, i2, i3, i4, i5);
  2041.     }
  2042.     NAME##_cus_equal_list<quote_type0> equal_list(vector<bool> *i) const {
  2043.       return equal_list(",", " = ", mysql_quote, i);
  2044.     }
  2045.     NAME##_cus_equal_list<quote_type0> equal_list(sql_cmp_type sc) const {
  2046.       return equal_list(",", " = ", mysql_quote, sc);
  2047.     }
  2048.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {
  2049.       return equal_list(d, " = ", mysql_quote, i1, i2, i3, i4, i5);
  2050.     }
  2051.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const {
  2052.       return equal_list(d, " = ", mysql_quote, i1, i2, i3, i4, i5);
  2053.     }
  2054.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  2055. vector<bool> *i) const {
  2056.       return equal_list(d, " = ", mysql_quote, i);
  2057.     }
  2058.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  2059. sql_cmp_type sc) const {
  2060.       return equal_list(d, " = ", mysql_quote, sc);
  2061.     }
  2062.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  2063.                                                 bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {
  2064.       return equal_list(d, c, mysql_quote, i1, i2, i3, i4, i5);
  2065.     }
  2066.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  2067.                                                 ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const {
  2068.       return equal_list(d, c, mysql_quote, i1, i2, i3, i4, i5);
  2069.     }
  2070.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  2071. vector<bool> *i) const {
  2072.       return equal_list(d, c, mysql_quote, i);
  2073.     }
  2074.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  2075. sql_cmp_type sc) const {
  2076.       return equal_list(d, c, mysql_quote, sc);
  2077.     }
  2078.     template <class Manip>
  2079.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  2080.     bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const; 
  2081.     template <class Manip>
  2082.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  2083.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL) const; 
  2084.     template <class Manip>
  2085.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  2086.     vector<bool> *i) const;
  2087.     template <class Manip>
  2088.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  2089.     sql_cmp_type sc) const;
  2090.     NAME##_value_list<quote_type0> value_list() const {
  2091.       return value_list(",", mysql_quote);}
  2092.     NAME##_value_list<quote_type0> value_list(cchar *d) const {
  2093.       return value_list(d, mysql_quote);}
  2094.     template <class Manip> 
  2095.     NAME##_value_list<Manip> value_list(cchar *d, Manip m) const; 
  2096.     NAME##_field_list<do_nothing_type0> field_list() const {
  2097.       return field_list(",", mysql_do_nothing);}
  2098.     NAME##_field_list<do_nothing_type0> field_list(cchar *d) const {
  2099.       return field_list(d, mysql_do_nothing);}
  2100.     template <class Manip>
  2101.     NAME##_field_list<Manip> field_list(cchar *d, Manip m) const; 
  2102.     NAME##_equal_list<quote_type0> equal_list(cchar *d = ",", 
  2103.                                               cchar *c = " = ") const{
  2104.       return equal_list(d, c, mysql_quote);}
  2105.     template <class Manip>
  2106.     NAME##_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m) const; 
  2107.   }; 
  2108.   char *##NAME##::names[] = { 
  2109.     N1 ,
  2110.     N2 ,
  2111.     N3 ,
  2112.     N4 ,
  2113.     N5  
  2114.   }; 
  2115.   char *##NAME##::_table = #NAME ;  
  2116.   template <class Manip>
  2117.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  2118.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5) 
  2119.   { 
  2120.     delem = d;
  2121.     manip = m;
  2122.     del_vector = true;
  2123.     obj = o; 
  2124.     include = new vector<bool>(5, false);
  2125.     if (i1) (*include)[0]=true;
  2126.     if (i2) (*include)[1]=true;
  2127.     if (i3) (*include)[2]=true;
  2128.     if (i4) (*include)[3]=true;
  2129.     if (i5) (*include)[4]=true;
  2130.   } 
  2131.   template <class Manip>
  2132.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  2133.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5) { 
  2134.     delem = d;
  2135.     manip = m;
  2136.     del_vector = true; 
  2137.     obj = o; 
  2138.     include = new vector<bool>(5, false); 
  2139.     if (i1 == NAME##_NULL) return;
  2140.     (*include)[i1]=true;
  2141.     if (i2 == NAME##_NULL) return;
  2142.     (*include)[i2]=true;
  2143.     if (i3 == NAME##_NULL) return;
  2144.     (*include)[i3]=true;
  2145.     if (i4 == NAME##_NULL) return;
  2146.     (*include)[i4]=true;
  2147.     if (i5 == NAME##_NULL) return;
  2148.     (*include)[i5]=true;
  2149.   }
  2150.   template <class Manip>
  2151.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  2152.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5) {
  2153.     delem = d;
  2154.     manip = m;
  2155.     del_vector = true; 
  2156.     obj = o; 
  2157.     include = new vector<bool>(5, false); 
  2158.     if (i1) (*include)[0]=true;
  2159.     if (i2) (*include)[1]=true;
  2160.     if (i3) (*include)[2]=true;
  2161.     if (i4) (*include)[3]=true;
  2162.     if (i5) (*include)[4]=true;
  2163.   } 
  2164.   template <class Manip>
  2165.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  2166.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5) { 
  2167.     delem = d;
  2168.     manip = m;
  2169.     del_vector = true; 
  2170.     obj = o; 
  2171.     include = new vector<bool>(5, false); 
  2172.     if (i1 == NAME##_NULL) return;
  2173.     (*include)[i1]=true;
  2174.     if (i2 == NAME##_NULL) return;
  2175.     (*include)[i2]=true;
  2176.     if (i3 == NAME##_NULL) return;
  2177.     (*include)[i3]=true;
  2178.     if (i4 == NAME##_NULL) return;
  2179.     (*include)[i4]=true;
  2180.     if (i5 == NAME##_NULL) return;
  2181.     (*include)[i5]=true;
  2182.   }
  2183.   template <class Manip>
  2184.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  2185.   (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5) { 
  2186.     delem = d;
  2187.     comp = c;
  2188.     manip = m;
  2189.     del_vector = true; 
  2190.     obj = o; 
  2191.     include = new vector<bool>(5, false); 
  2192.     if (i1) (*include)[0]=true;
  2193.     if (i2) (*include)[1]=true;
  2194.     if (i3) (*include)[2]=true;
  2195.     if (i4) (*include)[3]=true;
  2196.     if (i5) (*include)[4]=true;
  2197.   } 
  2198.   template <class Manip>
  2199.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  2200.   (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5) { 
  2201.     delem = d;
  2202.     comp = c;
  2203.     manip = m;
  2204.     del_vector = true; 
  2205.     obj = o; 
  2206.     include = new vector<bool>(5, false); 
  2207.     if (i1 == NAME##_NULL) return;
  2208.     (*include)[i1]=true;
  2209.     if (i2 == NAME##_NULL) return;
  2210.     (*include)[i2]=true;
  2211.     if (i3 == NAME##_NULL) return;
  2212.     (*include)[i3]=true;
  2213.     if (i4 == NAME##_NULL) return;
  2214.     (*include)[i4]=true;
  2215.     if (i5 == NAME##_NULL) return;
  2216.     (*include)[i5]=true;
  2217.   }
  2218.   template <class Manip>
  2219.   ostream& operator << (ostream& s, const NAME##_value_list<Manip>& obj) { 
  2220.     s << obj.manip << obj.obj->##I1 << obj.delem;
  2221.     s << obj.manip << obj.obj->##I2 << obj.delem;
  2222.     s << obj.manip << obj.obj->##I3 << obj.delem;
  2223.     s << obj.manip << obj.obj->##I4 << obj.delem;
  2224.     s << obj.manip << obj.obj->##I5; 
  2225.     return s; 
  2226.   } 
  2227.   template <class Manip>
  2228.   ostream& operator << (ostream& s, const NAME##_field_list<Manip>& obj) { 
  2229.     s << obj.manip << obj.obj->names[0] << obj.delem;
  2230.     s << obj.manip << obj.obj->names[1] << obj.delem;
  2231.     s << obj.manip << obj.obj->names[2] << obj.delem;
  2232.     s << obj.manip << obj.obj->names[3] << obj.delem;
  2233.     s << obj.manip << obj.obj->names[4]; 
  2234.     return s; 
  2235.   } 
  2236.   template <class Manip>
  2237.   ostream& operator << (ostream& s, const NAME##_equal_list<Manip>& obj) { 
  2238.     s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1 << obj.delem;
  2239.     s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->##I2 << obj.delem;
  2240.     s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->##I3 << obj.delem;
  2241.     s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->##I4 << obj.delem;
  2242.     s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->##I5; 
  2243.     return s; 
  2244.   } 
  2245.   template <class Manip>
  2246.   ostream& operator << (ostream& s, const NAME##_cus_value_list<Manip>& obj) { 
  2247.     bool before = false; 
  2248.     if ((*obj.include)[0]) { 
  2249.       s << obj.manip << obj.obj->##I1;
  2250.       before = true; 
  2251.      } 
  2252.     if ((*obj.include)[1]) { 
  2253.       if (before) s << obj.delem;
  2254.       s << obj.manip << obj.obj->##I2;
  2255.       before = true; 
  2256.      } 
  2257.     if ((*obj.include)[2]) { 
  2258.       if (before) s << obj.delem;
  2259.       s << obj.manip << obj.obj->##I3;
  2260.       before = true; 
  2261.      } 
  2262.     if ((*obj.include)[3]) { 
  2263.       if (before) s << obj.delem;
  2264.       s << obj.manip << obj.obj->##I4;
  2265.       before = true; 
  2266.      } 
  2267.     if ((*obj.include)[4]) { 
  2268.       if (before) s << obj.delem;
  2269.       s << obj.manip << obj.obj->##I5;
  2270.      } 
  2271.     return s; 
  2272.   } 
  2273.   template <class Manip>
  2274.   ostream& operator << (ostream& s, const NAME##_cus_field_list<Manip>& obj) { 
  2275.     bool before = false; 
  2276.     if ((*obj.include)[0]) { 
  2277.       s << obj.manip << obj.obj->names[0];
  2278.       before = true; 
  2279.      } 
  2280.     if ((*obj.include)[1]) { 
  2281.       if (before) s << obj.delem;
  2282.       s << obj.manip << obj.obj->names[1];
  2283.       before = true; 
  2284.      } 
  2285.     if ((*obj.include)[2]) { 
  2286.       if (before) s << obj.delem;
  2287.       s << obj.manip << obj.obj->names[2];
  2288.       before = true; 
  2289.      } 
  2290.     if ((*obj.include)[3]) { 
  2291.       if (before) s << obj.delem;
  2292.       s << obj.manip << obj.obj->names[3];
  2293.       before = true; 
  2294.      } 
  2295.     if ((*obj.include)[4]) { 
  2296.       if (before) s << obj.delem;
  2297.       s << obj.manip << obj.obj->names[4];
  2298.      } 
  2299.     return s; 
  2300.   } 
  2301.   template <class Manip>
  2302.   ostream& operator << (ostream& s, const NAME##_cus_equal_list<Manip>& obj) { 
  2303.     bool before = false; 
  2304.     if ((*obj.include)[0]) { 
  2305.       s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->##I1;
  2306.       before = true; 
  2307.      } 
  2308.     if ((*obj.include)[1]) { 
  2309.       if (before) s << obj.delem;
  2310.       s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->##I2;
  2311.       before = true; 
  2312.      } 
  2313.     if ((*obj.include)[2]) { 
  2314.       if (before) s << obj.delem;
  2315.       s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->##I3;
  2316.       before = true; 
  2317.      } 
  2318.     if ((*obj.include)[3]) { 
  2319.       if (before) s << obj.delem;
  2320.       s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->##I4;
  2321.       before = true; 
  2322.      } 
  2323.     if ((*obj.include)[4]) { 
  2324.       if (before) s << obj.delem;
  2325.       s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->##I5;
  2326.      } 
  2327.     return s; 
  2328.   } 
  2329.   template <class Manip>
  2330.   inline NAME##_value_list<Manip> NAME##::value_list(cchar *d, Manip m) const { 
  2331.     return NAME##_value_list<Manip> (this, d, m); 
  2332.   } 
  2333.   template <class Manip>
  2334.   inline NAME##_field_list<Manip> NAME##::field_list(cchar *d, Manip m) const { 
  2335.     return NAME##_field_list<Manip> (this, d, m); 
  2336.   } 
  2337.   template <class Manip>
  2338.   inline NAME##_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m) const { 
  2339.     return NAME##_equal_list<Manip> (this, d, c, m); 
  2340.   } 
  2341.   template <class Manip>
  2342.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  2343.        bool i1, bool i2, bool i3, bool i4, bool i5) const {
  2344.     return NAME##_cus_value_list<Manip> (this, d, m, i1, i2, i3, i4, i5); 
  2345.   } 
  2346.   template <class Manip>
  2347.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  2348.  bool i1, bool i2, bool i3, bool i4, bool i5) const { 
  2349.     return NAME##_cus_field_list<Manip> (this, d, m, i1, i2, i3, i4, i5); 
  2350.   } 
  2351.   template <class Manip>
  2352.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m,
  2353.  bool i1, bool i2, bool i3, bool i4, bool i5) const { 
  2354.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1, i2, i3, i4, i5); 
  2355.   } 
  2356.   template <class Manip>
  2357.   inline NAME##_cus_value_list<Manip> NAME##::value_list(cchar *d, Manip m,
  2358.        ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5) const { 
  2359.     return NAME##_cus_value_list<Manip> (this, d, m, i1, i2, i3, i4, i5); 
  2360.   } 
  2361.   template <class Manip>
  2362.   inline NAME##_cus_field_list<Manip> NAME##::field_list(cchar *d, Manip m,
  2363.  ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5) const {
  2364.     return NAME##_cus_field_list<Manip> (this, d, m, i1, i2, i3, i4, i5); 
  2365.   } 
  2366.   template <class Manip>
  2367.   inline NAME##_cus_equal_list<Manip> NAME##::equal_list(cchar *d, cchar *c, Manip m, 
  2368.  ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5) const { 
  2369.     return NAME##_cus_equal_list<Manip> (this, d, c, m, i1, i2, i3, i4, i5); 
  2370.   } 
  2371.   template <class Manip>
  2372.   inline NAME##_cus_value_list<Manip> 
  2373.   NAME##::value_list(cchar *d, Manip m, sql_cmp_type sc) const {
  2374.     sql_compare_type_def_##CMP (NAME, value, NUM);
  2375.   }
  2376.   template <class Manip>
  2377.   inline NAME##_cus_field_list<Manip> 
  2378.   NAME##::field_list(cchar *d, Manip m, sql_cmp_type sc) const {
  2379.     sql_compare_type_def_##CMP (NAME, field, NUM);
  2380.   }
  2381.   template <class Manip>
  2382.   inline NAME##_cus_equal_list<Manip> 
  2383.   NAME##::equal_list(cchar *d, cchar *c, Manip m, sql_cmp_type sc) const {
  2384.     sql_compare_type_defe_##CMP (NAME, equal, NUM);
  2385.   }
  2386.   template <sql_dummy_type dummy> 
  2387.   void populate_##NAME (NAME *s, const MysqlRow &row) { 
  2388.     s->##I1 = row[ O1 ];
  2389.     s->##I2 = row[ O2 ];
  2390.     s->##I3 = row[ O3 ];
  2391.     s->##I4 = row[ O4 ];
  2392.     s->##I5 = row[ O5 ];
  2393.   } 
  2394.   inline NAME##::##NAME (const MysqlRow &row) 
  2395.                                         {populate_##NAME##<sql_dummy>(this, row);}
  2396.   inline void NAME##::set (const MysqlRow &row)
  2397.                                         {populate_##NAME##<sql_dummy>(this, row);}
  2398.   sql_COMPARE__##CMP##(NAME, I1, I2, I3, I4, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  2399. #define sql_create_basic_5(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5) 
  2400.   sql_create_basic_c_order_5(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4)
  2401. #define sql_create_5(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5) 
  2402.   sql_create_complete_5(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4) 
  2403. #define sql_create_c_order_5(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5) 
  2404.   sql_create_complete_5(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5)
  2405. #define sql_create_c_names_5(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5) 
  2406.   sql_create_complete_5(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4)
  2407. // ---------------------------------------------------
  2408. //                  End Create 5
  2409. // ---------------------------------------------------
  2410. // ---------------------------------------------------
  2411. //                  Begin Create 6
  2412. // ---------------------------------------------------
  2413. #define sql_create_basic_c_order_6(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6)
  2414.   struct NAME; 
  2415.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  2416.   struct NAME { 
  2417.     T1 I1;
  2418.     T2 I2;
  2419.     T3 I3;
  2420.     T4 I4;
  2421.     T5 I5;
  2422.     T6 I6; 
  2423.     NAME () {} 
  2424.     NAME (const MysqlRow &row);
  2425.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  2426.   }; 
  2427.   template <sql_dummy_type dummy> 
  2428.     void populate_##NAME (NAME *s, const MysqlRow &row) { 
  2429.     s->##I1 = row[ O1 ];
  2430.     s->##I2 = row[ O2 ];
  2431.     s->##I3 = row[ O3 ];
  2432.     s->##I4 = row[ O4 ];
  2433.     s->##I5 = row[ O5 ];
  2434.     s->##I6 = row[ O6 ]; 
  2435.   } 
  2436.   inline NAME##::##NAME (const MysqlRow &row) 
  2437.     {populate_##NAME##<sql_dummy>(this, row);} 
  2438.   sql_COMPARE__##CMP##(NAME, I1, I2, I3, I4, I5, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
  2439. #define sql_create_complete_6(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6) 
  2440.   struct NAME; 
  2441.   enum NAME##_enum { 
  2442.     NAME##_##I1,
  2443.     NAME##_##I2,
  2444.     NAME##_##I3,
  2445.     NAME##_##I4,
  2446.     NAME##_##I5,
  2447.     NAME##_##I6 
  2448.     ,NAME##_NULL 
  2449.   }; 
  2450.   template <class Manip>
  2451.   class NAME##_value_list { 
  2452.   /*friend ostream& operator << <> (ostream&, const NAME##_value_list&); */
  2453.   public: 
  2454.     const NAME *obj;
  2455.     cchar *delem;
  2456.     Manip manip;
  2457.   public: 
  2458.     NAME##_value_list (const NAME *o, cchar *d, Manip m) 
  2459.       : obj(o), delem(d), manip(m) {} 
  2460.   };
  2461.   template <class Manip>
  2462.   class NAME##_##field_list {
  2463.   /* friend ostream& operator << <> (ostream&, const NAME##_field_list&); */
  2464.   public: 
  2465.     const NAME *obj; 
  2466.     cchar *delem;
  2467.     Manip manip;
  2468.   public: 
  2469.     NAME##_field_list (const NAME *o, cchar *d, Manip m) 
  2470.       : obj(o), delem(d), manip(m) {} 
  2471.   };
  2472.   template <class Manip>
  2473.   class NAME##_equal_list { 
  2474.   /* friend ostream& operator << <> (ostream&, const NAME##_equal_list&); */
  2475.   public: 
  2476.     const NAME *obj;
  2477.     cchar *delem;
  2478.     cchar *comp;
  2479.     Manip manip;
  2480.   public: 
  2481.     NAME##_equal_list (const NAME *o, cchar *d, cchar *c, Manip m) 
  2482.       : obj(o), delem(d), comp(c), manip(m) {}
  2483.   };
  2484.   template <class Manip>
  2485.   class NAME##_cus_value_list {
  2486.   /* friend ostream& operator << <> (ostream&, 
  2487.      const NAME##_cus_value_list<Manip>&); */
  2488.   public:
  2489.     const NAME *obj;
  2490.     cchar *delem;
  2491.     Manip manip;
  2492.     vector<bool> *include;
  2493.     bool del_vector;
  2494.   public: 
  2495.     ~##NAME##_cus_value_list () {if (del_vector) delete include;} 
  2496.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6);
  2497.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5, ##NAME##_enum i6); 
  2498.     NAME##_cus_value_list (const NAME *o, cchar *d, Manip m ,vector<bool>)
  2499.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  2500.   };
  2501.   template <class Manip>
  2502.   class NAME##_cus_field_list { 
  2503.   /* friend ostream& operator << <> (ostream&, 
  2504.         const NAME##_cus_field_list<Manip>&); */
  2505.   public:
  2506.     const NAME *obj; 
  2507.     cchar *delem;
  2508.     Manip manip;
  2509.     vector<bool> *include; 
  2510.     bool del_vector; 
  2511.   public: 
  2512.     ~##NAME##_cus_field_list () {if (del_vector) delete include;} 
  2513.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6); 
  2514.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5, ##NAME##_enum i6); 
  2515.     NAME##_cus_field_list (const NAME *o, cchar *d, Manip m, vector<bool> *i) 
  2516.       : obj(o), include(i), del_vector(false), delem(d), manip(m) {}
  2517.   };
  2518.  template <class Manip>
  2519.  class NAME##_cus_equal_list {
  2520.  /* friend ostream& operator << <> (ostream&, 
  2521.   const NAME##_cus_equal_list<Manip>&); */
  2522.   public:
  2523.     const NAME *obj;
  2524.     vector<bool> *include;
  2525.     bool del_vector;
  2526.     cchar *delem;
  2527.     cchar *comp;
  2528.     Manip manip;
  2529.   public:
  2530.     ~##NAME##_##cus_equal_list () {if (del_vector) delete include;}
  2531.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6); 
  2532.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5, ##NAME##_enum i6); 
  2533.     NAME##_##cus_equal_list (const NAME *o, cchar *d, cchar *c, Manip m, vector<bool> *i) 
  2534.       : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}
  2535.   };
  2536.   template <sql_dummy_type dummy> int sql_compare_##NAME (const NAME &, const NAME &);
  2537.   struct NAME { 
  2538.     T1 I1;
  2539.     T2 I2;
  2540.     T3 I3;
  2541.     T4 I4;
  2542.     T5 I5;
  2543.     T6 I6; 
  2544.     NAME () {} 
  2545.     NAME (const MysqlRow &row);
  2546.     void set (const MysqlRow &row);
  2547.     sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  2548.     sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  2549.     static char *names[];
  2550.     static char *_table;
  2551.     static char *& table() {return _table;}
  2552.     /* cus_data */
  2553.     NAME##_cus_value_list<quote_type0> value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {
  2554.       return value_list(",", mysql_quote, i1, i2, i3, i4, i5, i6);
  2555.     }
  2556.     NAME##_cus_value_list<quote_type0> value_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const {
  2557.       return value_list(",", mysql_quote, i1, i2, i3, i4, i5, i6);
  2558.     }
  2559.     NAME##_cus_value_list<quote_type0> value_list(vector<bool> *i) const {
  2560.       return value_list(",", mysql_quote, i);
  2561.     }
  2562.     NAME##_cus_value_list<quote_type0> value_list(sql_cmp_type sc) const {
  2563.       return value_list(",", mysql_quote, sc);
  2564.     }
  2565.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {
  2566.       return value_list(d, mysql_quote, i1, i2, i3, i4, i5, i6);
  2567.     }
  2568.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const {
  2569.       return value_list(d, mysql_quote, i1, i2, i3, i4, i5, i6);
  2570.     }
  2571.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  2572. vector<bool> *i) const {
  2573.       return value_list(d, mysql_quote, i);
  2574.     }
  2575.     NAME##_cus_value_list<quote_type0> value_list(cchar *d, 
  2576. sql_cmp_type sc) const {
  2577.       return value_list(d, mysql_quote, sc);
  2578.     }
  2579.     template <class Manip>
  2580.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  2581.   bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const; 
  2582.     template <class Manip>
  2583.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m,
  2584.   ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const; 
  2585.     template <class Manip>
  2586.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  2587.   vector<bool> *i) const;
  2588.     template <class Manip>
  2589.     NAME##_cus_value_list<Manip> value_list(cchar *d, Manip m, 
  2590.   sql_cmp_type sc) const;
  2591.     /* cus field */
  2592.     NAME##_cus_field_list<do_nothing_type0> field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {
  2593.       return field_list(",", mysql_do_nothing, i1, i2, i3, i4, i5, i6);
  2594.     }
  2595.     NAME##_cus_field_list<do_nothing_type0> field_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const {
  2596.       return field_list(",", mysql_do_nothing, i1, i2, i3, i4, i5, i6);
  2597.     }
  2598.     NAME##_cus_field_list<do_nothing_type0> field_list(vector<bool> *i) const {
  2599.       return field_list(",", mysql_do_nothing, i);
  2600.     }
  2601.     NAME##_cus_field_list<do_nothing_type0> field_list(sql_cmp_type sc) const
  2602.     {
  2603.       return field_list(",", mysql_do_nothing, sc);
  2604.     }
  2605.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  2606.        bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {
  2607.       return field_list(d, mysql_do_nothing, i1, i2, i3, i4, i5, i6);
  2608.     }
  2609.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d,
  2610.        ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const {
  2611.       return field_list(d, mysql_do_nothing, i1, i2, i3, i4, i5, i6);
  2612.     }
  2613.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  2614. vector<bool> *i) const {
  2615.       return field_list(d, mysql_do_nothing, i);
  2616.     }
  2617.     NAME##_cus_field_list<do_nothing_type0> field_list(cchar *d, 
  2618. sql_cmp_type sc) const {
  2619.       return field_list(d, mysql_do_nothing, sc);
  2620.     }
  2621.     template <class Manip>
  2622.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  2623.     bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const; 
  2624.     template <class Manip>
  2625.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  2626.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const; 
  2627.     template <class Manip>
  2628.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m,
  2629.     vector<bool> *i) const;
  2630.     template <class Manip>
  2631.     NAME##_cus_field_list<Manip> field_list(cchar *d, Manip m, 
  2632.     sql_cmp_type sc) const;
  2633.     /* cus equal */
  2634.     NAME##_cus_equal_list<quote_type0> equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {
  2635.       return equal_list(",", " = ", mysql_quote, i1, i2, i3, i4, i5, i6);
  2636.     }
  2637.     NAME##_cus_equal_list<quote_type0> equal_list(##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const {
  2638.       return equal_list(",", " = ", mysql_quote, i1, i2, i3, i4, i5, i6);
  2639.     }
  2640.     NAME##_cus_equal_list<quote_type0> equal_list(vector<bool> *i) const {
  2641.       return equal_list(",", " = ", mysql_quote, i);
  2642.     }
  2643.     NAME##_cus_equal_list<quote_type0> equal_list(sql_cmp_type sc) const {
  2644.       return equal_list(",", " = ", mysql_quote, sc);
  2645.     }
  2646.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {
  2647.       return equal_list(d, " = ", mysql_quote, i1, i2, i3, i4, i5, i6);
  2648.     }
  2649.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const {
  2650.       return equal_list(d, " = ", mysql_quote, i1, i2, i3, i4, i5, i6);
  2651.     }
  2652.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  2653. vector<bool> *i) const {
  2654.       return equal_list(d, " = ", mysql_quote, i);
  2655.     }
  2656.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, 
  2657. sql_cmp_type sc) const {
  2658.       return equal_list(d, " = ", mysql_quote, sc);
  2659.     }
  2660.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  2661.                                                 bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {
  2662.       return equal_list(d, c, mysql_quote, i1, i2, i3, i4, i5, i6);
  2663.     }
  2664.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  2665.                                                 ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const {
  2666.       return equal_list(d, c, mysql_quote, i1, i2, i3, i4, i5, i6);
  2667.     }
  2668.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  2669. vector<bool> *i) const {
  2670.       return equal_list(d, c, mysql_quote, i);
  2671.     }
  2672.     NAME##_cus_equal_list<quote_type0> equal_list(cchar *d, cchar *c,
  2673. sql_cmp_type sc) const {
  2674.       return equal_list(d, c, mysql_quote, sc);
  2675.     }
  2676.     template <class Manip>
  2677.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  2678.     bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const; 
  2679.     template <class Manip>
  2680.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  2681.     ##NAME##_enum i1, ##NAME##_enum i2 = ##NAME##_NULL, ##NAME##_enum i3 = ##NAME##_NULL, ##NAME##_enum i4 = ##NAME##_NULL, ##NAME##_enum i5 = ##NAME##_NULL, ##NAME##_enum i6 = ##NAME##_NULL) const; 
  2682.     template <class Manip>
  2683.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  2684.     vector<bool> *i) const;
  2685.     template <class Manip>
  2686.     NAME##_cus_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m, 
  2687.     sql_cmp_type sc) const;
  2688.     NAME##_value_list<quote_type0> value_list() const {
  2689.       return value_list(",", mysql_quote);}
  2690.     NAME##_value_list<quote_type0> value_list(cchar *d) const {
  2691.       return value_list(d, mysql_quote);}
  2692.     template <class Manip> 
  2693.     NAME##_value_list<Manip> value_list(cchar *d, Manip m) const; 
  2694.     NAME##_field_list<do_nothing_type0> field_list() const {
  2695.       return field_list(",", mysql_do_nothing);}
  2696.     NAME##_field_list<do_nothing_type0> field_list(cchar *d) const {
  2697.       return field_list(d, mysql_do_nothing);}
  2698.     template <class Manip>
  2699.     NAME##_field_list<Manip> field_list(cchar *d, Manip m) const; 
  2700.     NAME##_equal_list<quote_type0> equal_list(cchar *d = ",", 
  2701.                                               cchar *c = " = ") const{
  2702.       return equal_list(d, c, mysql_quote);}
  2703.     template <class Manip>
  2704.     NAME##_equal_list<Manip> equal_list(cchar *d, cchar *c, Manip m) const; 
  2705.   }; 
  2706.   char *##NAME##::names[] = { 
  2707.     N1 ,
  2708.     N2 ,
  2709.     N3 ,
  2710.     N4 ,
  2711.     N5 ,
  2712.     N6  
  2713.   }; 
  2714.   char *##NAME##::_table = #NAME ;  
  2715.   template <class Manip>
  2716.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  2717.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) 
  2718.   { 
  2719.     delem = d;
  2720.     manip = m;
  2721.     del_vector = true;
  2722.     obj = o; 
  2723.     include = new vector<bool>(6, false);
  2724.     if (i1) (*include)[0]=true;
  2725.     if (i2) (*include)[1]=true;
  2726.     if (i3) (*include)[2]=true;
  2727.     if (i4) (*include)[3]=true;
  2728.     if (i5) (*include)[4]=true;
  2729.     if (i6) (*include)[5]=true;
  2730.   } 
  2731.   template <class Manip>
  2732.   NAME##_cus_value_list<Manip>::NAME##_cus_value_list
  2733.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5, ##NAME##_enum i6) { 
  2734.     delem = d;
  2735.     manip = m;
  2736.     del_vector = true; 
  2737.     obj = o; 
  2738.     include = new vector<bool>(6, false); 
  2739.     if (i1 == NAME##_NULL) return;
  2740.     (*include)[i1]=true;
  2741.     if (i2 == NAME##_NULL) return;
  2742.     (*include)[i2]=true;
  2743.     if (i3 == NAME##_NULL) return;
  2744.     (*include)[i3]=true;
  2745.     if (i4 == NAME##_NULL) return;
  2746.     (*include)[i4]=true;
  2747.     if (i5 == NAME##_NULL) return;
  2748.     (*include)[i5]=true;
  2749.     if (i6 == NAME##_NULL) return;
  2750.     (*include)[i6]=true;
  2751.   }
  2752.   template <class Manip>
  2753.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  2754.   (const NAME *o, cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) {
  2755.     delem = d;
  2756.     manip = m;
  2757.     del_vector = true; 
  2758.     obj = o; 
  2759.     include = new vector<bool>(6, false); 
  2760.     if (i1) (*include)[0]=true;
  2761.     if (i2) (*include)[1]=true;
  2762.     if (i3) (*include)[2]=true;
  2763.     if (i4) (*include)[3]=true;
  2764.     if (i5) (*include)[4]=true;
  2765.     if (i6) (*include)[5]=true;
  2766.   } 
  2767.   template <class Manip>
  2768.   NAME##_cus_field_list<Manip>::NAME##_cus_field_list
  2769.   (const NAME *o, cchar *d, Manip m, ##NAME##_enum i1, ##NAME##_enum i2, ##NAME##_enum i3, ##NAME##_enum i4, ##NAME##_enum i5, ##NAME##_enum i6) { 
  2770.     delem = d;
  2771.     manip = m;
  2772.     del_vector = true; 
  2773.     obj = o; 
  2774.     include = new vector<bool>(6, false); 
  2775.     if (i1 == NAME##_NULL) return;
  2776.     (*include)[i1]=true;
  2777.     if (i2 == NAME##_NULL) return;
  2778.     (*include)[i2]=true;
  2779.     if (i3 == NAME##_NULL) return;
  2780.     (*include)[i3]=true;
  2781.     if (i4 == NAME##_NULL) return;
  2782.     (*include)[i4]=true;
  2783.     if (i5 == NAME##_NULL) return;
  2784.     (*include)[i5]=true;
  2785.     if (i6 == NAME##_NULL) return;
  2786.     (*include)[i6]=true;
  2787.   }
  2788.   template <class Manip>
  2789.   NAME##_cus_equal_list<Manip>::NAME##_cus_equal_list
  2790.   (const NAME *o, cchar *d, cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) { 
  2791.     delem = d;
  2792.     comp = c;
  2793.     manip = m;
  2794.     del_vector = true; 
  2795.     obj = o; 
  2796.     include = new vector<bool>(6, false); 
  2797.     if (i1) (*include)[0]=true;
  2798.     if (i2) (*include)[1]=true;
  2799.     if (i3) (*include)[2]=true;
  2800.     if (i4) (*include)[3]=true;
  2801.     if (i5) (*include)[4]=true;
  2802.     if (i6) (*include)[5]=true;