⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 row1.hh

📁 MySql C++ library
💻 HH
字号:
#ifndef __row1_hh__
#define __row1_hh__

#include <vector>
#include <string>
using namespace std ;

#include "bad_query.hh"
#include "defs.h"
//#include "define_short.h"
#include "coldata1.hh"
#include "resiter1.hh"
#include "vallist1.hh"

template <class ThisType, class Res>
class RowTemplate {
protected:
  virtual ThisType& self() = 0;
  virtual const ThisType& self() const = 0;
public:
  virtual const Res & parent() const = 0;

  //
  // value_list
  //
  value_list_ba<ThisType,quote_type0>
  value_list(const char *d = ",") const {
    return value_list_ba<ThisType,quote_type0>
      (self(), d, quote);
  }

// FIX: this piece of code refuses to work under VC++
/*
  template <class Manip>
  value_list_ba<ThisType,Manip>
  value_list(const char *d, Manip m) const {
    return value_list_ba<ThisType,Manip> (self(), d, m);
  }

  template <class Manip>
  value_list_b<ThisType,Manip>
  value_list(const char *d, Manip m, const vector<bool> &vb) const {
    return value_list_b<ThisType,Manip> (self(), vb, d, m);
  }
*/

  value_list_b<ThisType,quote_type0>
  value_list(const char *d, const vector<bool> &vb) const {
    return value_list_b<ThisType,quote_type0> (self(), vb, d, quote);
  }

  value_list_b<ThisType,quote_type0>
  value_list(const vector<bool> &vb) const {
    return value_list_b<ThisType,quote_type0> (self(), vb, ",", quote);
  }

