List:Commits« Previous MessageNext Message »
From:jonas Date:October 20 2006 2:54pm
Subject:bk commit into 5.1 tree (jonas:1.2323)
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, 2006-10-20 16:54:32+02:00, jonas@stripped +10 -0
  Merge perch.ndb.mysql.com:/home/jonas/src/51-work
  into  perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-ndb-dynattr
  MERGE: 1.2273.124.1

  storage/ndb/include/ndbapi/NdbDictionary.hpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.83.1.1

  storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.18.1.1

  storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.102.1.1

  storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.11.1.1

  storage/ndb/src/ndbapi/NdbDictionary.cpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.63.1.1

  storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.150.1.1

  storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.67.1.1

  storage/ndb/src/ndbapi/NdbTransaction.cpp@stripped, 2006-10-20 16:54:29+02:00, jonas@stripped +0 -2
    merge
    MERGE: 1.58.1.1

  storage/ndb/test/include/NDBT_Table.hpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.12.1.1

  storage/ndb/test/src/NDBT_Tables.cpp@stripped, 2006-10-20 16:53:28+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.20.1.1

# 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/mysql-5.1-ndb-dynattr/RESYNC

--- 1.85/storage/ndb/include/ndbapi/NdbDictionary.hpp	2006-10-20 16:54:37 +02:00
+++ 1.86/storage/ndb/include/ndbapi/NdbDictionary.hpp	2006-10-20 16:54:37 +02:00
@@ -402,6 +402,11 @@
     ArrayType getArrayType() const;
     StorageType getStorageType() const;
 
+    /**
+     * Get if the column is dynamic (NULL values not stored)
+     */
+    bool getDynamic() const;
+
     /** @} *******************************************************************/
 
 
@@ -512,6 +517,11 @@
 
     void setArrayType(ArrayType type);
     void setStorageType(StorageType type);
+
+    /**
+     * Set whether column is dynamic.
+     */
+    void setDynamic(bool);
 
     /** @} *******************************************************************/
 

--- 1.19/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp	2006-10-20 16:54:37 +02:00
+++ 1.20/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp	2006-10-20 16:54:37 +02:00
@@ -88,6 +88,7 @@
   DTIMAP2(Attribute, AttributeNullableFlag, AttributeNullableFlag, 0, 1),
   DTIMAP2(Attribute, AttributeDKey, AttributeDKey, 0, 1),
   DTIMAP2(Attribute, AttributeStorageType, AttributeStorageType, 0, 1),
+  DTIMAP2(Attribute, AttributeDynamic, AttributeDynamic, 0, 1),
   DTIMAP(Attribute, AttributeExtType, AttributeExtType),
   DTIMAP(Attribute, AttributeExtPrecision, AttributeExtPrecision),
   DTIMAP(Attribute, AttributeExtScale, AttributeExtScale),
@@ -184,6 +185,7 @@
   AttributeExtLength = 0,
   AttributeAutoIncrement = false;
   AttributeStorageType = 0;
+  AttributeDynamic = 0;                         // Default is not dynamic
   memset(AttributeDefaultValue, 0, sizeof(AttributeDefaultValue));//AttributeDefaultValue[0] = 0;
 }
 

--- 1.104/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2006-10-20 16:54:37 +02:00
+++ 1.105/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2006-10-20 16:54:37 +02:00
@@ -557,6 +557,7 @@
     const Uint32 nullable = AttributeDescriptor::getNullable(desc);
     const Uint32 DKey = AttributeDescriptor::getDKey(desc);
     const Uint32 disk= AttributeDescriptor::getDiskBased(desc);
+    const Uint32 dynamic= AttributeDescriptor::getDynamic(desc);
     
 
     // AttributeType deprecated
@@ -564,6 +565,7 @@
     w.add(DictTabInfo::AttributeArraySize, arraySize);
     w.add(DictTabInfo::AttributeArrayType, arrayType);
     w.add(DictTabInfo::AttributeNullableFlag, nullable);
+    w.add(DictTabInfo::AttributeDynamic, dynamic);
     w.add(DictTabInfo::AttributeDKey, DKey);
     w.add(DictTabInfo::AttributeExtType, attrType);
     w.add(DictTabInfo::AttributeExtPrecision, attrPtr.p->extPrecision);
