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

模拟服务器

开发平台:

C/C++

  1. #include <windows.h>
  2. #include "connection3.hh"
  3. #include "result3.hh"
  4. //--------------------------------------------------------------------------
  5. Connection::Connection (const char *db, const char *host, const char *user,
  6. const char *passwd, bool te)
  7.   : throw_exceptions(te), locked(false)
  8. {
  9. mysql_init(&mysql);
  10.   if (connect (db, host, user, passwd))
  11. {
  12.     locked = false;
  13.     Success = is_connected = true;
  14.   }
  15.   else
  16.   {
  17.     locked = false; Success = is_connected = false;
  18.     if (throw_exceptions) throw BadQuery(error());
  19.   }
  20. }
  21. //--------------------------------------------------------------------------
  22. Connection::Connection (const char *db, const char *host, const char *user,
  23. const char *passwd, uint port, my_bool compress,
  24. unsigned int connect_timeout, bool te,
  25. const char *socket_name)
  26.   : throw_exceptions(te), locked(false)
  27. {
  28. mysql_init(&mysql);
  29.   if (real_connect (db, host, user, passwd, port, compress, connect_timeout,socket_name))
  30.   {
  31.     locked = false;
  32.     Success = is_connected = true;
  33.   }
  34.   else
  35.   {
  36.     locked = false; Success = is_connected = false;
  37.     if (throw_exceptions) throw BadQuery(error());
  38.   }
  39. }
  40. //--------------------------------------------------------------------------
  41. bool Connection::real_connect (cchar *db, cchar *host, cchar *user,
  42.        cchar *passwd, uint port, my_bool compress,
  43.        unsigned int connect_timeout,
  44.        const char *socket_name)
  45. {
  46.   if (socket_name && socket_name[0])
  47.     mysql.options.unix_socket = (char *)socket_name;
  48.   else
  49.     mysql.options.unix_socket=NULL;
  50.   mysql.options.port = port;
  51.   mysql.options.compress = compress;
  52.   mysql.options.connect_timeout=connect_timeout;
  53.   locked = true;
  54.   if (mysql_connect(&mysql, host, user, passwd))
  55.   {
  56.     locked = false;
  57.     Success = is_connected = true;
  58.   }
  59.   else
  60.   {
  61.     locked = false; Success = is_connected = false;
  62.     if (throw_exceptions) throw BadQuery(error());
  63.   }
  64.   if (!Success) return Success;
  65.   if (db[0]) // if db is not empty
  66.     Success = select_db(db);
  67.   return Success;
  68. }
  69. //--------------------------------------------------------------------------
  70. Connection::~Connection () 
  71. {
  72. mysql_close(&mysql);
  73. }
  74. //--------------------------------------------------------------------------
  75. bool Connection::select_db (const char *db) 
  76. {
  77.   bool suc = !(mysql_select_db(&mysql, db));
  78.   if (throw_exceptions && !suc) throw MysqlBadQuery(error());
  79.   else return suc;
  80. }
  81. //--------------------------------------------------------------------------
  82. bool Connection::reload() 
  83. {
  84.   bool suc = !mysql_reload(&mysql);
  85.   if (throw_exceptions && !suc) throw MysqlBadQuery(error());
  86.   else return suc;
  87. }
  88. //--------------------------------------------------------------------------
  89. bool Connection::shutdown () 
  90. {
  91.   bool suc = !(mysql_shutdown(&mysql));
  92.   if (throw_exceptions && !suc) throw MysqlBadQuery(error());
  93.   else return suc;
  94. }
  95. //--------------------------------------------------------------------------
  96. bool Connection::connect (cchar *db, cchar *host, cchar *user, cchar *passwd)
  97. {
  98.   locked = true;
  99.   if (mysql_connect(&mysql, host, user, passwd)) {
  100.     locked = false;
  101.     Success = is_connected = true;
  102.   } else {
  103.     locked = false;
  104.     if (throw_exceptions) throw BadQuery(error());
  105.     Success = is_connected = false;
  106.   }
  107.   if (!Success) return Success;
  108.   if (db[0]) // if db is not empty
  109.     Success = select_db(db);
  110.   return Success;
  111. }
  112. //--------------------------------------------------------------------------
  113. string Connection::info ()
  114. {
  115.   char *i = mysql_info(&mysql);
  116.   if (!i)
  117.     return string();
  118.   else
  119.     return string(i);
  120. }
  121. //--------------------------------------------------------------------------
  122. ResNSel Connection::execute(const string &str, bool throw_excptns) 
  123. {
  124.   Success = false;
  125.   if (lock())
  126.     if (throw_excptns) throw BadQuery(error());
  127.     else return ResNSel();
  128.   Success = !mysql_query(&mysql, str.c_str());
  129.   unlock();
  130.   if (!Success)
  131.     if (throw_excptns) throw BadQuery(error());
  132.     else return ResNSel();
  133.   return ResNSel(this);
  134. }
  135. //--------------------------------------------------------------------------
  136. bool Connection::exec(const string &str) 
  137. {
  138. Success = !mysql_query(&mysql,str.c_str());
  139. if (!Success && throw_exceptions) throw BadQuery(error());
  140. return Success;
  141. }
  142. //--------------------------------------------------------------------------
  143. Result Connection::store(const string &str, bool throw_excptns) 
  144. {
  145.   Success = false;
  146.   if (lock())
  147.     if (throw_excptns) throw BadQuery(error());
  148.     else return Result();
  149.   Success = !mysql_query(&mysql, str.c_str());
  150.   unlock();
  151.   if (!Success)
  152.     if (throw_excptns) throw BadQuery(error());
  153.     else return Result();
  154.   return Result(mysql_store_result(&mysql));
  155. }
  156. //--------------------------------------------------------------------------
  157. ResUse Connection::use(const string &str, bool throw_excptns) 
  158. {
  159.   Success = false;
  160.   if (lock())
  161.     if (throw_excptns) throw BadQuery(error());
  162.     else return ResUse();
  163.   Success = !mysql_query(&mysql, str.c_str());
  164.   if (!Success)
  165.     if (throw_excptns) throw BadQuery(error());
  166.     else return ResUse();
  167.   return ResUse(mysql_use_result(&mysql), this);
  168. }
  169. //end of file ===============================================================