summaryrefslogtreecommitdiff
path: root/ndb/include/kernel/signaldata/TupAccess.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/include/kernel/signaldata/TupAccess.hpp')
-rw-r--r--ndb/include/kernel/signaldata/TupAccess.hpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/ndb/include/kernel/signaldata/TupAccess.hpp b/ndb/include/kernel/signaldata/TupAccess.hpp
new file mode 100644
index 00000000000..5cfb8c0d153
--- /dev/null
+++ b/ndb/include/kernel/signaldata/TupAccess.hpp
@@ -0,0 +1,172 @@
+/* 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 TUP_ACCESS_HPP
+#define TUP_ACCESS_HPP
+
+#include "SignalData.hpp"
+
+/*
+ * Direct signals used by ACC and TUX to access the TUP block in the
+ * same thread.
+ *
+ * NOTE: Caller must set errorCode to RNIL. Signal printer uses this to
+ * distinguish between input and output (no better way exists).
+ */
+
+/*
+ * Read attributes from any table.
+ */
+class TupReadAttrs {
+ friend class Dbtup;
+ friend class Dbacc;
+ friend class Dbtux;
+ friend bool printTUP_READ_ATTRS(FILE*, const Uint32*, Uint32, Uint16);
+public:
+ enum Flag {
+ /*
+ * Read primary key attributes. No input attribute ids are
+ * specified. Instead TUP fills in both input and output sections.
+ * Tuple version is not used.
+ */
+ ReadKeys = (1 << 0)
+ };
+ STATIC_CONST( SignalLength = 10 );
+private:
+ /*
+ * Error code set by TUP. Zero means no error.
+ */
+ Uint32 errorCode;
+ /*
+ * Request info contains flags (see Flags above).
+ */
+ Uint32 requestInfo;
+ /*
+ * Table i-value.
+ */
+ Uint32 tableId;
+ /*
+ * Fragment is given by logical id within the table or by direct
+ * i-value (faster). Unknown values are given as RNIL. On return TUP
+ * fills in both values.
+ */
+ Uint32 fragId;
+ Uint32 fragPtrI;
+ /*
+ * Logical address ("local key") of "original" tuple (the latest
+ * version) consisting of logical fragment page id and tuple index
+ * within the page (shifted left by 1).
+ */
+ Uint32 tupAddr;
+ /*
+ * Version of the tuple to read. Not used if ReadKeys.
+ */
+ Uint32 tupVersion;
+ /*
+ * Real page id and offset of the "original" tuple. Unknown page is
+ * given as RNIL. On return TUP fills in these.
+ */
+ Uint32 pageId;
+ Uint32 pageOffset;
+ /*
+ * Shared buffer id. Currently must be 0 which means to use rest of
+ * signal data.
+ */
+ Uint32 bufferId;
+ /*
+ * Shared buffer 0 starts after signal class. Input is number of
+ * attributes and list of attribute ids in AttributeHeader format.
+ * Output is placed after the input and consists of a list of entries
+ * where each entry has an AttributeHeader followed by words of data.
+ */
+};
+
+/*
+ * Query status of tuple version. Used by TUX to decide if a tuple
+ * version found in index tree is visible to the transaction.
+ */
+class TupQueryTh {
+ friend class Dbtup;
+ friend class Dbtux;
+ friend bool printTUP_QUERY_TH(FILE*, const Uint32*, Uint32, Uint16);
+public:
+ enum Flag {
+ };
+ STATIC_CONST( SignalLength = 7 );
+private:
+ /*
+ TUX wants to check if tuple is visible to the scan query.
+ Input data is tuple address (tableId, fragId, tupAddr, tupVersion),
+ and transaction data so that TUP knows how to deduct if tuple is
+ visible (transId1, transId2, savePointId).
+ returnCode is set in return signal to indicate whether tuple is visible.
+ */
+ union {
+ Uint32 returnCode; // 1 if tuple visible
+ Uint32 tableId;
+ };
+ Uint32 fragId;
+ Uint32 tupAddr;
+ Uint32 tupVersion;
+ Uint32 transId1;
+ Uint32 transId2;
+ Uint32 savePointId;
+};
+
+/*
+ * Operate on entire tuple. Used by TUX where the table has a single
+ * Uint32 array attribute representing an index tree node.
+ */
+class TupStoreTh {
+ friend class Dbtup;
+ friend class Dbtux;
+ friend bool printTUP_STORE_TH(FILE*, const Uint32*, Uint32, Uint16);
+public:
+ enum OpCode {
+ OpUndefined = 0,
+ OpRead = 1,
+ OpInsert = 2,
+ OpUpdate = 3,
+ OpDelete = 4
+ };
+ STATIC_CONST( SignalLength = 12 );
+private:
+ /*
+ * These are as in TupReadAttrs (except opCode). Version must be
+ * zero. Ordered index tuple (tree node) has only current version.
+ */
+ Uint32 errorCode;
+ Uint32 opCode;
+ Uint32 tableId;
+ Uint32 fragId;
+ Uint32 fragPtrI;
+ Uint32 tupAddr;
+ Uint32 tupVersion;
+ Uint32 pageId;
+ Uint32 pageOffset;
+ Uint32 bufferId;
+ /*
+ * Data offset and size in words. Applies to both the buffer and the
+ * tuple. Used e.g. to read only node header.
+ */
+ Uint32 dataOffset;
+ Uint32 dataSize;
+ /*
+ * Shared buffer 0 starts after signal class.
+ */
+};
+
+#endif