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

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_CODEGEN_Code_create_index_hpp
  14. #define ODBC_CODEGEN_Code_create_index_hpp
  15. #include <vector>
  16. #include <NdbApi.hpp>
  17. #include <common/common.hpp>
  18. #include "Code_ddl.hpp"
  19. #include "Code_table.hpp"
  20. #include "Code_idx_column.hpp"
  21. class DictTable;
  22. class DictColumn;
  23. /**
  24.  * @class Plan_create_index
  25.  * @brief Create table in PlanTree
  26.  */
  27. class Plan_create_index : public Plan_ddl {
  28. public:
  29.     Plan_create_index(Plan_root* root, const BaseString& name);
  30.     virtual ~Plan_create_index();
  31.     Plan_base* analyze(Ctx& ctx, Ctl& ctl);
  32.     Exec_base* codegen(Ctx& ctx, Ctl& ctl);
  33.     void describe(Ctx & ctx);
  34.     void print(Ctx& ctx);
  35.     // attributes
  36.     const BaseString& getName() const;
  37.     // children
  38.     void setType(NdbDictionary::Object::Type type);
  39.     void setTable(Plan_table* table);
  40.     unsigned countColumn() const;
  41.     void addColumn(Plan_idx_column* column);
  42.     Plan_idx_column* getColumn(unsigned i) const;
  43.     void setFragmentType(NdbDictionary::Object::FragmentType fragmentType);
  44.     void setLogging(bool logging);
  45. protected:
  46.     BaseString m_name;
  47.     NdbDictionary::Object::Type m_type;
  48.     Plan_table* m_table;
  49.     IdxColumnVector m_columnList;
  50.     NdbDictionary::Object::FragmentType m_fragmentType;
  51.     bool m_logging;
  52. };
  53. inline
  54. Plan_create_index::Plan_create_index(Plan_root* root, const BaseString& name) :
  55.     Plan_ddl(root),
  56.     m_name(name),
  57.     m_type(NdbDictionary::Object::TypeUndefined),
  58.     m_columnList(1),
  59.     m_fragmentType(NdbDictionary::Object::FragUndefined),
  60.     m_logging(true)
  61. {
  62. }
  63. inline const BaseString&
  64. Plan_create_index::getName() const
  65. {
  66.     return m_name;
  67. }
  68. // children
  69. inline void
  70. Plan_create_index::setType(NdbDictionary::Object::Type type)
  71. {
  72.     m_type = type;
  73. }
  74. inline void
  75. Plan_create_index::setTable(Plan_table* table)
  76. {
  77.     ctx_assert(table != 0);
  78.     m_table = table;
  79. }
  80. inline unsigned
  81. Plan_create_index::countColumn() const
  82. {
  83.     return m_columnList.size() - 1;
  84. }
  85. inline void
  86. Plan_create_index::addColumn(Plan_idx_column* column)
  87. {
  88.     ctx_assert(column != 0);
  89.     m_columnList.push_back(column);
  90. }
  91. inline Plan_idx_column*
  92. Plan_create_index::getColumn(unsigned i) const
  93. {
  94.     ctx_assert(1 <= i && i <= countColumn() && m_columnList[i] != 0);
  95.     return m_columnList[i];
  96. }
  97. inline void
  98. Plan_create_index::setFragmentType(NdbDictionary::Object::FragmentType fragmentType)
  99. {
  100.     m_fragmentType = fragmentType;
  101. }
  102. inline void
  103. Plan_create_index::setLogging(bool logging)
  104. {
  105.     m_logging = logging;
  106. }
  107. /**
  108.  * @class Exec_create_index
  109.  * @brief Create table in ExecTree
  110.  */
  111. class Exec_create_index : public Exec_ddl {
  112. public:
  113.     class Code : public Exec_ddl::Code {
  114.     public:
  115. Code(const BaseString& indexName, const BaseString& tableName, NdbDictionary::Object::Type type, unsigned attrCount, const char** attrList);
  116. virtual ~Code();
  117.     protected:
  118. friend class Plan_create_index;
  119. friend class Exec_create_index;
  120. const BaseString m_indexName;
  121. const BaseString m_tableName;
  122. NdbDictionary::Object::Type m_type;
  123. const unsigned m_attrCount;
  124. const char** m_attrList;
  125. NdbDictionary::Object::FragmentType m_fragmentType;
  126. bool m_logging;
  127.     };
  128.     class Data : public Exec_ddl::Data {
  129.     public:
  130. Data();
  131. virtual ~Data();
  132.     protected:
  133. friend class Exec_create_index;
  134.     };
  135.     Exec_create_index(Exec_root* root);
  136.     virtual ~Exec_create_index();
  137.     void alloc(Ctx& ctx, Ctl& ctl);
  138.     void execute(Ctx& ctx, Ctl& ctl);
  139.     void close(Ctx& ctx);
  140.     void print(Ctx& ctx);
  141.     // children
  142.     const Code& getCode() const;
  143.     Data& getData() const;
  144. };
  145. inline
  146. Exec_create_index::Code::Code(const BaseString& indexName, const BaseString& tableName, NdbDictionary::Object::Type type, unsigned attrCount, const char** attrList) :
  147.     m_indexName(indexName),
  148.     m_tableName(tableName),
  149.     m_type(type),
  150.     m_attrCount(attrCount),
  151.     m_attrList(attrList),
  152.     m_fragmentType(NdbDictionary::Object::FragUndefined),
  153.     m_logging(true)
  154. {
  155. }
  156. inline
  157. Exec_create_index::Data::Data()
  158. {
  159. }
  160. inline
  161. Exec_create_index::Exec_create_index(Exec_root* root) :
  162.     Exec_ddl(root)
  163. {
  164. }
  165. // children
  166. inline const Exec_create_index::Code&
  167. Exec_create_index::getCode() const
  168. {
  169.     const Code* code = static_cast<const Code*>(m_code);
  170.     return *code;
  171. }
  172. inline Exec_create_index::Data&
  173. Exec_create_index::getData() const
  174. {
  175.     Data* data = static_cast<Data*>(m_data);
  176.     return *data;
  177. }
  178. #endif