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

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 SCAN_TAB_H
  14. #define SCAN_TAB_H
  15. #include "SignalData.hpp"
  16. /**
  17.  * 
  18.  * SENDER:  API
  19.  * RECIVER: Dbtc
  20.  */
  21. class ScanTabReq {
  22.   /**
  23.    * Reciver(s)
  24.    */
  25.   friend class Dbtc;         // Reciver
  26.   /**
  27.    * Sender(s)
  28.    */
  29.   friend class NdbConnection;
  30.   friend class NdbScanOperation; 
  31.   /**
  32.    * For printing
  33.    */
  34.   friend bool printSCANTABREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
  35. public:
  36.   /**
  37.    * Length of signal
  38.    */
  39.   STATIC_CONST( StaticLength = 11 );
  40. private:
  41.   // Type definitions
  42.   /**
  43.    * DATA VARIABLES
  44.    */
  45.   UintR apiConnectPtr;        // DATA 0
  46.   UintR attrLenKeyLen;        // DATA 1
  47.   UintR requestInfo;          // DATA 2
  48.   UintR tableId;              // DATA 3
  49.   UintR tableSchemaVersion;   // DATA 4
  50.   UintR storedProcId;         // DATA 5
  51.   UintR transId1;             // DATA 6
  52.   UintR transId2;             // DATA 7
  53.   UintR buddyConPtr;          // DATA 8
  54.   UintR batch_byte_size;      // DATA 9
  55.   UintR first_batch_size;     // DATA 10
  56.   
  57.   /**
  58.    * Get:ers for requestInfo
  59.    */
  60.   static Uint8 getParallelism(const UintR & requestInfo);
  61.   static Uint8 getLockMode(const UintR & requestInfo);
  62.   static Uint8 getHoldLockFlag(const UintR & requestInfo);
  63.   static Uint8 getReadCommittedFlag(const UintR & requestInfo);
  64.   static Uint8 getRangeScanFlag(const UintR & requestInfo);
  65.   static Uint8 getKeyinfoFlag(const UintR & requestInfo);
  66.   static Uint16 getScanBatch(const UintR & requestInfo);
  67.   /**
  68.    * Set:ers for requestInfo
  69.    */
  70.   static void clearRequestInfo(UintR & requestInfo);
  71.   static void setParallelism(UintR & requestInfo, Uint32 flag);
  72.   static void setLockMode(UintR & requestInfo, Uint32 flag);
  73.   static void setHoldLockFlag(UintR & requestInfo, Uint32 flag);
  74.   static void setReadCommittedFlag(UintR & requestInfo, Uint32 flag);
  75.   static void setRangeScanFlag(UintR & requestInfo, Uint32 flag);
  76.   static void setKeyinfoFlag(UintR & requestInfo, Uint32 flag);
  77.   static void setScanBatch(Uint32& requestInfo, Uint32 sz);
  78. };
  79. /**
  80.  * Request Info
  81.  *
  82.  p = Parallelism           - 8  Bits -> Max 256 (Bit 0-7)
  83.  l = Lock mode             - 1  Bit 8
  84.  h = Hold lock mode        - 1  Bit 10
  85.  c = Read Committed        - 1  Bit 11
  86.  k = Keyinfo               - 1  Bit 12
  87.  x = Range Scan (TUX)      - 1  Bit 15
  88.  b = Scan batch            - 10 Bit 16-25 (max 1023)
  89.            1111111111222222222233
  90.  01234567890123456789012345678901
  91.  ppppppppl hck  xbbbbbbbbbb
  92. */
  93. #define PARALLELL_SHIFT     (0)
  94. #define PARALLELL_MASK      (255)
  95. #define LOCK_MODE_SHIFT     (8)
  96. #define LOCK_MODE_MASK      (1)
  97. #define HOLD_LOCK_SHIFT     (10)
  98. #define HOLD_LOCK_MASK      (1)
  99. #define KEYINFO_SHIFT       (12)
  100. #define KEYINFO_MASK        (1)
  101. #define READ_COMMITTED_SHIFT     (11)
  102. #define READ_COMMITTED_MASK      (1)
  103. #define RANGE_SCAN_SHIFT        (15)
  104. #define RANGE_SCAN_MASK         (1)
  105. #define SCAN_BATCH_SHIFT (16)
  106. #define SCAN_BATCH_MASK  (1023)
  107. inline
  108. Uint8
  109. ScanTabReq::getParallelism(const UintR & requestInfo){
  110.   return (Uint8)((requestInfo >> PARALLELL_SHIFT) & PARALLELL_MASK);
  111. }
  112. inline
  113. Uint8
  114. ScanTabReq::getLockMode(const UintR & requestInfo){
  115.   return (Uint8)((requestInfo >> LOCK_MODE_SHIFT) & LOCK_MODE_MASK);
  116. }
  117. inline
  118. Uint8
  119. ScanTabReq::getHoldLockFlag(const UintR & requestInfo){
  120.   return (Uint8)((requestInfo >> HOLD_LOCK_SHIFT) & HOLD_LOCK_MASK);
  121. }
  122. inline
  123. Uint8
  124. ScanTabReq::getReadCommittedFlag(const UintR & requestInfo){
  125.   return (Uint8)((requestInfo >> READ_COMMITTED_SHIFT) & READ_COMMITTED_MASK);
  126. }
  127. inline
  128. Uint8
  129. ScanTabReq::getRangeScanFlag(const UintR & requestInfo){
  130.   return (Uint8)((requestInfo >> RANGE_SCAN_SHIFT) & RANGE_SCAN_MASK);
  131. }
  132. inline
  133. Uint16
  134. ScanTabReq::getScanBatch(const Uint32 & requestInfo){
  135.   return (Uint16)((requestInfo >> SCAN_BATCH_SHIFT) & SCAN_BATCH_MASK);
  136. }
  137. inline
  138. void 
  139. ScanTabReq::clearRequestInfo(UintR & requestInfo){
  140.   requestInfo = 0;
  141. }
  142. inline
  143. void 
  144. ScanTabReq::setParallelism(UintR & requestInfo, Uint32 type){
  145.   ASSERT_MAX(type, PARALLELL_MASK, "ScanTabReq::setParallellism");
  146.   requestInfo |= (type << PARALLELL_SHIFT);
  147. }
  148. inline
  149. void 
  150. ScanTabReq::setLockMode(UintR & requestInfo, Uint32 mode){
  151.   ASSERT_MAX(mode, LOCK_MODE_MASK,  "ScanTabReq::setLockMode");
  152.   requestInfo |= (mode << LOCK_MODE_SHIFT);
  153. }
  154. inline
  155. void 
  156. ScanTabReq::setHoldLockFlag(UintR & requestInfo, Uint32 flag){
  157.   ASSERT_BOOL(flag, "ScanTabReq::setHoldLockFlag");
  158.   requestInfo |= (flag << HOLD_LOCK_SHIFT);
  159. }
  160. inline
  161. void 
  162. ScanTabReq::setReadCommittedFlag(UintR & requestInfo, Uint32 flag){
  163.   ASSERT_BOOL(flag, "ScanTabReq::setReadCommittedFlag");
  164.   requestInfo |= (flag << READ_COMMITTED_SHIFT);
  165. }
  166. inline
  167. void 
  168. ScanTabReq::setRangeScanFlag(UintR & requestInfo, Uint32 flag){
  169.   ASSERT_BOOL(flag, "ScanTabReq::setRangeScanFlag");
  170.   requestInfo |= (flag << RANGE_SCAN_SHIFT);
  171. }
  172. inline
  173. void
  174. ScanTabReq::setScanBatch(Uint32 & requestInfo, Uint32 flag){
  175.   ASSERT_MAX(flag, SCAN_BATCH_MASK,  "ScanTabReq::setScanBatch");
  176.   requestInfo &= ~(SCAN_BATCH_MASK << SCAN_BATCH_SHIFT);
  177.   requestInfo |= (flag << SCAN_BATCH_SHIFT);
  178. }
  179. inline
  180. Uint8
  181. ScanTabReq::getKeyinfoFlag(const UintR & requestInfo){
  182.   return (Uint8)((requestInfo >> KEYINFO_SHIFT) & KEYINFO_MASK);
  183. }
  184. inline
  185. void 
  186. ScanTabReq::setKeyinfoFlag(UintR & requestInfo, Uint32 flag){
  187.   ASSERT_BOOL(flag, "ScanTabReq::setKeyinfoFlag");
  188.   requestInfo |= (flag << KEYINFO_SHIFT);
  189. }
  190. /**
  191.  * 
  192.  * SENDER:  Dbtc
  193.  * RECIVER: API
  194.  */
  195. class ScanTabConf {
  196.   /**
  197.    * Reciver(s) 
  198.    */
  199.   friend class NdbConnection;         // Reciver
  200.   /**
  201.    * Sender(s)
  202.    */
  203.   friend class Dbtc; 
  204.   /**
  205.    * For printing
  206.    */
  207.   friend bool printSCANTABCONF(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
  208. public:
  209.   /**
  210.    * Length of signal
  211.    */
  212.   STATIC_CONST( SignalLength = 4 );
  213.   STATIC_CONST( EndOfData = (1 << 31) );
  214.   
  215. private:
  216.   // Type definitions
  217.   /**
  218.    * DATA VARIABLES
  219.    */
  220.   UintR apiConnectPtr;        // DATA 0
  221.   UintR requestInfo;          // DATA 1
  222.   UintR transId1;             // DATA 2
  223.   UintR transId2;             // DATA 3
  224.   struct OpData {
  225.     Uint32 apiPtrI;
  226.     Uint32 tcPtrI;
  227.     Uint32 info;
  228.   };
  229.   static Uint32 getLength(Uint32 opDataInfo) { return opDataInfo >> 10; };
  230.   static Uint32 getRows(Uint32 opDataInfo) { return opDataInfo & 1023;}
  231. };
  232. /**
  233.  * request info
  234.  *
  235.  o = received operations        - 7  Bits -> Max 255 (Bit 0-7)
  236.  s = status of scan             - 2  Bits -> Max ??? (Bit 8-?) 
  237.            1111111111222222222233
  238.  01234567890123456789012345678901
  239.  ooooooooss
  240. */
  241. #define OPERATIONS_SHIFT     (0)
  242. #define OPERATIONS_MASK      (0xFF)
  243. #define STATUS_SHIFT     (8)
  244. #define STATUS_MASK      (0xFF)
  245. /**
  246.  * 
  247.  * SENDER:  Dbtc
  248.  * RECIVER: API
  249.  */
  250. class ScanTabRef {
  251.   /**
  252.    * Reciver(s)
  253.    */
  254.   friend class NdbConnection;         // Reciver
  255.   /**
  256.    * Sender(s)
  257.    */
  258.   friend class Dbtc; 
  259.   /**
  260.    * For printing
  261.    */
  262.   friend bool printSCANTABREF(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
  263. public:
  264.   /**
  265.    * Length of signal
  266.    */
  267.   STATIC_CONST( SignalLength = 5 );
  268. private:
  269.   // Type definitions
  270.   /**
  271.    * DATA VARIABLES
  272.    */
  273.   UintR apiConnectPtr;        // DATA 0
  274.   UintR transId1;             // DATA 1
  275.   UintR transId2;             // DATA 2
  276.   UintR errorCode;            // DATA 3
  277.   UintR closeNeeded;          // DATA 4
  278.  
  279. };
  280. /**
  281.  * 
  282.  * SENDER:  API
  283.  * RECIVER: Dbtc
  284.  */
  285. class ScanNextReq {
  286.   /**
  287.    * Reciver(s)
  288.    */
  289.   friend class Dbtc;         // Reciver
  290.   /**
  291.    * Sender(s)
  292.    */
  293.   friend class NdbOperation; 
  294.   /**
  295.    * For printing
  296.    */
  297.   friend bool printSCANNEXTREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
  298. public:
  299.   /**
  300.    * Length of signal
  301.    */
  302.   STATIC_CONST( SignalLength = 4 );
  303. private:
  304.   // Type definitions
  305.   /**
  306.    * DATA VARIABLES
  307.    */
  308.   UintR apiConnectPtr;        // DATA 0
  309.   UintR stopScan;             // DATA 1
  310.   UintR transId1;             // DATA 2
  311.   UintR transId2;             // DATA 3
  312.   // stopScan = 1, stop this scan
  313.  
  314. };
  315. #endif