Code_create_table.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_CODEGEN_Code_create_table_hpp
  14. #define ODBC_CODEGEN_Code_create_table_hpp
  15. #include <vector>
  16. #include <common/common.hpp>
  17. #include "Code_ddl.hpp"
  18. #include "Code_ddl_row.hpp"
  19. #include "Code_create_row.hpp"
  20. class DictTable;
  21. class DictColumn;
  22. /**
  23.  * @class Plan_create_table
  24.  * @brief Create table in PlanTree
  25.  */
  26. class Plan_create_table : public Plan_ddl {
  27. public:
  28.     Plan_create_table(Plan_root* root, const BaseString& name);
  29.     virtual ~Plan_create_table();
  30.     Plan_base* analyze(Ctx& ctx, Ctl& ctl);
  31.     Exec_base* codegen(Ctx& ctx, Ctl& ctl);
  32.     void describe(Ctx & ctx);
  33.     void print(Ctx& ctx);
  34.     // attributes
  35.     const BaseString& getName() const;
  36.     // children
  37.     void setCreateRow(Plan_create_row* createRow);
  38.     void setFragmentType(NdbDictionary::Object::FragmentType fragmentType);
  39.     void setLogging(bool logging);
  40. protected:
  41.     BaseString m_name;
  42.     Plan_create_row* m_createRow;
  43.     NdbDictionary::Object::FragmentType m_fragmentType;
  44.     bool m_logging;
  45. };
  46. inline
  47. Plan_create_table::Plan_create_table(Plan_root* root, const BaseString& name) :
  48.     Plan_ddl(root),
  49.     m_name(name),
  50.     m_createRow(0),
  51.     m_fragmentType(NdbDictionary::Object::FragUndefined),
  52.     m_logging(true)
  53. {
  54. }
  55. inline const BaseString&
  56. Plan_create_table::getName() const
  57. {
  58.     return m_name;
  59. }
  60. // children
  61. inline void
  62. Plan_create_table::setCreateRow(Plan_create_row* createRow)
  63. {
  64.     ctx_assert(createRow != 0);
  65.     m_createRow = createRow;
  66. }
  67. inline void
  68. Plan_create_table::setFragmentType(NdbDictionary::Object::FragmentType fragmentType)
  69. {
  70.     m_fragmentType = fragmentType;
  71. }
  72. inline void
  73. Plan_create_table::setLogging(bool logging)
  74. {
  75.     m_logging = logging;
  76. }
  77. /**
  78.  * @class Exec_create_table
  79.  * @brief Create table in ExecTree
  80.  */
  81. class Exec_create_table : public Exec_ddl {
  82. public:
  83.     class Code : public Exec_ddl::Code {
  84.     public:
  85. struct Attr {
  86.     Attr() : m_defaultValue(0) {}
  87.     BaseString m_attrName;
  88.     SqlType m_sqlType;
  89.     bool m_tupleKey;
  90.     bool m_tupleId;
  91.     bool m_autoIncrement;
  92.     Exec_expr* m_defaultValue;
  93. };
  94. Code(const BaseString& tableName, unsigned attrCount, const Attr* attrList, unsigned tupleId, unsigned autoIncrement);
  95. virtual ~Code();
  96.     protected:
  97. friend class Plan_create_table;
  98. friend class Exec_create_table;
  99. const BaseString m_tableName;
  100. const unsigned m_attrCount;
  101. const Attr* const m_attrList;
  102. unsigned m_tupleId;
  103. unsigned m_autoIncrement;
  104. NdbDictionary::Object::FragmentType m_fragmentType;
  105. bool m_logging;
  106.     };
  107.     class Data : public Exec_ddl::Data {
  108.     public:
  109. Data();
  110. virtual ~Data();
  111.     protected:
  112. friend class Exec_create_table;
  113.     };
  114.     Exec_create_table(Exec_root* root);
  115.     virtual ~Exec_create_table();
  116.     void alloc(Ctx& ctx, Ctl& ctl);
  117.     void execute(Ctx& ctx, Ctl& ctl);
  118.     void close(Ctx& ctx);
  119.     void print(Ctx& ctx);
  120.     // children
  121.     const Code& getCode() const;
  122.     Data& getData() const;
  123. };
  124. inline
  125. Exec_create_table::Code::Code(const BaseString& tableName, unsigned attrCount, const Attr* attrList, unsigned tupleId, unsigned autoIncrement) :
  126.     m_tableName(tableName),
  127.     m_attrCount(attrCount),
  128.     m_attrList(attrList),
  129.     m_tupleId(tupleId),
  130.     m_autoIncrement(autoIncrement),
  131.     m_fragmentType(NdbDictionary::Object::FragUndefined),
  132.     m_logging(true)
  133. {
  134. }
  135. inline
  136. Exec_create_table::Data::Data()
  137. {
  138. }
  139. inline
  140. Exec_create_table::Exec_create_table(Exec_root* root) :
  141.     Exec_ddl(root)
  142. {
  143. }
  144. // children
  145. inline const Exec_create_table::Code&
  146. Exec_create_table::getCode() const
  147. {
  148.     const Code* code = static_cast<const Code*>(m_code);
  149.     return *code;
  150. }
  151. inline Exec_create_table::Data&
  152. Exec_create_table::getData() const
  153. {
  154.     Data* data = static_cast<Data*>(m_data);
  155.     return *data;
  156. }
  157. #endif