summaryrefslogtreecommitdiff
path: root/storage/ndb
diff options
context:
space:
mode:
authorunknown <Justin.He/justin.he@dev3-240.dev.cn.tlan>2007-03-13 18:18:17 +0800
committerunknown <Justin.He/justin.he@dev3-240.dev.cn.tlan>2007-03-13 18:18:17 +0800
commitd87ba06c276680580ecca457306a38f45edda835 (patch)
tree9a8e6c1c4daec995e093848738e2e76b071e4d5c /storage/ndb
parent04fa93433bb9f6e8bba3da986754844b522739cd (diff)
parentb285de297405aec39a6cd3957aefa53da13c8652 (diff)
downloadmariadb-git-d87ba06c276680580ecca457306a38f45edda835.tar.gz
Merge dev3-240.dev.cn.tlan:/home/justin.he/mysql/mysql-5.1/mysql-5.1-new-ndb.test
into dev3-240.dev.cn.tlan:/home/justin.he/mysql/mysql-5.1/mysql-5.1-new-ndb-bj.test sql/ha_ndbcluster.cc: Auto merged storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp: Auto merged storage/ndb/src/kernel/vm/Pool.hpp: Auto merged storage/ndb/src/mgmclient/CommandInterpreter.cpp: Auto merged storage/ndb/src/mgmsrv/ConfigInfo.cpp: Auto merged storage/ndb/tools/restore/consumer_restore.cpp: Auto merged
Diffstat (limited to 'storage/ndb')
-rw-r--r--storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp1
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp109
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp66
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp34
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp42
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp14
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp1
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp12
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp82
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp70
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp96
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp54
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp78
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp228
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp1
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp26
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp38
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp172
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp37
-rw-r--r--storage/ndb/src/kernel/error/ErrorReporter.cpp6
-rw-r--r--storage/ndb/src/mgmclient/CommandInterpreter.cpp3
-rw-r--r--storage/ndb/src/mgmsrv/ConfigInfo.cpp2
-rw-r--r--storage/ndb/src/mgmsrv/ParamInfo.cpp2
-rw-r--r--storage/ndb/src/ndbapi/NdbScanFilter.cpp46
-rw-r--r--storage/ndb/test/include/NDBT_Test.hpp6
-rw-r--r--storage/ndb/test/ndbapi/Makefile.am2
-rw-r--r--storage/ndb/test/ndbapi/testScanFilter.cpp851
-rw-r--r--storage/ndb/test/src/NDBT_Test.cpp57
-rw-r--r--storage/ndb/tools/restore/consumer.hpp1
-rw-r--r--storage/ndb/tools/restore/consumer_restore.cpp56
-rw-r--r--storage/ndb/tools/restore/consumer_restore.hpp1
-rw-r--r--storage/ndb/tools/restore/restore_main.cpp20
32 files changed, 1652 insertions, 562 deletions
diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
index fa982063e36..dc6581afd05 100644
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
@@ -1089,7 +1089,6 @@ Dbdict::updateSchemaState(Signal* signal, Uint32 tableId,
SchemaFile::TableEntry* te, Callback* callback,
bool savetodisk){
jam();
- ndbrequire(tableId < c_tableRecordPool.getSize());
XSchemaFile * xsf = &c_schemaFile[c_schemaRecord.schemaPage != 0];
SchemaFile::TableEntry * tableEntry = getTableEntry(xsf, tableId);
diff --git a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
index fecc4649fe9..7aef13204f2 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
@@ -32,6 +32,82 @@
#include <../pgman.hpp>
#include <../tsman.hpp>
+// jams
+#undef jam
+#undef jamEntry
+#ifdef DBTUP_BUFFER_CPP
+#define jam() jamLine(10000 + __LINE__)
+#define jamEntry() jamEntryLine(10000 + __LINE__)
+#endif
+#ifdef DBTUP_ROUTINES_CPP
+#define jam() jamLine(15000 + __LINE__)
+#define jamEntry() jamEntryLine(15000 + __LINE__)
+#endif
+#ifdef DBTUP_COMMIT_CPP
+#define jam() jamLine(20000 + __LINE__)
+#define jamEntry() jamEntryLine(20000 + __LINE__)
+#endif
+#ifdef DBTUP_FIXALLOC_CPP
+#define jam() jamLine(25000 + __LINE__)
+#define jamEntry() jamEntryLine(25000 + __LINE__)
+#endif
+#ifdef DBTUP_TRIGGER_CPP
+#define jam() jamLine(30000 + __LINE__)
+#define jamEntry() jamEntryLine(30000 + __LINE__)
+#endif
+#ifdef DBTUP_ABORT_CPP
+#define jam() jamLine(35000 + __LINE__)
+#define jamEntry() jamEntryLine(35000 + __LINE__)
+#endif
+#ifdef DBTUP_PAGE_MAP_CPP
+#define jam() jamLine(40000 + __LINE__)
+#define jamEntry() jamEntryLine(40000 + __LINE__)
+#endif
+#ifdef DBTUP_PAG_MAN_CPP
+#define jam() jamLine(45000 + __LINE__)
+#define jamEntry() jamEntryLine(45000 + __LINE__)
+#endif
+#ifdef DBTUP_STORE_PROC_DEF_CPP
+#define jam() jamLine(50000 + __LINE__)
+#define jamEntry() jamEntryLine(50000 + __LINE__)
+#endif
+#ifdef DBTUP_META_CPP
+#define jam() jamLine(55000 + __LINE__)
+#define jamEntry() jamEntryLine(55000 + __LINE__)
+#endif
+#ifdef DBTUP_TAB_DES_MAN_CPP
+#define jam() jamLine(60000 + __LINE__)
+#define jamEntry() jamEntryLine(60000 + __LINE__)
+#endif
+#ifdef DBTUP_GEN_CPP
+#define jam() jamLine(65000 + __LINE__)
+#define jamEntry() jamEntryLine(65000 + __LINE__)
+#endif
+#ifdef DBTUP_INDEX_CPP
+#define jam() jamLine(70000 + __LINE__)
+#define jamEntry() jamEntryLine(70000 + __LINE__)
+#endif
+#ifdef DBTUP_DEBUG_CPP
+#define jam() jamLine(75000 + __LINE__)
+#define jamEntry() jamEntryLine(75000 + __LINE__)
+#endif
+#ifdef DBTUP_VAR_ALLOC_CPP
+#define jam() jamLine(80000 + __LINE__)
+#define jamEntry() jamEntryLine(80000 + __LINE__)
+#endif
+#ifdef DBTUP_SCAN_CPP
+#define jam() jamLine(85000 + __LINE__)
+#define jamEntry() jamEntryLine(85000 + __LINE__)
+#endif
+#ifdef DBTUP_DISK_ALLOC_CPP
+#define jam() jamLine(90000 + __LINE__)
+#define jamEntry() jamEntryLine(90000 + __LINE__)
+#endif
+#ifndef jam
+#define jam() jamLine(__LINE__)
+#define jamEntry() jamEntryLine(__LINE__)
+#endif
+
#ifdef VM_TRACE
inline const char* dbgmask(const Bitmask<MAXNROFATTRIBUTESINWORDS>& bm) {
static int i=0; static char buf[5][200];
@@ -70,22 +146,23 @@ inline const Uint32* ALIGN_WORD(const void* ptr)
// only reports the line number in the file it currently is located in.
//
// DbtupExecQuery.cpp 0
-// DbtupBuffer.cpp 2000
-// DbtupRoutines.cpp 3000
-// DbtupCommit.cpp 5000
-// DbtupFixAlloc.cpp 6000
-// DbtupTrigger.cpp 7000
-// DbtupAbort.cpp 9000
-// DbtupPageMap.cpp 14000
-// DbtupPagMan.cpp 16000
-// DbtupStoredProcDef.cpp 18000
-// DbtupMeta.cpp 20000
-// DbtupTabDesMan.cpp 22000
-// DbtupGen.cpp 24000
-// DbtupIndex.cpp 28000
-// DbtupDebug.cpp 30000
-// DbtupVarAlloc.cpp 32000
-// DbtupScan.cpp 33000
+// DbtupBuffer.cpp 10000
+// DbtupRoutines.cpp 15000
+// DbtupCommit.cpp 20000
+// DbtupFixAlloc.cpp 25000
+// DbtupTrigger.cpp 30000
+// DbtupAbort.cpp 35000
+// DbtupPageMap.cpp 40000
+// DbtupPagMan.cpp 45000
+// DbtupStoredProcDef.cpp 50000
+// DbtupMeta.cpp 55000
+// DbtupTabDesMan.cpp 60000
+// DbtupGen.cpp 65000
+// DbtupIndex.cpp 70000
+// DbtupDebug.cpp 75000
+// DbtupVarAlloc.cpp 80000
+// DbtupScan.cpp 85000
+// DbtupDiskAlloc.cpp 90000
//------------------------------------------------------------------
/*
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
index 2414e8a10bf..b3ecbc4f435 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
@@ -14,21 +14,19 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_ABORT_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <pc.hpp>
-#define ljam() { jamLine(9000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(9000 + __LINE__); }
-
void Dbtup::freeAllAttrBuffers(Operationrec* const regOperPtr)
{
if (regOperPtr->storedProcedureId == RNIL) {
- ljam();
+ jam();
freeAttrinbufrec(regOperPtr->firstAttrinbufrec);
} else {
- ljam();
+ jam();
StoredProcPtr storedPtr;
c_storedProcPool.getPtr(storedPtr, (Uint32)regOperPtr->storedProcedureId);
ndbrequire(storedPtr.p->storedCode == ZSCAN_PROCEDURE);
@@ -46,7 +44,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
Uint32 RnoFree = cnoFreeAttrbufrec;
localAttrBufPtr.i = anAttrBuf;
while (localAttrBufPtr.i != RNIL) {
- ljam();
+ jam();
ptrCheckGuard(localAttrBufPtr, cnoOfAttrbufrec, attrbufrec);
Ttemp = localAttrBufPtr.p->attrbuf[ZBUF_NEXT];
localAttrBufPtr.p->attrbuf[ZBUF_NEXT] = cfirstfreeAttrbufrec;
@@ -62,7 +60,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
*/
void Dbtup::execTUP_ABORTREQ(Signal* signal)
{
- ljamEntry();
+ jamEntry();
do_tup_abortreq(signal, 0);
}
@@ -80,7 +78,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
(trans_state == TRANS_ERROR_WAIT_TUPKEYREQ) ||
(trans_state == TRANS_IDLE));
if (regOperPtr.p->op_struct.op_type == ZREAD) {
- ljam();
+ jam();
freeAllAttrBuffers(regOperPtr.p);
initOpConnection(regOperPtr.p);
return;
@@ -94,7 +92,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
if (get_tuple_state(regOperPtr.p) == TUPLE_PREPARED)
{
- ljam();
+ jam();
if (!regTabPtr.p->tuxCustomTriggers.isEmpty() &&
(flags & ZSKIP_TUX_TRIGGERS) == 0)
executeTuxAbortTriggers(signal,
@@ -105,12 +103,12 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
OperationrecPtr loopOpPtr;
loopOpPtr.i = regOperPtr.p->nextActiveOp;
while (loopOpPtr.i != RNIL) {
- ljam();
+ jam();
c_operation_pool.getPtr(loopOpPtr);
if (get_tuple_state(loopOpPtr.p) != TUPLE_ALREADY_ABORTED &&
!regTabPtr.p->tuxCustomTriggers.isEmpty() &&
(flags & ZSKIP_TUX_TRIGGERS) == 0) {
- ljam();
+ jam();
executeTuxAbortTriggers(signal,
loopOpPtr.p,
regFragPtr.p,
@@ -211,116 +209,116 @@ int Dbtup::TUPKEY_abort(Signal* signal, int error_type)
case 1:
//tmupdate_alloc_error:
terrorCode= ZMEM_NOMEM_ERROR;
- ljam();
+ jam();
break;
case 15:
- ljam();
+ jam();
terrorCode = ZREGISTER_INIT_ERROR;
break;
case 16:
- ljam();
+ jam();
terrorCode = ZTRY_TO_UPDATE_ERROR;
break;
case 17:
- ljam();
+ jam();
terrorCode = ZNO_ILLEGAL_NULL_ATTR;
break;
case 19:
- ljam();
+ jam();
terrorCode = ZTRY_TO_UPDATE_ERROR;
break;
case 20:
- ljam();
+ jam();
terrorCode = ZREGISTER_INIT_ERROR;
break;
case 22:
- ljam();
+ jam();
terrorCode = ZTOTAL_LEN_ERROR;
break;
case 23:
- ljam();
+ jam();
terrorCode = ZREGISTER_INIT_ERROR;
break;
case 24:
- ljam();
+ jam();
terrorCode = ZREGISTER_INIT_ERROR;
break;
case 26:
- ljam();
+ jam();
terrorCode = ZREGISTER_INIT_ERROR;
break;
case 27:
- ljam();
+ jam();
terrorCode = ZREGISTER_INIT_ERROR;
break;
case 28:
- ljam();
+ jam();
terrorCode = ZREGISTER_INIT_ERROR;
break;
case 29:
- ljam();
+ jam();
break;
case 30:
- ljam();
+ jam();
terrorCode = ZCALL_ERROR;
break;
case 31:
- ljam();
+ jam();
terrorCode = ZSTACK_OVERFLOW_ERROR;
break;
case 32:
- ljam();
+ jam();
terrorCode = ZSTACK_UNDERFLOW_ERROR;
break;
case 33:
- ljam();
+ jam();
terrorCode = ZNO_INSTRUCTION_ERROR;
break;
case 34:
- ljam();
+ jam();
terrorCode = ZOUTSIDE_OF_PROGRAM_ERROR;
break;
case 35:
- ljam();
+ jam();
terrorCode = ZTOO_MANY_INSTRUCTIONS_ERROR;
break;
case 38:
- ljam();
+ jam();
terrorCode = ZTEMPORARY_RESOURCE_FAILURE;
break;
case 39:
if (get_trans_state(operPtr.p) == TRANS_TOO_MUCH_AI) {
- ljam();
+ jam();
terrorCode = ZTOO_MUCH_ATTRINFO_ERROR;
} else if (get_trans_state(operPtr.p) == TRANS_ERROR_WAIT_TUPKEYREQ) {
- ljam();
+ jam();
terrorCode = ZSEIZE_ATTRINBUFREC_ERROR;
} else {
ndbrequire(false);
}//if
break;
case 40:
- ljam();
+ jam();
terrorCode = ZUNSUPPORTED_BRANCH;
break;
default:
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
index 60c0c22ae6c..adac4d3d460 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
@@ -14,28 +14,26 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_BUFFER_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <pc.hpp>
#include <signaldata/TransIdAI.hpp>
-#define ljam() { jamLine(2000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(2000 + __LINE__); }
-
void Dbtup::execSEND_PACKED(Signal* signal)
{
Uint16 hostId;
Uint32 i;
Uint32 TpackedListIndex= cpackedListIndex;
- ljamEntry();
+ jamEntry();
for (i= 0; i < TpackedListIndex; i++) {
- ljam();
+ jam();
hostId= cpackedList[i];
ndbrequire((hostId - 1) < (MAX_NODES - 1)); // Also check not zero
Uint32 TpacketTA= hostBuffer[hostId].noOfPacketsTA;
if (TpacketTA != 0) {
- ljam();
+ jam();
BlockReference TBref= numberToRef(API_PACKED, hostId);
Uint32 TpacketLen= hostBuffer[hostId].packetLenTA;
MEMCOPY_NO_WORDS(&signal->theData[0],
@@ -73,7 +71,7 @@ void Dbtup::bufferTRANSID_AI(Signal* signal, BlockReference aRef,
// There is still space in the buffer. We will copy it into the
// buffer.
// ----------------------------------------------------------------
- ljam();
+ jam();
updatePackedList(signal, hostId);
} else if (false && TnoOfPackets == 1) {
// ----------------------------------------------------------------
@@ -118,7 +116,7 @@ void Dbtup::updatePackedList(Signal* signal, Uint16 hostId)
{
if (hostBuffer[hostId].inPackedList == false) {
Uint32 TpackedListIndex= cpackedListIndex;
- ljam();
+ jam();
hostBuffer[hostId].inPackedList= true;
cpackedList[TpackedListIndex]= hostId;
cpackedListIndex= TpackedListIndex + 1;
@@ -149,7 +147,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
if (ERROR_INSERTED(4006) && (nodeId != getOwnNodeId())){
// Use error insert to turn routing on
- ljam();
+ jam();
connectedToNode= false;
}
@@ -167,18 +165,18 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
* Own node -> execute direct
*/
if(nodeId != getOwnNodeId()){
- ljam();
+ jam();
/**
* Send long sig
*/
if (ToutBufIndex >= 22 && is_api && !old_dest) {
- ljam();
+ jam();
/**
* Flush buffer so that order is maintained
*/
if (TpacketTA != 0) {
- ljam();
+ jam();
BlockReference TBref = numberToRef(API_PACKED, nodeId);
MEMCOPY_NO_WORDS(&signal->theData[0],
&hostBuffer[nodeId].packetBufferTA[0],
@@ -202,7 +200,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
*/
#ifndef NDB_NO_DROPPED_SIGNAL
if (ToutBufIndex < 22 && is_api){
- ljam();
+ jam();
bufferTRANSID_AI(signal, recBlockref, 3+ToutBufIndex);
return;
}
@@ -214,7 +212,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 * src= signal->theData+25;
if (ToutBufIndex >= 22){
do {
- ljam();
+ jam();
MEMCOPY_NO_WORDS(&signal->theData[3], src, 22);
sendSignal(recBlockref, GSN_TRANSID_AI, signal, 25, JBB);
ToutBufIndex -= 22;
@@ -223,14 +221,14 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
}
if (ToutBufIndex > 0){
- ljam();
+ jam();
MEMCOPY_NO_WORDS(&signal->theData[3], src, ToutBufIndex);
sendSignal(recBlockref, GSN_TRANSID_AI, signal, 3+ToutBufIndex, JBB);
}
return;
}
EXECUTE_DIRECT(block, GSN_TRANSID_AI, signal, 3 + ToutBufIndex);
- ljamEntry();
+ jamEntry();
return;
}
@@ -242,7 +240,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 routeBlockref= req_struct->TC_ref;
if (true){ // TODO is_api && !old_dest){
- ljam();
+ jam();
transIdAI->attrData[0]= recBlockref;
LinearSectionPtr ptr[3];
ptr[0].p= &signal->theData[25];
@@ -260,7 +258,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 sent= 0;
Uint32 maxLen= TransIdAI::DataLength - 1;
while (sent < tot) {
- ljam();
+ jam();
Uint32 dataLen= (tot - sent > maxLen) ? maxLen : tot - sent;
Uint32 sigLen= dataLen + TransIdAI::HeaderLength + 1;
MEMCOPY_NO_WORDS(&transIdAI->attrData,
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
index 91d2ca97744..880c956185f 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_COMMIT_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
@@ -21,16 +22,13 @@
#include <signaldata/TupCommit.hpp>
#include "../dblqh/Dblqh.hpp"
-#define ljam() { jamLine(5000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(5000 + __LINE__); }
-
void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
{
TablerecPtr regTabPtr;
FragrecordPtr regFragPtr;
Uint32 frag_page_id, frag_id;
- ljamEntry();
+ jamEntry();
frag_id= signal->theData[0];
regTabPtr.i= signal->theData[1];
@@ -62,7 +60,7 @@ void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
if (regTabPtr.p->m_attributes[MM].m_no_of_varsize)
{
- ljam();
+ jam();
free_var_rec(regFragPtr.p, regTabPtr.p, &tmp, pagePtr);
} else {
free_fix_rec(regFragPtr.p, regTabPtr.p, &tmp, (Fix_page*)pagePtr.p);
@@ -78,7 +76,7 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
Uint32 gci= signal->theData[1];
c_operation_pool.getPtr(loopOpPtr);
while (loopOpPtr.p->prevActiveOp != RNIL) {
- ljam();
+ jam();
loopOpPtr.i= loopOpPtr.p->prevActiveOp;
c_operation_pool.getPtr(loopOpPtr);
}
@@ -87,11 +85,11 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
signal->theData[0]= loopOpPtr.p->userpointer;
signal->theData[1]= gci;
if (loopOpPtr.p->nextActiveOp == RNIL) {
- ljam();
+ jam();
EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2);
return;
}
- ljam();
+ jam();
EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2);
jamEntry();
loopOpPtr.i= loopOpPtr.p->nextActiveOp;
@@ -114,16 +112,16 @@ void Dbtup::removeActiveOpList(Operationrec* const regOperPtr,
if (regOperPtr->op_struct.in_active_list) {
regOperPtr->op_struct.in_active_list= false;
if (regOperPtr->nextActiveOp != RNIL) {
- ljam();
+ jam();
raoOperPtr.i= regOperPtr->nextActiveOp;
c_operation_pool.getPtr(raoOperPtr);
raoOperPtr.p->prevActiveOp= regOperPtr->prevActiveOp;
} else {
- ljam();
+ jam();
tuple_ptr->m_operation_ptr_i = regOperPtr->prevActiveOp;
}
if (regOperPtr->prevActiveOp != RNIL) {
- ljam();
+ jam();
raoOperPtr.i= regOperPtr->prevActiveOp;
c_operation_pool.getPtr(raoOperPtr);
raoOperPtr.p->nextActiveOp= regOperPtr->nextActiveOp;
@@ -343,7 +341,7 @@ Dbtup::disk_page_commit_callback(Signal* signal,
Uint32 gci;
OperationrecPtr regOperPtr;
- ljamEntry();
+ jamEntry();
c_operation_pool.getPtr(regOperPtr, opPtrI);
c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
@@ -379,7 +377,7 @@ Dbtup::disk_page_log_buffer_callback(Signal* signal,
Uint32 gci;
OperationrecPtr regOperPtr;
- ljamEntry();
+ jamEntry();
c_operation_pool.getPtr(regOperPtr, opPtrI);
c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
@@ -447,7 +445,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
TupCommitReq * const tupCommitReq= (TupCommitReq *)signal->getDataPtr();
regOperPtr.i= tupCommitReq->opPtr;
- ljamEntry();
+ jamEntry();
c_operation_pool.getPtr(regOperPtr);
if(!regOperPtr.p->is_first_operation())
@@ -603,7 +601,7 @@ skip_disk:
* why can't we instead remove "own version" (when approriate ofcourse)
*/
if (!regTabPtr.p->tuxCustomTriggers.isEmpty()) {
- ljam();
+ jam();
OperationrecPtr loopPtr= regOperPtr;
while(loopPtr.i != RNIL)
{
@@ -656,18 +654,18 @@ Dbtup::set_change_mask_info(KeyReqStruct * const req_struct,
{
ChangeMaskState state = get_change_mask_state(regOperPtr);
if (state == USE_SAVED_CHANGE_MASK) {
- ljam();
+ jam();
req_struct->changeMask.setWord(0, regOperPtr->saved_change_mask[0]);
req_struct->changeMask.setWord(1, regOperPtr->saved_change_mask[1]);
} else if (state == RECALCULATE_CHANGE_MASK) {
- ljam();
+ jam();
// Recompute change mask, for now set all bits
req_struct->changeMask.set();
} else if (state == SET_ALL_MASK) {
- ljam();
+ jam();
req_struct->changeMask.set();
} else {
- ljam();
+ jam();
ndbrequire(state == DELETE_CHANGES);
req_struct->changeMask.set();
}
@@ -687,17 +685,17 @@ Dbtup::calculateChangeMask(Page* const pagePtr,
ndbrequire(loopOpPtr.p->op_struct.op_type == ZUPDATE);
ChangeMaskState change_mask= get_change_mask_state(loopOpPtr.p);
if (change_mask == USE_SAVED_CHANGE_MASK) {
- ljam();
+ jam();
saved_word1|= loopOpPtr.p->saved_change_mask[0];
saved_word2|= loopOpPtr.p->saved_change_mask[1];
} else if (change_mask == RECALCULATE_CHANGE_MASK) {
- ljam();
+ jam();
//Recompute change mask, for now set all bits
req_struct->changeMask.set();
return;
} else {
ndbrequire(change_mask == SET_ALL_MASK);
- ljam();
+ jam();
req_struct->changeMask.set();
return;
}
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
index ccb0bdcb537..708b4e0e8d7 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
@@ -15,6 +15,7 @@
#define DBTUP_C
+#define DBTUP_DEBUG_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
@@ -24,9 +25,6 @@
#include <signaldata/EventReport.hpp>
#include <Vector.hpp>
-#define ljam() { jamLine(30000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(30000 + __LINE__); }
-
/* **************************************************************** */
/* ---------------------------------------------------------------- */
/* ------------------------ DEBUG MODULE -------------------------- */
@@ -35,7 +33,7 @@
void Dbtup::execDEBUG_SIG(Signal* signal)
{
PagePtr regPagePtr;
- ljamEntry();
+ jamEntry();
regPagePtr.i = signal->theData[0];
c_page_pool.getPtr(regPagePtr);
}//Dbtup::execDEBUG_SIG()
@@ -248,18 +246,18 @@ void Dbtup::execMEMCHECKREQ(Signal* signal)
PagePtr regPagePtr;
Uint32* data = &signal->theData[0];
- ljamEntry();
+ jamEntry();
BlockReference blockref = signal->theData[0];
Uint32 i;
for (i = 0; i < 25; i++) {
- ljam();
+ jam();
data[i] = 0;
}//for
for (i = 0; i < 16; i++) {
regPagePtr.i = cfreepageList[i];
- ljam();
+ jam();
while (regPagePtr.i != RNIL) {
- ljam();
+ jam();
ptrCheckGuard(regPagePtr, cnoOfPage, cpage);
regPagePtr.i = regPagePtr.p->next_page;
data[0]++;
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
index f865904b413..1c3986afbbd 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_DISK_ALLOC_CPP
#include "Dbtup.hpp"
static bool f_undo_done = true;
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp
index 50500b96134..31903ea8c33 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp
@@ -14,14 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_FIXALLOC_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <pc.hpp>
-#define ljam() { jamLine(6000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(6000 + __LINE__); }
-
//
// Fixed Allocator
// This module is used to allocate and free fixed size tuples from the
@@ -79,7 +77,7 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
/* ---------------------------------------------------------------- */
pagePtr.i = getEmptyPage(regFragPtr);
if (pagePtr.i != RNIL) {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
// We found empty pages on the fragment. Allocate an empty page and
// convert it into a tuple header page and put it in thFreeFirst-list.
@@ -95,14 +93,14 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst);
free_pages.add(pagePtr);
} else {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
/* THERE ARE NO EMPTY PAGES. MEMORY CAN NOT BE ALLOCATED. */
/* ---------------------------------------------------------------- */
return 0;
}
} else {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
/* THIS SHOULD BE THE COMMON PATH THROUGH THE CODE, FREE */
/* COPY PAGE EXISTED. */
@@ -193,7 +191,7 @@ void Dbtup::free_fix_rec(Fragrecord* regFragPtr,
if(free == 1)
{
- ljam();
+ jam();
PagePtr pagePtr = { (Page*)regPagePtr, key->m_page_no };
LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst);
ndbrequire(regPagePtr->page_state == ZTH_MM_FULL);
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
index 67fc5a4ceb0..db3399d795a 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
@@ -15,6 +15,7 @@
#define DBTUP_C
+#define DBTUP_GEN_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
@@ -34,9 +35,6 @@
#define DEBUG(x) { ndbout << "TUP::" << x << endl; }
-#define ljam() { jamLine(24000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(24000 + __LINE__); }
-
void Dbtup::initData()
{
cnoOfAttrbufrec = ZNO_OF_ATTRBUFREC;
@@ -151,21 +149,21 @@ BLOCK_FUNCTIONS(Dbtup)
void Dbtup::execCONTINUEB(Signal* signal)
{
- ljamEntry();
+ jamEntry();
Uint32 actionType = signal->theData[0];
Uint32 dataPtr = signal->theData[1];
switch (actionType) {
case ZINITIALISE_RECORDS:
- ljam();
+ jam();
initialiseRecordsLab(signal, dataPtr,
signal->theData[2], signal->theData[3]);
break;
case ZREL_FRAG:
- ljam();
+ jam();
releaseFragment(signal, dataPtr, signal->theData[2]);
break;
case ZREPORT_MEMORY_USAGE:{
- ljam();
+ jam();
static int c_currentMemUsed = 0;
Uint32 cnt = signal->theData[1];
Uint32 tmp = c_page_pool.getSize();
@@ -200,11 +198,11 @@ void Dbtup::execCONTINUEB(Signal* signal)
return;
}
case ZBUILD_INDEX:
- ljam();
+ jam();
buildIndex(signal, dataPtr);
break;
case ZTUP_SCAN:
- ljam();
+ jam();
{
ScanOpPtr scanPtr;
c_scanOpPool.getPtr(scanPtr, dataPtr);
@@ -213,7 +211,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
return;
case ZFREE_EXTENT:
{
- ljam();
+ jam();
TablerecPtr tabPtr;
tabPtr.i= dataPtr;
@@ -226,7 +224,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
}
case ZUNMAP_PAGES:
{
- ljam();
+ jam();
TablerecPtr tabPtr;
tabPtr.i= dataPtr;
@@ -239,7 +237,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
}
case ZFREE_VAR_PAGES:
{
- ljam();
+ jam();
drop_fragment_free_var_pages(signal);
return;
}
@@ -256,12 +254,12 @@ void Dbtup::execCONTINUEB(Signal* signal)
/* **************************************************************** */
void Dbtup::execSTTOR(Signal* signal)
{
- ljamEntry();
+ jamEntry();
Uint32 startPhase = signal->theData[1];
Uint32 sigKey = signal->theData[6];
switch (startPhase) {
case ZSTARTPHASE1:
- ljam();
+ jam();
CLEAR_ERROR_INSERT_VALUE;
ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0);
ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0);
@@ -269,7 +267,7 @@ void Dbtup::execSTTOR(Signal* signal)
cownref = calcTupBlockRef(0);
break;
default:
- ljam();
+ jam();
break;
}//switch
signal->theData[0] = sigKey;
@@ -292,7 +290,7 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal)
Uint32 senderData = req->senderData;
ndbrequire(req->noOfParameters == 0);
- ljamEntry();
+ jamEntry();
const ndb_mgm_configuration_iterator * p =
m_ctx.m_config.getOwnConfigIterator();
@@ -412,58 +410,58 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
{
switch (switchData) {
case 0:
- ljam();
+ jam();
initializeHostBuffer();
break;
case 1:
- ljam();
+ jam();
initializeOperationrec();
break;
case 2:
- ljam();
+ jam();
initializePage();
break;
case 3:
- ljam();
+ jam();
break;
case 4:
- ljam();
+ jam();
initializeTablerec();
break;
case 5:
- ljam();
+ jam();
break;
case 6:
- ljam();
+ jam();
initializeFragrecord();
break;
case 7:
- ljam();
+ jam();
initializeFragoperrec();
break;
case 8:
- ljam();
+ jam();
initializePageRange();
break;
case 9:
- ljam();
+ jam();
initializeTabDescr();
break;
case 10:
- ljam();
+ jam();
break;
case 11:
- ljam();
+ jam();
break;
case 12:
- ljam();
+ jam();
initializeAttrbufrec();
break;
case 13:
- ljam();
+ jam();
break;
case 14:
- ljam();
+ jam();
{
ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend();
@@ -487,28 +485,28 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
void Dbtup::execNDB_STTOR(Signal* signal)
{
- ljamEntry();
+ jamEntry();
cndbcntrRef = signal->theData[0];
Uint32 ownNodeId = signal->theData[1];
Uint32 startPhase = signal->theData[2];
switch (startPhase) {
case ZSTARTPHASE1:
- ljam();
+ jam();
cownNodeId = ownNodeId;
cownref = calcTupBlockRef(ownNodeId);
break;
case ZSTARTPHASE2:
- ljam();
+ jam();
break;
case ZSTARTPHASE3:
- ljam();
+ jam();
startphase3Lab(signal, ~0, ~0);
break;
case ZSTARTPHASE4:
- ljam();
+ jam();
break;
case ZSTARTPHASE6:
- ljam();
+ jam();
/*****************************************/
/* NOW SET THE DISK WRITE SPEED TO */
/* PAGES PER TICK AFTER SYSTEM */
@@ -519,7 +517,7 @@ void Dbtup::execNDB_STTOR(Signal* signal)
sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 1000, 1);
break;
default:
- ljam();
+ jam();
break;
}//switch
signal->theData[0] = cownref;
@@ -596,7 +594,7 @@ void Dbtup::initializeTablerec()
{
TablerecPtr regTabPtr;
for (regTabPtr.i = 0; regTabPtr.i < cnoOfTablerec; regTabPtr.i++) {
- ljam();
+ jam();
refresh_watch_dog();
ptrAss(regTabPtr, tablerec);
initTab(regTabPtr.p);
@@ -667,12 +665,12 @@ void Dbtup::initializeTabDescr()
void Dbtup::execTUPSEIZEREQ(Signal* signal)
{
OperationrecPtr regOperPtr;
- ljamEntry();
+ jamEntry();
Uint32 userPtr = signal->theData[0];
BlockReference userRef = signal->theData[1];
if (!c_operation_pool.seize(regOperPtr))
{
- ljam();
+ jam();
signal->theData[0] = userPtr;
signal->theData[1] = ZGET_OPREC_ERROR;
sendSignal(userRef, GSN_TUPSEIZEREF, signal, 2, JBB);
@@ -706,7 +704,7 @@ void Dbtup::execTUPSEIZEREQ(Signal* signal)
void Dbtup::execTUPRELEASEREQ(Signal* signal)
{
OperationrecPtr regOperPtr;
- ljamEntry();
+ jamEntry();
regOperPtr.i = signal->theData[0];
c_operation_pool.getPtr(regOperPtr);
set_trans_state(regOperPtr.p, TRANS_DISCONNECTED);
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
index 3f42f0151e6..e4a26f8ccd0 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_INDEX_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
@@ -23,9 +24,6 @@
#include <AttributeHeader.hpp>
#include <signaldata/TuxMaint.hpp>
-#define ljam() { jamLine(28000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(28000 + __LINE__); }
-
// methods used by ordered index
void
@@ -34,7 +32,7 @@ Dbtup::tuxGetTupAddr(Uint32 fragPtrI,
Uint32 pageIndex,
Uint32& tupAddr)
{
- ljamEntry();
+ jamEntry();
PagePtr pagePtr;
c_page_pool.getPtr(pagePtr, pageId);
Uint32 fragPageId= pagePtr.p->frag_page_id;
@@ -48,7 +46,7 @@ Dbtup::tuxAllocNode(Signal* signal,
Uint32& pageOffset,
Uint32*& node)
{
- ljamEntry();
+ jamEntry();
FragrecordPtr fragPtr;
fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
@@ -61,7 +59,7 @@ Dbtup::tuxAllocNode(Signal* signal,
Uint32* ptr, frag_page_id;
if ((ptr= alloc_fix_rec(fragPtr.p, tablePtr.p, &key, &frag_page_id)) == 0)
{
- ljam();
+ jam();
terrorCode = ZMEM_NOMEM_ERROR; // caller sets error
return terrorCode;
}
@@ -82,7 +80,7 @@ Dbtup::tuxFreeNode(Signal* signal,
Uint32 pageOffset,
Uint32* node)
{
- ljamEntry();
+ jamEntry();
FragrecordPtr fragPtr;
fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
@@ -105,7 +103,7 @@ Dbtup::tuxGetNode(Uint32 fragPtrI,
Uint32 pageOffset,
Uint32*& node)
{
- ljamEntry();
+ jamEntry();
FragrecordPtr fragPtr;
fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
@@ -130,7 +128,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
Uint32 numAttrs,
Uint32* dataOut)
{
- ljamEntry();
+ jamEntry();
// use own variables instead of globals
FragrecordPtr fragPtr;
fragPtr.i= fragPtrI;
@@ -150,21 +148,21 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
Tuple_header *tuple_ptr= req_struct.m_tuple_ptr;
if (tuple_ptr->get_tuple_version() != tupVersion)
{
- ljam();
+ jam();
OperationrecPtr opPtr;
opPtr.i= tuple_ptr->m_operation_ptr_i;
Uint32 loopGuard= 0;
while (opPtr.i != RNIL) {
c_operation_pool.getPtr(opPtr);
if (opPtr.p->tupVersion == tupVersion) {
- ljam();
+ jam();
if (!opPtr.p->m_copy_tuple_location.isNull()) {
req_struct.m_tuple_ptr= (Tuple_header*)
c_undo_buffer.get_ptr(&opPtr.p->m_copy_tuple_location);
}
break;
}
- ljam();
+ jam();
opPtr.i= opPtr.p->prevActiveOp;
ndbrequire(++loopGuard < (1 << ZTUP_VERSION_BITS));
}
@@ -202,7 +200,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
int
Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag)
{
- ljamEntry();
+ jamEntry();
// use own variables instead of globals
FragrecordPtr fragPtr;
fragPtr.i= fragPtrI;
@@ -305,7 +303,7 @@ Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataO
int
Dbtup::accReadPk(Uint32 tableId, Uint32 fragId, Uint32 fragPageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag)
{
- ljamEntry();
+ jamEntry();
// get table
TablerecPtr tablePtr;
tablePtr.i = tableId;
@@ -329,7 +327,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
Uint32 transId2,
Uint32 savePointId)
{
- ljamEntry();
+ jamEntry();
FragrecordPtr fragPtr;
fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
@@ -358,9 +356,9 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
* for this transaction and savepoint id. If its tuple version
* equals the requested then we have a visible tuple otherwise not.
*/
- ljam();
+ jam();
if (req_struct.m_tuple_ptr->get_tuple_version() == tupVersion) {
- ljam();
+ jam();
return true;
}
}
@@ -378,7 +376,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
void
Dbtup::execBUILDINDXREQ(Signal* signal)
{
- ljamEntry();
+ jamEntry();
#ifdef TIME_MEASUREMENT
time_events= 0;
tot_time_passed= 0;
@@ -387,7 +385,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
// get new operation
BuildIndexPtr buildPtr;
if (! c_buildIndexList.seize(buildPtr)) {
- ljam();
+ jam();
BuildIndexRec buildRec;
memcpy(buildRec.m_request, signal->theData, sizeof(buildRec.m_request));
buildRec.m_errorCode= BuildIndxRef::Busy;
@@ -402,7 +400,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
do {
const BuildIndxReq* buildReq= (const BuildIndxReq*)buildPtr.p->m_request;
if (buildReq->getTableId() >= cnoOfTablerec) {
- ljam();
+ jam();
buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable;
break;
}
@@ -410,7 +408,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
tablePtr.i= buildReq->getTableId();
ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
if (tablePtr.p->tableStatus != DEFINED) {
- ljam();
+ jam();
buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable;
break;
}
@@ -418,7 +416,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
buildPtr.p->m_build_vs =
tablePtr.p->m_attributes[MM].m_no_of_varsize > 0;
if (DictTabInfo::isOrderedIndex(buildReq->getIndexType())) {
- ljam();
+ jam();
const DLList<TupTriggerData>& triggerList =
tablePtr.p->tuxCustomTriggers;
@@ -426,13 +424,13 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
triggerList.first(triggerPtr);
while (triggerPtr.i != RNIL) {
if (triggerPtr.p->indexId == buildReq->getIndexId()) {
- ljam();
+ jam();
break;
}
triggerList.next(triggerPtr);
}
if (triggerPtr.i == RNIL) {
- ljam();
+ jam();
// trigger was not created
buildPtr.p->m_errorCode = BuildIndxRef::InternalError;
break;
@@ -440,12 +438,12 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
buildPtr.p->m_indexId = buildReq->getIndexId();
buildPtr.p->m_buildRef = DBTUX;
} else if(buildReq->getIndexId() == RNIL) {
- ljam();
+ jam();
// REBUILD of acc
buildPtr.p->m_indexId = RNIL;
buildPtr.p->m_buildRef = DBACC;
} else {
- ljam();
+ jam();
buildPtr.p->m_errorCode = BuildIndxRef::InvalidIndexType;
break;
}
@@ -490,7 +488,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
// get fragment
FragrecordPtr fragPtr;
if (buildPtr.p->m_fragNo == MAX_FRAG_PER_NODE) {
- ljam();
+ jam();
// build ready
buildIndexReply(signal, buildPtr.p);
c_buildIndexList.release(buildPtr);
@@ -499,7 +497,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
ndbrequire(buildPtr.p->m_fragNo < MAX_FRAG_PER_NODE);
fragPtr.i= tablePtr.p->fragrec[buildPtr.p->m_fragNo];
if (fragPtr.i == RNIL) {
- ljam();
+ jam();
buildPtr.p->m_fragNo++;
buildPtr.p->m_pageId= 0;
buildPtr.p->m_tupleNo= firstTupleNo;
@@ -509,7 +507,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
// get page
PagePtr pagePtr;
if (buildPtr.p->m_pageId >= fragPtr.p->noOfPages) {
- ljam();
+ jam();
buildPtr.p->m_fragNo++;
buildPtr.p->m_pageId= 0;
buildPtr.p->m_tupleNo= firstTupleNo;
@@ -520,7 +518,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
Uint32 pageState= pagePtr.p->page_state;
// skip empty page
if (pageState == ZEMPTY_MM) {
- ljam();
+ jam();
buildPtr.p->m_pageId++;
buildPtr.p->m_tupleNo= firstTupleNo;
break;
@@ -530,7 +528,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
const Tuple_header* tuple_ptr = 0;
pageIndex = buildPtr.p->m_tupleNo * tupheadsize;
if (pageIndex + tupheadsize > Fix_page::DATA_WORDS) {
- ljam();
+ jam();
buildPtr.p->m_pageId++;
buildPtr.p->m_tupleNo= firstTupleNo;
break;
@@ -538,7 +536,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
tuple_ptr = (Tuple_header*)&pagePtr.p->m_data[pageIndex];
// skip over free tuple
if (tuple_ptr->m_header_bits & Tuple_header::FREE) {
- ljam();
+ jam();
buildPtr.p->m_tupleNo++;
break;
}
@@ -581,7 +579,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
tuple as a copy tuple. The original tuple is stable and is thus
preferrable to store in TUX.
*/
- ljam();
+ jam();
/**
* Since copy tuples now can't be found on real pages.
@@ -610,11 +608,11 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
} while(req->errorCode == 0 && pageOperPtr.i != RNIL);
}
- ljamEntry();
+ jamEntry();
if (req->errorCode != 0) {
switch (req->errorCode) {
case TuxMaintReq::NoMemError:
- ljam();
+ jam();
buildPtr.p->m_errorCode= BuildIndxRef::AllocationFailure;
break;
default:
@@ -666,7 +664,7 @@ Dbtup::buildIndexReply(Signal* signal, const BuildIndexRec* buildPtrP)
rep->setIndexId(buildReq->getIndexId());
// conf
if (buildPtrP->m_errorCode == BuildIndxRef::NoError) {
- ljam();
+ jam();
sendSignal(rep->getUserRef(), GSN_BUILDINDXCONF,
signal, BuildIndxConf::SignalLength, JBB);
return;
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
index e51638b8a20..cb3ec632362 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
@@ -15,6 +15,7 @@
#define DBTUP_C
+#define DBTUP_META_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
@@ -29,16 +30,13 @@
#include "AttributeOffset.hpp"
#include <my_sys.h>
-#define ljam() { jamLine(20000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(20000 + __LINE__); }
-
void Dbtup::execTUPFRAGREQ(Signal* signal)
{
- ljamEntry();
+ jamEntry();
TupFragReq* tupFragReq = (TupFragReq*)signal->getDataPtr();
if (tupFragReq->userPtr == (Uint32)-1) {
- ljam();
+ jam();
abortAddFragOp(signal);
return;
}
@@ -69,7 +67,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
#ifndef VM_TRACE
// config mismatch - do not crash if release compiled
if (regTabPtr.i >= cnoOfTablerec) {
- ljam();
+ jam();
tupFragReq->userPtr = userptr;
tupFragReq->userRef = 800;
sendSignal(userblockref, GSN_TUPFRAGREF, signal, 2, JBB);
@@ -79,7 +77,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
ptrCheckGuard(regTabPtr, cnoOfTablerec, tablerec);
if (cfirstfreeFragopr == RNIL) {
- ljam();
+ jam();
tupFragReq->userPtr = userptr;
tupFragReq->userRef = ZNOFREE_FRAGOP_ERROR;
sendSignal(userblockref, GSN_TUPFRAGREF, signal, 2, JBB);
@@ -108,29 +106,29 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
getFragmentrec(regFragPtr, fragId, regTabPtr.p);
if (regFragPtr.i != RNIL) {
- ljam();
+ jam();
terrorCode= ZEXIST_FRAG_ERROR;
fragrefuse1Lab(signal, fragOperPtr);
return;
}
if (cfirstfreefrag != RNIL) {
- ljam();
+ jam();
seizeFragrecord(regFragPtr);
} else {
- ljam();
+ jam();
terrorCode= ZFULL_FRAGRECORD_ERROR;
fragrefuse1Lab(signal, fragOperPtr);
return;
}
initFragRange(regFragPtr.p);
if (!addfragtotab(regTabPtr.p, fragId, regFragPtr.i)) {
- ljam();
+ jam();
terrorCode= ZNO_FREE_TAB_ENTRY_ERROR;
fragrefuse2Lab(signal, fragOperPtr, regFragPtr);
return;
}
if (cfirstfreerange == RNIL) {
- ljam();
+ jam();
terrorCode= ZNO_FREE_PAGE_RANGE_ERROR;
fragrefuse3Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
return;
@@ -146,7 +144,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
if (ERROR_INSERTED(4007) && regTabPtr.p->fragid[0] == fragId ||
ERROR_INSERTED(4008) && regTabPtr.p->fragid[1] == fragId) {
- ljam();
+ jam();
terrorCode = 1;
fragrefuse4Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
CLEAR_ERROR_INSERT_VALUE;
@@ -154,7 +152,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
}
if (regTabPtr.p->tableStatus == NOT_DEFINED) {
- ljam();
+ jam();
//-----------------------------------------------------------------------------
// We are setting up references to the header of the tuple.
// Active operation This word contains a reference to the operation active
@@ -200,13 +198,13 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
Uint32 offset[10];
Uint32 tableDescriptorRef= allocTabDescr(regTabPtr.p, offset);
if (tableDescriptorRef == RNIL) {
- ljam();
+ jam();
fragrefuse4Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
return;
}
setUpDescriptorReferences(tableDescriptorRef, regTabPtr.p, offset);
} else {
- ljam();
+ jam();
fragOperPtr.p->definingFragment= false;
}
signal->theData[0]= fragOperPtr.p->lqhPtrFrag;
@@ -222,9 +220,9 @@ bool Dbtup::addfragtotab(Tablerec* const regTabPtr,
Uint32 fragIndex)
{
for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
- ljam();
+ jam();
if (regTabPtr->fragid[i] == RNIL) {
- ljam();
+ jam();
regTabPtr->fragid[i]= fragId;
regTabPtr->fragrec[i]= fragIndex;
return true;
@@ -238,9 +236,9 @@ void Dbtup::getFragmentrec(FragrecordPtr& regFragPtr,
Tablerec* const regTabPtr)
{
for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
- ljam();
+ jam();
if (regTabPtr->fragid[i] == fragId) {
- ljam();
+ jam();
regFragPtr.i= regTabPtr->fragrec[i];
ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord);
return;
@@ -276,7 +274,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
FragoperrecPtr fragOperPtr;
TablerecPtr regTabPtr;
- ljamEntry();
+ jamEntry();
fragOperPtr.i= signal->theData[0];
ptrCheckGuard(fragOperPtr, cnoOfFragoprec, fragoperrec);
Uint32 attrId = signal->theData[2];
@@ -337,7 +335,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
Uint32 attrDes2= 0;
if (!AttributeDescriptor::getDynamic(attrDescriptor)) {
- ljam();
+ jam();
Uint32 pos= 0, null_pos;
Uint32 bytes= AttributeDescriptor::getSizeInBytes(attrDescriptor);
Uint32 words= (bytes + 3) / 4;
@@ -347,7 +345,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
if (AttributeDescriptor::getNullable(attrDescriptor))
{
- ljam();
+ jam();
fragOperPtr.p->m_null_bits[ind]++;
}
else
@@ -362,17 +360,17 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
switch (AttributeDescriptor::getArrayType(attrDescriptor)) {
case NDB_ARRAYTYPE_FIXED:
{
- ljam();
+ jam();
regTabPtr.p->m_attributes[ind].m_no_of_fixsize++;
if(attrLen != 0)
{
- ljam();
+ jam();
pos= fragOperPtr.p->m_fix_attributes_size[ind];
fragOperPtr.p->m_fix_attributes_size[ind] += words;
}
else
{
- ljam();
+ jam();
Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor);
fragOperPtr.p->m_null_bits[ind] += bitCount;
}
@@ -380,7 +378,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
}
default:
{
- ljam();
+ jam();
fragOperPtr.p->m_var_attributes_size[ind] += bytes;
pos= regTabPtr.p->m_attributes[ind].m_no_of_varsize++;
break;
@@ -397,13 +395,13 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
ndbrequire(cs != NULL);
Uint32 i = 0;
while (i < fragOperPtr.p->charsetIndex) {
- ljam();
+ jam();
if (regTabPtr.p->charsetArray[i] == cs)
break;
i++;
}
if (i == fragOperPtr.p->charsetIndex) {
- ljam();
+ jam();
fragOperPtr.p->charsetIndex++;
}
ndbrequire(i < regTabPtr.p->noOfCharsets);
@@ -416,7 +414,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
ERROR_INSERTED(4010) && regTabPtr.p->fragid[0] == fragId && lastAttr ||
ERROR_INSERTED(4011) && regTabPtr.p->fragid[1] == fragId && attrId == 0||
ERROR_INSERTED(4012) && regTabPtr.p->fragid[1] == fragId && lastAttr) {
- ljam();
+ jam();
terrorCode = 1;
addattrrefuseLab(signal, regFragPtr, fragOperPtr, regTabPtr.p, fragId);
CLEAR_ERROR_INSERT_VALUE;
@@ -427,7 +425,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
/* ************** TUP_ADD_ATTCONF ****************** */
/* **************************************************************** */
if (! lastAttr) {
- ljam();
+ jam();
signal->theData[0] = fragOperPtr.p->lqhPtrFrag;
signal->theData[1] = lastAttr;
sendSignal(fragOperPtr.p->lqhBlockrefFrag, GSN_TUP_ADD_ATTCONF,
@@ -553,7 +551,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
noAllocatedPages = allocFragPages(regFragPtr.p, noAllocatedPages);
if (noAllocatedPages == 0) {
- ljam();
+ jam();
terrorCode = ZNO_PAGES_ALLOCATED_ERROR;
addattrrefuseLab(signal, regFragPtr, fragOperPtr, regTabPtr.p, fragId);
return;
@@ -563,7 +561,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
CreateFilegroupImplReq rep;
if(regTabPtr.p->m_no_of_disk_attributes)
{
- ljam();
+ jam();
Tablespace_client tsman(0, c_tsman, 0, 0,
regFragPtr.p->m_tablespace_id);
ndbrequire(tsman.get_tablespace_info(&rep) == 0);
@@ -580,12 +578,12 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
if (regTabPtr.p->m_no_of_disk_attributes)
{
- ljam();
+ jam();
if(!(getNodeState().startLevel == NodeState::SL_STARTING &&
getNodeState().starting.startPhase <= 4))
{
Callback cb;
- ljam();
+ jam();
cb.m_callbackData= fragOperPtr.i;
cb.m_callbackFunction =
@@ -599,7 +597,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
int res= lgman.get_log_buffer(signal, sz, &cb);
switch(res){
case 0:
- ljam();
+ jam();
signal->theData[0] = 1;
return;
case -1:
@@ -718,11 +716,11 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr)
Uint32* keyArray= &tableDescriptor[regTabPtr->readKeyArray].tabDescr;
Uint32 countKeyAttr= 0;
for (Uint32 i= 0; i < regTabPtr->m_no_of_attributes; i++) {
- ljam();
+ jam();
Uint32 refAttr= regTabPtr->tabDescriptor + (i * ZAD_SIZE);
Uint32 attrDescriptor= getTabDescrWord(refAttr);
if (AttributeDescriptor::getPrimaryKey(attrDescriptor)) {
- ljam();
+ jam();
AttributeHeader::init(&keyArray[countKeyAttr], i, 0);
countKeyAttr++;
}
@@ -742,7 +740,7 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr)
{
for (Uint32 i= 0; i < regTabPtr->m_no_of_attributes; i++)
{
- ljam();
+ jam();
Uint32 refAttr= regTabPtr->tabDescriptor + (i * ZAD_SIZE);
Uint32 desc = getTabDescrWord(refAttr);
Uint32 t = 0;
@@ -837,9 +835,9 @@ void Dbtup::releaseFragoperrec(FragoperrecPtr fragOperPtr)
void Dbtup::deleteFragTab(Tablerec* const regTabPtr, Uint32 fragId)
{
for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
- ljam();
+ jam();
if (regTabPtr->fragid[i] == fragId) {
- ljam();
+ jam();
regTabPtr->fragid[i]= RNIL;
regTabPtr->fragrec[i]= RNIL;
return;
@@ -865,7 +863,7 @@ void Dbtup::abortAddFragOp(Signal* signal)
void
Dbtup::execDROP_TAB_REQ(Signal* signal)
{
- ljamEntry();
+ jamEntry();
if (ERROR_INSERTED(4013)) {
#ifdef VM_TRACE
verifytabdes();
@@ -891,7 +889,7 @@ void Dbtup::releaseTabDescr(Tablerec* const regTabPtr)
{
Uint32 descriptor= regTabPtr->readKeyArray;
if (descriptor != RNIL) {
- ljam();
+ jam();
Uint32 offset[10];
getTabDescrOffsets(regTabPtr, offset);
@@ -922,16 +920,16 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
Uint32 fragId = RNIL;
Uint32 i = 0;
for (i = 0; i < MAX_FRAG_PER_NODE; i++) {
- ljam();
+ jam();
if (tabPtr.p->fragid[i] != RNIL) {
- ljam();
+ jam();
fragIndex= tabPtr.p->fragrec[i];
fragId= tabPtr.p->fragid[i];
break;
}
}
if (fragIndex != RNIL) {
- ljam();
+ jam();
signal->theData[0] = ZUNMAP_PAGES;
signal->theData[1] = tabPtr.i;
@@ -956,7 +954,7 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
int res= lgman.get_log_buffer(signal, sz, &cb);
switch(res){
case 0:
- ljam();
+ jam();
return;
case -1:
ndbrequire("NOT YET IMPLEMENTED" == 0);
@@ -1087,7 +1085,7 @@ Dbtup::drop_fragment_free_extent(Signal *signal,
int res= lgman.get_log_buffer(signal, sz, &cb);
switch(res){
case 0:
- ljam();
+ jam();
return;
case -1:
ndbrequire("NOT YET IMPLEMENTED" == 0);
@@ -1238,7 +1236,7 @@ Dbtup::drop_fragment_free_extent_log_buffer_callback(Signal* signal,
void
Dbtup::drop_fragment_free_var_pages(Signal* signal)
{
- ljam();
+ jam();
Uint32 tableId = signal->theData[1];
Uint32 fragPtrI = signal->theData[2];
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
index 73755494207..d10fabf42da 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
@@ -14,14 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_PAG_MAN_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <pc.hpp>
-#define ljam() { jamLine(16000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(16000 + __LINE__); }
-
/* ---------------------------------------------------------------- */
// 4) Page Memory Manager (buddy algorithm)
//
@@ -121,7 +119,7 @@ void Dbtup::initializePage()
}//for
PagePtr pagePtr;
for (pagePtr.i = 0; pagePtr.i < c_page_pool.getSize(); pagePtr.i++) {
- ljam();
+ jam();
refresh_watch_dog();
c_page_pool.getPtr(pagePtr);
pagePtr.p->physical_page_id= RNIL;
@@ -153,16 +151,16 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
Uint32& allocPageRef)
{
if (noOfPagesToAllocate == 0){
- ljam();
+ jam();
noOfPagesAllocated = 0;
return;
}//if
Uint32 firstListToCheck = nextHigherTwoLog(noOfPagesToAllocate - 1);
for (Uint32 i = firstListToCheck; i < 16; i++) {
- ljam();
+ jam();
if (cfreepageList[i] != RNIL) {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
/* PROPER AMOUNT OF PAGES WERE FOUND. NOW SPLIT THE FOUND */
/* AREA AND RETURN THE PART NOT NEEDED. */
@@ -182,11 +180,11 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
/* ---------------------------------------------------------------- */
if (firstListToCheck)
{
- ljam();
+ jam();
for (Uint32 j = firstListToCheck - 1; (Uint32)~j; j--) {
- ljam();
+ jam();
if (cfreepageList[j] != RNIL) {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
/* SOME AREA WAS FOUND, ALLOCATE ALL OF IT. */
/* ---------------------------------------------------------------- */
@@ -212,9 +210,9 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
void Dbtup::returnCommonArea(Uint32 retPageRef, Uint32 retNo)
{
do {
- ljam();
+ jam();
if (retNo == 0) {
- ljam();
+ jam();
return;
}//if
Uint32 list = nextHigherTwoLog(retNo) - 1;
@@ -231,28 +229,28 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
PagePtr pageFirstPtr, pageLastPtr;
Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated;
while (allocPageRef > 0) {
- ljam();
+ jam();
pageLastPtr.i = allocPageRef - 1;
c_page_pool.getPtr(pageLastPtr);
if (pageLastPtr.p->page_state != ZFREE_COMMON) {
- ljam();
+ jam();
return;
} else {
- ljam();
+ jam();
pageFirstPtr.i = pageLastPtr.p->first_cluster_page;
ndbrequire(pageFirstPtr.i != RNIL);
Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i);
removeCommonArea(pageFirstPtr.i, list);
Uint32 listSize = 1 << list;
if (listSize > remainAllocate) {
- ljam();
+ jam();
Uint32 retNo = listSize - remainAllocate;
returnCommonArea(pageFirstPtr.i, retNo);
allocPageRef = pageFirstPtr.i + retNo;
noPagesAllocated = noOfPagesToAllocate;
return;
} else {
- ljam();
+ jam();
allocPageRef = pageFirstPtr.i;
noPagesAllocated += listSize;
remainAllocate -= listSize;
@@ -268,32 +266,32 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
PagePtr pageFirstPtr, pageLastPtr;
Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated;
if (remainAllocate == 0) {
- ljam();
+ jam();
return;
}//if
while ((allocPageRef + noPagesAllocated) < c_page_pool.getSize()) {
- ljam();
+ jam();
pageFirstPtr.i = allocPageRef + noPagesAllocated;
c_page_pool.getPtr(pageFirstPtr);
if (pageFirstPtr.p->page_state != ZFREE_COMMON) {
- ljam();
+ jam();
return;
} else {
- ljam();
+ jam();
pageLastPtr.i = pageFirstPtr.p->last_cluster_page;
ndbrequire(pageLastPtr.i != RNIL);
Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i);
removeCommonArea(pageFirstPtr.i, list);
Uint32 listSize = 1 << list;
if (listSize > remainAllocate) {
- ljam();
+ jam();
Uint32 retPageRef = pageFirstPtr.i + remainAllocate;
Uint32 retNo = listSize - remainAllocate;
returnCommonArea(retPageRef, retNo);
noPagesAllocated += remainAllocate;
return;
} else {
- ljam();
+ jam();
noPagesAllocated += listSize;
remainAllocate -= listSize;
}//if
@@ -328,30 +326,30 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list)
c_page_pool.getPtr(remPagePtr, remPageRef);
ndbrequire(list < 16);
if (cfreepageList[list] == remPagePtr.i) {
- ljam();
+ jam();
cfreepageList[list] = remPagePtr.p->next_cluster_page;
pageNextPtr.i = cfreepageList[list];
if (pageNextPtr.i != RNIL) {
- ljam();
+ jam();
c_page_pool.getPtr(pageNextPtr);
pageNextPtr.p->prev_cluster_page = RNIL;
}//if
} else {
pageSearchPtr.i = cfreepageList[list];
while (true) {
- ljam();
+ jam();
c_page_pool.getPtr(pageSearchPtr);
pagePrevPtr = pageSearchPtr;
pageSearchPtr.i = pageSearchPtr.p->next_cluster_page;
if (pageSearchPtr.i == remPagePtr.i) {
- ljam();
+ jam();
break;
}//if
}//while
pageNextPtr.i = remPagePtr.p->next_cluster_page;
pagePrevPtr.p->next_cluster_page = pageNextPtr.i;
if (pageNextPtr.i != RNIL) {
- ljam();
+ jam();
c_page_pool.getPtr(pageNextPtr);
pageNextPtr.p->prev_cluster_page = pagePrevPtr.i;
}//if
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
index 26373708b66..cbbbc1fa56c 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
@@ -15,14 +15,12 @@
#define DBTUP_C
+#define DBTUP_PAGE_MAP_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <pc.hpp>
-#define ljam() { jamLine(14000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(14000 + __LINE__); }
-
//
// PageMap is a service used by Dbtup to map logical page id's to physical
// page id's. The mapping is needs the fragment and the logical page id to
@@ -92,11 +90,11 @@ Uint32 Dbtup::getEmptyPage(Fragrecord* regFragPtr)
{
Uint32 pageId = regFragPtr->emptyPrimPage.firstItem;
if (pageId == RNIL) {
- ljam();
+ jam();
allocMoreFragPages(regFragPtr);
pageId = regFragPtr->emptyPrimPage.firstItem;
if (pageId == RNIL) {
- ljam();
+ jam();
return RNIL;
}//if
}//if
@@ -122,11 +120,11 @@ Uint32 Dbtup::getRealpid(Fragrecord* regFragPtr, Uint32 logicalPageId)
loopLimit = grpPageRangePtr.p->currentIndexPos;
ndbrequire(loopLimit <= 3);
for (Uint32 i = 0; i <= loopLimit; i++) {
- ljam();
+ jam();
if (grpPageRangePtr.p->startRange[i] <= logicalPageId) {
if (grpPageRangePtr.p->endRange[i] >= logicalPageId) {
if (grpPageRangePtr.p->type[i] == ZLEAF) {
- ljam();
+ jam();
Uint32 realPageId = (logicalPageId - grpPageRangePtr.p->startRange[i]) +
grpPageRangePtr.p->basePageId[i];
return realPageId;
@@ -167,12 +165,12 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
{
PageRangePtr currPageRangePtr;
if (cfirstfreerange == RNIL) {
- ljam();
+ jam();
return false;
}//if
currPageRangePtr.i = regFragPtr->currentPageRange;
if (currPageRangePtr.i == RNIL) {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
/* THE FIRST PAGE RANGE IS HANDLED WITH SPECIAL CODE */
/* ---------------------------------------------------------------- */
@@ -181,10 +179,10 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
currPageRangePtr.p->currentIndexPos = 0;
currPageRangePtr.p->parentPtr = RNIL;
} else {
- ljam();
+ jam();
ptrCheckGuard(currPageRangePtr, cnoOfPageRangeRec, pageRange);
if (currPageRangePtr.p->currentIndexPos < 3) {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
/* THE SIMPLE CASE WHEN IT IS ONLY NECESSARY TO FILL IN THE */
/* NEXT EMPTY POSITION IN THE PAGE RANGE RECORD IS TREATED */
@@ -192,7 +190,7 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
/* ---------------------------------------------------------------- */
currPageRangePtr.p->currentIndexPos++;
} else {
- ljam();
+ jam();
ndbrequire(currPageRangePtr.p->currentIndexPos == 3);
currPageRangePtr.i = leafPageRangeFull(regFragPtr, currPageRangePtr);
if (currPageRangePtr.i == RNIL) {
@@ -223,15 +221,15 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
PageRangePtr loopPageRangePtr;
loopPageRangePtr = currPageRangePtr;
while (true) {
- ljam();
+ jam();
loopPageRangePtr.i = loopPageRangePtr.p->parentPtr;
if (loopPageRangePtr.i != RNIL) {
- ljam();
+ jam();
ptrCheckGuard(loopPageRangePtr, cnoOfPageRangeRec, pageRange);
ndbrequire(loopPageRangePtr.p->currentIndexPos < 4);
loopPageRangePtr.p->endRange[loopPageRangePtr.p->currentIndexPos] += noPages;
} else {
- ljam();
+ jam();
break;
}//if
}//while
@@ -243,26 +241,26 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
void Dbtup::releaseFragPages(Fragrecord* regFragPtr)
{
if (regFragPtr->rootPageRange == RNIL) {
- ljam();
+ jam();
return;
}//if
PageRangePtr regPRPtr;
regPRPtr.i = regFragPtr->rootPageRange;
ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange);
while (true) {
- ljam();
+ jam();
const Uint32 indexPos = regPRPtr.p->currentIndexPos;
ndbrequire(indexPos < 4);
const Uint32 basePageId = regPRPtr.p->basePageId[indexPos];
regPRPtr.p->basePageId[indexPos] = RNIL;
if (basePageId == RNIL) {
- ljam();
+ jam();
/**
* Finished with indexPos continue with next
*/
if (indexPos > 0) {
- ljam();
+ jam();
regPRPtr.p->currentIndexPos--;
continue;
}//if
@@ -274,13 +272,13 @@ void Dbtup::releaseFragPages(Fragrecord* regFragPtr)
releasePagerange(regPRPtr);
if (parentPtr != RNIL) {
- ljam();
+ jam();
regPRPtr.i = parentPtr;
ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange);
continue;
}//if
- ljam();
+ jam();
ndbrequire(regPRPtr.i == regFragPtr->rootPageRange);
initFragRange(regFragPtr);
for (Uint32 i = 0; i<MAX_FREE_LIST; i++)
@@ -364,7 +362,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
Uint32 retPageRef = RNIL;
allocConsPages(noPagesToAllocate, noOfPagesAllocated, retPageRef);
if (noOfPagesAllocated == 0) {
- ljam();
+ jam();
return tafpPagesAllocated;
}//if
/* ---------------------------------------------------------------- */
@@ -373,7 +371,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* ---------------------------------------------------------------- */
Uint32 startRange = regFragPtr->nextStartRange;
if (!insertPageRangeTab(regFragPtr, retPageRef, noOfPagesAllocated)) {
- ljam();
+ jam();
returnCommonArea(retPageRef, noOfPagesAllocated);
return tafpPagesAllocated;
}//if
@@ -388,7 +386,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* ---------------------------------------------------------------- */
Uint32 prev = RNIL;
for (loopPagePtr.i = retPageRef; loopPagePtr.i < loopLimit; loopPagePtr.i++) {
- ljam();
+ jam();
c_page_pool.getPtr(loopPagePtr);
loopPagePtr.p->page_state = ZEMPTY_MM;
loopPagePtr.p->frag_page_id = startRange +
@@ -416,10 +414,10 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* WAS ENOUGH PAGES ALLOCATED OR ARE MORE NEEDED. */
/* ---------------------------------------------------------------- */
if (tafpPagesAllocated < tafpNoAllocRequested) {
- ljam();
+ jam();
} else {
ndbrequire(tafpPagesAllocated == tafpNoAllocRequested);
- ljam();
+ jam();
return tafpNoAllocRequested;
}//if
}//while
@@ -451,15 +449,15 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
parentPageRangePtr = currPageRangePtr;
Uint32 tiprNoLevels = 1;
while (true) {
- ljam();
+ jam();
parentPageRangePtr.i = parentPageRangePtr.p->parentPtr;
if (parentPageRangePtr.i == RNIL) {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
/* WE HAVE REACHED THE ROOT. A NEW ROOT MUST BE ALLOCATED. */
/* ---------------------------------------------------------------- */
if (c_noOfFreePageRanges < tiprNoLevels) {
- ljam();
+ jam();
return RNIL;
}//if
PageRangePtr oldRootPRPtr;
@@ -482,10 +480,10 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
foundPageRangePtr = newRootPRPtr;
break;
} else {
- ljam();
+ jam();
ptrCheckGuard(parentPageRangePtr, cnoOfPageRangeRec, pageRange);
if (parentPageRangePtr.p->currentIndexPos < 3) {
- ljam();
+ jam();
/* ---------------------------------------------------------------- */
/* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */
/* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */
@@ -498,7 +496,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
foundPageRangePtr = parentPageRangePtr;
break;
} else {
- ljam();
+ jam();
ndbrequire(parentPageRangePtr.p->currentIndexPos == 3);
/* ---------------------------------------------------------------- */
/* THE PAGE RANGE RECORD WAS FULL. FIND THE PARENT RECORD */
@@ -516,7 +514,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
PageRangePtr prevPageRangePtr;
prevPageRangePtr = foundPageRangePtr;
if (c_noOfFreePageRanges < tiprNoLevels) {
- ljam();
+ jam();
return RNIL;
}//if
/* ---------------------------------------------------------------- */
@@ -527,7 +525,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
/* ARE ALSO PROPERLY UPDATED ON THE PATH TO THE LEAF LEVEL. */
/* ---------------------------------------------------------------- */
while (true) {
- ljam();
+ jam();
seizePagerange(newPageRangePtr);
tiprNoLevels--;
ndbrequire(prevPageRangePtr.p->currentIndexPos < 4);
@@ -535,13 +533,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
newPageRangePtr.p->parentPtr = prevPageRangePtr.i;
newPageRangePtr.p->currentIndexPos = 0;
if (tiprNoLevels > 0) {
- ljam();
+ jam();
newPageRangePtr.p->startRange[0] = regFragPtr->nextStartRange;
newPageRangePtr.p->endRange[0] = regFragPtr->nextStartRange - 1;
newPageRangePtr.p->type[0] = ZNON_LEAF;
prevPageRangePtr = newPageRangePtr;
} else {
- ljam();
+ jam();
break;
}//if
}//while
@@ -576,16 +574,16 @@ void Dbtup::errorHandler(Uint32 errorCode)
{
switch (errorCode) {
case 0:
- ljam();
+ jam();
break;
case 1:
- ljam();
+ jam();
break;
case 2:
- ljam();
+ jam();
break;
default:
- ljam();
+ jam();
}
ndbrequire(false);
}//Dbtup::errorHandler()
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
index 28f66c5620a..6e932f8a058 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
@@ -15,6 +15,7 @@
#define DBTUP_C
+#define DBTUP_ROUTINES_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
@@ -23,9 +24,6 @@
#include "AttributeOffset.hpp"
#include <AttributeHeader.hpp>
-#define ljam() { jamLine(3000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(3000 + __LINE__); }
-
void
Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
{
@@ -40,23 +38,23 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
if (AttributeDescriptor::getArrayType(attrDescr) == NDB_ARRAYTYPE_FIXED){
if (!AttributeDescriptor::getNullable(attrDescr)) {
if (AttributeDescriptor::getSize(attrDescr) == 0){
- ljam();
+ jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readBitsNotNULL;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateBitsNotNULL;
} else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 4) {
- ljam();
+ jam();
regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHOneWordNotNULL;
regTabPtr->updateFunctionArray[i]=
&Dbtup::updateFixedSizeTHOneWordNotNULL;
} else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 8) {
- ljam();
+ jam();
regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHTwoWordNotNULL;
regTabPtr->updateFunctionArray[i]=
&Dbtup::updateFixedSizeTHTwoWordNotNULL;
} else {
- ljam();
+ jam();
regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHManyWordNotNULL;
regTabPtr->updateFunctionArray[i]=
@@ -64,27 +62,27 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
}
// replace functions for char attribute
if (AttributeOffset::getCharsetFlag(attrOffset)) {
- ljam();
+ jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHManyWordNotNULL;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNotNULL;
}
} else {
if (AttributeDescriptor::getSize(attrDescr) == 0){
- ljam();
+ jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readBitsNULLable;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateBitsNULLable;
} else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 4){
- ljam();
+ jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHOneWordNULLable;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNULLable;
} else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 8) {
- ljam();
+ jam();
regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHTwoWordNULLable;
regTabPtr->updateFunctionArray[i]=
&Dbtup::updateFixedSizeTHManyWordNULLable;
} else {
- ljam();
+ jam();
regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHManyWordNULLable;
regTabPtr->updateFunctionArray[i]=
@@ -92,7 +90,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
}
// replace functions for char attribute
if (AttributeOffset::getCharsetFlag(attrOffset)) {
- ljam();
+ jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHManyWordNULLable;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNULLable;
}
@@ -144,7 +142,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
}
} else {
if (AttributeDescriptor::getArrayType(attrDescr) == NDB_ARRAYTYPE_FIXED){
- ljam();
+ jam();
regTabPtr->readFunctionArray[i]= &Dbtup::readDynFixedSize;
regTabPtr->updateFunctionArray[i]= &Dbtup::updateDynFixedSize;
} else {
@@ -204,7 +202,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct,
inBufIndex++;
attributeId= ahIn.getAttributeId();
descr_index= attributeId << ZAD_LOG_SIZE;
- ljam();
+ jam();
AttributeHeader::init(&outBuffer[tmpAttrBufIndex], attributeId, 0);
ahOut= (AttributeHeader*)&outBuffer[tmpAttrBufIndex];
@@ -223,7 +221,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct,
return -1;
}
} else if(attributeId & AttributeHeader::PSEUDO) {
- ljam();
+ jam();
Uint32 sz= read_pseudo(attributeId,
req_struct,
outBuffer+tmpAttrBufIndex+1);
@@ -252,13 +250,13 @@ Dbtup::readFixedSizeTHOneWordNotNULL(Uint32* outBuffer,
ndbrequire(readOffset < req_struct->check_offset[MM]);
if (newIndexBuf <= maxRead) {
- ljam();
+ jam();
outBuffer[indexBuf]= wordRead;
ahOut->setDataSize(1);
req_struct->out_buf_index= newIndexBuf;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
return false;
}
@@ -280,14 +278,14 @@ Dbtup::readFixedSizeTHTwoWordNotNULL(Uint32* outBuffer,
ndbrequire(readOffset + 1 < req_struct->check_offset[MM]);
if (newIndexBuf <= maxRead) {
- ljam();
+ jam();
ahOut->setDataSize(2);
outBuffer[indexBuf]= wordReadFirst;
outBuffer[indexBuf + 1]= wordReadSecond;
req_struct->out_buf_index= newIndexBuf;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
return false;
}
@@ -311,7 +309,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
if (! charsetFlag || ! req_struct->xfrm_flag) {
Uint32 newIndexBuf = indexBuf + attrNoOfWords;
if (newIndexBuf <= maxRead) {
- ljam();
+ jam();
ahOut->setByteSize(AttributeDescriptor::getSizeInBytes(attrDescriptor));
MEMCOPY_NO_WORDS(&outBuffer[indexBuf],
&tuple_header[readOffset],
@@ -319,11 +317,11 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
req_struct->out_buf_index = newIndexBuf;
return true;
} else {
- ljam();
+ jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
}//if
} else {
- ljam();
+ jam();
Tablerec* regTabPtr = tabptr.p;
Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
uchar* dstPtr = (uchar*)&outBuffer[indexBuf];
@@ -340,7 +338,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
Uint32 dstLen = xmul * (srcBytes - lb);
Uint32 maxIndexBuf = indexBuf + (dstLen >> 2);
if (maxIndexBuf <= maxRead && ok) {
- ljam();
+ jam();
int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
ndbrequire(n != -1);
int m = n;
@@ -353,7 +351,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
req_struct->out_buf_index = newIndexBuf;
return true;
} else {
- ljam();
+ jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
}
}
@@ -367,13 +365,13 @@ Dbtup::readFixedSizeTHOneWordNULLable(Uint32* outBuffer,
Uint32 attrDes2)
{
if (!nullFlagCheck(req_struct, attrDes2)) {
- ljam();
+ jam();
return readFixedSizeTHOneWordNotNULL(outBuffer,
req_struct,
ahOut,
attrDes2);
} else {
- ljam();
+ jam();
ahOut->setNULL();
return true;
}
@@ -386,13 +384,13 @@ Dbtup::readFixedSizeTHTwoWordNULLable(Uint32* outBuffer,
Uint32 attrDes2)
{
if (!nullFlagCheck(req_struct, attrDes2)) {
- ljam();
+ jam();
return readFixedSizeTHTwoWordNotNULL(outBuffer,
req_struct,
ahOut,
attrDes2);
} else {
- ljam();
+ jam();
ahOut->setNULL();
return true;
}
@@ -405,13 +403,13 @@ Dbtup::readFixedSizeTHManyWordNULLable(Uint32* outBuffer,
Uint32 attrDes2)
{
if (!nullFlagCheck(req_struct, attrDes2)) {
- ljam();
+ jam();
return readFixedSizeTHManyWordNotNULL(outBuffer,
req_struct,
ahOut,
attrDes2);
} else {
- ljam();
+ jam();
ahOut->setNULL();
return true;
}
@@ -423,9 +421,9 @@ Dbtup::readFixedSizeTHZeroWordNULLable(Uint32* outBuffer,
AttributeHeader* ahOut,
Uint32 attrDes2)
{
- ljam();
+ jam();
if (nullFlagCheck(req_struct, attrDes2)) {
- ljam();
+ jam();
ahOut->setNULL();
}
return true;
@@ -477,7 +475,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
if (! charsetFlag || ! req_struct->xfrm_flag)
{
if (new_index <= max_read) {
- ljam();
+ jam();
ah_out->setByteSize(vsize_in_bytes);
out_buffer[index_buf + (vsize_in_bytes >> 2)] = 0;
memcpy(out_buffer+index_buf,
@@ -489,7 +487,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
}
else
{
- ljam();
+ jam();
Tablerec* regTabPtr = tabptr.p;
Uint32 maxBytes = AttributeDescriptor::getSizeInBytes(attr_descriptor);
Uint32 srcBytes = vsize_in_bytes;
@@ -508,7 +506,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
Uint32 dstLen = xmul * (maxBytes - lb);
Uint32 maxIndexBuf = index_buf + (dstLen >> 2);
if (maxIndexBuf <= max_read && ok) {
- ljam();
+ jam();
int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
ndbrequire(n != -1);
int m = n;
@@ -522,7 +520,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
return true;
}
}
- ljam();
+ jam();
terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
return false;
}
@@ -534,13 +532,13 @@ Dbtup::readVarSizeNULLable(Uint32* outBuffer,
Uint32 attrDes2)
{
if (!nullFlagCheck(req_struct, attrDes2)) {
- ljam();
+ jam();
return readVarSizeNotNULL(outBuffer,
req_struct,
ahOut,
attrDes2);
} else {
- ljam();
+ jam();
ahOut->setNULL();
return true;
}
@@ -552,7 +550,7 @@ Dbtup::readDynFixedSize(Uint32* outBuffer,
AttributeHeader* ahOut,
Uint32 attrDes2)
{
- ljam();
+ jam();
terrorCode= ZVAR_SIZED_NOT_SUPPORTED;
return false;
}
@@ -563,7 +561,7 @@ Dbtup::readDynVarSize(Uint32* outBuffer,
AttributeHeader* ahOut,
Uint32 attrDes2)
{
- ljam();
+ jam();
terrorCode= ZVAR_SIZED_NOT_SUPPORTED;
return false;
}//Dbtup::readDynBigVarSize()
@@ -586,7 +584,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
if (! charsetFlag || ! req_struct->xfrm_flag) {
Uint32 newIndexBuf = indexBuf + attrNoOfWords;
if (newIndexBuf <= maxRead) {
- ljam();
+ jam();
ahOut->setByteSize(AttributeDescriptor::getSizeInBytes(attrDescriptor));
MEMCOPY_NO_WORDS(&outBuffer[indexBuf],
&tuple_header[readOffset],
@@ -594,11 +592,11 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
req_struct->out_buf_index = newIndexBuf;
return true;
} else {
- ljam();
+ jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
}//if
} else {
- ljam();
+ jam();
Tablerec* regTabPtr = tabptr.p;
Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
uchar* dstPtr = (uchar*)&outBuffer[indexBuf];
@@ -615,7 +613,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
Uint32 dstLen = xmul * (srcBytes - lb);
Uint32 maxIndexBuf = indexBuf + (dstLen >> 2);
if (maxIndexBuf <= maxRead && ok) {
- ljam();
+ jam();
int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
ndbrequire(n != -1);
int m = n;
@@ -628,7 +626,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
req_struct->out_buf_index = newIndexBuf;
return true;
} else {
- ljam();
+ jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
}
}
@@ -642,13 +640,13 @@ Dbtup::readDiskFixedSizeNULLable(Uint32* outBuffer,
Uint32 attrDes2)
{
if (!disk_nullFlagCheck(req_struct, attrDes2)) {
- ljam();
+ jam();
return readDiskFixedSizeNotNULL(outBuffer,
req_struct,
ahOut,
attrDes2);
} else {
- ljam();
+ jam();
ahOut->setNULL();
return true;
}
@@ -677,7 +675,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer,
ndbrequire(vsize_in_words <= max_var_size);
if (new_index <= max_read) {
- ljam();
+ jam();
ah_out->setByteSize(vsize_in_bytes);
memcpy(out_buffer+index_buf,
req_struct->m_var_data[DD].m_data_ptr+var_attr_pos,
@@ -685,7 +683,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer,
req_struct->out_buf_index= new_index;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
return false;
}
@@ -698,13 +696,13 @@ Dbtup::readDiskVarSizeNULLable(Uint32* outBuffer,
Uint32 attrDes2)
{
if (!disk_nullFlagCheck(req_struct, attrDes2)) {
- ljam();
+ jam();
return readDiskVarSizeNotNULL(outBuffer,
req_struct,
ahOut,
attrDes2);
} else {
- ljam();
+ jam();
ahOut->setNULL();
return true;
}
@@ -746,13 +744,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
if (checkUpdateOfPrimaryKey(req_struct,
&inBuffer[inBufIndex],
regTabPtr)) {
- ljam();
+ jam();
terrorCode= ZTRY_UPDATE_PRIMARY_KEY;
return -1;
}
}
UpdateFunction f= regTabPtr->updateFunctionArray[attributeId];
- ljam();
+ jam();
req_struct->attr_descriptor= attrDescriptor;
req_struct->changeMask.set(attributeId);
if (attributeId >= 64) {
@@ -768,13 +766,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
inBufIndex= req_struct->in_buf_index;
continue;
} else {
- ljam();
+ jam();
return -1;
}
}
else if(attributeId == AttributeHeader::DISK_REF)
{
- ljam();
+ jam();
Uint32 sz= ahIn.getDataSize();
ndbrequire(sz == 2);
req_struct->m_tuple_ptr->m_header_bits |= Tuple_header::DISK_PART;
@@ -785,7 +783,7 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
}
else
{
- ljam();
+ jam();
terrorCode= ZATTRIBUTE_ID_ERROR;
return -1;
}
@@ -839,13 +837,13 @@ Dbtup::checkUpdateOfPrimaryKey(KeyReqStruct* req_struct,
ndbrequire(req_struct->out_buf_index == ahOut->getDataSize());
if (ahIn.getDataSize() != ahOut->getDataSize()) {
- ljam();
+ jam();
return true;
}
if (memcmp(&keyReadBuffer[0],
&updateBuffer[1],
req_struct->out_buf_index << 2) != 0) {
- ljam();
+ jam();
return true;
}
return false;
@@ -868,17 +866,17 @@ Dbtup::updateFixedSizeTHOneWordNotNULL(Uint32* inBuffer,
if (newIndex <= inBufLen) {
Uint32 updateWord= inBuffer[indexBuf + 1];
if (!nullIndicator) {
- ljam();
+ jam();
req_struct->in_buf_index= newIndex;
tuple_header[updateOffset]= updateWord;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZNOT_NULL_ATTR;
return false;
}
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -903,18 +901,18 @@ Dbtup::updateFixedSizeTHTwoWordNotNULL(Uint32* inBuffer,
Uint32 updateWord1= inBuffer[indexBuf + 1];
Uint32 updateWord2= inBuffer[indexBuf + 2];
if (!nullIndicator) {
- ljam();
+ jam();
req_struct->in_buf_index= newIndex;
tuple_header[updateOffset]= updateWord1;
tuple_header[updateOffset + 1]= updateWord2;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZNOT_NULL_ATTR;
return false;
}
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -940,9 +938,9 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
if (newIndex <= inBufLen) {
if (!nullIndicator) {
- ljam();
+ jam();
if (charsetFlag) {
- ljam();
+ jam();
Tablerec* regTabPtr = tabptr.p;
Uint32 typeId = AttributeDescriptor::getType(attrDescriptor);
Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
@@ -954,14 +952,14 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
const char* ssrc = (const char*)&inBuffer[indexBuf + 1];
Uint32 lb, len;
if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) {
- ljam();
+ jam();
terrorCode = ZINVALID_CHAR_FORMAT;
return false;
}
// fast fix bug#7340
if (typeId != NDB_TYPE_TEXT &&
(*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, &not_used) != len) {
- ljam();
+ jam();
terrorCode = ZINVALID_CHAR_FORMAT;
return false;
}
@@ -973,12 +971,12 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
return true;
} else {
- ljam();
+ jam();
terrorCode= ZNOT_NULL_ATTR;
return false;
}
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -996,7 +994,7 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer,
Uint32 *bits= req_struct->m_tuple_ptr->get_null_bits(regTabPtr);
if (!nullIndicator) {
- ljam();
+ jam();
BitmaskImpl::clear(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
return updateFixedSizeTHManyWordNotNULL(inBuffer,
req_struct,
@@ -1005,11 +1003,11 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer,
Uint32 newIndex= req_struct->in_buf_index + 1;
if (newIndex <= req_struct->in_buf_len) {
BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
- ljam();
+ jam();
req_struct->in_buf_index= newIndex;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -1043,7 +1041,7 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer,
if (new_index <= in_buf_len && vsize_in_words <= max_var_size) {
if (!null_ind) {
- ljam();
+ jam();
var_attr_pos= vpos_array[var_index];
var_data_start= req_struct->m_var_data[MM].m_data_ptr;
vpos_array[var_index+idx]= var_attr_pos+size_in_bytes;
@@ -1054,12 +1052,12 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer,
size_in_bytes);
return true;
} else {
- ljam();
+ jam();
terrorCode= ZNOT_NULL_ATTR;
return false;
}
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -1079,7 +1077,7 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer,
Uint32 idx= req_struct->m_var_data[MM].m_var_len_offset;
if (!nullIndicator) {
- ljam();
+ jam();
BitmaskImpl::clear(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
return updateVarSizeNotNULL(inBuffer,
req_struct,
@@ -1089,13 +1087,13 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer,
Uint32 var_index= AttributeOffset::getOffset(attrDes2);
Uint32 var_pos= req_struct->var_pos_array[var_index];
if (newIndex <= req_struct->in_buf_len) {
- ljam();
+ jam();
BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
req_struct->var_pos_array[var_index+idx]= var_pos;
req_struct->in_buf_index= newIndex;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -1107,7 +1105,7 @@ Dbtup::updateDynFixedSize(Uint32* inBuffer,
KeyReqStruct *req_struct,
Uint32 attrDes2)
{
- ljam();
+ jam();
terrorCode= ZVAR_SIZED_NOT_SUPPORTED;
return false;
}
@@ -1117,7 +1115,7 @@ Dbtup::updateDynVarSize(Uint32* inBuffer,
KeyReqStruct *req_struct,
Uint32 attrDes2)
{
- ljam();
+ jam();
terrorCode= ZVAR_SIZED_NOT_SUPPORTED;
return false;
}
@@ -1215,7 +1213,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer,
Uint32 maxRead = req_struct->max_read;
Uint32 *bits= req_struct->m_tuple_ptr->get_null_bits(regTabPtr);
if (newIndexBuf <= maxRead) {
- ljam();
+ jam();
ahOut->setDataSize((bitCount + 31) >> 5);
req_struct->out_buf_index = newIndexBuf;
@@ -1224,7 +1222,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer,
return true;
} else {
- ljam();
+ jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
return false;
}//if
@@ -1248,20 +1246,20 @@ Dbtup::readBitsNULLable(Uint32* outBuffer,
if(BitmaskImpl::get(regTabPtr->m_offsets[MM].m_null_words, bits, pos))
{
- ljam();
+ jam();
ahOut->setNULL();
return true;
}
if (newIndexBuf <= maxRead) {
- ljam();
+ jam();
ahOut->setDataSize((bitCount + 31) >> 5);
req_struct->out_buf_index = newIndexBuf;
BitmaskImpl::getField(regTabPtr->m_offsets[MM].m_null_words, bits, pos+1,
bitCount, outBuffer+indexBuf);
return true;
} else {
- ljam();
+ jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
return false;
}//if
@@ -1290,12 +1288,12 @@ Dbtup::updateBitsNotNULL(Uint32* inBuffer,
req_struct->in_buf_index = newIndex;
return true;
} else {
- ljam();
+ jam();
terrorCode = ZNOT_NULL_ATTR;
return false;
}//if
} else {
- ljam();
+ jam();
terrorCode = ZAI_INCONSISTENCY_ERROR;
return false;
}//if
@@ -1328,13 +1326,13 @@ Dbtup::updateBitsNULLable(Uint32* inBuffer,
Uint32 newIndex = indexBuf + 1;
if (newIndex <= req_struct->in_buf_len)
{
- ljam();
+ jam();
BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
req_struct->in_buf_index = newIndex;
return true;
} else {
- ljam();
+ jam();
terrorCode = ZAI_INCONSISTENCY_ERROR;
return false;
}//if
@@ -1361,9 +1359,9 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
if (newIndex <= inBufLen) {
if (!nullIndicator) {
- ljam();
+ jam();
if (charsetFlag) {
- ljam();
+ jam();
Tablerec* regTabPtr = tabptr.p;
Uint32 typeId = AttributeDescriptor::getType(attrDescriptor);
Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
@@ -1375,14 +1373,14 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
const char* ssrc = (const char*)&inBuffer[indexBuf + 1];
Uint32 lb, len;
if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) {
- ljam();
+ jam();
terrorCode = ZINVALID_CHAR_FORMAT;
return false;
}
// fast fix bug#7340
if (typeId != NDB_TYPE_TEXT &&
(*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, &not_used) != len) {
- ljam();
+ jam();
terrorCode = ZINVALID_CHAR_FORMAT;
return false;
}
@@ -1393,12 +1391,12 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
noOfWords);
return true;
} else {
- ljam();
+ jam();
terrorCode= ZNOT_NULL_ATTR;
return false;
}
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -1416,7 +1414,7 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer,
Uint32 *bits= req_struct->m_disk_ptr->get_null_bits(regTabPtr, DD);
if (!nullIndicator) {
- ljam();
+ jam();
BitmaskImpl::clear(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
return updateDiskFixedSizeNotNULL(inBuffer,
req_struct,
@@ -1425,11 +1423,11 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer,
Uint32 newIndex= req_struct->in_buf_index + 1;
if (newIndex <= req_struct->in_buf_len) {
BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
- ljam();
+ jam();
req_struct->in_buf_index= newIndex;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -1463,7 +1461,7 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer,
if (new_index <= in_buf_len && vsize_in_words <= max_var_size) {
if (!null_ind) {
- ljam();
+ jam();
var_attr_pos= vpos_array[var_index];
var_data_start= req_struct->m_var_data[DD].m_data_ptr;
vpos_array[var_index+idx]= var_attr_pos+size_in_bytes;
@@ -1474,12 +1472,12 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer,
size_in_bytes);
return true;
} else {
- ljam();
+ jam();
terrorCode= ZNOT_NULL_ATTR;
return false;
}
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -1499,7 +1497,7 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer,
Uint32 idx= req_struct->m_var_data[DD].m_var_len_offset;
if (!nullIndicator) {
- ljam();
+ jam();
BitmaskImpl::clear(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
return updateDiskVarSizeNotNULL(inBuffer,
req_struct,
@@ -1509,13 +1507,13 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer,
Uint32 var_index= AttributeOffset::getOffset(attrDes2);
Uint32 var_pos= req_struct->var_pos_array[var_index];
if (newIndex <= req_struct->in_buf_len) {
- ljam();
+ jam();
BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
req_struct->var_pos_array[var_index+idx]= var_pos;
req_struct->in_buf_index= newIndex;
return true;
} else {
- ljam();
+ jam();
terrorCode= ZAI_INCONSISTENCY_ERROR;
return false;
}
@@ -1537,7 +1535,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer,
Uint32 maxRead = req_struct->max_read;
Uint32 *bits= req_struct->m_disk_ptr->get_null_bits(regTabPtr, DD);
if (newIndexBuf <= maxRead) {
- ljam();
+ jam();
ahOut->setDataSize((bitCount + 31) >> 5);
req_struct->out_buf_index = newIndexBuf;
@@ -1546,7 +1544,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer,
return true;
} else {
- ljam();
+ jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
return false;
}//if
@@ -1570,20 +1568,20 @@ Dbtup::readDiskBitsNULLable(Uint32* outBuffer,
if(BitmaskImpl::get(regTabPtr->m_offsets[DD].m_null_words, bits, pos))
{
- ljam();
+ jam();
ahOut->setNULL();
return true;
}
if (newIndexBuf <= maxRead) {
- ljam();
+ jam();
ahOut->setDataSize((bitCount + 31) >> 5);
req_struct->out_buf_index = newIndexBuf;
BitmaskImpl::getField(regTabPtr->m_offsets[DD].m_null_words, bits, pos+1,
bitCount, outBuffer+indexBuf);
return true;
} else {
- ljam();
+ jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
return false;
}//if
@@ -1612,12 +1610,12 @@ Dbtup::updateDiskBitsNotNULL(Uint32* inBuffer,
req_struct->in_buf_index = newIndex;
return true;
} else {
- ljam();
+ jam();
terrorCode = ZNOT_NULL_ATTR;
return false;
}//if
} else {
- ljam();
+ jam();
terrorCode = ZAI_INCONSISTENCY_ERROR;
return false;
}//if
@@ -1650,13 +1648,13 @@ Dbtup::updateDiskBitsNULLable(Uint32* inBuffer,
Uint32 newIndex = indexBuf + 1;
if (newIndex <= req_struct->in_buf_len)
{
- ljam();
+ jam();
BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
req_struct->in_buf_index = newIndex;
return true;
} else {
- ljam();
+ jam();
terrorCode = ZAI_INCONSISTENCY_ERROR;
return false;
}//if
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
index aad68c5ed17..9026a76d869 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_SCAN_CPP
#include "Dbtup.hpp"
#include <signaldata/AccScan.hpp>
#include <signaldata/NextScan.hpp>
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp
index b2c42418418..c1ccf5952da 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp
@@ -15,14 +15,12 @@
#define DBTUP_C
+#define DBTUP_STORE_PROC_DEF_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <pc.hpp>
-#define ljam() { jamLine(18000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(18000 + __LINE__); }
-
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* ------------ADD/DROP STORED PROCEDURE MODULE ------------------- */
@@ -32,7 +30,7 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
{
OperationrecPtr regOperPtr;
TablerecPtr regTabPtr;
- ljamEntry();
+ jamEntry();
regOperPtr.i = signal->theData[0];
c_operation_pool.getPtr(regOperPtr);
regTabPtr.i = signal->theData[1];
@@ -46,17 +44,17 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
ndbrequire(regTabPtr.p->tableStatus == DEFINED);
switch (requestInfo) {
case ZSCAN_PROCEDURE:
- ljam();
+ jam();
scanProcedure(signal,
regOperPtr.p,
signal->theData[4]);
break;
case ZCOPY_PROCEDURE:
- ljam();
+ jam();
copyProcedure(signal, regTabPtr, regOperPtr.p);
break;
case ZSTORED_PROCEDURE_DELETE:
- ljam();
+ jam();
deleteScanProcedure(signal, regOperPtr.p);
break;
default:
@@ -124,14 +122,14 @@ void Dbtup::copyProcedure(Signal* signal,
AttributeHeader::init(&signal->theData[length + 1], Ti, 0);
length++;
if (length == 24) {
- ljam();
+ jam();
ndbrequire(storedProcedureAttrInfo(signal, regOperPtr,
signal->theData+1, length, true));
length = 0;
}//if
}//for
if (length != 0) {
- ljam();
+ jam();
ndbrequire(storedProcedureAttrInfo(signal, regOperPtr,
signal->theData+1, length, true));
}//if
@@ -155,7 +153,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
ndbrequire(regOperPtr->currentAttrinbufLen <= regOperPtr->attrinbufLen);
if ((RnoFree > MIN_ATTRBUF) ||
(copyProcedure)) {
- ljam();
+ jam();
regAttrPtr.i = cfirstfreeAttrbufrec;
ptrCheckGuard(regAttrPtr, cnoOfAttrbufrec, attrbufrec);
regAttrPtr.p->attrbuf[ZBUF_DATA_LEN] = 0;
@@ -163,18 +161,18 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
cnoFreeAttrbufrec = RnoFree - 1;
regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL;
} else {
- ljam();
+ jam();
storedSeizeAttrinbufrecErrorLab(signal, regOperPtr);
return false;
}//if
if (regOperPtr->firstAttrinbufrec == RNIL) {
- ljam();
+ jam();
regOperPtr->firstAttrinbufrec = regAttrPtr.i;
}//if
regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL;
if (regOperPtr->lastAttrinbufrec != RNIL) {
AttrbufrecPtr tempAttrinbufptr;
- ljam();
+ jam();
tempAttrinbufptr.i = regOperPtr->lastAttrinbufrec;
ptrCheckGuard(tempAttrinbufptr, cnoOfAttrbufrec, attrbufrec);
tempAttrinbufptr.p->attrbuf[ZBUF_NEXT] = regAttrPtr.i;
@@ -187,7 +185,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
length);
if (regOperPtr->currentAttrinbufLen < regOperPtr->attrinbufLen) {
- ljam();
+ jam();
return true;
}//if
if (ERROR_INSERTED(4005) && !copyProcedure) {
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
index b85a2a8394d..6406bdefe1e 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
@@ -15,14 +15,12 @@
#define DBTUP_C
+#define DBTUP_TAB_DES_MAN_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <pc.hpp>
-#define ljam() { jamLine(22000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(22000 + __LINE__); }
-
/*
* TABLE DESCRIPTOR MEMORY MANAGER
*
@@ -65,30 +63,30 @@ Uint32 Dbtup::allocTabDescr(const Tablerec* regTabPtr, Uint32* offset)
allocSize = (((allocSize - 1) >> 4) + 1) << 4;
Uint32 list = nextHigherTwoLog(allocSize - 1); /* CALCULATE WHICH LIST IT BELONGS TO */
for (Uint32 i = list; i < 16; i++) {
- ljam();
+ jam();
if (cfreeTdList[i] != RNIL) {
- ljam();
+ jam();
reference = cfreeTdList[i];
removeTdArea(reference, i); /* REMOVE THE AREA FROM THE FREELIST */
Uint32 retNo = (1 << i) - allocSize; /* CALCULATE THE DIFFERENCE */
if (retNo >= ZTD_FREE_SIZE) {
- ljam();
+ jam();
// return unused words, of course without attempting left merge
Uint32 retRef = reference + allocSize;
freeTabDescr(retRef, retNo, false);
} else {
- ljam();
+ jam();
allocSize = 1 << i;
}//if
break;
}//if
}//for
if (reference == RNIL) {
- ljam();
+ jam();
terrorCode = ZMEM_NOTABDESCR_ERROR;
return RNIL;
} else {
- ljam();
+ jam();
setTabDescrWord((reference + allocSize) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL);
setTabDescrWord(reference + ZTD_DATASIZE, allocSize);
@@ -105,7 +103,7 @@ void Dbtup::freeTabDescr(Uint32 retRef, Uint32 retNo, bool normal)
{
itdaMergeTabDescr(retRef, retNo, normal); /* MERGE WITH POSSIBLE NEIGHBOURS */
while (retNo >= ZTD_FREE_SIZE) {
- ljam();
+ jam();
Uint32 list = nextHigherTwoLog(retNo);
list--; /* RETURN TO NEXT LOWER LIST */
Uint32 sizeOfChunk = 1 << list;
@@ -136,7 +134,7 @@ void Dbtup::insertTdArea(Uint32 tabDesRef, Uint32 list)
setTabDescrWord(tabDesRef + ZTD_FL_HEADER, ZTD_TYPE_FREE);
setTabDescrWord(tabDesRef + ZTD_FL_NEXT, cfreeTdList[list]);
if (cfreeTdList[list] != RNIL) {
- ljam(); /* PREVIOUSLY EMPTY SLOT */
+ jam(); /* PREVIOUSLY EMPTY SLOT */
setTabDescrWord(cfreeTdList[list] + ZTD_FL_PREV, tabDesRef);
}//if
cfreeTdList[list] = tabDesRef; /* RELINK THE LIST */
@@ -156,28 +154,28 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
{
// merge right
while ((retRef + retNo) < cnoOfTabDescrRec) {
- ljam();
+ jam();
Uint32 tabDesRef = retRef + retNo;
Uint32 headerWord = getTabDescrWord(tabDesRef + ZTD_FL_HEADER);
if (headerWord == ZTD_TYPE_FREE) {
- ljam();
+ jam();
Uint32 sizeOfMergedPart = getTabDescrWord(tabDesRef + ZTD_FL_SIZE);
retNo += sizeOfMergedPart;
Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1);
removeTdArea(tabDesRef, list);
} else {
- ljam();
+ jam();
break;
}
}
// merge left
const bool mergeLeft = normal;
while (mergeLeft && retRef > 0) {
- ljam();
+ jam();
Uint32 trailerWord = getTabDescrWord(retRef - ZTD_TR_TYPE);
if (trailerWord == ZTD_TYPE_FREE) {
- ljam();
+ jam();
Uint32 sizeOfMergedPart = getTabDescrWord(retRef - ZTD_TR_SIZE);
ndbrequire(retRef >= sizeOfMergedPart);
retRef -= sizeOfMergedPart;
@@ -185,7 +183,7 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1);
removeTdArea(retRef, list);
} else {
- ljam();
+ jam();
break;
}
}
@@ -213,15 +211,15 @@ void Dbtup::removeTdArea(Uint32 tabDesRef, Uint32 list)
setTabDescrWord((tabDesRef + (1 << list)) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL);
if (tabDesRef == cfreeTdList[list]) {
- ljam();
+ jam();
cfreeTdList[list] = tabDescrNextPtr; /* RELINK THE LIST */
}//if
if (tabDescrNextPtr != RNIL) {
- ljam();
+ jam();
setTabDescrWord(tabDescrNextPtr + ZTD_FL_PREV, tabDescrPrevPtr);
}//if
if (tabDescrPrevPtr != RNIL) {
- ljam();
+ jam();
setTabDescrWord(tabDescrPrevPtr + ZTD_FL_NEXT, tabDescrNextPtr);
}//if
}//Dbtup::removeTdArea()
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
index 9615047540b..0c6a1491543 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
@@ -15,6 +15,7 @@
#define DBTUP_C
+#define DBTUP_TRIGGER_CPP
#include "Dbtup.hpp"
#include <RefConvert.hpp>
#include <ndb_limits.h>
@@ -26,9 +27,6 @@
#include <signaldata/CreateTrig.hpp>
#include <signaldata/TuxMaint.hpp>
-#define ljam() { jamLine(7000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(7000 + __LINE__); }
-
/* **************************************************************** */
/* ---------------------------------------------------------------- */
/* ----------------------- TRIGGER HANDLING ----------------------- */
@@ -47,17 +45,17 @@ Dbtup::findTriggerList(Tablerec* table,
case TriggerType::SUBSCRIPTION_BEFORE:
switch (tevent) {
case TriggerEvent::TE_INSERT:
- ljam();
+ jam();
if (ttime == TriggerActionTime::TA_DETACHED)
tlist = &table->subscriptionInsertTriggers;
break;
case TriggerEvent::TE_UPDATE:
- ljam();
+ jam();
if (ttime == TriggerActionTime::TA_DETACHED)
tlist = &table->subscriptionUpdateTriggers;
break;
case TriggerEvent::TE_DELETE:
- ljam();
+ jam();
if (ttime == TriggerActionTime::TA_DETACHED)
tlist = &table->subscriptionDeleteTriggers;
break;
@@ -68,17 +66,17 @@ Dbtup::findTriggerList(Tablerec* table,
case TriggerType::SECONDARY_INDEX:
switch (tevent) {
case TriggerEvent::TE_INSERT:
- ljam();
+ jam();
if (ttime == TriggerActionTime::TA_AFTER)
tlist = &table->afterInsertTriggers;
break;
case TriggerEvent::TE_UPDATE:
- ljam();
+ jam();
if (ttime == TriggerActionTime::TA_AFTER)
tlist = &table->afterUpdateTriggers;
break;
case TriggerEvent::TE_DELETE:
- ljam();
+ jam();
if (ttime == TriggerActionTime::TA_AFTER)
tlist = &table->afterDeleteTriggers;
break;
@@ -89,7 +87,7 @@ Dbtup::findTriggerList(Tablerec* table,
case TriggerType::ORDERED_INDEX:
switch (tevent) {
case TriggerEvent::TE_CUSTOM:
- ljam();
+ jam();
if (ttime == TriggerActionTime::TA_CUSTOM)
tlist = &table->tuxCustomTriggers;
break;
@@ -100,7 +98,7 @@ Dbtup::findTriggerList(Tablerec* table,
case TriggerType::READ_ONLY_CONSTRAINT:
switch (tevent) {
case TriggerEvent::TE_UPDATE:
- ljam();
+ jam();
if (ttime == TriggerActionTime::TA_AFTER)
tlist = &table->constraintUpdateTriggers;
break;
@@ -118,7 +116,7 @@ Dbtup::findTriggerList(Tablerec* table,
void
Dbtup::execCREATE_TRIG_REQ(Signal* signal)
{
- ljamEntry();
+ jamEntry();
BlockReference senderRef = signal->getSendersBlockRef();
const CreateTrigReq reqCopy = *(const CreateTrigReq*)signal->getDataPtr();
const CreateTrigReq* const req = &reqCopy;
@@ -131,13 +129,13 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
if (tabPtr.p->tableStatus != DEFINED )
{
- ljam();
+ jam();
error= CreateTrigRef::InvalidTable;
}
// Create trigger and associate it with the table
else if (createTrigger(tabPtr.p, req))
{
- ljam();
+ jam();
// Send conf
CreateTrigConf* const conf = (CreateTrigConf*)signal->getDataPtrSend();
conf->setUserRef(reference());
@@ -153,7 +151,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
}
else
{
- ljam();
+ jam();
error= CreateTrigRef::TooManyTriggers;
}
ndbassert(error != CreateTrigRef::NoError);
@@ -174,7 +172,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
void
Dbtup::execDROP_TRIG_REQ(Signal* signal)
{
- ljamEntry();
+ jamEntry();
BlockReference senderRef = signal->getSendersBlockRef();
const DropTrigReq reqCopy = *(const DropTrigReq*)signal->getDataPtr();
const DropTrigReq* const req = &reqCopy;
@@ -262,7 +260,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
if ((tptr.p->triggerType == TriggerType::SUBSCRIPTION) &&
((tptr.p->triggerEvent == TriggerEvent::TE_UPDATE) ||
(tptr.p->triggerEvent == TriggerEvent::TE_DELETE))) {
- ljam();
+ jam();
tptr.p->sendBeforeValues = false;
}
/*
@@ -270,7 +268,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
if (((tptr.p->triggerType == TriggerType::SUBSCRIPTION) ||
(tptr.p->triggerType == TriggerType::SUBSCRIPTION_BEFORE)) &&
(tptr.p->triggerEvent == TriggerEvent::TE_UPDATE)) {
- ljam();
+ jam();
tptr.p->sendOnlyChangedAttributes = true;
}
*/
@@ -282,16 +280,16 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
tptr.p->attributeMask.clear();
if (tptr.p->monitorAllAttributes) {
- ljam();
+ jam();
for(Uint32 i = 0; i < table->m_no_of_attributes; i++) {
if (!primaryKey(table, i)) {
- ljam();
+ jam();
tptr.p->attributeMask.set(i);
}
}
} else {
// Set attribute mask
- ljam();
+ jam();
tptr.p->attributeMask = req->getAttributeMask();
}
return true;
@@ -336,7 +334,7 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender)
Ptr<TupTriggerData> ptr;
for (tlist->first(ptr); !ptr.isNull(); tlist->next(ptr)) {
- ljam();
+ jam();
if (ptr.p->triggerId == triggerId) {
if(ttype==TriggerType::SUBSCRIPTION && sender != ptr.p->m_receiverBlock)
{
@@ -348,10 +346,10 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender)
*
* Backup doesn't really care about the Ids though.
*/
- ljam();
+ jam();
continue;
}
- ljam();
+ jam();
tlist->release(ptr.i);
return 0;
}
@@ -379,7 +377,7 @@ Dbtup::checkImmediateTriggersAfterInsert(KeyReqStruct *req_struct,
if ((regOperPtr->op_struct.primary_replica) &&
(!(regTablePtr->afterInsertTriggers.isEmpty()))) {
- ljam();
+ jam();
fireImmediateTriggers(req_struct,
regTablePtr->afterInsertTriggers,
regOperPtr);
@@ -397,14 +395,14 @@ Dbtup::checkImmediateTriggersAfterUpdate(KeyReqStruct *req_struct,
if ((regOperPtr->op_struct.primary_replica) &&
(!(regTablePtr->afterUpdateTriggers.isEmpty()))) {
- ljam();
+ jam();
fireImmediateTriggers(req_struct,
regTablePtr->afterUpdateTriggers,
regOperPtr);
}
if ((regOperPtr->op_struct.primary_replica) &&
(!(regTablePtr->constraintUpdateTriggers.isEmpty()))) {
- ljam();
+ jam();
fireImmediateTriggers(req_struct,
regTablePtr->constraintUpdateTriggers,
regOperPtr);
@@ -422,7 +420,7 @@ Dbtup::checkImmediateTriggersAfterDelete(KeyReqStruct *req_struct,
if ((regOperPtr->op_struct.primary_replica) &&
(!(regTablePtr->afterDeleteTriggers.isEmpty()))) {
- ljam();
+ jam();
executeTriggers(req_struct,
regTablePtr->afterDeleteTriggers,
regOperPtr);
@@ -443,7 +441,7 @@ void Dbtup::checkDeferredTriggers(Signal* signal,
Operationrec* const regOperPtr,
Tablerec* const regTablePtr)
{
- ljam();
+ jam();
// NYI
}//Dbtup::checkDeferredTriggers()
#endif
@@ -479,7 +477,7 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
if (save_ptr->m_header_bits & Tuple_header::ALLOC) {
if (save_type == ZDELETE) {
// insert + delete = nothing
- ljam();
+ jam();
return;
goto end;
}
@@ -495,10 +493,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
switch(regOperPtr->op_struct.op_type) {
case(ZINSERT):
- ljam();
+ jam();
if (regTablePtr->subscriptionInsertTriggers.isEmpty()) {
// Table has no active triggers monitoring inserts at commit
- ljam();
+ jam();
goto end;
}
@@ -508,10 +506,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
regOperPtr);
break;
case(ZDELETE):
- ljam();
+ jam();
if (regTablePtr->subscriptionDeleteTriggers.isEmpty()) {
// Table has no active triggers monitoring deletes at commit
- ljam();
+ jam();
goto end;
}
@@ -522,10 +520,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
regOperPtr);
break;
case(ZUPDATE):
- ljam();
+ jam();
if (regTablePtr->subscriptionUpdateTriggers.isEmpty()) {
// Table has no active triggers monitoring updates at commit
- ljam();
+ jam();
goto end;
}
@@ -553,10 +551,10 @@ Dbtup::fireImmediateTriggers(KeyReqStruct *req_struct,
TriggerPtr trigPtr;
triggerList.first(trigPtr);
while (trigPtr.i != RNIL) {
- ljam();
+ jam();
if (trigPtr.p->monitorAllAttributes ||
trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) {
- ljam();
+ jam();
executeTrigger(req_struct,
trigPtr.p,
regOperPtr);
@@ -575,10 +573,10 @@ Dbtup::fireDeferredTriggers(Signal* signal,
TriggerPtr trigPtr;
triggerList.first(trigPtr);
while (trigPtr.i != RNIL) {
- ljam();
+ jam();
if (trigPtr.p->monitorAllAttributes ||
trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) {
- ljam();
+ jam();
executeTrigger(req_struct,
trigPtr,
regOperPtr);
@@ -604,12 +602,12 @@ Dbtup::fireDetachedTriggers(KeyReqStruct *req_struct,
ndbrequire(regOperPtr->is_first_operation());
triggerList.first(trigPtr);
while (trigPtr.i != RNIL) {
- ljam();
+ jam();
if ((trigPtr.p->monitorReplicas ||
regOperPtr->op_struct.primary_replica) &&
(trigPtr.p->monitorAllAttributes ||
trigPtr.p->attributeMask.overlaps(req_struct->changeMask))) {
- ljam();
+ jam();
executeTrigger(req_struct,
trigPtr.p,
regOperPtr);
@@ -625,7 +623,7 @@ void Dbtup::executeTriggers(KeyReqStruct *req_struct,
TriggerPtr trigPtr;
triggerList.first(trigPtr);
while (trigPtr.i != RNIL) {
- ljam();
+ jam();
executeTrigger(req_struct,
trigPtr.p,
regOperPtr);
@@ -675,7 +673,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord);
if (ref == BACKUP) {
- ljam();
+ jam();
/*
In order for the implementation of BACKUP to work even when changing
primaries in the middle of the backup we need to set the trigger on
@@ -688,9 +686,9 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
signal->theData[0] = trigPtr->triggerId;
signal->theData[1] = regFragPtr.p->fragmentId;
EXECUTE_DIRECT(BACKUP, GSN_BACKUP_TRIG_REQ, signal, 2);
- ljamEntry();
+ jamEntry();
if (signal->theData[0] == 0) {
- ljam();
+ jam();
return;
}
}
@@ -704,7 +702,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
noAfterWords,
beforeBuffer,
noBeforeWords)) {
- ljam();
+ jam();
return;
}
//--------------------------------------------------------------------
@@ -720,13 +718,13 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
switch(trigPtr->triggerType) {
case (TriggerType::SECONDARY_INDEX):
- ljam();
+ jam();
ref = req_struct->TC_ref;
executeDirect = false;
break;
case (TriggerType::SUBSCRIPTION):
case (TriggerType::SUBSCRIPTION_BEFORE):
- ljam();
+ jam();
// Since only backup uses subscription triggers we send to backup directly for now
ref = trigPtr->m_receiverBlock;
executeDirect = true;
@@ -747,22 +745,22 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
switch(regOperPtr->op_struct.op_type) {
case(ZINSERT):
- ljam();
+ jam();
// Send AttrInfo signals with new attribute values
trigAttrInfo->setAttrInfoType(TrigAttrInfo::AFTER_VALUES);
sendTrigAttrInfo(signal, afterBuffer, noAfterWords, executeDirect, ref);
break;
case(ZDELETE):
if (trigPtr->sendBeforeValues) {
- ljam();
+ jam();
trigAttrInfo->setAttrInfoType(TrigAttrInfo::BEFORE_VALUES);
sendTrigAttrInfo(signal, beforeBuffer, noBeforeWords, executeDirect,ref);
}
break;
case(ZUPDATE):
- ljam();
+ jam();
if (trigPtr->sendBeforeValues) {
- ljam();
+ jam();
trigAttrInfo->setAttrInfoType(TrigAttrInfo::BEFORE_VALUES);
sendTrigAttrInfo(signal, beforeBuffer, noBeforeWords, executeDirect,ref);
}
@@ -788,9 +786,9 @@ Uint32 Dbtup::setAttrIds(Bitmask<MAXNROFATTRIBUTESINWORDS>& attributeMask,
{
Uint32 bufIndx = 0;
for (Uint32 i = 0; i < m_no_of_attributesibutes; i++) {
- ljam();
+ jam();
if (attributeMask.get(i)) {
- ljam();
+ jam();
AttributeHeader::init(&inBuffer[bufIndx++], i, 0);
}
}
@@ -858,7 +856,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
Uint32 numAttrsToRead;
if ((regOperPtr->op_struct.op_type == ZUPDATE) &&
(trigPtr->sendOnlyChangedAttributes)) {
- ljam();
+ jam();
//--------------------------------------------------------------------
// Update that sends only changed information
//--------------------------------------------------------------------
@@ -870,13 +868,13 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
} else if ((regOperPtr->op_struct.op_type == ZDELETE) &&
(!trigPtr->sendBeforeValues)) {
- ljam();
+ jam();
//--------------------------------------------------------------------
// Delete without sending before values only read Primary Key
//--------------------------------------------------------------------
return true;
} else {
- ljam();
+ jam();
//--------------------------------------------------------------------
// All others send all attributes that are monitored, except:
// Omit unchanged blob inlines on update i.e.
@@ -898,7 +896,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
//--------------------------------------------------------------------
if (regOperPtr->op_struct.op_type != ZDELETE)
{
- ljam();
+ jam();
int ret = readAttributes(req_struct,
&readBuffer[0],
numAttrsToRead,
@@ -908,7 +906,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
ndbrequire(ret != -1);
noAfterWords= ret;
} else {
- ljam();
+ jam();
noAfterWords = 0;
}
@@ -920,7 +918,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
if ((regOperPtr->op_struct.op_type == ZUPDATE ||
regOperPtr->op_struct.op_type == ZDELETE) &&
(trigPtr->sendBeforeValues)) {
- ljam();
+ jam();
Tuple_header *save= req_struct->m_tuple_ptr;
PagePtr tmp;
@@ -956,7 +954,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
// Although a trigger was fired it was not necessary since the old
// value and the new value was exactly the same
//--------------------------------------------------------------------
- ljam();
+ jam();
//XXX does this work with collations?
return false;
}
@@ -976,21 +974,21 @@ void Dbtup::sendTrigAttrInfo(Signal* signal,
do {
sigLen = dataLen - dataIndex;
if (sigLen > TrigAttrInfo::DataLength) {
- ljam();
+ jam();
sigLen = TrigAttrInfo::DataLength;
}
MEMCOPY_NO_WORDS(trigAttrInfo->getData(),
data + dataIndex,
sigLen);
if (executeDirect) {
- ljam();
+ jam();
EXECUTE_DIRECT(receiverReference,
GSN_TRIG_ATTRINFO,
signal,
TrigAttrInfo::StaticLength + sigLen);
- ljamEntry();
+ jamEntry();
} else {
- ljam();
+ jam();
sendSignal(receiverReference,
GSN_TRIG_ATTRINFO,
signal,
@@ -1018,15 +1016,15 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
switch(regOperPtr->op_struct.op_type) {
case(ZINSERT):
- ljam();
+ jam();
fireTrigOrd->setTriggerEvent(TriggerEvent::TE_INSERT);
break;
case(ZDELETE):
- ljam();
+ jam();
fireTrigOrd->setTriggerEvent(TriggerEvent::TE_DELETE);
break;
case(ZUPDATE):
- ljam();
+ jam();
fireTrigOrd->setTriggerEvent(TriggerEvent::TE_UPDATE);
break;
default:
@@ -1040,12 +1038,12 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
switch(trigPtr->triggerType) {
case (TriggerType::SECONDARY_INDEX):
- ljam();
+ jam();
sendSignal(req_struct->TC_ref, GSN_FIRE_TRIG_ORD,
signal, FireTrigOrd::SignalLength, JBB);
break;
case (TriggerType::SUBSCRIPTION_BEFORE): // Only Suma
- ljam();
+ jam();
// Since only backup uses subscription triggers we
// send to backup directly for now
fireTrigOrd->setGCI(req_struct->gci);
@@ -1056,7 +1054,7 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
FireTrigOrd::SignalWithHashValueLength);
break;
case (TriggerType::SUBSCRIPTION):
- ljam();
+ jam();
// Since only backup uses subscription triggers we
// send to backup directly for now
fireTrigOrd->setGCI(req_struct->gci);
@@ -1123,7 +1121,7 @@ Dbtup::addTuxEntries(Signal* signal,
Tablerec* regTabPtr)
{
if (ERROR_INSERTED(4022)) {
- ljam();
+ jam();
CLEAR_ERROR_INSERT_VALUE;
terrorCode = 9999;
return -1;
@@ -1134,12 +1132,12 @@ Dbtup::addTuxEntries(Signal* signal,
Uint32 failPtrI;
triggerList.first(triggerPtr);
while (triggerPtr.i != RNIL) {
- ljam();
+ jam();
req->indexId = triggerPtr.p->indexId;
req->errorCode = RNIL;
if (ERROR_INSERTED(4023) &&
! triggerList.hasNext(triggerPtr)) {
- ljam();
+ jam();
CLEAR_ERROR_INSERT_VALUE;
terrorCode = 9999;
failPtrI = triggerPtr.i;
@@ -1147,9 +1145,9 @@ Dbtup::addTuxEntries(Signal* signal,
}
EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
signal, TuxMaintReq::SignalLength);
- ljamEntry();
+ jamEntry();
if (req->errorCode != 0) {
- ljam();
+ jam();
terrorCode = req->errorCode;
failPtrI = triggerPtr.i;
goto fail;
@@ -1161,12 +1159,12 @@ fail:
req->opInfo = TuxMaintReq::OpRemove;
triggerList.first(triggerPtr);
while (triggerPtr.i != failPtrI) {
- ljam();
+ jam();
req->indexId = triggerPtr.p->indexId;
req->errorCode = RNIL;
EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
signal, TuxMaintReq::SignalLength);
- ljamEntry();
+ jamEntry();
ndbrequire(req->errorCode == 0);
triggerList.next(triggerPtr);
}
@@ -1197,15 +1195,15 @@ Dbtup::executeTuxCommitTriggers(Signal* signal,
if (regOperPtr->op_struct.op_type == ZINSERT) {
if (! regOperPtr->op_struct.delete_insert_flag)
return;
- ljam();
+ jam();
tupVersion= decr_tup_version(regOperPtr->tupVersion);
} else if (regOperPtr->op_struct.op_type == ZUPDATE) {
- ljam();
+ jam();
tupVersion= decr_tup_version(regOperPtr->tupVersion);
} else if (regOperPtr->op_struct.op_type == ZDELETE) {
if (regOperPtr->op_struct.delete_insert_flag)
return;
- ljam();
+ jam();
tupVersion= regOperPtr->tupVersion;
} else {
ndbrequire(false);
@@ -1231,13 +1229,13 @@ Dbtup::executeTuxAbortTriggers(Signal* signal,
// get version
Uint32 tupVersion;
if (regOperPtr->op_struct.op_type == ZINSERT) {
- ljam();
+ jam();
tupVersion = regOperPtr->tupVersion;
} else if (regOperPtr->op_struct.op_type == ZUPDATE) {
- ljam();
+ jam();
tupVersion = regOperPtr->tupVersion;
} else if (regOperPtr->op_struct.op_type == ZDELETE) {
- ljam();
+ jam();
return;
} else {
ndbrequire(false);
@@ -1262,12 +1260,12 @@ Dbtup::removeTuxEntries(Signal* signal,
TriggerPtr triggerPtr;
triggerList.first(triggerPtr);
while (triggerPtr.i != RNIL) {
- ljam();
+ jam();
req->indexId = triggerPtr.p->indexId;
req->errorCode = RNIL,
EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
signal, TuxMaintReq::SignalLength);
- ljamEntry();
+ jamEntry();
// must succeed
ndbrequire(req->errorCode == 0);
triggerList.next(triggerPtr);
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
index 072bd69da97..763bbaf9906 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
@@ -14,12 +14,9 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C
+#define DBTUP_VAR_ALLOC_CPP
#include "Dbtup.hpp"
-#define ljam() { jamLine(32000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(32000 + __LINE__); }
-
-
void Dbtup::init_list_sizes(void)
{
c_min_list_size[0]= 200;
@@ -109,9 +106,9 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
PagePtr pagePtr;
pagePtr.i= get_alloc_page(fragPtr, (alloc_size + 1));
if (pagePtr.i == RNIL) {
- ljam();
+ jam();
if ((pagePtr.i= get_empty_var_page(fragPtr)) == RNIL) {
- ljam();
+ jam();
return 0;
}
c_page_pool.getPtr(pagePtr);
@@ -127,7 +124,7 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
pagePtr.p->page_state = ZTH_MM_FREE;
} else {
c_page_pool.getPtr(pagePtr);
- ljam();
+ jam();
}
Uint32 idx= ((Var_page*)pagePtr.p)
->alloc_record(alloc_size, (Var_page*)ctemp_page, Var_page::CHAIN);
@@ -177,7 +174,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
ndbassert(pagePtr.p->free_space <= Var_page::DATA_WORDS);
if (pagePtr.p->free_space == Var_page::DATA_WORDS - 1)
{
- ljam();
+ jam();
/*
This code could be used when we release pages.
remove_free_page(signal,fragPtr,page_header,page_header->list_index);
@@ -185,7 +182,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
*/
update_free_page_list(fragPtr, pagePtr);
} else {
- ljam();
+ jam();
update_free_page_list(fragPtr, pagePtr);
}
return;
@@ -259,16 +256,16 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
start_index= calculate_free_list_impl(alloc_size);
if (start_index == (MAX_FREE_LIST - 1)) {
- ljam();
+ jam();
} else {
- ljam();
+ jam();
ndbrequire(start_index < (MAX_FREE_LIST - 1));
start_index++;
}
for (i= start_index; i < MAX_FREE_LIST; i++) {
- ljam();
+ jam();
if (!fragPtr->free_var_page_array[i].isEmpty()) {
- ljam();
+ jam();
return fragPtr->free_var_page_array[i].firstItem;
}
}
@@ -277,9 +274,9 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
LocalDLList<Page> list(c_page_pool, fragPtr->free_var_page_array[i]);
for(list.first(pagePtr); !pagePtr.isNull() && loop < 16; )
{
- ljam();
+ jam();
if (pagePtr.p->free_space >= alloc_size) {
- ljam();
+ jam();
return pagePtr.i;
}
loop++;
@@ -346,7 +343,7 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
(free_space > c_max_list_size[list_index])) {
Uint32 new_list_index= calculate_free_list_impl(free_space);
if (list_index != MAX_FREE_LIST) {
- ljam();
+ jam();
/*
* Only remove it from its list if it is in a list
*/
@@ -361,11 +358,11 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
This can only happen for the free list with least guaranteed
free space.
*/
- ljam();
+ jam();
ndbrequire(new_list_index == 0);
pagePtr.p->list_index= MAX_FREE_LIST;
} else {
- ljam();
+ jam();
LocalDLList<Page> list(c_page_pool,
fragPtr->free_var_page_array[new_list_index]);
list.add(pagePtr);
@@ -381,9 +378,9 @@ Uint32 Dbtup::calculate_free_list_impl(Uint32 free_space_size) const
{
Uint32 i;
for (i = 0; i < MAX_FREE_LIST; i++) {
- ljam();
+ jam();
if (free_space_size <= c_max_list_size[i]) {
- ljam();
+ jam();
return i;
}
}
diff --git a/storage/ndb/src/kernel/error/ErrorReporter.cpp b/storage/ndb/src/kernel/error/ErrorReporter.cpp
index 3d1b7fad7f3..43307d43139 100644
--- a/storage/ndb/src/kernel/error/ErrorReporter.cpp
+++ b/storage/ndb/src/kernel/error/ErrorReporter.cpp
@@ -24,6 +24,7 @@
#include <NdbHost.h>
#include <NdbConfig.h>
#include <Configuration.hpp>
+#include "EventLogger.hpp"
#include <NdbAutoPtr.hpp>
@@ -39,7 +40,7 @@ static void dumpJam(FILE* jamStream,
Uint32 thrdTheEmulatedJamIndex,
Uint8 thrdTheEmulatedJam[]);
-
+extern EventLogger g_eventLogger;
const char*
ErrorReporter::formatTimeStampString(){
TimeModule DateTime; /* To create "theDateTimeString" */
@@ -196,6 +197,9 @@ ErrorReporter::handleError(int messageID,
WriteMessage(messageID, problemData,
objRef, theEmulatedJamIndex, theEmulatedJam);
+ g_eventLogger.info(problemData);
+ g_eventLogger.info(objRef);
+
childReportError(messageID);
if(messageID == NDBD_EXIT_ERROR_INSERT){
diff --git a/storage/ndb/src/mgmclient/CommandInterpreter.cpp b/storage/ndb/src/mgmclient/CommandInterpreter.cpp
index 7c57d9eabbc..fdcea63640c 100644
--- a/storage/ndb/src/mgmclient/CommandInterpreter.cpp
+++ b/storage/ndb/src/mgmclient/CommandInterpreter.cpp
@@ -2056,6 +2056,7 @@ CommandInterpreter::executeStatus(int processId,
}
if (cl->node_states[i].node_type != NDB_MGM_NODE_TYPE_NDB){
if (cl->node_states[i].version != 0){
+ version = cl->node_states[i].version;
ndbout << "Node "<< cl->node_states[i].node_id <<": connected" ;
ndbout_c(" (Version %d.%d.%d)",
getMajor(version) ,
@@ -2065,7 +2066,7 @@ CommandInterpreter::executeStatus(int processId,
}else
ndbout << "Node "<< cl->node_states[i].node_id <<": not connected" << endl;
return 0;
- }
+ }
status = cl->node_states[i].node_status;
startPhase = cl->node_states[i].start_phase;
version = cl->node_states[i].version;
diff --git a/storage/ndb/src/mgmsrv/ConfigInfo.cpp b/storage/ndb/src/mgmsrv/ConfigInfo.cpp
index e7c6122d846..6351af7246e 100644
--- a/storage/ndb/src/mgmsrv/ConfigInfo.cpp
+++ b/storage/ndb/src/mgmsrv/ConfigInfo.cpp
@@ -449,7 +449,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
ConfigInfo::CI_INT,
"128",
"8",
- STR_VALUE(MAX_INT_RNIL) },
+ STR_VALUE(MAX_TABLES) },
{
CFG_DB_NO_ORDERED_INDEXES,
diff --git a/storage/ndb/src/mgmsrv/ParamInfo.cpp b/storage/ndb/src/mgmsrv/ParamInfo.cpp
index 4a4e80eb079..888b7948c05 100644
--- a/storage/ndb/src/mgmsrv/ParamInfo.cpp
+++ b/storage/ndb/src/mgmsrv/ParamInfo.cpp
@@ -275,7 +275,7 @@ const ParamInfo ParamInfoArray[] = {
CI_INT,
"128",
"8",
- STR_VALUE(MAX_INT_RNIL) },
+ STR_VALUE(MAX_TABLES) },
{
CFG_DB_NO_ORDERED_INDEXES,
diff --git a/storage/ndb/src/ndbapi/NdbScanFilter.cpp b/storage/ndb/src/ndbapi/NdbScanFilter.cpp
index 6ff7485416b..89abba2eddc 100644
--- a/storage/ndb/src/ndbapi/NdbScanFilter.cpp
+++ b/storage/ndb/src/ndbapi/NdbScanFilter.cpp
@@ -42,7 +42,9 @@ public:
int m_label;
State m_current;
+ Uint32 m_negative; //used for translating NAND/NOR to AND/OR, equal 0 or 1
Vector<State> m_stack;
+ Vector<Uint32> m_stack2; //to store info of m_negative
NdbOperation * m_operation;
Uint32 m_latestAttrib;
@@ -66,6 +68,7 @@ NdbScanFilter::NdbScanFilter(class NdbOperation * op)
m_impl.m_label = 0;
m_impl.m_latestAttrib = ~0;
m_impl.m_operation = op;
+ m_impl.m_negative = 0;
}
NdbScanFilter::~NdbScanFilter(){
@@ -75,18 +78,39 @@ NdbScanFilter::~NdbScanFilter(){
int
NdbScanFilter::begin(Group group){
+ m_impl.m_stack2.push_back(m_impl.m_negative);
switch(group){
case NdbScanFilter::AND:
INT_DEBUG(("Begin(AND)"));
+ if(m_impl.m_negative == 1){
+ group = NdbScanFilter::OR;
+ }
break;
case NdbScanFilter::OR:
INT_DEBUG(("Begin(OR)"));
+ if(m_impl.m_negative == 1){
+ group = NdbScanFilter::AND;
+ }
break;
case NdbScanFilter::NAND:
INT_DEBUG(("Begin(NAND)"));
+ if(m_impl.m_negative == 0){
+ group = NdbScanFilter::OR;
+ m_impl.m_negative = 1;
+ }else{
+ group = NdbScanFilter::AND;
+ m_impl.m_negative = 0;
+ }
break;
case NdbScanFilter::NOR:
INT_DEBUG(("Begin(NOR)"));
+ if(m_impl.m_negative == 0){
+ group = NdbScanFilter::AND;
+ m_impl.m_negative = 1;
+ }else{
+ group = NdbScanFilter::OR;
+ m_impl.m_negative = 0;
+ }
break;
}
@@ -130,6 +154,13 @@ NdbScanFilter::begin(Group group){
int
NdbScanFilter::end(){
+ if(m_impl.m_stack2.size() == 0){
+ m_impl.m_operation->setErrorCodeAbort(4259);
+ return -1;
+ }
+ m_impl.m_negative = m_impl.m_stack2.back();
+ m_impl.m_stack2.erase(m_impl.m_stack2.size() - 1);
+
switch(m_impl.m_current.m_group){
case NdbScanFilter::AND:
INT_DEBUG(("End(AND pc=%d)", m_impl.m_current.m_popCount));
@@ -151,6 +182,10 @@ NdbScanFilter::end(){
}
NdbScanFilterImpl::State tmp = m_impl.m_current;
+ if(m_impl.m_stack.size() == 0){
+ m_impl.m_operation->setErrorCodeAbort(4259);
+ return -1;
+ }
m_impl.m_current = m_impl.m_stack.back();
m_impl.m_stack.erase(m_impl.m_stack.size() - 1);
@@ -395,8 +430,17 @@ NdbScanFilterImpl::cond_col_const(Interpreter::BinaryCondition op,
m_operation->setErrorCodeAbort(4260);
return -1;
}
+
+ StrBranch2 branch;
+ if(m_negative == 1){ //change NdbOperation to its negative
+ if(m_current.m_group == NdbScanFilter::AND)
+ branch = table3[op].m_branches[(Uint32)(m_current.m_group) + 1];
+ if(m_current.m_group == NdbScanFilter::OR)
+ branch = table3[op].m_branches[(Uint32)(m_current.m_group) - 1];
+ }else{
+ branch = table3[op].m_branches[(Uint32)(m_current.m_group)];
+ }
- StrBranch2 branch = table3[op].m_branches[m_current.m_group];
const NdbDictionary::Column * col =
m_operation->m_currentTable->getColumn(AttrId);
diff --git a/storage/ndb/test/include/NDBT_Test.hpp b/storage/ndb/test/include/NDBT_Test.hpp
index 46d27ec1c3c..ad09f04e814 100644
--- a/storage/ndb/test/include/NDBT_Test.hpp
+++ b/storage/ndb/test/include/NDBT_Test.hpp
@@ -333,6 +333,12 @@ public:
// supply argc and argv as parameters
int execute(int, const char**);
+ // NDBT's test tables are fixed and it always create
+ // and drop fixed table when execute, add this method
+ // in order to run CTX only and adapt to some new
+ // customized testsuite
+ int executeOneCtx(Ndb_cluster_connection&,
+ const NdbDictionary::Table* ptab, const char* testname = NULL);
// These function can be used from main in the test program
// to control the behaviour of the testsuite
diff --git a/storage/ndb/test/ndbapi/Makefile.am b/storage/ndb/test/ndbapi/Makefile.am
index 3209a8be523..ad509dbbafe 100644
--- a/storage/ndb/test/ndbapi/Makefile.am
+++ b/storage/ndb/test/ndbapi/Makefile.am
@@ -39,6 +39,7 @@ testOperations \
testRestartGci \
testScan \
testInterpreter \
+testScanFilter \
testScanInterpreter \
testScanPerf \
testSystemRestart \
@@ -85,6 +86,7 @@ testOperations_SOURCES = testOperations.cpp
testRestartGci_SOURCES = testRestartGci.cpp
testScan_SOURCES = testScan.cpp ScanFunctions.hpp
testInterpreter_SOURCES = testInterpreter.cpp
+testScanFilter_SOURCES = testScanFilter.cpp
testScanInterpreter_SOURCES = testScanInterpreter.cpp ScanFilter.hpp ScanInterpretTest.hpp
testScanPerf_SOURCES = testScanPerf.cpp
testSystemRestart_SOURCES = testSystemRestart.cpp
diff --git a/storage/ndb/test/ndbapi/testScanFilter.cpp b/storage/ndb/test/ndbapi/testScanFilter.cpp
new file mode 100644
index 00000000000..ba869dc8ce4
--- /dev/null
+++ b/storage/ndb/test/ndbapi/testScanFilter.cpp
@@ -0,0 +1,851 @@
+/* Copyright (C) 2007, Justin He, 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 */
+
+#include <NDBT.hpp>
+#include <NDBT_Test.hpp>
+
+#define ERR_EXIT(obj, msg) \
+do \
+{ \
+fprintf(stderr, "%s: %s (%d) in %s:%d\n", \
+msg, obj->getNdbError().message, obj->getNdbError().code, __FILE__, __LINE__); \
+exit(-1); \
+} \
+while (0);
+
+#define PRINT_ERROR(code,msg) \
+do \
+{ \
+fprintf(stderr, "Error in %s, line: %d, code: %d, msg: %s.\n", __FILE__, __LINE__, code, msg); \
+} \
+while (0);
+
+#define MYSQLERROR(mysql) { \
+ PRINT_ERROR(mysql_errno(&mysql),mysql_error(&mysql)); \
+ exit(-1); }
+#define APIERROR(error) { \
+ PRINT_ERROR(error.code,error.message); \
+ exit(-1); }
+
+#define TEST_NAME "TestScanFilter"
+#define TABLE_NAME "TABLE_SCAN"
+
+const char *COL_NAME[] = {"id", "i", "j", "k", "l", "m", "n"};
+const char COL_LEN = 7;
+/*
+* Not to change TUPLE_NUM, because the column in TABLE_NAME is fixed,
+* there are six columns, 'i', 'j', 'k', 'l', 'm', 'n', and each on is equal to 1 or 1,
+* Since each tuple should be unique in this case, then TUPLE_NUM = 2 power 6 = 64
+*/
+const int TUPLE_NUM = (int)pow(2, COL_LEN-1);
+
+/*
+* the recursive level of random scan filter, can
+* modify this parameter more or less, range from
+* 1 to 100, larger num consumes more scan time
+*/
+const int RECURSIVE_LEVEL = 10;
+
+const int MAX_STR_LEN = (RECURSIVE_LEVEL * (COL_LEN+1) * 4);
+
+/*
+* Each time stands for one test, it will produce a random
+* filter string, and scan through ndb api and through
+* calculation with tuples' data, then compare the result,
+* if they are equal, this test passed, or failed.
+* Only all TEST_NUM times tests passed, we can believe
+* the suite of test cases are okay.
+* Change TEST_NUM to larger will need more time to test
+*/
+const int TEST_NUM = 5000;
+
+
+/* Table definition*/
+static
+const
+NDBT_Attribute MYTAB1Attribs[] = {
+ NDBT_Attribute("id", NdbDictionary::Column::Unsigned, 1, true),
+ NDBT_Attribute("i", NdbDictionary::Column::Unsigned),
+ NDBT_Attribute("j", NdbDictionary::Column::Unsigned),
+ NDBT_Attribute("k", NdbDictionary::Column::Unsigned),
+ NDBT_Attribute("l", NdbDictionary::Column::Unsigned),
+ NDBT_Attribute("m", NdbDictionary::Column::Unsigned),
+ NDBT_Attribute("n", NdbDictionary::Column::Unsigned),
+};
+static
+const
+NDBT_Table MYTAB1(TABLE_NAME, sizeof(MYTAB1Attribs)/sizeof(NDBT_Attribute), MYTAB1Attribs);
+
+
+int createTable(Ndb* pNdb, const NdbDictionary::Table* tab, bool _temp,
+ bool existsOk, NDBT_CreateTableHook f)
+{
+ int r = 0;
+ do{
+ NdbDictionary::Table tmpTab(* tab);
+ tmpTab.setStoredTable(_temp ? 0 : 1);
+ if(f != 0 && f(pNdb, tmpTab, 0, NULL))
+ {
+ ndbout << "Failed to create table" << endl;
+ return NDBT_FAILED;
+ }
+ r = pNdb->getDictionary()->createTable(tmpTab);
+ if(r == -1){
+ if(!existsOk){
+ ndbout << "Error: " << pNdb->getDictionary()->getNdbError() << endl;
+ break;
+ }
+ if(pNdb->getDictionary()->getNdbError().code != 721){
+ ndbout << "Error: " << pNdb->getDictionary()->getNdbError() << endl;
+ break;
+ }
+ r = 0;
+ }
+ }while(false);
+
+ return r;
+}
+
+/*
+* Function to produce the tuples' data
+*/
+int runPopulate(NDBT_Context* ctx, NDBT_Step* step)
+{
+ Ndb *myNdb = GETNDB(step);
+ const NdbDictionary::Dictionary* myDict= myNdb->getDictionary();
+ const NdbDictionary::Table *myTable= myDict->getTable(TABLE_NAME);
+ if(myTable == NULL)
+ APIERROR(myDict->getNdbError());
+
+ NdbTransaction* myTrans = myNdb->startTransaction();
+ if (myTrans == NULL)
+ APIERROR(myNdb->getNdbError());
+
+ for(int num = 0; num < TUPLE_NUM; num++)
+ {
+ NdbOperation* myNdbOperation = myTrans->getNdbOperation(myTable);
+ if(myNdbOperation == NULL)
+ {
+ APIERROR(myTrans->getNdbError());
+ }
+
+/* the tuples' data in TABLE_NAME
++----+---+---+---+---+---+---+
+| id | i | j | k | l | m | n |
++----+---+---+---+---+---+---+
+| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 0 | 0 | 0 | 0 | 0 | 1 |
+| 2 | 0 | 0 | 0 | 0 | 1 | 0 |
+| 3 | 0 | 0 | 0 | 0 | 1 | 1 |
+| 4 | 0 | 0 | 0 | 1 | 0 | 0 |
+| 5 | 0 | 0 | 0 | 1 | 0 | 1 |
+| 6 | 0 | 0 | 0 | 1 | 1 | 0 |
+| 7 | 0 | 0 | 0 | 1 | 1 | 1 |
+| 8 | 0 | 0 | 1 | 0 | 0 | 0 |
+| 9 | 0 | 0 | 1 | 0 | 0 | 1 |
+| 10 | 0 | 0 | 1 | 0 | 1 | 0 |
+| 11 | 0 | 0 | 1 | 0 | 1 | 1 |
+| 12 | 0 | 0 | 1 | 1 | 0 | 0 |
+| 13 | 0 | 0 | 1 | 1 | 0 | 1 |
+| 14 | 0 | 0 | 1 | 1 | 1 | 0 |
+| 15 | 0 | 0 | 1 | 1 | 1 | 1 |
+| 16 | 0 | 1 | 0 | 0 | 0 | 0 |
+| 17 | 0 | 1 | 0 | 0 | 0 | 1 |
+| 18 | 0 | 1 | 0 | 0 | 1 | 0 |
+| 19 | 0 | 1 | 0 | 0 | 1 | 1 |
+| 20 | 0 | 1 | 0 | 1 | 0 | 0 |
+| 21 | 0 | 1 | 0 | 1 | 0 | 1 |
+| 22 | 0 | 1 | 0 | 1 | 1 | 0 |
+| 23 | 0 | 1 | 0 | 1 | 1 | 1 |
+| 24 | 0 | 1 | 1 | 0 | 0 | 0 |
+| 25 | 0 | 1 | 1 | 0 | 0 | 1 |
+| 26 | 0 | 1 | 1 | 0 | 1 | 0 |
+| 27 | 0 | 1 | 1 | 0 | 1 | 1 |
+| 28 | 0 | 1 | 1 | 1 | 0 | 0 |
+| 29 | 0 | 1 | 1 | 1 | 0 | 1 |
+| 30 | 0 | 1 | 1 | 1 | 1 | 0 |
+| 31 | 0 | 1 | 1 | 1 | 1 | 1 |
+| 32 | 1 | 0 | 0 | 0 | 0 | 0 |
+| 33 | 1 | 0 | 0 | 0 | 0 | 1 |
+| 34 | 1 | 0 | 0 | 0 | 1 | 0 |
+| 35 | 1 | 0 | 0 | 0 | 1 | 1 |
+| 36 | 1 | 0 | 0 | 1 | 0 | 0 |
+| 37 | 1 | 0 | 0 | 1 | 0 | 1 |
+| 38 | 1 | 0 | 0 | 1 | 1 | 0 |
+| 39 | 1 | 0 | 0 | 1 | 1 | 1 |
+| 40 | 1 | 0 | 1 | 0 | 0 | 0 |
+| 41 | 1 | 0 | 1 | 0 | 0 | 1 |
+| 42 | 1 | 0 | 1 | 0 | 1 | 0 |
+| 43 | 1 | 0 | 1 | 0 | 1 | 1 |
+| 44 | 1 | 0 | 1 | 1 | 0 | 0 |
+| 45 | 1 | 0 | 1 | 1 | 0 | 1 |
+| 46 | 1 | 0 | 1 | 1 | 1 | 0 |
+| 47 | 1 | 0 | 1 | 1 | 1 | 1 |
+| 48 | 1 | 1 | 0 | 0 | 0 | 0 |
+| 49 | 1 | 1 | 0 | 0 | 0 | 1 |
+| 50 | 1 | 1 | 0 | 0 | 1 | 0 |
+| 51 | 1 | 1 | 0 | 0 | 1 | 1 |
+| 52 | 1 | 1 | 0 | 1 | 0 | 0 |
+| 53 | 1 | 1 | 0 | 1 | 0 | 1 |
+| 54 | 1 | 1 | 0 | 1 | 1 | 0 |
+| 55 | 1 | 1 | 0 | 1 | 1 | 1 |
+| 56 | 1 | 1 | 1 | 0 | 0 | 0 |
+| 57 | 1 | 1 | 1 | 0 | 0 | 1 |
+| 58 | 1 | 1 | 1 | 0 | 1 | 0 |
+| 59 | 1 | 1 | 1 | 0 | 1 | 1 |
+| 60 | 1 | 1 | 1 | 1 | 0 | 0 |
+| 61 | 1 | 1 | 1 | 1 | 0 | 1 |
+| 62 | 1 | 1 | 1 | 1 | 1 | 0 |
+| 63 | 1 | 1 | 1 | 1 | 1 | 1 |
++----+---+---+---+---+---+---+
+*/
+ myNdbOperation->insertTuple();
+ myNdbOperation->equal(COL_NAME[0], num);
+ for(int col = 1; col < COL_LEN; col++)
+ {
+ myNdbOperation->setValue(COL_NAME[col], (num>>(COL_LEN-1-col))&1);
+ }
+ }
+
+ int check = myTrans->execute(NdbTransaction::Commit);
+
+ myTrans->close();
+
+ if (check == -1)
+ return NDBT_FAILED;
+ else
+ return NDBT_OK;
+
+}
+
+
+
+/*
+* a=AND, o=OR, A=NAND, O=NOR
+*/
+char op_string[] = "aoAO";
+/*
+* the six columns' name of test table
+*/
+char col_string[] = "ijklmn";
+const int op_len = strlen(op_string);
+const int col_len = strlen(col_string);
+
+/*
+* get a random op from "aoAO"
+*/
+int get_rand_op_ch(char *ch)
+{
+ static unsigned int num = 0;
+ if(++num == 0)
+ num = 1;
+ srand(num*time(NULL));
+ *ch = op_string[rand() % op_len];
+ return 1;
+}
+
+/*
+* get a random order form of "ijklmn" trough exchanging letter
+*/
+void change_col_order()
+{
+ int pos1,pos2;
+ char temp;
+ for (int i = 0; i < 10; i++) //exchange for 10 times
+ {
+ srand(time(NULL)/(i+1));
+ pos1 = rand() % col_len;
+ srand((i+1)*time(NULL));
+ pos2 = rand() % col_len;
+ if (pos1 == pos2)
+ continue;
+ temp = col_string[pos1];
+ col_string[pos1] = col_string[pos2];
+ col_string[pos2] = temp;
+ }
+}
+
+/*
+* get a random sub string of "ijklmn"
+*/
+int get_rand_col_str(char *str)
+{
+ int len;
+ static unsigned int num = 0;
+ if(++num == 0)
+ num = 1;
+ srand(num*time(NULL));
+ len = rand() % col_len + 1;
+ change_col_order();
+ snprintf(str, len+1, "%s", col_string); //len+1, including '\0'
+ return len;
+}
+
+/*
+* get a random string including operation and column
+* eg, Alnikx
+*/
+int get_rand_op_str(char *str)
+{
+ char temp[256];
+ int len1, len2, len;
+ len1 = get_rand_op_ch(temp);
+ len2 = get_rand_col_str(temp+len1);
+ len = len1 + len2;
+ temp[len] = 'x';
+ snprintf(str, len+1+1, "%s", temp); //len+1, including '\0'
+ return len+1;
+}
+
+/*
+* replace a letter of source string with a new string
+* e.g., source string: 'Aijkx', replace i with new string 'olmx'
+* then source string is changed to 'Aolmxjkx'
+* source: its format should be produced from get_rand_op_str()
+* pos: range from 1 to strlen(source)-2
+*/
+int replace_a_to_str(char *source, int pos, char *newstr)
+{
+ char temp[MAX_STR_LEN];
+ snprintf(temp, pos+1, "%s", source);
+ snprintf(temp+pos, strlen(newstr)+1, "%s", newstr);
+ snprintf(temp+pos+strlen(newstr), strlen(source)-pos, "%s", source+pos+1);
+ snprintf(source, strlen(temp)+1, "%s", temp);
+ return strlen(source);
+}
+
+/*
+* check whether the inputed char is an operation
+*/
+bool check_op(char ch)
+{
+ if( ch == 'a' || ch == 'A' || ch == 'o' || ch == 'O')
+ return true;
+ else
+ return false;
+}
+
+/*
+* check whether the inputed char is end flag
+*/
+bool check_end(char ch)
+{
+ return (ch == 'x');
+}
+
+/*
+* check whether the inputed char is end flag
+*/
+bool check_col(char ch)
+{
+ if( ch == 'i' || ch == 'j' || ch == 'k'
+ || ch == 'l' || ch == 'm' || ch == 'n' )
+ return true;
+ else
+ return false;
+}
+
+/*
+* To ensure we can get a random string with RECURSIVE_LEVEL,
+* we need a position where can replace a letter with a new string.
+*/
+int get_rand_replace_pos(char *str, int len)
+{
+ int pos_op = 0;
+ int pos_x = 0;
+ int pos_col = 0;
+ int span = 0;
+ static int num = 0;
+ char temp;
+
+ for(int i = 0; i < len; i++)
+ {
+ temp = str[i];
+ if(! check_end(temp))
+ {
+ if(check_op(temp))
+ pos_op = i;
+ }
+ else
+ {
+ pos_x = i;
+ break;
+ }
+ }
+
+ if(++num == 0)
+ num = 1;
+
+ span = pos_x - pos_op - 1;
+ if(span <= 1)
+ {
+ pos_col = pos_op + 1;
+ }
+ else
+ {
+ srand(num*time(NULL));
+ pos_col = pos_op + rand() % span + 1;
+ }
+ return pos_col;
+}
+
+/*
+* Check whether the given random string is valid
+* and applicable for this test case
+*/
+bool check_random_str(char *str)
+{
+ char *p;
+ int op_num = 0;
+ int end_num = 0;
+
+ for(p = str; *p; p++)
+ {
+ bool tmp1 = false, tmp2 = false;
+ if(tmp1 = check_op(*p))
+ op_num++;
+ if(tmp2 = check_end(*p))
+ end_num++;
+ if(!(tmp1 || tmp2 || check_col(*p))) //there are illegal letters
+ return false;
+ }
+
+ if(op_num != end_num) //begins are not equal to ends
+ return false;
+
+ return true;
+}
+
+/*
+* Get a random string with RECURSIVE_LEVEL
+*/
+void get_rand_op_str_compound(char *str)
+{
+ char small_str[256];
+ int pos;
+ int tmp;
+ int level;
+ static int num = 0;
+
+ if(++num == 0)
+ num = 1;
+
+ srand(num*time(NULL));
+ level = 1 + rand() % RECURSIVE_LEVEL;
+
+ get_rand_op_str(str);
+
+ for(int i = 0; i < level; i++)
+ {
+ get_rand_op_str(small_str);
+ tmp = strlen(small_str);
+ get_rand_op_str(small_str + tmp); //get two operations
+ pos = get_rand_replace_pos(str, strlen(str));
+ replace_a_to_str(str, pos, small_str);
+ }
+
+ //check the random string
+ if(!check_random_str(str))
+ {
+ fprintf(stderr, "Error random string! \n");
+ exit(-1);
+ }
+}
+
+/*
+* get column id of i,j,k,l,m,n
+*/
+int get_column_id(char ch)
+{
+ return (ch - 'i' + 1); //from 1 to 6
+}
+
+/*
+* check whether column value of the NO. tuple is equal to 1
+* col_id: column id, range from 1 to 6
+* tuple_no: record NO., range from 0 to 63
+*/
+bool check_col_equal_one(int tuple_no, int col_id)
+{
+ int i = (int)pow(2, 6 - col_id);
+ int j = tuple_no / i;
+ if(j % 2)
+ return true;
+ else
+ return false;
+}
+
+/*
+* get a result after all elements in the array with AND
+* value: pointer to a bool array
+* len: length of the bool array
+*/
+bool AND_op(bool *value, int len)
+{
+ for(int i = 0; i < len; i++)
+ {
+ if(! value[i])
+ return false;
+ }
+ return true;
+}
+
+/*
+* get a result after all elements in the array with OR
+* value: pointer to a bool array
+* len: length of the bool array
+*/
+bool OR_op(bool *value, int len)
+{
+ for(int i = 0; i < len; i++)
+ {
+ if(value[i])
+ return true;
+ }
+ return false;
+}
+
+/*
+* get a result after all elements in the array with NAND
+* value: pointer to a bool array
+* len: length of the bool array
+*/
+bool NAND_op(bool *value, int len)
+{
+ return (! AND_op(value, len));
+}
+
+/*
+* get a result after all elements in the array with NOR
+* value: pointer to a bool array
+* len: length of the bool array
+*/
+bool NOR_op(bool *value, int len)
+{
+ return (! OR_op(value, len));
+}
+
+/*
+* AND/NAND/OR/NOR operation for a bool array
+*/
+bool calculate_one_op(char op_type, bool *value, int len)
+{
+ switch(op_type)
+ {
+ case 'a':
+ return AND_op(value, len);
+ break;
+ case 'o':
+ return OR_op(value, len);
+ break;
+ case 'A':
+ return NAND_op(value, len);
+ break;
+ case 'O':
+ return NOR_op(value, len);
+ break;
+ }
+ return false; //make gcc happy
+}
+
+typedef struct _stack_element
+{
+ char type;
+ int num;
+}stack_element;
+
+/*
+* stack_op, store info for AND,OR,NAND,NOR
+* stack_col, store value of column(i,j,k,l,m,n) and temporary result for an operation
+*/
+stack_element stack_op[RECURSIVE_LEVEL * COL_LEN];
+bool stack_col[RECURSIVE_LEVEL * COL_LEN * 2];
+
+/*
+* check whether the given tuple is chosen by judgement condition
+* tuple_no, the NO of tuple in TABLE_NAME, range from 0 to TUPLE_NUM
+* str: a random string of scan opearation and condition
+* len: length of str
+*/
+bool check_one_tuple(int tuple_no, char *str, int len)
+{
+ int pop_op = 0;
+ int pop_col = 0;
+ for(int i = 0; i < len; i++)
+ {
+ char letter = *(str + i);
+ if(check_op(letter)) //push
+ {
+ stack_op[pop_op].type = letter;
+ stack_op[pop_op].num = 0;
+ pop_op++;
+ }
+ if(check_col(letter)) //push
+ {
+ stack_col[pop_col] = check_col_equal_one(tuple_no, get_column_id(letter));
+ pop_col++;
+ stack_op[pop_op-1].num += 1;
+ }
+ if(check_end(letter))
+ {
+ if(pop_op <= 1)
+ {
+ return calculate_one_op(stack_op[pop_op-1].type,
+ stack_col,
+ stack_op[pop_op-1].num);
+ }
+ else
+ {
+ bool tmp1 = calculate_one_op(stack_op[pop_op-1].type,
+ stack_col + pop_col - stack_op[pop_op-1].num,
+ stack_op[pop_op-1].num);
+ pop_col -= stack_op[pop_op-1].num; //pop
+ pop_op--;
+ stack_col[pop_col] = tmp1; //push
+ pop_col++;
+ stack_op[pop_op-1].num += 1;
+ }
+ }
+ }
+ return false; //make gcc happy
+}
+
+/*
+* get lists of tuples which match the scan condiction through calculating
+* str: a random string of scan opearation and condition
+*/
+void check_all_tuples(char *str, bool *res)
+{
+ for (int i = 0; i < TUPLE_NUM; i++)
+ {
+ if(check_one_tuple(i, str, strlen(str)))
+ res[i] = true;
+ }
+}
+
+/*
+* convert a letter to group number what ndbapi need
+*/
+NdbScanFilter::Group get_api_group(char op_name)
+{
+ switch (op_name) {
+ case 'a': return NdbScanFilter::AND;
+ case 'o': return NdbScanFilter::OR;
+ case 'A': return NdbScanFilter::NAND;
+ case 'O': return NdbScanFilter::NOR;
+ default:
+ fprintf(stderr, "Invalid group name %c !\n", op_name);
+ exit(3);
+ }
+}
+
+/*
+* with ndbapi, call begin, eq/ne/lt/gt/le/ge..., end
+*/
+NdbScanFilter * call_ndbapi(char *str, NdbTransaction *transaction,
+ NdbScanOperation *scan, NdbDictionary::Column const *col[])
+{
+ NdbScanFilter *scanfilter = new NdbScanFilter(scan);
+ char *p;
+
+ for (p = str; *p; p++)
+ {
+ if(check_op(*p))
+ {
+ if(scanfilter->begin(get_api_group(*p)))
+ ERR_EXIT(transaction, "filter begin() failed");
+ }
+ if(check_col(*p))
+ {
+ if(scanfilter->eq(col[*p-'i'+1]->getColumnNo(), (Uint32)1))
+ ERR_EXIT(transaction, "filter eq() failed");
+ }
+ if(check_end(*p))
+ {
+ if(scanfilter->end())
+ ERR_EXIT(transaction, "filter end() failed");
+ }
+ }
+
+ return scanfilter;
+}
+
+/*
+* get the tuples through ndbapi, and save the tuples NO.
+* str: a random string of scan opearation and condition
+*/
+void ndbapi_tuples(Ndb *ndb, char *str, bool *res)
+{
+ const NdbDictionary::Dictionary *dict = ndb->getDictionary();
+ if (!dict)
+ ERR_EXIT(ndb, "Can't get dict");
+
+ const NdbDictionary::Table *table = dict->getTable(TABLE_NAME);
+ if (!table)
+ ERR_EXIT(dict, "Can't get table"TABLE_NAME);
+
+ const NdbDictionary::Column *col[COL_LEN];
+ for(int i = 0; i < COL_LEN; i++)
+ {
+ char tmp[128];
+ col[i] = table->getColumn(COL_NAME[i]);
+ if(!col[i])
+ {
+ snprintf(tmp, 128, "Can't get column %s", COL_NAME[i]);
+ ERR_EXIT(dict, tmp);
+ }
+ }
+
+ NdbTransaction *transaction;
+ NdbScanOperation *scan;
+ NdbScanFilter *filter;
+
+ transaction = ndb->startTransaction();
+ if (!transaction)
+ ERR_EXIT(ndb, "Can't start transaction");
+
+ scan = transaction->getNdbScanOperation(table);
+ if (!scan)
+ ERR_EXIT(transaction, "Can't get scan op");
+
+ if (scan->readTuples(NdbOperation::LM_Exclusive))
+ ERR_EXIT(scan, "Can't set up read");
+
+ NdbRecAttr *rec[COL_LEN];
+ for(int i = 0; i < COL_LEN; i++)
+ {
+ char tmp[128];
+ rec[i] = scan->getValue(COL_NAME[i]);
+ if(!rec[i])
+ {
+ snprintf(tmp, 128, "Can't get rec of %s", COL_NAME[i]);
+ ERR_EXIT(scan, tmp);
+ }
+ }
+
+ filter = call_ndbapi(str, transaction, scan, col);
+
+ if (transaction->execute(NdbTransaction::NoCommit))
+ ERR_EXIT(transaction, "Can't execute");
+
+ int i,j,k,l,m,n;
+ while (scan->nextResult(true) == 0)
+ {
+ do
+ {
+ i = rec[1]->u_32_value();
+ j = rec[2]->u_32_value();
+ k = rec[3]->u_32_value();
+ l = rec[4]->u_32_value();
+ m = rec[5]->u_32_value();
+ n = rec[6]->u_32_value();
+ res[32*i+16*j+8*k+4*l+2*m+n] = true;
+ } while (scan->nextResult(false) == 0);
+ }
+
+ delete filter;
+ transaction->close();
+}
+
+/*
+* compare the result between calculation and NDBAPI
+* str: a random string of scan opearation and condition
+* return: true stands for ndbapi ok, false stands for ndbapi failed
+*/
+bool compare_cal_ndb(char *str, Ndb *ndb)
+{
+ bool res_cal[TUPLE_NUM], res_ndb[TUPLE_NUM];
+
+ for(int i = 0; i < TUPLE_NUM; i++)
+ {
+ res_cal[i] = false;
+ res_ndb[i] = false;
+ }
+
+ check_all_tuples(str, res_cal);
+ ndbapi_tuples(ndb, str, res_ndb);
+
+ for(int i = 0; i < TUPLE_NUM; i++)
+ {
+ if(res_cal[i] != res_ndb[i])
+ return false;
+ }
+ return true;
+}
+
+
+int runCreateTables(NDBT_Context* ctx, NDBT_Step* step)
+{
+ Ndb *pNdb = GETNDB(step);
+ pNdb->getDictionary()->dropTable(MYTAB1.getName());
+ int ret = createTable(pNdb, &MYTAB1, false, true, 0);
+ if(ret)
+ return ret;
+ return NDBT_OK;
+}
+
+
+int runDropTables(NDBT_Context* ctx, NDBT_Step* step)
+{
+ int ret = GETNDB(step)->getDictionary()->dropTable(MYTAB1.getName());
+ if(ret == -1)
+ return NDBT_FAILED;
+
+ return NDBT_OK;
+}
+
+int runScanRandomFilterTest(NDBT_Context* ctx, NDBT_Step* step)
+{
+ char random_str[MAX_STR_LEN];
+ Ndb *myNdb = GETNDB(step);
+ bool res = true;
+
+ for(int i = 0; i < TEST_NUM; i++)
+ {
+ get_rand_op_str_compound(random_str);
+ if( !compare_cal_ndb(random_str, myNdb))
+ return NDBT_FAILED;
+ }
+
+ return NDBT_OK;
+}
+
+NDBT_TESTSUITE(testScanFilter);
+TESTCASE(TEST_NAME,
+ "Scan table TABLE_NAME for the records which accord with \
+ conditions of logical scan operations: AND/OR/NAND/NOR")
+{
+ INITIALIZER(runCreateTables);
+ INITIALIZER(runPopulate);
+ INITIALIZER(runScanRandomFilterTest);
+ FINALIZER(runDropTables);
+}
+
+NDBT_TESTSUITE_END(testScanFilter);
+
+
+int main(int argc, const char** argv)
+{
+ ndb_init();
+
+ Ndb_cluster_connection con;
+ if(con.connect(12, 5, 1))
+ {
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+
+ return testScanFilter.executeOneCtx(con, &MYTAB1, TEST_NAME);
+}
diff --git a/storage/ndb/test/src/NDBT_Test.cpp b/storage/ndb/test/src/NDBT_Test.cpp
index 9c908ab27c6..1245d004aff 100644
--- a/storage/ndb/test/src/NDBT_Test.cpp
+++ b/storage/ndb/test/src/NDBT_Test.cpp
@@ -947,6 +947,63 @@ NDBT_TestSuite::executeOne(Ndb_cluster_connection& con,
}
}
+int
+NDBT_TestSuite::executeOneCtx(Ndb_cluster_connection& con,
+ const NdbDictionary::Table *ptab, const char* _testname){
+
+ testSuiteTimer.doStart();
+
+ do{
+ if(tests.size() == 0)
+ break;
+
+ Ndb ndb(&con, "TEST_DB");
+ ndb.init(1024);
+
+ int result = ndb.waitUntilReady(300); // 5 minutes
+ if (result != 0){
+ g_err << name <<": Ndb was not ready" << endl;
+ break;
+ }
+
+ ndbout << name << " started [" << getDate() << "]" << endl;
+ ndbout << "|- " << ptab->getName() << endl;
+
+ for (unsigned t = 0; t < tests.size(); t++){
+
+ if (_testname != NULL &&
+ strcasecmp(tests[t]->getName(), _testname) != 0)
+ continue;
+
+ tests[t]->initBeforeTest();
+
+ ctx = new NDBT_Context(con);
+ ctx->setTab(ptab);
+ ctx->setNumRecords(records);
+ ctx->setNumLoops(loops);
+ if(remote_mgm != NULL)
+ ctx->setRemoteMgm(remote_mgm);
+ ctx->setSuite(this);
+
+ result = tests[t]->execute(ctx);
+ if (result != NDBT_OK)
+ numTestsFail++;
+ else
+ numTestsOk++;
+ numTestsExecuted++;
+
+ delete ctx;
+ }
+
+ if (numTestsFail > 0)
+ break;
+ }while(0);
+
+ testSuiteTimer.doStop();
+ int res = report(_testname);
+ return NDBT_ProgramExit(res);
+}
+
int
NDBT_TestSuite::createHook(Ndb* ndb, NdbDictionary::Table& tab, int when)
{
diff --git a/storage/ndb/tools/restore/consumer.hpp b/storage/ndb/tools/restore/consumer.hpp
index b05f7e00402..4121cc4e1b4 100644
--- a/storage/ndb/tools/restore/consumer.hpp
+++ b/storage/ndb/tools/restore/consumer.hpp
@@ -41,6 +41,7 @@ public:
NODE_GROUP_MAP *m_nodegroup_map;
uint m_nodegroup_map_len;
virtual bool has_temp_error() {return false;}
+ virtual bool table_equal(const TableS &) {return true;}
};
#endif
diff --git a/storage/ndb/tools/restore/consumer_restore.cpp b/storage/ndb/tools/restore/consumer_restore.cpp
index 03cf3e6ddb7..7e3395c36f6 100644
--- a/storage/ndb/tools/restore/consumer_restore.cpp
+++ b/storage/ndb/tools/restore/consumer_restore.cpp
@@ -668,6 +668,62 @@ err:
}
bool
+BackupRestore::table_equal(const TableS &tableS){
+ const char *tablename = tableS.getTableName();
+
+ if(tableS.m_dictTable == NULL){
+ ndbout<<"Table %s has no m_dictTable " << tablename << endl;
+ return false;
+ }
+ /**
+ * Ignore blob tables
+ */
+ if(match_blob(tablename) >= 0)
+ return true;
+
+ const NdbTableImpl & tmptab = NdbTableImpl::getImpl(* tableS.m_dictTable);
+ if ((int) tmptab.m_indexType != (int) NdbDictionary::Index::Undefined){
+ return true;
+ }
+
+ BaseString tmp(tablename);
+ Vector<BaseString> split;
+ if(tmp.split(split, "/") != 3){
+ err << "Invalid table name format " << tablename << endl;
+ return false;
+ }
+
+ m_ndb->setDatabaseName(split[0].c_str());
+ m_ndb->setSchemaName(split[1].c_str());
+
+ NdbDictionary::Dictionary* dict = m_ndb->getDictionary();
+ const NdbDictionary::Table* tab = dict->getTable(split[2].c_str());
+ if(tab == 0){
+ err << "Unable to find table: " << split[2].c_str() << endl;
+ return false;
+ }
+
+ if(tab->getNoOfColumns() != tableS.m_dictTable->getNoOfColumns())
+ {
+ ndbout_c("m_columns.size %d != %d",tab->getNoOfColumns(),
+ tableS.m_dictTable->getNoOfColumns());
+ return false;
+ }
+
+ for(int i = 0; i<tab->getNoOfColumns(); i++)
+ {
+ if(!tab->getColumn(i)->equal(*(tableS.m_dictTable->getColumn(i))))
+ {
+ ndbout_c("m_columns %s != %s",tab->getColumn(i)->getName(),
+ tableS.m_dictTable->getColumn(i)->getName());
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool
BackupRestore::createSystable(const TableS & tables){
if (!m_restore && !m_restore_meta && !m_restore_epoch)
return true;
diff --git a/storage/ndb/tools/restore/consumer_restore.hpp b/storage/ndb/tools/restore/consumer_restore.hpp
index 5063619d3c3..0bc9d8e8d20 100644
--- a/storage/ndb/tools/restore/consumer_restore.hpp
+++ b/storage/ndb/tools/restore/consumer_restore.hpp
@@ -73,6 +73,7 @@ public:
virtual bool finalize_table(const TableS &);
virtual bool has_temp_error();
virtual bool createSystable(const TableS & table);
+ virtual bool table_equal(const TableS & table);
virtual bool update_apply_status(const RestoreMetaData &metaData);
void connectToMysql();
bool map_in_frm(char *new_data, const char *data,
diff --git a/storage/ndb/tools/restore/restore_main.cpp b/storage/ndb/tools/restore/restore_main.cpp
index 4734e9f609d..ee3af467aa7 100644
--- a/storage/ndb/tools/restore/restore_main.cpp
+++ b/storage/ndb/tools/restore/restore_main.cpp
@@ -50,6 +50,7 @@ NDB_STD_OPTS_VARS;
static bool ga_restore_epoch = false;
static bool ga_restore = false;
static bool ga_print = false;
+static bool ga_skip_table_check = false;
static int _print = 0;
static int _print_meta = 0;
static int _print_data = 0;
@@ -91,6 +92,9 @@ static struct my_option my_long_options[] =
NDB_REP_DB "." NDB_APPLY_TABLE " with id 0 will be updated/inserted.",
(gptr*) &ga_restore_epoch, (gptr*) &ga_restore_epoch, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
+ { "skip-table-check", 's', "Skip table structure check during restore of data",
+ (gptr*) &ga_skip_table_check, (gptr*) &ga_skip_table_check, 0,
+ GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
{ "parallelism", 'p',
"No of parallel transactions during restore of data."
"(parallelism can be 1 to 1024)",
@@ -459,6 +463,8 @@ main(int argc, char** argv)
g_options.appfmt(" -n %d", ga_nodeId);
if (_restore_meta)
g_options.appfmt(" -m");
+ if (ga_skip_table_check)
+ g_options.appfmt(" -s");
if (_restore_data)
g_options.appfmt(" -r");
if (ga_restore_epoch)
@@ -589,6 +595,20 @@ main(int argc, char** argv)
{
if(_restore_data || _print_data)
{
+ if (!ga_skip_table_check){
+ for(i=0; i < metaData.getNoOfTables(); i++){
+ if (checkSysTable(metaData, i))
+ {
+ for(Uint32 j= 0; j < g_consumers.size(); j++)
+ if (!g_consumers[j]->table_equal(* metaData[i]))
+ {
+ err << "Restore: Failed to restore data, ";
+ err << metaData[i]->getTableName() << " table structure doesn't match backup ... Exiting " << endl;
+ exitHandler(NDBT_FAILED);
+ }
+ }
+ }
+ }
RestoreDataIterator dataIter(metaData, &free_data_callback);
// Read data file header