List:Internals« Previous MessageNext Message »
From:jonas.oreland Date:March 31 2005 6:59pm
Subject:bk commit into 5.1-ndb tree (joreland:1.1812)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1-ndb 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
  1.1812 05/03/31 20:59:28 joreland@stripped +14 -0
  wl1866 - ndb varsize
    fix misc bugs

  ndb/src/ndbapi/ndberror.c
    1.35 05/03/31 20:59:24 joreland@stripped +1 -0
    new error code

  ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
    1.31 05/03/31 20:59:24 joreland@stripped +3 -2
    use variable for pagePtr.i

  ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
    1.17 05/03/31 20:59:24 joreland@stripped +6 -0
    setup varsize parts in trigger code

  ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
    1.32 05/03/31 20:59:24 joreland@stripped +54 -18
    Fix varsize wrt charsets

  ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
    1.7 05/03/31 20:59:24 joreland@stripped +1 -0
    init physical_page  in alloc_frag_pages

  ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
    1.7 05/03/31 20:59:24 joreland@stripped +1 -1
    don't init physical_page  in initPage

  ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
    1.26 05/03/31 20:59:24 joreland@stripped +4 -4
    removed redundant var_sized_record

  ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
    1.55 05/03/31 20:59:24 joreland@stripped +20 -10
    removed redundant var_sized_record
    fix checksym of varsize

  ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
    1.42 05/03/31 20:59:24 joreland@stripped +2 -1
    removed redundant var_sized_record

  ndb/src/kernel/blocks/dbtup/Dbtup.hpp
    1.50 05/03/31 20:59:24 joreland@stripped +0 -2
    removed redundant var_sized_record

  ndb/src/kernel/blocks/dbdict/Dbdict.cpp
    1.61 05/03/31 20:59:24 joreland@stripped +20 -4
    Don't allow varsize bitfields

  ndb/include/kernel/signaldata/CreateTable.hpp
    1.5 05/03/31 20:59:24 joreland@stripped +2 -1
    Don't allow varsize bitfields

  mysql-test/t/ndb_autodiscover.test
    1.17 05/03/31 20:59:24 joreland@stripped +1 -1
    more removal of avg_row_length

  mysql-test/r/ndb_autodiscover.result
    1.23 05/03/31 20:59:24 joreland@stripped +2 -2
    more removal of avg_row_length

# 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:	joreland
# Host:	eel.hemma.oreland.se
# Root:	/home/jonas/src/mysql-5.1-ndb-dd

--- 1.22/mysql-test/r/ndb_autodiscover.result	Tue Mar 29 12:08:41 2005
+++ 1.23/mysql-test/r/ndb_autodiscover.result	Thu Mar 31 20:59:24 2005
@@ -144,8 +144,8 @@
 flush tables;
 show table status;
 Name	Engine	Version	Row_format	Rows	Avg_row_length	Data_length	Max_data_length	Index_length	Data_free	Auto_increment	Create_time	Update_time	Check_time	Collation	Checksum	Create_options	Comment
-t6	MyISAM	10	Fixed	1	260	#	#	#	0	NULL	#	#	NULL	#	NULL		#
-t7	ndbcluster	10	Fixed	1	276	#	#	#	0	NULL	#	#	NULL	#	NULL		#
+t6	MyISAM	10	Fixed	1	#	#	#	#	0	NULL	#	#	NULL	#	NULL		#
+t7	ndbcluster	10	Fixed	1	#	#	#	#	0	NULL	#	#	NULL	#	NULL		#
 show status like 'handler_discover%';
 Variable_name	Value
 Handler_discover	2

--- 1.16/mysql-test/t/ndb_autodiscover.test	Tue Feb 22 08:13:28 2005
+++ 1.17/mysql-test/t/ndb_autodiscover.test	Thu Mar 31 20:59:24 2005
@@ -176,7 +176,7 @@
 flush tables;
 system rm var/master-data/test/t7.frm ;
 
---replace_column 7 # 8 # 9 # 12 # 13 # 15 # 18 #
+--replace_column 6 # 7 # 8 # 9 # 12 # 13 # 15 # 18 #
 show table status;
 show status like 'handler_discover%';
 

