List:Internals« Previous MessageNext Message »
From:jonas Date:September 13 2005 12:22pm
Subject:bk commit into 5.1 tree (jonas:1.2006)
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
  1.2006 05/09/13 14:22:17 jonas@eel.(none) +6 -0
  Merge joreland@stripped:/home/bk/mysql-5.1-opt
  into  eel.(none):/home/jonas/src/mysql-5.1-ndb-dd

  storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
    1.100 05/09/13 14:22:14 jonas@eel.(none) +23 -22
    merge

  storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
    1.98 05/09/13 14:22:14 jonas@eel.(none) +3 -5
    merge

  storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp
    1.46 05/09/13 14:15:23 jonas@eel.(none) +0 -0
    Auto merged

  storage/ndb/src/ndbapi/NdbDictionary.cpp
    1.49 05/09/13 14:15:23 jonas@eel.(none) +0 -0
    Auto merged

  storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp
    1.40 05/09/13 14:15:23 jonas@eel.(none) +0 -0
    Auto merged

  storage/ndb/include/kernel/signaldata/AlterTable.hpp
    1.6 05/09/13 14:15:23 jonas@eel.(none) +0 -0
    Auto merged

# 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:	eel.(none)
# Root:	/home/jonas/src/mysql-5.1-ndb-dd/RESYNC

--- 1.5/storage/ndb/include/kernel/signaldata/AlterTable.hpp	2005-08-27 07:42:49 +02:00
+++ 1.6/storage/ndb/include/kernel/signaldata/AlterTable.hpp	2005-09-13 14:15:23 +02:00
@@ -62,18 +62,22 @@
 
 /*
   n = Changed name
+  f = Changed frm
 
            1111111111222222222233
  01234567890123456789012345678901
- n-------------------------------
+ nf------------------------------
 */
 #define NAME_SHIFT        (0)
+#define FRM_SHIFT         (1)
 
  /**
    * Getters and setters
    */ 
   static Uint8 getNameFlag(const UintR & changeMask);
   static void setNameFlag(UintR &  changeMask, Uint32 nameFlg);
+  static Uint8 getFrmFlag(const UintR & changeMask);
+  static void setFrmFlag(UintR &  changeMask, Uint32 frmFlg);
 };
 
 inline
@@ -86,6 +90,18 @@
 void
 AlterTableReq::setNameFlag(UintR & changeMask, Uint32 nameFlg){
   changeMask |= (nameFlg << NAME_SHIFT);
+}
+
+inline
+Uint8
+AlterTableReq::getFrmFlag(const UintR & changeMask){
+  return (Uint8)((changeMask >> FRM_SHIFT) & 1);
+}
+
+inline
+void
+AlterTableReq::setFrmFlag(UintR & changeMask, Uint32 frmFlg){
+  changeMask |= (frmFlg << FRM_SHIFT);
 }
 
 

--- 1.97/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2005-09-11 21:16:38 +02:00
+++ 1.98/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2005-09-13 14:22:14 +02:00
@@ -4322,11 +4322,13 @@
 			   TableRecordPtr origTablePtr,
 			   TableRecordPtr newTablePtr)
 {
+  bool supportedAlteration = false;
   Uint32 changeMask = req->changeMask;
   
   if (AlterTableReq::getNameFlag(changeMask)) {
     jam();
     // Table rename
+    supportedAlteration = true;
     // Remove from hashtable
     Ptr<DictObject> obj_ptr;
     c_obj_pool.getPtr(obj_ptr, origTablePtr.p->m_obj_ptr_i);
@@ -4346,11 +4348,28 @@
     obj_ptr.p->m_name = origTablePtr.p->tableName;
     // Put it back
     c_obj_hash.add(obj_ptr);
-    
+  }
+
+  if (AlterTableReq::getFrmFlag(changeMask)) {
+    // Table definition changed (new frm)
+    supportedAlteration = true;
+    // Save old definition
+    strncpy(alterTabPtrP->previousFrmData, origTablePtr.p->frmData, origTablePtr.p->frmLen);
+    alterTabPtrP->previousFrmLen = origTablePtr.p->frmLen;
+    // Set new definition
+    strncpy(origTablePtr.p->frmData, newTablePtr.p->frmData, newTablePtr.p->frmLen);
+    origTablePtr.p->frmLen = newTablePtr.p->frmLen;
+    // Set new schema version
+    origTablePtr.p->tableVersion = newTablePtr.p->tableVersion;
+  }
+
+  if (supportedAlteration)
     return 0;
+  else
+  {
+    jam();
+    return -1;
   }
-  jam();
-  return -1;
 }
 
 void Dbdict::revertAlterTable(Signal * signal, 
@@ -4358,9 +4377,12 @@
 			      Uint32 tableId,
 			      CreateTableRecord * alterTabPtrP)
 {
+  bool supportedAlteration = false;
+
   if (AlterTableReq::getNameFlag(changeMask)) {
     jam();
     // Table rename
+    supportedAlteration = true;
     // Restore previous name
     TableRecordPtr tablePtr;
     c_tableRecordPool.getPtr(tablePtr, tableId);
@@ -4380,10 +4402,25 @@
     obj_ptr.p->m_name = tablePtr.p->tableName;
     // Put it back
     c_obj_hash.add(obj_ptr);
-    
-    return;
   }
 
+  if (AlterTableReq::getFrmFlag(changeMask)) {
+    jam();
+    // Table redefinition
+    supportedAlteration = true;
+    // Restore previous frm
+    TableRecordPtr tablePtr;
+    c_tableRecordPool.getPtr(tablePtr, tableId);
+    // Restore frm
+    strncpy(tablePtr.p->frmData, alterTabPtrP->previousFrmData, alterTabPtrP->previousFrmLen);
+    tablePtr.p->frmLen = alterTabPtrP->previousFrmLen;
+    // Revert schema version
+    tablePtr.p->tableVersion = alter_obj_dec_schema_version(tablePtr.p->tableVersion);
+  }
+
+  if (supportedAlteration)
+    return;
+  
   ndbrequire(false);
 }
 

