StmtArea.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_COMMON_StmtArea_hpp
  14. #define ODBC_COMMON_StmtArea_hpp
  15. #include <common/common.hpp>
  16. #include "ConnArea.hpp"
  17. #include "StmtInfo.hpp"
  18. #include "DescArea.hpp"
  19. class PlanTree;
  20. class ExecTree;
  21. /**
  22.  * @class StmtArea
  23.  * @brief Public part of statement handle
  24.  */
  25. class StmtArea {
  26. public:
  27.     // state between ODBC function calls
  28.     enum State {
  29. Free = 1, // not in use
  30. Prepared = 2, // statement prepared, maybe unbound
  31. NeedData = 3, // executed, SQLParamData expected
  32. Open = 4 // cursor open
  33.     };
  34.     // connection area shared by all statements
  35.     ConnArea& connArea();
  36.     State getState() const;
  37.     // SQL text
  38.     const BaseString& sqlText();
  39.     BaseString& nativeText();
  40.     // allocate or unallocate connections if necessary
  41.     bool useSchemaCon(Ctx& ctx, bool use);
  42.     bool useConnection(Ctx& ctx, bool use);
  43.     // statement info
  44.     StmtInfo& stmtInfo();
  45.     DescArea& descArea(DescUsage u);
  46.     unsigned unbound() const;
  47.     // set row count here and in diagnostics
  48.     void setRowCount(Ctx& ctx, CountType rowCount);
  49.     CountType getRowCount() const;
  50.     // raw tuple count (tuples fetched from NDB)
  51.     void resetTuplesFetched();
  52.     void incTuplesFetched();
  53.     CountType getTuplesFetched() const;
  54.     // set dynamic function in StmtInfo only (at prepare)
  55.     void setFunction(Ctx& ctx, const char* function, SQLINTEGER functionCode);
  56.     // set dynamic function in diagnostics (at execute)
  57.     void setFunction(Ctx& ctx);
  58. protected:
  59.     friend class CodeGen;
  60.     friend class Executor;
  61.     friend class Plan_root;
  62.     StmtArea(ConnArea& connArea);
  63.     ~StmtArea();
  64.     void free(Ctx& ctx);
  65.     ConnArea& m_connArea;
  66.     State m_state;
  67.     BaseString m_sqlText;
  68.     BaseString m_nativeText;
  69.     bool m_useSchemaCon;
  70.     bool m_useConnection;
  71.     StmtInfo m_stmtInfo;
  72.     // plan tree output from parser and rewritten by analyze
  73.     PlanTree* m_planTree;
  74.     // exec tree output from analyze
  75.     ExecTree* m_execTree;
  76.     // pointers within HandleDesc allocated via HandleStmt
  77.     DescArea* m_descArea[1+4];
  78.     // parameters with unbound SQL type
  79.     unsigned m_unbound;
  80.     CountType m_rowCount;
  81.     CountType m_tuplesFetched;
  82. };
  83. inline ConnArea&
  84. StmtArea::connArea()
  85. {
  86.     return m_connArea;
  87. }
  88. inline StmtArea::State
  89. StmtArea::getState() const
  90. {
  91.     return m_state;
  92. }
  93. inline const BaseString&
  94. StmtArea::sqlText() {
  95.     return m_sqlText;
  96. }
  97. inline BaseString&
  98. StmtArea::nativeText() {
  99.     return m_nativeText;
  100. }
  101. inline StmtInfo&
  102. StmtArea::stmtInfo()
  103. {
  104.     return m_stmtInfo;
  105. }
  106. inline DescArea&
  107. StmtArea::descArea(DescUsage u)
  108. {
  109.     ctx_assert(1 <= u && u <= 4);
  110.     ctx_assert(m_descArea[u] != 0);
  111.     return *m_descArea[u];
  112. }
  113. inline unsigned
  114. StmtArea::unbound() const
  115. {
  116.     return m_unbound;
  117. }
  118. inline CountType
  119. StmtArea::getRowCount() const
  120. {
  121.     return m_rowCount;
  122. }
  123. inline void
  124. StmtArea::resetTuplesFetched()
  125. {
  126.     m_tuplesFetched = 0;
  127. }
  128. inline void
  129. StmtArea::incTuplesFetched()
  130. {
  131.     m_tuplesFetched++;
  132. }
  133. inline CountType
  134. StmtArea::getTuplesFetched() const
  135. {
  136.     return m_tuplesFetched;
  137. }
  138. #endif