--- 1.4/ndb/include/kernel/signaldata/CreateTable.hpp	Fri Mar  4 13:48:44 2005
+++ 1.5/ndb/include/kernel/signaldata/CreateTable.hpp	Thu Mar 31 20:59:24 2005
@@ -92,7 +92,8 @@
     InvalidPrimaryKeySize  = 739,
     NullablePrimaryKey = 740,
     InvalidCharset = 743,
-    InvalidTablespace = 755
+    InvalidTablespace = 755,
+    VarsizeBitfieldNotSupported = 757
   };
 
 private:

--- 1.60/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	Wed Mar 16 16:02:14 2005
+++ 1.61/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	Thu Mar 31 20:59:24 2005
@@ -5104,6 +5104,15 @@
     int b= AttributeDescriptor::getArrayType(desc);
     Uint32 pos= 2*(a ? 1 : 0) + (b == NDB_ARRAYTYPE_VAR ? 1 : 0);
     counts[pos+1]++;
+
+    if(b == NDB_ARRAYTYPE_VAR && sz == 0)
+    {
+      parseP->errorCode = CreateTableRef::VarsizeBitfieldNotSupported;
+      parseP->status    = status;
+      parseP->errorKey  = it.getKey();
+      parseP->errorLine = __LINE__;
+      return;
+    }
     
     if(!it.next())
       break;
@@ -5125,12 +5134,13 @@
   tabRequire(keyLength > 0, 
 	     CreateTableRef::InvalidPrimaryKeySize);
 
-  if(counts[2] || counts[3])
+  if(counts[3] || counts[4])
   {
     FilegroupPtr tablespacePtr;
     if(!c_filegroup_hash.find(tablespacePtr, tablePtr.p->m_tablespace_id) ||
        tablespacePtr.p->m_type != DictTabInfo::Tablespace)
     {
+      ndbout_c("%d %d", counts[3], counts[4]);
       tabRequire(false, CreateTableRef::InvalidTablespace);
     }
   }
@@ -5144,17 +5154,23 @@
      *   dd-fixsize
      *   dd-varsize
      */
-    ndbout_c("reshuffle attributes");
+    printf("reshuffle attributes: ");
     for(Uint32 i= 1; i<5; i++)
+    {
       counts[i]+= counts[i-1];
-    
+      printf("%d ", counts[i-1]);
+    }
+    printf(" - ");
+
     for(list.first(attrPtr); !attrPtr.isNull(); list.next(attrPtr))
     {
       int a= AttributeDescriptor::getDiskBased(attrPtr.p->attributeDescriptor);
       int b= AttributeDescriptor::getArrayType(attrPtr.p->attributeDescriptor);
       Uint32 pos= 2*(a ? 1 : 0) + (b == NDB_ARRAYTYPE_VAR ? 1 : 0);
+      printf("%d ", counts[pos]);
       attrPtr.p->attributeId = counts[pos]++;
     }
+    ndbout_c("");
   }
 }//handleTabInfo()
 
@@ -12935,7 +12951,7 @@
   case DictTabInfo::LogfileGroup:
     ref = LGMAN_REF;
     len = CreateFilegroupImplReq::LogfileGroupLength;
-    req->logfile_group.buffer_size = 512*1024/32768; // 512k in pages
+    req->logfile_group.buffer_size = 8*1024*1024/32768; // 512k in pages
     break;
   default:
     ndbrequire(false);

--- 1.49/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	Wed Mar 30 14:46:49 2005
+++ 1.50/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	Thu Mar 31 20:59:24 2005
@@ -719,8 +719,6 @@
     Uint32 tabDescriptor;
     
     bool checksumIndicator;