  template <class Manip>
  value_list_b<ThisType,Manip>
  value_list(const char *d, Manip m, bool t0,
	     bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	     bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	     bool t9=false, bool ta=false, bool tb=false, bool tc=false) const {
    vector<bool> vb;
    create_vector(self().size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
    return value_list_b<ThisType, Manip>(self(), vb, d, m);
  }

  value_list_b<ThisType,quote_type0>
  value_list(const char *d, bool t0,
	     bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	     bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	     bool t9=false, bool ta=false, bool tb=false, bool tc=false) const {
    vector<bool> vb;
    create_vector(self().size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
    return value_list_b<ThisType, quote_type0>(self(), vb, d, quote);
  }

  value_list_b<ThisType,quote_type0>
  value_list(bool t0,
	     bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	     bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	     bool t9=false, bool ta=false, bool tb=false, bool tc=false) const {
    vector<bool> vb;
    create_vector(self().size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
    return value_list_b<ThisType, quote_type0>(self(), vb, ",", quote);
  }

  template <class Manip>
  value_list_b<ThisType,Manip>
  value_list(const char *d, Manip m, string s0,
	     string s1="", string s2="", string s3="", string s4="",
	     string s5="", string s6="", string s7="", string s8="",
	     string s9="", string sa="", string sb="", string sc="") const {
    vector<bool> vb;
    create_vector(self(), vb, s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc);
    return value_list_b<ThisType, Manip>(self(), vb, d, m);
  }

  value_list_b<ThisType,quote_type0>
  value_list(const char *d, string s0,
	     string s1="", string s2="", string s3="", string s4="",
	     string s5="", string s6="", string s7="", string s8="",
	     string s9="", string sa="", string sb="", string sc="") const {
    vector<bool> vb;
    create_vector(self(), vb, s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc);
    return value_list_b<ThisType, quote_type0>(self(), vb, d, quote);
  }

  value_list_b<ThisType,quote_type0>
  value_list(string s0,
	     string s1="", string s2="", string s3="", string s4="",
	     string s5="", string s6="", string s7="", string s8="",
	     string s9="", string sa="", string sb="", string sc="") const {
    vector<bool> vb;
    create_vector(self(), vb, s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc);
    return value_list_b<ThisType, quote_type0>(self(), vb, ",", quote);
  }

  //
  // field_list
  //
  value_list_ba<FieldNames, do_nothing_type0>
  field_list(const char *d = ",") const {
    return value_list_ba<FieldNames, do_nothing_type0>
      (parent().names(), d, do_nothing);
  }

// FIX: this piece of code refuses to work under VC++
/*
  template <class Manip>
  value_list_ba<FieldNames,Manip>
  field_list(const char *d, Manip m) const {
    return value_list_ba<FieldNames, Manip>
      (parent().names(), d, m);
  }

  template <class Manip>
  value_list_b<FieldNames,Manip>
  field_list(const char *d, Manip m, const vector<bool> &vb) const {
    return value_list_b<FieldNames,Manip> (parent().names(), vb, d, m);
  }
*/

  value_list_b<FieldNames,quote_type0>
  field_list(const char *d, const vector<bool> &vb) const {
    return value_list_b<FieldNames,quote_type0> (parent().names(), vb, d, quote);
  }

  value_list_b<FieldNames,quote_type0>
  field_list(const vector<bool> &vb) const {
    return value_list_b<FieldNames,quote_type0> (parent().names(), vb, ",", quote);
  }

  template <class Manip>
  value_list_b<FieldNames,Manip>
  field_list(const char *d, Manip m, bool t0,
	     bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	     bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	     bool t9=false, bool ta=false, bool tb=false, bool tc=false) const {
    vector<bool> vb;
    create_vector(parent().names().size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
    return value_list_b<FieldNames, Manip>(parent().names(), vb, d, m);
  }

  value_list_b<FieldNames,quote_type0>
  field_list(const char *d, bool t0,
	     bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	     bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	     bool t9=false, bool ta=false, bool tb=false, bool tc=false) const {
    vector<bool> vb;
    create_vector(parent().names().size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
    return value_list_b<FieldNames, quote_type0>(parent().names(), vb, d, quote);
  }

  value_list_b<FieldNames,quote_type0>
  field_list(bool t0,
	     bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	     bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	     bool t9=false, bool ta=false, bool tb=false, bool tc=false) const {
    vector<bool> vb;
    create_vector(parent().names().size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
    return value_list_b<FieldNames, quote_type0>(parent().names(), vb, ",", quote);
  }

  template <class Manip>
  value_list_b<FieldNames,Manip>
  field_list(const char *d, Manip m, string s0,
	     string s1="", string s2="", string s3="", string s4="",
	     string s5="", string s6="", string s7="", string s8="",
	     string s9="", string sa="", string sb="", string sc="") const {
    vector<bool> vb;
    create_vector(parent().names(), vb, s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc);
    return value_list_b<FieldNames, Manip>(parent().names(), vb, d, m);
  }

  value_list_b<FieldNames,quote_type0>
  field_list(const char *d, string s0,
	     string s1="", string s2="", string s3="", string s4="",
	     string s5="", string s6="", string s7="", string s8="",
	     string s9="", string sa="", string sb="", string sc="") const {
    vector<bool> vb;
    create_vector(parent().names(), vb, s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc);
    return value_list_b<FieldNames, quote_type0>(parent().names(), vb, d, quote);
  }

  value_list_b<FieldNames,quote_type0>
  field_list(string s0,
	     string s1="", string s2="", string s3="", string s4="",
	     string s5="", string s6="", string s7="", string s8="",
	     string s9="", string sa="", string sb="", string sc="") const {
    vector<bool> vb;
    create_vector(parent().names(), vb, s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc);
    return value_list_b<FieldNames, quote_type0>(parent().names(), vb, ",", quote);
  }

  //
  // equal_list
  //
  equal_list_ba<FieldNames,ThisType,quote_type0>
  equal_list(const char *d = ",", const char *e = " = ") const {
    return equal_list_ba<FieldNames,ThisType,quote_type0>
      (parent().names(), self(), d, e, quote);
  }

  template <class Manip>
  equal_list_ba<FieldNames,ThisType,Manip>
  equal_list(const char *d, const char *e, Manip m) const {
    return equal_list_ba<FieldNames,ThisType,Manip>
      (parent().names(), self(), d, e, m);
  }

  virtual ~RowTemplate() {}
};

//: This class handles the actual rows in an intelligent manner.
class Row : public const_subscript_container<Row,ColData,const ColData>,
	    public RowTemplate<Row, ResUse>
{
private:
  vector <string> data;
	vector <bool> is_nulls;
  const ResUse *res;
  bool         throw_exceptions, initialized;

public:
  Row() {}
  Row(MYSQL_ROW d, const ResUse *r, unsigned int *jj, bool te = false)
    : res(r), throw_exceptions(te), initialized(false)
  {
     if (!d || !r)
     {
        if (throw_exceptions) throw BadQuery("ROW or RES is NULL");
        else return;
     }
     data.clear(); is_nulls.clear(); initialized=true;
     for (unsigned int i=0;i<size();i++)
     {
       string b ;
       (d[i]) ?  b=string(d[i],jj[i]) : b=string("");
       data.insert(data.end(),b);
       is_nulls.insert(is_nulls.end(),d[i] ? false : true);
     }
  }
  
  const Row& self() const {return *this;}
  Row& self() {return *this;}

  const ResUse&  parent() const {return *res;}
  inline size_type     size() const;
  //: Returns the number of columns.
  const ColData   operator [] (int i) const {
	  if (!initialized) {
				if (throw_exceptions) throw BadQuery("Row not initialized");
				else return ColData();
			}
		return operator[](size_type(i));
	}
  inline const ColData   operator [] (size_type i) const;
  //: Returns the value of the field with the index of i.
  inline const ColData   operator [] (const char *) const;
  //: Returns the value of the field with the field name of i.
  // This method is not nearly as efficient as using the index number. Use sparingly.
  inline const ColData   operator [] (const string &i) const;
  //: Returns the value of the field with the field name of i.
  // This method is not nearly as effecent as using the index number. Use sparingly.

  const char *raw_data(int i) const {return data[i].data();}

  operator bool() const {return (data.size()) ? true : false;}
  //: Returns true if there is data in the row.
	~Row() {data.clear(); is_nulls.clear(); initialized = false;}
};


#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -