List:Commits« Previous MessageNext Message »
From:jonas Date:March 18 2007 6:21pm
Subject:bk commit into 5.1 tree (jonas:1.2327)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of jonas. When jonas does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-03-18 18:21:25+01:00, jonas@stripped +16 -0
  Merge perch.ndb.mysql.com:/home/jonas/src/check/51-telco
  into  perch.ndb.mysql.com:/home/jonas/src/check/51-dynattr
  MERGE: 1.2321.1.172

  sql/ha_ndbcluster.cc@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.362.1.59

  storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.104.1.18

  storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.43.1.8

  storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.50.1.13

  storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.12.1.5

  storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.16.1.8

  storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.46.1.12

  storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp@stripped, 2007-03-18 18:21:23+01:00, jonas@stripped +0 -0
    merge
    MERGE: 1.31.1.9

  storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.20.1.3

  storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp@stripped, 2007-03-18 18:21:23+01:00, jonas@stripped +1 -5
    merge
    MERGE: 1.31.1.4

  storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp@stripped, 2007-03-18 18:21:23+01:00, jonas@stripped +2 -4
    merge
    MERGE: 1.28.1.6

  storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.15.1.6

  storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.5.1.2

  storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.25.1.3

  storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.4.1.3

  storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp@stripped, 2007-03-18 18:17:26+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.152.1.11

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	jonas
# Host:	perch.ndb.mysql.com
# Root:	/home/jonas/src/check/51-dynattr/RESYNC

--- 1.6/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp	2007-03-18 18:21:31 +01:00
+++ 1.7/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp	2007-03-18 18:21:31 +01:00
@@ -14,12 +14,9 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 #define DBTUP_C
+#define DBTUP_VAR_ALLOC_CPP
 #include "Dbtup.hpp"
 
