Commit cc728f4a authored by unknown's avatar unknown

Merge lzhou@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb-bj

into  dev3-63.(none):/home/zhl/mysql/mysql-5.1/bug26307
parents 6e10191c 392ee6e9
...@@ -32,6 +32,82 @@ ...@@ -32,6 +32,82 @@
#include <../pgman.hpp> #include <../pgman.hpp>
#include <../tsman.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 #ifdef VM_TRACE
inline const char* dbgmask(const Bitmask<MAXNROFATTRIBUTESINWORDS>& bm) { inline const char* dbgmask(const Bitmask<MAXNROFATTRIBUTESINWORDS>& bm) {
static int i=0; static char buf[5][200]; static int i=0; static char buf[5][200];
...@@ -70,22 +146,23 @@ inline const Uint32* ALIGN_WORD(const void* ptr) ...@@ -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. // only reports the line number in the file it currently is located in.
// //
// DbtupExecQuery.cpp 0 // DbtupExecQuery.cpp 0
// DbtupBuffer.cpp 2000 // DbtupBuffer.cpp 10000
// DbtupRoutines.cpp 3000 // DbtupRoutines.cpp 15000
// DbtupCommit.cpp 5000 // DbtupCommit.cpp 20000
// DbtupFixAlloc.cpp 6000 // DbtupFixAlloc.cpp 25000
// DbtupTrigger.cpp 7000 // DbtupTrigger.cpp 30000
// DbtupAbort.cpp 9000 // DbtupAbort.cpp 35000
// DbtupPageMap.cpp 14000 // DbtupPageMap.cpp 40000
// DbtupPagMan.cpp 16000 // DbtupPagMan.cpp 45000
// DbtupStoredProcDef.cpp 18000 // DbtupStoredProcDef.cpp 50000
// DbtupMeta.cpp 20000 // DbtupMeta.cpp 55000
// DbtupTabDesMan.cpp 22000 // DbtupTabDesMan.cpp 60000
// DbtupGen.cpp 24000 // DbtupGen.cpp 65000
// DbtupIndex.cpp 28000 // DbtupIndex.cpp 70000
// DbtupDebug.cpp 30000 // DbtupDebug.cpp 75000
// DbtupVarAlloc.cpp 32000 // DbtupVarAlloc.cpp 80000
// DbtupScan.cpp 33000 // DbtupScan.cpp 85000
// DbtupDiskAlloc.cpp 90000
//------------------------------------------------------------------ //------------------------------------------------------------------
/* /*
......
...@@ -14,21 +14,19 @@ ...@@ -14,21 +14,19 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_ABORT_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(9000 + __LINE__); }
#define ljamEntry() { jamEntryLine(9000 + __LINE__); }
void Dbtup::freeAllAttrBuffers(Operationrec* const regOperPtr) void Dbtup::freeAllAttrBuffers(Operationrec* const regOperPtr)
{ {
if (regOperPtr->storedProcedureId == RNIL) { if (regOperPtr->storedProcedureId == RNIL) {
ljam(); jam();
freeAttrinbufrec(regOperPtr->firstAttrinbufrec); freeAttrinbufrec(regOperPtr->firstAttrinbufrec);
} else { } else {
ljam(); jam();
StoredProcPtr storedPtr; StoredProcPtr storedPtr;
c_storedProcPool.getPtr(storedPtr, (Uint32)regOperPtr->storedProcedureId); c_storedProcPool.getPtr(storedPtr, (Uint32)regOperPtr->storedProcedureId);
ndbrequire(storedPtr.p->storedCode == ZSCAN_PROCEDURE); ndbrequire(storedPtr.p->storedCode == ZSCAN_PROCEDURE);
...@@ -46,7 +44,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf) ...@@ -46,7 +44,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
Uint32 RnoFree = cnoFreeAttrbufrec; Uint32 RnoFree = cnoFreeAttrbufrec;
localAttrBufPtr.i = anAttrBuf; localAttrBufPtr.i = anAttrBuf;
while (localAttrBufPtr.i != RNIL) { while (localAttrBufPtr.i != RNIL) {
ljam(); jam();
ptrCheckGuard(localAttrBufPtr, cnoOfAttrbufrec, attrbufrec); ptrCheckGuard(localAttrBufPtr, cnoOfAttrbufrec, attrbufrec);
Ttemp = localAttrBufPtr.p->attrbuf[ZBUF_NEXT]; Ttemp = localAttrBufPtr.p->attrbuf[ZBUF_NEXT];
localAttrBufPtr.p->attrbuf[ZBUF_NEXT] = cfirstfreeAttrbufrec; localAttrBufPtr.p->attrbuf[ZBUF_NEXT] = cfirstfreeAttrbufrec;
...@@ -62,7 +60,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf) ...@@ -62,7 +60,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
*/ */
void Dbtup::execTUP_ABORTREQ(Signal* signal) void Dbtup::execTUP_ABORTREQ(Signal* signal)
{ {
ljamEntry(); jamEntry();
do_tup_abortreq(signal, 0); do_tup_abortreq(signal, 0);
} }
...@@ -80,7 +78,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags) ...@@ -80,7 +78,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
(trans_state == TRANS_ERROR_WAIT_TUPKEYREQ) || (trans_state == TRANS_ERROR_WAIT_TUPKEYREQ) ||
(trans_state == TRANS_IDLE)); (trans_state == TRANS_IDLE));
if (regOperPtr.p->op_struct.op_type == ZREAD) { if (regOperPtr.p->op_struct.op_type == ZREAD) {
ljam(); jam();
freeAllAttrBuffers(regOperPtr.p); freeAllAttrBuffers(regOperPtr.p);
initOpConnection(regOperPtr.p); initOpConnection(regOperPtr.p);
return; return;
...@@ -94,7 +92,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags) ...@@ -94,7 +92,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
if (get_tuple_state(regOperPtr.p) == TUPLE_PREPARED) if (get_tuple_state(regOperPtr.p) == TUPLE_PREPARED)
{ {
ljam(); jam();
if (!regTabPtr.p->tuxCustomTriggers.isEmpty() && if (!regTabPtr.p->tuxCustomTriggers.isEmpty() &&
(flags & ZSKIP_TUX_TRIGGERS) == 0) (flags & ZSKIP_TUX_TRIGGERS) == 0)
executeTuxAbortTriggers(signal, executeTuxAbortTriggers(signal,
...@@ -105,12 +103,12 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags) ...@@ -105,12 +103,12 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
OperationrecPtr loopOpPtr; OperationrecPtr loopOpPtr;
loopOpPtr.i = regOperPtr.p->nextActiveOp; loopOpPtr.i = regOperPtr.p->nextActiveOp;
while (loopOpPtr.i != RNIL) { while (loopOpPtr.i != RNIL) {
ljam(); jam();
c_operation_pool.getPtr(loopOpPtr); c_operation_pool.getPtr(loopOpPtr);
if (get_tuple_state(loopOpPtr.p) != TUPLE_ALREADY_ABORTED && if (get_tuple_state(loopOpPtr.p) != TUPLE_ALREADY_ABORTED &&
!regTabPtr.p->tuxCustomTriggers.isEmpty() && !regTabPtr.p->tuxCustomTriggers.isEmpty() &&
(flags & ZSKIP_TUX_TRIGGERS) == 0) { (flags & ZSKIP_TUX_TRIGGERS) == 0) {
ljam(); jam();
executeTuxAbortTriggers(signal, executeTuxAbortTriggers(signal,
loopOpPtr.p, loopOpPtr.p,
regFragPtr.p, regFragPtr.p,
...@@ -211,116 +209,116 @@ int Dbtup::TUPKEY_abort(Signal* signal, int error_type) ...@@ -211,116 +209,116 @@ int Dbtup::TUPKEY_abort(Signal* signal, int error_type)
case 1: case 1:
//tmupdate_alloc_error: //tmupdate_alloc_error:
terrorCode= ZMEM_NOMEM_ERROR; terrorCode= ZMEM_NOMEM_ERROR;
ljam(); jam();
break; break;
case 15: case 15:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 16: case 16:
ljam(); jam();
terrorCode = ZTRY_TO_UPDATE_ERROR; terrorCode = ZTRY_TO_UPDATE_ERROR;
break; break;
case 17: case 17:
ljam(); jam();
terrorCode = ZNO_ILLEGAL_NULL_ATTR; terrorCode = ZNO_ILLEGAL_NULL_ATTR;
break; break;
case 19: case 19:
ljam(); jam();
terrorCode = ZTRY_TO_UPDATE_ERROR; terrorCode = ZTRY_TO_UPDATE_ERROR;
break; break;
case 20: case 20:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 22: case 22:
ljam(); jam();
terrorCode = ZTOTAL_LEN_ERROR; terrorCode = ZTOTAL_LEN_ERROR;
break; break;
case 23: case 23:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 24: case 24:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 26: case 26:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 27: case 27:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 28: case 28:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 29: case 29:
ljam(); jam();
break; break;
case 30: case 30:
ljam(); jam();
terrorCode = ZCALL_ERROR; terrorCode = ZCALL_ERROR;
break; break;
case 31: case 31:
ljam(); jam();
terrorCode = ZSTACK_OVERFLOW_ERROR; terrorCode = ZSTACK_OVERFLOW_ERROR;
break; break;
case 32: case 32:
ljam(); jam();
terrorCode = ZSTACK_UNDERFLOW_ERROR; terrorCode = ZSTACK_UNDERFLOW_ERROR;
break; break;
case 33: case 33:
ljam(); jam();
terrorCode = ZNO_INSTRUCTION_ERROR; terrorCode = ZNO_INSTRUCTION_ERROR;
break; break;
case 34: case 34:
ljam(); jam();
terrorCode = ZOUTSIDE_OF_PROGRAM_ERROR; terrorCode = ZOUTSIDE_OF_PROGRAM_ERROR;
break; break;
case 35: case 35:
ljam(); jam();
terrorCode = ZTOO_MANY_INSTRUCTIONS_ERROR; terrorCode = ZTOO_MANY_INSTRUCTIONS_ERROR;
break; break;
case 38: case 38:
ljam(); jam();
terrorCode = ZTEMPORARY_RESOURCE_FAILURE; terrorCode = ZTEMPORARY_RESOURCE_FAILURE;
break; break;
case 39: case 39:
if (get_trans_state(operPtr.p) == TRANS_TOO_MUCH_AI) { if (get_trans_state(operPtr.p) == TRANS_TOO_MUCH_AI) {
ljam(); jam();
terrorCode = ZTOO_MUCH_ATTRINFO_ERROR; terrorCode = ZTOO_MUCH_ATTRINFO_ERROR;
} else if (get_trans_state(operPtr.p) == TRANS_ERROR_WAIT_TUPKEYREQ) { } else if (get_trans_state(operPtr.p) == TRANS_ERROR_WAIT_TUPKEYREQ) {
ljam(); jam();
terrorCode = ZSEIZE_ATTRINBUFREC_ERROR; terrorCode = ZSEIZE_ATTRINBUFREC_ERROR;
} else { } else {
ndbrequire(false); ndbrequire(false);
}//if }//if
break; break;
case 40: case 40:
ljam(); jam();
terrorCode = ZUNSUPPORTED_BRANCH; terrorCode = ZUNSUPPORTED_BRANCH;
break; break;
default: default:
......
...@@ -14,28 +14,26 @@ ...@@ -14,28 +14,26 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_BUFFER_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#include <signaldata/TransIdAI.hpp> #include <signaldata/TransIdAI.hpp>
#define ljam() { jamLine(2000 + __LINE__); }
#define ljamEntry() { jamEntryLine(2000 + __LINE__); }
void Dbtup::execSEND_PACKED(Signal* signal) void Dbtup::execSEND_PACKED(Signal* signal)
{ {
Uint16 hostId; Uint16 hostId;
Uint32 i; Uint32 i;
Uint32 TpackedListIndex= cpackedListIndex; Uint32 TpackedListIndex= cpackedListIndex;
ljamEntry(); jamEntry();
for (i= 0; i < TpackedListIndex; i++) { for (i= 0; i < TpackedListIndex; i++) {
ljam(); jam();
hostId= cpackedList[i]; hostId= cpackedList[i];
ndbrequire((hostId - 1) < (MAX_NODES - 1)); // Also check not zero ndbrequire((hostId - 1) < (MAX_NODES - 1)); // Also check not zero
Uint32 TpacketTA= hostBuffer[hostId].noOfPacketsTA; Uint32 TpacketTA= hostBuffer[hostId].noOfPacketsTA;
if (TpacketTA != 0) { if (TpacketTA != 0) {
ljam(); jam();
BlockReference TBref= numberToRef(API_PACKED, hostId); BlockReference TBref= numberToRef(API_PACKED, hostId);
Uint32 TpacketLen= hostBuffer[hostId].packetLenTA; Uint32 TpacketLen= hostBuffer[hostId].packetLenTA;
MEMCOPY_NO_WORDS(&signal->theData[0], MEMCOPY_NO_WORDS(&signal->theData[0],
...@@ -73,7 +71,7 @@ void Dbtup::bufferTRANSID_AI(Signal* signal, BlockReference aRef, ...@@ -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 // There is still space in the buffer. We will copy it into the
// buffer. // buffer.
// ---------------------------------------------------------------- // ----------------------------------------------------------------
ljam(); jam();
updatePackedList(signal, hostId); updatePackedList(signal, hostId);
} else if (false && TnoOfPackets == 1) { } else if (false && TnoOfPackets == 1) {
// ---------------------------------------------------------------- // ----------------------------------------------------------------
...@@ -118,7 +116,7 @@ void Dbtup::updatePackedList(Signal* signal, Uint16 hostId) ...@@ -118,7 +116,7 @@ void Dbtup::updatePackedList(Signal* signal, Uint16 hostId)
{ {
if (hostBuffer[hostId].inPackedList == false) { if (hostBuffer[hostId].inPackedList == false) {
Uint32 TpackedListIndex= cpackedListIndex; Uint32 TpackedListIndex= cpackedListIndex;
ljam(); jam();
hostBuffer[hostId].inPackedList= true; hostBuffer[hostId].inPackedList= true;
cpackedList[TpackedListIndex]= hostId; cpackedList[TpackedListIndex]= hostId;
cpackedListIndex= TpackedListIndex + 1; cpackedListIndex= TpackedListIndex + 1;
...@@ -149,7 +147,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -149,7 +147,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
if (ERROR_INSERTED(4006) && (nodeId != getOwnNodeId())){ if (ERROR_INSERTED(4006) && (nodeId != getOwnNodeId())){
// Use error insert to turn routing on // Use error insert to turn routing on
ljam(); jam();
connectedToNode= false; connectedToNode= false;
} }
...@@ -167,18 +165,18 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -167,18 +165,18 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
* Own node -> execute direct * Own node -> execute direct
*/ */
if(nodeId != getOwnNodeId()){ if(nodeId != getOwnNodeId()){
ljam(); jam();
/** /**
* Send long sig * Send long sig
*/ */
if (ToutBufIndex >= 22 && is_api && !old_dest) { if (ToutBufIndex >= 22 && is_api && !old_dest) {
ljam(); jam();
/** /**
* Flush buffer so that order is maintained * Flush buffer so that order is maintained
*/ */
if (TpacketTA != 0) { if (TpacketTA != 0) {
ljam(); jam();
BlockReference TBref = numberToRef(API_PACKED, nodeId); BlockReference TBref = numberToRef(API_PACKED, nodeId);
MEMCOPY_NO_WORDS(&signal->theData[0], MEMCOPY_NO_WORDS(&signal->theData[0],
&hostBuffer[nodeId].packetBufferTA[0], &hostBuffer[nodeId].packetBufferTA[0],
...@@ -202,7 +200,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -202,7 +200,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
*/ */
#ifndef NDB_NO_DROPPED_SIGNAL #ifndef NDB_NO_DROPPED_SIGNAL
if (ToutBufIndex < 22 && is_api){ if (ToutBufIndex < 22 && is_api){
ljam(); jam();
bufferTRANSID_AI(signal, recBlockref, 3+ToutBufIndex); bufferTRANSID_AI(signal, recBlockref, 3+ToutBufIndex);
return; return;
} }
...@@ -214,7 +212,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -214,7 +212,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 * src= signal->theData+25; Uint32 * src= signal->theData+25;
if (ToutBufIndex >= 22){ if (ToutBufIndex >= 22){
do { do {
ljam(); jam();
MEMCOPY_NO_WORDS(&signal->theData[3], src, 22); MEMCOPY_NO_WORDS(&signal->theData[3], src, 22);
sendSignal(recBlockref, GSN_TRANSID_AI, signal, 25, JBB); sendSignal(recBlockref, GSN_TRANSID_AI, signal, 25, JBB);
ToutBufIndex -= 22; ToutBufIndex -= 22;
...@@ -223,14 +221,14 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -223,14 +221,14 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
} }
if (ToutBufIndex > 0){ if (ToutBufIndex > 0){
ljam(); jam();
MEMCOPY_NO_WORDS(&signal->theData[3], src, ToutBufIndex); MEMCOPY_NO_WORDS(&signal->theData[3], src, ToutBufIndex);
sendSignal(recBlockref, GSN_TRANSID_AI, signal, 3+ToutBufIndex, JBB); sendSignal(recBlockref, GSN_TRANSID_AI, signal, 3+ToutBufIndex, JBB);
} }
return; return;
} }
EXECUTE_DIRECT(block, GSN_TRANSID_AI, signal, 3 + ToutBufIndex); EXECUTE_DIRECT(block, GSN_TRANSID_AI, signal, 3 + ToutBufIndex);
ljamEntry(); jamEntry();
return; return;
} }
...@@ -242,7 +240,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -242,7 +240,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 routeBlockref= req_struct->TC_ref; Uint32 routeBlockref= req_struct->TC_ref;
if (true){ // TODO is_api && !old_dest){ if (true){ // TODO is_api && !old_dest){
ljam(); jam();
transIdAI->attrData[0]= recBlockref; transIdAI->attrData[0]= recBlockref;
LinearSectionPtr ptr[3]; LinearSectionPtr ptr[3];
ptr[0].p= &signal->theData[25]; ptr[0].p= &signal->theData[25];
...@@ -260,7 +258,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -260,7 +258,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 sent= 0; Uint32 sent= 0;
Uint32 maxLen= TransIdAI::DataLength - 1; Uint32 maxLen= TransIdAI::DataLength - 1;
while (sent < tot) { while (sent < tot) {
ljam(); jam();
Uint32 dataLen= (tot - sent > maxLen) ? maxLen : tot - sent; Uint32 dataLen= (tot - sent > maxLen) ? maxLen : tot - sent;
Uint32 sigLen= dataLen + TransIdAI::HeaderLength + 1; Uint32 sigLen= dataLen + TransIdAI::HeaderLength + 1;
MEMCOPY_NO_WORDS(&transIdAI->attrData, MEMCOPY_NO_WORDS(&transIdAI->attrData,
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_COMMIT_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -21,16 +22,13 @@ ...@@ -21,16 +22,13 @@
#include <signaldata/TupCommit.hpp> #include <signaldata/TupCommit.hpp>
#include "../dblqh/Dblqh.hpp" #include "../dblqh/Dblqh.hpp"
#define ljam() { jamLine(5000 + __LINE__); }
#define ljamEntry() { jamEntryLine(5000 + __LINE__); }
void Dbtup::execTUP_DEALLOCREQ(Signal* signal) void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
{ {
TablerecPtr regTabPtr; TablerecPtr regTabPtr;
FragrecordPtr regFragPtr; FragrecordPtr regFragPtr;
Uint32 frag_page_id, frag_id; Uint32 frag_page_id, frag_id;
ljamEntry(); jamEntry();
frag_id= signal->theData[0]; frag_id= signal->theData[0];
regTabPtr.i= signal->theData[1]; regTabPtr.i= signal->theData[1];
...@@ -62,7 +60,7 @@ void Dbtup::execTUP_DEALLOCREQ(Signal* signal) ...@@ -62,7 +60,7 @@ void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
if (regTabPtr.p->m_attributes[MM].m_no_of_varsize) if (regTabPtr.p->m_attributes[MM].m_no_of_varsize)
{ {
ljam(); jam();
free_var_rec(regFragPtr.p, regTabPtr.p, &tmp, pagePtr); free_var_rec(regFragPtr.p, regTabPtr.p, &tmp, pagePtr);
} else { } else {
free_fix_rec(regFragPtr.p, regTabPtr.p, &tmp, (Fix_page*)pagePtr.p); free_fix_rec(regFragPtr.p, regTabPtr.p, &tmp, (Fix_page*)pagePtr.p);
...@@ -78,7 +76,7 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal) ...@@ -78,7 +76,7 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
Uint32 gci= signal->theData[1]; Uint32 gci= signal->theData[1];
c_operation_pool.getPtr(loopOpPtr); c_operation_pool.getPtr(loopOpPtr);
while (loopOpPtr.p->prevActiveOp != RNIL) { while (loopOpPtr.p->prevActiveOp != RNIL) {
ljam(); jam();
loopOpPtr.i= loopOpPtr.p->prevActiveOp; loopOpPtr.i= loopOpPtr.p->prevActiveOp;
c_operation_pool.getPtr(loopOpPtr); c_operation_pool.getPtr(loopOpPtr);
} }
...@@ -87,11 +85,11 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal) ...@@ -87,11 +85,11 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
signal->theData[0]= loopOpPtr.p->userpointer; signal->theData[0]= loopOpPtr.p->userpointer;
signal->theData[1]= gci; signal->theData[1]= gci;
if (loopOpPtr.p->nextActiveOp == RNIL) { if (loopOpPtr.p->nextActiveOp == RNIL) {
ljam(); jam();
EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2); EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2);
return; return;
} }
ljam(); jam();
EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2); EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2);
jamEntry(); jamEntry();
loopOpPtr.i= loopOpPtr.p->nextActiveOp; loopOpPtr.i= loopOpPtr.p->nextActiveOp;
...@@ -114,16 +112,16 @@ void Dbtup::removeActiveOpList(Operationrec* const regOperPtr, ...@@ -114,16 +112,16 @@ void Dbtup::removeActiveOpList(Operationrec* const regOperPtr,
if (regOperPtr->op_struct.in_active_list) { if (regOperPtr->op_struct.in_active_list) {
regOperPtr->op_struct.in_active_list= false; regOperPtr->op_struct.in_active_list= false;
if (regOperPtr->nextActiveOp != RNIL) { if (regOperPtr->nextActiveOp != RNIL) {
ljam(); jam();
raoOperPtr.i= regOperPtr->nextActiveOp; raoOperPtr.i= regOperPtr->nextActiveOp;
c_operation_pool.getPtr(raoOperPtr); c_operation_pool.getPtr(raoOperPtr);
raoOperPtr.p->prevActiveOp= regOperPtr->prevActiveOp; raoOperPtr.p->prevActiveOp= regOperPtr->prevActiveOp;
} else { } else {
ljam(); jam();
tuple_ptr->m_operation_ptr_i = regOperPtr->prevActiveOp; tuple_ptr->m_operation_ptr_i = regOperPtr->prevActiveOp;
} }
if (regOperPtr->prevActiveOp != RNIL) { if (regOperPtr->prevActiveOp != RNIL) {
ljam(); jam();
raoOperPtr.i= regOperPtr->prevActiveOp; raoOperPtr.i= regOperPtr->prevActiveOp;
c_operation_pool.getPtr(raoOperPtr); c_operation_pool.getPtr(raoOperPtr);
raoOperPtr.p->nextActiveOp= regOperPtr->nextActiveOp; raoOperPtr.p->nextActiveOp= regOperPtr->nextActiveOp;
...@@ -343,7 +341,7 @@ Dbtup::disk_page_commit_callback(Signal* signal, ...@@ -343,7 +341,7 @@ Dbtup::disk_page_commit_callback(Signal* signal,
Uint32 gci; Uint32 gci;
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
ljamEntry(); jamEntry();
c_operation_pool.getPtr(regOperPtr, opPtrI); c_operation_pool.getPtr(regOperPtr, opPtrI);
c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci); c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
...@@ -379,7 +377,7 @@ Dbtup::disk_page_log_buffer_callback(Signal* signal, ...@@ -379,7 +377,7 @@ Dbtup::disk_page_log_buffer_callback(Signal* signal,
Uint32 gci; Uint32 gci;
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
ljamEntry(); jamEntry();
c_operation_pool.getPtr(regOperPtr, opPtrI); c_operation_pool.getPtr(regOperPtr, opPtrI);
c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci); c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
...@@ -447,7 +445,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal) ...@@ -447,7 +445,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
TupCommitReq * const tupCommitReq= (TupCommitReq *)signal->getDataPtr(); TupCommitReq * const tupCommitReq= (TupCommitReq *)signal->getDataPtr();
regOperPtr.i= tupCommitReq->opPtr; regOperPtr.i= tupCommitReq->opPtr;
ljamEntry(); jamEntry();
c_operation_pool.getPtr(regOperPtr); c_operation_pool.getPtr(regOperPtr);
if(!regOperPtr.p->is_first_operation()) if(!regOperPtr.p->is_first_operation())
...@@ -603,7 +601,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal) ...@@ -603,7 +601,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
* why can't we instead remove "own version" (when approriate ofcourse) * why can't we instead remove "own version" (when approriate ofcourse)
*/ */
if (!regTabPtr.p->tuxCustomTriggers.isEmpty()) { if (!regTabPtr.p->tuxCustomTriggers.isEmpty()) {
ljam(); jam();
OperationrecPtr loopPtr= regOperPtr; OperationrecPtr loopPtr= regOperPtr;
while(loopPtr.i != RNIL) while(loopPtr.i != RNIL)
{ {
...@@ -656,18 +654,18 @@ Dbtup::set_change_mask_info(KeyReqStruct * const req_struct, ...@@ -656,18 +654,18 @@ Dbtup::set_change_mask_info(KeyReqStruct * const req_struct,
{ {
ChangeMaskState state = get_change_mask_state(regOperPtr); ChangeMaskState state = get_change_mask_state(regOperPtr);
if (state == USE_SAVED_CHANGE_MASK) { if (state == USE_SAVED_CHANGE_MASK) {
ljam(); jam();
req_struct->changeMask.setWord(0, regOperPtr->saved_change_mask[0]); req_struct->changeMask.setWord(0, regOperPtr->saved_change_mask[0]);
req_struct->changeMask.setWord(1, regOperPtr->saved_change_mask[1]); req_struct->changeMask.setWord(1, regOperPtr->saved_change_mask[1]);
} else if (state == RECALCULATE_CHANGE_MASK) { } else if (state == RECALCULATE_CHANGE_MASK) {
ljam(); jam();
// Recompute change mask, for now set all bits // Recompute change mask, for now set all bits
req_struct->changeMask.set(); req_struct->changeMask.set();
} else if (state == SET_ALL_MASK) { } else if (state == SET_ALL_MASK) {
ljam(); jam();
req_struct->changeMask.set(); req_struct->changeMask.set();
} else { } else {
ljam(); jam();
ndbrequire(state == DELETE_CHANGES); ndbrequire(state == DELETE_CHANGES);
req_struct->changeMask.set(); req_struct->changeMask.set();
} }
...@@ -687,17 +685,17 @@ Dbtup::calculateChangeMask(Page* const pagePtr, ...@@ -687,17 +685,17 @@ Dbtup::calculateChangeMask(Page* const pagePtr,
ndbrequire(loopOpPtr.p->op_struct.op_type == ZUPDATE); ndbrequire(loopOpPtr.p->op_struct.op_type == ZUPDATE);
ChangeMaskState change_mask= get_change_mask_state(loopOpPtr.p); ChangeMaskState change_mask= get_change_mask_state(loopOpPtr.p);
if (change_mask == USE_SAVED_CHANGE_MASK) { if (change_mask == USE_SAVED_CHANGE_MASK) {
ljam(); jam();
saved_word1|= loopOpPtr.p->saved_change_mask[0]; saved_word1|= loopOpPtr.p->saved_change_mask[0];
saved_word2|= loopOpPtr.p->saved_change_mask[1]; saved_word2|= loopOpPtr.p->saved_change_mask[1];
} else if (change_mask == RECALCULATE_CHANGE_MASK) { } else if (change_mask == RECALCULATE_CHANGE_MASK) {
ljam(); jam();
//Recompute change mask, for now set all bits //Recompute change mask, for now set all bits
req_struct->changeMask.set(); req_struct->changeMask.set();
return; return;
} else { } else {
ndbrequire(change_mask == SET_ALL_MASK); ndbrequire(change_mask == SET_ALL_MASK);
ljam(); jam();
req_struct->changeMask.set(); req_struct->changeMask.set();
return; return;
} }
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_DEBUG_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -24,9 +25,6 @@ ...@@ -24,9 +25,6 @@
#include <signaldata/EventReport.hpp> #include <signaldata/EventReport.hpp>
#include <Vector.hpp> #include <Vector.hpp>
#define ljam() { jamLine(30000 + __LINE__); }
#define ljamEntry() { jamEntryLine(30000 + __LINE__); }
/* **************************************************************** */ /* **************************************************************** */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* ------------------------ DEBUG MODULE -------------------------- */ /* ------------------------ DEBUG MODULE -------------------------- */
...@@ -35,7 +33,7 @@ ...@@ -35,7 +33,7 @@
void Dbtup::execDEBUG_SIG(Signal* signal) void Dbtup::execDEBUG_SIG(Signal* signal)
{ {
PagePtr regPagePtr; PagePtr regPagePtr;
ljamEntry(); jamEntry();
regPagePtr.i = signal->theData[0]; regPagePtr.i = signal->theData[0];
c_page_pool.getPtr(regPagePtr); c_page_pool.getPtr(regPagePtr);
}//Dbtup::execDEBUG_SIG() }//Dbtup::execDEBUG_SIG()
...@@ -248,18 +246,18 @@ void Dbtup::execMEMCHECKREQ(Signal* signal) ...@@ -248,18 +246,18 @@ void Dbtup::execMEMCHECKREQ(Signal* signal)
PagePtr regPagePtr; PagePtr regPagePtr;
Uint32* data = &signal->theData[0]; Uint32* data = &signal->theData[0];
ljamEntry(); jamEntry();
BlockReference blockref = signal->theData[0]; BlockReference blockref = signal->theData[0];
Uint32 i; Uint32 i;
for (i = 0; i < 25; i++) { for (i = 0; i < 25; i++) {
ljam(); jam();
data[i] = 0; data[i] = 0;
}//for }//for
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
regPagePtr.i = cfreepageList[i]; regPagePtr.i = cfreepageList[i];
ljam(); jam();
while (regPagePtr.i != RNIL) { while (regPagePtr.i != RNIL) {
ljam(); jam();
ptrCheckGuard(regPagePtr, cnoOfPage, cpage); ptrCheckGuard(regPagePtr, cnoOfPage, cpage);
regPagePtr.i = regPagePtr.p->next_page; regPagePtr.i = regPagePtr.p->next_page;
data[0]++; data[0]++;
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_DISK_ALLOC_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
static bool f_undo_done = true; static bool f_undo_done = true;
......
...@@ -14,14 +14,12 @@ ...@@ -14,14 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_FIXALLOC_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(6000 + __LINE__); }
#define ljamEntry() { jamEntryLine(6000 + __LINE__); }
// //
// Fixed Allocator // Fixed Allocator
// This module is used to allocate and free fixed size tuples from the // This module is used to allocate and free fixed size tuples from the
...@@ -79,7 +77,7 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr, ...@@ -79,7 +77,7 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
pagePtr.i = getEmptyPage(regFragPtr); pagePtr.i = getEmptyPage(regFragPtr);
if (pagePtr.i != RNIL) { if (pagePtr.i != RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
// We found empty pages on the fragment. Allocate an empty page and // 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. // convert it into a tuple header page and put it in thFreeFirst-list.
...@@ -95,14 +93,14 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr, ...@@ -95,14 +93,14 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst);
free_pages.add(pagePtr); free_pages.add(pagePtr);
} else { } else {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THERE ARE NO EMPTY PAGES. MEMORY CAN NOT BE ALLOCATED. */ /* THERE ARE NO EMPTY PAGES. MEMORY CAN NOT BE ALLOCATED. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
return 0; return 0;
} }
} else { } else {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THIS SHOULD BE THE COMMON PATH THROUGH THE CODE, FREE */ /* THIS SHOULD BE THE COMMON PATH THROUGH THE CODE, FREE */
/* COPY PAGE EXISTED. */ /* COPY PAGE EXISTED. */
...@@ -194,7 +192,7 @@ void Dbtup::free_fix_rec(Fragrecord* regFragPtr, ...@@ -194,7 +192,7 @@ void Dbtup::free_fix_rec(Fragrecord* regFragPtr,
if(free == 1) if(free == 1)
{ {
ljam(); jam();
PagePtr pagePtr = { (Page*)regPagePtr, key->m_page_no }; PagePtr pagePtr = { (Page*)regPagePtr, key->m_page_no };
LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst);
ndbrequire(regPagePtr->page_state == ZTH_MM_FULL); ndbrequire(regPagePtr->page_state == ZTH_MM_FULL);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_GEN_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -34,9 +35,6 @@ ...@@ -34,9 +35,6 @@
#define DEBUG(x) { ndbout << "TUP::" << x << endl; } #define DEBUG(x) { ndbout << "TUP::" << x << endl; }
#define ljam() { jamLine(24000 + __LINE__); }
#define ljamEntry() { jamEntryLine(24000 + __LINE__); }
void Dbtup::initData() void Dbtup::initData()
{ {
cnoOfAttrbufrec = ZNO_OF_ATTRBUFREC; cnoOfAttrbufrec = ZNO_OF_ATTRBUFREC;
...@@ -152,21 +150,21 @@ BLOCK_FUNCTIONS(Dbtup) ...@@ -152,21 +150,21 @@ BLOCK_FUNCTIONS(Dbtup)
void Dbtup::execCONTINUEB(Signal* signal) void Dbtup::execCONTINUEB(Signal* signal)
{ {
ljamEntry(); jamEntry();
Uint32 actionType = signal->theData[0]; Uint32 actionType = signal->theData[0];
Uint32 dataPtr = signal->theData[1]; Uint32 dataPtr = signal->theData[1];
switch (actionType) { switch (actionType) {
case ZINITIALISE_RECORDS: case ZINITIALISE_RECORDS:
ljam(); jam();
initialiseRecordsLab(signal, dataPtr, initialiseRecordsLab(signal, dataPtr,
signal->theData[2], signal->theData[3]); signal->theData[2], signal->theData[3]);
break; break;
case ZREL_FRAG: case ZREL_FRAG:
ljam(); jam();
releaseFragment(signal, dataPtr, signal->theData[2]); releaseFragment(signal, dataPtr, signal->theData[2]);
break; break;
case ZREPORT_MEMORY_USAGE:{ case ZREPORT_MEMORY_USAGE:{
ljam(); jam();
static int c_currentMemUsed = 0; static int c_currentMemUsed = 0;
Uint32 cnt = signal->theData[1]; Uint32 cnt = signal->theData[1];
Uint32 tmp = c_page_pool.getSize(); Uint32 tmp = c_page_pool.getSize();
...@@ -201,11 +199,11 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -201,11 +199,11 @@ void Dbtup::execCONTINUEB(Signal* signal)
return; return;
} }
case ZBUILD_INDEX: case ZBUILD_INDEX:
ljam(); jam();
buildIndex(signal, dataPtr); buildIndex(signal, dataPtr);
break; break;
case ZTUP_SCAN: case ZTUP_SCAN:
ljam(); jam();
{ {
ScanOpPtr scanPtr; ScanOpPtr scanPtr;
c_scanOpPool.getPtr(scanPtr, dataPtr); c_scanOpPool.getPtr(scanPtr, dataPtr);
...@@ -214,7 +212,7 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -214,7 +212,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
return; return;
case ZFREE_EXTENT: case ZFREE_EXTENT:
{ {
ljam(); jam();
TablerecPtr tabPtr; TablerecPtr tabPtr;
tabPtr.i= dataPtr; tabPtr.i= dataPtr;
...@@ -227,7 +225,7 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -227,7 +225,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
} }
case ZUNMAP_PAGES: case ZUNMAP_PAGES:
{ {
ljam(); jam();
TablerecPtr tabPtr; TablerecPtr tabPtr;
tabPtr.i= dataPtr; tabPtr.i= dataPtr;
...@@ -240,7 +238,7 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -240,7 +238,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
} }
case ZFREE_VAR_PAGES: case ZFREE_VAR_PAGES:
{ {
ljam(); jam();
drop_fragment_free_var_pages(signal); drop_fragment_free_var_pages(signal);
return; return;
} }
...@@ -257,12 +255,12 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -257,12 +255,12 @@ void Dbtup::execCONTINUEB(Signal* signal)
/* **************************************************************** */ /* **************************************************************** */
void Dbtup::execSTTOR(Signal* signal) void Dbtup::execSTTOR(Signal* signal)
{ {
ljamEntry(); jamEntry();
Uint32 startPhase = signal->theData[1]; Uint32 startPhase = signal->theData[1];
Uint32 sigKey = signal->theData[6]; Uint32 sigKey = signal->theData[6];
switch (startPhase) { switch (startPhase) {
case ZSTARTPHASE1: case ZSTARTPHASE1:
ljam(); jam();
CLEAR_ERROR_INSERT_VALUE; CLEAR_ERROR_INSERT_VALUE;
ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0); ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0);
ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0); ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0);
...@@ -270,7 +268,7 @@ void Dbtup::execSTTOR(Signal* signal) ...@@ -270,7 +268,7 @@ void Dbtup::execSTTOR(Signal* signal)
cownref = calcTupBlockRef(0); cownref = calcTupBlockRef(0);
break; break;
default: default:
ljam(); jam();
break; break;
}//switch }//switch
signal->theData[0] = sigKey; signal->theData[0] = sigKey;
...@@ -293,7 +291,7 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal) ...@@ -293,7 +291,7 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal)
Uint32 senderData = req->senderData; Uint32 senderData = req->senderData;
ndbrequire(req->noOfParameters == 0); ndbrequire(req->noOfParameters == 0);
ljamEntry(); jamEntry();
const ndb_mgm_configuration_iterator * p = const ndb_mgm_configuration_iterator * p =
m_ctx.m_config.getOwnConfigIterator(); m_ctx.m_config.getOwnConfigIterator();
...@@ -413,58 +411,58 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData, ...@@ -413,58 +411,58 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
{ {
switch (switchData) { switch (switchData) {
case 0: case 0:
ljam(); jam();
initializeHostBuffer(); initializeHostBuffer();
break; break;
case 1: case 1:
ljam(); jam();
initializeOperationrec(); initializeOperationrec();
break; break;
case 2: case 2:
ljam(); jam();
initializePage(); initializePage();
break; break;
case 3: case 3:
ljam(); jam();
break; break;
case 4: case 4:
ljam(); jam();
initializeTablerec(); initializeTablerec();
break; break;
case 5: case 5:
ljam(); jam();
break; break;
case 6: case 6:
ljam(); jam();
initializeFragrecord(); initializeFragrecord();
break; break;
case 7: case 7:
ljam(); jam();
initializeFragoperrec(); initializeFragoperrec();
break; break;
case 8: case 8:
ljam(); jam();
initializePageRange(); initializePageRange();
break; break;
case 9: case 9:
ljam(); jam();
initializeTabDescr(); initializeTabDescr();
break; break;
case 10: case 10:
ljam(); jam();
break; break;
case 11: case 11:
ljam(); jam();
break; break;
case 12: case 12:
ljam(); jam();
initializeAttrbufrec(); initializeAttrbufrec();
break; break;
case 13: case 13:
ljam(); jam();
break; break;
case 14: case 14:
ljam(); jam();
{ {
ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend(); ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend();
...@@ -488,28 +486,28 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData, ...@@ -488,28 +486,28 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
void Dbtup::execNDB_STTOR(Signal* signal) void Dbtup::execNDB_STTOR(Signal* signal)
{ {
ljamEntry(); jamEntry();
cndbcntrRef = signal->theData[0]; cndbcntrRef = signal->theData[0];
Uint32 ownNodeId = signal->theData[1]; Uint32 ownNodeId = signal->theData[1];
Uint32 startPhase = signal->theData[2]; Uint32 startPhase = signal->theData[2];
switch (startPhase) { switch (startPhase) {
case ZSTARTPHASE1: case ZSTARTPHASE1:
ljam(); jam();
cownNodeId = ownNodeId; cownNodeId = ownNodeId;
cownref = calcTupBlockRef(ownNodeId); cownref = calcTupBlockRef(ownNodeId);
break; break;
case ZSTARTPHASE2: case ZSTARTPHASE2:
ljam(); jam();
break; break;
case ZSTARTPHASE3: case ZSTARTPHASE3:
ljam(); jam();
startphase3Lab(signal, ~0, ~0); startphase3Lab(signal, ~0, ~0);
break; break;
case ZSTARTPHASE4: case ZSTARTPHASE4:
ljam(); jam();
break; break;
case ZSTARTPHASE6: case ZSTARTPHASE6:
ljam(); jam();
/*****************************************/ /*****************************************/
/* NOW SET THE DISK WRITE SPEED TO */ /* NOW SET THE DISK WRITE SPEED TO */
/* PAGES PER TICK AFTER SYSTEM */ /* PAGES PER TICK AFTER SYSTEM */
...@@ -520,7 +518,7 @@ void Dbtup::execNDB_STTOR(Signal* signal) ...@@ -520,7 +518,7 @@ void Dbtup::execNDB_STTOR(Signal* signal)
sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 1000, 1); sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 1000, 1);
break; break;
default: default:
ljam(); jam();
break; break;
}//switch }//switch
signal->theData[0] = cownref; signal->theData[0] = cownref;
...@@ -597,7 +595,7 @@ void Dbtup::initializeTablerec() ...@@ -597,7 +595,7 @@ void Dbtup::initializeTablerec()
{ {
TablerecPtr regTabPtr; TablerecPtr regTabPtr;
for (regTabPtr.i = 0; regTabPtr.i < cnoOfTablerec; regTabPtr.i++) { for (regTabPtr.i = 0; regTabPtr.i < cnoOfTablerec; regTabPtr.i++) {
ljam(); jam();
refresh_watch_dog(); refresh_watch_dog();
ptrAss(regTabPtr, tablerec); ptrAss(regTabPtr, tablerec);
initTab(regTabPtr.p); initTab(regTabPtr.p);
...@@ -668,12 +666,12 @@ void Dbtup::initializeTabDescr() ...@@ -668,12 +666,12 @@ void Dbtup::initializeTabDescr()
void Dbtup::execTUPSEIZEREQ(Signal* signal) void Dbtup::execTUPSEIZEREQ(Signal* signal)
{ {
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
ljamEntry(); jamEntry();
Uint32 userPtr = signal->theData[0]; Uint32 userPtr = signal->theData[0];
BlockReference userRef = signal->theData[1]; BlockReference userRef = signal->theData[1];
if (!c_operation_pool.seize(regOperPtr)) if (!c_operation_pool.seize(regOperPtr))
{ {
ljam(); jam();
signal->theData[0] = userPtr; signal->theData[0] = userPtr;
signal->theData[1] = ZGET_OPREC_ERROR; signal->theData[1] = ZGET_OPREC_ERROR;
sendSignal(userRef, GSN_TUPSEIZEREF, signal, 2, JBB); sendSignal(userRef, GSN_TUPSEIZEREF, signal, 2, JBB);
...@@ -707,7 +705,7 @@ void Dbtup::execTUPSEIZEREQ(Signal* signal) ...@@ -707,7 +705,7 @@ void Dbtup::execTUPSEIZEREQ(Signal* signal)
void Dbtup::execTUPRELEASEREQ(Signal* signal) void Dbtup::execTUPRELEASEREQ(Signal* signal)
{ {
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
ljamEntry(); jamEntry();
regOperPtr.i = signal->theData[0]; regOperPtr.i = signal->theData[0];
c_operation_pool.getPtr(regOperPtr); c_operation_pool.getPtr(regOperPtr);
set_trans_state(regOperPtr.p, TRANS_DISCONNECTED); set_trans_state(regOperPtr.p, TRANS_DISCONNECTED);
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_INDEX_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -23,9 +24,6 @@ ...@@ -23,9 +24,6 @@
#include <AttributeHeader.hpp> #include <AttributeHeader.hpp>
#include <signaldata/TuxMaint.hpp> #include <signaldata/TuxMaint.hpp>
#define ljam() { jamLine(28000 + __LINE__); }
#define ljamEntry() { jamEntryLine(28000 + __LINE__); }
// methods used by ordered index // methods used by ordered index
void void
...@@ -34,7 +32,7 @@ Dbtup::tuxGetTupAddr(Uint32 fragPtrI, ...@@ -34,7 +32,7 @@ Dbtup::tuxGetTupAddr(Uint32 fragPtrI,
Uint32 pageIndex, Uint32 pageIndex,
Uint32& tupAddr) Uint32& tupAddr)
{ {
ljamEntry(); jamEntry();
PagePtr pagePtr; PagePtr pagePtr;
c_page_pool.getPtr(pagePtr, pageId); c_page_pool.getPtr(pagePtr, pageId);
Uint32 fragPageId= pagePtr.p->frag_page_id; Uint32 fragPageId= pagePtr.p->frag_page_id;
...@@ -48,7 +46,7 @@ Dbtup::tuxAllocNode(Signal* signal, ...@@ -48,7 +46,7 @@ Dbtup::tuxAllocNode(Signal* signal,
Uint32& pageOffset, Uint32& pageOffset,
Uint32*& node) Uint32*& node)
{ {
ljamEntry(); jamEntry();
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...@@ -61,7 +59,7 @@ Dbtup::tuxAllocNode(Signal* signal, ...@@ -61,7 +59,7 @@ Dbtup::tuxAllocNode(Signal* signal,
Uint32* ptr, frag_page_id; Uint32* ptr, frag_page_id;
if ((ptr= alloc_fix_rec(fragPtr.p, tablePtr.p, &key, &frag_page_id)) == 0) if ((ptr= alloc_fix_rec(fragPtr.p, tablePtr.p, &key, &frag_page_id)) == 0)
{ {
ljam(); jam();
terrorCode = ZMEM_NOMEM_ERROR; // caller sets error terrorCode = ZMEM_NOMEM_ERROR; // caller sets error
return terrorCode; return terrorCode;
} }
...@@ -82,7 +80,7 @@ Dbtup::tuxFreeNode(Signal* signal, ...@@ -82,7 +80,7 @@ Dbtup::tuxFreeNode(Signal* signal,
Uint32 pageOffset, Uint32 pageOffset,
Uint32* node) Uint32* node)
{ {
ljamEntry(); jamEntry();
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...@@ -105,7 +103,7 @@ Dbtup::tuxGetNode(Uint32 fragPtrI, ...@@ -105,7 +103,7 @@ Dbtup::tuxGetNode(Uint32 fragPtrI,
Uint32 pageOffset, Uint32 pageOffset,
Uint32*& node) Uint32*& node)
{ {
ljamEntry(); jamEntry();
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...@@ -130,7 +128,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI, ...@@ -130,7 +128,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
Uint32 numAttrs, Uint32 numAttrs,
Uint32* dataOut) Uint32* dataOut)
{ {
ljamEntry(); jamEntry();
// use own variables instead of globals // use own variables instead of globals
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
...@@ -150,21 +148,21 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI, ...@@ -150,21 +148,21 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
Tuple_header *tuple_ptr= req_struct.m_tuple_ptr; Tuple_header *tuple_ptr= req_struct.m_tuple_ptr;
if (tuple_ptr->get_tuple_version() != tupVersion) if (tuple_ptr->get_tuple_version() != tupVersion)
{ {
ljam(); jam();
OperationrecPtr opPtr; OperationrecPtr opPtr;
opPtr.i= tuple_ptr->m_operation_ptr_i; opPtr.i= tuple_ptr->m_operation_ptr_i;
Uint32 loopGuard= 0; Uint32 loopGuard= 0;
while (opPtr.i != RNIL) { while (opPtr.i != RNIL) {
c_operation_pool.getPtr(opPtr); c_operation_pool.getPtr(opPtr);
if (opPtr.p->tupVersion == tupVersion) { if (opPtr.p->tupVersion == tupVersion) {
ljam(); jam();
if (!opPtr.p->m_copy_tuple_location.isNull()) { if (!opPtr.p->m_copy_tuple_location.isNull()) {
req_struct.m_tuple_ptr= (Tuple_header*) req_struct.m_tuple_ptr= (Tuple_header*)
c_undo_buffer.get_ptr(&opPtr.p->m_copy_tuple_location); c_undo_buffer.get_ptr(&opPtr.p->m_copy_tuple_location);
} }
break; break;
} }
ljam(); jam();
opPtr.i= opPtr.p->prevActiveOp; opPtr.i= opPtr.p->prevActiveOp;
ndbrequire(++loopGuard < (1 << ZTUP_VERSION_BITS)); ndbrequire(++loopGuard < (1 << ZTUP_VERSION_BITS));
} }
...@@ -202,7 +200,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI, ...@@ -202,7 +200,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
int int
Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag) Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag)
{ {
ljamEntry(); jamEntry();
// use own variables instead of globals // use own variables instead of globals
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
...@@ -305,7 +303,7 @@ Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataO ...@@ -305,7 +303,7 @@ Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataO
int int
Dbtup::accReadPk(Uint32 tableId, Uint32 fragId, Uint32 fragPageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag) Dbtup::accReadPk(Uint32 tableId, Uint32 fragId, Uint32 fragPageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag)
{ {
ljamEntry(); jamEntry();
// get table // get table
TablerecPtr tablePtr; TablerecPtr tablePtr;
tablePtr.i = tableId; tablePtr.i = tableId;
...@@ -329,7 +327,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI, ...@@ -329,7 +327,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
Uint32 transId2, Uint32 transId2,
Uint32 savePointId) Uint32 savePointId)
{ {
ljamEntry(); jamEntry();
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...@@ -358,9 +356,9 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI, ...@@ -358,9 +356,9 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
* for this transaction and savepoint id. If its tuple version * for this transaction and savepoint id. If its tuple version
* equals the requested then we have a visible tuple otherwise not. * equals the requested then we have a visible tuple otherwise not.
*/ */
ljam(); jam();
if (req_struct.m_tuple_ptr->get_tuple_version() == tupVersion) { if (req_struct.m_tuple_ptr->get_tuple_version() == tupVersion) {
ljam(); jam();
return true; return true;
} }
} }
...@@ -378,7 +376,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI, ...@@ -378,7 +376,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
void void
Dbtup::execBUILDINDXREQ(Signal* signal) Dbtup::execBUILDINDXREQ(Signal* signal)
{ {
ljamEntry(); jamEntry();
#ifdef TIME_MEASUREMENT #ifdef TIME_MEASUREMENT
time_events= 0; time_events= 0;
tot_time_passed= 0; tot_time_passed= 0;
...@@ -387,7 +385,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -387,7 +385,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
// get new operation // get new operation
BuildIndexPtr buildPtr; BuildIndexPtr buildPtr;
if (! c_buildIndexList.seize(buildPtr)) { if (! c_buildIndexList.seize(buildPtr)) {
ljam(); jam();
BuildIndexRec buildRec; BuildIndexRec buildRec;
memcpy(buildRec.m_request, signal->theData, sizeof(buildRec.m_request)); memcpy(buildRec.m_request, signal->theData, sizeof(buildRec.m_request));
buildRec.m_errorCode= BuildIndxRef::Busy; buildRec.m_errorCode= BuildIndxRef::Busy;
...@@ -402,7 +400,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -402,7 +400,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
do { do {
const BuildIndxReq* buildReq= (const BuildIndxReq*)buildPtr.p->m_request; const BuildIndxReq* buildReq= (const BuildIndxReq*)buildPtr.p->m_request;
if (buildReq->getTableId() >= cnoOfTablerec) { if (buildReq->getTableId() >= cnoOfTablerec) {
ljam(); jam();
buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable; buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable;
break; break;
} }
...@@ -410,7 +408,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -410,7 +408,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
tablePtr.i= buildReq->getTableId(); tablePtr.i= buildReq->getTableId();
ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
if (tablePtr.p->tableStatus != DEFINED) { if (tablePtr.p->tableStatus != DEFINED) {
ljam(); jam();
buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable; buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable;
break; break;
} }
...@@ -418,7 +416,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -418,7 +416,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
buildPtr.p->m_build_vs = buildPtr.p->m_build_vs =
tablePtr.p->m_attributes[MM].m_no_of_varsize > 0; tablePtr.p->m_attributes[MM].m_no_of_varsize > 0;
if (DictTabInfo::isOrderedIndex(buildReq->getIndexType())) { if (DictTabInfo::isOrderedIndex(buildReq->getIndexType())) {
ljam(); jam();
const DLList<TupTriggerData>& triggerList = const DLList<TupTriggerData>& triggerList =
tablePtr.p->tuxCustomTriggers; tablePtr.p->tuxCustomTriggers;
...@@ -426,13 +424,13 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -426,13 +424,13 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
triggerList.first(triggerPtr); triggerList.first(triggerPtr);
while (triggerPtr.i != RNIL) { while (triggerPtr.i != RNIL) {
if (triggerPtr.p->indexId == buildReq->getIndexId()) { if (triggerPtr.p->indexId == buildReq->getIndexId()) {
ljam(); jam();
break; break;
} }
triggerList.next(triggerPtr); triggerList.next(triggerPtr);
} }
if (triggerPtr.i == RNIL) { if (triggerPtr.i == RNIL) {
ljam(); jam();
// trigger was not created // trigger was not created
buildPtr.p->m_errorCode = BuildIndxRef::InternalError; buildPtr.p->m_errorCode = BuildIndxRef::InternalError;
break; break;
...@@ -440,12 +438,12 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -440,12 +438,12 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
buildPtr.p->m_indexId = buildReq->getIndexId(); buildPtr.p->m_indexId = buildReq->getIndexId();
buildPtr.p->m_buildRef = DBTUX; buildPtr.p->m_buildRef = DBTUX;
} else if(buildReq->getIndexId() == RNIL) { } else if(buildReq->getIndexId() == RNIL) {
ljam(); jam();
// REBUILD of acc // REBUILD of acc
buildPtr.p->m_indexId = RNIL; buildPtr.p->m_indexId = RNIL;
buildPtr.p->m_buildRef = DBACC; buildPtr.p->m_buildRef = DBACC;
} else { } else {
ljam(); jam();
buildPtr.p->m_errorCode = BuildIndxRef::InvalidIndexType; buildPtr.p->m_errorCode = BuildIndxRef::InvalidIndexType;
break; break;
} }
...@@ -490,7 +488,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -490,7 +488,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
// get fragment // get fragment
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
if (buildPtr.p->m_fragNo == MAX_FRAG_PER_NODE) { if (buildPtr.p->m_fragNo == MAX_FRAG_PER_NODE) {
ljam(); jam();
// build ready // build ready
buildIndexReply(signal, buildPtr.p); buildIndexReply(signal, buildPtr.p);
c_buildIndexList.release(buildPtr); c_buildIndexList.release(buildPtr);
...@@ -499,7 +497,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -499,7 +497,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
ndbrequire(buildPtr.p->m_fragNo < MAX_FRAG_PER_NODE); ndbrequire(buildPtr.p->m_fragNo < MAX_FRAG_PER_NODE);
fragPtr.i= tablePtr.p->fragrec[buildPtr.p->m_fragNo]; fragPtr.i= tablePtr.p->fragrec[buildPtr.p->m_fragNo];
if (fragPtr.i == RNIL) { if (fragPtr.i == RNIL) {
ljam(); jam();
buildPtr.p->m_fragNo++; buildPtr.p->m_fragNo++;
buildPtr.p->m_pageId= 0; buildPtr.p->m_pageId= 0;
buildPtr.p->m_tupleNo= firstTupleNo; buildPtr.p->m_tupleNo= firstTupleNo;
...@@ -509,7 +507,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -509,7 +507,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
// get page // get page
PagePtr pagePtr; PagePtr pagePtr;
if (buildPtr.p->m_pageId >= fragPtr.p->noOfPages) { if (buildPtr.p->m_pageId >= fragPtr.p->noOfPages) {
ljam(); jam();
buildPtr.p->m_fragNo++; buildPtr.p->m_fragNo++;
buildPtr.p->m_pageId= 0; buildPtr.p->m_pageId= 0;
buildPtr.p->m_tupleNo= firstTupleNo; buildPtr.p->m_tupleNo= firstTupleNo;
...@@ -520,7 +518,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -520,7 +518,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
Uint32 pageState= pagePtr.p->page_state; Uint32 pageState= pagePtr.p->page_state;
// skip empty page // skip empty page
if (pageState == ZEMPTY_MM) { if (pageState == ZEMPTY_MM) {
ljam(); jam();
buildPtr.p->m_pageId++; buildPtr.p->m_pageId++;
buildPtr.p->m_tupleNo= firstTupleNo; buildPtr.p->m_tupleNo= firstTupleNo;
break; break;
...@@ -530,7 +528,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -530,7 +528,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
const Tuple_header* tuple_ptr = 0; const Tuple_header* tuple_ptr = 0;
pageIndex = buildPtr.p->m_tupleNo * tupheadsize; pageIndex = buildPtr.p->m_tupleNo * tupheadsize;
if (pageIndex + tupheadsize > Fix_page::DATA_WORDS) { if (pageIndex + tupheadsize > Fix_page::DATA_WORDS) {
ljam(); jam();
buildPtr.p->m_pageId++; buildPtr.p->m_pageId++;
buildPtr.p->m_tupleNo= firstTupleNo; buildPtr.p->m_tupleNo= firstTupleNo;
break; break;
...@@ -538,7 +536,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -538,7 +536,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
tuple_ptr = (Tuple_header*)&pagePtr.p->m_data[pageIndex]; tuple_ptr = (Tuple_header*)&pagePtr.p->m_data[pageIndex];
// skip over free tuple // skip over free tuple
if (tuple_ptr->m_header_bits & Tuple_header::FREE) { if (tuple_ptr->m_header_bits & Tuple_header::FREE) {
ljam(); jam();
buildPtr.p->m_tupleNo++; buildPtr.p->m_tupleNo++;
break; break;
} }
...@@ -581,7 +579,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -581,7 +579,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
tuple as a copy tuple. The original tuple is stable and is thus tuple as a copy tuple. The original tuple is stable and is thus
preferrable to store in TUX. preferrable to store in TUX.
*/ */
ljam(); jam();
/** /**
* Since copy tuples now can't be found on real pages. * Since copy tuples now can't be found on real pages.
...@@ -610,11 +608,11 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -610,11 +608,11 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
} while(req->errorCode == 0 && pageOperPtr.i != RNIL); } while(req->errorCode == 0 && pageOperPtr.i != RNIL);
} }
ljamEntry(); jamEntry();
if (req->errorCode != 0) { if (req->errorCode != 0) {
switch (req->errorCode) { switch (req->errorCode) {
case TuxMaintReq::NoMemError: case TuxMaintReq::NoMemError:
ljam(); jam();
buildPtr.p->m_errorCode= BuildIndxRef::AllocationFailure; buildPtr.p->m_errorCode= BuildIndxRef::AllocationFailure;
break; break;
default: default:
...@@ -666,7 +664,7 @@ Dbtup::buildIndexReply(Signal* signal, const BuildIndexRec* buildPtrP) ...@@ -666,7 +664,7 @@ Dbtup::buildIndexReply(Signal* signal, const BuildIndexRec* buildPtrP)
rep->setIndexId(buildReq->getIndexId()); rep->setIndexId(buildReq->getIndexId());
// conf // conf
if (buildPtrP->m_errorCode == BuildIndxRef::NoError) { if (buildPtrP->m_errorCode == BuildIndxRef::NoError) {
ljam(); jam();
sendSignal(rep->getUserRef(), GSN_BUILDINDXCONF, sendSignal(rep->getUserRef(), GSN_BUILDINDXCONF,
signal, BuildIndxConf::SignalLength, JBB); signal, BuildIndxConf::SignalLength, JBB);
return; return;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_META_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -29,16 +30,13 @@ ...@@ -29,16 +30,13 @@
#include "AttributeOffset.hpp" #include "AttributeOffset.hpp"
#include <my_sys.h> #include <my_sys.h>
#define ljam() { jamLine(20000 + __LINE__); }
#define ljamEntry() { jamEntryLine(20000 + __LINE__); }
void Dbtup::execTUPFRAGREQ(Signal* signal) void Dbtup::execTUPFRAGREQ(Signal* signal)
{ {
ljamEntry(); jamEntry();
TupFragReq* tupFragReq = (TupFragReq*)signal->getDataPtr(); TupFragReq* tupFragReq = (TupFragReq*)signal->getDataPtr();
if (tupFragReq->userPtr == (Uint32)-1) { if (tupFragReq->userPtr == (Uint32)-1) {
ljam(); jam();
abortAddFragOp(signal); abortAddFragOp(signal);
return; return;
} }
...@@ -70,7 +68,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal) ...@@ -70,7 +68,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
#ifndef VM_TRACE #ifndef VM_TRACE
// config mismatch - do not crash if release compiled // config mismatch - do not crash if release compiled
if (regTabPtr.i >= cnoOfTablerec) { if (regTabPtr.i >= cnoOfTablerec) {
ljam(); jam();
tupFragReq->userPtr = userptr; tupFragReq->userPtr = userptr;
tupFragReq->userRef = 800; tupFragReq->userRef = 800;
sendSignal(userblockref, GSN_TUPFRAGREF, signal, 2, JBB); sendSignal(userblockref, GSN_TUPFRAGREF, signal, 2, JBB);
...@@ -80,7 +78,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal) ...@@ -80,7 +78,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
ptrCheckGuard(regTabPtr, cnoOfTablerec, tablerec); ptrCheckGuard(regTabPtr, cnoOfTablerec, tablerec);
if (cfirstfreeFragopr == RNIL) { if (cfirstfreeFragopr == RNIL) {
ljam(); jam();
tupFragReq->userPtr = userptr; tupFragReq->userPtr = userptr;
tupFragReq->userRef = ZNOFREE_FRAGOP_ERROR; tupFragReq->userRef = ZNOFREE_FRAGOP_ERROR;
sendSignal(userblockref, GSN_TUPFRAGREF, signal, 2, JBB); sendSignal(userblockref, GSN_TUPFRAGREF, signal, 2, JBB);
...@@ -109,29 +107,29 @@ void Dbtup::execTUPFRAGREQ(Signal* signal) ...@@ -109,29 +107,29 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
getFragmentrec(regFragPtr, fragId, regTabPtr.p); getFragmentrec(regFragPtr, fragId, regTabPtr.p);
if (regFragPtr.i != RNIL) { if (regFragPtr.i != RNIL) {
ljam(); jam();
terrorCode= ZEXIST_FRAG_ERROR; terrorCode= ZEXIST_FRAG_ERROR;
fragrefuse1Lab(signal, fragOperPtr); fragrefuse1Lab(signal, fragOperPtr);
return; return;
} }
if (cfirstfreefrag != RNIL) { if (cfirstfreefrag != RNIL) {
ljam(); jam();
seizeFragrecord(regFragPtr); seizeFragrecord(regFragPtr);
} else { } else {
ljam(); jam();
terrorCode= ZFULL_FRAGRECORD_ERROR; terrorCode= ZFULL_FRAGRECORD_ERROR;
fragrefuse1Lab(signal, fragOperPtr); fragrefuse1Lab(signal, fragOperPtr);
return; return;
} }
initFragRange(regFragPtr.p); initFragRange(regFragPtr.p);
if (!addfragtotab(regTabPtr.p, fragId, regFragPtr.i)) { if (!addfragtotab(regTabPtr.p, fragId, regFragPtr.i)) {
ljam(); jam();
terrorCode= ZNO_FREE_TAB_ENTRY_ERROR; terrorCode= ZNO_FREE_TAB_ENTRY_ERROR;
fragrefuse2Lab(signal, fragOperPtr, regFragPtr); fragrefuse2Lab(signal, fragOperPtr, regFragPtr);
return; return;
} }
if (cfirstfreerange == RNIL) { if (cfirstfreerange == RNIL) {
ljam(); jam();
terrorCode= ZNO_FREE_PAGE_RANGE_ERROR; terrorCode= ZNO_FREE_PAGE_RANGE_ERROR;
fragrefuse3Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId); fragrefuse3Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
return; return;
...@@ -147,7 +145,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal) ...@@ -147,7 +145,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
if (ERROR_INSERTED(4007) && regTabPtr.p->fragid[0] == fragId || if (ERROR_INSERTED(4007) && regTabPtr.p->fragid[0] == fragId ||
ERROR_INSERTED(4008) && regTabPtr.p->fragid[1] == fragId) { ERROR_INSERTED(4008) && regTabPtr.p->fragid[1] == fragId) {
ljam(); jam();
terrorCode = 1; terrorCode = 1;
fragrefuse4Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId); fragrefuse4Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
CLEAR_ERROR_INSERT_VALUE; CLEAR_ERROR_INSERT_VALUE;
...@@ -155,7 +153,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal) ...@@ -155,7 +153,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
} }
if (regTabPtr.p->tableStatus == NOT_DEFINED) { if (regTabPtr.p->tableStatus == NOT_DEFINED) {
ljam(); jam();
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// We are setting up references to the header of the tuple. // We are setting up references to the header of the tuple.
// Active operation This word contains a reference to the operation active // Active operation This word contains a reference to the operation active
...@@ -201,13 +199,13 @@ void Dbtup::execTUPFRAGREQ(Signal* signal) ...@@ -201,13 +199,13 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
Uint32 offset[10]; Uint32 offset[10];
Uint32 tableDescriptorRef= allocTabDescr(regTabPtr.p, offset); Uint32 tableDescriptorRef= allocTabDescr(regTabPtr.p, offset);
if (tableDescriptorRef == RNIL) { if (tableDescriptorRef == RNIL) {
ljam(); jam();
fragrefuse4Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId); fragrefuse4Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
return; return;
} }
setUpDescriptorReferences(tableDescriptorRef, regTabPtr.p, offset); setUpDescriptorReferences(tableDescriptorRef, regTabPtr.p, offset);
} else { } else {
ljam(); jam();
fragOperPtr.p->definingFragment= false; fragOperPtr.p->definingFragment= false;
} }
signal->theData[0]= fragOperPtr.p->lqhPtrFrag; signal->theData[0]= fragOperPtr.p->lqhPtrFrag;
...@@ -223,9 +221,9 @@ bool Dbtup::addfragtotab(Tablerec* const regTabPtr, ...@@ -223,9 +221,9 @@ bool Dbtup::addfragtotab(Tablerec* const regTabPtr,
Uint32 fragIndex) Uint32 fragIndex)
{ {
for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) { for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
ljam(); jam();
if (regTabPtr->fragid[i] == RNIL) { if (regTabPtr->fragid[i] == RNIL) {
ljam(); jam();
regTabPtr->fragid[i]= fragId; regTabPtr->fragid[i]= fragId;
regTabPtr->fragrec[i]= fragIndex; regTabPtr->fragrec[i]= fragIndex;
return true; return true;
...@@ -239,9 +237,9 @@ void Dbtup::getFragmentrec(FragrecordPtr& regFragPtr, ...@@ -239,9 +237,9 @@ void Dbtup::getFragmentrec(FragrecordPtr& regFragPtr,
Tablerec* const regTabPtr) Tablerec* const regTabPtr)
{ {
for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) { for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
ljam(); jam();
if (regTabPtr->fragid[i] == fragId) { if (regTabPtr->fragid[i] == fragId) {
ljam(); jam();
regFragPtr.i= regTabPtr->fragrec[i]; regFragPtr.i= regTabPtr->fragrec[i];
ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord);
return; return;
...@@ -277,7 +275,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -277,7 +275,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
FragoperrecPtr fragOperPtr; FragoperrecPtr fragOperPtr;
TablerecPtr regTabPtr; TablerecPtr regTabPtr;
ljamEntry(); jamEntry();
fragOperPtr.i= signal->theData[0]; fragOperPtr.i= signal->theData[0];
ptrCheckGuard(fragOperPtr, cnoOfFragoprec, fragoperrec); ptrCheckGuard(fragOperPtr, cnoOfFragoprec, fragoperrec);
Uint32 attrId = signal->theData[2]; Uint32 attrId = signal->theData[2];
...@@ -338,7 +336,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -338,7 +336,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
Uint32 attrDes2= 0; Uint32 attrDes2= 0;
if (!AttributeDescriptor::getDynamic(attrDescriptor)) { if (!AttributeDescriptor::getDynamic(attrDescriptor)) {
ljam(); jam();
Uint32 pos= 0, null_pos; Uint32 pos= 0, null_pos;
Uint32 bytes= AttributeDescriptor::getSizeInBytes(attrDescriptor); Uint32 bytes= AttributeDescriptor::getSizeInBytes(attrDescriptor);
Uint32 words= (bytes + 3) / 4; Uint32 words= (bytes + 3) / 4;
...@@ -348,7 +346,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -348,7 +346,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
if (AttributeDescriptor::getNullable(attrDescriptor)) if (AttributeDescriptor::getNullable(attrDescriptor))
{ {
ljam(); jam();
fragOperPtr.p->m_null_bits[ind]++; fragOperPtr.p->m_null_bits[ind]++;
} }
else else
...@@ -363,17 +361,17 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -363,17 +361,17 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
switch (AttributeDescriptor::getArrayType(attrDescriptor)) { switch (AttributeDescriptor::getArrayType(attrDescriptor)) {
case NDB_ARRAYTYPE_FIXED: case NDB_ARRAYTYPE_FIXED:
{ {
ljam(); jam();
regTabPtr.p->m_attributes[ind].m_no_of_fixsize++; regTabPtr.p->m_attributes[ind].m_no_of_fixsize++;
if(attrLen != 0) if(attrLen != 0)
{ {
ljam(); jam();
pos= fragOperPtr.p->m_fix_attributes_size[ind]; pos= fragOperPtr.p->m_fix_attributes_size[ind];
fragOperPtr.p->m_fix_attributes_size[ind] += words; fragOperPtr.p->m_fix_attributes_size[ind] += words;
} }
else else
{ {
ljam(); jam();
Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor);
fragOperPtr.p->m_null_bits[ind] += bitCount; fragOperPtr.p->m_null_bits[ind] += bitCount;
} }
...@@ -381,7 +379,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -381,7 +379,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
} }
default: default:
{ {
ljam(); jam();
fragOperPtr.p->m_var_attributes_size[ind] += bytes; fragOperPtr.p->m_var_attributes_size[ind] += bytes;
pos= regTabPtr.p->m_attributes[ind].m_no_of_varsize++; pos= regTabPtr.p->m_attributes[ind].m_no_of_varsize++;
break; break;
...@@ -398,13 +396,13 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -398,13 +396,13 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
ndbrequire(cs != NULL); ndbrequire(cs != NULL);
Uint32 i = 0; Uint32 i = 0;
while (i < fragOperPtr.p->charsetIndex) { while (i < fragOperPtr.p->charsetIndex) {
ljam(); jam();
if (regTabPtr.p->charsetArray[i] == cs) if (regTabPtr.p->charsetArray[i] == cs)
break; break;
i++; i++;
} }
if (i == fragOperPtr.p->charsetIndex) { if (i == fragOperPtr.p->charsetIndex) {
ljam(); jam();
fragOperPtr.p->charsetIndex++; fragOperPtr.p->charsetIndex++;
} }
ndbrequire(i < regTabPtr.p->noOfCharsets); ndbrequire(i < regTabPtr.p->noOfCharsets);
...@@ -417,7 +415,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -417,7 +415,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
ERROR_INSERTED(4010) && regTabPtr.p->fragid[0] == fragId && lastAttr || ERROR_INSERTED(4010) && regTabPtr.p->fragid[0] == fragId && lastAttr ||
ERROR_INSERTED(4011) && regTabPtr.p->fragid[1] == fragId && attrId == 0|| ERROR_INSERTED(4011) && regTabPtr.p->fragid[1] == fragId && attrId == 0||
ERROR_INSERTED(4012) && regTabPtr.p->fragid[1] == fragId && lastAttr) { ERROR_INSERTED(4012) && regTabPtr.p->fragid[1] == fragId && lastAttr) {
ljam(); jam();
terrorCode = 1; terrorCode = 1;
addattrrefuseLab(signal, regFragPtr, fragOperPtr, regTabPtr.p, fragId); addattrrefuseLab(signal, regFragPtr, fragOperPtr, regTabPtr.p, fragId);
CLEAR_ERROR_INSERT_VALUE; CLEAR_ERROR_INSERT_VALUE;
...@@ -428,7 +426,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -428,7 +426,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
/* ************** TUP_ADD_ATTCONF ****************** */ /* ************** TUP_ADD_ATTCONF ****************** */
/* **************************************************************** */ /* **************************************************************** */
if (! lastAttr) { if (! lastAttr) {
ljam(); jam();
signal->theData[0] = fragOperPtr.p->lqhPtrFrag; signal->theData[0] = fragOperPtr.p->lqhPtrFrag;
signal->theData[1] = lastAttr; signal->theData[1] = lastAttr;
sendSignal(fragOperPtr.p->lqhBlockrefFrag, GSN_TUP_ADD_ATTCONF, sendSignal(fragOperPtr.p->lqhBlockrefFrag, GSN_TUP_ADD_ATTCONF,
...@@ -554,7 +552,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -554,7 +552,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
noAllocatedPages = allocFragPages(regFragPtr.p, noAllocatedPages); noAllocatedPages = allocFragPages(regFragPtr.p, noAllocatedPages);
if (noAllocatedPages == 0) { if (noAllocatedPages == 0) {
ljam(); jam();
terrorCode = ZNO_PAGES_ALLOCATED_ERROR; terrorCode = ZNO_PAGES_ALLOCATED_ERROR;
addattrrefuseLab(signal, regFragPtr, fragOperPtr, regTabPtr.p, fragId); addattrrefuseLab(signal, regFragPtr, fragOperPtr, regTabPtr.p, fragId);
return; return;
...@@ -564,7 +562,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -564,7 +562,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
CreateFilegroupImplReq rep; CreateFilegroupImplReq rep;
if(regTabPtr.p->m_no_of_disk_attributes) if(regTabPtr.p->m_no_of_disk_attributes)
{ {
ljam(); jam();
Tablespace_client tsman(0, c_tsman, 0, 0, Tablespace_client tsman(0, c_tsman, 0, 0,
regFragPtr.p->m_tablespace_id); regFragPtr.p->m_tablespace_id);
ndbrequire(tsman.get_tablespace_info(&rep) == 0); ndbrequire(tsman.get_tablespace_info(&rep) == 0);
...@@ -581,12 +579,12 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -581,12 +579,12 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
if (regTabPtr.p->m_no_of_disk_attributes) if (regTabPtr.p->m_no_of_disk_attributes)
{ {
ljam(); jam();
if(!(getNodeState().startLevel == NodeState::SL_STARTING && if(!(getNodeState().startLevel == NodeState::SL_STARTING &&
getNodeState().starting.startPhase <= 4)) getNodeState().starting.startPhase <= 4))
{ {
Callback cb; Callback cb;
ljam(); jam();
cb.m_callbackData= fragOperPtr.i; cb.m_callbackData= fragOperPtr.i;
cb.m_callbackFunction = cb.m_callbackFunction =
...@@ -600,7 +598,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ...@@ -600,7 +598,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal)
int res= lgman.get_log_buffer(signal, sz, &cb); int res= lgman.get_log_buffer(signal, sz, &cb);
switch(res){ switch(res){
case 0: case 0:
ljam(); jam();
signal->theData[0] = 1; signal->theData[0] = 1;
return; return;
case -1: case -1:
...@@ -719,11 +717,11 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr) ...@@ -719,11 +717,11 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr)
Uint32* keyArray= &tableDescriptor[regTabPtr->readKeyArray].tabDescr; Uint32* keyArray= &tableDescriptor[regTabPtr->readKeyArray].tabDescr;
Uint32 countKeyAttr= 0; Uint32 countKeyAttr= 0;
for (Uint32 i= 0; i < regTabPtr->m_no_of_attributes; i++) { for (Uint32 i= 0; i < regTabPtr->m_no_of_attributes; i++) {
ljam(); jam();
Uint32 refAttr= regTabPtr->tabDescriptor + (i * ZAD_SIZE); Uint32 refAttr= regTabPtr->tabDescriptor + (i * ZAD_SIZE);
Uint32 attrDescriptor= getTabDescrWord(refAttr); Uint32 attrDescriptor= getTabDescrWord(refAttr);
if (AttributeDescriptor::getPrimaryKey(attrDescriptor)) { if (AttributeDescriptor::getPrimaryKey(attrDescriptor)) {
ljam(); jam();
AttributeHeader::init(&keyArray[countKeyAttr], i, 0); AttributeHeader::init(&keyArray[countKeyAttr], i, 0);
countKeyAttr++; countKeyAttr++;
} }
...@@ -743,7 +741,7 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr) ...@@ -743,7 +741,7 @@ void Dbtup::setUpKeyArray(Tablerec* const regTabPtr)
{ {
for (Uint32 i= 0; i < regTabPtr->m_no_of_attributes; i++) for (Uint32 i= 0; i < regTabPtr->m_no_of_attributes; i++)
{ {
ljam(); jam();
Uint32 refAttr= regTabPtr->tabDescriptor + (i * ZAD_SIZE); Uint32 refAttr= regTabPtr->tabDescriptor + (i * ZAD_SIZE);
Uint32 desc = getTabDescrWord(refAttr); Uint32 desc = getTabDescrWord(refAttr);
Uint32 t = 0; Uint32 t = 0;
...@@ -838,9 +836,9 @@ void Dbtup::releaseFragoperrec(FragoperrecPtr fragOperPtr) ...@@ -838,9 +836,9 @@ void Dbtup::releaseFragoperrec(FragoperrecPtr fragOperPtr)
void Dbtup::deleteFragTab(Tablerec* const regTabPtr, Uint32 fragId) void Dbtup::deleteFragTab(Tablerec* const regTabPtr, Uint32 fragId)
{ {
for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) { for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
ljam(); jam();
if (regTabPtr->fragid[i] == fragId) { if (regTabPtr->fragid[i] == fragId) {
ljam(); jam();
regTabPtr->fragid[i]= RNIL; regTabPtr->fragid[i]= RNIL;
regTabPtr->fragrec[i]= RNIL; regTabPtr->fragrec[i]= RNIL;
return; return;
...@@ -866,7 +864,7 @@ void Dbtup::abortAddFragOp(Signal* signal) ...@@ -866,7 +864,7 @@ void Dbtup::abortAddFragOp(Signal* signal)
void void
Dbtup::execDROP_TAB_REQ(Signal* signal) Dbtup::execDROP_TAB_REQ(Signal* signal)
{ {
ljamEntry(); jamEntry();
if (ERROR_INSERTED(4013)) { if (ERROR_INSERTED(4013)) {
#ifdef VM_TRACE #ifdef VM_TRACE
verifytabdes(); verifytabdes();
...@@ -892,7 +890,7 @@ void Dbtup::releaseTabDescr(Tablerec* const regTabPtr) ...@@ -892,7 +890,7 @@ void Dbtup::releaseTabDescr(Tablerec* const regTabPtr)
{ {
Uint32 descriptor= regTabPtr->readKeyArray; Uint32 descriptor= regTabPtr->readKeyArray;
if (descriptor != RNIL) { if (descriptor != RNIL) {
ljam(); jam();
Uint32 offset[10]; Uint32 offset[10];
getTabDescrOffsets(regTabPtr, offset); getTabDescrOffsets(regTabPtr, offset);
...@@ -923,16 +921,16 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId, ...@@ -923,16 +921,16 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
Uint32 fragId = RNIL; Uint32 fragId = RNIL;
Uint32 i = 0; Uint32 i = 0;
for (i = 0; i < MAX_FRAG_PER_NODE; i++) { for (i = 0; i < MAX_FRAG_PER_NODE; i++) {
ljam(); jam();
if (tabPtr.p->fragid[i] != RNIL) { if (tabPtr.p->fragid[i] != RNIL) {
ljam(); jam();
fragIndex= tabPtr.p->fragrec[i]; fragIndex= tabPtr.p->fragrec[i];
fragId= tabPtr.p->fragid[i]; fragId= tabPtr.p->fragid[i];
break; break;
} }
} }
if (fragIndex != RNIL) { if (fragIndex != RNIL) {
ljam(); jam();
signal->theData[0] = ZUNMAP_PAGES; signal->theData[0] = ZUNMAP_PAGES;
signal->theData[1] = tabPtr.i; signal->theData[1] = tabPtr.i;
...@@ -957,7 +955,7 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId, ...@@ -957,7 +955,7 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
int res= lgman.get_log_buffer(signal, sz, &cb); int res= lgman.get_log_buffer(signal, sz, &cb);
switch(res){ switch(res){
case 0: case 0:
ljam(); jam();
return; return;
case -1: case -1:
ndbrequire("NOT YET IMPLEMENTED" == 0); ndbrequire("NOT YET IMPLEMENTED" == 0);
...@@ -1088,7 +1086,7 @@ Dbtup::drop_fragment_free_extent(Signal *signal, ...@@ -1088,7 +1086,7 @@ Dbtup::drop_fragment_free_extent(Signal *signal,
int res= lgman.get_log_buffer(signal, sz, &cb); int res= lgman.get_log_buffer(signal, sz, &cb);
switch(res){ switch(res){
case 0: case 0:
ljam(); jam();
return; return;
case -1: case -1:
ndbrequire("NOT YET IMPLEMENTED" == 0); ndbrequire("NOT YET IMPLEMENTED" == 0);
...@@ -1239,7 +1237,7 @@ Dbtup::drop_fragment_free_extent_log_buffer_callback(Signal* signal, ...@@ -1239,7 +1237,7 @@ Dbtup::drop_fragment_free_extent_log_buffer_callback(Signal* signal,
void void
Dbtup::drop_fragment_free_var_pages(Signal* signal) Dbtup::drop_fragment_free_var_pages(Signal* signal)
{ {
ljam(); jam();
Uint32 tableId = signal->theData[1]; Uint32 tableId = signal->theData[1];
Uint32 fragPtrI = signal->theData[2]; Uint32 fragPtrI = signal->theData[2];
......
...@@ -14,14 +14,12 @@ ...@@ -14,14 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_PAG_MAN_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(16000 + __LINE__); }
#define ljamEntry() { jamEntryLine(16000 + __LINE__); }
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
// 4) Page Memory Manager (buddy algorithm) // 4) Page Memory Manager (buddy algorithm)
// //
...@@ -121,7 +119,7 @@ void Dbtup::initializePage() ...@@ -121,7 +119,7 @@ void Dbtup::initializePage()
}//for }//for
PagePtr pagePtr; PagePtr pagePtr;
for (pagePtr.i = 0; pagePtr.i < c_page_pool.getSize(); pagePtr.i++) { for (pagePtr.i = 0; pagePtr.i < c_page_pool.getSize(); pagePtr.i++) {
ljam(); jam();
refresh_watch_dog(); refresh_watch_dog();
c_page_pool.getPtr(pagePtr); c_page_pool.getPtr(pagePtr);
pagePtr.p->physical_page_id= RNIL; pagePtr.p->physical_page_id= RNIL;
...@@ -153,16 +151,16 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate, ...@@ -153,16 +151,16 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
Uint32& allocPageRef) Uint32& allocPageRef)
{ {
if (noOfPagesToAllocate == 0){ if (noOfPagesToAllocate == 0){
ljam(); jam();
noOfPagesAllocated = 0; noOfPagesAllocated = 0;
return; return;
}//if }//if
Uint32 firstListToCheck = nextHigherTwoLog(noOfPagesToAllocate - 1); Uint32 firstListToCheck = nextHigherTwoLog(noOfPagesToAllocate - 1);
for (Uint32 i = firstListToCheck; i < 16; i++) { for (Uint32 i = firstListToCheck; i < 16; i++) {
ljam(); jam();
if (cfreepageList[i] != RNIL) { if (cfreepageList[i] != RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* PROPER AMOUNT OF PAGES WERE FOUND. NOW SPLIT THE FOUND */ /* PROPER AMOUNT OF PAGES WERE FOUND. NOW SPLIT THE FOUND */
/* AREA AND RETURN THE PART NOT NEEDED. */ /* AREA AND RETURN THE PART NOT NEEDED. */
...@@ -182,11 +180,11 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate, ...@@ -182,11 +180,11 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
if (firstListToCheck) if (firstListToCheck)
{ {
ljam(); jam();
for (Uint32 j = firstListToCheck - 1; (Uint32)~j; j--) { for (Uint32 j = firstListToCheck - 1; (Uint32)~j; j--) {
ljam(); jam();
if (cfreepageList[j] != RNIL) { if (cfreepageList[j] != RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* SOME AREA WAS FOUND, ALLOCATE ALL OF IT. */ /* SOME AREA WAS FOUND, ALLOCATE ALL OF IT. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
...@@ -212,9 +210,9 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate, ...@@ -212,9 +210,9 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
void Dbtup::returnCommonArea(Uint32 retPageRef, Uint32 retNo) void Dbtup::returnCommonArea(Uint32 retPageRef, Uint32 retNo)
{ {
do { do {
ljam(); jam();
if (retNo == 0) { if (retNo == 0) {
ljam(); jam();
return; return;
}//if }//if
Uint32 list = nextHigherTwoLog(retNo) - 1; Uint32 list = nextHigherTwoLog(retNo) - 1;
...@@ -231,28 +229,28 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef, ...@@ -231,28 +229,28 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
PagePtr pageFirstPtr, pageLastPtr; PagePtr pageFirstPtr, pageLastPtr;
Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated; Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated;
while (allocPageRef > 0) { while (allocPageRef > 0) {
ljam(); jam();
pageLastPtr.i = allocPageRef - 1; pageLastPtr.i = allocPageRef - 1;
c_page_pool.getPtr(pageLastPtr); c_page_pool.getPtr(pageLastPtr);
if (pageLastPtr.p->page_state != ZFREE_COMMON) { if (pageLastPtr.p->page_state != ZFREE_COMMON) {
ljam(); jam();
return; return;
} else { } else {
ljam(); jam();
pageFirstPtr.i = pageLastPtr.p->first_cluster_page; pageFirstPtr.i = pageLastPtr.p->first_cluster_page;
ndbrequire(pageFirstPtr.i != RNIL); ndbrequire(pageFirstPtr.i != RNIL);
Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i); Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i);
removeCommonArea(pageFirstPtr.i, list); removeCommonArea(pageFirstPtr.i, list);
Uint32 listSize = 1 << list; Uint32 listSize = 1 << list;
if (listSize > remainAllocate) { if (listSize > remainAllocate) {
ljam(); jam();
Uint32 retNo = listSize - remainAllocate; Uint32 retNo = listSize - remainAllocate;
returnCommonArea(pageFirstPtr.i, retNo); returnCommonArea(pageFirstPtr.i, retNo);
allocPageRef = pageFirstPtr.i + retNo; allocPageRef = pageFirstPtr.i + retNo;
noPagesAllocated = noOfPagesToAllocate; noPagesAllocated = noOfPagesToAllocate;
return; return;
} else { } else {
ljam(); jam();
allocPageRef = pageFirstPtr.i; allocPageRef = pageFirstPtr.i;
noPagesAllocated += listSize; noPagesAllocated += listSize;
remainAllocate -= listSize; remainAllocate -= listSize;
...@@ -268,32 +266,32 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef, ...@@ -268,32 +266,32 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
PagePtr pageFirstPtr, pageLastPtr; PagePtr pageFirstPtr, pageLastPtr;
Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated; Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated;
if (remainAllocate == 0) { if (remainAllocate == 0) {
ljam(); jam();
return; return;
}//if }//if
while ((allocPageRef + noPagesAllocated) < c_page_pool.getSize()) { while ((allocPageRef + noPagesAllocated) < c_page_pool.getSize()) {
ljam(); jam();
pageFirstPtr.i = allocPageRef + noPagesAllocated; pageFirstPtr.i = allocPageRef + noPagesAllocated;
c_page_pool.getPtr(pageFirstPtr); c_page_pool.getPtr(pageFirstPtr);
if (pageFirstPtr.p->page_state != ZFREE_COMMON) { if (pageFirstPtr.p->page_state != ZFREE_COMMON) {
ljam(); jam();
return; return;
} else { } else {
ljam(); jam();
pageLastPtr.i = pageFirstPtr.p->last_cluster_page; pageLastPtr.i = pageFirstPtr.p->last_cluster_page;
ndbrequire(pageLastPtr.i != RNIL); ndbrequire(pageLastPtr.i != RNIL);
Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i); Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i);
removeCommonArea(pageFirstPtr.i, list); removeCommonArea(pageFirstPtr.i, list);
Uint32 listSize = 1 << list; Uint32 listSize = 1 << list;
if (listSize > remainAllocate) { if (listSize > remainAllocate) {
ljam(); jam();
Uint32 retPageRef = pageFirstPtr.i + remainAllocate; Uint32 retPageRef = pageFirstPtr.i + remainAllocate;
Uint32 retNo = listSize - remainAllocate; Uint32 retNo = listSize - remainAllocate;
returnCommonArea(retPageRef, retNo); returnCommonArea(retPageRef, retNo);
noPagesAllocated += remainAllocate; noPagesAllocated += remainAllocate;
return; return;
} else { } else {
ljam(); jam();
noPagesAllocated += listSize; noPagesAllocated += listSize;
remainAllocate -= listSize; remainAllocate -= listSize;
}//if }//if
...@@ -328,30 +326,30 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list) ...@@ -328,30 +326,30 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list)
c_page_pool.getPtr(remPagePtr, remPageRef); c_page_pool.getPtr(remPagePtr, remPageRef);
ndbrequire(list < 16); ndbrequire(list < 16);
if (cfreepageList[list] == remPagePtr.i) { if (cfreepageList[list] == remPagePtr.i) {
ljam(); jam();
cfreepageList[list] = remPagePtr.p->next_cluster_page; cfreepageList[list] = remPagePtr.p->next_cluster_page;
pageNextPtr.i = cfreepageList[list]; pageNextPtr.i = cfreepageList[list];
if (pageNextPtr.i != RNIL) { if (pageNextPtr.i != RNIL) {
ljam(); jam();
c_page_pool.getPtr(pageNextPtr); c_page_pool.getPtr(pageNextPtr);
pageNextPtr.p->prev_cluster_page = RNIL; pageNextPtr.p->prev_cluster_page = RNIL;
}//if }//if
} else { } else {
pageSearchPtr.i = cfreepageList[list]; pageSearchPtr.i = cfreepageList[list];
while (true) { while (true) {
ljam(); jam();
c_page_pool.getPtr(pageSearchPtr); c_page_pool.getPtr(pageSearchPtr);
pagePrevPtr = pageSearchPtr; pagePrevPtr = pageSearchPtr;
pageSearchPtr.i = pageSearchPtr.p->next_cluster_page; pageSearchPtr.i = pageSearchPtr.p->next_cluster_page;
if (pageSearchPtr.i == remPagePtr.i) { if (pageSearchPtr.i == remPagePtr.i) {
ljam(); jam();
break; break;
}//if }//if
}//while }//while
pageNextPtr.i = remPagePtr.p->next_cluster_page; pageNextPtr.i = remPagePtr.p->next_cluster_page;
pagePrevPtr.p->next_cluster_page = pageNextPtr.i; pagePrevPtr.p->next_cluster_page = pageNextPtr.i;
if (pageNextPtr.i != RNIL) { if (pageNextPtr.i != RNIL) {
ljam(); jam();
c_page_pool.getPtr(pageNextPtr); c_page_pool.getPtr(pageNextPtr);
pageNextPtr.p->prev_cluster_page = pagePrevPtr.i; pageNextPtr.p->prev_cluster_page = pagePrevPtr.i;
}//if }//if
......
...@@ -15,14 +15,12 @@ ...@@ -15,14 +15,12 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_PAGE_MAP_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #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 // 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 // page id's. The mapping is needs the fragment and the logical page id to
...@@ -92,11 +90,11 @@ Uint32 Dbtup::getEmptyPage(Fragrecord* regFragPtr) ...@@ -92,11 +90,11 @@ Uint32 Dbtup::getEmptyPage(Fragrecord* regFragPtr)
{ {
Uint32 pageId = regFragPtr->emptyPrimPage.firstItem; Uint32 pageId = regFragPtr->emptyPrimPage.firstItem;
if (pageId == RNIL) { if (pageId == RNIL) {
ljam(); jam();
allocMoreFragPages(regFragPtr); allocMoreFragPages(regFragPtr);
pageId = regFragPtr->emptyPrimPage.firstItem; pageId = regFragPtr->emptyPrimPage.firstItem;
if (pageId == RNIL) { if (pageId == RNIL) {
ljam(); jam();
return RNIL; return RNIL;
}//if }//if
}//if }//if
...@@ -122,11 +120,11 @@ Uint32 Dbtup::getRealpid(Fragrecord* regFragPtr, Uint32 logicalPageId) ...@@ -122,11 +120,11 @@ Uint32 Dbtup::getRealpid(Fragrecord* regFragPtr, Uint32 logicalPageId)
loopLimit = grpPageRangePtr.p->currentIndexPos; loopLimit = grpPageRangePtr.p->currentIndexPos;
ndbrequire(loopLimit <= 3); ndbrequire(loopLimit <= 3);
for (Uint32 i = 0; i <= loopLimit; i++) { for (Uint32 i = 0; i <= loopLimit; i++) {
ljam(); jam();
if (grpPageRangePtr.p->startRange[i] <= logicalPageId) { if (grpPageRangePtr.p->startRange[i] <= logicalPageId) {
if (grpPageRangePtr.p->endRange[i] >= logicalPageId) { if (grpPageRangePtr.p->endRange[i] >= logicalPageId) {
if (grpPageRangePtr.p->type[i] == ZLEAF) { if (grpPageRangePtr.p->type[i] == ZLEAF) {
ljam(); jam();
Uint32 realPageId = (logicalPageId - grpPageRangePtr.p->startRange[i]) + Uint32 realPageId = (logicalPageId - grpPageRangePtr.p->startRange[i]) +
grpPageRangePtr.p->basePageId[i]; grpPageRangePtr.p->basePageId[i];
return realPageId; return realPageId;
...@@ -167,12 +165,12 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -167,12 +165,12 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
{ {
PageRangePtr currPageRangePtr; PageRangePtr currPageRangePtr;
if (cfirstfreerange == RNIL) { if (cfirstfreerange == RNIL) {
ljam(); jam();
return false; return false;
}//if }//if
currPageRangePtr.i = regFragPtr->currentPageRange; currPageRangePtr.i = regFragPtr->currentPageRange;
if (currPageRangePtr.i == RNIL) { if (currPageRangePtr.i == RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THE FIRST PAGE RANGE IS HANDLED WITH SPECIAL CODE */ /* THE FIRST PAGE RANGE IS HANDLED WITH SPECIAL CODE */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
...@@ -181,10 +179,10 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -181,10 +179,10 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
currPageRangePtr.p->currentIndexPos = 0; currPageRangePtr.p->currentIndexPos = 0;
currPageRangePtr.p->parentPtr = RNIL; currPageRangePtr.p->parentPtr = RNIL;
} else { } else {
ljam(); jam();
ptrCheckGuard(currPageRangePtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(currPageRangePtr, cnoOfPageRangeRec, pageRange);
if (currPageRangePtr.p->currentIndexPos < 3) { if (currPageRangePtr.p->currentIndexPos < 3) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THE SIMPLE CASE WHEN IT IS ONLY NECESSARY TO FILL IN THE */ /* THE SIMPLE CASE WHEN IT IS ONLY NECESSARY TO FILL IN THE */
/* NEXT EMPTY POSITION IN THE PAGE RANGE RECORD IS TREATED */ /* NEXT EMPTY POSITION IN THE PAGE RANGE RECORD IS TREATED */
...@@ -192,7 +190,7 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -192,7 +190,7 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
currPageRangePtr.p->currentIndexPos++; currPageRangePtr.p->currentIndexPos++;
} else { } else {
ljam(); jam();
ndbrequire(currPageRangePtr.p->currentIndexPos == 3); ndbrequire(currPageRangePtr.p->currentIndexPos == 3);
currPageRangePtr.i = leafPageRangeFull(regFragPtr, currPageRangePtr); currPageRangePtr.i = leafPageRangeFull(regFragPtr, currPageRangePtr);
if (currPageRangePtr.i == RNIL) { if (currPageRangePtr.i == RNIL) {
...@@ -223,15 +221,15 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -223,15 +221,15 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
PageRangePtr loopPageRangePtr; PageRangePtr loopPageRangePtr;
loopPageRangePtr = currPageRangePtr; loopPageRangePtr = currPageRangePtr;
while (true) { while (true) {
ljam(); jam();
loopPageRangePtr.i = loopPageRangePtr.p->parentPtr; loopPageRangePtr.i = loopPageRangePtr.p->parentPtr;
if (loopPageRangePtr.i != RNIL) { if (loopPageRangePtr.i != RNIL) {
ljam(); jam();
ptrCheckGuard(loopPageRangePtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(loopPageRangePtr, cnoOfPageRangeRec, pageRange);
ndbrequire(loopPageRangePtr.p->currentIndexPos < 4); ndbrequire(loopPageRangePtr.p->currentIndexPos < 4);
loopPageRangePtr.p->endRange[loopPageRangePtr.p->currentIndexPos] += noPages; loopPageRangePtr.p->endRange[loopPageRangePtr.p->currentIndexPos] += noPages;
} else { } else {
ljam(); jam();
break; break;
}//if }//if
}//while }//while
...@@ -243,26 +241,26 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -243,26 +241,26 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
void Dbtup::releaseFragPages(Fragrecord* regFragPtr) void Dbtup::releaseFragPages(Fragrecord* regFragPtr)
{ {
if (regFragPtr->rootPageRange == RNIL) { if (regFragPtr->rootPageRange == RNIL) {
ljam(); jam();
return; return;
}//if }//if
PageRangePtr regPRPtr; PageRangePtr regPRPtr;
regPRPtr.i = regFragPtr->rootPageRange; regPRPtr.i = regFragPtr->rootPageRange;
ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange);
while (true) { while (true) {
ljam(); jam();
const Uint32 indexPos = regPRPtr.p->currentIndexPos; const Uint32 indexPos = regPRPtr.p->currentIndexPos;
ndbrequire(indexPos < 4); ndbrequire(indexPos < 4);
const Uint32 basePageId = regPRPtr.p->basePageId[indexPos]; const Uint32 basePageId = regPRPtr.p->basePageId[indexPos];
regPRPtr.p->basePageId[indexPos] = RNIL; regPRPtr.p->basePageId[indexPos] = RNIL;
if (basePageId == RNIL) { if (basePageId == RNIL) {
ljam(); jam();
/** /**
* Finished with indexPos continue with next * Finished with indexPos continue with next
*/ */
if (indexPos > 0) { if (indexPos > 0) {
ljam(); jam();
regPRPtr.p->currentIndexPos--; regPRPtr.p->currentIndexPos--;
continue; continue;
}//if }//if
...@@ -274,13 +272,13 @@ void Dbtup::releaseFragPages(Fragrecord* regFragPtr) ...@@ -274,13 +272,13 @@ void Dbtup::releaseFragPages(Fragrecord* regFragPtr)
releasePagerange(regPRPtr); releasePagerange(regPRPtr);
if (parentPtr != RNIL) { if (parentPtr != RNIL) {
ljam(); jam();
regPRPtr.i = parentPtr; regPRPtr.i = parentPtr;
ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange);
continue; continue;
}//if }//if
ljam(); jam();
ndbrequire(regPRPtr.i == regFragPtr->rootPageRange); ndbrequire(regPRPtr.i == regFragPtr->rootPageRange);
initFragRange(regFragPtr); initFragRange(regFragPtr);
for (Uint32 i = 0; i<MAX_FREE_LIST; i++) for (Uint32 i = 0; i<MAX_FREE_LIST; i++)
...@@ -364,7 +362,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested ...@@ -364,7 +362,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
Uint32 retPageRef = RNIL; Uint32 retPageRef = RNIL;
allocConsPages(noPagesToAllocate, noOfPagesAllocated, retPageRef); allocConsPages(noPagesToAllocate, noOfPagesAllocated, retPageRef);
if (noOfPagesAllocated == 0) { if (noOfPagesAllocated == 0) {
ljam(); jam();
return tafpPagesAllocated; return tafpPagesAllocated;
}//if }//if
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
...@@ -373,7 +371,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested ...@@ -373,7 +371,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
Uint32 startRange = regFragPtr->nextStartRange; Uint32 startRange = regFragPtr->nextStartRange;
if (!insertPageRangeTab(regFragPtr, retPageRef, noOfPagesAllocated)) { if (!insertPageRangeTab(regFragPtr, retPageRef, noOfPagesAllocated)) {
ljam(); jam();
returnCommonArea(retPageRef, noOfPagesAllocated); returnCommonArea(retPageRef, noOfPagesAllocated);
return tafpPagesAllocated; return tafpPagesAllocated;
}//if }//if
...@@ -388,7 +386,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested ...@@ -388,7 +386,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
Uint32 prev = RNIL; Uint32 prev = RNIL;
for (loopPagePtr.i = retPageRef; loopPagePtr.i < loopLimit; loopPagePtr.i++) { for (loopPagePtr.i = retPageRef; loopPagePtr.i < loopLimit; loopPagePtr.i++) {
ljam(); jam();
c_page_pool.getPtr(loopPagePtr); c_page_pool.getPtr(loopPagePtr);
loopPagePtr.p->page_state = ZEMPTY_MM; loopPagePtr.p->page_state = ZEMPTY_MM;
loopPagePtr.p->frag_page_id = startRange + loopPagePtr.p->frag_page_id = startRange +
...@@ -416,10 +414,10 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested ...@@ -416,10 +414,10 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* WAS ENOUGH PAGES ALLOCATED OR ARE MORE NEEDED. */ /* WAS ENOUGH PAGES ALLOCATED OR ARE MORE NEEDED. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
if (tafpPagesAllocated < tafpNoAllocRequested) { if (tafpPagesAllocated < tafpNoAllocRequested) {
ljam(); jam();
} else { } else {
ndbrequire(tafpPagesAllocated == tafpNoAllocRequested); ndbrequire(tafpPagesAllocated == tafpNoAllocRequested);
ljam(); jam();
return tafpNoAllocRequested; return tafpNoAllocRequested;
}//if }//if
}//while }//while
...@@ -451,15 +449,15 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -451,15 +449,15 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
parentPageRangePtr = currPageRangePtr; parentPageRangePtr = currPageRangePtr;
Uint32 tiprNoLevels = 1; Uint32 tiprNoLevels = 1;
while (true) { while (true) {
ljam(); jam();
parentPageRangePtr.i = parentPageRangePtr.p->parentPtr; parentPageRangePtr.i = parentPageRangePtr.p->parentPtr;
if (parentPageRangePtr.i == RNIL) { if (parentPageRangePtr.i == RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* WE HAVE REACHED THE ROOT. A NEW ROOT MUST BE ALLOCATED. */ /* WE HAVE REACHED THE ROOT. A NEW ROOT MUST BE ALLOCATED. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
if (c_noOfFreePageRanges < tiprNoLevels) { if (c_noOfFreePageRanges < tiprNoLevels) {
ljam(); jam();
return RNIL; return RNIL;
}//if }//if
PageRangePtr oldRootPRPtr; PageRangePtr oldRootPRPtr;
...@@ -482,10 +480,10 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -482,10 +480,10 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
foundPageRangePtr = newRootPRPtr; foundPageRangePtr = newRootPRPtr;
break; break;
} else { } else {
ljam(); jam();
ptrCheckGuard(parentPageRangePtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(parentPageRangePtr, cnoOfPageRangeRec, pageRange);
if (parentPageRangePtr.p->currentIndexPos < 3) { if (parentPageRangePtr.p->currentIndexPos < 3) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */ /* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */
/* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */ /* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */
...@@ -498,7 +496,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -498,7 +496,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
foundPageRangePtr = parentPageRangePtr; foundPageRangePtr = parentPageRangePtr;
break; break;
} else { } else {
ljam(); jam();
ndbrequire(parentPageRangePtr.p->currentIndexPos == 3); ndbrequire(parentPageRangePtr.p->currentIndexPos == 3);
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THE PAGE RANGE RECORD WAS FULL. FIND THE PARENT RECORD */ /* THE PAGE RANGE RECORD WAS FULL. FIND THE PARENT RECORD */
...@@ -516,7 +514,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -516,7 +514,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
PageRangePtr prevPageRangePtr; PageRangePtr prevPageRangePtr;
prevPageRangePtr = foundPageRangePtr; prevPageRangePtr = foundPageRangePtr;
if (c_noOfFreePageRanges < tiprNoLevels) { if (c_noOfFreePageRanges < tiprNoLevels) {
ljam(); jam();
return RNIL; return RNIL;
}//if }//if
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
...@@ -527,7 +525,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -527,7 +525,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
/* ARE ALSO PROPERLY UPDATED ON THE PATH TO THE LEAF LEVEL. */ /* ARE ALSO PROPERLY UPDATED ON THE PATH TO THE LEAF LEVEL. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
while (true) { while (true) {
ljam(); jam();
seizePagerange(newPageRangePtr); seizePagerange(newPageRangePtr);
tiprNoLevels--; tiprNoLevels--;
ndbrequire(prevPageRangePtr.p->currentIndexPos < 4); ndbrequire(prevPageRangePtr.p->currentIndexPos < 4);
...@@ -535,13 +533,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -535,13 +533,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
newPageRangePtr.p->parentPtr = prevPageRangePtr.i; newPageRangePtr.p->parentPtr = prevPageRangePtr.i;
newPageRangePtr.p->currentIndexPos = 0; newPageRangePtr.p->currentIndexPos = 0;
if (tiprNoLevels > 0) { if (tiprNoLevels > 0) {
ljam(); jam();
newPageRangePtr.p->startRange[0] = regFragPtr->nextStartRange; newPageRangePtr.p->startRange[0] = regFragPtr->nextStartRange;
newPageRangePtr.p->endRange[0] = regFragPtr->nextStartRange - 1; newPageRangePtr.p->endRange[0] = regFragPtr->nextStartRange - 1;
newPageRangePtr.p->type[0] = ZNON_LEAF; newPageRangePtr.p->type[0] = ZNON_LEAF;
prevPageRangePtr = newPageRangePtr; prevPageRangePtr = newPageRangePtr;
} else { } else {
ljam(); jam();
break; break;
}//if }//if
}//while }//while
...@@ -576,16 +574,16 @@ void Dbtup::errorHandler(Uint32 errorCode) ...@@ -576,16 +574,16 @@ void Dbtup::errorHandler(Uint32 errorCode)
{ {
switch (errorCode) { switch (errorCode) {
case 0: case 0:
ljam(); jam();
break; break;
case 1: case 1:
ljam(); jam();
break; break;
case 2: case 2:
ljam(); jam();
break; break;
default: default:
ljam(); jam();
} }
ndbrequire(false); ndbrequire(false);
}//Dbtup::errorHandler() }//Dbtup::errorHandler()
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_ROUTINES_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -23,9 +24,6 @@ ...@@ -23,9 +24,6 @@
#include "AttributeOffset.hpp" #include "AttributeOffset.hpp"
#include <AttributeHeader.hpp> #include <AttributeHeader.hpp>
#define ljam() { jamLine(3000 + __LINE__); }
#define ljamEntry() { jamEntryLine(3000 + __LINE__); }
void void
Dbtup::setUpQueryRoutines(Tablerec *regTabPtr) Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
{ {
...@@ -40,23 +38,23 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr) ...@@ -40,23 +38,23 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
if (AttributeDescriptor::getArrayType(attrDescr) == NDB_ARRAYTYPE_FIXED){ if (AttributeDescriptor::getArrayType(attrDescr) == NDB_ARRAYTYPE_FIXED){
if (!AttributeDescriptor::getNullable(attrDescr)) { if (!AttributeDescriptor::getNullable(attrDescr)) {
if (AttributeDescriptor::getSize(attrDescr) == 0){ if (AttributeDescriptor::getSize(attrDescr) == 0){
ljam(); jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readBitsNotNULL; regTabPtr->readFunctionArray[i] = &Dbtup::readBitsNotNULL;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateBitsNotNULL; regTabPtr->updateFunctionArray[i] = &Dbtup::updateBitsNotNULL;
} else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 4) { } else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 4) {
ljam(); jam();
regTabPtr->readFunctionArray[i]= regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHOneWordNotNULL; &Dbtup::readFixedSizeTHOneWordNotNULL;
regTabPtr->updateFunctionArray[i]= regTabPtr->updateFunctionArray[i]=
&Dbtup::updateFixedSizeTHOneWordNotNULL; &Dbtup::updateFixedSizeTHOneWordNotNULL;
} else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 8) { } else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 8) {
ljam(); jam();
regTabPtr->readFunctionArray[i]= regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHTwoWordNotNULL; &Dbtup::readFixedSizeTHTwoWordNotNULL;
regTabPtr->updateFunctionArray[i]= regTabPtr->updateFunctionArray[i]=
&Dbtup::updateFixedSizeTHTwoWordNotNULL; &Dbtup::updateFixedSizeTHTwoWordNotNULL;
} else { } else {
ljam(); jam();
regTabPtr->readFunctionArray[i]= regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHManyWordNotNULL; &Dbtup::readFixedSizeTHManyWordNotNULL;
regTabPtr->updateFunctionArray[i]= regTabPtr->updateFunctionArray[i]=
...@@ -64,27 +62,27 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr) ...@@ -64,27 +62,27 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
} }
// replace functions for char attribute // replace functions for char attribute
if (AttributeOffset::getCharsetFlag(attrOffset)) { if (AttributeOffset::getCharsetFlag(attrOffset)) {
ljam(); jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHManyWordNotNULL; regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHManyWordNotNULL;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNotNULL; regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNotNULL;
} }
} else { } else {
if (AttributeDescriptor::getSize(attrDescr) == 0){ if (AttributeDescriptor::getSize(attrDescr) == 0){
ljam(); jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readBitsNULLable; regTabPtr->readFunctionArray[i] = &Dbtup::readBitsNULLable;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateBitsNULLable; regTabPtr->updateFunctionArray[i] = &Dbtup::updateBitsNULLable;
} else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 4){ } else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 4){
ljam(); jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHOneWordNULLable; regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHOneWordNULLable;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNULLable; regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNULLable;
} else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 8) { } else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 8) {
ljam(); jam();
regTabPtr->readFunctionArray[i]= regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHTwoWordNULLable; &Dbtup::readFixedSizeTHTwoWordNULLable;
regTabPtr->updateFunctionArray[i]= regTabPtr->updateFunctionArray[i]=
&Dbtup::updateFixedSizeTHManyWordNULLable; &Dbtup::updateFixedSizeTHManyWordNULLable;
} else { } else {
ljam(); jam();
regTabPtr->readFunctionArray[i]= regTabPtr->readFunctionArray[i]=
&Dbtup::readFixedSizeTHManyWordNULLable; &Dbtup::readFixedSizeTHManyWordNULLable;
regTabPtr->updateFunctionArray[i]= regTabPtr->updateFunctionArray[i]=
...@@ -92,7 +90,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr) ...@@ -92,7 +90,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
} }
// replace functions for char attribute // replace functions for char attribute
if (AttributeOffset::getCharsetFlag(attrOffset)) { if (AttributeOffset::getCharsetFlag(attrOffset)) {
ljam(); jam();
regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHManyWordNULLable; regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHManyWordNULLable;
regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNULLable; regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNULLable;
} }
...@@ -144,7 +142,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr) ...@@ -144,7 +142,7 @@ Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
} }
} else { } else {
if (AttributeDescriptor::getArrayType(attrDescr) == NDB_ARRAYTYPE_FIXED){ if (AttributeDescriptor::getArrayType(attrDescr) == NDB_ARRAYTYPE_FIXED){
ljam(); jam();
regTabPtr->readFunctionArray[i]= &Dbtup::readDynFixedSize; regTabPtr->readFunctionArray[i]= &Dbtup::readDynFixedSize;
regTabPtr->updateFunctionArray[i]= &Dbtup::updateDynFixedSize; regTabPtr->updateFunctionArray[i]= &Dbtup::updateDynFixedSize;
} else { } else {
...@@ -204,7 +202,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct, ...@@ -204,7 +202,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct,
inBufIndex++; inBufIndex++;
attributeId= ahIn.getAttributeId(); attributeId= ahIn.getAttributeId();
descr_index= attributeId << ZAD_LOG_SIZE; descr_index= attributeId << ZAD_LOG_SIZE;
ljam(); jam();
AttributeHeader::init(&outBuffer[tmpAttrBufIndex], attributeId, 0); AttributeHeader::init(&outBuffer[tmpAttrBufIndex], attributeId, 0);
ahOut= (AttributeHeader*)&outBuffer[tmpAttrBufIndex]; ahOut= (AttributeHeader*)&outBuffer[tmpAttrBufIndex];
...@@ -223,7 +221,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct, ...@@ -223,7 +221,7 @@ int Dbtup::readAttributes(KeyReqStruct *req_struct,
return -1; return -1;
} }
} else if(attributeId & AttributeHeader::PSEUDO) { } else if(attributeId & AttributeHeader::PSEUDO) {
ljam(); jam();
Uint32 sz= read_pseudo(attributeId, Uint32 sz= read_pseudo(attributeId,
req_struct, req_struct,
outBuffer+tmpAttrBufIndex+1); outBuffer+tmpAttrBufIndex+1);
...@@ -252,13 +250,13 @@ Dbtup::readFixedSizeTHOneWordNotNULL(Uint32* outBuffer, ...@@ -252,13 +250,13 @@ Dbtup::readFixedSizeTHOneWordNotNULL(Uint32* outBuffer,
ndbrequire(readOffset < req_struct->check_offset[MM]); ndbrequire(readOffset < req_struct->check_offset[MM]);
if (newIndexBuf <= maxRead) { if (newIndexBuf <= maxRead) {
ljam(); jam();
outBuffer[indexBuf]= wordRead; outBuffer[indexBuf]= wordRead;
ahOut->setDataSize(1); ahOut->setDataSize(1);
req_struct->out_buf_index= newIndexBuf; req_struct->out_buf_index= newIndexBuf;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
return false; return false;
} }
...@@ -280,14 +278,14 @@ Dbtup::readFixedSizeTHTwoWordNotNULL(Uint32* outBuffer, ...@@ -280,14 +278,14 @@ Dbtup::readFixedSizeTHTwoWordNotNULL(Uint32* outBuffer,
ndbrequire(readOffset + 1 < req_struct->check_offset[MM]); ndbrequire(readOffset + 1 < req_struct->check_offset[MM]);
if (newIndexBuf <= maxRead) { if (newIndexBuf <= maxRead) {
ljam(); jam();
ahOut->setDataSize(2); ahOut->setDataSize(2);
outBuffer[indexBuf]= wordReadFirst; outBuffer[indexBuf]= wordReadFirst;
outBuffer[indexBuf + 1]= wordReadSecond; outBuffer[indexBuf + 1]= wordReadSecond;
req_struct->out_buf_index= newIndexBuf; req_struct->out_buf_index= newIndexBuf;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
return false; return false;
} }
...@@ -311,7 +309,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer, ...@@ -311,7 +309,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
if (! charsetFlag || ! req_struct->xfrm_flag) { if (! charsetFlag || ! req_struct->xfrm_flag) {
Uint32 newIndexBuf = indexBuf + attrNoOfWords; Uint32 newIndexBuf = indexBuf + attrNoOfWords;
if (newIndexBuf <= maxRead) { if (newIndexBuf <= maxRead) {
ljam(); jam();
ahOut->setByteSize(AttributeDescriptor::getSizeInBytes(attrDescriptor)); ahOut->setByteSize(AttributeDescriptor::getSizeInBytes(attrDescriptor));
MEMCOPY_NO_WORDS(&outBuffer[indexBuf], MEMCOPY_NO_WORDS(&outBuffer[indexBuf],
&tuple_header[readOffset], &tuple_header[readOffset],
...@@ -319,11 +317,11 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer, ...@@ -319,11 +317,11 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
req_struct->out_buf_index = newIndexBuf; req_struct->out_buf_index = newIndexBuf;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
}//if }//if
} else { } else {
ljam(); jam();
Tablerec* regTabPtr = tabptr.p; Tablerec* regTabPtr = tabptr.p;
Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor); Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
uchar* dstPtr = (uchar*)&outBuffer[indexBuf]; uchar* dstPtr = (uchar*)&outBuffer[indexBuf];
...@@ -340,7 +338,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer, ...@@ -340,7 +338,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
Uint32 dstLen = xmul * (srcBytes - lb); Uint32 dstLen = xmul * (srcBytes - lb);
Uint32 maxIndexBuf = indexBuf + (dstLen >> 2); Uint32 maxIndexBuf = indexBuf + (dstLen >> 2);
if (maxIndexBuf <= maxRead && ok) { if (maxIndexBuf <= maxRead && ok) {
ljam(); jam();
const char* ssrcPtr = (const char*)srcPtr; const char* ssrcPtr = (const char*)srcPtr;
int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len); int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
ndbrequire(n != -1); ndbrequire(n != -1);
...@@ -354,7 +352,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer, ...@@ -354,7 +352,7 @@ Dbtup::readFixedSizeTHManyWordNotNULL(Uint32* outBuffer,
req_struct->out_buf_index = newIndexBuf; req_struct->out_buf_index = newIndexBuf;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
} }
} }
...@@ -368,13 +366,13 @@ Dbtup::readFixedSizeTHOneWordNULLable(Uint32* outBuffer, ...@@ -368,13 +366,13 @@ Dbtup::readFixedSizeTHOneWordNULLable(Uint32* outBuffer,
Uint32 attrDes2) Uint32 attrDes2)
{ {
if (!nullFlagCheck(req_struct, attrDes2)) { if (!nullFlagCheck(req_struct, attrDes2)) {
ljam(); jam();
return readFixedSizeTHOneWordNotNULL(outBuffer, return readFixedSizeTHOneWordNotNULL(outBuffer,
req_struct, req_struct,
ahOut, ahOut,
attrDes2); attrDes2);
} else { } else {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
return true; return true;
} }
...@@ -387,13 +385,13 @@ Dbtup::readFixedSizeTHTwoWordNULLable(Uint32* outBuffer, ...@@ -387,13 +385,13 @@ Dbtup::readFixedSizeTHTwoWordNULLable(Uint32* outBuffer,
Uint32 attrDes2) Uint32 attrDes2)
{ {
if (!nullFlagCheck(req_struct, attrDes2)) { if (!nullFlagCheck(req_struct, attrDes2)) {
ljam(); jam();
return readFixedSizeTHTwoWordNotNULL(outBuffer, return readFixedSizeTHTwoWordNotNULL(outBuffer,
req_struct, req_struct,
ahOut, ahOut,
attrDes2); attrDes2);
} else { } else {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
return true; return true;
} }
...@@ -406,13 +404,13 @@ Dbtup::readFixedSizeTHManyWordNULLable(Uint32* outBuffer, ...@@ -406,13 +404,13 @@ Dbtup::readFixedSizeTHManyWordNULLable(Uint32* outBuffer,
Uint32 attrDes2) Uint32 attrDes2)
{ {
if (!nullFlagCheck(req_struct, attrDes2)) { if (!nullFlagCheck(req_struct, attrDes2)) {
ljam(); jam();
return readFixedSizeTHManyWordNotNULL(outBuffer, return readFixedSizeTHManyWordNotNULL(outBuffer,
req_struct, req_struct,
ahOut, ahOut,
attrDes2); attrDes2);
} else { } else {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
return true; return true;
} }
...@@ -424,9 +422,9 @@ Dbtup::readFixedSizeTHZeroWordNULLable(Uint32* outBuffer, ...@@ -424,9 +422,9 @@ Dbtup::readFixedSizeTHZeroWordNULLable(Uint32* outBuffer,
AttributeHeader* ahOut, AttributeHeader* ahOut,
Uint32 attrDes2) Uint32 attrDes2)
{ {
ljam(); jam();
if (nullFlagCheck(req_struct, attrDes2)) { if (nullFlagCheck(req_struct, attrDes2)) {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
} }
return true; return true;
...@@ -478,7 +476,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer, ...@@ -478,7 +476,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
if (! charsetFlag || ! req_struct->xfrm_flag) if (! charsetFlag || ! req_struct->xfrm_flag)
{ {
if (new_index <= max_read) { if (new_index <= max_read) {
ljam(); jam();
ah_out->setByteSize(vsize_in_bytes); ah_out->setByteSize(vsize_in_bytes);
out_buffer[index_buf + (vsize_in_bytes >> 2)] = 0; out_buffer[index_buf + (vsize_in_bytes >> 2)] = 0;
memcpy(out_buffer+index_buf, memcpy(out_buffer+index_buf,
...@@ -490,7 +488,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer, ...@@ -490,7 +488,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
} }
else else
{ {
ljam(); jam();
Tablerec* regTabPtr = tabptr.p; Tablerec* regTabPtr = tabptr.p;
Uint32 maxBytes = AttributeDescriptor::getSizeInBytes(attr_descriptor); Uint32 maxBytes = AttributeDescriptor::getSizeInBytes(attr_descriptor);
Uint32 srcBytes = vsize_in_bytes; Uint32 srcBytes = vsize_in_bytes;
...@@ -509,7 +507,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer, ...@@ -509,7 +507,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
Uint32 dstLen = xmul * (maxBytes - lb); Uint32 dstLen = xmul * (maxBytes - lb);
Uint32 maxIndexBuf = index_buf + (dstLen >> 2); Uint32 maxIndexBuf = index_buf + (dstLen >> 2);
if (maxIndexBuf <= max_read && ok) { if (maxIndexBuf <= max_read && ok) {
ljam(); jam();
const char* ssrcPtr = (const char*)srcPtr; const char* ssrcPtr = (const char*)srcPtr;
int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len); int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
ndbrequire(n != -1); ndbrequire(n != -1);
...@@ -524,7 +522,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer, ...@@ -524,7 +522,7 @@ Dbtup::readVarSizeNotNULL(Uint32* out_buffer,
return true; return true;
} }
} }
ljam(); jam();
terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
return false; return false;
} }
...@@ -536,13 +534,13 @@ Dbtup::readVarSizeNULLable(Uint32* outBuffer, ...@@ -536,13 +534,13 @@ Dbtup::readVarSizeNULLable(Uint32* outBuffer,
Uint32 attrDes2) Uint32 attrDes2)
{ {
if (!nullFlagCheck(req_struct, attrDes2)) { if (!nullFlagCheck(req_struct, attrDes2)) {
ljam(); jam();
return readVarSizeNotNULL(outBuffer, return readVarSizeNotNULL(outBuffer,
req_struct, req_struct,
ahOut, ahOut,
attrDes2); attrDes2);
} else { } else {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
return true; return true;
} }
...@@ -554,7 +552,7 @@ Dbtup::readDynFixedSize(Uint32* outBuffer, ...@@ -554,7 +552,7 @@ Dbtup::readDynFixedSize(Uint32* outBuffer,
AttributeHeader* ahOut, AttributeHeader* ahOut,
Uint32 attrDes2) Uint32 attrDes2)
{ {
ljam(); jam();
terrorCode= ZVAR_SIZED_NOT_SUPPORTED; terrorCode= ZVAR_SIZED_NOT_SUPPORTED;
return false; return false;
} }
...@@ -565,7 +563,7 @@ Dbtup::readDynVarSize(Uint32* outBuffer, ...@@ -565,7 +563,7 @@ Dbtup::readDynVarSize(Uint32* outBuffer,
AttributeHeader* ahOut, AttributeHeader* ahOut,
Uint32 attrDes2) Uint32 attrDes2)
{ {
ljam(); jam();
terrorCode= ZVAR_SIZED_NOT_SUPPORTED; terrorCode= ZVAR_SIZED_NOT_SUPPORTED;
return false; return false;
}//Dbtup::readDynBigVarSize() }//Dbtup::readDynBigVarSize()
...@@ -588,7 +586,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer, ...@@ -588,7 +586,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
if (! charsetFlag || ! req_struct->xfrm_flag) { if (! charsetFlag || ! req_struct->xfrm_flag) {
Uint32 newIndexBuf = indexBuf + attrNoOfWords; Uint32 newIndexBuf = indexBuf + attrNoOfWords;
if (newIndexBuf <= maxRead) { if (newIndexBuf <= maxRead) {
ljam(); jam();
ahOut->setByteSize(AttributeDescriptor::getSizeInBytes(attrDescriptor)); ahOut->setByteSize(AttributeDescriptor::getSizeInBytes(attrDescriptor));
MEMCOPY_NO_WORDS(&outBuffer[indexBuf], MEMCOPY_NO_WORDS(&outBuffer[indexBuf],
&tuple_header[readOffset], &tuple_header[readOffset],
...@@ -596,11 +594,11 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer, ...@@ -596,11 +594,11 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
req_struct->out_buf_index = newIndexBuf; req_struct->out_buf_index = newIndexBuf;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
}//if }//if
} else { } else {
ljam(); jam();
Tablerec* regTabPtr = tabptr.p; Tablerec* regTabPtr = tabptr.p;
Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor); Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
uchar* dstPtr = (uchar*)&outBuffer[indexBuf]; uchar* dstPtr = (uchar*)&outBuffer[indexBuf];
...@@ -617,7 +615,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer, ...@@ -617,7 +615,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
Uint32 dstLen = xmul * (srcBytes - lb); Uint32 dstLen = xmul * (srcBytes - lb);
Uint32 maxIndexBuf = indexBuf + (dstLen >> 2); Uint32 maxIndexBuf = indexBuf + (dstLen >> 2);
if (maxIndexBuf <= maxRead && ok) { if (maxIndexBuf <= maxRead && ok) {
ljam(); jam();
const char* ssrcPtr = (const char*)srcPtr; const char* ssrcPtr = (const char*)srcPtr;
int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len); int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
ndbrequire(n != -1); ndbrequire(n != -1);
...@@ -631,7 +629,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer, ...@@ -631,7 +629,7 @@ Dbtup::readDiskFixedSizeNotNULL(Uint32* outBuffer,
req_struct->out_buf_index = newIndexBuf; req_struct->out_buf_index = newIndexBuf;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
} }
} }
...@@ -645,13 +643,13 @@ Dbtup::readDiskFixedSizeNULLable(Uint32* outBuffer, ...@@ -645,13 +643,13 @@ Dbtup::readDiskFixedSizeNULLable(Uint32* outBuffer,
Uint32 attrDes2) Uint32 attrDes2)
{ {
if (!disk_nullFlagCheck(req_struct, attrDes2)) { if (!disk_nullFlagCheck(req_struct, attrDes2)) {
ljam(); jam();
return readDiskFixedSizeNotNULL(outBuffer, return readDiskFixedSizeNotNULL(outBuffer,
req_struct, req_struct,
ahOut, ahOut,
attrDes2); attrDes2);
} else { } else {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
return true; return true;
} }
...@@ -680,7 +678,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer, ...@@ -680,7 +678,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer,
ndbrequire(vsize_in_words <= max_var_size); ndbrequire(vsize_in_words <= max_var_size);
if (new_index <= max_read) { if (new_index <= max_read) {
ljam(); jam();
ah_out->setByteSize(vsize_in_bytes); ah_out->setByteSize(vsize_in_bytes);
memcpy(out_buffer+index_buf, memcpy(out_buffer+index_buf,
req_struct->m_var_data[DD].m_data_ptr+var_attr_pos, req_struct->m_var_data[DD].m_data_ptr+var_attr_pos,
...@@ -688,7 +686,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer, ...@@ -688,7 +686,7 @@ Dbtup::readDiskVarSizeNotNULL(Uint32* out_buffer,
req_struct->out_buf_index= new_index; req_struct->out_buf_index= new_index;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
return false; return false;
} }
...@@ -701,13 +699,13 @@ Dbtup::readDiskVarSizeNULLable(Uint32* outBuffer, ...@@ -701,13 +699,13 @@ Dbtup::readDiskVarSizeNULLable(Uint32* outBuffer,
Uint32 attrDes2) Uint32 attrDes2)
{ {
if (!disk_nullFlagCheck(req_struct, attrDes2)) { if (!disk_nullFlagCheck(req_struct, attrDes2)) {
ljam(); jam();
return readDiskVarSizeNotNULL(outBuffer, return readDiskVarSizeNotNULL(outBuffer,
req_struct, req_struct,
ahOut, ahOut,
attrDes2); attrDes2);
} else { } else {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
return true; return true;
} }
...@@ -749,13 +747,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct, ...@@ -749,13 +747,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
if (checkUpdateOfPrimaryKey(req_struct, if (checkUpdateOfPrimaryKey(req_struct,
&inBuffer[inBufIndex], &inBuffer[inBufIndex],
regTabPtr)) { regTabPtr)) {
ljam(); jam();
terrorCode= ZTRY_UPDATE_PRIMARY_KEY; terrorCode= ZTRY_UPDATE_PRIMARY_KEY;
return -1; return -1;
} }
} }
UpdateFunction f= regTabPtr->updateFunctionArray[attributeId]; UpdateFunction f= regTabPtr->updateFunctionArray[attributeId];
ljam(); jam();
req_struct->attr_descriptor= attrDescriptor; req_struct->attr_descriptor= attrDescriptor;
req_struct->changeMask.set(attributeId); req_struct->changeMask.set(attributeId);
if (attributeId >= 64) { if (attributeId >= 64) {
...@@ -771,13 +769,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct, ...@@ -771,13 +769,13 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
inBufIndex= req_struct->in_buf_index; inBufIndex= req_struct->in_buf_index;
continue; continue;
} else { } else {
ljam(); jam();
return -1; return -1;
} }
} }
else if(attributeId == AttributeHeader::DISK_REF) else if(attributeId == AttributeHeader::DISK_REF)
{ {
ljam(); jam();
Uint32 sz= ahIn.getDataSize(); Uint32 sz= ahIn.getDataSize();
ndbrequire(sz == 2); ndbrequire(sz == 2);
req_struct->m_tuple_ptr->m_header_bits |= Tuple_header::DISK_PART; req_struct->m_tuple_ptr->m_header_bits |= Tuple_header::DISK_PART;
...@@ -788,7 +786,7 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct, ...@@ -788,7 +786,7 @@ int Dbtup::updateAttributes(KeyReqStruct *req_struct,
} }
else else
{ {
ljam(); jam();
terrorCode= ZATTRIBUTE_ID_ERROR; terrorCode= ZATTRIBUTE_ID_ERROR;
return -1; return -1;
} }
...@@ -842,13 +840,13 @@ Dbtup::checkUpdateOfPrimaryKey(KeyReqStruct* req_struct, ...@@ -842,13 +840,13 @@ Dbtup::checkUpdateOfPrimaryKey(KeyReqStruct* req_struct,
ndbrequire(req_struct->out_buf_index == ahOut->getDataSize()); ndbrequire(req_struct->out_buf_index == ahOut->getDataSize());
if (ahIn.getDataSize() != ahOut->getDataSize()) { if (ahIn.getDataSize() != ahOut->getDataSize()) {
ljam(); jam();
return true; return true;
} }
if (memcmp(&keyReadBuffer[0], if (memcmp(&keyReadBuffer[0],
&updateBuffer[1], &updateBuffer[1],
req_struct->out_buf_index << 2) != 0) { req_struct->out_buf_index << 2) != 0) {
ljam(); jam();
return true; return true;
} }
return false; return false;
...@@ -871,17 +869,17 @@ Dbtup::updateFixedSizeTHOneWordNotNULL(Uint32* inBuffer, ...@@ -871,17 +869,17 @@ Dbtup::updateFixedSizeTHOneWordNotNULL(Uint32* inBuffer,
if (newIndex <= inBufLen) { if (newIndex <= inBufLen) {
Uint32 updateWord= inBuffer[indexBuf + 1]; Uint32 updateWord= inBuffer[indexBuf + 1];
if (!nullIndicator) { if (!nullIndicator) {
ljam(); jam();
req_struct->in_buf_index= newIndex; req_struct->in_buf_index= newIndex;
tuple_header[updateOffset]= updateWord; tuple_header[updateOffset]= updateWord;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZNOT_NULL_ATTR; terrorCode= ZNOT_NULL_ATTR;
return false; return false;
} }
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -906,18 +904,18 @@ Dbtup::updateFixedSizeTHTwoWordNotNULL(Uint32* inBuffer, ...@@ -906,18 +904,18 @@ Dbtup::updateFixedSizeTHTwoWordNotNULL(Uint32* inBuffer,
Uint32 updateWord1= inBuffer[indexBuf + 1]; Uint32 updateWord1= inBuffer[indexBuf + 1];
Uint32 updateWord2= inBuffer[indexBuf + 2]; Uint32 updateWord2= inBuffer[indexBuf + 2];
if (!nullIndicator) { if (!nullIndicator) {
ljam(); jam();
req_struct->in_buf_index= newIndex; req_struct->in_buf_index= newIndex;
tuple_header[updateOffset]= updateWord1; tuple_header[updateOffset]= updateWord1;
tuple_header[updateOffset + 1]= updateWord2; tuple_header[updateOffset + 1]= updateWord2;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZNOT_NULL_ATTR; terrorCode= ZNOT_NULL_ATTR;
return false; return false;
} }
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -943,9 +941,9 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer, ...@@ -943,9 +941,9 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
if (newIndex <= inBufLen) { if (newIndex <= inBufLen) {
if (!nullIndicator) { if (!nullIndicator) {
ljam(); jam();
if (charsetFlag) { if (charsetFlag) {
ljam(); jam();
Tablerec* regTabPtr = tabptr.p; Tablerec* regTabPtr = tabptr.p;
Uint32 typeId = AttributeDescriptor::getType(attrDescriptor); Uint32 typeId = AttributeDescriptor::getType(attrDescriptor);
Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor); Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
...@@ -957,14 +955,14 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer, ...@@ -957,14 +955,14 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
const char* ssrc = (const char*)&inBuffer[indexBuf + 1]; const char* ssrc = (const char*)&inBuffer[indexBuf + 1];
Uint32 lb, len; Uint32 lb, len;
if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) { if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) {
ljam(); jam();
terrorCode = ZINVALID_CHAR_FORMAT; terrorCode = ZINVALID_CHAR_FORMAT;
return false; return false;
} }
// fast fix bug#7340 // fast fix bug#7340
if (typeId != NDB_TYPE_TEXT && if (typeId != NDB_TYPE_TEXT &&
(*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, &not_used) != len) { (*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, &not_used) != len) {
ljam(); jam();
terrorCode = ZINVALID_CHAR_FORMAT; terrorCode = ZINVALID_CHAR_FORMAT;
return false; return false;
} }
...@@ -976,12 +974,12 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer, ...@@ -976,12 +974,12 @@ Dbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZNOT_NULL_ATTR; terrorCode= ZNOT_NULL_ATTR;
return false; return false;
} }
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -999,7 +997,7 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer, ...@@ -999,7 +997,7 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer,
Uint32 *bits= req_struct->m_tuple_ptr->get_null_bits(regTabPtr); Uint32 *bits= req_struct->m_tuple_ptr->get_null_bits(regTabPtr);
if (!nullIndicator) { if (!nullIndicator) {
ljam(); jam();
BitmaskImpl::clear(regTabPtr->m_offsets[MM].m_null_words, bits, pos); BitmaskImpl::clear(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
return updateFixedSizeTHManyWordNotNULL(inBuffer, return updateFixedSizeTHManyWordNotNULL(inBuffer,
req_struct, req_struct,
...@@ -1008,11 +1006,11 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer, ...@@ -1008,11 +1006,11 @@ Dbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer,
Uint32 newIndex= req_struct->in_buf_index + 1; Uint32 newIndex= req_struct->in_buf_index + 1;
if (newIndex <= req_struct->in_buf_len) { if (newIndex <= req_struct->in_buf_len) {
BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos); BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
ljam(); jam();
req_struct->in_buf_index= newIndex; req_struct->in_buf_index= newIndex;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -1046,7 +1044,7 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer, ...@@ -1046,7 +1044,7 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer,
if (new_index <= in_buf_len && vsize_in_words <= max_var_size) { if (new_index <= in_buf_len && vsize_in_words <= max_var_size) {
if (!null_ind) { if (!null_ind) {
ljam(); jam();
var_attr_pos= vpos_array[var_index]; var_attr_pos= vpos_array[var_index];
var_data_start= req_struct->m_var_data[MM].m_data_ptr; var_data_start= req_struct->m_var_data[MM].m_data_ptr;
vpos_array[var_index+idx]= var_attr_pos+size_in_bytes; vpos_array[var_index+idx]= var_attr_pos+size_in_bytes;
...@@ -1057,12 +1055,12 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer, ...@@ -1057,12 +1055,12 @@ Dbtup::updateVarSizeNotNULL(Uint32* in_buffer,
size_in_bytes); size_in_bytes);
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZNOT_NULL_ATTR; terrorCode= ZNOT_NULL_ATTR;
return false; return false;
} }
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -1082,7 +1080,7 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer, ...@@ -1082,7 +1080,7 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer,
Uint32 idx= req_struct->m_var_data[MM].m_var_len_offset; Uint32 idx= req_struct->m_var_data[MM].m_var_len_offset;
if (!nullIndicator) { if (!nullIndicator) {
ljam(); jam();
BitmaskImpl::clear(regTabPtr->m_offsets[MM].m_null_words, bits, pos); BitmaskImpl::clear(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
return updateVarSizeNotNULL(inBuffer, return updateVarSizeNotNULL(inBuffer,
req_struct, req_struct,
...@@ -1092,13 +1090,13 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer, ...@@ -1092,13 +1090,13 @@ Dbtup::updateVarSizeNULLable(Uint32* inBuffer,
Uint32 var_index= AttributeOffset::getOffset(attrDes2); Uint32 var_index= AttributeOffset::getOffset(attrDes2);
Uint32 var_pos= req_struct->var_pos_array[var_index]; Uint32 var_pos= req_struct->var_pos_array[var_index];
if (newIndex <= req_struct->in_buf_len) { if (newIndex <= req_struct->in_buf_len) {
ljam(); jam();
BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos); BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
req_struct->var_pos_array[var_index+idx]= var_pos; req_struct->var_pos_array[var_index+idx]= var_pos;
req_struct->in_buf_index= newIndex; req_struct->in_buf_index= newIndex;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -1110,7 +1108,7 @@ Dbtup::updateDynFixedSize(Uint32* inBuffer, ...@@ -1110,7 +1108,7 @@ Dbtup::updateDynFixedSize(Uint32* inBuffer,
KeyReqStruct *req_struct, KeyReqStruct *req_struct,
Uint32 attrDes2) Uint32 attrDes2)
{ {
ljam(); jam();
terrorCode= ZVAR_SIZED_NOT_SUPPORTED; terrorCode= ZVAR_SIZED_NOT_SUPPORTED;
return false; return false;
} }
...@@ -1120,7 +1118,7 @@ Dbtup::updateDynVarSize(Uint32* inBuffer, ...@@ -1120,7 +1118,7 @@ Dbtup::updateDynVarSize(Uint32* inBuffer,
KeyReqStruct *req_struct, KeyReqStruct *req_struct,
Uint32 attrDes2) Uint32 attrDes2)
{ {
ljam(); jam();
terrorCode= ZVAR_SIZED_NOT_SUPPORTED; terrorCode= ZVAR_SIZED_NOT_SUPPORTED;
return false; return false;
} }
...@@ -1218,7 +1216,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer, ...@@ -1218,7 +1216,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer,
Uint32 maxRead = req_struct->max_read; Uint32 maxRead = req_struct->max_read;
Uint32 *bits= req_struct->m_tuple_ptr->get_null_bits(regTabPtr); Uint32 *bits= req_struct->m_tuple_ptr->get_null_bits(regTabPtr);
if (newIndexBuf <= maxRead) { if (newIndexBuf <= maxRead) {
ljam(); jam();
ahOut->setDataSize((bitCount + 31) >> 5); ahOut->setDataSize((bitCount + 31) >> 5);
req_struct->out_buf_index = newIndexBuf; req_struct->out_buf_index = newIndexBuf;
...@@ -1227,7 +1225,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer, ...@@ -1227,7 +1225,7 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer,
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
return false; return false;
}//if }//if
...@@ -1251,20 +1249,20 @@ Dbtup::readBitsNULLable(Uint32* outBuffer, ...@@ -1251,20 +1249,20 @@ Dbtup::readBitsNULLable(Uint32* outBuffer,
if(BitmaskImpl::get(regTabPtr->m_offsets[MM].m_null_words, bits, pos)) if(BitmaskImpl::get(regTabPtr->m_offsets[MM].m_null_words, bits, pos))
{ {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
return true; return true;
} }
if (newIndexBuf <= maxRead) { if (newIndexBuf <= maxRead) {
ljam(); jam();
ahOut->setDataSize((bitCount + 31) >> 5); ahOut->setDataSize((bitCount + 31) >> 5);
req_struct->out_buf_index = newIndexBuf; req_struct->out_buf_index = newIndexBuf;
BitmaskImpl::getField(regTabPtr->m_offsets[MM].m_null_words, bits, pos+1, BitmaskImpl::getField(regTabPtr->m_offsets[MM].m_null_words, bits, pos+1,
bitCount, outBuffer+indexBuf); bitCount, outBuffer+indexBuf);
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
return false; return false;
}//if }//if
...@@ -1293,12 +1291,12 @@ Dbtup::updateBitsNotNULL(Uint32* inBuffer, ...@@ -1293,12 +1291,12 @@ Dbtup::updateBitsNotNULL(Uint32* inBuffer,
req_struct->in_buf_index = newIndex; req_struct->in_buf_index = newIndex;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZNOT_NULL_ATTR; terrorCode = ZNOT_NULL_ATTR;
return false; return false;
}//if }//if
} else { } else {
ljam(); jam();
terrorCode = ZAI_INCONSISTENCY_ERROR; terrorCode = ZAI_INCONSISTENCY_ERROR;
return false; return false;
}//if }//if
...@@ -1331,13 +1329,13 @@ Dbtup::updateBitsNULLable(Uint32* inBuffer, ...@@ -1331,13 +1329,13 @@ Dbtup::updateBitsNULLable(Uint32* inBuffer,
Uint32 newIndex = indexBuf + 1; Uint32 newIndex = indexBuf + 1;
if (newIndex <= req_struct->in_buf_len) if (newIndex <= req_struct->in_buf_len)
{ {
ljam(); jam();
BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos); BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
req_struct->in_buf_index = newIndex; req_struct->in_buf_index = newIndex;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZAI_INCONSISTENCY_ERROR; terrorCode = ZAI_INCONSISTENCY_ERROR;
return false; return false;
}//if }//if
...@@ -1364,9 +1362,9 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer, ...@@ -1364,9 +1362,9 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
if (newIndex <= inBufLen) { if (newIndex <= inBufLen) {
if (!nullIndicator) { if (!nullIndicator) {
ljam(); jam();
if (charsetFlag) { if (charsetFlag) {
ljam(); jam();
Tablerec* regTabPtr = tabptr.p; Tablerec* regTabPtr = tabptr.p;
Uint32 typeId = AttributeDescriptor::getType(attrDescriptor); Uint32 typeId = AttributeDescriptor::getType(attrDescriptor);
Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor); Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
...@@ -1378,14 +1376,14 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer, ...@@ -1378,14 +1376,14 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
const char* ssrc = (const char*)&inBuffer[indexBuf + 1]; const char* ssrc = (const char*)&inBuffer[indexBuf + 1];
Uint32 lb, len; Uint32 lb, len;
if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) { if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) {
ljam(); jam();
terrorCode = ZINVALID_CHAR_FORMAT; terrorCode = ZINVALID_CHAR_FORMAT;
return false; return false;
} }
// fast fix bug#7340 // fast fix bug#7340
if (typeId != NDB_TYPE_TEXT && if (typeId != NDB_TYPE_TEXT &&
(*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, &not_used) != len) { (*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, &not_used) != len) {
ljam(); jam();
terrorCode = ZINVALID_CHAR_FORMAT; terrorCode = ZINVALID_CHAR_FORMAT;
return false; return false;
} }
...@@ -1396,12 +1394,12 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer, ...@@ -1396,12 +1394,12 @@ Dbtup::updateDiskFixedSizeNotNULL(Uint32* inBuffer,
noOfWords); noOfWords);
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZNOT_NULL_ATTR; terrorCode= ZNOT_NULL_ATTR;
return false; return false;
} }
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -1419,7 +1417,7 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer, ...@@ -1419,7 +1417,7 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer,
Uint32 *bits= req_struct->m_disk_ptr->get_null_bits(regTabPtr, DD); Uint32 *bits= req_struct->m_disk_ptr->get_null_bits(regTabPtr, DD);
if (!nullIndicator) { if (!nullIndicator) {
ljam(); jam();
BitmaskImpl::clear(regTabPtr->m_offsets[DD].m_null_words, bits, pos); BitmaskImpl::clear(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
return updateDiskFixedSizeNotNULL(inBuffer, return updateDiskFixedSizeNotNULL(inBuffer,
req_struct, req_struct,
...@@ -1428,11 +1426,11 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer, ...@@ -1428,11 +1426,11 @@ Dbtup::updateDiskFixedSizeNULLable(Uint32* inBuffer,
Uint32 newIndex= req_struct->in_buf_index + 1; Uint32 newIndex= req_struct->in_buf_index + 1;
if (newIndex <= req_struct->in_buf_len) { if (newIndex <= req_struct->in_buf_len) {
BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos); BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
ljam(); jam();
req_struct->in_buf_index= newIndex; req_struct->in_buf_index= newIndex;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -1466,7 +1464,7 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer, ...@@ -1466,7 +1464,7 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer,
if (new_index <= in_buf_len && vsize_in_words <= max_var_size) { if (new_index <= in_buf_len && vsize_in_words <= max_var_size) {
if (!null_ind) { if (!null_ind) {
ljam(); jam();
var_attr_pos= vpos_array[var_index]; var_attr_pos= vpos_array[var_index];
var_data_start= req_struct->m_var_data[DD].m_data_ptr; var_data_start= req_struct->m_var_data[DD].m_data_ptr;
vpos_array[var_index+idx]= var_attr_pos+size_in_bytes; vpos_array[var_index+idx]= var_attr_pos+size_in_bytes;
...@@ -1477,12 +1475,12 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer, ...@@ -1477,12 +1475,12 @@ Dbtup::updateDiskVarSizeNotNULL(Uint32* in_buffer,
size_in_bytes); size_in_bytes);
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZNOT_NULL_ATTR; terrorCode= ZNOT_NULL_ATTR;
return false; return false;
} }
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -1502,7 +1500,7 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer, ...@@ -1502,7 +1500,7 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer,
Uint32 idx= req_struct->m_var_data[DD].m_var_len_offset; Uint32 idx= req_struct->m_var_data[DD].m_var_len_offset;
if (!nullIndicator) { if (!nullIndicator) {
ljam(); jam();
BitmaskImpl::clear(regTabPtr->m_offsets[DD].m_null_words, bits, pos); BitmaskImpl::clear(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
return updateDiskVarSizeNotNULL(inBuffer, return updateDiskVarSizeNotNULL(inBuffer,
req_struct, req_struct,
...@@ -1512,13 +1510,13 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer, ...@@ -1512,13 +1510,13 @@ Dbtup::updateDiskVarSizeNULLable(Uint32* inBuffer,
Uint32 var_index= AttributeOffset::getOffset(attrDes2); Uint32 var_index= AttributeOffset::getOffset(attrDes2);
Uint32 var_pos= req_struct->var_pos_array[var_index]; Uint32 var_pos= req_struct->var_pos_array[var_index];
if (newIndex <= req_struct->in_buf_len) { if (newIndex <= req_struct->in_buf_len) {
ljam(); jam();
BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos); BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
req_struct->var_pos_array[var_index+idx]= var_pos; req_struct->var_pos_array[var_index+idx]= var_pos;
req_struct->in_buf_index= newIndex; req_struct->in_buf_index= newIndex;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode= ZAI_INCONSISTENCY_ERROR; terrorCode= ZAI_INCONSISTENCY_ERROR;
return false; return false;
} }
...@@ -1540,7 +1538,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer, ...@@ -1540,7 +1538,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer,
Uint32 maxRead = req_struct->max_read; Uint32 maxRead = req_struct->max_read;
Uint32 *bits= req_struct->m_disk_ptr->get_null_bits(regTabPtr, DD); Uint32 *bits= req_struct->m_disk_ptr->get_null_bits(regTabPtr, DD);
if (newIndexBuf <= maxRead) { if (newIndexBuf <= maxRead) {
ljam(); jam();
ahOut->setDataSize((bitCount + 31) >> 5); ahOut->setDataSize((bitCount + 31) >> 5);
req_struct->out_buf_index = newIndexBuf; req_struct->out_buf_index = newIndexBuf;
...@@ -1549,7 +1547,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer, ...@@ -1549,7 +1547,7 @@ Dbtup::readDiskBitsNotNULL(Uint32* outBuffer,
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
return false; return false;
}//if }//if
...@@ -1573,20 +1571,20 @@ Dbtup::readDiskBitsNULLable(Uint32* outBuffer, ...@@ -1573,20 +1571,20 @@ Dbtup::readDiskBitsNULLable(Uint32* outBuffer,
if(BitmaskImpl::get(regTabPtr->m_offsets[DD].m_null_words, bits, pos)) if(BitmaskImpl::get(regTabPtr->m_offsets[DD].m_null_words, bits, pos))
{ {
ljam(); jam();
ahOut->setNULL(); ahOut->setNULL();
return true; return true;
} }
if (newIndexBuf <= maxRead) { if (newIndexBuf <= maxRead) {
ljam(); jam();
ahOut->setDataSize((bitCount + 31) >> 5); ahOut->setDataSize((bitCount + 31) >> 5);
req_struct->out_buf_index = newIndexBuf; req_struct->out_buf_index = newIndexBuf;
BitmaskImpl::getField(regTabPtr->m_offsets[DD].m_null_words, bits, pos+1, BitmaskImpl::getField(regTabPtr->m_offsets[DD].m_null_words, bits, pos+1,
bitCount, outBuffer+indexBuf); bitCount, outBuffer+indexBuf);
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
return false; return false;
}//if }//if
...@@ -1615,12 +1613,12 @@ Dbtup::updateDiskBitsNotNULL(Uint32* inBuffer, ...@@ -1615,12 +1613,12 @@ Dbtup::updateDiskBitsNotNULL(Uint32* inBuffer,
req_struct->in_buf_index = newIndex; req_struct->in_buf_index = newIndex;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZNOT_NULL_ATTR; terrorCode = ZNOT_NULL_ATTR;
return false; return false;
}//if }//if
} else { } else {
ljam(); jam();
terrorCode = ZAI_INCONSISTENCY_ERROR; terrorCode = ZAI_INCONSISTENCY_ERROR;
return false; return false;
}//if }//if
...@@ -1653,13 +1651,13 @@ Dbtup::updateDiskBitsNULLable(Uint32* inBuffer, ...@@ -1653,13 +1651,13 @@ Dbtup::updateDiskBitsNULLable(Uint32* inBuffer,
Uint32 newIndex = indexBuf + 1; Uint32 newIndex = indexBuf + 1;
if (newIndex <= req_struct->in_buf_len) if (newIndex <= req_struct->in_buf_len)
{ {
ljam(); jam();
BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos); BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
req_struct->in_buf_index = newIndex; req_struct->in_buf_index = newIndex;
return true; return true;
} else { } else {
ljam(); jam();
terrorCode = ZAI_INCONSISTENCY_ERROR; terrorCode = ZAI_INCONSISTENCY_ERROR;
return false; return false;
}//if }//if
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_SCAN_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <signaldata/AccScan.hpp> #include <signaldata/AccScan.hpp>
#include <signaldata/NextScan.hpp> #include <signaldata/NextScan.hpp>
......
...@@ -15,14 +15,12 @@ ...@@ -15,14 +15,12 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_STORE_PROC_DEF_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(18000 + __LINE__); }
#define ljamEntry() { jamEntryLine(18000 + __LINE__); }
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* ------------ADD/DROP STORED PROCEDURE MODULE ------------------- */ /* ------------ADD/DROP STORED PROCEDURE MODULE ------------------- */
...@@ -32,7 +30,7 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal) ...@@ -32,7 +30,7 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
{ {
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
TablerecPtr regTabPtr; TablerecPtr regTabPtr;
ljamEntry(); jamEntry();
regOperPtr.i = signal->theData[0]; regOperPtr.i = signal->theData[0];
c_operation_pool.getPtr(regOperPtr); c_operation_pool.getPtr(regOperPtr);
regTabPtr.i = signal->theData[1]; regTabPtr.i = signal->theData[1];
...@@ -46,17 +44,17 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal) ...@@ -46,17 +44,17 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
ndbrequire(regTabPtr.p->tableStatus == DEFINED); ndbrequire(regTabPtr.p->tableStatus == DEFINED);
switch (requestInfo) { switch (requestInfo) {
case ZSCAN_PROCEDURE: case ZSCAN_PROCEDURE:
ljam(); jam();
scanProcedure(signal, scanProcedure(signal,
regOperPtr.p, regOperPtr.p,
signal->theData[4]); signal->theData[4]);
break; break;
case ZCOPY_PROCEDURE: case ZCOPY_PROCEDURE:
ljam(); jam();
copyProcedure(signal, regTabPtr, regOperPtr.p); copyProcedure(signal, regTabPtr, regOperPtr.p);
break; break;
case ZSTORED_PROCEDURE_DELETE: case ZSTORED_PROCEDURE_DELETE:
ljam(); jam();
deleteScanProcedure(signal, regOperPtr.p); deleteScanProcedure(signal, regOperPtr.p);
break; break;
default: default:
...@@ -124,14 +122,14 @@ void Dbtup::copyProcedure(Signal* signal, ...@@ -124,14 +122,14 @@ void Dbtup::copyProcedure(Signal* signal,
AttributeHeader::init(&signal->theData[length + 1], Ti, 0); AttributeHeader::init(&signal->theData[length + 1], Ti, 0);
length++; length++;
if (length == 24) { if (length == 24) {
ljam(); jam();
ndbrequire(storedProcedureAttrInfo(signal, regOperPtr, ndbrequire(storedProcedureAttrInfo(signal, regOperPtr,
signal->theData+1, length, true)); signal->theData+1, length, true));
length = 0; length = 0;
}//if }//if
}//for }//for
if (length != 0) { if (length != 0) {
ljam(); jam();
ndbrequire(storedProcedureAttrInfo(signal, regOperPtr, ndbrequire(storedProcedureAttrInfo(signal, regOperPtr,
signal->theData+1, length, true)); signal->theData+1, length, true));
}//if }//if
...@@ -155,7 +153,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal, ...@@ -155,7 +153,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
ndbrequire(regOperPtr->currentAttrinbufLen <= regOperPtr->attrinbufLen); ndbrequire(regOperPtr->currentAttrinbufLen <= regOperPtr->attrinbufLen);
if ((RnoFree > MIN_ATTRBUF) || if ((RnoFree > MIN_ATTRBUF) ||
(copyProcedure)) { (copyProcedure)) {
ljam(); jam();
regAttrPtr.i = cfirstfreeAttrbufrec; regAttrPtr.i = cfirstfreeAttrbufrec;
ptrCheckGuard(regAttrPtr, cnoOfAttrbufrec, attrbufrec); ptrCheckGuard(regAttrPtr, cnoOfAttrbufrec, attrbufrec);
regAttrPtr.p->attrbuf[ZBUF_DATA_LEN] = 0; regAttrPtr.p->attrbuf[ZBUF_DATA_LEN] = 0;
...@@ -163,18 +161,18 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal, ...@@ -163,18 +161,18 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
cnoFreeAttrbufrec = RnoFree - 1; cnoFreeAttrbufrec = RnoFree - 1;
regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL; regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL;
} else { } else {
ljam(); jam();
storedSeizeAttrinbufrecErrorLab(signal, regOperPtr); storedSeizeAttrinbufrecErrorLab(signal, regOperPtr);
return false; return false;
}//if }//if
if (regOperPtr->firstAttrinbufrec == RNIL) { if (regOperPtr->firstAttrinbufrec == RNIL) {
ljam(); jam();
regOperPtr->firstAttrinbufrec = regAttrPtr.i; regOperPtr->firstAttrinbufrec = regAttrPtr.i;
}//if }//if
regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL; regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL;
if (regOperPtr->lastAttrinbufrec != RNIL) { if (regOperPtr->lastAttrinbufrec != RNIL) {
AttrbufrecPtr tempAttrinbufptr; AttrbufrecPtr tempAttrinbufptr;
ljam(); jam();
tempAttrinbufptr.i = regOperPtr->lastAttrinbufrec; tempAttrinbufptr.i = regOperPtr->lastAttrinbufrec;
ptrCheckGuard(tempAttrinbufptr, cnoOfAttrbufrec, attrbufrec); ptrCheckGuard(tempAttrinbufptr, cnoOfAttrbufrec, attrbufrec);
tempAttrinbufptr.p->attrbuf[ZBUF_NEXT] = regAttrPtr.i; tempAttrinbufptr.p->attrbuf[ZBUF_NEXT] = regAttrPtr.i;
...@@ -187,7 +185,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal, ...@@ -187,7 +185,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
length); length);
if (regOperPtr->currentAttrinbufLen < regOperPtr->attrinbufLen) { if (regOperPtr->currentAttrinbufLen < regOperPtr->attrinbufLen) {
ljam(); jam();
return true; return true;
}//if }//if
if (ERROR_INSERTED(4005) && !copyProcedure) { if (ERROR_INSERTED(4005) && !copyProcedure) {
......
...@@ -15,14 +15,12 @@ ...@@ -15,14 +15,12 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_TAB_DES_MAN_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(22000 + __LINE__); }
#define ljamEntry() { jamEntryLine(22000 + __LINE__); }
/* /*
* TABLE DESCRIPTOR MEMORY MANAGER * TABLE DESCRIPTOR MEMORY MANAGER
* *
...@@ -65,30 +63,30 @@ Uint32 Dbtup::allocTabDescr(const Tablerec* regTabPtr, Uint32* offset) ...@@ -65,30 +63,30 @@ Uint32 Dbtup::allocTabDescr(const Tablerec* regTabPtr, Uint32* offset)
allocSize = (((allocSize - 1) >> 4) + 1) << 4; allocSize = (((allocSize - 1) >> 4) + 1) << 4;
Uint32 list = nextHigherTwoLog(allocSize - 1); /* CALCULATE WHICH LIST IT BELONGS TO */ Uint32 list = nextHigherTwoLog(allocSize - 1); /* CALCULATE WHICH LIST IT BELONGS TO */
for (Uint32 i = list; i < 16; i++) { for (Uint32 i = list; i < 16; i++) {
ljam(); jam();
if (cfreeTdList[i] != RNIL) { if (cfreeTdList[i] != RNIL) {
ljam(); jam();
reference = cfreeTdList[i]; reference = cfreeTdList[i];
removeTdArea(reference, i); /* REMOVE THE AREA FROM THE FREELIST */ removeTdArea(reference, i); /* REMOVE THE AREA FROM THE FREELIST */
Uint32 retNo = (1 << i) - allocSize; /* CALCULATE THE DIFFERENCE */ Uint32 retNo = (1 << i) - allocSize; /* CALCULATE THE DIFFERENCE */
if (retNo >= ZTD_FREE_SIZE) { if (retNo >= ZTD_FREE_SIZE) {
ljam(); jam();
// return unused words, of course without attempting left merge // return unused words, of course without attempting left merge
Uint32 retRef = reference + allocSize; Uint32 retRef = reference + allocSize;
freeTabDescr(retRef, retNo, false); freeTabDescr(retRef, retNo, false);
} else { } else {
ljam(); jam();
allocSize = 1 << i; allocSize = 1 << i;
}//if }//if
break; break;
}//if }//if
}//for }//for
if (reference == RNIL) { if (reference == RNIL) {
ljam(); jam();
terrorCode = ZMEM_NOTABDESCR_ERROR; terrorCode = ZMEM_NOTABDESCR_ERROR;
return RNIL; return RNIL;
} else { } else {
ljam(); jam();
setTabDescrWord((reference + allocSize) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL); setTabDescrWord((reference + allocSize) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL);
setTabDescrWord(reference + ZTD_DATASIZE, allocSize); setTabDescrWord(reference + ZTD_DATASIZE, allocSize);
...@@ -105,7 +103,7 @@ void Dbtup::freeTabDescr(Uint32 retRef, Uint32 retNo, bool normal) ...@@ -105,7 +103,7 @@ void Dbtup::freeTabDescr(Uint32 retRef, Uint32 retNo, bool normal)
{ {
itdaMergeTabDescr(retRef, retNo, normal); /* MERGE WITH POSSIBLE NEIGHBOURS */ itdaMergeTabDescr(retRef, retNo, normal); /* MERGE WITH POSSIBLE NEIGHBOURS */
while (retNo >= ZTD_FREE_SIZE) { while (retNo >= ZTD_FREE_SIZE) {
ljam(); jam();
Uint32 list = nextHigherTwoLog(retNo); Uint32 list = nextHigherTwoLog(retNo);
list--; /* RETURN TO NEXT LOWER LIST */ list--; /* RETURN TO NEXT LOWER LIST */
Uint32 sizeOfChunk = 1 << list; Uint32 sizeOfChunk = 1 << list;
...@@ -136,7 +134,7 @@ void Dbtup::insertTdArea(Uint32 tabDesRef, Uint32 list) ...@@ -136,7 +134,7 @@ void Dbtup::insertTdArea(Uint32 tabDesRef, Uint32 list)
setTabDescrWord(tabDesRef + ZTD_FL_HEADER, ZTD_TYPE_FREE); setTabDescrWord(tabDesRef + ZTD_FL_HEADER, ZTD_TYPE_FREE);
setTabDescrWord(tabDesRef + ZTD_FL_NEXT, cfreeTdList[list]); setTabDescrWord(tabDesRef + ZTD_FL_NEXT, cfreeTdList[list]);
if (cfreeTdList[list] != RNIL) { if (cfreeTdList[list] != RNIL) {
ljam(); /* PREVIOUSLY EMPTY SLOT */ jam(); /* PREVIOUSLY EMPTY SLOT */
setTabDescrWord(cfreeTdList[list] + ZTD_FL_PREV, tabDesRef); setTabDescrWord(cfreeTdList[list] + ZTD_FL_PREV, tabDesRef);
}//if }//if
cfreeTdList[list] = tabDesRef; /* RELINK THE LIST */ cfreeTdList[list] = tabDesRef; /* RELINK THE LIST */
...@@ -156,28 +154,28 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal) ...@@ -156,28 +154,28 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
{ {
// merge right // merge right
while ((retRef + retNo) < cnoOfTabDescrRec) { while ((retRef + retNo) < cnoOfTabDescrRec) {
ljam(); jam();
Uint32 tabDesRef = retRef + retNo; Uint32 tabDesRef = retRef + retNo;
Uint32 headerWord = getTabDescrWord(tabDesRef + ZTD_FL_HEADER); Uint32 headerWord = getTabDescrWord(tabDesRef + ZTD_FL_HEADER);
if (headerWord == ZTD_TYPE_FREE) { if (headerWord == ZTD_TYPE_FREE) {
ljam(); jam();
Uint32 sizeOfMergedPart = getTabDescrWord(tabDesRef + ZTD_FL_SIZE); Uint32 sizeOfMergedPart = getTabDescrWord(tabDesRef + ZTD_FL_SIZE);
retNo += sizeOfMergedPart; retNo += sizeOfMergedPart;
Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1); Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1);
removeTdArea(tabDesRef, list); removeTdArea(tabDesRef, list);
} else { } else {
ljam(); jam();
break; break;
} }
} }
// merge left // merge left
const bool mergeLeft = normal; const bool mergeLeft = normal;
while (mergeLeft && retRef > 0) { while (mergeLeft && retRef > 0) {
ljam(); jam();
Uint32 trailerWord = getTabDescrWord(retRef - ZTD_TR_TYPE); Uint32 trailerWord = getTabDescrWord(retRef - ZTD_TR_TYPE);
if (trailerWord == ZTD_TYPE_FREE) { if (trailerWord == ZTD_TYPE_FREE) {
ljam(); jam();
Uint32 sizeOfMergedPart = getTabDescrWord(retRef - ZTD_TR_SIZE); Uint32 sizeOfMergedPart = getTabDescrWord(retRef - ZTD_TR_SIZE);
ndbrequire(retRef >= sizeOfMergedPart); ndbrequire(retRef >= sizeOfMergedPart);
retRef -= sizeOfMergedPart; retRef -= sizeOfMergedPart;
...@@ -185,7 +183,7 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal) ...@@ -185,7 +183,7 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1); Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1);
removeTdArea(retRef, list); removeTdArea(retRef, list);
} else { } else {
ljam(); jam();
break; break;
} }
} }
...@@ -213,15 +211,15 @@ void Dbtup::removeTdArea(Uint32 tabDesRef, Uint32 list) ...@@ -213,15 +211,15 @@ void Dbtup::removeTdArea(Uint32 tabDesRef, Uint32 list)
setTabDescrWord((tabDesRef + (1 << list)) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL); setTabDescrWord((tabDesRef + (1 << list)) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL);
if (tabDesRef == cfreeTdList[list]) { if (tabDesRef == cfreeTdList[list]) {
ljam(); jam();
cfreeTdList[list] = tabDescrNextPtr; /* RELINK THE LIST */ cfreeTdList[list] = tabDescrNextPtr; /* RELINK THE LIST */
}//if }//if
if (tabDescrNextPtr != RNIL) { if (tabDescrNextPtr != RNIL) {
ljam(); jam();
setTabDescrWord(tabDescrNextPtr + ZTD_FL_PREV, tabDescrPrevPtr); setTabDescrWord(tabDescrNextPtr + ZTD_FL_PREV, tabDescrPrevPtr);
}//if }//if
if (tabDescrPrevPtr != RNIL) { if (tabDescrPrevPtr != RNIL) {
ljam(); jam();
setTabDescrWord(tabDescrPrevPtr + ZTD_FL_NEXT, tabDescrNextPtr); setTabDescrWord(tabDescrPrevPtr + ZTD_FL_NEXT, tabDescrNextPtr);
}//if }//if
}//Dbtup::removeTdArea() }//Dbtup::removeTdArea()
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_TRIGGER_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -26,9 +27,6 @@ ...@@ -26,9 +27,6 @@
#include <signaldata/CreateTrig.hpp> #include <signaldata/CreateTrig.hpp>
#include <signaldata/TuxMaint.hpp> #include <signaldata/TuxMaint.hpp>
#define ljam() { jamLine(7000 + __LINE__); }
#define ljamEntry() { jamEntryLine(7000 + __LINE__); }
/* **************************************************************** */ /* **************************************************************** */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* ----------------------- TRIGGER HANDLING ----------------------- */ /* ----------------------- TRIGGER HANDLING ----------------------- */
...@@ -47,17 +45,17 @@ Dbtup::findTriggerList(Tablerec* table, ...@@ -47,17 +45,17 @@ Dbtup::findTriggerList(Tablerec* table,
case TriggerType::SUBSCRIPTION_BEFORE: case TriggerType::SUBSCRIPTION_BEFORE:
switch (tevent) { switch (tevent) {
case TriggerEvent::TE_INSERT: case TriggerEvent::TE_INSERT:
ljam(); jam();
if (ttime == TriggerActionTime::TA_DETACHED) if (ttime == TriggerActionTime::TA_DETACHED)
tlist = &table->subscriptionInsertTriggers; tlist = &table->subscriptionInsertTriggers;
break; break;
case TriggerEvent::TE_UPDATE: case TriggerEvent::TE_UPDATE:
ljam(); jam();
if (ttime == TriggerActionTime::TA_DETACHED) if (ttime == TriggerActionTime::TA_DETACHED)
tlist = &table->subscriptionUpdateTriggers; tlist = &table->subscriptionUpdateTriggers;
break; break;
case TriggerEvent::TE_DELETE: case TriggerEvent::TE_DELETE:
ljam(); jam();
if (ttime == TriggerActionTime::TA_DETACHED) if (ttime == TriggerActionTime::TA_DETACHED)
tlist = &table->subscriptionDeleteTriggers; tlist = &table->subscriptionDeleteTriggers;
break; break;
...@@ -68,17 +66,17 @@ Dbtup::findTriggerList(Tablerec* table, ...@@ -68,17 +66,17 @@ Dbtup::findTriggerList(Tablerec* table,
case TriggerType::SECONDARY_INDEX: case TriggerType::SECONDARY_INDEX:
switch (tevent) { switch (tevent) {
case TriggerEvent::TE_INSERT: case TriggerEvent::TE_INSERT:
ljam(); jam();
if (ttime == TriggerActionTime::TA_AFTER) if (ttime == TriggerActionTime::TA_AFTER)
tlist = &table->afterInsertTriggers; tlist = &table->afterInsertTriggers;
break; break;
case TriggerEvent::TE_UPDATE: case TriggerEvent::TE_UPDATE:
ljam(); jam();
if (ttime == TriggerActionTime::TA_AFTER) if (ttime == TriggerActionTime::TA_AFTER)
tlist = &table->afterUpdateTriggers; tlist = &table->afterUpdateTriggers;
break; break;
case TriggerEvent::TE_DELETE: case TriggerEvent::TE_DELETE:
ljam(); jam();
if (ttime == TriggerActionTime::TA_AFTER) if (ttime == TriggerActionTime::TA_AFTER)
tlist = &table->afterDeleteTriggers; tlist = &table->afterDeleteTriggers;
break; break;
...@@ -89,7 +87,7 @@ Dbtup::findTriggerList(Tablerec* table, ...@@ -89,7 +87,7 @@ Dbtup::findTriggerList(Tablerec* table,
case TriggerType::ORDERED_INDEX: case TriggerType::ORDERED_INDEX:
switch (tevent) { switch (tevent) {
case TriggerEvent::TE_CUSTOM: case TriggerEvent::TE_CUSTOM:
ljam(); jam();
if (ttime == TriggerActionTime::TA_CUSTOM) if (ttime == TriggerActionTime::TA_CUSTOM)
tlist = &table->tuxCustomTriggers; tlist = &table->tuxCustomTriggers;
break; break;
...@@ -100,7 +98,7 @@ Dbtup::findTriggerList(Tablerec* table, ...@@ -100,7 +98,7 @@ Dbtup::findTriggerList(Tablerec* table,
case TriggerType::READ_ONLY_CONSTRAINT: case TriggerType::READ_ONLY_CONSTRAINT:
switch (tevent) { switch (tevent) {
case TriggerEvent::TE_UPDATE: case TriggerEvent::TE_UPDATE:
ljam(); jam();
if (ttime == TriggerActionTime::TA_AFTER) if (ttime == TriggerActionTime::TA_AFTER)
tlist = &table->constraintUpdateTriggers; tlist = &table->constraintUpdateTriggers;
break; break;
...@@ -118,7 +116,7 @@ Dbtup::findTriggerList(Tablerec* table, ...@@ -118,7 +116,7 @@ Dbtup::findTriggerList(Tablerec* table,
void void
Dbtup::execCREATE_TRIG_REQ(Signal* signal) Dbtup::execCREATE_TRIG_REQ(Signal* signal)
{ {
ljamEntry(); jamEntry();
BlockReference senderRef = signal->getSendersBlockRef(); BlockReference senderRef = signal->getSendersBlockRef();
const CreateTrigReq reqCopy = *(const CreateTrigReq*)signal->getDataPtr(); const CreateTrigReq reqCopy = *(const CreateTrigReq*)signal->getDataPtr();
const CreateTrigReq* const req = &reqCopy; const CreateTrigReq* const req = &reqCopy;
...@@ -131,13 +129,13 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal) ...@@ -131,13 +129,13 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
if (tabPtr.p->tableStatus != DEFINED ) if (tabPtr.p->tableStatus != DEFINED )
{ {
ljam(); jam();
error= CreateTrigRef::InvalidTable; error= CreateTrigRef::InvalidTable;
} }
// Create trigger and associate it with the table // Create trigger and associate it with the table
else if (createTrigger(tabPtr.p, req)) else if (createTrigger(tabPtr.p, req))
{ {
ljam(); jam();
// Send conf // Send conf
CreateTrigConf* const conf = (CreateTrigConf*)signal->getDataPtrSend(); CreateTrigConf* const conf = (CreateTrigConf*)signal->getDataPtrSend();
conf->setUserRef(reference()); conf->setUserRef(reference());
...@@ -153,7 +151,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal) ...@@ -153,7 +151,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
} }
else else
{ {
ljam(); jam();
error= CreateTrigRef::TooManyTriggers; error= CreateTrigRef::TooManyTriggers;
} }
ndbassert(error != CreateTrigRef::NoError); ndbassert(error != CreateTrigRef::NoError);
...@@ -174,7 +172,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal) ...@@ -174,7 +172,7 @@ Dbtup::execCREATE_TRIG_REQ(Signal* signal)
void void
Dbtup::execDROP_TRIG_REQ(Signal* signal) Dbtup::execDROP_TRIG_REQ(Signal* signal)
{ {
ljamEntry(); jamEntry();
BlockReference senderRef = signal->getSendersBlockRef(); BlockReference senderRef = signal->getSendersBlockRef();
const DropTrigReq reqCopy = *(const DropTrigReq*)signal->getDataPtr(); const DropTrigReq reqCopy = *(const DropTrigReq*)signal->getDataPtr();
const DropTrigReq* const req = &reqCopy; const DropTrigReq* const req = &reqCopy;
...@@ -262,7 +260,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req) ...@@ -262,7 +260,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
if ((tptr.p->triggerType == TriggerType::SUBSCRIPTION) && if ((tptr.p->triggerType == TriggerType::SUBSCRIPTION) &&
((tptr.p->triggerEvent == TriggerEvent::TE_UPDATE) || ((tptr.p->triggerEvent == TriggerEvent::TE_UPDATE) ||
(tptr.p->triggerEvent == TriggerEvent::TE_DELETE))) { (tptr.p->triggerEvent == TriggerEvent::TE_DELETE))) {
ljam(); jam();
tptr.p->sendBeforeValues = false; tptr.p->sendBeforeValues = false;
} }
/* /*
...@@ -270,7 +268,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req) ...@@ -270,7 +268,7 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
if (((tptr.p->triggerType == TriggerType::SUBSCRIPTION) || if (((tptr.p->triggerType == TriggerType::SUBSCRIPTION) ||
(tptr.p->triggerType == TriggerType::SUBSCRIPTION_BEFORE)) && (tptr.p->triggerType == TriggerType::SUBSCRIPTION_BEFORE)) &&
(tptr.p->triggerEvent == TriggerEvent::TE_UPDATE)) { (tptr.p->triggerEvent == TriggerEvent::TE_UPDATE)) {
ljam(); jam();
tptr.p->sendOnlyChangedAttributes = true; tptr.p->sendOnlyChangedAttributes = true;
} }
*/ */
...@@ -282,16 +280,16 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req) ...@@ -282,16 +280,16 @@ Dbtup::createTrigger(Tablerec* table, const CreateTrigReq* req)
tptr.p->attributeMask.clear(); tptr.p->attributeMask.clear();
if (tptr.p->monitorAllAttributes) { if (tptr.p->monitorAllAttributes) {
ljam(); jam();
for(Uint32 i = 0; i < table->m_no_of_attributes; i++) { for(Uint32 i = 0; i < table->m_no_of_attributes; i++) {
if (!primaryKey(table, i)) { if (!primaryKey(table, i)) {
ljam(); jam();
tptr.p->attributeMask.set(i); tptr.p->attributeMask.set(i);
} }
} }
} else { } else {
// Set attribute mask // Set attribute mask
ljam(); jam();
tptr.p->attributeMask = req->getAttributeMask(); tptr.p->attributeMask = req->getAttributeMask();
} }
return true; return true;
...@@ -336,7 +334,7 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender) ...@@ -336,7 +334,7 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender)
Ptr<TupTriggerData> ptr; Ptr<TupTriggerData> ptr;
for (tlist->first(ptr); !ptr.isNull(); tlist->next(ptr)) { for (tlist->first(ptr); !ptr.isNull(); tlist->next(ptr)) {
ljam(); jam();
if (ptr.p->triggerId == triggerId) { if (ptr.p->triggerId == triggerId) {
if(ttype==TriggerType::SUBSCRIPTION && sender != ptr.p->m_receiverBlock) if(ttype==TriggerType::SUBSCRIPTION && sender != ptr.p->m_receiverBlock)
{ {
...@@ -348,10 +346,10 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender) ...@@ -348,10 +346,10 @@ Dbtup::dropTrigger(Tablerec* table, const DropTrigReq* req, BlockNumber sender)
* *
* Backup doesn't really care about the Ids though. * Backup doesn't really care about the Ids though.
*/ */
ljam(); jam();
continue; continue;
} }
ljam(); jam();
tlist->release(ptr.i); tlist->release(ptr.i);
return 0; return 0;
} }
...@@ -379,7 +377,7 @@ Dbtup::checkImmediateTriggersAfterInsert(KeyReqStruct *req_struct, ...@@ -379,7 +377,7 @@ Dbtup::checkImmediateTriggersAfterInsert(KeyReqStruct *req_struct,
if ((regOperPtr->op_struct.primary_replica) && if ((regOperPtr->op_struct.primary_replica) &&
(!(regTablePtr->afterInsertTriggers.isEmpty()))) { (!(regTablePtr->afterInsertTriggers.isEmpty()))) {
ljam(); jam();
fireImmediateTriggers(req_struct, fireImmediateTriggers(req_struct,
regTablePtr->afterInsertTriggers, regTablePtr->afterInsertTriggers,
regOperPtr); regOperPtr);
...@@ -397,14 +395,14 @@ Dbtup::checkImmediateTriggersAfterUpdate(KeyReqStruct *req_struct, ...@@ -397,14 +395,14 @@ Dbtup::checkImmediateTriggersAfterUpdate(KeyReqStruct *req_struct,
if ((regOperPtr->op_struct.primary_replica) && if ((regOperPtr->op_struct.primary_replica) &&
(!(regTablePtr->afterUpdateTriggers.isEmpty()))) { (!(regTablePtr->afterUpdateTriggers.isEmpty()))) {
ljam(); jam();
fireImmediateTriggers(req_struct, fireImmediateTriggers(req_struct,
regTablePtr->afterUpdateTriggers, regTablePtr->afterUpdateTriggers,
regOperPtr); regOperPtr);
} }
if ((regOperPtr->op_struct.primary_replica) && if ((regOperPtr->op_struct.primary_replica) &&
(!(regTablePtr->constraintUpdateTriggers.isEmpty()))) { (!(regTablePtr->constraintUpdateTriggers.isEmpty()))) {
ljam(); jam();
fireImmediateTriggers(req_struct, fireImmediateTriggers(req_struct,
regTablePtr->constraintUpdateTriggers, regTablePtr->constraintUpdateTriggers,
regOperPtr); regOperPtr);
...@@ -422,7 +420,7 @@ Dbtup::checkImmediateTriggersAfterDelete(KeyReqStruct *req_struct, ...@@ -422,7 +420,7 @@ Dbtup::checkImmediateTriggersAfterDelete(KeyReqStruct *req_struct,
if ((regOperPtr->op_struct.primary_replica) && if ((regOperPtr->op_struct.primary_replica) &&
(!(regTablePtr->afterDeleteTriggers.isEmpty()))) { (!(regTablePtr->afterDeleteTriggers.isEmpty()))) {
ljam(); jam();
executeTriggers(req_struct, executeTriggers(req_struct,
regTablePtr->afterDeleteTriggers, regTablePtr->afterDeleteTriggers,
regOperPtr); regOperPtr);
...@@ -443,7 +441,7 @@ void Dbtup::checkDeferredTriggers(Signal* signal, ...@@ -443,7 +441,7 @@ void Dbtup::checkDeferredTriggers(Signal* signal,
Operationrec* const regOperPtr, Operationrec* const regOperPtr,
Tablerec* const regTablePtr) Tablerec* const regTablePtr)
{ {
ljam(); jam();
// NYI // NYI
}//Dbtup::checkDeferredTriggers() }//Dbtup::checkDeferredTriggers()
#endif #endif
...@@ -479,7 +477,7 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct, ...@@ -479,7 +477,7 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
if (save_ptr->m_header_bits & Tuple_header::ALLOC) { if (save_ptr->m_header_bits & Tuple_header::ALLOC) {
if (save_type == ZDELETE) { if (save_type == ZDELETE) {
// insert + delete = nothing // insert + delete = nothing
ljam(); jam();
return; return;
goto end; goto end;
} }
...@@ -495,10 +493,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct, ...@@ -495,10 +493,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
switch(regOperPtr->op_struct.op_type) { switch(regOperPtr->op_struct.op_type) {
case(ZINSERT): case(ZINSERT):
ljam(); jam();
if (regTablePtr->subscriptionInsertTriggers.isEmpty()) { if (regTablePtr->subscriptionInsertTriggers.isEmpty()) {
// Table has no active triggers monitoring inserts at commit // Table has no active triggers monitoring inserts at commit
ljam(); jam();
goto end; goto end;
} }
...@@ -508,10 +506,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct, ...@@ -508,10 +506,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
regOperPtr); regOperPtr);
break; break;
case(ZDELETE): case(ZDELETE):
ljam(); jam();
if (regTablePtr->subscriptionDeleteTriggers.isEmpty()) { if (regTablePtr->subscriptionDeleteTriggers.isEmpty()) {
// Table has no active triggers monitoring deletes at commit // Table has no active triggers monitoring deletes at commit
ljam(); jam();
goto end; goto end;
} }
...@@ -522,10 +520,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct, ...@@ -522,10 +520,10 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
regOperPtr); regOperPtr);
break; break;
case(ZUPDATE): case(ZUPDATE):
ljam(); jam();
if (regTablePtr->subscriptionUpdateTriggers.isEmpty()) { if (regTablePtr->subscriptionUpdateTriggers.isEmpty()) {
// Table has no active triggers monitoring updates at commit // Table has no active triggers monitoring updates at commit
ljam(); jam();
goto end; goto end;
} }
...@@ -553,10 +551,10 @@ Dbtup::fireImmediateTriggers(KeyReqStruct *req_struct, ...@@ -553,10 +551,10 @@ Dbtup::fireImmediateTriggers(KeyReqStruct *req_struct,
TriggerPtr trigPtr; TriggerPtr trigPtr;
triggerList.first(trigPtr); triggerList.first(trigPtr);
while (trigPtr.i != RNIL) { while (trigPtr.i != RNIL) {
ljam(); jam();
if (trigPtr.p->monitorAllAttributes || if (trigPtr.p->monitorAllAttributes ||
trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) { trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) {
ljam(); jam();
executeTrigger(req_struct, executeTrigger(req_struct,
trigPtr.p, trigPtr.p,
regOperPtr); regOperPtr);
...@@ -575,10 +573,10 @@ Dbtup::fireDeferredTriggers(Signal* signal, ...@@ -575,10 +573,10 @@ Dbtup::fireDeferredTriggers(Signal* signal,
TriggerPtr trigPtr; TriggerPtr trigPtr;
triggerList.first(trigPtr); triggerList.first(trigPtr);
while (trigPtr.i != RNIL) { while (trigPtr.i != RNIL) {
ljam(); jam();
if (trigPtr.p->monitorAllAttributes || if (trigPtr.p->monitorAllAttributes ||
trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) { trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) {
ljam(); jam();
executeTrigger(req_struct, executeTrigger(req_struct,
trigPtr, trigPtr,
regOperPtr); regOperPtr);
...@@ -604,12 +602,12 @@ Dbtup::fireDetachedTriggers(KeyReqStruct *req_struct, ...@@ -604,12 +602,12 @@ Dbtup::fireDetachedTriggers(KeyReqStruct *req_struct,
ndbrequire(regOperPtr->is_first_operation()); ndbrequire(regOperPtr->is_first_operation());
triggerList.first(trigPtr); triggerList.first(trigPtr);
while (trigPtr.i != RNIL) { while (trigPtr.i != RNIL) {
ljam(); jam();
if ((trigPtr.p->monitorReplicas || if ((trigPtr.p->monitorReplicas ||
regOperPtr->op_struct.primary_replica) && regOperPtr->op_struct.primary_replica) &&
(trigPtr.p->monitorAllAttributes || (trigPtr.p->monitorAllAttributes ||
trigPtr.p->attributeMask.overlaps(req_struct->changeMask))) { trigPtr.p->attributeMask.overlaps(req_struct->changeMask))) {
ljam(); jam();
executeTrigger(req_struct, executeTrigger(req_struct,
trigPtr.p, trigPtr.p,
regOperPtr); regOperPtr);
...@@ -625,7 +623,7 @@ void Dbtup::executeTriggers(KeyReqStruct *req_struct, ...@@ -625,7 +623,7 @@ void Dbtup::executeTriggers(KeyReqStruct *req_struct,
TriggerPtr trigPtr; TriggerPtr trigPtr;
triggerList.first(trigPtr); triggerList.first(trigPtr);
while (trigPtr.i != RNIL) { while (trigPtr.i != RNIL) {
ljam(); jam();
executeTrigger(req_struct, executeTrigger(req_struct,
trigPtr.p, trigPtr.p,
regOperPtr); regOperPtr);
...@@ -675,7 +673,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct, ...@@ -675,7 +673,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord);
if (ref == BACKUP) { if (ref == BACKUP) {
ljam(); jam();
/* /*
In order for the implementation of BACKUP to work even when changing 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 primaries in the middle of the backup we need to set the trigger on
...@@ -688,9 +686,9 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct, ...@@ -688,9 +686,9 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
signal->theData[0] = trigPtr->triggerId; signal->theData[0] = trigPtr->triggerId;
signal->theData[1] = regFragPtr.p->fragmentId; signal->theData[1] = regFragPtr.p->fragmentId;
EXECUTE_DIRECT(BACKUP, GSN_BACKUP_TRIG_REQ, signal, 2); EXECUTE_DIRECT(BACKUP, GSN_BACKUP_TRIG_REQ, signal, 2);
ljamEntry(); jamEntry();
if (signal->theData[0] == 0) { if (signal->theData[0] == 0) {
ljam(); jam();
return; return;
} }
} }
...@@ -704,7 +702,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct, ...@@ -704,7 +702,7 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
noAfterWords, noAfterWords,
beforeBuffer, beforeBuffer,
noBeforeWords)) { noBeforeWords)) {
ljam(); jam();
return; return;
} }
//-------------------------------------------------------------------- //--------------------------------------------------------------------
...@@ -720,13 +718,13 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct, ...@@ -720,13 +718,13 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
switch(trigPtr->triggerType) { switch(trigPtr->triggerType) {
case (TriggerType::SECONDARY_INDEX): case (TriggerType::SECONDARY_INDEX):
ljam(); jam();
ref = req_struct->TC_ref; ref = req_struct->TC_ref;
executeDirect = false; executeDirect = false;
break; break;
case (TriggerType::SUBSCRIPTION): case (TriggerType::SUBSCRIPTION):
case (TriggerType::SUBSCRIPTION_BEFORE): case (TriggerType::SUBSCRIPTION_BEFORE):
ljam(); jam();
// Since only backup uses subscription triggers we send to backup directly for now // Since only backup uses subscription triggers we send to backup directly for now
ref = trigPtr->m_receiverBlock; ref = trigPtr->m_receiverBlock;
executeDirect = true; executeDirect = true;
...@@ -747,22 +745,22 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct, ...@@ -747,22 +745,22 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
switch(regOperPtr->op_struct.op_type) { switch(regOperPtr->op_struct.op_type) {
case(ZINSERT): case(ZINSERT):
ljam(); jam();
// Send AttrInfo signals with new attribute values // Send AttrInfo signals with new attribute values
trigAttrInfo->setAttrInfoType(TrigAttrInfo::AFTER_VALUES); trigAttrInfo->setAttrInfoType(TrigAttrInfo::AFTER_VALUES);
sendTrigAttrInfo(signal, afterBuffer, noAfterWords, executeDirect, ref); sendTrigAttrInfo(signal, afterBuffer, noAfterWords, executeDirect, ref);
break; break;
case(ZDELETE): case(ZDELETE):
if (trigPtr->sendBeforeValues) { if (trigPtr->sendBeforeValues) {
ljam(); jam();
trigAttrInfo->setAttrInfoType(TrigAttrInfo::BEFORE_VALUES); trigAttrInfo->setAttrInfoType(TrigAttrInfo::BEFORE_VALUES);
sendTrigAttrInfo(signal, beforeBuffer, noBeforeWords, executeDirect,ref); sendTrigAttrInfo(signal, beforeBuffer, noBeforeWords, executeDirect,ref);
} }
break; break;
case(ZUPDATE): case(ZUPDATE):
ljam(); jam();
if (trigPtr->sendBeforeValues) { if (trigPtr->sendBeforeValues) {
ljam(); jam();
trigAttrInfo->setAttrInfoType(TrigAttrInfo::BEFORE_VALUES); trigAttrInfo->setAttrInfoType(TrigAttrInfo::BEFORE_VALUES);
sendTrigAttrInfo(signal, beforeBuffer, noBeforeWords, executeDirect,ref); sendTrigAttrInfo(signal, beforeBuffer, noBeforeWords, executeDirect,ref);
} }
...@@ -788,9 +786,9 @@ Uint32 Dbtup::setAttrIds(Bitmask<MAXNROFATTRIBUTESINWORDS>& attributeMask, ...@@ -788,9 +786,9 @@ Uint32 Dbtup::setAttrIds(Bitmask<MAXNROFATTRIBUTESINWORDS>& attributeMask,
{ {
Uint32 bufIndx = 0; Uint32 bufIndx = 0;
for (Uint32 i = 0; i < m_no_of_attributesibutes; i++) { for (Uint32 i = 0; i < m_no_of_attributesibutes; i++) {
ljam(); jam();
if (attributeMask.get(i)) { if (attributeMask.get(i)) {
ljam(); jam();
AttributeHeader::init(&inBuffer[bufIndx++], i, 0); AttributeHeader::init(&inBuffer[bufIndx++], i, 0);
} }
} }
...@@ -858,7 +856,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr, ...@@ -858,7 +856,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
Uint32 numAttrsToRead; Uint32 numAttrsToRead;
if ((regOperPtr->op_struct.op_type == ZUPDATE) && if ((regOperPtr->op_struct.op_type == ZUPDATE) &&
(trigPtr->sendOnlyChangedAttributes)) { (trigPtr->sendOnlyChangedAttributes)) {
ljam(); jam();
//-------------------------------------------------------------------- //--------------------------------------------------------------------
// Update that sends only changed information // Update that sends only changed information
//-------------------------------------------------------------------- //--------------------------------------------------------------------
...@@ -870,13 +868,13 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr, ...@@ -870,13 +868,13 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
} else if ((regOperPtr->op_struct.op_type == ZDELETE) && } else if ((regOperPtr->op_struct.op_type == ZDELETE) &&
(!trigPtr->sendBeforeValues)) { (!trigPtr->sendBeforeValues)) {
ljam(); jam();
//-------------------------------------------------------------------- //--------------------------------------------------------------------
// Delete without sending before values only read Primary Key // Delete without sending before values only read Primary Key
//-------------------------------------------------------------------- //--------------------------------------------------------------------
return true; return true;
} else { } else {
ljam(); jam();
//-------------------------------------------------------------------- //--------------------------------------------------------------------
// All others send all attributes that are monitored, except: // All others send all attributes that are monitored, except:
// Omit unchanged blob inlines on update i.e. // Omit unchanged blob inlines on update i.e.
...@@ -898,7 +896,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr, ...@@ -898,7 +896,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
//-------------------------------------------------------------------- //--------------------------------------------------------------------
if (regOperPtr->op_struct.op_type != ZDELETE) if (regOperPtr->op_struct.op_type != ZDELETE)
{ {
ljam(); jam();
int ret = readAttributes(req_struct, int ret = readAttributes(req_struct,
&readBuffer[0], &readBuffer[0],
numAttrsToRead, numAttrsToRead,
...@@ -908,7 +906,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr, ...@@ -908,7 +906,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
ndbrequire(ret != -1); ndbrequire(ret != -1);
noAfterWords= ret; noAfterWords= ret;
} else { } else {
ljam(); jam();
noAfterWords = 0; noAfterWords = 0;
} }
...@@ -920,7 +918,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr, ...@@ -920,7 +918,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
if ((regOperPtr->op_struct.op_type == ZUPDATE || if ((regOperPtr->op_struct.op_type == ZUPDATE ||
regOperPtr->op_struct.op_type == ZDELETE) && regOperPtr->op_struct.op_type == ZDELETE) &&
(trigPtr->sendBeforeValues)) { (trigPtr->sendBeforeValues)) {
ljam(); jam();
Tuple_header *save= req_struct->m_tuple_ptr; Tuple_header *save= req_struct->m_tuple_ptr;
PagePtr tmp; PagePtr tmp;
...@@ -956,7 +954,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr, ...@@ -956,7 +954,7 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
// Although a trigger was fired it was not necessary since the old // Although a trigger was fired it was not necessary since the old
// value and the new value was exactly the same // value and the new value was exactly the same
//-------------------------------------------------------------------- //--------------------------------------------------------------------
ljam(); jam();
//XXX does this work with collations? //XXX does this work with collations?
return false; return false;
} }
...@@ -976,21 +974,21 @@ void Dbtup::sendTrigAttrInfo(Signal* signal, ...@@ -976,21 +974,21 @@ void Dbtup::sendTrigAttrInfo(Signal* signal,
do { do {
sigLen = dataLen - dataIndex; sigLen = dataLen - dataIndex;
if (sigLen > TrigAttrInfo::DataLength) { if (sigLen > TrigAttrInfo::DataLength) {
ljam(); jam();
sigLen = TrigAttrInfo::DataLength; sigLen = TrigAttrInfo::DataLength;
} }
MEMCOPY_NO_WORDS(trigAttrInfo->getData(), MEMCOPY_NO_WORDS(trigAttrInfo->getData(),
data + dataIndex, data + dataIndex,
sigLen); sigLen);
if (executeDirect) { if (executeDirect) {
ljam(); jam();
EXECUTE_DIRECT(receiverReference, EXECUTE_DIRECT(receiverReference,
GSN_TRIG_ATTRINFO, GSN_TRIG_ATTRINFO,
signal, signal,
TrigAttrInfo::StaticLength + sigLen); TrigAttrInfo::StaticLength + sigLen);
ljamEntry(); jamEntry();
} else { } else {
ljam(); jam();
sendSignal(receiverReference, sendSignal(receiverReference,
GSN_TRIG_ATTRINFO, GSN_TRIG_ATTRINFO,
signal, signal,
...@@ -1018,15 +1016,15 @@ void Dbtup::sendFireTrigOrd(Signal* signal, ...@@ -1018,15 +1016,15 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
switch(regOperPtr->op_struct.op_type) { switch(regOperPtr->op_struct.op_type) {
case(ZINSERT): case(ZINSERT):
ljam(); jam();
fireTrigOrd->setTriggerEvent(TriggerEvent::TE_INSERT); fireTrigOrd->setTriggerEvent(TriggerEvent::TE_INSERT);
break; break;
case(ZDELETE): case(ZDELETE):
ljam(); jam();
fireTrigOrd->setTriggerEvent(TriggerEvent::TE_DELETE); fireTrigOrd->setTriggerEvent(TriggerEvent::TE_DELETE);
break; break;
case(ZUPDATE): case(ZUPDATE):
ljam(); jam();
fireTrigOrd->setTriggerEvent(TriggerEvent::TE_UPDATE); fireTrigOrd->setTriggerEvent(TriggerEvent::TE_UPDATE);
break; break;
default: default:
...@@ -1040,12 +1038,12 @@ void Dbtup::sendFireTrigOrd(Signal* signal, ...@@ -1040,12 +1038,12 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
switch(trigPtr->triggerType) { switch(trigPtr->triggerType) {
case (TriggerType::SECONDARY_INDEX): case (TriggerType::SECONDARY_INDEX):
ljam(); jam();
sendSignal(req_struct->TC_ref, GSN_FIRE_TRIG_ORD, sendSignal(req_struct->TC_ref, GSN_FIRE_TRIG_ORD,
signal, FireTrigOrd::SignalLength, JBB); signal, FireTrigOrd::SignalLength, JBB);
break; break;
case (TriggerType::SUBSCRIPTION_BEFORE): // Only Suma case (TriggerType::SUBSCRIPTION_BEFORE): // Only Suma
ljam(); jam();
// Since only backup uses subscription triggers we // Since only backup uses subscription triggers we
// send to backup directly for now // send to backup directly for now
fireTrigOrd->setGCI(req_struct->gci); fireTrigOrd->setGCI(req_struct->gci);
...@@ -1056,7 +1054,7 @@ void Dbtup::sendFireTrigOrd(Signal* signal, ...@@ -1056,7 +1054,7 @@ void Dbtup::sendFireTrigOrd(Signal* signal,
FireTrigOrd::SignalWithHashValueLength); FireTrigOrd::SignalWithHashValueLength);
break; break;
case (TriggerType::SUBSCRIPTION): case (TriggerType::SUBSCRIPTION):
ljam(); jam();
// Since only backup uses subscription triggers we // Since only backup uses subscription triggers we
// send to backup directly for now // send to backup directly for now
fireTrigOrd->setGCI(req_struct->gci); fireTrigOrd->setGCI(req_struct->gci);
...@@ -1123,7 +1121,7 @@ Dbtup::addTuxEntries(Signal* signal, ...@@ -1123,7 +1121,7 @@ Dbtup::addTuxEntries(Signal* signal,
Tablerec* regTabPtr) Tablerec* regTabPtr)
{ {
if (ERROR_INSERTED(4022)) { if (ERROR_INSERTED(4022)) {
ljam(); jam();
CLEAR_ERROR_INSERT_VALUE; CLEAR_ERROR_INSERT_VALUE;
terrorCode = 9999; terrorCode = 9999;
return -1; return -1;
...@@ -1134,12 +1132,12 @@ Dbtup::addTuxEntries(Signal* signal, ...@@ -1134,12 +1132,12 @@ Dbtup::addTuxEntries(Signal* signal,
Uint32 failPtrI; Uint32 failPtrI;
triggerList.first(triggerPtr); triggerList.first(triggerPtr);
while (triggerPtr.i != RNIL) { while (triggerPtr.i != RNIL) {
ljam(); jam();
req->indexId = triggerPtr.p->indexId; req->indexId = triggerPtr.p->indexId;
req->errorCode = RNIL; req->errorCode = RNIL;
if (ERROR_INSERTED(4023) && if (ERROR_INSERTED(4023) &&
! triggerList.hasNext(triggerPtr)) { ! triggerList.hasNext(triggerPtr)) {
ljam(); jam();
CLEAR_ERROR_INSERT_VALUE; CLEAR_ERROR_INSERT_VALUE;
terrorCode = 9999; terrorCode = 9999;
failPtrI = triggerPtr.i; failPtrI = triggerPtr.i;
...@@ -1147,9 +1145,9 @@ Dbtup::addTuxEntries(Signal* signal, ...@@ -1147,9 +1145,9 @@ Dbtup::addTuxEntries(Signal* signal,
} }
EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ, EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
signal, TuxMaintReq::SignalLength); signal, TuxMaintReq::SignalLength);
ljamEntry(); jamEntry();
if (req->errorCode != 0) { if (req->errorCode != 0) {
ljam(); jam();
terrorCode = req->errorCode; terrorCode = req->errorCode;
failPtrI = triggerPtr.i; failPtrI = triggerPtr.i;
goto fail; goto fail;
...@@ -1161,12 +1159,12 @@ Dbtup::addTuxEntries(Signal* signal, ...@@ -1161,12 +1159,12 @@ Dbtup::addTuxEntries(Signal* signal,
req->opInfo = TuxMaintReq::OpRemove; req->opInfo = TuxMaintReq::OpRemove;
triggerList.first(triggerPtr); triggerList.first(triggerPtr);
while (triggerPtr.i != failPtrI) { while (triggerPtr.i != failPtrI) {
ljam(); jam();
req->indexId = triggerPtr.p->indexId; req->indexId = triggerPtr.p->indexId;
req->errorCode = RNIL; req->errorCode = RNIL;
EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ, EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
signal, TuxMaintReq::SignalLength); signal, TuxMaintReq::SignalLength);
ljamEntry(); jamEntry();
ndbrequire(req->errorCode == 0); ndbrequire(req->errorCode == 0);
triggerList.next(triggerPtr); triggerList.next(triggerPtr);
} }
...@@ -1197,15 +1195,15 @@ Dbtup::executeTuxCommitTriggers(Signal* signal, ...@@ -1197,15 +1195,15 @@ Dbtup::executeTuxCommitTriggers(Signal* signal,
if (regOperPtr->op_struct.op_type == ZINSERT) { if (regOperPtr->op_struct.op_type == ZINSERT) {
if (! regOperPtr->op_struct.delete_insert_flag) if (! regOperPtr->op_struct.delete_insert_flag)
return; return;
ljam(); jam();
tupVersion= decr_tup_version(regOperPtr->tupVersion); tupVersion= decr_tup_version(regOperPtr->tupVersion);
} else if (regOperPtr->op_struct.op_type == ZUPDATE) { } else if (regOperPtr->op_struct.op_type == ZUPDATE) {
ljam(); jam();
tupVersion= decr_tup_version(regOperPtr->tupVersion); tupVersion= decr_tup_version(regOperPtr->tupVersion);
} else if (regOperPtr->op_struct.op_type == ZDELETE) { } else if (regOperPtr->op_struct.op_type == ZDELETE) {
if (regOperPtr->op_struct.delete_insert_flag) if (regOperPtr->op_struct.delete_insert_flag)
return; return;
ljam(); jam();
tupVersion= regOperPtr->tupVersion; tupVersion= regOperPtr->tupVersion;
} else { } else {
ndbrequire(false); ndbrequire(false);
...@@ -1231,13 +1229,13 @@ Dbtup::executeTuxAbortTriggers(Signal* signal, ...@@ -1231,13 +1229,13 @@ Dbtup::executeTuxAbortTriggers(Signal* signal,
// get version // get version
Uint32 tupVersion; Uint32 tupVersion;
if (regOperPtr->op_struct.op_type == ZINSERT) { if (regOperPtr->op_struct.op_type == ZINSERT) {
ljam(); jam();
tupVersion = regOperPtr->tupVersion; tupVersion = regOperPtr->tupVersion;
} else if (regOperPtr->op_struct.op_type == ZUPDATE) { } else if (regOperPtr->op_struct.op_type == ZUPDATE) {
ljam(); jam();
tupVersion = regOperPtr->tupVersion; tupVersion = regOperPtr->tupVersion;
} else if (regOperPtr->op_struct.op_type == ZDELETE) { } else if (regOperPtr->op_struct.op_type == ZDELETE) {
ljam(); jam();
return; return;
} else { } else {
ndbrequire(false); ndbrequire(false);
...@@ -1262,12 +1260,12 @@ Dbtup::removeTuxEntries(Signal* signal, ...@@ -1262,12 +1260,12 @@ Dbtup::removeTuxEntries(Signal* signal,
TriggerPtr triggerPtr; TriggerPtr triggerPtr;
triggerList.first(triggerPtr); triggerList.first(triggerPtr);
while (triggerPtr.i != RNIL) { while (triggerPtr.i != RNIL) {
ljam(); jam();
req->indexId = triggerPtr.p->indexId; req->indexId = triggerPtr.p->indexId;
req->errorCode = RNIL, req->errorCode = RNIL,
EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ, EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
signal, TuxMaintReq::SignalLength); signal, TuxMaintReq::SignalLength);
ljamEntry(); jamEntry();
// must succeed // must succeed
ndbrequire(req->errorCode == 0); ndbrequire(req->errorCode == 0);
triggerList.next(triggerPtr); triggerList.next(triggerPtr);
......
...@@ -14,12 +14,9 @@ ...@@ -14,12 +14,9 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_VAR_ALLOC_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#define ljam() { jamLine(32000 + __LINE__); }
#define ljamEntry() { jamEntryLine(32000 + __LINE__); }
void Dbtup::init_list_sizes(void) void Dbtup::init_list_sizes(void)
{ {
c_min_list_size[0]= 200; c_min_list_size[0]= 200;
...@@ -109,9 +106,9 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr, ...@@ -109,9 +106,9 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
PagePtr pagePtr; PagePtr pagePtr;
pagePtr.i= get_alloc_page(fragPtr, (alloc_size + 1)); pagePtr.i= get_alloc_page(fragPtr, (alloc_size + 1));
if (pagePtr.i == RNIL) { if (pagePtr.i == RNIL) {
ljam(); jam();
if ((pagePtr.i= get_empty_var_page(fragPtr)) == RNIL) { if ((pagePtr.i= get_empty_var_page(fragPtr)) == RNIL) {
ljam(); jam();
return 0; return 0;
} }
c_page_pool.getPtr(pagePtr); c_page_pool.getPtr(pagePtr);
...@@ -127,7 +124,7 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr, ...@@ -127,7 +124,7 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
pagePtr.p->page_state = ZTH_MM_FREE; pagePtr.p->page_state = ZTH_MM_FREE;
} else { } else {
c_page_pool.getPtr(pagePtr); c_page_pool.getPtr(pagePtr);
ljam(); jam();
} }
Uint32 idx= ((Var_page*)pagePtr.p) Uint32 idx= ((Var_page*)pagePtr.p)
->alloc_record(alloc_size, (Var_page*)ctemp_page, Var_page::CHAIN); ->alloc_record(alloc_size, (Var_page*)ctemp_page, Var_page::CHAIN);
...@@ -178,7 +175,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr, ...@@ -178,7 +175,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
ndbassert(pagePtr.p->free_space <= Var_page::DATA_WORDS); ndbassert(pagePtr.p->free_space <= Var_page::DATA_WORDS);
if (pagePtr.p->free_space == Var_page::DATA_WORDS - 1) if (pagePtr.p->free_space == Var_page::DATA_WORDS - 1)
{ {
ljam(); jam();
/* /*
This code could be used when we release pages. This code could be used when we release pages.
remove_free_page(signal,fragPtr,page_header,page_header->list_index); remove_free_page(signal,fragPtr,page_header,page_header->list_index);
...@@ -186,7 +183,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr, ...@@ -186,7 +183,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
*/ */
update_free_page_list(fragPtr, pagePtr); update_free_page_list(fragPtr, pagePtr);
} else { } else {
ljam(); jam();
update_free_page_list(fragPtr, pagePtr); update_free_page_list(fragPtr, pagePtr);
} }
return; return;
...@@ -260,16 +257,16 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size) ...@@ -260,16 +257,16 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
start_index= calculate_free_list_impl(alloc_size); start_index= calculate_free_list_impl(alloc_size);
if (start_index == (MAX_FREE_LIST - 1)) { if (start_index == (MAX_FREE_LIST - 1)) {
ljam(); jam();
} else { } else {
ljam(); jam();
ndbrequire(start_index < (MAX_FREE_LIST - 1)); ndbrequire(start_index < (MAX_FREE_LIST - 1));
start_index++; start_index++;
} }
for (i= start_index; i < MAX_FREE_LIST; i++) { for (i= start_index; i < MAX_FREE_LIST; i++) {
ljam(); jam();
if (!fragPtr->free_var_page_array[i].isEmpty()) { if (!fragPtr->free_var_page_array[i].isEmpty()) {
ljam(); jam();
return fragPtr->free_var_page_array[i].firstItem; return fragPtr->free_var_page_array[i].firstItem;
} }
} }
...@@ -278,9 +275,9 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size) ...@@ -278,9 +275,9 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
LocalDLList<Page> list(c_page_pool, fragPtr->free_var_page_array[i]); LocalDLList<Page> list(c_page_pool, fragPtr->free_var_page_array[i]);
for(list.first(pagePtr); !pagePtr.isNull() && loop < 16; ) for(list.first(pagePtr); !pagePtr.isNull() && loop < 16; )
{ {
ljam(); jam();
if (pagePtr.p->free_space >= alloc_size) { if (pagePtr.p->free_space >= alloc_size) {
ljam(); jam();
return pagePtr.i; return pagePtr.i;
} }
loop++; loop++;
...@@ -347,7 +344,7 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr, ...@@ -347,7 +344,7 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
(free_space > c_max_list_size[list_index])) { (free_space > c_max_list_size[list_index])) {
Uint32 new_list_index= calculate_free_list_impl(free_space); Uint32 new_list_index= calculate_free_list_impl(free_space);
if (list_index != MAX_FREE_LIST) { if (list_index != MAX_FREE_LIST) {
ljam(); jam();
/* /*
* Only remove it from its list if it is in a list * Only remove it from its list if it is in a list
*/ */
...@@ -362,11 +359,11 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr, ...@@ -362,11 +359,11 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
This can only happen for the free list with least guaranteed This can only happen for the free list with least guaranteed
free space. free space.
*/ */
ljam(); jam();
ndbrequire(new_list_index == 0); ndbrequire(new_list_index == 0);
pagePtr.p->list_index= MAX_FREE_LIST; pagePtr.p->list_index= MAX_FREE_LIST;
} else { } else {
ljam(); jam();
LocalDLList<Page> list(c_page_pool, LocalDLList<Page> list(c_page_pool,
fragPtr->free_var_page_array[new_list_index]); fragPtr->free_var_page_array[new_list_index]);
list.add(pagePtr); list.add(pagePtr);
...@@ -382,9 +379,9 @@ Uint32 Dbtup::calculate_free_list_impl(Uint32 free_space_size) const ...@@ -382,9 +379,9 @@ Uint32 Dbtup::calculate_free_list_impl(Uint32 free_space_size) const
{ {
Uint32 i; Uint32 i;
for (i = 0; i < MAX_FREE_LIST; i++) { for (i = 0; i < MAX_FREE_LIST; i++) {
ljam(); jam();
if (free_space_size <= c_max_list_size[i]) { if (free_space_size <= c_max_list_size[i]) {
ljam(); jam();
return i; return i;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment