summaryrefslogtreecommitdiff
path: root/ndb/include/kernel/signaldata/AccScan.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/include/kernel/signaldata/AccScan.hpp')
-rw-r--r--ndb/include/kernel/signaldata/AccScan.hpp164
1 files changed, 164 insertions, 0 deletions
diff --git a/ndb/include/kernel/signaldata/AccScan.hpp b/ndb/include/kernel/signaldata/AccScan.hpp
new file mode 100644
index 00000000000..eab1c3262fc
--- /dev/null
+++ b/ndb/include/kernel/signaldata/AccScan.hpp
@@ -0,0 +1,164 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef ACC_SCAN_HPP
+#define ACC_SCAN_HPP
+
+#include "SignalData.hpp"
+
+/*
+ * Used by ACC and TUX scan.
+ */
+
+class AccScanReq {
+ /**
+ * Sender(s)
+ */
+ friend class Dblqh;
+
+ /**
+ * Reciver(s)
+ */
+ friend class Dbacc;
+ friend class Dbtux;
+public:
+ STATIC_CONST( SignalLength = 8 );
+
+private:
+ Uint32 senderData;
+ Uint32 senderRef;
+ Uint32 tableId;
+ Uint32 fragmentNo;
+ Uint32 requestInfo;
+ Uint32 transId1;
+ Uint32 transId2;
+ Uint32 savePointId;
+
+ /**
+ * Previously there where also a scan type
+ */
+ static Uint32 getLockMode(const Uint32 & requestInfo);
+ static Uint32 getKeyinfoFlag(const Uint32 & requestInfo);
+ static Uint32 getReadCommittedFlag(const Uint32 & requestInfo);
+
+ static void setLockMode(Uint32 & requestInfo, Uint32 lockMode);
+ static void setKeyinfoFlag(Uint32 & requestInfo, Uint32 keyinfo);
+ static void setReadCommittedFlag(Uint32 & requestInfo, Uint32 readCommitted);
+};
+
+/**
+ * Request Info
+ *
+ * l = Lock Mode - 1 Bit 2
+ * k = Keyinfo - 1 Bit 4
+ * h = Read Committed - 1 Bit 5
+ *
+ * 1111111111222222222233
+ * 01234567890123456789012345678901
+ * l kh
+ */
+#define AS_LOCK_MODE_SHIFT (2)
+#define AS_LOCK_MODE_MASK (1)
+
+#define AS_KEYINFO_SHIFT (4)
+#define AS_READ_COMMITTED_SHIFT (5)
+
+inline
+Uint32
+AccScanReq::getLockMode(const Uint32 & requestInfo){
+ return (requestInfo >> AS_LOCK_MODE_SHIFT) & AS_LOCK_MODE_MASK;
+}
+
+inline
+Uint32
+AccScanReq::getKeyinfoFlag(const Uint32 & requestInfo){
+ return (requestInfo >> AS_KEYINFO_SHIFT) & 1;
+}
+
+inline
+Uint32
+AccScanReq::getReadCommittedFlag(const Uint32 & requestInfo){
+ return (requestInfo >> AS_READ_COMMITTED_SHIFT) & 1;
+}
+
+inline
+void
+AccScanReq::setLockMode(UintR & requestInfo, UintR val){
+ ASSERT_MAX(val, AS_LOCK_MODE_MASK, "AccScanReq::setLockMode");
+ requestInfo |= (val << AS_LOCK_MODE_SHIFT);
+}
+
+inline
+void
+AccScanReq::setKeyinfoFlag(UintR & requestInfo, UintR val){
+ ASSERT_BOOL(val, "AccScanReq::setKeyinfoFlag");
+ requestInfo |= (val << AS_KEYINFO_SHIFT);
+}
+
+inline
+void
+AccScanReq::setReadCommittedFlag(UintR & requestInfo, UintR val){
+ ASSERT_BOOL(val, "AccScanReq::setReadCommittedFlag");
+ requestInfo |= (val << AS_READ_COMMITTED_SHIFT);
+}
+
+class AccScanConf {
+ /**
+ * Sender(s)
+ */
+ friend class Dbacc;
+ friend class Dbtux;
+
+ /**
+ * Reciver(s)
+ */
+ friend class Dblqh;
+
+ enum {
+ ZEMPTY_FRAGMENT = 0,
+ ZNOT_EMPTY_FRAGMENT = 1
+ };
+
+public:
+ STATIC_CONST( SignalLength = 8 );
+
+private:
+ Uint32 scanPtr;
+ Uint32 accPtr;
+ Uint32 unused1;
+ Uint32 unused2;
+ Uint32 unused3;
+ Uint32 unused4;
+ Uint32 unused5;
+ Uint32 flag;
+};
+
+class AccCheckScan {
+ friend class Dbacc;
+ friend class Dbtux;
+ friend class Dblqh;
+ enum {
+ ZCHECK_LCP_STOP = 0,
+ ZNOT_CHECK_LCP_STOP = 1
+ };
+public:
+ STATIC_CONST( SignalLength = 2 );
+private:
+ Uint32 accPtr; // scanptr.i in ACC or TUX
+ Uint32 checkLcpStop; // from enum
+};
+
+#endif