MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AccScan.hpp
1 /*
2  Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; version 2 of the License.
7 
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with this program; if not, write to the Free Software
15  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 
18 #ifndef ACC_SCAN_HPP
19 #define ACC_SCAN_HPP
20 
21 #include "SignalData.hpp"
22 
23 /*
24  * Used by ACC and TUX scan.
25  */
26 
27 class AccScanReq {
31  friend class Dblqh;
32 
36  friend class Dbacc;
37  friend class Dbtux;
38  friend class Dbtup;
39 public:
40  STATIC_CONST( SignalLength = 8 );
41 
42 private:
43  Uint32 senderData;
44  Uint32 senderRef;
45  Uint32 tableId;
46  Uint32 fragmentNo;
47  Uint32 requestInfo;
48  Uint32 transId1;
49  Uint32 transId2;
50  union {
51  Uint32 savePointId;
52  Uint32 gci;
53  };
54  Uint32 maxPage;
55 
59  static Uint32 getLockMode(const Uint32 & requestInfo);
60  static Uint32 getReadCommittedFlag(const Uint32 & requestInfo);
61  static Uint32 getDescendingFlag(const Uint32 & requestInfo);
62 
63  static void setLockMode(Uint32 & requestInfo, Uint32 lockMode);
64  static void setReadCommittedFlag(Uint32 & requestInfo, Uint32 readCommitted);
65  static void setDescendingFlag(Uint32 & requestInfo, Uint32 descending);
66 
67  static Uint32 getNoDiskScanFlag(const Uint32 & requestInfo);
68  static void setNoDiskScanFlag(Uint32 & requestInfo, Uint32 nodisk);
69 
70  static Uint32 getNRScanFlag(const Uint32 & requestInfo);
71  static void setNRScanFlag(Uint32 & requestInfo, Uint32 nr);
72 
73  static Uint32 getLcpScanFlag(const Uint32 & requestInfo);
74  static void setLcpScanFlag(Uint32 & requestInfo, Uint32 nr);
75 
76  static Uint32 getStatScanFlag(const Uint32 & requestInfo);
77  static void setStatScanFlag(Uint32 & requestInfo, Uint32 nr);
78 };
79 
95 #define AS_LOCK_MODE_SHIFT (2)
96 #define AS_LOCK_MODE_MASK (1)
97 #define AS_READ_COMMITTED_SHIFT (5)
98 #define AS_DESCENDING_SHIFT (6)
99 #define AS_NO_DISK_SCAN (7)
100 #define AS_NR_SCAN (8)
101 #define AS_LCP_SCAN (9)
102 #define AS_STAT_SCAN (4)
103 
104 inline
105 Uint32
106 AccScanReq::getLockMode(const Uint32 & requestInfo){
107  return (requestInfo >> AS_LOCK_MODE_SHIFT) & AS_LOCK_MODE_MASK;
108 }
109 
110 inline
111 Uint32
112 AccScanReq::getReadCommittedFlag(const Uint32 & requestInfo){
113  return (requestInfo >> AS_READ_COMMITTED_SHIFT) & 1;
114 }
115 
116 inline
117 Uint32
118 AccScanReq::getDescendingFlag(const Uint32 & requestInfo){
119  return (requestInfo >> AS_DESCENDING_SHIFT) & 1;
120 }
121 
122 inline
123 void
124 AccScanReq::setLockMode(UintR & requestInfo, UintR val){
125  ASSERT_MAX(val, AS_LOCK_MODE_MASK, "AccScanReq::setLockMode");
126  requestInfo |= (val << AS_LOCK_MODE_SHIFT);
127 }
128 
129 inline
130 void
131 AccScanReq::setReadCommittedFlag(UintR & requestInfo, UintR val){
132  ASSERT_BOOL(val, "AccScanReq::setReadCommittedFlag");
133  requestInfo |= (val << AS_READ_COMMITTED_SHIFT);
134 }
135 
136 inline
137 void
138 AccScanReq::setDescendingFlag(UintR & requestInfo, UintR val){
139  ASSERT_BOOL(val, "AccScanReq::setDescendingFlag");
140  requestInfo |= (val << AS_DESCENDING_SHIFT);
141 }
142 
143 inline
144 Uint32
145 AccScanReq::getNoDiskScanFlag(const Uint32 & requestInfo){
146  return (requestInfo >> AS_NO_DISK_SCAN) & 1;
147 }
148 
149 inline
150 void
151 AccScanReq::setNoDiskScanFlag(UintR & requestInfo, UintR val){
152  ASSERT_BOOL(val, "AccScanReq::setNoDiskScanFlag");
153  requestInfo |= (val << AS_NO_DISK_SCAN);
154 }
155 
156 inline
157 Uint32
158 AccScanReq::getNRScanFlag(const Uint32 & requestInfo){
159  return (requestInfo >> AS_NR_SCAN) & 1;
160 }
161 
162 inline
163 void
164 AccScanReq::setNRScanFlag(UintR & requestInfo, UintR val){
165  ASSERT_BOOL(val, "AccScanReq::setNoDiskScanFlag");
166  requestInfo |= (val << AS_NR_SCAN);
167 }
168 
169 inline
170 Uint32
171 AccScanReq::getLcpScanFlag(const Uint32 & requestInfo){
172  return (requestInfo >> AS_LCP_SCAN) & 1;
173 }
174 
175 inline
176 void
177 AccScanReq::setLcpScanFlag(UintR & requestInfo, UintR val){
178  ASSERT_BOOL(val, "AccScanReq::setNoDiskScanFlag");
179  requestInfo |= (val << AS_LCP_SCAN);
180 }
181 
182 inline
183 Uint32
184 AccScanReq::getStatScanFlag(const Uint32 & requestInfo){
185  return (requestInfo >> AS_STAT_SCAN) & 1;
186 }
187 
188 inline
189 void
190 AccScanReq::setStatScanFlag(UintR & requestInfo, UintR val){
191  ASSERT_BOOL(val, "AccScanReq::setStatScanScanFlag");
192  requestInfo |= (val << AS_STAT_SCAN);
193 }
194 
195 class AccScanConf {
199  friend class Dbacc;
200  friend class Dbtux;
201  friend class Dbtup;
202 
206  friend class Dblqh;
207 
208  enum {
209  ZEMPTY_FRAGMENT = 0,
210  ZNOT_EMPTY_FRAGMENT = 1
211  };
212 
213 public:
214  STATIC_CONST( SignalLength = 8 );
215 
216 private:
217  Uint32 scanPtr;
218  Uint32 accPtr;
219  Uint32 unused1;
220  Uint32 unused2;
221  Uint32 unused3;
222  Uint32 unused4;
223  Uint32 unused5;
224  Uint32 flag;
225 };
226 
227 class AccScanRef {
228  friend class Dbtux;
229  friend class Dblqh;
230 
231  enum ErrorCode {
232  TuxNoFreeScanOp = 909,
233  TuxIndexNotOnline = 910,
234  TuxNoFreeStatOp = 911,
235  TuxInvalidLockMode = 912
236  };
237 
238 public:
239  STATIC_CONST( SignalLength = 3 );
240 
241 private:
242  Uint32 scanPtr;
243  Uint32 accPtr;
244  Uint32 errorCode;
245 };
246 
248  friend class Dbacc;
249  friend class Dbtux;
250  friend class Dbtup;
251  friend class Dblqh;
252  enum {
253  ZCHECK_LCP_STOP = 0,
254  ZNOT_CHECK_LCP_STOP = 1
255  };
256 public:
257  STATIC_CONST( SignalLength = 2 );
258 private:
259  Uint32 accPtr; // scanptr.i in ACC or TUX
260  Uint32 checkLcpStop; // from enum
261 };
262 
263 #endif