DataRow.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "DataRow.hpp"
  14. // SqlSpecs
  15. SqlSpecs::SqlSpecs(unsigned count) :
  16.     m_count(count)
  17. {
  18.     m_sqlSpec = new SqlSpec[1 + count];
  19. }
  20. SqlSpecs::SqlSpecs(const SqlSpecs& sqlSpecs) :
  21.     m_count(sqlSpecs.m_count)
  22. {
  23.     m_sqlSpec = new SqlSpec[1 + m_count];
  24.     for (unsigned i = 1; i <= m_count; i++) {
  25. void* place = static_cast<void*>(&m_sqlSpec[i]);
  26. new (place) SqlSpec(sqlSpecs.m_sqlSpec[i]);
  27.     }
  28. }
  29. SqlSpecs::~SqlSpecs()
  30. {
  31.     delete[] m_sqlSpec;
  32. }
  33. // ExtSpecs
  34. ExtSpecs::ExtSpecs(unsigned count) :
  35.     m_count(count)
  36. {
  37.     m_extSpec = new ExtSpec[1 + count];
  38. }
  39. ExtSpecs::ExtSpecs(const ExtSpecs& extSpecs) :
  40.     m_count(extSpecs.m_count)
  41. {
  42.     m_extSpec = new ExtSpec[1 + m_count];
  43.     for (unsigned i = 1; i <= m_count; i++) {
  44. void* place = static_cast<void*>(&m_extSpec[i]);
  45. new (place) ExtSpec(extSpecs.m_extSpec[i]);
  46.     }
  47. }
  48. ExtSpecs::~ExtSpecs()
  49. {
  50.     delete[] m_extSpec;
  51. }
  52. // SqlRow
  53. SqlRow::SqlRow(const SqlSpecs& sqlSpecs) :
  54.     m_sqlSpecs(sqlSpecs)
  55. {
  56.     m_sqlField = new SqlField[1 + count()];
  57.     for (unsigned i = 1; i <= count(); i++) {
  58. SqlField sqlField(m_sqlSpecs.getEntry(i));
  59. setEntry(i, sqlField);
  60.     }
  61. }
  62. SqlRow::SqlRow(const SqlRow& sqlRow) :
  63.     m_sqlSpecs(sqlRow.m_sqlSpecs)
  64. {
  65.     m_sqlField = new SqlField[1 + count()];
  66.     for (unsigned i = 1; i <= count(); i++) {
  67. void* place = static_cast<void*>(&m_sqlField[i]);
  68. new (place) SqlField(sqlRow.getEntry(i));
  69.     }
  70. }
  71. SqlRow::~SqlRow()
  72. {
  73.     for (unsigned i = 1; i <= count(); i++) {
  74. m_sqlField[i].~SqlField();
  75.     }
  76.     delete[] m_sqlField;
  77. }
  78. SqlRow*
  79. SqlRow::copy() const
  80. {
  81.     SqlRow* copyRow = new SqlRow(m_sqlSpecs);
  82.     for (unsigned i = 1; i <= count(); i++) {
  83. const SqlField* sqlField = &m_sqlField[i];
  84. while (sqlField->sqlSpec().store() == SqlSpec::Reference) {
  85.     sqlField = sqlField->u_data.m_sqlField;
  86. }
  87. copyRow->setEntry(i, *sqlField);
  88.     }
  89.     return copyRow;
  90. }
  91. void
  92. SqlRow::copyout(Ctx& ctx, class ExtRow& extRow) const
  93. {
  94.     for (unsigned i = 1; i <= count(); i++) {
  95. const SqlField& sqlField = getEntry(i);
  96. ExtField& extField = extRow.getEntry(i);
  97. sqlField.copyout(ctx, extField);
  98.     }
  99. }
  100. // ExtRow
  101. ExtRow::ExtRow(const ExtSpecs& extSpecs) :
  102.     m_extSpecs(extSpecs)
  103. {
  104.     m_extField = new ExtField[1 + count()];
  105. }
  106. ExtRow::ExtRow(const ExtRow& extRow) :
  107.     m_extSpecs(extRow.m_extSpecs)
  108. {
  109.     m_extField = new ExtField[1 + count()];
  110.     for (unsigned i = 1; i <= count(); i++) {
  111. void* place = static_cast<void*>(&m_extField[i]);
  112. new (place) ExtField(extRow.getEntry(i));
  113.     }
  114. }
  115. ExtRow::~ExtRow()
  116. {
  117.     delete[] m_extField;
  118. }