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

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_CodeGen_hpp
  14. #define ODBC_CODEGEN_CodeGen_hpp
  15. #include <common/common.hpp>
  16. class StmtArea;
  17. class SqlField;
  18. class ExtField;
  19. /**
  20.  * @class CodeGen
  21.  * @brief Compiles SQL text into ExecTree::Code
  22.  */
  23. class CodeGen {
  24. public:
  25.     CodeGen(StmtArea& stmtArea);
  26.     ~CodeGen();
  27.     // parse and analyze SQL statement
  28.     void prepare(Ctx& ctx);
  29.     // these are passed to Executor
  30.     void execute(Ctx& ctx);
  31.     void fetch(Ctx& ctx);
  32.     // close statement (mainly scan)
  33.     void close(Ctx& ctx);
  34.     // free data structures
  35.     void free(Ctx& ctx);
  36.     // odbc support
  37.     void sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind);
  38.     void sqlParamData(Ctx& ctx, SQLPOINTER* value);
  39.     void sqlPutData(Ctx& ctx, SQLPOINTER data, SQLINTEGER strlen_or_Ind);
  40. private:
  41.     void parse(Ctx& ctx);
  42.     void analyze(Ctx& ctx);
  43.     void describe(Ctx& ctx);
  44.     void codegen(Ctx& ctx);
  45.     void alloc(Ctx& ctx);
  46.     void freePlan(Ctx& ctx);
  47.     void freeExec(Ctx& ctx);
  48.     StmtArea& m_stmtArea;
  49. };
  50. inline
  51. CodeGen::CodeGen(StmtArea& stmtArea) :
  52.     m_stmtArea(stmtArea)
  53. {
  54. }
  55. inline
  56. CodeGen::~CodeGen()
  57. {
  58. }
  59. #endif