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

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. #ifndef ODBC_DICTIONARY_DictTable_hpp
  14. #define ODBC_DICTIONARY_DictTable_hpp
  15. #include <vector>
  16. #include <list>
  17. #include <common/common.hpp>
  18. #include "DictColumn.hpp"
  19. #include "DictIndex.hpp"
  20. #include "DictSys.hpp"
  21. class Ctx;
  22. class ConnArea;
  23. class DictSchema;
  24. class DictColumn;
  25. class DictIndex;
  26. /**
  27.  * @class DictTable
  28.  * @brief Database table
  29.  */
  30. class DictTable {
  31.     friend class DictSchema;
  32. public:
  33.     DictTable(const ConnArea& connArea, const BaseString& name, unsigned size);
  34.     ~DictTable();
  35.     unsigned getSize() const;
  36.     void setParent(DictSchema* parent);
  37.     DictSchema* getParent() const;
  38.     void setColumn(unsigned i, DictColumn* column);
  39.     DictColumn* getColumn(unsigned i) const;
  40.     const BaseString& getName() const;
  41.     DictColumn* findColumn(const BaseString& name) const;
  42.     DictColumn* loadColumn(Ctx& ctx, unsigned position);
  43.     unsigned keyCount() const;
  44.     DictColumn* getKey(unsigned i) const;
  45.     unsigned tupleId() const;
  46.     unsigned autoIncrement() const;
  47.     void sysId(DictSys::Id id);
  48.     DictSys::Id sysId() const;
  49.     // indexes
  50.     void addIndex(DictIndex* index);
  51.     unsigned indexCount() const;
  52.     const DictIndex* getIndex(unsigned i) const; // indexed from 1
  53. protected:
  54.     friend class DictSys;
  55.     const ConnArea& m_connArea;
  56.     const BaseString m_name;
  57.     unsigned m_size;
  58.     DictSchema* m_parent;
  59.     typedef std::vector<DictColumn*> Columns;
  60.     Columns m_columns;
  61.     Columns m_keys;
  62.     unsigned m_tupleId; // tuple id column
  63.     unsigned m_autoIncrement; // autoincrement key
  64.     DictSys::Id m_sysId; // built-in system table id (if non-zero)
  65.     typedef std::vector<DictIndex*> Indexes;
  66.     Indexes m_indexes;
  67. };
  68. inline
  69. DictTable::DictTable(const ConnArea& connArea, const BaseString& name, unsigned size) :
  70.     m_connArea(connArea),
  71.     m_name(name),
  72.     m_size(size),
  73.     m_parent(0),
  74.     m_columns(1 + size),
  75.     m_keys(1), // indexed from 1
  76.     m_tupleId(0),
  77.     m_autoIncrement(0),
  78.     m_sysId(DictSys::Undef),
  79.     m_indexes(1)
  80. {
  81. }
  82. inline unsigned
  83. DictTable::getSize() const
  84. {
  85.     ctx_assert(m_columns.size() == 1 + m_size);
  86.     return m_size;
  87. }
  88. inline void
  89. DictTable::setParent(DictSchema* parent)
  90. {
  91.     m_parent = parent;
  92. }
  93. inline DictSchema*
  94. DictTable::getParent() const
  95. {
  96.     return m_parent;
  97. }
  98. inline void
  99. DictTable::setColumn(unsigned i, DictColumn* column)
  100. {
  101.     ctx_assert(1 <= i && i <= m_size);
  102.     m_columns[i] = column;
  103.     column->setPosition(i);
  104.     column->setParent(this);
  105. }
  106. inline DictColumn*
  107. DictTable::getColumn(unsigned i) const
  108. {
  109.     ctx_assert(1 <= i && i <= m_size);
  110.     ctx_assert(m_columns[i] != 0);
  111.     return m_columns[i];
  112. }
  113. inline const BaseString&
  114. DictTable::getName() const
  115. {
  116.     return m_name;
  117. }
  118. inline unsigned
  119. DictTable::keyCount() const
  120. {
  121.     ctx_assert(m_keys.size() >= 1);
  122.     return m_keys.size() - 1;
  123. }
  124. inline DictColumn*
  125. DictTable::getKey(unsigned i) const
  126. {
  127.     ctx_assert(1 <= i && i <= m_keys.size() && m_keys[i] != 0);
  128.     return m_keys[i];
  129. }
  130. inline unsigned
  131. DictTable::tupleId() const
  132. {
  133.     return m_tupleId;
  134. }
  135. inline unsigned
  136. DictTable::autoIncrement() const
  137. {
  138.     return m_autoIncrement;
  139. }
  140. inline void
  141. DictTable::sysId(DictSys::Id id)
  142. {
  143.     m_sysId = id;
  144. }
  145. inline DictSys::Id
  146. DictTable::sysId() const
  147. {
  148.     return m_sysId;
  149. }
  150. inline void
  151. DictTable::addIndex(DictIndex* index)
  152. {
  153.     m_indexes.push_back(index);
  154.     index->setTable(this);
  155. }
  156. inline unsigned
  157. DictTable::indexCount() const
  158. {
  159.     ctx_assert(m_indexes.size() >= 1);
  160.     return m_indexes.size() - 1;
  161. }
  162. inline const DictIndex*
  163. DictTable::getIndex(unsigned i) const
  164. {
  165.     ctx_assert(1 <= i && i < m_indexes.size() && m_indexes[i] != 0);
  166.     return m_indexes[i];
  167. }
  168. #endif