Code_expr_const.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_const_hpp
  14. #define ODBC_CODEGEN_Code_expr_const_hpp
  15. #include <common/common.hpp>
  16. #include <common/DataField.hpp>
  17. #include "Code_expr.hpp"
  18. /**
  19.  * @class Plan_expr_const
  20.  * @brief Constant expression value in PlanTree
  21.  */
  22. class Plan_expr_const : public Plan_expr {
  23. public:
  24.     Plan_expr_const(Plan_root* root, LexType lexType, const char* value);
  25.     virtual ~Plan_expr_const();
  26.     Plan_base* analyze(Ctx& ctx, Ctl& ctl);
  27.     Exec_base* codegen(Ctx& ctx, Ctl& ctl);
  28.     void print(Ctx& ctx);
  29.     bool isEqual(const Plan_expr* expr) const;
  30.     bool isGroupBy(const Plan_expr_row* row) const;
  31. protected:
  32.     // lexical type and token set by the parser
  33.     LexType m_lexType;
  34.     BaseString m_string;
  35. };
  36. inline
  37. Plan_expr_const::Plan_expr_const(Plan_root* root, LexType lexType, const char* value) :
  38.     Plan_expr(root, TypeConst),
  39.     m_lexType(lexType),
  40.     m_string(value)
  41. {
  42. }
  43. /**
  44.  * @class Exec_expr_const
  45.  * @brief Constant expression value in ExecTree
  46.  */
  47. class Exec_expr_const : public Exec_expr {
  48. public:
  49.     class Code : public Exec_expr::Code {
  50.     public:
  51. Code(const SqlField& sqlField);
  52. virtual ~Code();
  53.     protected:
  54. friend class Exec_expr_const;
  55. const SqlField m_sqlField;
  56.     };
  57.     class Data : public Exec_expr::Data {
  58.     public:
  59. Data(SqlField& sqlField);
  60. virtual ~Data();
  61.     protected:
  62. friend class Exec_expr_const;
  63. SqlField m_sqlField;
  64.     };
  65.     Exec_expr_const(Exec_root* root);
  66.     virtual ~Exec_expr_const();
  67.     void alloc(Ctx& ctx, Ctl& ctl);
  68.     void evaluate(Ctx& ctx, Ctl& ctl);
  69.     void close(Ctx& ctx);
  70.     void print(Ctx& ctx);
  71.     // children
  72.     const Code& getCode() const;
  73.     Data& getData() const;
  74. };
  75. inline
  76. Exec_expr_const::Code::Code(const SqlField& sqlField) :
  77.     Exec_expr::Code(m_sqlField.sqlSpec()),
  78.     m_sqlField(sqlField)
  79. {
  80. }
  81. inline
  82. Exec_expr_const::Data::Data(SqlField& sqlField) :
  83.     Exec_expr::Data(m_sqlField),
  84.     m_sqlField(sqlField)
  85. {
  86. }
  87. inline
  88. Exec_expr_const::Exec_expr_const(Exec_root* root) :
  89.     Exec_expr(root)
  90. {
  91. }
  92. // children
  93. inline const Exec_expr_const::Code&
  94. Exec_expr_const::getCode() const
  95. {
  96.     const Code* code = static_cast<const Code*>(m_code);
  97.     return *code;
  98. }
  99. inline Exec_expr_const::Data&
  100. Exec_expr_const::getData() const
  101. {
  102.     Data* data = static_cast<Data*>(m_data);
  103.     return *data;
  104. }
  105. #endif