-#define ljam() { jamLine(32000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(32000 + __LINE__); }
-
-
 void Dbtup::init_list_sizes(void)
 {
   c_min_list_size[0]= 200;
@@ -109,9 +106,9 @@
   PagePtr pagePtr;
   pagePtr.i= get_alloc_page(fragPtr, (alloc_size + 1));
   if (pagePtr.i == RNIL) { 
-    ljam();
+    jam();
     if ((pagePtr.i= get_empty_var_page(fragPtr)) == RNIL) {
-      ljam();
+      jam();
       return 0;
     }
     c_page_pool.getPtr(pagePtr);
@@ -127,7 +124,7 @@
     pagePtr.p->page_state = ZTH_MM_FREE;
   } else {
     c_page_pool.getPtr(pagePtr);
-    ljam();
+    jam();
   }
   Uint32 idx= ((Var_page*)pagePtr.p)
     ->alloc_record(alloc_size, (Var_page*)ctemp_page, Var_page::CHAIN);
@@ -177,7 +174,7 @@
   ndbassert(pagePtr.p->free_space <= Var_page::DATA_WORDS);
   if (pagePtr.p->free_space == Var_page::DATA_WORDS - 1)
   {
-    ljam();
+    jam();
     /*
       This code could be used when we release pages.
       remove_free_page(signal,fragPtr,page_header,page_header->list_index);
@@ -185,7 +182,7 @@
     */
     update_free_page_list(fragPtr, pagePtr);
   } else {
-    ljam();
+    jam();
     update_free_page_list(fragPtr, pagePtr);
   }
   return;
@@ -262,16 +259,16 @@
   
   start_index= calculate_free_list_impl(alloc_size);
   if (start_index == (MAX_FREE_LIST - 1)) {
-    ljam();
+    jam();
   } else {
-    ljam();
+    jam();
     ndbrequire(start_index < (MAX_FREE_LIST - 1));
     start_index++;
   }
   for (i= start_index; i < MAX_FREE_LIST; i++) {
-    ljam();
+    jam();
     if (!fragPtr->free_var_page_array[i].isEmpty()) {
-      ljam();
+      jam();
       return fragPtr->free_var_page_array[i].firstItem;
     }
   }
@@ -280,9 +277,9 @@
   LocalDLList<Page> list(c_page_pool, fragPtr->free_var_page_array[i]);
   for(list.first(pagePtr); !pagePtr.isNull() && loop < 16; )
   {
-    ljam();
+    jam();
     if (pagePtr.p->free_space >= alloc_size) {
-      ljam();
+      jam();
       return pagePtr.i;
     }
     loop++;
@@ -349,7 +346,7 @@
       (free_space > c_max_list_size[list_index])) {
     Uint32 new_list_index= calculate_free_list_impl(free_space);
     if (list_index != MAX_FREE_LIST) {
-      ljam();
+      jam();
       /*
        * Only remove it from its list if it is in a list
        */
@@ -364,11 +361,11 @@
 	This can only happen for the free list with least guaranteed 
 	free space.
       */
-      ljam();
+      jam();
       ndbrequire(new_list_index == 0);
       pagePtr.p->list_index= MAX_FREE_LIST;
     } else {
-      ljam();
+      jam();
       LocalDLList<Page> list(c_page_pool, 
 			     fragPtr->free_var_page_array[new_list_index]);
       list.add(pagePtr);
@@ -384,9 +381,9 @@
 {
   Uint32 i;
   for (i = 0; i < MAX_FREE_LIST; i++) {
-    ljam();
+    jam();
     if (free_space_size <= c_max_list_size[i]) {
-      ljam();
+      jam();
       return i;
     }
   }

--- 1.109/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2007-03-18 18:21:31 +01:00
+++ 1.110/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2007-03-18 18:21:31 +01:00
@@ -1091,7 +1091,6 @@
 			  SchemaFile::TableEntry* te, Callback* callback,
                           bool savetodisk){
   jam();
-  ndbrequire(tableId < c_tableRecordPool.getSize());
   XSchemaFile * xsf = &c_schemaFile[c_schemaRecord.schemaPage != 0];
   SchemaFile::TableEntry * tableEntry = getTableEntry(xsf, tableId);
   
@@ -3760,9 +3759,7 @@
       break;
     }
 
-    if(getNodeState().getSingleUserMode() &&
-       (refToNode(signal->getSendersBlockRef()) !=
-        getNodeState().getSingleUserApi()))
+    if (checkSingleUserMode(signal->getSendersBlockRef()))
     {
       jam();
       parseRecord.errorCode = CreateTableRef::SingleUser;
@@ -3961,9 +3958,7 @@
     return;
   }
   
-  if(getNodeState().getSingleUserMode() &&
-     (refToNode(signal->getSendersBlockRef()) !=
-      getNodeState().getSingleUserApi()))
+  if (checkSingleUserMode(signal->getSendersBlockRef()))
   {
     jam();
     alterTableRef(signal, req, AlterTableRef::SingleUser);
@@ -6740,9 +6735,7 @@
     return;
   }
   
-  if(getNodeState().getSingleUserMode() &&
-     (refToNode(signal->getSendersBlockRef()) !=
-      getNodeState().getSingleUserApi()))
+  if (checkSingleUserMode(signal->getSendersBlockRef()))
   {
     jam();
     dropTableRef(signal, req, DropTableRef::SingleUser);
@@ -7956,9 +7949,7 @@
         jam();
         tmperr = CreateIndxRef::Busy;
       }
-      else if(getNodeState().getSingleUserMode() &&
-              (refToNode(senderRef) !=
-               getNodeState().getSingleUserApi()))
+      else if (checkSingleUserMode(senderRef))
       {
         jam();
         tmperr = CreateIndxRef::SingleUser;
@@ -8606,9 +8597,7 @@
         jam();
         tmperr = DropIndxRef::Busy;
       }
-      else if(getNodeState().getSingleUserMode() &&
-              (refToNode(senderRef) !=
-               getNodeState().getSingleUserApi()))
+      else if (checkSingleUserMode(senderRef))
       {
         jam();
         tmperr = DropIndxRef::SingleUser;
@@ -16526,5 +16515,20 @@
   
   sendSignal(ref, GSN_DROP_FILEGROUP_REQ, signal, 
 	     DropFilegroupImplReq::SignalLength, JBB);
+}
+
+/*
+  return 1 if all of the below is true
+  a) node in single user mode
+  b) senderRef is not a db node
+  c) senderRef nodeid is not the singleUserApi
+*/
+int Dbdict::checkSingleUserMode(Uint32 senderRef)
+{
+  Uint32 nodeId = refToNode(senderRef);
+  return
+    getNodeState().getSingleUserMode() &&
+    (getNodeInfo(nodeId).m_type != NodeInfo::DB) &&
+    (nodeId != getNodeState().getSingleUserApi());
 }
 

--- 1.45/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp	2007-03-18 18:21:31 +01:00
+++ 1.46/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp	2007-03-18 18:21:31 +01:00
@@ -2651,6 +2651,8 @@
   void send_drop_fg(Signal*, SchemaOp*, DropFilegroupImplReq::RequestInfo);
 
   void drop_undofile_prepare_start(Signal* signal, SchemaOp*);
+
+  int checkSingleUserMode(Uint32 senderRef);
 };
 
 inline bool

--- 1.57/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2007-03-18 18:21:31 +01:00
+++ 1.58/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2007-03-18 18:21:31 +01:00
@@ -35,6 +35,82 @@
 #include <../pgman.hpp>
 #include <../tsman.hpp>
 
+// jams
+#undef jam
+#undef jamEntry
+#ifdef DBTUP_BUFFER_CPP
+#define jam()	 	jamLine(10000 + __LINE__)
+#define jamEntry() 	jamEntryLine(10000 + __LINE__)
+#endif
+#ifdef DBTUP_ROUTINES_CPP
+#define jam()           jamLine(15000 + __LINE__)
+#define jamEntry()      jamEntryLine(15000 + __LINE__)
+#endif
+#ifdef DBTUP_COMMIT_CPP
+#define jam()           jamLine(20000 + __LINE__)
+#define jamEntry()      jamEntryLine(20000 + __LINE__)
+#endif
+#ifdef DBTUP_FIXALLOC_CPP
+#define jam()           jamLine(25000 + __LINE__)
+#define jamEntry()      jamEntryLine(25000 + __LINE__)
+#endif
+#ifdef DBTUP_TRIGGER_CPP
+#define jam()           jamLine(30000 + __LINE__)
+#define jamEntry()      jamEntryLine(30000 + __LINE__)
+#endif
+#ifdef DBTUP_ABORT_CPP
+#define jam()           jamLine(35000 + __LINE__)
+#define jamEntry()      jamEntryLine(35000 + __LINE__)
+#endif
+#ifdef DBTUP_PAGE_MAP_CPP
+#define jam()           jamLine(40000 + __LINE__)
+#define jamEntry()      jamEntryLine(40000 + __LINE__)
+#endif
+#ifdef DBTUP_PAG_MAN_CPP
+#define jam()           jamLine(45000 + __LINE__)
+#define jamEntry()      jamEntryLine(45000 + __LINE__)
+#endif
+#ifdef DBTUP_STORE_PROC_DEF_CPP
+#define jam()           jamLine(50000 + __LINE__)
+#define jamEntry()      jamEntryLine(50000 + __LINE__)
+#endif
+#ifdef DBTUP_META_CPP
+#define jam()           jamLine(55000 + __LINE__)
+#define jamEntry()      jamEntryLine(55000 + __LINE__)
+#endif
+#ifdef DBTUP_TAB_DES_MAN_CPP
+#define jam()           jamLine(60000 + __LINE__)
+#define jamEntry()      jamEntryLine(60000 + __LINE__)
+#endif
+#ifdef DBTUP_GEN_CPP
+#define jam()           jamLine(65000 + __LINE__)
+#define jamEntry()      jamEntryLine(65000 + __LINE__)
+#endif
+#ifdef DBTUP_INDEX_CPP
+#define jam()           jamLine(70000 + __LINE__)
+#define jamEntry()      jamEntryLine(70000 + __LINE__)
+#endif
+#ifdef DBTUP_DEBUG_CPP
+#define jam()           jamLine(75000 + __LINE__)
+#define jamEntry()      jamEntryLine(75000 + __LINE__)
+#endif
+#ifdef DBTUP_VAR_ALLOC_CPP
+#define jam()           jamLine(80000 + __LINE__)
+#define jamEntry()      jamEntryLine(80000 + __LINE__)
+#endif
+#ifdef DBTUP_SCAN_CPP
+#define jam()           jamLine(85000 + __LINE__)
+#define jamEntry()      jamEntryLine(85000 + __LINE__)
+#endif
+#ifdef DBTUP_DISK_ALLOC_CPP
+#define jam()           jamLine(90000 + __LINE__)
+#define jamEntry()      jamEntryLine(90000 + __LINE__)
+#endif
+#ifndef jam
+#define jam()           jamLine(__LINE__)
+#define jamEntry()      jamEntryLine(__LINE__)
+#endif
+
 #ifdef VM_TRACE
 inline const char* dbgmask(const Bitmask<MAXNROFATTRIBUTESINWORDS>& bm) {
   static int i=0; static char buf[5][200];
@@ -73,22 +149,23 @@
 // only reports the line number in the file it currently is located in.
 // 
 // DbtupExecQuery.cpp         0
-// DbtupBuffer.cpp         2000
-// DbtupRoutines.cpp       3000
-// DbtupCommit.cpp         5000
-// DbtupFixAlloc.cpp       6000
-// DbtupTrigger.cpp        7000
-// DbtupAbort.cpp          9000
-// DbtupPageMap.cpp       14000
-// DbtupPagMan.cpp        16000
-// DbtupStoredProcDef.cpp 18000
-// DbtupMeta.cpp          20000
-// DbtupTabDesMan.cpp     22000
-// DbtupGen.cpp           24000
-// DbtupIndex.cpp         28000
-// DbtupDebug.cpp         30000
-// DbtupVarAlloc.cpp      32000
-// DbtupScan.cpp          33000
+// DbtupBuffer.cpp         10000
+// DbtupRoutines.cpp       15000
+// DbtupCommit.cpp         20000
+// DbtupFixAlloc.cpp       25000
+// DbtupTrigger.cpp        30000
+// DbtupAbort.cpp          35000
+// DbtupPageMap.cpp        40000
+// DbtupPagMan.cpp         45000
+// DbtupStoredProcDef.cpp  50000
+// DbtupMeta.cpp           55000
+// DbtupTabDesMan.cpp      60000
+// DbtupGen.cpp            65000
+// DbtupIndex.cpp          70000
+// DbtupDebug.cpp          75000
+// DbtupVarAlloc.cpp       80000
+// DbtupScan.cpp           85000
+// DbtupDiskAlloc.cpp      90000
 //------------------------------------------------------------------
 
 /*

--- 1.14/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	2007-03-18 18:21:31 +01:00
+++ 1.15/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	2007-03-18 18:21:31 +01:00
@@ -14,21 +14,19 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 #define DBTUP_C
+#define DBTUP_ABORT_CPP
 #include "Dbtup.hpp"
 #include <RefConvert.hpp>
 #include <ndb_limits.h>
 #include <pc.hpp>
 
-#define ljam() { jamLine(9000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(9000 + __LINE__); }
-
 void Dbtup::freeAllAttrBuffers(Operationrec*  const regOperPtr)
 {
   if (regOperPtr->storedProcedureId == RNIL) {
-    ljam();
+    jam();
     freeAttrinbufrec(regOperPtr->firstAttrinbufrec);
   } else {
-    ljam();
+    jam();
     StoredProcPtr storedPtr;
     c_storedProcPool.getPtr(storedPtr, (Uint32)regOperPtr->storedProcedureId);
     ndbrequire(storedPtr.p->storedCode == ZSCAN_PROCEDURE);
@@ -46,7 +44,7 @@
   Uint32 RnoFree = cnoFreeAttrbufrec;
   localAttrBufPtr.i = anAttrBuf;
   while (localAttrBufPtr.i != RNIL) {
-    ljam();
+    jam();
     ptrCheckGuard(localAttrBufPtr, cnoOfAttrbufrec, attrbufrec);
     Ttemp = localAttrBufPtr.p->attrbuf[ZBUF_NEXT];
     localAttrBufPtr.p->attrbuf[ZBUF_NEXT] = cfirstfreeAttrbufrec;
@@ -62,7 +60,7 @@
  */
 void Dbtup::execTUP_ABORTREQ(Signal* signal) 
 {
-  ljamEntry();
+  jamEntry();
   do_tup_abortreq(signal, 0);
 }
 
@@ -80,7 +78,7 @@
              (trans_state == TRANS_ERROR_WAIT_TUPKEYREQ) ||
              (trans_state == TRANS_IDLE));
   if (regOperPtr.p->op_struct.op_type == ZREAD) {
-    ljam();
+    jam();
     freeAllAttrBuffers(regOperPtr.p);
     initOpConnection(regOperPtr.p);
     return;
@@ -94,7 +92,7 @@
 
   if (get_tuple_state(regOperPtr.p) == TUPLE_PREPARED)
   {
-    ljam();
+    jam();
     if (!regTabPtr.p->tuxCustomTriggers.isEmpty() &&
         (flags & ZSKIP_TUX_TRIGGERS) == 0)
       executeTuxAbortTriggers(signal,
@@ -105,12 +103,12 @@
     OperationrecPtr loopOpPtr;
     loopOpPtr.i = regOperPtr.p->nextActiveOp;
     while (loopOpPtr.i != RNIL) {
-      ljam();
+      jam();
       c_operation_pool.getPtr(loopOpPtr);
       if (get_tuple_state(loopOpPtr.p) != TUPLE_ALREADY_ABORTED &&
 	  !regTabPtr.p->tuxCustomTriggers.isEmpty() &&
           (flags & ZSKIP_TUX_TRIGGERS) == 0) {
-        ljam();
+        jam();
         executeTuxAbortTriggers(signal,
                                 loopOpPtr.p,
                                 regFragPtr.p,
@@ -219,116 +217,116 @@
   case 1:
 //tmupdate_alloc_error:
     terrorCode= ZMEM_NOMEM_ERROR;
-    ljam();
+    jam();
     break;
 
   case 15:
-    ljam();
+    jam();
     terrorCode = ZREGISTER_INIT_ERROR;
     break;
 
   case 16:
-    ljam();
+    jam();
     terrorCode = ZTRY_TO_UPDATE_ERROR;
     break;
 
   case 17:
-    ljam();
+    jam();
     terrorCode = ZNO_ILLEGAL_NULL_ATTR;
     break;
 
   case 19:
-    ljam();
+    jam();
     terrorCode = ZTRY_TO_UPDATE_ERROR;
     break;
 
   case 20:
-    ljam();
+    jam();
     terrorCode = ZREGISTER_INIT_ERROR;
     break;
 
   case 22:
-    ljam();
+    jam();
     terrorCode = ZTOTAL_LEN_ERROR;
     break;
 
   case 23:
-    ljam();
+    jam();
     terrorCode = ZREGISTER_INIT_ERROR;
     break;
 
   case 24:
-    ljam();
+    jam();
     terrorCode = ZREGISTER_INIT_ERROR;
     break;
 
   case 26:
-    ljam();
+    jam();
     terrorCode = ZREGISTER_INIT_ERROR;
     break;
 
   case 27:
-    ljam();
+    jam();
     terrorCode = ZREGISTER_INIT_ERROR;
     break;
 
   case 28:
-    ljam();
+    jam();
     terrorCode = ZREGISTER_INIT_ERROR;
     break;
 
   case 29:
-    ljam();
+    jam();
     break;
 
   case 30:
-    ljam();
+    jam();
     terrorCode = ZCALL_ERROR;
     break;
 
   case 31:
-    ljam();
+    jam();
     terrorCode = ZSTACK_OVERFLOW_ERROR;
     break;
 
   case 32:
-    ljam();
+    jam();
     terrorCode = ZSTACK_UNDERFLOW_ERROR;
     break;
 
   case 33:
-    ljam();
+    jam();
     terrorCode = ZNO_INSTRUCTION_ERROR;
     break;
 
   case 34:
-    ljam();
+    jam();
     terrorCode = ZOUTSIDE_OF_PROGRAM_ERROR;
     break;
 
   case 35:
-    ljam();
+    jam();
     terrorCode = ZTOO_MANY_INSTRUCTIONS_ERROR;
     break;
 
   case 38:
-    ljam();
+    jam();
     terrorCode = ZTEMPORARY_RESOURCE_FAILURE;
     break;
 
   case 39:
     if (get_trans_state(operPtr.p) == TRANS_TOO_MUCH_AI) {
-      ljam();
+      jam();
       terrorCode = ZTOO_MUCH_ATTRINFO_ERROR;
     } else if (get_trans_state(operPtr.p) == TRANS_ERROR_WAIT_TUPKEYREQ) {
-      ljam();
+      jam();
       terrorCode = ZSEIZE_ATTRINBUFREC_ERROR;
     } else {
       ndbrequire(false);
     }//if
     break;
   case 40:
-    ljam();
+    jam();
     terrorCode = ZUNSUPPORTED_BRANCH;
     break;
   default:

--- 1.19/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	2007-03-18 18:21:31 +01:00
+++ 1.20/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	2007-03-18 18:21:31 +01:00
@@ -14,6 +14,7 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 #define DBTUP_C
+#define DBTUP_COMMIT_CPP
 #include "Dbtup.hpp"
 #include <RefConvert.hpp>
 #include <ndb_limits.h>
@@ -21,16 +22,13 @@
 #include <signaldata/TupCommit.hpp>
 #include "../dblqh/Dblqh.hpp"
 
-#define ljam() { jamLine(5000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(5000 + __LINE__); }
-
 void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
 {
   TablerecPtr regTabPtr;
   FragrecordPtr regFragPtr;
   Uint32 frag_page_id, frag_id;
 
-  ljamEntry();
+  jamEntry();
 
   frag_id= signal->theData[0];
   regTabPtr.i= signal->theData[1];
@@ -63,7 +61,7 @@
     if (regTabPtr.p->m_attributes[MM].m_no_of_varsize +
         regTabPtr.p->m_attributes[MM].m_no_of_dynamic)
     {
-      ljam();
+      jam();
       free_var_rec(regFragPtr.p, regTabPtr.p, &tmp, pagePtr);
     } else {
       free_fix_rec(regFragPtr.p, regTabPtr.p, &tmp, (Fix_page*)pagePtr.p);
@@ -79,7 +77,7 @@
   Uint32 gci= signal->theData[1];
   c_operation_pool.getPtr(loopOpPtr);
   while (loopOpPtr.p->prevActiveOp != RNIL) {
-    ljam();
+    jam();
     loopOpPtr.i= loopOpPtr.p->prevActiveOp;
     c_operation_pool.getPtr(loopOpPtr);
   }
@@ -88,11 +86,11 @@
     signal->theData[0]= loopOpPtr.p->userpointer;
     signal->theData[1]= gci;
     if (loopOpPtr.p->nextActiveOp == RNIL) {
-      ljam();
+      jam();
       EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2);
       return;
     }
-    ljam();
+    jam();
     EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2);
     jamEntry();
     loopOpPtr.i= loopOpPtr.p->nextActiveOp;
@@ -115,16 +113,16 @@
   if (regOperPtr->op_struct.in_active_list) {
     regOperPtr->op_struct.in_active_list= false;
     if (regOperPtr->nextActiveOp != RNIL) {
-      ljam();
+      jam();
       raoOperPtr.i= regOperPtr->nextActiveOp;
       c_operation_pool.getPtr(raoOperPtr);
       raoOperPtr.p->prevActiveOp= regOperPtr->prevActiveOp;
     } else {
-      ljam();
+      jam();
       tuple_ptr->m_operation_ptr_i = regOperPtr->prevActiveOp;
     }
     if (regOperPtr->prevActiveOp != RNIL) {
-      ljam();
+      jam();
       raoOperPtr.i= regOperPtr->prevActiveOp;
       c_operation_pool.getPtr(raoOperPtr);
       raoOperPtr.p->nextActiveOp= regOperPtr->nextActiveOp;
@@ -367,7 +365,7 @@
   Uint32 gci;
   OperationrecPtr regOperPtr;
 
-  ljamEntry();
+  jamEntry();
   
   c_operation_pool.getPtr(regOperPtr, opPtrI);
   c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
@@ -403,7 +401,7 @@
   Uint32 gci;
   OperationrecPtr regOperPtr;
 
-  ljamEntry();
+  jamEntry();
   
   c_operation_pool.getPtr(regOperPtr, opPtrI);
   c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
@@ -471,7 +469,7 @@
   TupCommitReq * const tupCommitReq= (TupCommitReq *)signal->getDataPtr();
 
   regOperPtr.i= tupCommitReq->opPtr;
-  ljamEntry();
+  jamEntry();
 
   c_operation_pool.getPtr(regOperPtr);
   if(!regOperPtr.p->is_first_operation())
@@ -627,7 +625,7 @@
      *   why can't we instead remove "own version" (when approriate ofcourse)
      */
     if (!regTabPtr.p->tuxCustomTriggers.isEmpty()) {
-      ljam();
+      jam();
       OperationrecPtr loopPtr= regOperPtr;
       while(loopPtr.i != RNIL)
       {
@@ -683,18 +681,18 @@
 {
   ChangeMaskState state = get_change_mask_state(regOperPtr);
   if (state == USE_SAVED_CHANGE_MASK) {
-    ljam();
+    jam();
     req_struct->changeMask.setWord(0, regOperPtr->saved_change_mask[0]);
     req_struct->changeMask.setWord(1, regOperPtr->saved_change_mask[1]);
   } else if (state == RECALCULATE_CHANGE_MASK) {
-    ljam();
+    jam();
     // Recompute change mask, for now set all bits
     req_struct->changeMask.set();
   } else if (state == SET_ALL_MASK) {
-    ljam();
+    jam();
     req_struct->changeMask.set();
   } else {
-    ljam();
+    jam();
     ndbrequire(state == DELETE_CHANGES);
     req_struct->changeMask.set();
   }
@@ -714,17 +712,17 @@
     ndbrequire(loopOpPtr.p->op_struct.op_type == ZUPDATE);
     ChangeMaskState change_mask= get_change_mask_state(loopOpPtr.p);
     if (change_mask == USE_SAVED_CHANGE_MASK) {
-      ljam();
+      jam();
       saved_word1|= loopOpPtr.p->saved_change_mask[0];
       saved_word2|= loopOpPtr.p->saved_change_mask[1];
     } else if (change_mask == RECALCULATE_CHANGE_MASK) {
-      ljam();
+      jam();
       //Recompute change mask, for now set all bits
       req_struct->changeMask.set();
       return;
     } else {
       ndbrequire(change_mask == SET_ALL_MASK);
-      ljam();
+      jam();
       req_struct->changeMask.set();
       return;
     }

--- 1.50/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2007-03-18 18:21:31 +01:00
+++ 1.51/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2007-03-18 18:21:31 +01:00
@@ -1330,6 +1330,28 @@
   {  
     shrink_tuple(req_struct, sizes+2, regTabPtr, true);
   }
+
+  if (ERROR_INSERTED(4025))
+  {
+    goto mem_error;
+  }
+
+  if (ERROR_INSERTED(4026))
+  {
+    CLEAR_ERROR_INSERT_VALUE;
+    goto mem_error;
+  }
+
+  if (ERROR_INSERTED(4027) && (rand() % 100) > 25)
+  {
+    goto mem_error;
+  }
+ 
+  if (ERROR_INSERTED(4028) && (rand() % 100) > 25)
+  {
+    CLEAR_ERROR_INSERT_VALUE;
+    goto mem_error;
+  }
   
   /**
    * Alloc memory

--- 1.33/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2007-03-18 18:21:31 +01:00
+++ 1.34/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2007-03-18 18:21:31 +01:00
@@ -15,6 +15,7 @@
 
 
 #define DBTUP_C
+#define DBTUP_GEN_CPP
 #include "Dbtup.hpp"
 #include <RefConvert.hpp>
 #include <ndb_limits.h>
@@ -34,9 +35,6 @@
 
 #define DEBUG(x) { ndbout << "TUP::" << x << endl; }
 
-#define ljam() { jamLine(24000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(24000 + __LINE__); }
-
 void Dbtup::initData() 
 {
   cnoOfAttrbufrec = ZNO_OF_ATTRBUFREC;
@@ -116,6 +114,7 @@
   c_no_of_pages = 0;
   
   initData();
+  CLEAR_ERROR_INSERT_VALUE;
 }//Dbtup::Dbtup()
 
 Dbtup::~Dbtup() 
@@ -160,21 +159,21 @@
 
 void Dbtup::execCONTINUEB(Signal* signal) 
 {
-  ljamEntry();
+  jamEntry();
   Uint32 actionType = signal->theData[0];
   Uint32 dataPtr = signal->theData[1];
   switch (actionType) {
   case ZINITIALISE_RECORDS:
-    ljam();
+    jam();
     initialiseRecordsLab(signal, dataPtr, 
 			 signal->theData[2], signal->theData[3]);
     break;
   case ZREL_FRAG:
-    ljam();
+    jam();
     releaseFragment(signal, dataPtr, signal->theData[2]);
     break;
   case ZREPORT_MEMORY_USAGE:{
-    ljam();
+    jam();
     static int c_currentMemUsed = 0;
     Uint32 cnt = signal->theData[1];
     Uint32 tmp = c_no_of_pages;
@@ -209,11 +208,11 @@
     return;
   }
   case ZBUILD_INDEX:
-    ljam();
+    jam();
     buildIndex(signal, dataPtr);
     break;
   case ZTUP_SCAN:
-    ljam();
+    jam();
     {
       ScanOpPtr scanPtr;
       c_scanOpPool.getPtr(scanPtr, dataPtr);
@@ -222,7 +221,7 @@
     return;
   case ZFREE_EXTENT:
   {
-    ljam();
+    jam();
     
     TablerecPtr tabPtr;
     tabPtr.i= dataPtr;
@@ -235,7 +234,7 @@
   }
   case ZUNMAP_PAGES:
   {
-    ljam();
+    jam();
     
     TablerecPtr tabPtr;
     tabPtr.i= dataPtr;
@@ -248,7 +247,7 @@
   }
   case ZFREE_VAR_PAGES:
   {
-    ljam();
+    jam();
     drop_fragment_free_var_pages(signal);
     return;
   }
@@ -265,20 +264,19 @@
 /* **************************************************************** */
 void Dbtup::execSTTOR(Signal* signal) 
 {
-  ljamEntry();
+  jamEntry();
   Uint32 startPhase = signal->theData[1];
   Uint32 sigKey = signal->theData[6];
   switch (startPhase) {
   case ZSTARTPHASE1:
-    ljam();
-    CLEAR_ERROR_INSERT_VALUE;
+    jam();
     ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0);
     ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0);
     ndbrequire((c_lgman= (Lgman*)globalData.getBlock(LGMAN)) != 0);
     cownref = calcTupBlockRef(0);
     break;
   default:
-    ljam();
+    jam();
     break;
   }//switch
   signal->theData[0] = sigKey;
@@ -301,7 +299,7 @@
   Uint32 senderData = req->senderData;
   ndbrequire(req->noOfParameters == 0);
   
-  ljamEntry();
+  jamEntry();
 
   const ndb_mgm_configuration_iterator * p = 
     m_ctx.m_config.getOwnConfigIterator();
@@ -426,59 +424,59 @@
 {
   switch (switchData) {
   case 0:
-    ljam();
+    jam();
     initializeHostBuffer();
     break;
   case 1:
-    ljam();
+    jam();
     initializeOperationrec();
     break;
   case 2:
-    ljam();
+    jam();
     initializePage();
     break;
   case 3:
-    ljam();
+    jam();
     break;
   case 4:
-    ljam();
+    jam();
     initializeTablerec();
     break;
   case 5:
-    ljam();
+    jam();
     break;
   case 6:
-    ljam();
+    jam();
     initializeFragrecord();
     break;
   case 7:
-    ljam();
+    jam();
     initializeFragoperrec();
     break;
   case 8:
-    ljam();
+    jam();
     initializePageRange();
     break;
   case 9:
-    ljam();
+    jam();
     initializeTabDescr();
     break;
   case 10:
-    ljam();
+    jam();
     initializeAlterTabOperation();
     break;
   case 11:
-    ljam();
+    jam();
     break;
   case 12:
-    ljam();
+    jam();
     initializeAttrbufrec();
     break;
   case 13:
-    ljam();
+    jam();
     break;
   case 14:
-    ljam();
+    jam();
 
     {
       ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend();
@@ -502,28 +500,28 @@
 
 void Dbtup::execNDB_STTOR(Signal* signal) 
 {
-  ljamEntry();
+  jamEntry();
   cndbcntrRef = signal->theData[0];
   Uint32 ownNodeId = signal->theData[1];
   Uint32 startPhase = signal->theData[2];
   switch (startPhase) {
   case ZSTARTPHASE1:
-    ljam();
+    jam();
     cownNodeId = ownNodeId;
     cownref = calcTupBlockRef(ownNodeId);
     break;
   case ZSTARTPHASE2:
-    ljam();
+    jam();
     break;
   case ZSTARTPHASE3:
-    ljam();
+    jam();
     startphase3Lab(signal, ~0, ~0);
     break;
   case ZSTARTPHASE4:
-    ljam();
+    jam();
     break;
   case ZSTARTPHASE6:
-    ljam();
+    jam();
 /*****************************************/
 /*       NOW SET THE DISK WRITE SPEED TO */
 /*       PAGES PER TICK AFTER SYSTEM     */
@@ -534,7 +532,7 @@
     sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 1000, 1);    
     break;
   default:
-    ljam();
+    jam();
     break;
   }//switch
   signal->theData[0] = cownref;
@@ -629,7 +627,7 @@
 {
   TablerecPtr regTabPtr;
   for (regTabPtr.i = 0; regTabPtr.i < cnoOfTablerec; regTabPtr.i++) {
-    ljam();
+    jam();
     refresh_watch_dog();
     ptrAss(regTabPtr, tablerec);
     initTab(regTabPtr.p);
@@ -700,12 +698,12 @@
 void Dbtup::execTUPSEIZEREQ(Signal* signal)
 {
   OperationrecPtr regOperPtr;
-  ljamEntry();
+  jamEntry();
   Uint32 userPtr = signal->theData[0];
   BlockReference userRef = signal->theData[1];
   if (!c_operation_pool.seize(regOperPtr))
   {
-    ljam();
+    jam();
     signal->theData[0] = userPtr;
     signal->theData[1] = ZGET_OPREC_ERROR;
     sendSignal(userRef, GSN_TUPSEIZEREF, signal, 2, JBB);
@@ -739,7 +737,7 @@
 void Dbtup::execTUPRELEASEREQ(Signal* signal) 
 {
   OperationrecPtr regOperPtr;
-  ljamEntry();
+  jamEntry();
   regOperPtr.i = signal->theData[0];
   c_operation_pool.getPtr(regOperPtr);
   set_trans_state(regOperPtr.p, TRANS_DISCONNECTED);

--- 1.22/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp	2007-03-18 18:21:31 +01:00
+++ 1.23/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp	2007-03-18 18:21:31 +01:00
@@ -14,6 +14,7 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 #define DBTUP_C
+#define DBTUP_INDEX_CPP
 #include "Dbtup.hpp"
 #include <RefConvert.hpp>
 #include <ndb_limits.h>
@@ -23,9 +24,6 @@
 #include <AttributeHeader.hpp>
 #include <signaldata/TuxMaint.hpp>
 
-#define ljam() { jamLine(28000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(28000 + __LINE__); }
-
 // methods used by ordered index
 
 void
@@ -34,7 +32,7 @@
                      Uint32 pageIndex,
                      Uint32& tupAddr)
 {
-  ljamEntry();
+  jamEntry();
   PagePtr pagePtr;
   c_page_pool.getPtr(pagePtr, pageId);
   Uint32 fragPageId= pagePtr.p->frag_page_id;
@@ -48,7 +46,7 @@
                     Uint32& pageOffset,
                     Uint32*& node)
 {
-  ljamEntry();
+  jamEntry();
   FragrecordPtr fragPtr;
   fragPtr.i= fragPtrI;
   ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
@@ -61,7 +59,7 @@
   Uint32* ptr, frag_page_id;
   if ((ptr= alloc_fix_rec(fragPtr.p, tablePtr.p, &key, &frag_page_id)) == 0)
   {
-    ljam();
+    jam();
     terrorCode = ZMEM_NOMEM_ERROR; // caller sets error
     return terrorCode;
   }
@@ -82,7 +80,7 @@
                    Uint32 pageOffset,
                    Uint32* node)
 {
-  ljamEntry();
+  jamEntry();
   FragrecordPtr fragPtr;
   fragPtr.i= fragPtrI;
   ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
@@ -105,7 +103,7 @@
                   Uint32 pageOffset,
                   Uint32*& node)
 {
-  ljamEntry();
+  jamEntry();
   FragrecordPtr fragPtr;
   fragPtr.i= fragPtrI;
   ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
@@ -130,7 +128,7 @@
                     Uint32 numAttrs,
                     Uint32* dataOut)
 {
-  ljamEntry();
+  jamEntry();
   // use own variables instead of globals
   FragrecordPtr fragPtr;
   fragPtr.i= fragPtrI;
@@ -150,21 +148,21 @@
   Tuple_header *tuple_ptr= req_struct.m_tuple_ptr;
   if (tuple_ptr->get_tuple_version() != tupVersion)
   {
-    ljam();
+    jam();
     OperationrecPtr opPtr;
     opPtr.i= tuple_ptr->m_operation_ptr_i;
     Uint32 loopGuard= 0;
     while (opPtr.i != RNIL) {
       c_operation_pool.getPtr(opPtr);
       if (opPtr.p->tupVersion == tupVersion) {
-	ljam();
+	jam();
 	if (!opPtr.p->m_copy_tuple_location.isNull()) {
 	  req_struct.m_tuple_ptr= (Tuple_header*)
 	    c_undo_buffer.get_ptr(&opPtr.p->m_copy_tuple_location);
         }
 	break;
       }
-      ljam();
+      jam();
       opPtr.i= opPtr.p->prevActiveOp;
       ndbrequire(++loopGuard < (1 << ZTUP_VERSION_BITS));
     }
@@ -202,7 +200,7 @@
 int
 Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag)
 {
-  ljamEntry();
+  jamEntry();
   // use own variables instead of globals
   FragrecordPtr fragPtr;
   fragPtr.i= fragPtrI;
@@ -305,7 +303,7 @@
 int
 Dbtup::accReadPk(Uint32 tableId, Uint32 fragId, Uint32 fragPageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag)
 {
-  ljamEntry();
+  jamEntry();
   // get table
   TablerecPtr tablePtr;
   tablePtr.i = tableId;
@@ -329,7 +327,7 @@
                   Uint32 transId2,
                   Uint32 savePointId)
 {
-  ljamEntry();
+  jamEntry();
   FragrecordPtr fragPtr;
   fragPtr.i= fragPtrI;
   ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
@@ -358,9 +356,9 @@
      * for this transaction and savepoint id.  If its tuple version
      * equals the requested then we have a visible tuple otherwise not.
      */
-    ljam();
+    jam();
     if (req_struct.m_tuple_ptr->get_tuple_version() == tupVersion) {
-      ljam();
+      jam();
       return true;
     }
   }
@@ -378,7 +376,7 @@
 void
 Dbtup::execBUILDINDXREQ(Signal* signal)
 {
-  ljamEntry();
+  jamEntry();
 #ifdef TIME_MEASUREMENT
   time_events= 0;
   tot_time_passed= 0;
@@ -387,7 +385,7 @@
   // get new operation
   BuildIndexPtr buildPtr;
   if (! c_buildIndexList.seize(buildPtr)) {
-    ljam();
+    jam();
     BuildIndexRec buildRec;
     memcpy(buildRec.m_request, signal->theData, sizeof(buildRec.m_request));
     buildRec.m_errorCode= BuildIndxRef::Busy;
@@ -402,7 +400,7 @@
   do {
     const BuildIndxReq* buildReq= (const BuildIndxReq*)buildPtr.p->m_request;
     if (buildReq->getTableId() >= cnoOfTablerec) {
-      ljam();
+      jam();
       buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable;
       break;
     }
@@ -410,7 +408,7 @@
     tablePtr.i= buildReq->getTableId();
     ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
     if (tablePtr.p->tableStatus != DEFINED) {
-      ljam();
+      jam();
       buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable;
       break;
     }
@@ -419,7 +417,7 @@
       (tablePtr.p->m_attributes[MM].m_no_of_varsize +
        tablePtr.p->m_attributes[MM].m_no_of_dynamic) > 0;
     if (DictTabInfo::isOrderedIndex(buildReq->getIndexType())) {
-      ljam();
+      jam();
       const DLList<TupTriggerData>& triggerList = 
 	tablePtr.p->tuxCustomTriggers;
 
@@ -427,13 +425,13 @@
       triggerList.first(triggerPtr);
       while (triggerPtr.i != RNIL) {
 	if (triggerPtr.p->indexId == buildReq->getIndexId()) {
-	  ljam();
+	  jam();
 	  break;
 	}
 	triggerList.next(triggerPtr);
       }
       if (triggerPtr.i == RNIL) {
-	ljam();
+	jam();
 	// trigger was not created
 	buildPtr.p->m_errorCode = BuildIndxRef::InternalError;
 	break;
@@ -441,12 +439,12 @@
       buildPtr.p->m_indexId = buildReq->getIndexId();
       buildPtr.p->m_buildRef = DBTUX;
     } else if(buildReq->getIndexId() == RNIL) {
-      ljam();
+      jam();
       // REBUILD of acc
       buildPtr.p->m_indexId = RNIL;
       buildPtr.p->m_buildRef = DBACC;
     } else {
-      ljam();
+      jam();
       buildPtr.p->m_errorCode = BuildIndxRef::InvalidIndexType;
       break;
     }
@@ -491,7 +489,7 @@
     // get fragment
     FragrecordPtr fragPtr;
     if (buildPtr.p->m_fragNo == MAX_FRAG_PER_NODE) {
-      ljam();
+      jam();
       // build ready
       buildIndexReply(signal, buildPtr.p);
       c_buildIndexList.release(buildPtr);
@@ -500,7 +498,7 @@
     ndbrequire(buildPtr.p->m_fragNo < MAX_FRAG_PER_NODE);
     fragPtr.i= tablePtr.p->fragrec[buildPtr.p->m_fragNo];
     if (fragPtr.i == RNIL) {
-      ljam();
+      jam();
       buildPtr.p->m_fragNo++;
       buildPtr.p->m_pageId= 0;
       buildPtr.p->m_tupleNo= firstTupleNo;
@@ -510,7 +508,7 @@
     // get page
     PagePtr pagePtr;
     if (buildPtr.p->m_pageId >= fragPtr.p->noOfPages) {
-      ljam();
+      jam();
       buildPtr.p->m_fragNo++;
       buildPtr.p->m_pageId= 0;
       buildPtr.p->m_tupleNo= firstTupleNo;
@@ -521,7 +519,7 @@
     Uint32 pageState= pagePtr.p->page_state;
     // skip empty page
     if (pageState == ZEMPTY_MM) {
-      ljam();
+      jam();
       buildPtr.p->m_pageId++;
       buildPtr.p->m_tupleNo= firstTupleNo;
       break;
@@ -531,7 +529,7 @@
     const Tuple_header* tuple_ptr = 0;
     pageIndex = buildPtr.p->m_tupleNo * tupheadsize;
     if (pageIndex + tupheadsize > Fix_page::DATA_WORDS) {
-      ljam();
+      jam();
       buildPtr.p->m_pageId++;
       buildPtr.p->m_tupleNo= firstTupleNo;
       break;
@@ -539,7 +537,7 @@
     tuple_ptr = (Tuple_header*)&pagePtr.p->m_data[pageIndex];
     // skip over free tuple
     if (tuple_ptr->m_header_bits & Tuple_header::FREE) {
-      ljam();
+      jam();
       buildPtr.p->m_tupleNo++;
       break;
     }
@@ -582,7 +580,7 @@
       tuple as a copy tuple. The original tuple is stable and is thus
       preferrable to store in TUX.
       */
-      ljam();
+      jam();
 
       /**
        * Since copy tuples now can't be found on real pages.
@@ -611,11 +609,11 @@
       } while(req->errorCode == 0 && pageOperPtr.i != RNIL);
     } 
     
-    ljamEntry();
+    jamEntry();
     if (req->errorCode != 0) {
       switch (req->errorCode) {
       case TuxMaintReq::NoMemError:
-        ljam();
+        jam();
         buildPtr.p->m_errorCode= BuildIndxRef::AllocationFailure;
         break;
       default:
@@ -667,7 +665,7 @@
   rep->setIndexId(buildReq->getIndexId());
   // conf
   if (buildPtrP->m_errorCode == BuildIndxRef::NoError) {
-    ljam();
+    jam();
     sendSignal(rep->getUserRef(), GSN_BUILDINDXCONF,
         signal, BuildIndxConf::SignalLength, JBB);
     return;

--- 1.36/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2007-03-18 18:21:31 +01:00
+++ 1.37/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2007-03-18 18:21:31 +01:00
@@ -15,6 +15,7 @@
 
 
 #define DBTUP_C
+#define DBTUP_META_CPP
 #include "Dbtup.hpp"
 #include <RefConvert.hpp>
 #include <ndb_limits.h>
@@ -30,16 +31,13 @@
 #include "AttributeOffset.hpp"
 #include <my_sys.h>
 
-#define ljam() { jamLine(20000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(20000 + __LINE__); }
-
 void Dbtup::execTUPFRAGREQ(Signal* signal)
 {
-  ljamEntry();
+  jamEntry();
 
   TupFragReq* tupFragReq = (TupFragReq*)signal->getDataPtr();
   if (tupFragReq->userPtr == (Uint32)-1) {
-    ljam();
+    jam();
     abortAddFragOp(signal);
     return;
   }
@@ -70,7 +68,7 @@
 #ifndef VM_TRACE
   // config mismatch - do not crash if release compiled
   if (regTabPtr.i >= cnoOfTablerec) {
-    ljam();
+    jam();
     tupFragReq->userPtr = userptr;
     tupFragReq->userRef = 800;
     sendSignal(userblockref, GSN_TUPFRAGREF, signal, 2, JBB);
@@ -80,7 +78,7 @@
 
   ptrCheckGuard(regTabPtr, cnoOfTablerec, tablerec);
   if (cfirstfreeFragopr == RNIL) {
-    ljam();
+    jam();
     tupFragReq->userPtr = userptr;
     tupFragReq->userRef = ZNOFREE_FRAGOP_ERROR;
     sendSignal(userblockref, GSN_TUPFRAGREF, signal, 2, JBB);
@@ -105,29 +103,29 @@
 
   getFragmentrec(regFragPtr, fragId, regTabPtr.p);
   if (regFragPtr.i != RNIL) {
-    ljam();
+    jam();
     terrorCode= ZEXIST_FRAG_ERROR;
     fragrefuse1Lab(signal, fragOperPtr);
     return;
   }
   if (cfirstfreefrag != RNIL) {
-    ljam();
+    jam();
     seizeFragrecord(regFragPtr);
   } else {
-    ljam();
+    jam();
     terrorCode= ZFULL_FRAGRECORD_ERROR;
     fragrefuse1Lab(signal, fragOperPtr);
     return;
   }
   initFragRange(regFragPtr.p);
   if (!addfragtotab(regTabPtr.p, fragId, regFragPtr.i)) {
-    ljam();
+    jam();
     terrorCode= ZNO_FREE_TAB_ENTRY_ERROR;
     fragrefuse2Lab(signal, fragOperPtr, regFragPtr);
     return;
   }
   if (cfirstfreerange == RNIL) {
-    ljam();
+    jam();
     terrorCode= ZNO_FREE_PAGE_RANGE_ERROR;
     fragrefuse3Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
     return;
@@ -143,7 +141,7 @@
 
   if (ERROR_INSERTED(4007) && regTabPtr.p->fragid[0] == fragId ||
       ERROR_INSERTED(4008) && regTabPtr.p->fragid[1] == fragId) {
-    ljam();
+    jam();
     terrorCode = 1;
     fragrefuse4Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
     CLEAR_ERROR_INSERT_VALUE;
@@ -151,7 +149,7 @@
   }
 
   if (regTabPtr.p->tableStatus == NOT_DEFINED) {
-    ljam();
+    jam();
 //-----------------------------------------------------------------------------
 // We are setting up references to the header of the tuple.
 // Active operation  This word contains a reference to the operation active
@@ -211,13 +209,13 @@
                                          noOfKeyAttr, offset);
     Uint32 tableDescriptorRef= allocTabDescr(allocSize);
     if (tableDescriptorRef == RNIL) {
-      ljam();
+      jam();
       fragrefuse4Lab(signal, fragOperPtr, regFragPtr, regTabPtr.p, fragId);
       return;
     }
     setUpDescriptorReferences(tableDescriptorRef, regTabPtr.p, offset);
   } else {
-    ljam();
+    jam();
     fragOperPtr.p->definingFragment= false;
   }
   signal->theData[0]= fragOperPtr.p->lqhPtrFrag;
@@ -233,9 +231,9 @@
                          Uint32 fragIndex) 
 {
   for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
-    ljam();
+    jam();
     if (regTabPtr->fragid[i] == RNIL) {
-      ljam();
+      jam();
       regTabPtr->fragid[i]= fragId;
       regTabPtr->fragrec[i]= fragIndex;
       return true;
@@ -249,9 +247,9 @@
                            Tablerec* const regTabPtr) 
 {
   for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
-    ljam();
+    jam();
     if (regTabPtr->fragid[i] == fragId) {
-      ljam();
+      jam();
       regFragPtr.i= regTabPtr->fragrec[i];
       ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord);
       return;
@@ -295,7 +293,7 @@
   FragoperrecPtr fragOperPtr;
   TablerecPtr regTabPtr;
 
-  ljamEntry();
+  jamEntry();
   fragOperPtr.i= signal->theData[0];
   ptrCheckGuard(fragOperPtr, cnoOfFragoprec, fragoperrec);
   Uint32 attrId = signal->theData[2];
@@ -358,20 +356,20 @@
   Uint32 words= (bytes + 3) / 4;
   Uint32 ind= AttributeDescriptor::getDiskBased(attrDescriptor);
   if (!AttributeDescriptor::getDynamic(attrDescriptor)) {
-    ljam();
+    jam();
     Uint32 null_pos;
     ndbrequire(ind <= 1);
     null_pos= fragOperPtr.p->m_null_bits[ind];
 
     if (AttributeDescriptor::getNullable(attrDescriptor)) 
     {
-      ljam();
+      jam();
       fragOperPtr.p->m_null_bits[ind]++;
     } 
 
     if (AttributeDescriptor::getArrayType(attrDescriptor)==NDB_ARRAYTYPE_FIXED)
     {
-      ljam();
+      jam();
       regTabPtr.p->m_attributes[ind].m_no_of_fixsize++;
       if(attrLen == 0)
       {
@@ -459,7 +457,7 @@
       ERROR_INSERTED(4010) && regTabPtr.p->fragid[0] == fragId && lastAttr ||
       ERROR_INSERTED(4011) && regTabPtr.p->fragid[1] == fragId && attrId == 0||
       ERROR_INSERTED(4012) && regTabPtr.p->fragid[1] == fragId && lastAttr) {
-    ljam();
+    jam();
     terrorCode = 1;
     addattrrefuseLab(signal, regFragPtr, fragOperPtr, regTabPtr.p, fragId);
     CLEAR_ERROR_INSERT_VALUE;
@@ -470,7 +468,7 @@
 /* **************          TUP_ADD_ATTCONF       ****************** */
 /* **************************************************************** */
   if (! lastAttr) {
-    ljam();
+    jam();
     signal->theData[0] = fragOperPtr.p->lqhPtrFrag;
     signal->theData[1] = lastAttr;
     sendSignal(fragOperPtr.p->lqhBlockrefFrag, GSN_TUP_ADD_ATTCONF, 
@@ -530,7 +528,7 @@
     noAllocatedPages = allocFragPages(regFragPtr.p, noAllocatedPages);
 
     if (noAllocatedPages == 0) {
-      ljam();
+      jam();
       terrorCode = ZNO_PAGES_ALLOCATED_ERROR;
       addattrrefuseLab(signal, regFragPtr, fragOperPtr, regTabPtr.p, fragId);
       return;
@@ -540,7 +538,7 @@
   CreateFilegroupImplReq rep;
   if(regTabPtr.p->m_no_of_disk_attributes)
   {
-    ljam();
+    jam();
     Tablespace_client tsman(0, c_tsman, 0, 0, 
 			    regFragPtr.p->m_tablespace_id);
     ndbrequire(tsman.get_tablespace_info(&rep) == 0);
@@ -557,12 +555,12 @@
   
   if (regTabPtr.p->m_no_of_disk_attributes)
   {
-    ljam();
+    jam();
     if(!(getNodeState().startLevel == NodeState::SL_STARTING && 
 	 getNodeState().starting.startPhase <= 4))
     {
       Callback cb;
-      ljam();
+      jam();
 
       cb.m_callbackData= fragOperPtr.i;
       cb.m_callbackFunction = 
@@ -576,7 +574,7 @@
       int res= lgman.get_log_buffer(signal, sz, &cb);
       switch(res){
       case 0:
-        ljam();
+        jam();
 	signal->theData[0] = 1;
 	return;
       case -1:
@@ -1242,11 +1240,11 @@
   Uint32* keyArray= &tableDescriptor[regTabPtr->readKeyArray].tabDescr;
   Uint32 countKeyAttr= 0;
   for (Uint32 i= 0; i < regTabPtr->m_no_of_attributes; i++) {
-    ljam();
+    jam();
     Uint32 refAttr= regTabPtr->tabDescriptor + (i * ZAD_SIZE);
     Uint32 attrDescriptor= getTabDescrWord(refAttr);
     if (AttributeDescriptor::getPrimaryKey(attrDescriptor)) {
-      ljam();
+      jam();
       AttributeHeader::init(&keyArray[countKeyAttr], i, 0);
       countKeyAttr++;
     }
@@ -1268,7 +1266,7 @@
   {
     for (Uint32 i= 0; i < regTabPtr->m_no_of_attributes; i++) 
     {
-      ljam();
+      jam();
       Uint32 refAttr= regTabPtr->tabDescriptor + (i * ZAD_SIZE);
       Uint32 desc = getTabDescrWord(refAttr);
       Uint32 t = 0;
@@ -1391,9 +1389,9 @@
 void Dbtup::deleteFragTab(Tablerec* const regTabPtr, Uint32 fragId) 
 {
   for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
-    ljam();
+    jam();
     if (regTabPtr->fragid[i] == fragId) {
-      ljam();
+      jam();
       regTabPtr->fragid[i]= RNIL;
       regTabPtr->fragrec[i]= RNIL;
       return;
@@ -1419,7 +1417,7 @@
 void
 Dbtup::execDROP_TAB_REQ(Signal* signal)
 {
-  ljamEntry();
+  jamEntry();
   if (ERROR_INSERTED(4013)) {
 #ifdef VM_TRACE
     verifytabdes();
@@ -1445,7 +1443,7 @@
 {
   Uint32 descriptor= regTabPtr->readKeyArray;
   if (descriptor != RNIL) {
-    ljam();
+    jam();
     Uint32 offset[10];
     getTabDescrOffsets(regTabPtr->m_no_of_attributes,
                        regTabPtr->noOfCharsets,
@@ -1494,16 +1492,16 @@
   Uint32 fragId = RNIL;
   Uint32 i = 0;
   for (i = 0; i < MAX_FRAG_PER_NODE; i++) {
-    ljam();
+    jam();
     if (tabPtr.p->fragid[i] != RNIL) {
-      ljam();
+      jam();
       fragIndex= tabPtr.p->fragrec[i];
       fragId= tabPtr.p->fragid[i];
       break;
     }
   }
   if (fragIndex != RNIL) {
-    ljam();
+    jam();
     
     signal->theData[0] = ZUNMAP_PAGES;
     signal->theData[1] = tabPtr.i;
@@ -1528,7 +1526,7 @@
     int res= lgman.get_log_buffer(signal, sz, &cb);
     switch(res){
     case 0:
-      ljam();
+      jam();
       return;
     case -1:
       ndbrequire("NOT YET IMPLEMENTED" == 0);
@@ -1659,7 +1657,7 @@
 	int res= lgman.get_log_buffer(signal, sz, &cb);
 	switch(res){
 	case 0:
-	  ljam();
+	  jam();
 	  return;
 	case -1:
 	  ndbrequire("NOT YET IMPLEMENTED" == 0);
@@ -1810,7 +1808,7 @@
 void
 Dbtup::drop_fragment_free_var_pages(Signal* signal)
 {
-  ljam();
+  jam();
   Uint32 tableId = signal->theData[1];
   Uint32 fragPtrI = signal->theData[2];
   

--- 1.32/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp	2007-03-18 18:21:31 +01:00
+++ 1.33/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp	2007-03-18 18:21:31 +01:00
@@ -15,6 +15,7 @@
 
 
 #define DBTUP_C
+#define DBTUP_ROUTINES_CPP
 #include "Dbtup.hpp"
 #include <RefConvert.hpp>
 #include <ndb_limits.h>
@@ -23,9 +24,6 @@
 #include "AttributeOffset.hpp"
 #include <AttributeHeader.hpp>
 
-#define ljam() { jamLine(3000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(3000 + __LINE__); }
-
 void
 Dbtup::setUpQueryRoutines(Tablerec *regTabPtr)
 {
@@ -40,23 +38,23 @@
       if (AttributeDescriptor::getArrayType(attrDescr) == NDB_ARRAYTYPE_FIXED){
         if (!AttributeDescriptor::getNullable(attrDescr)) {
           if (AttributeDescriptor::getSize(attrDescr) == 0){
-            ljam(); 
+            jam(); 
             regTabPtr->readFunctionArray[i] = &Dbtup::readBitsNotNULL;
             regTabPtr->updateFunctionArray[i] = &Dbtup::updateBitsNotNULL;
           } else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 4) {
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i]=
 	      &Dbtup::readFixedSizeTHOneWordNotNULL;
             regTabPtr->updateFunctionArray[i]=
 	      &Dbtup::updateFixedSizeTHOneWordNotNULL;
           } else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 8) {
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i]=
                     &Dbtup::readFixedSizeTHTwoWordNotNULL;
             regTabPtr->updateFunctionArray[i]=
                     &Dbtup::updateFixedSizeTHTwoWordNotNULL;
           } else {
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i]=
 	      &Dbtup::readFixedSizeTHManyWordNotNULL;
             regTabPtr->updateFunctionArray[i]=
@@ -64,27 +62,27 @@
           }
           // replace functions for char attribute
           if (AttributeOffset::getCharsetFlag(attrOffset)) {
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHManyWordNotNULL;
             regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNotNULL;
           }
         } else {
 	  if (AttributeDescriptor::getSize(attrDescr) == 0){
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i] = &Dbtup::readBitsNULLable;
             regTabPtr->updateFunctionArray[i] = &Dbtup::updateBitsNULLable;
 	  } else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 4){
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHOneWordNULLable;
             regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNULLable;
           } else if (AttributeDescriptor::getSizeInBytes(attrDescr) == 8) {
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i]=
                     &Dbtup::readFixedSizeTHTwoWordNULLable;
             regTabPtr->updateFunctionArray[i]=
                     &Dbtup::updateFixedSizeTHManyWordNULLable;
           } else {
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i]=
 	      &Dbtup::readFixedSizeTHManyWordNULLable;
             regTabPtr->updateFunctionArray[i]=
@@ -92,7 +90,7 @@
           }
           // replace functions for char attribute
           if (AttributeOffset::getCharsetFlag(attrOffset)) {
-            ljam();
+            jam();
             regTabPtr->readFunctionArray[i] = &Dbtup::readFixedSizeTHManyWordNULLable;
             regTabPtr->updateFunctionArray[i] = &Dbtup::updateFixedSizeTHManyWordNULLable;
           }
@@ -254,7 +252,7 @@
     inBufIndex++;
     attributeId= ahIn.getAttributeId();
     descr_index= attributeId << ZAD_LOG_SIZE;
-    ljam();
+    jam();
 
     AttributeHeader::init(&outBuffer[tmpAttrBufIndex], attributeId, 0);
     ahOut= (AttributeHeader*)&outBuffer[tmpAttrBufIndex];
@@ -273,7 +271,7 @@
         return -1;
       }
     } else if(attributeId & AttributeHeader::PSEUDO) {
-      ljam();
+      jam();
       Uint32 sz= read_pseudo(attributeId,
                              req_struct,
 			     outBuffer+tmpAttrBufIndex+1);
@@ -302,13 +300,13 @@
 
   ndbrequire(readOffset < req_struct->check_offset[MM]);
   if (newIndexBuf <= maxRead) {
-    ljam();
+    jam();
     outBuffer[indexBuf]= wordRead;
     ahOut->setDataSize(1);
     req_struct->out_buf_index= newIndexBuf;
     return true;
   } else {
-    ljam();
+    jam();
     terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
     return false;
   }
@@ -330,14 +328,14 @@
 
   ndbrequire(readOffset + 1 < req_struct->check_offset[MM]);
   if (newIndexBuf <= maxRead) {
-    ljam();
+    jam();
     ahOut->setDataSize(2);
     outBuffer[indexBuf]= wordReadFirst;
     outBuffer[indexBuf + 1]= wordReadSecond;
     req_struct->out_buf_index= newIndexBuf;
     return true;
   } else {
-    ljam();
+    jam();
     terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
     return false;
   }
@@ -361,7 +359,7 @@
   if (! charsetFlag || ! req_struct->xfrm_flag) {
     Uint32 newIndexBuf = indexBuf + attrNoOfWords;
     if (newIndexBuf <= maxRead) {
-      ljam();
+      jam();
       ahOut->setByteSize(AttributeDescriptor::getSizeInBytes(attrDescriptor));
       MEMCOPY_NO_WORDS(&outBuffer[indexBuf],
                        &tuple_header[readOffset],
@@ -369,11 +367,11 @@
       req_struct->out_buf_index = newIndexBuf;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
     }//if
   } else {
-    ljam();
+    jam();
     Tablerec* regTabPtr = tabptr.p;
     Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
     uchar* dstPtr = (uchar*)&outBuffer[indexBuf];
@@ -390,7 +388,7 @@
     Uint32 dstLen = xmul * (srcBytes - lb);
     Uint32 maxIndexBuf = indexBuf + (dstLen >> 2);
     if (maxIndexBuf <= maxRead && ok) {
-      ljam();
+      jam();
       int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
       ndbrequire(n != -1);
       int m = n;
@@ -403,7 +401,7 @@
       req_struct->out_buf_index = newIndexBuf;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
     }
   } 
@@ -417,13 +415,13 @@
                                       Uint32  attrDes2)
 {
   if (!nullFlagCheck(req_struct, attrDes2)) {
-    ljam();
+    jam();
     return readFixedSizeTHOneWordNotNULL(outBuffer,
                                          req_struct,
                                          ahOut,
                                          attrDes2);
   } else {
-    ljam();
+    jam();
     ahOut->setNULL();
     return true;
   }
@@ -436,13 +434,13 @@
                                       Uint32  attrDes2)
 {
   if (!nullFlagCheck(req_struct, attrDes2)) {
-    ljam();
+    jam();
     return readFixedSizeTHTwoWordNotNULL(outBuffer,
                                          req_struct,
                                          ahOut,
                                          attrDes2);
   } else {
-    ljam();
+    jam();
     ahOut->setNULL();
     return true;
   }
@@ -455,13 +453,13 @@
                                        Uint32  attrDes2)
 {
   if (!nullFlagCheck(req_struct, attrDes2)) {
-    ljam();
+    jam();
     return readFixedSizeTHManyWordNotNULL(outBuffer,
                                           req_struct,
                                           ahOut,
                                           attrDes2);
   } else {
-    ljam();
+    jam();
     ahOut->setNULL();
     return true;
   }
@@ -473,9 +471,9 @@
                                        AttributeHeader* ahOut,
                                        Uint32  attrDes2)
 {
-  ljam();
+  jam();
   if (nullFlagCheck(req_struct, attrDes2)) {
-    ljam();
+    jam();
     ahOut->setNULL();
   }
   return true;
@@ -526,7 +524,7 @@
   if (! charsetFlag || ! req_struct->xfrm_flag)
   {
     if (new_index <= max_read) {
-      ljam();
+      jam();
       ah_out->setByteSize(vsize_in_bytes);
       out_buffer[index_buf + (vsize_in_bytes >> 2)] = 0;
       memcpy(out_buffer+index_buf, src_ptr, vsize_in_bytes);
@@ -536,7 +534,7 @@
   }
   else
   {
-    ljam();
+    jam();
     Tablerec* regTabPtr = tabptr.p;
     Uint32 maxBytes = AttributeDescriptor::getSizeInBytes(attr_descriptor);
     Uint32 srcBytes = vsize_in_bytes;
@@ -555,7 +553,7 @@
     Uint32 dstLen = xmul * (maxBytes - lb);
     Uint32 maxIndexBuf = index_buf + (dstLen >> 2);
     if (maxIndexBuf <= max_read && ok) {
-      ljam();
+      jam();
       int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
       ndbrequire(n != -1);
       int m = n;
@@ -569,7 +567,7 @@
       return true;
     }
   }
-  ljam();
+  jam();
   terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
   return false;
 }
@@ -603,13 +601,13 @@
                            Uint32  attrDes2)
 {
   if (!nullFlagCheck(req_struct, attrDes2)) {
-    ljam();
+    jam();
     return readVarSizeNotNULL(outBuffer,
                               req_struct,
                               ahOut,
                               attrDes2);
   } else {
-    ljam();
+    jam();
     ahOut->setNULL();
     return true;
   }
@@ -621,7 +619,7 @@
                                AttributeHeader* ahOut,
                                Uint32  attrDes2)
 {
-  ljam();
+  jam();
   if(req_struct->is_expanded)
     return readDynFixedSizeExpandedNotNULL(outBuffer, req_struct,
                                            ahOut, attrDes2);
@@ -636,7 +634,7 @@
                                 AttributeHeader* ahOut,
                                 Uint32  attrDes2)
 {
-  ljam();
+  jam();
   if(req_struct->is_expanded)
     return readDynFixedSizeExpandedNULLable(outBuffer, req_struct,
                                             ahOut, attrDes2);
@@ -1342,7 +1340,7 @@
   if (! charsetFlag || ! req_struct->xfrm_flag) {
     Uint32 newIndexBuf = indexBuf + attrNoOfWords;
     if (newIndexBuf <= maxRead) {
-      ljam();
+      jam();
       ahOut->setByteSize(AttributeDescriptor::getSizeInBytes(attrDescriptor));
       MEMCOPY_NO_WORDS(&outBuffer[indexBuf],
                        &tuple_header[readOffset],
@@ -1350,11 +1348,11 @@
       req_struct->out_buf_index = newIndexBuf;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
     }//if
   } else {
-    ljam();
+    jam();
     Tablerec* regTabPtr = tabptr.p;
     Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
     uchar* dstPtr = (uchar*)&outBuffer[indexBuf];
@@ -1371,7 +1369,7 @@
     Uint32 dstLen = xmul * (srcBytes - lb);
     Uint32 maxIndexBuf = indexBuf + (dstLen >> 2);
     if (maxIndexBuf <= maxRead && ok) {
-      ljam();
+      jam();
       int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
       ndbrequire(n != -1);
       int m = n;
@@ -1384,7 +1382,7 @@
       req_struct->out_buf_index = newIndexBuf;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
     }
   } 
@@ -1398,13 +1396,13 @@
 				 Uint32  attrDes2)
 {
   if (!disk_nullFlagCheck(req_struct, attrDes2)) {
-    ljam();
+    jam();
     return readDiskFixedSizeNotNULL(outBuffer,
 				    req_struct,
 				    ahOut,
 				    attrDes2);
   } else {
-    ljam();
+    jam();
     ahOut->setNULL();
     return true;
   }
@@ -1433,7 +1431,7 @@
 
   ndbrequire(vsize_in_words <= max_var_size);
   if (new_index <= max_read) {
-    ljam();
+    jam();
     ah_out->setByteSize(vsize_in_bytes);
     memcpy(out_buffer+index_buf,
 	   req_struct->m_var_data[DD].m_data_ptr+var_attr_pos,
@@ -1441,7 +1439,7 @@
     req_struct->out_buf_index= new_index;
     return true;
   } else {
-    ljam();
+    jam();
     terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
     return false;
   }
@@ -1454,13 +1452,13 @@
 			       Uint32  attrDes2)
 {
   if (!disk_nullFlagCheck(req_struct, attrDes2)) {
-    ljam();
+    jam();
     return readDiskVarSizeNotNULL(outBuffer,
 				  req_struct,
 				  ahOut,
 				  attrDes2);
   } else {
-    ljam();
+    jam();
     ahOut->setNULL();
     return true;
   }
@@ -1502,13 +1500,13 @@
         if (checkUpdateOfPrimaryKey(req_struct,
                                     &inBuffer[inBufIndex],
                                     regTabPtr)) {
-          ljam();
+          jam();
           terrorCode= ZTRY_UPDATE_PRIMARY_KEY;
           return -1;
         }
       }
       UpdateFunction f= regTabPtr->updateFunctionArray[attributeId];
-      ljam();
+      jam();
       req_struct->attr_descriptor= attrDescriptor;
       req_struct->changeMask.set(attributeId);
       if (attributeId >= 64) {
@@ -1524,13 +1522,13 @@
         inBufIndex= req_struct->in_buf_index;
         continue;
       } else {
-        ljam();
+        jam();
         return -1;
       }
     } 
     else if(attributeId == AttributeHeader::DISK_REF)
     {
-      ljam();
+      jam();
       Uint32 sz= ahIn.getDataSize();
       ndbrequire(sz == 2);
       req_struct->m_tuple_ptr->m_header_bits |= Tuple_header::DISK_PART;
@@ -1541,7 +1539,7 @@
     }
     else
     {
-      ljam();
+      jam();
       terrorCode= ZATTRIBUTE_ID_ERROR;
       return -1;
     }
@@ -1595,13 +1593,13 @@
   
   ndbrequire(req_struct->out_buf_index == ahOut->getDataSize());
   if (ahIn.getDataSize() != ahOut->getDataSize()) {
-    ljam();
+    jam();
     return true;
   }
   if (memcmp(&keyReadBuffer[0],
              &updateBuffer[1],
              req_struct->out_buf_index << 2) != 0) {
-    ljam();
+    jam();
     return true;
   }
   return false;
@@ -1624,17 +1622,17 @@
   if (newIndex <= inBufLen) {
     Uint32 updateWord= inBuffer[indexBuf + 1];
     if (!nullIndicator) {
-      ljam();
+      jam();
       req_struct->in_buf_index= newIndex;
       tuple_header[updateOffset]= updateWord;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZNOT_NULL_ATTR;
       return false;
     }
   } else {
-    ljam();
+    jam();
     terrorCode= ZAI_INCONSISTENCY_ERROR;
     return false;
   }
@@ -1659,18 +1657,18 @@
     Uint32 updateWord1= inBuffer[indexBuf + 1];
     Uint32 updateWord2= inBuffer[indexBuf + 2];
     if (!nullIndicator) {
-      ljam();
+      jam();
       req_struct->in_buf_index= newIndex;
       tuple_header[updateOffset]= updateWord1;
       tuple_header[updateOffset + 1]= updateWord2;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZNOT_NULL_ATTR;
       return false;
     }
   } else {
-    ljam();
+    jam();
     terrorCode= ZAI_INCONSISTENCY_ERROR;
     return false;
   }
@@ -1697,9 +1695,9 @@
 
   if (newIndex <= inBufLen) {
     if (!nullIndicator) {
-      ljam();
+      jam();
       if (charsetFlag) {
-        ljam();
+        jam();
         Tablerec* regTabPtr = tabptr.p;
 	Uint32 typeId = AttributeDescriptor::getType(attrDescriptor);
         Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
@@ -1711,14 +1709,14 @@
         const char* ssrc = (const char*)&inBuffer[indexBuf + 1];
         Uint32 lb, len;
         if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) {
-          ljam();
+          jam();
           terrorCode = ZINVALID_CHAR_FORMAT;
           return false;
         }
 	// fast fix bug#7340
         if (typeId != NDB_TYPE_TEXT &&
 	    (*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, &not_used) != len) {
-          ljam();
+          jam();
           terrorCode = ZINVALID_CHAR_FORMAT;
           return false;
         }
@@ -1730,12 +1728,12 @@
       
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZNOT_NULL_ATTR;
       return false;
     }
   } else {
-    ljam();
+    jam();
     terrorCode= ZAI_INCONSISTENCY_ERROR;
     return false;
   }
@@ -1765,7 +1763,7 @@
   Uint32 *bits= req_struct->m_tuple_ptr->get_null_bits(regTabPtr);
   
   if (!nullIndicator) {
-    ljam();
+    jam();
     BitmaskImpl::clear(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
     return updateFixedSizeTHManyWordNotNULL(inBuffer,
                                             req_struct,
@@ -1774,11 +1772,11 @@
     Uint32 newIndex= req_struct->in_buf_index + 1;
     if (newIndex <= req_struct->in_buf_len) {
       BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
-      ljam();
+      jam();
       req_struct->in_buf_index= newIndex;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZAI_INCONSISTENCY_ERROR;
       return false;
     }
@@ -1824,7 +1822,7 @@
   
   if (new_index <= in_buf_len && vsize_in_words <= max_var_size) {
     if (!null_ind) {
-      ljam();
+      jam();
       *len_offset_ptr= var_attr_pos+size_in_bytes;
       req_struct->in_buf_index= new_index;
       
@@ -1834,7 +1832,7 @@
       return true;
     }
 
-    ljam();
+    jam();
     terrorCode= ZNOT_NULL_ATTR;
     return false;
   }
@@ -1857,7 +1855,7 @@
   Uint32 idx= req_struct->m_var_data[MM].m_var_len_offset;
   
   if (!nullIndicator) {
-    ljam();
+    jam();
     BitmaskImpl::clear(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
     return updateVarSizeNotNULL(inBuffer,
                                 req_struct,
@@ -1867,13 +1865,13 @@
     Uint32 var_index= AttributeOffset::getOffset(attrDes2);
     Uint32 var_pos= req_struct->var_pos_array[var_index];
     if (newIndex <= req_struct->in_buf_len) {
-      ljam();
+      jam();
       BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
       req_struct->var_pos_array[var_index+idx]= var_pos;
       req_struct->in_buf_index= newIndex;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZAI_INCONSISTENCY_ERROR;
       return false;
     }
@@ -2248,7 +2246,7 @@
   Uint32 maxRead = req_struct->max_read;
   Uint32 *bits= req_struct->m_tuple_ptr->get_null_bits(regTabPtr);
   if (newIndexBuf <= maxRead) {
-    ljam();
+    jam();
     ahOut->setDataSize((bitCount + 31) >> 5);
     req_struct->out_buf_index = newIndexBuf;
     
@@ -2257,7 +2255,7 @@
     
     return true;
   } else {
-    ljam();
+    jam();
     terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
     return false;
   }//if
@@ -2281,20 +2279,20 @@
   
   if(BitmaskImpl::get(regTabPtr->m_offsets[MM].m_null_words, bits, pos))
   {
-    ljam();
+    jam();
     ahOut->setNULL();
     return true;
   }
 
   if (newIndexBuf <= maxRead) {
-    ljam();
+    jam();
     ahOut->setDataSize((bitCount + 31) >> 5);
     req_struct->out_buf_index = newIndexBuf;
     BitmaskImpl::getField(regTabPtr->m_offsets[MM].m_null_words, bits, pos+1, 
 			  bitCount, outBuffer+indexBuf);
     return true;
   } else {
-    ljam();
+    jam();
     terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
     return false;
   }//if
@@ -2323,12 +2321,12 @@
       req_struct->in_buf_index = newIndex;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode = ZNOT_NULL_ATTR;
       return false;
     }//if
   } else {
-    ljam();
+    jam();
     terrorCode = ZAI_INCONSISTENCY_ERROR;
     return false;
   }//if
@@ -2361,13 +2359,13 @@
     Uint32 newIndex = indexBuf + 1;
     if (newIndex <= req_struct->in_buf_len)
     {
-      ljam();
+      jam();
       BitmaskImpl::set(regTabPtr->m_offsets[MM].m_null_words, bits, pos);
       
       req_struct->in_buf_index = newIndex;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode = ZAI_INCONSISTENCY_ERROR;
       return false;
     }//if
@@ -2394,9 +2392,9 @@
 
   if (newIndex <= inBufLen) {
     if (!nullIndicator) {
-      ljam();
+      jam();
       if (charsetFlag) {
-        ljam();
+        jam();
         Tablerec* regTabPtr = tabptr.p;
 	Uint32 typeId = AttributeDescriptor::getType(attrDescriptor);
         Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
@@ -2408,14 +2406,14 @@
         const char* ssrc = (const char*)&inBuffer[indexBuf + 1];
         Uint32 lb, len;
         if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) {
-          ljam();
+          jam();
           terrorCode = ZINVALID_CHAR_FORMAT;
           return false;
         }
 	// fast fix bug#7340
         if (typeId != NDB_TYPE_TEXT &&
 	    (*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, &not_used) != len) {
-          ljam();
+          jam();
           terrorCode = ZINVALID_CHAR_FORMAT;
           return false;
         }
@@ -2426,12 +2424,12 @@
                        noOfWords);
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZNOT_NULL_ATTR;
       return false;
     }
   } else {
-    ljam();
+    jam();
     terrorCode= ZAI_INCONSISTENCY_ERROR;
     return false;
   }
@@ -2449,7 +2447,7 @@
   Uint32 *bits= req_struct->m_disk_ptr->get_null_bits(regTabPtr, DD);
   
   if (!nullIndicator) {
-    ljam();
+    jam();
     BitmaskImpl::clear(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
     return updateDiskFixedSizeNotNULL(inBuffer,
 				      req_struct,
@@ -2458,11 +2456,11 @@
     Uint32 newIndex= req_struct->in_buf_index + 1;
     if (newIndex <= req_struct->in_buf_len) {
       BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
-      ljam();
+      jam();
       req_struct->in_buf_index= newIndex;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZAI_INCONSISTENCY_ERROR;
       return false;
     }
@@ -2496,7 +2494,7 @@
   
   if (new_index <= in_buf_len && vsize_in_words <= max_var_size) {
     if (!null_ind) {
-      ljam();
+      jam();
       var_attr_pos= vpos_array[var_index];
       var_data_start= req_struct->m_var_data[DD].m_data_ptr;
       vpos_array[var_index+idx]= var_attr_pos+size_in_bytes;
@@ -2507,12 +2505,12 @@
 	     size_in_bytes);
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZNOT_NULL_ATTR;
       return false;
     }
   } else {
-    ljam();
+    jam();
     terrorCode= ZAI_INCONSISTENCY_ERROR;
     return false;
   }
@@ -2532,7 +2530,7 @@
   Uint32 idx= req_struct->m_var_data[DD].m_var_len_offset;
   
   if (!nullIndicator) {
-    ljam();
+    jam();
     BitmaskImpl::clear(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
     return updateDiskVarSizeNotNULL(inBuffer,
 				    req_struct,
@@ -2542,13 +2540,13 @@
     Uint32 var_index= AttributeOffset::getOffset(attrDes2);
     Uint32 var_pos= req_struct->var_pos_array[var_index];
     if (newIndex <= req_struct->in_buf_len) {
-      ljam();
+      jam();
       BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
       req_struct->var_pos_array[var_index+idx]= var_pos;
       req_struct->in_buf_index= newIndex;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode= ZAI_INCONSISTENCY_ERROR;
       return false;
     }
@@ -2570,7 +2568,7 @@
   Uint32 maxRead = req_struct->max_read;
   Uint32 *bits= req_struct->m_disk_ptr->get_null_bits(regTabPtr, DD);
   if (newIndexBuf <= maxRead) {
-    ljam();
+    jam();
     ahOut->setDataSize((bitCount + 31) >> 5);
     req_struct->out_buf_index = newIndexBuf;
     
@@ -2579,7 +2577,7 @@
     
     return true;
   } else {
-    ljam();
+    jam();
     terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
     return false;
   }//if
@@ -2603,20 +2601,20 @@
   
   if(BitmaskImpl::get(regTabPtr->m_offsets[DD].m_null_words, bits, pos))
   {
-    ljam();
+    jam();
     ahOut->setNULL();
     return true;
   }
 
   if (newIndexBuf <= maxRead) {
-    ljam();
+    jam();
     ahOut->setDataSize((bitCount + 31) >> 5);
     req_struct->out_buf_index = newIndexBuf;
     BitmaskImpl::getField(regTabPtr->m_offsets[DD].m_null_words, bits, pos+1, 
 			  bitCount, outBuffer+indexBuf);
     return true;
   } else {
-    ljam();
+    jam();
     terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR;
     return false;
   }//if
@@ -2645,12 +2643,12 @@
       req_struct->in_buf_index = newIndex;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode = ZNOT_NULL_ATTR;
       return false;
     }//if
   } else {
-    ljam();
+    jam();
     terrorCode = ZAI_INCONSISTENCY_ERROR;
     return false;
   }//if
@@ -2683,13 +2681,13 @@
     Uint32 newIndex = indexBuf + 1;
     if (newIndex <= req_struct->in_buf_len)
     {
-      ljam();
+      jam();
       BitmaskImpl::set(regTabPtr->m_offsets[DD].m_null_words, bits, pos);
       
       req_struct->in_buf_index = newIndex;
       return true;
     } else {
-      ljam();
+      jam();
       terrorCode = ZAI_INCONSISTENCY_ERROR;
       return false;
     }//if

--- 1.7/storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp	2007-03-18 18:21:31 +01:00
+++ 1.8/storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp	2007-03-18 18:21:31 +01:00
@@ -15,14 +15,12 @@
 
 
 #define DBTUP_C
+#define DBTUP_TAB_DES_MAN_CPP
 #include "Dbtup.hpp"
 #include <RefConvert.hpp>
 #include <ndb_limits.h>
 #include <pc.hpp>
 
-#define ljam() { jamLine(22000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(22000 + __LINE__); }
-
 /*
  * TABLE DESCRIPTOR MEMORY MANAGER
  *
@@ -78,30 +76,30 @@
   allocSize = (((allocSize - 1) >> 4) + 1) << 4;
   Uint32 list = nextHigherTwoLog(allocSize - 1);	/* CALCULATE WHICH LIST IT BELONGS TO     */
   for (Uint32 i = list; i < 16; i++) {
-    ljam();
+    jam();
     if (cfreeTdList[i] != RNIL) {
-      ljam();
+      jam();
       reference = cfreeTdList[i];
       removeTdArea(reference, i);	                /* REMOVE THE AREA FROM THE FREELIST      */
       Uint32 retNo = (1 << i) - allocSize;	        /* CALCULATE THE DIFFERENCE               */
       if (retNo >= ZTD_FREE_SIZE) {
-        ljam();
+        jam();
         // return unused words, of course without attempting left merge
         Uint32 retRef = reference + allocSize;
         freeTabDescr(retRef, retNo, false);
       } else {
-        ljam();
+        jam();
         allocSize = 1 << i;
       }//if
       break;
     }//if
   }//for
   if (reference == RNIL) {
-    ljam();
+    jam();
     terrorCode = ZMEM_NOTABDESCR_ERROR;
     return RNIL;
   } else {
-    ljam();
+    jam();
     setTabDescrWord((reference + allocSize) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL);
     setTabDescrWord(reference + ZTD_DATASIZE, allocSize);
 
@@ -118,7 +116,7 @@
 {
   itdaMergeTabDescr(retRef, retNo, normal);       /* MERGE WITH POSSIBLE NEIGHBOURS   */
   while (retNo >= ZTD_FREE_SIZE) {
-    ljam();
+    jam();
     Uint32 list = nextHigherTwoLog(retNo);
     list--;	/* RETURN TO NEXT LOWER LIST    */
     Uint32 sizeOfChunk = 1 << list;
@@ -149,7 +147,7 @@
   setTabDescrWord(tabDesRef + ZTD_FL_HEADER, ZTD_TYPE_FREE);
   setTabDescrWord(tabDesRef + ZTD_FL_NEXT, cfreeTdList[list]);
   if (cfreeTdList[list] != RNIL) {
-    ljam();                                                /* PREVIOUSLY EMPTY SLOT     */
+    jam();                                                /* PREVIOUSLY EMPTY SLOT     */
     setTabDescrWord(cfreeTdList[list] + ZTD_FL_PREV, tabDesRef);
   }//if
   cfreeTdList[list] = tabDesRef;	/* RELINK THE LIST           */
@@ -169,28 +167,28 @@
 {
   // merge right
   while ((retRef + retNo) < cnoOfTabDescrRec) {
-    ljam();
+    jam();
     Uint32 tabDesRef = retRef + retNo;
     Uint32 headerWord = getTabDescrWord(tabDesRef + ZTD_FL_HEADER);
     if (headerWord == ZTD_TYPE_FREE) {
-      ljam();
+      jam();
       Uint32 sizeOfMergedPart = getTabDescrWord(tabDesRef + ZTD_FL_SIZE);
 
       retNo += sizeOfMergedPart;
       Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1);
       removeTdArea(tabDesRef, list);
     } else {
-      ljam();
+      jam();
       break;
     }
   }
   // merge left
   const bool mergeLeft = normal;
   while (mergeLeft && retRef > 0) {
-    ljam();
+    jam();
     Uint32 trailerWord = getTabDescrWord(retRef - ZTD_TR_TYPE);
     if (trailerWord == ZTD_TYPE_FREE) {
-      ljam();
+      jam();
       Uint32 sizeOfMergedPart = getTabDescrWord(retRef - ZTD_TR_SIZE);
       ndbrequire(retRef >= sizeOfMergedPart);
       retRef -= sizeOfMergedPart;
@@ -198,7 +196,7 @@
       Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1);
       removeTdArea(retRef, list);
     } else {
-      ljam();
+      jam();
       break;
     }
   }
@@ -226,15 +224,15 @@
   setTabDescrWord((tabDesRef + (1 << list)) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL);
 
   if (tabDesRef == cfreeTdList[list]) {
-    ljam();
+    jam();
     cfreeTdList[list] = tabDescrNextPtr;	/* RELINK THE LIST           */
   }//if
   if (tabDescrNextPtr != RNIL) {
-    ljam();
+    jam();
     setTabDescrWord(tabDescrNextPtr + ZTD_FL_PREV, tabDescrPrevPtr);
   }//if
   if (tabDescrPrevPtr != RNIL) {
-    ljam();
+    jam();
     setTabDescrWord(tabDescrPrevPtr + ZTD_FL_NEXT, tabDescrNextPtr);
   }//if
 }//Dbtup::removeTdArea()

--- 1.27/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	2007-03-18 18:21:31 +01:00
+++ 1.28/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	2007-03-18 18:21:31 +01:00
@@ -15,6 +15,7 @@
 
 
 #define DBTUP_C
+#define DBTUP_TRIGGER_CPP
 #include "Dbtup.hpp"
 #include <RefConvert.hpp>
 #include <ndb_limits.h>
@@ -26,9 +27,6 @@
 #include <signaldata/CreateTrig.hpp>
 #include <signaldata/TuxMaint.hpp>
 
-#define ljam() { jamLine(7000 + __LINE__); }
-#define ljamEntry() { jamEntryLine(7000 + __LINE__); }
-
 /* **************************************************************** */
 /* ---------------------------------------------------------------- */
 /* ----------------------- TRIGGER HANDLING ----------------------- */
@@ -47,17 +45,17 @@
   case TriggerType::SUBSCRIPTION_BEFORE:
     switch (tevent) {
     case TriggerEvent::TE_INSERT:
-      ljam();
+      jam();
       if (ttime == TriggerActionTime::TA_DETACHED)
         tlist = &table->subscriptionInsertTriggers;
       break;
     case TriggerEvent::TE_UPDATE:
-      ljam();
+      jam();
       if (ttime == TriggerActionTime::TA_DETACHED)
         tlist = &table->subscriptionUpdateTriggers;
       break;
     case TriggerEvent::TE_DELETE:
-      ljam();
+      jam();
       if (ttime == TriggerActionTime::TA_DETACHED)
         tlist = &table->subscriptionDeleteTriggers;
       break;
@@ -68,17 +66,17 @@
   case TriggerType::SECONDARY_INDEX:
     switch (tevent) {
     case TriggerEvent::TE_INSERT:
-      ljam();
+      jam();
       if (ttime == TriggerActionTime::TA_AFTER)
         tlist = &table->afterInsertTriggers;
       break;
     case TriggerEvent::TE_UPDATE:
-      ljam();
+      jam();
       if (ttime == TriggerActionTime::TA_AFTER)
         tlist = &table->afterUpdateTriggers;
       break;
     case TriggerEvent::TE_DELETE:
-      ljam();
+      jam();
       if (ttime == TriggerActionTime::TA_AFTER)
         tlist = &table->afterDeleteTriggers;
       break;
@@ -89,7 +87,7 @@
   case TriggerType::ORDERED_INDEX:
     switch (tevent) {
     case TriggerEvent::TE_CUSTOM:
-      ljam();
+      jam();
       if (ttime == TriggerActionTime::TA_CUSTOM)
         tlist = &table->tuxCustomTriggers;
       break;
@@ -100,7 +98,7 @@
   case TriggerType::READ_ONLY_CONSTRAINT:
     switch (tevent) {
     case TriggerEvent::TE_UPDATE:
-      ljam();
+      jam();
       if (ttime == TriggerActionTime::TA_AFTER)
         tlist = &table->constraintUpdateTriggers;
       break;
@@ -118,7 +116,7 @@
 void
 Dbtup::execCREATE_TRIG_REQ(Signal* signal)
 {
-  ljamEntry();
+  jamEntry();
   BlockReference senderRef = signal->getSendersBlockRef();
   const CreateTrigReq reqCopy = *(const CreateTrigReq*)signal->getDataPtr();
   const CreateTrigReq* const req = &reqCopy;
@@ -131,13 +129,13 @@
 
   if (tabPtr.p->tableStatus != DEFINED )
   {
-    ljam();
+    jam();
     error= CreateTrigRef::InvalidTable;
   }
   // Create trigger and associate it with the table
   else if (createTrigger(tabPtr.p, req))
   {
-    ljam();
+    jam();
     // Send conf
     CreateTrigConf* const conf = (CreateTrigConf*)signal->getDataPtrSend();
     conf->setUserRef(reference());
@@ -153,7 +151,7 @@
   }
   else
   {
-    ljam();
+    jam();
     error= CreateTrigRef::TooManyTriggers;
   }
   ndbassert(error != CreateTrigRef::NoError);
@@ -174,7 +172,7 @@
 void
 Dbtup::execDROP_TRIG_REQ(Signal* signal)
 {
-  ljamEntry();
+  jamEntry();
   BlockReference senderRef = signal->getSendersBlockRef();
   const DropTrigReq reqCopy = *(const DropTrigReq*)signal->getDataPtr();
   const DropTrigReq* const req = &reqCopy;
@@ -262,7 +260,7 @@
   if ((tptr.p->triggerType == TriggerType::SUBSCRIPTION) &&
       ((tptr.p->triggerEvent == TriggerEvent::TE_UPDATE) ||
        (tptr.p->triggerEvent == TriggerEvent::TE_DELETE))) {
-    ljam();
+    jam();
     tptr.p->sendBeforeValues = false;
   }
   /*
@@ -270,7 +268,7 @@
   if (((tptr.p->triggerType == TriggerType::SUBSCRIPTION) ||
       (tptr.p->triggerType == TriggerType::SUBSCRIPTION_BEFORE)) &&
       (tptr.p->triggerEvent == TriggerEvent::TE_UPDATE)) {
-    ljam();
+    jam();
     tptr.p->sendOnlyChangedAttributes = true;
   }
   */
@@ -282,16 +280,16 @@
 
   tptr.p->attributeMask.clear();
   if (tptr.p->monitorAllAttributes) {
-    ljam();
+    jam();
     for(Uint32 i = 0; i < table->m_no_of_attributes; i++) {
       if (!primaryKey(table, i)) {
-        ljam();
+        jam();
         tptr.p->attributeMask.set(i);
       }
     }
   } else {
     // Set attribute mask
-    ljam();
+    jam();
     tptr.p->attributeMask = req->getAttributeMask();
   }
   return true;
@@ -336,7 +334,7 @@
 
   Ptr<TupTriggerData> ptr;
   for (tlist->first(ptr); !ptr.isNull(); tlist->next(ptr)) {
-    ljam();
+    jam();
     if (ptr.p->triggerId == triggerId) {
       if(ttype==TriggerType::SUBSCRIPTION && sender != ptr.p->m_receiverBlock)
       {
@@ -348,10 +346,10 @@
 	 *
 	 * Backup doesn't really care about the Ids though.
 	 */
-	ljam();
+	jam();
 	continue;
       }
-      ljam();
+      jam();
       tlist->release(ptr.i);
       return 0;
     }
@@ -379,7 +377,7 @@
 
   if ((regOperPtr->op_struct.primary_replica) &&
       (!(regTablePtr->afterInsertTriggers.isEmpty()))) {
-    ljam();
+    jam();
     fireImmediateTriggers(req_struct,
                           regTablePtr->afterInsertTriggers,
                           regOperPtr);
@@ -397,14 +395,14 @@
 
   if ((regOperPtr->op_struct.primary_replica) &&
       (!(regTablePtr->afterUpdateTriggers.isEmpty()))) {
-    ljam();
+    jam();
     fireImmediateTriggers(req_struct,
                           regTablePtr->afterUpdateTriggers,
                           regOperPtr);
   }
   if ((regOperPtr->op_struct.primary_replica) &&
       (!(regTablePtr->constraintUpdateTriggers.isEmpty()))) {
-    ljam();
+    jam();
     fireImmediateTriggers(req_struct,
                           regTablePtr->constraintUpdateTriggers,
                           regOperPtr);
@@ -422,7 +420,7 @@
 
   if ((regOperPtr->op_struct.primary_replica) &&
       (!(regTablePtr->afterDeleteTriggers.isEmpty()))) {
-    ljam();
+    jam();
     executeTriggers(req_struct,
                     regTablePtr->afterDeleteTriggers,
                     regOperPtr);
@@ -443,7 +441,7 @@
                                   Operationrec* const regOperPtr,
                                   Tablerec* const regTablePtr)
 {
-  ljam();
+  jam();
   // NYI
 }//Dbtup::checkDeferredTriggers()
 #endif
@@ -479,7 +477,7 @@
   if (save_ptr->m_header_bits & Tuple_header::ALLOC) {
     if (save_type == ZDELETE) {
       // insert + delete = nothing
-      ljam();
+      jam();
       return;
       goto end;
     }
@@ -495,10 +493,10 @@
   
   switch(regOperPtr->op_struct.op_type) {
   case(ZINSERT):
-    ljam();
+    jam();
     if (regTablePtr->subscriptionInsertTriggers.isEmpty()) {
       // Table has no active triggers monitoring inserts at commit
-      ljam();
+      jam();
       goto end;
     }
 
@@ -508,10 +506,10 @@
                          regOperPtr);
     break;
   case(ZDELETE):
-    ljam();
+    jam();
     if (regTablePtr->subscriptionDeleteTriggers.isEmpty()) {
       // Table has no active triggers monitoring deletes at commit
-      ljam();
+      jam();
       goto end;
     }
 
@@ -522,10 +520,10 @@
 			 regOperPtr);
     break;
   case(ZUPDATE):
-    ljam();
+    jam();
     if (regTablePtr->subscriptionUpdateTriggers.isEmpty()) {
       // Table has no active triggers monitoring updates at commit
-      ljam();
+      jam();
       goto end;
     }
 
@@ -553,10 +551,10 @@
   TriggerPtr trigPtr;
   triggerList.first(trigPtr);
   while (trigPtr.i != RNIL) {
-    ljam();
+    jam();
     if (trigPtr.p->monitorAllAttributes ||
         trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) {
-      ljam();
+      jam();
       executeTrigger(req_struct,
                      trigPtr.p,
                      regOperPtr);
@@ -575,10 +573,10 @@
   TriggerPtr trigPtr;
   triggerList.first(trigPtr);
   while (trigPtr.i != RNIL) {
-    ljam();
+    jam();
     if (trigPtr.p->monitorAllAttributes ||
         trigPtr.p->attributeMask.overlaps(req_struct->changeMask)) {
-      ljam();
+      jam();
       executeTrigger(req_struct,
                      trigPtr,
                      regOperPtr);
@@ -604,12 +602,12 @@
   ndbrequire(regOperPtr->is_first_operation());
   triggerList.first(trigPtr);
   while (trigPtr.i != RNIL) {
-    ljam();
+    jam();
     if ((trigPtr.p->monitorReplicas ||
          regOperPtr->op_struct.primary_replica) &&
         (trigPtr.p->monitorAllAttributes ||
          trigPtr.p->attributeMask.overlaps(req_struct->changeMask))) {
-      ljam();
+      jam();
       executeTrigger(req_struct,
                      trigPtr.p,
                      regOperPtr);
@@ -625,7 +623,7 @@
   TriggerPtr trigPtr;
   triggerList.first(trigPtr);
   while (trigPtr.i != RNIL) {
-    ljam();
+    jam();
     executeTrigger(req_struct,
                    trigPtr.p,
                    regOperPtr);
@@ -675,7 +673,7 @@
   ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord);
 
   if (ref == BACKUP) {
-    ljam();
+    jam();
     /*
     In order for the implementation of BACKUP to work even when changing
     primaries in the middle of the backup we need to set the trigger on
@@ -688,9 +686,9 @@
     signal->theData[0] = trigPtr->triggerId;
     signal->theData[1] = regFragPtr.p->fragmentId;
     EXECUTE_DIRECT(BACKUP, GSN_BACKUP_TRIG_REQ, signal, 2);
-    ljamEntry();
+    jamEntry();
     if (signal->theData[0] == 0) {
-      ljam();
+      jam();
       return;
     }
   }
@@ -704,7 +702,7 @@
                        noAfterWords,
                        beforeBuffer,
                        noBeforeWords)) {
-    ljam();
+    jam();
     return;
   }
 //--------------------------------------------------------------------
@@ -720,13 +718,13 @@
 
   switch(trigPtr->triggerType) {
   case (TriggerType::SECONDARY_INDEX):
-    ljam();
+    jam();
     ref = req_struct->TC_ref;
     executeDirect = false;
     break;
   case (TriggerType::SUBSCRIPTION):
   case (TriggerType::SUBSCRIPTION_BEFORE):
-    ljam();
+    jam();
     // Since only backup uses subscription triggers we send to backup directly for now
     ref = trigPtr->m_receiverBlock;
     executeDirect = true;
@@ -747,22 +745,22 @@
 
   switch(regOperPtr->op_struct.op_type) {
   case(ZINSERT):
-    ljam();
+    jam();
     // Send AttrInfo signals with new attribute values
     trigAttrInfo->setAttrInfoType(TrigAttrInfo::AFTER_VALUES);
     sendTrigAttrInfo(signal, afterBuffer, noAfterWords, executeDirect, ref);
     break;
   case(ZDELETE):
     if (trigPtr->sendBeforeValues) {
-      ljam();
+      jam();
       trigAttrInfo->setAttrInfoType(TrigAttrInfo::BEFORE_VALUES);
       sendTrigAttrInfo(signal, beforeBuffer, noBeforeWords, executeDirect,ref);
     }
     break;
   case(ZUPDATE):
-    ljam();
+    jam();
     if (trigPtr->sendBeforeValues) {
-      ljam();
+      jam();
       trigAttrInfo->setAttrInfoType(TrigAttrInfo::BEFORE_VALUES);
       sendTrigAttrInfo(signal, beforeBuffer, noBeforeWords, executeDirect,ref);
     }
@@ -788,9 +786,9 @@
 {
   Uint32 bufIndx = 0;
   for (Uint32 i = 0; i < m_no_of_attributesibutes; i++) {
-    ljam();
+    jam();
     if (attributeMask.get(i)) {
-      ljam();
+      jam();
       AttributeHeader::init(&inBuffer[bufIndx++], i, 0);
     }
   }
@@ -858,7 +856,7 @@
   Uint32 numAttrsToRead;
   if ((regOperPtr->op_struct.op_type == ZUPDATE) &&
       (trigPtr->sendOnlyChangedAttributes)) {
-    ljam();
+    jam();
 //--------------------------------------------------------------------
 // Update that sends only changed information
 //--------------------------------------------------------------------
@@ -870,13 +868,13 @@
     
   } else if ((regOperPtr->op_struct.op_type == ZDELETE) &&
              (!trigPtr->sendBeforeValues)) {
-    ljam();
+    jam();
 //--------------------------------------------------------------------
 // Delete without sending before values only read Primary Key
 //--------------------------------------------------------------------
     return true;
   } else {
-    ljam();
+    jam();
 //--------------------------------------------------------------------
 // All others send all attributes that are monitored, except:
 // Omit unchanged blob inlines on update i.e.
@@ -898,7 +896,7 @@
 //--------------------------------------------------------------------
   if (regOperPtr->op_struct.op_type != ZDELETE)
   {
-    ljam();
+    jam();
     int ret = readAttributes(req_struct,
 			     &readBuffer[0],
 			     numAttrsToRead,
@@ -908,7 +906,7 @@
     ndbrequire(ret != -1);
     noAfterWords= ret;
   } else {
-    ljam();
+    jam();
     noAfterWords = 0;
   }
 
@@ -920,7 +918,7 @@
   if ((regOperPtr->op_struct.op_type == ZUPDATE || 
        regOperPtr->op_struct.op_type == ZDELETE) &&
       (trigPtr->sendBeforeValues)) {
-    ljam();
+    jam();
     
     Tuple_header *save= req_struct->m_tuple_ptr;
     PagePtr tmp;
@@ -956,7 +954,7 @@
 // Although a trigger was fired it was not necessary since the old
 // value and the new value was exactly the same
 //--------------------------------------------------------------------
-      ljam();
+      jam();
       //XXX does this work with collations?
       return false;
     }
@@ -976,21 +974,21 @@
   do {
     sigLen = dataLen - dataIndex;
     if (sigLen > TrigAttrInfo::DataLength) {
-      ljam();
+      jam();
       sigLen = TrigAttrInfo::DataLength;
     }
     MEMCOPY_NO_WORDS(trigAttrInfo->getData(), 
                      data + dataIndex,
                      sigLen);
     if (executeDirect) {
-      ljam();
+      jam();
       EXECUTE_DIRECT(receiverReference, 
                      GSN_TRIG_ATTRINFO,
                      signal,
 		     TrigAttrInfo::StaticLength + sigLen);
-      ljamEntry();
+      jamEntry();
     } else {
-      ljam();
+      jam();
       sendSignal(receiverReference, 
                  GSN_TRIG_ATTRINFO, 
                  signal, 
@@ -1018,15 +1016,15 @@
 
   switch(regOperPtr->op_struct.op_type) {
   case(ZINSERT):
-    ljam();
+    jam();
     fireTrigOrd->setTriggerEvent(TriggerEvent::TE_INSERT);
     break;
   case(ZDELETE):
-    ljam();
+    jam();
     fireTrigOrd->setTriggerEvent(TriggerEvent::TE_DELETE);
     break;
   case(ZUPDATE):
-    ljam();
+    jam();
     fireTrigOrd->setTriggerEvent(TriggerEvent::TE_UPDATE);
     break;
   default:
@@ -1040,12 +1038,12 @@
 
   switch(trigPtr->triggerType) {
   case (TriggerType::SECONDARY_INDEX):
-    ljam();
+    jam();
     sendSignal(req_struct->TC_ref, GSN_FIRE_TRIG_ORD, 
                signal, FireTrigOrd::SignalLength, JBB);
     break;
   case (TriggerType::SUBSCRIPTION_BEFORE): // Only Suma
-    ljam();
+    jam();
     // Since only backup uses subscription triggers we 
     // send to backup directly for now
     fireTrigOrd->setGCI(req_struct->gci);
@@ -1056,7 +1054,7 @@
 		   FireTrigOrd::SignalWithHashValueLength);
     break;
   case (TriggerType::SUBSCRIPTION):
-    ljam();
+    jam();
     // Since only backup uses subscription triggers we 
     // send to backup directly for now
     fireTrigOrd->setGCI(req_struct->gci);
@@ -1123,7 +1121,7 @@
                      Tablerec* regTabPtr)
 {
   if (ERROR_INSERTED(4022)) {
-    ljam();
+    jam();
     CLEAR_ERROR_INSERT_VALUE;
     terrorCode = 9999;
     return -1;
@@ -1134,12 +1132,12 @@
   Uint32 failPtrI;
   triggerList.first(triggerPtr);
   while (triggerPtr.i != RNIL) {
-    ljam();
+    jam();
     req->indexId = triggerPtr.p->indexId;
     req->errorCode = RNIL;
     if (ERROR_INSERTED(4023) &&
         ! triggerList.hasNext(triggerPtr)) {
-      ljam();
+      jam();
       CLEAR_ERROR_INSERT_VALUE;
       terrorCode = 9999;
       failPtrI = triggerPtr.i;
@@ -1147,9 +1145,9 @@
     }
     EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
         signal, TuxMaintReq::SignalLength);
-    ljamEntry();
+    jamEntry();
     if (req->errorCode != 0) {
-      ljam();
+      jam();
       terrorCode = req->errorCode;
       failPtrI = triggerPtr.i;
       goto fail;
@@ -1161,12 +1159,12 @@
   req->opInfo = TuxMaintReq::OpRemove;
   triggerList.first(triggerPtr);
   while (triggerPtr.i != failPtrI) {
-    ljam();
+    jam();
     req->indexId = triggerPtr.p->indexId;
     req->errorCode = RNIL;
     EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
         signal, TuxMaintReq::SignalLength);
-    ljamEntry();
+    jamEntry();
     ndbrequire(req->errorCode == 0);
     triggerList.next(triggerPtr);
   }
@@ -1197,15 +1195,15 @@
   if (regOperPtr->op_struct.op_type == ZINSERT) {
     if (! regOperPtr->op_struct.delete_insert_flag)
       return;
-    ljam();
+    jam();
     tupVersion= decr_tup_version(regOperPtr->tupVersion);
   } else if (regOperPtr->op_struct.op_type == ZUPDATE) {
-    ljam();
+    jam();
     tupVersion= decr_tup_version(regOperPtr->tupVersion);
   } else if (regOperPtr->op_struct.op_type == ZDELETE) {
     if (regOperPtr->op_struct.delete_insert_flag)
       return;
-    ljam();
+    jam();
     tupVersion= regOperPtr->tupVersion;
   } else {
     ndbrequire(false);
@@ -1231,13 +1229,13 @@
   // get version
   Uint32 tupVersion;
   if (regOperPtr->op_struct.op_type == ZINSERT) {
-    ljam();
+    jam();
     tupVersion = regOperPtr->tupVersion;
   } else if (regOperPtr->op_struct.op_type == ZUPDATE) {
-    ljam();
+    jam();
     tupVersion = regOperPtr->tupVersion;
   } else if (regOperPtr->op_struct.op_type == ZDELETE) {
-    ljam();
+    jam();
     return;
   } else {
     ndbrequire(false);
@@ -1262,12 +1260,12 @@
   TriggerPtr triggerPtr;
   triggerList.first(triggerPtr);
   while (triggerPtr.i != RNIL) {
-    ljam();
+    jam();
     req->indexId = triggerPtr.p->indexId;
     req->errorCode = RNIL,
     EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
         signal, TuxMaintReq::SignalLength);
-    ljamEntry();
+    jamEntry();
     // must succeed
     ndbrequire(req->errorCode == 0);
     triggerList.next(triggerPtr);

--- 1.157/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2007-03-18 18:21:31 +01:00
+++ 1.158/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2007-03-18 18:21:31 +01:00
@@ -1707,6 +1707,7 @@
 	       m_transporter->sendSignal(sig, node));
     if(res != 0){
       DBUG_PRINT("info", ("dictSignal failed to send signal"));
+      m_error.code = 4007;
       continue;
     }    
     
@@ -1724,6 +1725,7 @@
      */
     if(ret_val == -2) //WAIT_NODE_FAILURE
     {
+      m_error.code = 4013;
       continue;
     }
     if(m_waiter.m_state == WST_WAIT_TIMEOUT)

--- 1.365/sql/ha_ndbcluster.cc	2007-03-18 18:21:31 +01:00
+++ 1.366/sql/ha_ndbcluster.cc	2007-03-18 18:21:32 +01:00
@@ -4842,7 +4842,8 @@
     if ((my_errno= create_ndb_column(col, field, create_info)))
       DBUG_RETURN(my_errno);
  
-    if (create_info->storage_media == HA_SM_DISK)
+    if (create_info->storage_media == HA_SM_DISK ||
+        create_info->tablespace)
       col.setStorageType(NdbDictionary::Column::StorageTypeDisk);
     else
     {
@@ -6167,9 +6168,16 @@
     {
       const NdbError err= dict->getNdbError();
       if (err.code == 709 || err.code == 723)
+      {
         error= -1;
+        DBUG_PRINT("info", ("ndb_error.code: %u", ndb_error.code));
+      }
       else
+      {
+        error= -1;
         ndb_error= err;
+        DBUG_PRINT("info", ("ndb_error.code: %u", ndb_error.code));
+      }
       goto err;
     }
     DBUG_PRINT("info", ("Found table %s", tab->getName()));
@@ -10666,10 +10674,23 @@
 
   int pk= 0;
   int ai= 0;
+
+  if (create_info->tablespace)
+    create_info->storage_media = HA_SM_DISK;
+  else
+    create_info->storage_media = HA_SM_MEMORY;
+
   for (i= 0; i < table->s->fields; i++) 
   {
     Field *field= table->field[i];
     const NDBCOL *col= tab->getColumn(i);
+    if (col->getStorageType() == NDB_STORAGETYPE_MEMORY && create_info->storage_media != HA_SM_MEMORY ||
+        col->getStorageType() == NDB_STORAGETYPE_DISK && create_info->storage_media != HA_SM_DISK)
+    {
+      DBUG_PRINT("info", ("Column storage media is changed"));
+      DBUG_RETURN(COMPATIBLE_DATA_NO);
+    }
+    
     if (field->flags & FIELD_IS_RENAMED)
     {
       DBUG_PRINT("info", ("Field has been renamed, copy table"));

--- 1.17/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp	2007-03-18 18:21:32 +01:00
+++ 1.18/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp	2007-03-18 18:21:32 +01:00
@@ -14,6 +14,7 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 #define DBTUP_C
+#define DBTUP_SCAN_CPP
 #include "Dbtup.hpp"
 #include <signaldata/AccScan.hpp>
 #include <signaldata/NextScan.hpp>
Thread
bk commit into 5.1 tree (jonas:1.2327)jonas18 Mar