AccScan.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 ACC_SCAN_HPP
  14. #define ACC_SCAN_HPP
  15. #include "SignalData.hpp"
  16. /*
  17.  * Used by ACC and TUX scan.
  18.  */
  19. class AccScanReq {
  20.   /**
  21.    * Sender(s)
  22.    */
  23.   friend class Dblqh;
  24.   /**
  25.    * Reciver(s)
  26.    */
  27.   friend class Dbacc;
  28.   friend class Dbtux;
  29. public:
  30.   STATIC_CONST( SignalLength = 8 );
  31.   
  32. private:
  33.   Uint32 senderData;
  34.   Uint32 senderRef;
  35.   Uint32 tableId;
  36.   Uint32 fragmentNo;
  37.   Uint32 requestInfo;
  38.   Uint32 transId1;
  39.   Uint32 transId2;
  40.   Uint32 savePointId;
  41.   /**
  42.    * Previously there where also a scan type
  43.    */
  44.   static Uint32 getLockMode(const Uint32 & requestInfo);
  45.   static Uint32 getKeyinfoFlag(const Uint32 & requestInfo);
  46.   static Uint32 getReadCommittedFlag(const Uint32 & requestInfo);
  47.   
  48.   static void setLockMode(Uint32 & requestInfo, Uint32 lockMode);
  49.   static void setKeyinfoFlag(Uint32 & requestInfo, Uint32 keyinfo);
  50.   static void setReadCommittedFlag(Uint32 & requestInfo, Uint32 readCommitted);
  51. };
  52. /**
  53.  * Request Info
  54.  *
  55.  * l = Lock Mode             - 1  Bit 2
  56.  * k = Keyinfo               - 1  Bit 4
  57.  * h = Read Committed        - 1  Bit 5
  58.  *
  59.  *           1111111111222222222233
  60.  * 01234567890123456789012345678901
  61.  *   l kh    
  62.  */
  63. #define AS_LOCK_MODE_SHIFT       (2)
  64. #define AS_LOCK_MODE_MASK        (1)
  65. #define AS_KEYINFO_SHIFT         (4)
  66. #define AS_READ_COMMITTED_SHIFT  (5)
  67. inline 
  68. Uint32
  69. AccScanReq::getLockMode(const Uint32 & requestInfo){
  70.   return (requestInfo >> AS_LOCK_MODE_SHIFT) & AS_LOCK_MODE_MASK;
  71. }
  72. inline
  73. Uint32
  74. AccScanReq::getKeyinfoFlag(const Uint32 & requestInfo){
  75.   return (requestInfo >> AS_KEYINFO_SHIFT) & 1;
  76. }
  77. inline
  78. Uint32
  79. AccScanReq::getReadCommittedFlag(const Uint32 & requestInfo){
  80.   return (requestInfo >> AS_READ_COMMITTED_SHIFT) & 1;
  81. }
  82. inline
  83. void
  84. AccScanReq::setLockMode(UintR & requestInfo, UintR val){
  85.   ASSERT_MAX(val, AS_LOCK_MODE_MASK, "AccScanReq::setLockMode");
  86.   requestInfo |= (val << AS_LOCK_MODE_SHIFT);
  87. }
  88. inline
  89. void
  90. AccScanReq::setKeyinfoFlag(UintR & requestInfo, UintR val){
  91.   ASSERT_BOOL(val, "AccScanReq::setKeyinfoFlag");
  92.   requestInfo |= (val << AS_KEYINFO_SHIFT);
  93. }
  94. inline
  95. void
  96. AccScanReq::setReadCommittedFlag(UintR & requestInfo, UintR val){
  97.   ASSERT_BOOL(val, "AccScanReq::setReadCommittedFlag");
  98.   requestInfo |= (val << AS_READ_COMMITTED_SHIFT);
  99. }
  100. class AccScanConf {
  101.   /**
  102.    * Sender(s)
  103.    */
  104.   friend class Dbacc;
  105.   friend class Dbtux;
  106.   /**
  107.    * Reciver(s)
  108.    */
  109.   friend class Dblqh;
  110.   enum {
  111.     ZEMPTY_FRAGMENT = 0,
  112.     ZNOT_EMPTY_FRAGMENT = 1
  113.   };
  114. public:
  115.   STATIC_CONST( SignalLength = 8 );
  116.   
  117. private:
  118.   Uint32 scanPtr;
  119.   Uint32 accPtr;
  120.   Uint32 unused1;
  121.   Uint32 unused2;
  122.   Uint32 unused3;
  123.   Uint32 unused4;
  124.   Uint32 unused5;
  125.   Uint32 flag;
  126. };
  127. class AccCheckScan {
  128.   friend class Dbacc;
  129.   friend class Dbtux;
  130.   friend class Dblqh;
  131.   enum {
  132.     ZCHECK_LCP_STOP = 0,
  133.     ZNOT_CHECK_LCP_STOP = 1
  134.   };
  135. public:
  136.   STATIC_CONST( SignalLength = 2 );
  137. private:
  138.   Uint32 accPtr;                // scanptr.i in ACC or TUX
  139.   Uint32 checkLcpStop;          // from enum
  140. };
  141. #endif