--- 1.39/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp	2005-09-06 12:58:31 +02:00
+++ 1.40/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp	2005-09-13 14:15:23 +02:00
@@ -1073,6 +1073,11 @@
     /* Previous table name (used for reverting failed table rename) */
     char previousTableName[MAX_TAB_NAME_SIZE];
 
+    /* Previous table definition, frm (used for reverting) */
+    /** TODO Could preferrably be made dynamic size */
+    Uint32 previousFrmLen;
+    char previousFrmData[MAX_FRM_DATA_SIZE];
+
     Uint32 m_tablePtrI;
     Uint32 m_tabInfoPtrI;
     Uint32 m_fragmentsPtrI;

--- 1.48/storage/ndb/src/ndbapi/NdbDictionary.cpp	2005-09-05 13:54:32 +02:00
+++ 1.49/storage/ndb/src/ndbapi/NdbDictionary.cpp	2005-09-13 14:15:23 +02:00
@@ -422,17 +422,17 @@
 
 const void* 
 NdbDictionary::Table::getFrmData() const {
-  return m_impl.m_frm.get_data();
+  return m_impl.getFrmData();
 }
 
 Uint32
 NdbDictionary::Table::getFrmLength() const {
-  return m_impl.m_frm.length();
+  return m_impl.getFrmLength();
 }
 
 void
 NdbDictionary::Table::setFrm(const void* data, Uint32 len){
-  m_impl.m_frm.assign(data, len);
+  m_impl.setFrm(data, len);
 }
 
 const void* 

--- 1.99/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2005-09-07 07:56:11 +02:00
+++ 1.100/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2005-09-13 14:22:14 +02:00
@@ -439,6 +439,7 @@
   m_externalName.assign(org.m_externalName);
   m_newExternalName.assign(org.m_newExternalName);
   m_frm.assign(org.m_frm.get_data(), org.m_frm.length());
+  m_newFrm.assign(org.m_newFrm.get_data(), org.m_newFrm.length());
   m_ng.assign(org.m_ng.get_data(), org.m_ng.length());
   m_fragmentType = org.m_fragmentType;
   m_fragmentCount = org.m_fragmentCount;
@@ -547,6 +548,29 @@
   }
 }
 
+void NdbTableImpl::setFrm(const void* data, Uint32 len)
+{
+  m_newFrm.assign(data, len);
+}
+
+const void * 
+NdbTableImpl::getFrmData() const
+{
+  if (m_newFrm.empty())
+    return m_frm.get_data();
+  else
+    return m_newFrm.get_data();
+}
+
+Uint32
+NdbTableImpl::getFrmLength() const 
+{
+  if (m_newFrm.empty())
+    return m_frm.length();
+  else
+    return m_newFrm.length();
+}
+
 void
 NdbTableImpl::buildColumnHash(){
   const Uint32 size = m_columns.size();
@@ -1547,7 +1571,7 @@
     impl->m_replicaCount = replicaCount;
     impl->m_fragmentCount = fragCount;
     DBUG_PRINT("info", ("replicaCount=%x , fragCount=%x",replicaCount,fragCount));
-    for(i = 0; i<(fragCount*replicaCount); i++)
+    for(i = 0; i < (Uint32) (fragCount*replicaCount); i++)
     {
       impl->m_fragments.push_back(tableDesc.FragmentData[i+2]);
     }
@@ -1723,9 +1747,15 @@
     DBUG_RETURN(-1);
   }
 
+  // Check if any changes for alter table
   if (!impl.m_newExternalName.empty()) {
     impl.m_externalName.assign(impl.m_newExternalName);
     AlterTableReq::setNameFlag(impl.m_changeMask, true);
+  }
+
+  if (!impl.m_newFrm.empty()) {
+    impl.m_frm.assign(impl.m_newFrm.get_data(), impl.m_newFrm.length());
+    AlterTableReq::setFrmFlag(impl.m_changeMask, true);
   }
 
   //validate();

--- 1.45/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp	2005-09-07 07:56:11 +02:00
+++ 1.46/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp	2005-09-13 14:15:23 +02:00
@@ -120,6 +120,9 @@
   void init();
   void setName(const char * name);
   const char * getName() const;
+  void setFrm(const void* data, Uint32 len);
+  const void * getFrmData() const;
+  Uint32 getFrmLength() const;
 
   Uint32 m_changeMask;
   Uint32 m_primaryTableId;
@@ -127,6 +130,7 @@
   BaseString m_externalName;
   BaseString m_newExternalName; // Used for alter table
   UtilBuffer m_frm; 
+  UtilBuffer m_newFrm; // Used for alter table
   UtilBuffer m_ng;
   NdbDictionary::Object::FragmentType m_fragmentType;
 
Thread
bk commit into 5.1 tree (jonas:1.2006)jonas14 Sep