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

MySQL数据库

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include "result3.hh"
  3. //--------------------------------------------------------------
  4. ResUse::ResUse (MYSQL_RES *result, Connection *m, bool te)
  5.   : mysql(m), throw_exceptions(te), initialized(false), _fields(this)
  6. {
  7. if (!result) {
  8. mysql_res=0; _types=0; _names=0; return;
  9. }
  10. mysql_res=result;
  11. _names= new FieldNames(this);
  12. if (_names)
  13. _types= new FieldTypes(this);
  14. _table = fields(0).table;
  15. initialized = true;
  16. }
  17. //---------------------------------------------------------------
  18. ResUse::~ResUse ()
  19. {
  20.   if (mysql) mysql->unlock(); purge();
  21. }
  22. //------------------------------------------------------------------
  23. Row ResUse::fetch_row()
  24. {
  25.     if (!mysql_res)
  26.     {
  27.        if (throw_exceptions) throw BadQuery("Results not fetched");
  28.        else return Row();
  29.     }
  30.     MYSQL_ROW row = mysql_fetch_row(mysql_res);
  31.     unsigned int* length = (unsigned int*) mysql_fetch_lengths(mysql_res);
  32.     if (!row || !length)
  33.     {
  34.        if (throw_exceptions) throw BadQuery("Bad row");
  35.        else return Row();
  36.     }
  37.     return Row(row, this, length, throw_exceptions);
  38. }
  39. //---------------------------------------------------------------------------
  40. unsigned int  ResUse::num_fields() const
  41. {
  42.        unsigned int num = mysql_num_fields(mysql_res);
  43.        return num ;
  44. }
  45. //-------------------------------------------------------------------
  46. void ResUse::purge(void)
  47. {
  48.      if (mysql_res) mysql_free_result(mysql_res);
  49.      mysql_res=0;
  50.      if (_names) delete _names;
  51.      if (_types) delete _types;
  52.      _names=0; _types=0;
  53.      _table.erase();
  54. }
  55. //---------------------------------------------------------------------
  56. void ResUse::copy(const ResUse& other)
  57. {
  58.      if (!other.mysql_res)
  59.      {
  60.         mysql_res=0; _types=0; _names=0; return;
  61.      }
  62.      if (initialized) purge();
  63.      throw_exceptions = other.throw_exceptions;
  64.      mysql_res = other.mysql_res;
  65.      _fields   = other._fields;
  66.      if (other._names) _names = new FieldNames(*other._names);
  67.      else _names     = NULL;
  68.      if (other._types) _types = new FieldTypes(*other._types);
  69.      else _types     = NULL;
  70.      mysql = other.mysql;
  71.      initialized = true;
  72. }
  73. //================================================================