@@ -6332,6 +6334,7 @@
     AttributeDescriptor::setDKey(desc, attrDesc.AttributeDKey);
     AttributeDescriptor::setPrimaryKey(desc, attrDesc.AttributeKeyFlag);
     AttributeDescriptor::setDiskBased(desc, attrDesc.AttributeStorageType == NDB_STORAGETYPE_DISK);
+    AttributeDescriptor::setDynamic(desc, attrDesc.AttributeDynamic);
     attrPtr.p->attributeDescriptor = desc;
     attrPtr.p->autoIncrement = attrDesc.AttributeAutoIncrement;
     {

--- 1.12/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	2006-10-20 16:54:37 +02:00
+++ 1.13/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	2006-10-20 16:54:37 +02:00
@@ -144,9 +144,9 @@
     Uint32 copy_bits= copy->m_header_bits;
     if(! (bits & Tuple_header::ALLOC))
     {
-      if(copy_bits & Tuple_header::MM_GROWN)
+      if(bits & Tuple_header::MM_GROWN)
       {
-	ndbout_c("abort grow");
+	// ndbout_c("abort grow");
 	Ptr<Page> vpage;
 	Uint32 idx= regOperPtr.p->m_tuple_location.m_page_idx;
 	Uint32 mm_vars= regTabPtr.p->m_attributes[MM].m_no_of_varsize;
@@ -162,14 +162,22 @@
 	var_part= get_ptr(&vpage, *(Var_part_ref*)&ref);
 	Var_page* pageP = (Var_page*)vpage.p;
 	Uint32 len= pageP->get_entry_len(idx) & ~Var_page::CHAIN;
-	Uint32 sz = ((((mm_vars + 1) << 1) + (((Uint16*)var_part)[mm_vars]) + 3)>> 2);
-	ndbassert(sz <= len);
+
+        /*
+          A MM_GROWN tuple was relocated with a bigger size in preparation for
+          commit, so we need to shrink it back. The original size is stored in
+          the last word of the relocated (oversized) tuple.
+         */
+        ndbassert(len > 0);
+        Uint32 sz= var_part[len-1];
+        ndbassert(sz < len);
 	pageP->shrink_entry(idx, sz);
 	update_free_page_list(regFragPtr.p, vpage);
+        tuple_ptr->m_header_bits= bits & ~Tuple_header::MM_GROWN;
       } 
       else if(bits & Tuple_header::MM_SHRINK)
       {
-	ndbout_c("abort shrink");
+	// ndbout_c("abort shrink");
       }
     }
     else if (regOperPtr.p->is_first_operation() && 

--- 1.64/storage/ndb/src/ndbapi/NdbDictionary.cpp	2006-10-20 16:54:37 +02:00
+++ 1.65/storage/ndb/src/ndbapi/NdbDictionary.cpp	2006-10-20 16:54:37 +02:00
@@ -292,6 +292,16 @@
   return (StorageType)m_impl.m_storageType;
 }
 
+void 
+NdbDictionary::Column::setDynamic(bool val){
+  m_impl.m_dynamic = val;
+}
+
+bool 
+NdbDictionary::Column::getDynamic() const {
+  return m_impl.m_dynamic;
+}
+
 /*****************************************************************
  * Table facade
  */

--- 1.152/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2006-10-20 16:54:37 +02:00
+++ 1.153/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2006-10-20 16:54:37 +02:00
@@ -115,6 +115,7 @@
   m_arraySize = col.m_arraySize;
   m_arrayType = col.m_arrayType;
   m_storageType = col.m_storageType;
+  m_dynamic = col.m_dynamic;
   m_keyInfoPos = col.m_keyInfoPos;
   if (col.m_blobTable == NULL)
     m_blobTable = NULL;
@@ -261,6 +262,7 @@
   m_autoIncrementInitialValue = 1;
   m_blobTable = NULL;
   m_storageType = NDB_STORAGETYPE_MEMORY;
+  m_dynamic = false;
 #ifdef VM_TRACE
   if(NdbEnv_GetEnv("NDB_DEFAULT_DISK", (char *)0, 0))
     m_storageType = NDB_STORAGETYPE_DISK;
@@ -315,6 +317,9 @@
   if (m_arrayType != col.m_arrayType || m_storageType != col.m_storageType){
     DBUG_RETURN(false);
   }
+  if(m_dynamic != col.m_dynamic){
+    DBUG_RETURN(false);
+  }
 
   DBUG_RETURN(true);
 }
@@ -2168,6 +2173,7 @@
       col->m_arraySize = (attrDesc.AttributeArraySize + 31) >> 5;
     }
     col->m_storageType = attrDesc.AttributeStorageType;
