Code_expr_column.hpp
上传用户: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. #ifndef ODBC_CODEGEN_Code_expr_column_hpp
  14. #define ODBC_CODEGEN_Code_expr_column_hpp
  15. #include <common/common.hpp>
  16. #include "Code_column.hpp"
  17. #include "Code_expr.hpp"
  18. class DictColumn;
  19. class Plan_table;
  20. /**
  21.  * @class Plan_expr_column
  22.  * @brief Column in query expression
  23.  */
  24. class Plan_expr_column : public Plan_expr, public Plan_column {
  25. public:
  26.     Plan_expr_column(Plan_root* root, const BaseString& name);
  27.     virtual ~Plan_expr_column();
  28.     Plan_base* analyze(Ctx& ctx, Ctl& ctl);
  29.     Exec_base* codegen(Ctx& ctx, Ctl& ctl);
  30.     bool resolveEq(Ctx& ctx, Plan_expr* expr);
  31.     void print(Ctx& ctx);
  32.     bool isEqual(const Plan_expr* expr) const;
  33.     bool isGroupBy(const Plan_expr_row* row) const;
  34. };
  35. inline
  36. Plan_expr_column::Plan_expr_column(Plan_root* root, const BaseString& name) :
  37.     Plan_expr(root, TypeColumn),
  38.     Plan_column(Type_expr, name)
  39. {
  40. }
  41. /**
  42.  * @class Exec_expr_column
  43.  * @brief Column in query expression
  44.  */
  45. class Exec_expr_column : public Exec_expr {
  46. public:
  47.     class Code : public Exec_expr::Code {
  48.     public:
  49. Code(const SqlSpec& sqlSpec, unsigned resOff);
  50. virtual ~Code();
  51.     protected:
  52. friend class Exec_expr_column;
  53. SqlSpec m_sqlSpec;
  54. unsigned m_resOff;
  55.     };
  56.     class Data : public Exec_expr::Data {
  57.     public:
  58. Data(SqlField& sqlField);
  59. virtual ~Data();
  60.     protected:
  61. friend class Exec_expr_column;
  62. // set reference to SqlField in query
  63.     };
  64.     Exec_expr_column(Exec_root* root);
  65.     virtual ~Exec_expr_column();
  66.     void alloc(Ctx& ctx, Ctl& ctl);
  67.     void evaluate(Ctx& ctx, Ctl& ctl);
  68.     void close(Ctx& ctx);
  69.     void print(Ctx& ctx);
  70.     // children
  71.     const Code& getCode() const;
  72.     Data& getData() const;
  73. };
  74. inline
  75. Exec_expr_column::Code::Code(const SqlSpec& sqlSpec, unsigned resOff) :
  76.     Exec_expr::Code(m_sqlSpec),
  77.     m_sqlSpec(sqlSpec),
  78.     m_resOff(resOff)
  79. {
  80. }
  81. inline
  82. Exec_expr_column::Data::Data(SqlField& sqlField) :
  83.     Exec_expr::Data(sqlField)
  84. {
  85. }
  86. inline
  87. Exec_expr_column::Exec_expr_column(Exec_root* root) :
  88.     Exec_expr(root)
  89. {
  90. }
  91. // children
  92. inline const Exec_expr_column::Code&
  93. Exec_expr_column::getCode() const
  94. {
  95.     const Code* code = static_cast<const Code*>(m_code);
  96.     return *code;
  97. }
  98. inline Exec_expr_column::Data&
  99. Exec_expr_column::getData() const
  100. {
  101.     Data* data = static_cast<Data*>(m_data);
  102.     return *data;
  103. }
  104. #endif