-    bool var_sized_record;    // Is there any varsize attributes (mm or dd)
-    
     Uint16 total_rec_size; // Max total size for entire tuple in words
     
     /**

--- 1.41/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	Wed Mar 30 17:40:59 2005
+++ 1.42/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	Thu Mar 31 20:59:24 2005
@@ -173,7 +173,8 @@
     disk_page_free(signal, regTabPtr, &disk, *(PagePtr*)&disk_page, gci);
   }
   
-  if (regTabPtr->var_sized_record) {
+  if (regTabPtr->m_attributes[MM].m_no_of_varsize)
+  {
     ljam();
     
     if(ptr->m_header_bits & Tuple_header::CHAINED_ROW)

--- 1.54/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	Wed Mar 30 17:40:59 2005
+++ 1.55/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	Thu Mar 31 20:59:24 2005
@@ -239,15 +239,15 @@
 {
   Uint32 checksum;
   Uint32 i, rec_size, *tuple_header;
-  bool var_sized;
-
-  var_sized= regTabPtr->var_sized_record;
   rec_size= regTabPtr->m_offsets[MM].m_fix_header_size;
   tuple_header= (Uint32*)&tuple_ptr->m_header_bits;
   checksum= 0;
   // includes tupVersion
   //printf("%p - ", tuple_ptr);
 
+  if (regTabPtr->m_attributes[MM].m_no_of_varsize)
+    rec_size += Tuple_header::HeaderSize;
+
   for (i= 0; i < rec_size-1; i++) {
     checksum ^= tuple_header[i];
     //printf("%.8x ", tuple_header[i]);
@@ -1355,7 +1355,7 @@
   if(regOperPtr.p->is_first_operation())
   {
     Uint32 frag_page_id;
-    if (!regTabPtr->var_sized_record) 
+    if (!regTabPtr->m_attributes[MM].m_no_of_varsize)
     {
       jam();
       if ((ptr= alloc_fix_rec(regFragPtr,
@@ -1418,7 +1418,7 @@
       setChecksum(req_struct->m_tuple_ptr, regTabPtr);
     }
     
-    if (!regTabPtr->var_sized_record || cmp[0] == cmp[1])
+    if (!regTabPtr->need_shrink() || cmp[0] == cmp[1])
       return 0;
     
     return handle_size_change_after_update(req_struct,
@@ -2441,11 +2441,10 @@
 {
   Uint32 bits= src->m_header_bits;
   Tuple_header* ptr= req_struct->m_tuple_ptr;
-  memcpy(ptr, src, 4*tabPtrP->m_offsets[MM].m_fix_header_size);
-  ptr->m_header_bits= bits | Tuple_header::DISK_INLINE;
   
   Uint16 dd_tot= tabPtrP->m_no_of_disk_attributes;
   Uint16 mm_vars= tabPtrP->m_attributes[MM].m_no_of_varsize;
+  Uint32 fix_size= tabPtrP->m_offsets[MM].m_varpart_offset;
   
   Uint32 *dst_ptr= ptr->get_var_part_ptr(tabPtrP);
   const Uint32 *disk_ref= src->get_disk_ref_ptr(tabPtrP);
@@ -2455,6 +2454,7 @@
   
   if(mm_vars)
   {
+
     Uint32 step; // in bytes
     const Uint32 *src_data= src_ptr;
     KeyReqStruct::Var_data* dst= &req_struct->m_var_data[MM];
@@ -2463,10 +2463,12 @@
       src_data= get_ptr(&req_struct->m_varpart_page_ptr, 
 			* (Var_part_ref*)src_ptr);
       step= 4;
+      sizes[MM]= (2 + (mm_vars << 1) + ((Uint16*)src_data)[mm_vars] + 3) >> 2;
     }
     else
     {
       step= (2 + (mm_vars << 1) + ((Uint16*)src_ptr)[mm_vars]);
+      sizes[MM]= (step + 3) >> 2;
     }
     dst->m_data_ptr= (char*)(((Uint16*)dst_ptr)+mm_vars+1);
     dst->m_offset_array_ptr= req_struct->var_pos_array;
@@ -2475,15 +2477,21 @@
     
     dst_ptr= expand_var_part(dst, src_data, desc);
     ndbassert(dst_ptr == ALIGN_WORD(dst->m_data_ptr + dst->m_max_var_offset));
+    ndbassert((UintPtr(src_ptr) & 3) == 0);
     src_ptr = ALIGN_WORD(((char*)src_ptr)+step);
-    sizes[MM]= 4*(Tuple_header::HeaderSize + tabPtrP->m_offsets[MM].m_varpart_offset) + ((Uint16*)src_data)[mm_vars] + (mm_vars * 2) + 2;
+
+    sizes[MM] += fix_size + Tuple_header::HeaderSize;
+    memcpy(ptr, src, 4*(fix_size + Tuple_header::HeaderSize));
   } 
   else 
   {
     sizes[MM]= 1;
     dst_ptr -= Tuple_header::HeaderSize;
+    memcpy(ptr, src, 4*fix_size);
   }
   
+  ptr->m_header_bits= bits | Tuple_header::DISK_INLINE;
+  
   sizes[DD]= 0;
   if(dd_tot)
   {
@@ -2595,7 +2603,7 @@
 Dbtup::shrink_tuple(KeyReqStruct* req_struct, Uint32 sizes[2],
 		    const Tablerec* tabPtrP)
 {
-  ndbassert(tabPtrP->var_sized_record);
+  ndbassert(tabPtrP->need_shrink());
   Tuple_header* ptr= req_struct->m_tuple_ptr;
   
   Uint16 dd_tot= tabPtrP->m_no_of_disk_attributes;
@@ -2622,7 +2630,9 @@
       dst_data_ptr += len;
     }
     *dst_off_ptr= off;
-    sizes[MM]= dst_data_ptr - ((char*)ptr);
+    assert(dst_data_ptr <= ((char*)ptr) + 8192);
+    assert((UintPtr(ptr) & 3) == 0);
+    sizes[MM]= (dst_data_ptr + 3 - ((char*)ptr)) >> 2;
   }
   
   if(dd_tot)

--- 1.25/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	Fri Mar 11 08:30:26 2005
+++ 1.26/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	Thu Mar 31 20:59:24 2005
@@ -345,12 +345,12 @@
     case ZVAR_ARRAY:
     {
       ljam();
+      if(regTabPtr.p->m_attributes[MM].m_no_of_varsize == 0 &&
+	 regTabPtr.p->m_attributes[DD].m_no_of_varsize == 0)
+	ndbout_c("varsize record");
+      
       fragOperPtr.p->m_var_attributes_size[ind] += bytes;
       pos= regTabPtr.p->m_attributes[ind].m_no_of_varsize++;
-	
-      if(!regTabPtr.p->var_sized_record)
-	ndbout_c("varsize record");
-      regTabPtr.p->var_sized_record= true;
       break;
     }
     case ZFIXED_ARRAY:

--- 1.6/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp	Mon Feb  7 08:18:14 2005
+++ 1.7/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp	Thu Mar 31 20:59:24 2005
@@ -125,7 +125,7 @@
     ljam();
     refresh_watch_dog();
     ptrAss(pagePtr, page);
-    pagePtr.p->physical_page_id= pagePtr.i;
+    pagePtr.p->physical_page_id= RNIL;
     pagePtr.p->next_page = pagePtr.i + 1;
     pagePtr.p->first_cluster_page = RNIL;
     pagePtr.p->next_cluster_page = RNIL;

--- 1.6/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp	Mon Feb  7 12:26:45 2005
+++ 1.7/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp	Thu Mar 31 20:59:24 2005
@@ -371,6 +371,7 @@
       loopPagePtr.p->page_state = ZEMPTY_MM;
       loopPagePtr.p->frag_page_id = startRange +
 	(loopPagePtr.i - retPageRef);
+      loopPagePtr.p->physical_page_id = loopPagePtr.i;
       loopPagePtr.p->next_page = loopPagePtr.i + 1;
     }//for
     loopPagePtr.i = (retPageRef + noOfPagesAllocated) - 1;

--- 1.31/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp	Fri Mar  4 13:48:44 2005
+++ 1.32/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp	Thu Mar 31 20:59:24 2005
@@ -349,7 +349,6 @@
     Uint32 maxIndexBuf = indexBuf + (dstLen >> 2);
     if (maxIndexBuf <= maxRead && ok) {
       ljam();
-      uchar* dstPtr = (uchar*)&outBuffer[indexBuf];
       const char* ssrcPtr = (const char*)srcPtr;
       int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
       ndbrequire(n != -1);
@@ -473,6 +472,7 @@
 
   Uint32 idx= req_struct->m_var_data[MM].m_var_len_offset;
   var_index= AttributeOffset::getOffset(attr_des2);
+  Uint32 charsetFlag = AttributeOffset::getCharsetFlag(attr_des2);
   var_attr_pos= req_struct->m_var_data[MM].m_offset_array_ptr[var_index];
   vsize_in_bytes= req_struct->m_var_data[MM].m_offset_array_ptr[var_index+idx] - var_attr_pos;
   attr_descriptor= req_struct->attr_descriptor;
@@ -483,21 +483,57 @@
   new_index= index_buf + vsize_in_words;
 
   ndbrequire(vsize_in_words <= max_var_size);
-  if (new_index <= max_read) {
-    ljam();
-    ah_out->setDataSize(vsize_in_words);
-    memcpy(out_buffer+index_buf,
-	   req_struct->m_var_data[MM].m_data_ptr+var_attr_pos,
-	   vsize_in_bytes);
-    char* rest= (char*)(out_buffer+index_buf);
-    memset(rest+vsize_in_bytes, 0, 4*vsize_in_words - vsize_in_bytes);
-    req_struct->out_buf_index= new_index;
-    return true;
-  } else {
+  if (! charsetFlag || ! req_struct->xfrm_flag)
+  {
+    if (new_index <= max_read) {
+      ljam();
+      ah_out->setDataSize(vsize_in_words);
+      memcpy(out_buffer+index_buf,
+	     req_struct->m_var_data[MM].m_data_ptr+var_attr_pos,
+	     vsize_in_bytes);
+      char* rest= (char*)(out_buffer+index_buf);
+      memset(rest+vsize_in_bytes, 0, 4*vsize_in_words - vsize_in_bytes);
+      req_struct->out_buf_index= new_index;
+      return true;
+    }
+  }
+  else
+  {
     ljam();
-    terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
-    return false;
+    Tablerec* regTabPtr = tabptr.p;
+    Uint32 srcBytes = vsize_in_bytes;
+    uchar* dstPtr = (uchar*)(out_buffer+index_buf);
+    const uchar* srcPtr = (uchar*)(req_struct->m_var_data[MM].m_data_ptr+var_attr_pos);
+    Uint32 i = AttributeOffset::getCharsetPos(attr_des2);
+    ndbrequire(i < regTabPtr->noOfCharsets);
+    CHARSET_INFO* cs = regTabPtr->charsetArray[i];
+    Uint32 typeId = AttributeDescriptor::getType(attr_descriptor);
+    Uint32 lb, len;
+    bool ok = NdbSqlUtil::get_var_length(typeId, srcPtr, srcBytes, lb, len);
+    Uint32 xmul = cs->strxfrm_multiply;
+    if (xmul == 0)
+      xmul = 1;
+    Uint32 dstLen = xmul * (srcBytes - lb);
+    Uint32 maxIndexBuf = index_buf + (dstLen >> 2);
+    if (maxIndexBuf <= max_read && ok) {
+      ljam();
+      const char* ssrcPtr = (const char*)srcPtr;
+      int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
+      ndbrequire(n != -1);
+      while ((n & 3) != 0) {
+	dstPtr[n++] = 0;
+      }
+      Uint32 dstWords = (n >> 2);
+      ah_out->setDataSize(dstWords);
+      Uint32 newIndexBuf = index_buf + dstWords;
+      ndbrequire(newIndexBuf <= max_read);
+      req_struct->out_buf_index = newIndexBuf;
+      return true;
+    }
   }
+  ljam();
+  terrorCode= ZTRY_TO_READ_TOO_MUCH_ERROR;
+  return false;
 }
 
 bool
@@ -589,7 +625,6 @@
     Uint32 maxIndexBuf = indexBuf + (dstLen >> 2);
     if (maxIndexBuf <= maxRead && ok) {
       ljam();
-      uchar* dstPtr = (uchar*)&outBuffer[indexBuf];
       const char* ssrcPtr = (const char*)srcPtr;
       int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);
       ndbrequire(n != -1);
@@ -918,6 +953,7 @@
       MEMCOPY_NO_WORDS(&tuple_header[updateOffset],
                        &inBuffer[indexBuf + 1],
                        noOfWords);
+      
       return true;
     } else {
       ljam();
@@ -996,8 +1032,8 @@
       var_data_start= req_struct->m_var_data[MM].m_data_ptr;
       vpos_array[var_index+idx]= var_attr_pos+size_in_bytes;
       req_struct->in_buf_index= new_index;
-
-      ndbrequire(var_attr_pos+vsize_in_words*4 <= check_offset);
+      
+      ndbrequire(var_attr_pos+size_in_bytes <= check_offset);
       memcpy(var_data_start+var_attr_pos, &in_buffer[index_buf + 1],
 	     size_in_bytes);
       return true;
@@ -1380,7 +1416,7 @@
       vpos_array[var_index+idx]= var_attr_pos+size_in_bytes;
       req_struct->in_buf_index= new_index;
 
-      ndbrequire(var_attr_pos+vsize_in_words*4 <= check_offset);
+      ndbrequire(var_attr_pos+size_in_bytes <= check_offset);
       memcpy(var_data_start+var_attr_pos, &in_buffer[index_buf + 1],
 	     size_in_bytes);
       return true;

--- 1.16/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	Wed Mar 30 18:01:23 2005
+++ 1.17/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	Thu Mar 31 20:59:24 2005
@@ -772,6 +772,9 @@
 //--------------------------------------------------------------------
 // Read Primary Key Values
 //--------------------------------------------------------------------
+  if (regTabPtr->need_expand(false)) // no disk 
+    prepare_read(req_struct, regTabPtr, false); // setup varsize
+  
   int ret = readAttributes(req_struct,
 			   &tableDescriptor[regTabPtr->readKeyArray].tabDescr,
 			   regTabPtr->noOfKeyAttr,
@@ -853,6 +856,9 @@
 
       req_struct->m_tuple_ptr= (Tuple_header*)ptr;
     }
+
+    if (regTabPtr->need_expand(false)) // no disk 
+      prepare_read(req_struct, regTabPtr, false); // setup varsize
     
     int ret = readAttributes(req_struct,
 			     &readBuffer[0],

--- 1.30/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp	Fri Feb 25 10:46:25 2005
+++ 1.31/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp	Thu Mar 31 20:59:24 2005
@@ -819,9 +819,10 @@
 {
   Var_page* tmp_page_header;
   Uint32 current_head= frag_ptr->free_var_page_array[index]; 
+  Uint32 pagePtrI = page_header->physical_page_id;
   page_header->next_page= current_head;
   ndbassert(index < MAX_FREE_LIST);
-  frag_ptr->free_var_page_array[index]= page_header->physical_page_id;
+  frag_ptr->free_var_page_array[index]= pagePtrI;
   page_header->prev_page= RNIL;
   page_header->list_index= index;
   if (current_head != RNIL) {
@@ -830,7 +831,7 @@
     head_page_ptr.i= current_head;
     ptrCheckGuard(head_page_ptr, cnoOfPage, page);
     tmp_page_header= (Var_page*)head_page_ptr.p;
-    tmp_page_header->prev_page= page_header->physical_page_id;
+    tmp_page_header->prev_page= pagePtrI;
   }
 }
 

--- 1.34/ndb/src/ndbapi/ndberror.c	Wed Mar 23 07:45:05 2005
+++ 1.35/ndb/src/ndbapi/ndberror.c	Thu Mar 31 20:59:24 2005
@@ -349,6 +349,7 @@
   { 745,  SE, "Distribution key not supported for char attribute (use binary attribute)" },
   { 755,  SE, "Invalid tablespace" },
   { 756,  SE, "Index on disk column is not supported" },
+  { 757,  SE, "Varsize bitfield not supported" },
   { 241,  SE, "Invalid schema object version" },
   { 283,  SE, "Table is being dropped" },
   { 284,  SE, "Table not defined in transaction coordinator" },
Thread
bk commit into 5.1-ndb tree (joreland:1.1812)jonas.oreland31 Mar