+    col->m_dynamic = (attrDesc.AttributeDynamic != 0);
     
     col->m_pk = attrDesc.AttributeKeyFlag;
     col->m_distributionKey = (attrDesc.AttributeDKey != 0);
@@ -2678,6 +2684,7 @@
       tmpAttr.AttributeStorageType = NDB_STORAGETYPE_MEMORY;      
     else
       tmpAttr.AttributeStorageType = col->m_storageType;
+    tmpAttr.AttributeDynamic = (col->m_dynamic ? 1 : 0);
 
     if(col->getBlobType())
       tmpAttr.AttributeStorageType = NDB_STORAGETYPE_MEMORY;      

--- 1.69/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp	2006-10-20 16:54:37 +02:00
+++ 1.70/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp	2006-10-20 16:54:37 +02:00
@@ -99,6 +99,7 @@
   Uint32 m_arraySize;           // length or maxlength+1/2 for Var* types
   Uint32 m_arrayType;           // NDB_ARRAYTYPE_FIXED or _VAR
   Uint32 m_storageType;         // NDB_STORAGETYPE_MEMORY or _DISK
+  bool m_dynamic;
   /*
    * NdbTableImpl: if m_pk, 0-based index of key in m_attrId order
    * NdbIndexImpl: m_column_no of primary table column

--- 1.13/storage/ndb/test/include/NDBT_Table.hpp	2006-10-20 16:54:37 +02:00
+++ 1.14/storage/ndb/test/include/NDBT_Table.hpp	2006-10-20 16:54:37 +02:00
@@ -30,7 +30,8 @@
 		 bool _pk = false, 
 		 bool _nullable = false,
 		 CHARSET_INFO *cs= 0,
-		 NdbDictionary::Column::StorageType storage = NdbDictionary::Column::StorageTypeMemory):
+		 NdbDictionary::Column::StorageType storage = NdbDictionary::Column::StorageTypeMemory,
+                 bool dynamic = false):
     NdbDictionary::Column(_name)
   {
     assert(_name != 0);
@@ -44,6 +45,7 @@
       setCharset(cs);
     }
     setStorageType(storage);
+    setDynamic(dynamic);
   }
 };
 

--- 1.22/storage/ndb/test/src/NDBT_Tables.cpp	2006-10-20 16:54:37 +02:00
+++ 1.23/storage/ndb/test/src/NDBT_Tables.cpp	2006-10-20 16:54:37 +02:00
@@ -24,6 +24,11 @@
 //  USE ONLY UPPERLETTERS IN TAB AND COLUMN NAMES
 /* ******************************************************* */
 
+static const NdbDictionary::Column::StorageType MM=
+    NdbDictionary::Column::StorageTypeMemory;
+static const NdbDictionary::Column::StorageType DD=
+    NdbDictionary::Column::StorageTypeDisk;
+
 /*
  * These are our "official" test tables
  *
@@ -293,6 +298,122 @@
 NDBT_Table T14("T14", sizeof(T14Attribs)/sizeof(NDBT_Attribute), T14Attribs);
 
 /*
+  T15 - Dynamic attributes.
+  Test many different combinations of attribute types, sizes, and NULLability.
+  Also exersize >32bit dynattr bitmap.
+*/
+// pk nullable cs mm/dd dyn
+static
+const
+NDBT_Attribute T15Attribs[] = {
+  NDBT_Attribute("KOL1", NdbDictionary::Column::Unsigned, 1, true, false, 0, MM, true),
+  NDBT_Attribute("KOL2", NdbDictionary::Column::Varbinary, 100, false, true, 0, MM, true),
+  NDBT_Attribute("KOL3", NdbDictionary::Column::Unsigned, 1, false, true, 0, MM, true),
+  NDBT_Attribute("KOL4", NdbDictionary::Column::Int, 1, false, false, 0, MM, true),
+  NDBT_Attribute("KOL5", NdbDictionary::Column::Float, 1, false, true, 0, MM, true),
+  NDBT_Attribute("KOL6", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL7", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL8", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL9", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL10", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL11", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL12", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL13", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL14", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL15", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL16", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL17", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL18", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL19", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL20", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL21", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL22", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL23", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL24", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL25", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL26", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL27", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL28", NdbDictionary::Column::Char, 4, false, false),
+  NDBT_Attribute("KOL29", NdbDictionary::Column::Varbinary, 4, false, false),
+  NDBT_Attribute("KOL30", NdbDictionary::Column::Char, 4, false, true, 0, DD),
+  NDBT_Attribute("KOL31", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL32", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL33", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL34", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL35", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL36", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL37", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL38", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL39", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL40", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL41", NdbDictionary::Column::Char, 64, false, true, 0, MM, true),
+  NDBT_Attribute("KOL42", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL43", NdbDictionary::Column::Char, 8, false, true, 0, MM, true),
+  NDBT_Attribute("KOL44", NdbDictionary::Column::Char, 27, false, true, 0, MM, true),
+  NDBT_Attribute("KOL45", NdbDictionary::Column::Char, 64, false, false, 0, MM, true),
+  NDBT_Attribute("KOL46", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL47", NdbDictionary::Column::Char, 8, false, false, 0, MM, true),
+  NDBT_Attribute("KOL48", NdbDictionary::Column::Char, 27, false, false, 0, MM, true),
+  NDBT_Attribute("KOL49", NdbDictionary::Column::Varbinary, 255, false, false, 0, MM, true),
+  /* This one is for update count, needed by hugoScanUpdate. */
+  NDBT_Attribute("KOL99", NdbDictionary::Column::Unsigned, 1, false, false, 0, MM, true),
+};
+
+static
+const
+NDBT_Table T15("T15", sizeof(T15Attribs)/sizeof(NDBT_Attribute), T15Attribs);
+
+static
+const
+NDBT_Attribute T15AAttribs[] = {
+  NDBT_Attribute("KOL1", NdbDictionary::Column::Unsigned, 1, true, false, 0, MM, true),
+  NDBT_Attribute("KOL2", NdbDictionary::Column::Varbinary, 100, false, true, 0, MM, true),
+  NDBT_Attribute("KOL3", NdbDictionary::Column::Unsigned, 1, false, true, 0, MM, true),
+  NDBT_Attribute("KOL4", NdbDictionary::Column::Int, 1, false, false, 0, MM, true),
+  NDBT_Attribute("KOL5", NdbDictionary::Column::Float, 1, false, true, 0, MM, true),
+  NDBT_Attribute("KOL6", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL7", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL8", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL9", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL10", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL11", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL12", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL13", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL14", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL15", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL16", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL17", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL18", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL19", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL20", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL21", NdbDictionary::Column::Varbinary, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL30", NdbDictionary::Column::Char, 4, false, true, 0, DD),
+  NDBT_Attribute("KOL33", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL34", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL35", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL36", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL37", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL38", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL39", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL40", NdbDictionary::Column::Varbinary, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL41", NdbDictionary::Column::Char, 64, false, true, 0, MM, true),
+  NDBT_Attribute("KOL42", NdbDictionary::Column::Char, 4, false, true, 0, MM, true),
+  NDBT_Attribute("KOL43", NdbDictionary::Column::Char, 8, false, true, 0, MM, true),
+  NDBT_Attribute("KOL44", NdbDictionary::Column::Char, 27, false, true, 0, MM, true),
+  NDBT_Attribute("KOL45", NdbDictionary::Column::Char, 64, false, false, 0, MM, true),
+  NDBT_Attribute("KOL46", NdbDictionary::Column::Char, 4, false, false, 0, MM, true),
+  NDBT_Attribute("KOL47", NdbDictionary::Column::Char, 8, false, false, 0, MM, true),
+  NDBT_Attribute("KOL48", NdbDictionary::Column::Char, 27, false, false, 0, MM, true),
+  NDBT_Attribute("KOL49", NdbDictionary::Column::Varbinary, 255, false, false, 0, MM, true),
+  /* This one is for update count, needed by hugoScanUpdate. */
+  NDBT_Attribute("KOL99", NdbDictionary::Column::Unsigned, 1, false, false, 0, MM, true),
+};
+
+static
+const
+NDBT_Table T15A("T15A", sizeof(T15AAttribs)/sizeof(NDBT_Attribute), T15AAttribs);
+
+/*
   C2 DHCP TABLES, MAYBE THESE SHOULD BE MOVED TO THE UTIL_TABLES?
 */
 static 
@@ -431,6 +552,8 @@
   &T12,
   &T13,
   &T14,
+  &T15,
+  &T15A,
   &I1,
   &I2,
   &I3,
Thread
bk commit into 5.1 tree (jonas:1.2323)jonas20 Oct