You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by an...@apache.org on 2016/08/02 23:24:33 UTC

[01/10] incubator-trafodion git commit: metadata access performance improvement for accessing traf objects

Repository: incubator-trafodion
Updated Branches:
  refs/heads/master 98b00b625 -> 71c2d35af


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
index f30bdb6..9454a97 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
@@ -53,6 +53,8 @@
 #include "PrivMgrRoles.h"
 #include "PrivMgrComponentPrivileges.h"
 
+#include "TrafDDLdesc.h"
+
 // defined in CmpDescribe.cpp
 extern short CmpDescribeSeabaseTable ( 
                              const CorrName  &dtName,
@@ -129,97 +131,90 @@ static bool isValidPrivTypeForObject(
 void CmpSeabaseDDL::convertVirtTableColumnInfoToDescStruct( 
      const ComTdbVirtTableColumnInfo * colInfo,
      const ComObjectName * objectName,
-     desc_struct * column_desc)
+     TrafDesc * column_desc)
 {
-  column_desc->body.columns_desc.tablename = 
-    convertNAString(objectName->getExternalName(), STMTHEAP);
-  
   char * col_name = new(STMTHEAP) char[strlen(colInfo->colName) + 1];
   strcpy(col_name, colInfo->colName);
-  column_desc->body.columns_desc.colname = col_name;
-  column_desc->body.columns_desc.colnumber = colInfo->colNumber;
-  column_desc->body.columns_desc.datatype  = colInfo->datatype;
-  column_desc->body.columns_desc.length    = colInfo->length;
+  column_desc->columnsDesc()->colname = col_name;
+  column_desc->columnsDesc()->colnumber = colInfo->colNumber;
+  column_desc->columnsDesc()->datatype  = colInfo->datatype;
+  column_desc->columnsDesc()->length    = colInfo->length;
   if (!(DFS2REC::isInterval(colInfo->datatype)))
-    column_desc->body.columns_desc.scale     = colInfo->scale;
+    column_desc->columnsDesc()->scale     = colInfo->scale;
   else
-    column_desc->body.columns_desc.scale = 0;
-  column_desc->body.columns_desc.precision = colInfo->precision;
-  column_desc->body.columns_desc.datetimestart = (rec_datetime_field) colInfo->dtStart;
-  column_desc->body.columns_desc.datetimeend = (rec_datetime_field) colInfo->dtEnd;
+    column_desc->columnsDesc()->scale = 0;
+  column_desc->columnsDesc()->precision = colInfo->precision;
+  column_desc->columnsDesc()->datetimestart = (rec_datetime_field) colInfo->dtStart;
+  column_desc->columnsDesc()->datetimeend = (rec_datetime_field) colInfo->dtEnd;
   if (DFS2REC::isDateTime(colInfo->datatype) || DFS2REC::isInterval(colInfo->datatype))
-    column_desc->body.columns_desc.datetimefractprec = colInfo->scale;
+    column_desc->columnsDesc()->datetimefractprec = colInfo->scale;
   else
-    column_desc->body.columns_desc.datetimefractprec = 0;
+    column_desc->columnsDesc()->datetimefractprec = 0;
   if (DFS2REC::isInterval(colInfo->datatype))
-    column_desc->body.columns_desc.intervalleadingprec = colInfo->precision;
+    column_desc->columnsDesc()->intervalleadingprec = colInfo->precision;
   else
-    column_desc->body.columns_desc.intervalleadingprec = 0 ;
-  column_desc->body.columns_desc.null_flag = colInfo->nullable;
-  column_desc->body.columns_desc.upshift   = colInfo->upshifted;
-  column_desc->body.columns_desc.character_set = (CharInfo::CharSet) colInfo->charset;
+    column_desc->columnsDesc()->intervalleadingprec = 0 ;
+  column_desc->columnsDesc()->setNullable(colInfo->nullable);
+  column_desc->columnsDesc()->setUpshifted(colInfo->upshifted);
+  column_desc->columnsDesc()->character_set = (CharInfo::CharSet) colInfo->charset;
   switch (colInfo->columnClass)
     {
     case COM_USER_COLUMN:
-      column_desc->body.columns_desc.colclass = 'U';
+      column_desc->columnsDesc()->colclass = 'U';
       break;
     case COM_SYSTEM_COLUMN:
-      column_desc->body.columns_desc.colclass = 'S';
+      column_desc->columnsDesc()->colclass = 'S';
       break;
     default:
       CMPASSERT(0);
     }
-  column_desc->body.columns_desc.defaultClass = colInfo->defaultClass;
-  column_desc->body.columns_desc.colFlags = colInfo->colFlags;
+  column_desc->columnsDesc()->setDefaultClass(colInfo->defaultClass);
+  column_desc->columnsDesc()->colFlags = colInfo->colFlags;
   
   
-  column_desc->body.columns_desc.pictureText =
+  column_desc->columnsDesc()->pictureText =
     (char *)STMTHEAP->allocateMemory(340);
-  NAType::convertTypeToText(column_desc->body.columns_desc.pictureText,  //OUT
-                            column_desc->body.columns_desc.datatype,
-                            column_desc->body.columns_desc.length,
-                            column_desc->body.columns_desc.precision,
-                            column_desc->body.columns_desc.scale,
-                            column_desc->body.columns_desc.datetimestart,
-                            column_desc->body.columns_desc.datetimeend,
-                            column_desc->body.columns_desc.datetimefractprec,
-                            column_desc->body.columns_desc.intervalleadingprec,
-                            column_desc->body.columns_desc.upshift,
-                            column_desc->body.columns_desc.caseinsensitive,
-                            (CharInfo::CharSet)column_desc->body.columns_desc.character_set,
+  NAType::convertTypeToText(column_desc->columnsDesc()->pictureText,  //OUT
+                            column_desc->columnsDesc()->datatype,
+                            column_desc->columnsDesc()->length,
+                            column_desc->columnsDesc()->precision,
+                            column_desc->columnsDesc()->scale,
+                            column_desc->columnsDesc()->datetimeStart(),
+                            column_desc->columnsDesc()->datetimeEnd(),
+                            column_desc->columnsDesc()->datetimefractprec,
+                            column_desc->columnsDesc()->intervalleadingprec,
+                            column_desc->columnsDesc()->isUpshifted(),
+                            column_desc->columnsDesc()->isCaseInsensitive(),
+                            (CharInfo::CharSet)column_desc->columnsDesc()->character_set,
                             (CharInfo::Collation) 1, // default collation
                             NULL, // displayDataType
                             0); // displayCaseSpecific
   
 
-  column_desc->body.columns_desc.offset    = -1; // not present in colInfo
-  column_desc->body.columns_desc.caseinsensitive = (short)FALSE; // not present in colInfo
-  column_desc->body.columns_desc.encoding_charset = (CharInfo::CharSet) column_desc->body.columns_desc.character_set ; // not present in colInfo so we go with the column's charset here. 
-  column_desc->body.columns_desc.collation_sequence = (CharInfo::Collation)1; // not present in colInfo, so we go with default collation here (used in buildEncodeTree for some error handling)
-  column_desc->body.columns_desc.uec     = (Cardinality)0; // not present in colInfo
-  column_desc->body.columns_desc.highval = 0; // not present in colInfo
-  column_desc->body.columns_desc.lowval  = 0; // not present in colInfo
-  column_desc->body.columns_desc.defaultvalue = NULL ; // not present in colInfo
-  column_desc->body.columns_desc.stored_on_disk = 0 ; // not present in colInfo
-  column_desc->body.columns_desc.computed_column_text = NULL; // not present in colInfo
+  column_desc->columnsDesc()->offset    = -1; // not present in colInfo
+  column_desc->columnsDesc()->setCaseInsensitive(FALSE); // not present in colInfo
+  column_desc->columnsDesc()->encoding_charset = (CharInfo::CharSet) column_desc->columnsDesc()->character_set ; // not present in colInfo so we go with the column's charset here. 
+  column_desc->columnsDesc()->collation_sequence = (CharInfo::Collation)1; // not present in colInfo, so we go with default collation here (used in buildEncodeTree for some error handling)
+  column_desc->columnsDesc()->defaultvalue = NULL ; // not present in colInfo
+  column_desc->columnsDesc()->computed_column_text = NULL; // not present in colInfo
 }
 
-desc_struct * CmpSeabaseDDL::convertVirtTableColumnInfoArrayToDescStructs(
+TrafDesc * CmpSeabaseDDL::convertVirtTableColumnInfoArrayToDescStructs(
      const ComObjectName * objectName,
      const ComTdbVirtTableColumnInfo * colInfoArray,
      Lng32 numCols)
 {
-  desc_struct * prev_column_desc  = NULL;
-  desc_struct * first_column_desc = NULL;
+  TrafDesc * prev_column_desc  = NULL;
+  TrafDesc * first_column_desc = NULL;
   for (Int32 i = 0; i < numCols; i++)
   {
     const ComTdbVirtTableColumnInfo* colInfo = &(colInfoArray[i]);
 
-    // readtabledef_allocate_desc() requires that HEAP (STMTHEAP) 
+    // TrafAllocateDDLdesc() requires that HEAP (STMTHEAP) 
     // be used for operator new herein
-    desc_struct * column_desc = readtabledef_allocate_desc(DESC_COLUMNS_TYPE);
+    TrafDesc * column_desc = TrafAllocateDDLdesc(DESC_COLUMNS_TYPE, NULL);
     if (prev_column_desc != NULL)
-      prev_column_desc->header.next = column_desc;
+      prev_column_desc->next = column_desc;
     else
       first_column_desc = column_desc;      
     
@@ -230,27 +225,27 @@ desc_struct * CmpSeabaseDDL::convertVirtTableColumnInfoArrayToDescStructs(
   return first_column_desc;
 }
 
-desc_struct * CmpSeabaseDDL::convertVirtTableKeyInfoArrayToDescStructs(
+TrafDesc * CmpSeabaseDDL::convertVirtTableKeyInfoArrayToDescStructs(
      const ComTdbVirtTableKeyInfo *keyInfoArray,
      const ComTdbVirtTableColumnInfo *colInfoArray,
      Lng32 numKeys)
 {
-  desc_struct * prev_key_desc  = NULL;
-  desc_struct * first_key_desc = NULL;
+  TrafDesc * prev_key_desc  = NULL;
+  TrafDesc * first_key_desc = NULL;
   for (Int32 i = 0; i < numKeys; i++)
     {
       const ComTdbVirtTableColumnInfo * colInfo = &(colInfoArray[keyInfoArray[i].tableColNum]);
-      desc_struct * key_desc = readtabledef_allocate_desc(DESC_KEYS_TYPE);
+      TrafDesc * key_desc = TrafAllocateDDLdesc(DESC_KEYS_TYPE, NULL);
       if (prev_key_desc != NULL)
-        prev_key_desc->header.next = key_desc;
+        prev_key_desc->next = key_desc;
       else
        first_key_desc = key_desc;      
       
       prev_key_desc = key_desc;
       
-      key_desc->body.keys_desc.tablecolnumber = keyInfoArray[i].tableColNum;
-      key_desc->body.keys_desc.keyseqnumber = i;
-      key_desc->body.keys_desc.ordering = keyInfoArray[i].ordering;
+      key_desc->keysDesc()->tablecolnumber = keyInfoArray[i].tableColNum;
+      key_desc->keysDesc()->keyseqnumber = i;
+      key_desc->keysDesc()->setDescending(keyInfoArray[i].ordering == -1 ? TRUE : FALSE);
     }
 
   return first_key_desc;
@@ -1451,7 +1446,8 @@ short CmpSeabaseDDL::createSeabaseTable2(
                                          ExeCliInterface &cliInterface,
                                          StmtDDLCreateTable * createTableNode,
                                          NAString &currCatName, NAString &currSchName,
-                                         NABoolean isCompound)
+                                         NABoolean isCompound,
+                                         Int64 &outObjUID)
 {
   Lng32 retcode = 0;
   Lng32 cliRC = 0;
@@ -2039,11 +2035,11 @@ short CmpSeabaseDDL::createSeabaseTable2(
   char ** encodedKeysBuffer = NULL;
   if (numSplits > 0) {
 
-    desc_struct * colDescs = 
+    TrafDesc * colDescs = 
       convertVirtTableColumnInfoArrayToDescStructs(&tableName,
                                                    colInfoArray,
                                                    numCols) ;
-    desc_struct * keyDescs = 
+    TrafDesc * keyDescs = 
       convertVirtTableKeyInfoArrayToDescStructs(keyInfoArray,
                                                 colInfoArray,
                                                 numKeys) ;
@@ -2167,6 +2163,8 @@ short CmpSeabaseDDL::createSeabaseTable2(
       return -1;
     }
 
+  outObjUID = objUID;
+
   // update TEXT table with column families.
   // Column families are stored separated by a blank space character.
   NAString allColFams;
@@ -2440,18 +2438,28 @@ short CmpSeabaseDDL::createSeabaseTable2(
 void CmpSeabaseDDL::createSeabaseTable(
                                        StmtDDLCreateTable * createTableNode,
                                        NAString &currCatName, NAString &currSchName,
-                                       NABoolean isCompound)
+                                       NABoolean isCompound,
+                                       Int64 *retObjUID)
 {
   NABoolean xnWasStartedHere = FALSE;
   ExeCliInterface cliInterface(STMTHEAP, NULL, NULL, 
   CmpCommon::context()->sqlSession()->getParentQid());
 
+  ComObjectName tableName(createTableNode->getTableName());
+  ComAnsiNamePart currCatAnsiName(currCatName);
+  ComAnsiNamePart currSchAnsiName(currSchName);
+  tableName.applyDefaults(currCatAnsiName, currSchAnsiName);
+  const NAString catalogNamePart = tableName.getCatalogNamePartAsAnsiString();
+  const NAString schemaNamePart = tableName.getSchemaNamePartAsAnsiString(TRUE);
+  const NAString objectNamePart = tableName.getObjectNamePartAsAnsiString(TRUE);
+  
   if (beginXnIfNotInProgress(&cliInterface, xnWasStartedHere))
     return;
 
+  Int64 objUID = 0;
   short rc =
     createSeabaseTable2(cliInterface, createTableNode, currCatName, currSchName,
-                        isCompound);
+                        isCompound, objUID);
   if ((CmpCommon::diags()->getNumber(DgSqlCode::ERROR_)) &&
       (rc < 0))
     {
@@ -2459,15 +2467,7 @@ void CmpSeabaseDDL::createSeabaseTable(
 
       if (rc == -2) // cleanup before returning error..
         {
-          ComObjectName tableName(createTableNode->getTableName());
-          ComAnsiNamePart currCatAnsiName(currCatName);
-          ComAnsiNamePart currSchAnsiName(currSchName);
-          tableName.applyDefaults(currCatAnsiName, currSchAnsiName);
-          const NAString catalogNamePart = tableName.getCatalogNamePartAsAnsiString();
-          const NAString schemaNamePart = tableName.getSchemaNamePartAsAnsiString(TRUE);
-          const NAString objectNamePart = tableName.getObjectNamePartAsAnsiString(TRUE);
-
-          cleanupObjectAfterError(cliInterface,
+           cleanupObjectAfterError(cliInterface,
                                   catalogNamePart, schemaNamePart, objectNamePart,
                                   COM_BASE_TABLE_OBJECT,
                                   createTableNode->ddlXns());
@@ -2476,6 +2476,23 @@ void CmpSeabaseDDL::createSeabaseTable(
       return;
     }
 
+  if (retObjUID)
+    *retObjUID = objUID;
+
+  if (NOT isCompound)
+    {
+      if (updateObjectRedefTime(&cliInterface, 
+                                catalogNamePart, schemaNamePart, objectNamePart,
+                                COM_BASE_TABLE_OBJECT_LIT, -1, objUID))
+        {
+          endXnIfStartedHere(&cliInterface, xnWasStartedHere, -1);
+          
+          processReturn();
+          
+          return;
+        }
+    }
+
   endXnIfStartedHere(&cliInterface, xnWasStartedHere, 0);
 
   return;
@@ -2779,6 +2796,7 @@ void CmpSeabaseDDL::createSeabaseTableCompound(
   const NAString extTableName = tableName.getExternalName(TRUE);
 
   NABoolean xnWasStartedHere = FALSE;
+  Int64 objUID = 0;
 
   if ((createTableNode->isVolatile()) &&
       ((createTableNode->getAddConstraintUniqueArray().entries() > 0) ||
@@ -2792,7 +2810,7 @@ void CmpSeabaseDDL::createSeabaseTableCompound(
       goto label_error;
     }
 
-  createSeabaseTable(createTableNode, currCatName, currSchName, TRUE);
+  createSeabaseTable(createTableNode, currCatName, currSchName, TRUE, &objUID);
   if (CmpCommon::diags()->getNumber(DgSqlCode::ERROR_))
     {
       return;
@@ -2849,6 +2867,15 @@ void CmpSeabaseDDL::createSeabaseTableCompound(
 
       goto label_error;
     }
+
+  if (updateObjectRedefTime(&cliInterface, 
+                            catalogNamePart, schemaNamePart, objectNamePart,
+                            COM_BASE_TABLE_OBJECT_LIT, -1, objUID))
+    {
+      endXnIfStartedHere(&cliInterface, xnWasStartedHere, -1);
+      
+      goto label_error;
+    }
   
   endXnIfStartedHere(&cliInterface, xnWasStartedHere, cliRC);
 
@@ -3472,7 +3499,21 @@ short CmpSeabaseDDL::dropSeabaseTable2(
           processReturn();
           
           return -1;
-        }     
+        }    
+
+      if (updateObjectRedefTime
+          (cliInterface,
+           otherNaTable->getTableName().getCatalogName(),
+           otherNaTable->getTableName().getSchemaName(),
+           otherNaTable->getTableName().getObjectName(),
+           COM_BASE_TABLE_OBJECT_LIT, -1, 
+           otherNaTable->objectUid().castToInt64()))
+        {
+          processReturn();
+          deallocEHI(ehi);
+          
+          return -1;      
+        }
     }
 
   // drop all check constraints from metadata if 'no check' is not specified.
@@ -4140,6 +4181,197 @@ void CmpSeabaseDDL::renameSeabaseTable(
   return;
 }
 
+void CmpSeabaseDDL::alterSeabaseTableStoredDesc(
+     StmtDDLAlterTableStoredDesc * alterStoredDesc,
+     NAString &currCatName, NAString &currSchName)
+{
+  Lng32 retcode = 0;
+  Lng32 cliRC = 0;
+
+  ComObjectName tableName(alterStoredDesc->getTableName());
+  ComAnsiNamePart currCatAnsiName(currCatName);
+  ComAnsiNamePart currSchAnsiName(currSchName);
+  tableName.applyDefaults(currCatAnsiName, currSchAnsiName);
+  const NAString catalogNamePart = tableName.getCatalogNamePartAsAnsiString();
+  const NAString schemaNamePart = tableName.getSchemaNamePartAsAnsiString(TRUE);
+  const NAString objectNamePart = tableName.getObjectNamePartAsAnsiString(TRUE);
+  const NAString extTableName = tableName.getExternalName(TRUE);
+  const NAString extNameForHbase = catalogNamePart + "." + schemaNamePart + "." + objectNamePart;
+
+  ExeCliInterface cliInterface(STMTHEAP, NULL, NULL, 
+  CmpCommon::context()->sqlSession()->getParentQid());
+  
+  ExpHbaseInterface * ehi = allocEHI();
+  if (ehi == NULL)
+    {
+      processReturn();
+
+      return;
+    }
+
+  if ((isSeabaseReservedSchema(tableName)) &&
+      (!Get_SqlParser_Flags(INTERNAL_QUERY_FROM_EXEUTIL)))
+    {
+      *CmpCommon::diags() << DgSqlCode(-CAT_SMD_CANNOT_BE_ALTERED)
+                          << DgTableName(extTableName);
+      deallocEHI(ehi); 
+
+      processReturn();
+
+      return;
+    }
+  
+  if (CmpCommon::context()->sqlSession()->volatileSchemaInUse())
+    {
+      QualifiedName *qn =
+        CmpCommon::context()->sqlSession()->
+        updateVolatileQualifiedName
+        (alterStoredDesc->getTableNameAsQualifiedName().getObjectName());
+      
+      if (qn == NULL)
+        {
+          *CmpCommon::diags()
+            << DgSqlCode(-1427);
+          
+          processReturn();
+          
+          return;
+        }
+      
+      ComObjectName volTabName (qn->getQualifiedNameAsAnsiString());
+      volTabName.applyDefaults(currCatAnsiName, currSchAnsiName);
+      
+      NAString vtCatNamePart = volTabName.getCatalogNamePartAsAnsiString();
+      NAString vtSchNamePart = volTabName.getSchemaNamePartAsAnsiString(TRUE);
+      NAString vtObjNamePart = volTabName.getObjectNamePartAsAnsiString(TRUE);
+      
+      retcode = existsInSeabaseMDTable(&cliInterface, 
+                                       vtCatNamePart, vtSchNamePart, vtObjNamePart,
+                                       COM_BASE_TABLE_OBJECT);
+      
+      if (retcode < 0)
+        {
+          processReturn();
+          
+          return;
+        }
+      
+      if (retcode == 1)
+        {
+          // table found in volatile schema. cannot alter it.
+          *CmpCommon::diags()
+            << DgSqlCode(-3242)
+            << DgString0("Operation not allowed on volatile tables.");
+          
+          processReturn();
+          return;
+        }
+    }
+  
+  BindWA bindWA(ActiveSchemaDB(), CmpCommon::context(), FALSE/*inDDL*/);
+
+  CorrName cn(objectNamePart,
+              STMTHEAP,
+              schemaNamePart,
+              catalogNamePart);
+  
+  NATable *naTable = bindWA.getNATable(cn); 
+  if (naTable == NULL || bindWA.errStatus())
+    {
+      CmpCommon::diags()->clear();
+      
+      *CmpCommon::diags() << DgSqlCode(-CAT_OBJECT_DOES_NOT_EXIST_IN_TRAFODION)
+                          << DgString0(extTableName);
+  
+      processReturn();
+      
+      return;
+    }
+ 
+  // Make sure user has the privilege to perform the rename
+ if (alterStoredDesc->getType() != StmtDDLAlterTableStoredDesc::CHECK)
+   {
+     if (!isDDLOperationAuthorized(SQLOperation::ALTER_TABLE,
+                                   naTable->getOwner(),naTable->getSchemaOwner()))
+       {
+         *CmpCommon::diags() << DgSqlCode(-CAT_NOT_AUTHORIZED);
+         
+         processReturn ();
+         
+         return;
+       }
+   }
+
+  Int64 objUID = naTable->objectUid().castToInt64();
+
+  if (alterStoredDesc->getType() == StmtDDLAlterTableStoredDesc::GENERATE)
+    {
+      cliRC = 
+        updateObjectRedefTime(&cliInterface, 
+                              catalogNamePart, schemaNamePart, objectNamePart,
+                              COM_BASE_TABLE_OBJECT_LIT,
+                              -1, objUID, TRUE);
+      if (cliRC < 0)
+        {
+          processReturn ();
+          
+          return;
+        }
+    }
+  else if (alterStoredDesc->getType() == StmtDDLAlterTableStoredDesc::DELETE)
+    {
+      cliRC = deleteFromTextTable
+        (&cliInterface, objUID, COM_STORED_DESC_TEXT, 0);
+     if (cliRC < 0)
+       {
+         processReturn ();
+         return;
+       }    
+
+     Int64 flags = MD_OBJECTS_STORED_DESC | MD_OBJECTS_DISABLE_STORED_DESC;
+     cliRC = updateObjectFlags(&cliInterface, objUID, flags, TRUE);
+     if (cliRC < 0)
+       {
+         processReturn ();
+         return;
+       }    
+    }
+  else if (alterStoredDesc->getType() == StmtDDLAlterTableStoredDesc::ENABLE)
+    {
+     Int64 flags = MD_OBJECTS_DISABLE_STORED_DESC;
+     cliRC = updateObjectFlags(&cliInterface, objUID, flags, TRUE);
+     if (cliRC < 0)
+       {
+         processReturn ();
+         return;
+       }    
+    }
+  else if (alterStoredDesc->getType() == StmtDDLAlterTableStoredDesc::DISABLE)
+    {
+     Int64 flags = MD_OBJECTS_DISABLE_STORED_DESC;
+     cliRC = updateObjectFlags(&cliInterface, objUID, flags, FALSE);
+     if (cliRC < 0)
+       {
+         processReturn ();
+         return;
+       }    
+    }
+  else if (alterStoredDesc->getType() == StmtDDLAlterTableStoredDesc::CHECK)
+    {
+      checkAndGetStoredObjectDesc(&cliInterface, objUID, NULL);
+      processReturn();
+ 
+      return;
+    }
+
+  ActiveSchemaDB()->getNATableDB()->removeNATable
+    (cn,
+     ComQiScope::REMOVE_FROM_ALL_USERS, COM_BASE_TABLE_OBJECT,
+     alterStoredDesc->ddlXns(), FALSE);
+
+  return;
+}
+
 void CmpSeabaseDDL::alterSeabaseTableHBaseOptions(
                                        StmtDDLAlterTableHBaseOptions * hbaseOptionsNode,
                                        NAString &currCatName, NAString &currSchName)
@@ -4274,6 +4506,18 @@ void CmpSeabaseDDL::alterSeabaseTableHBaseOptions(
       return;
     }   
 
+  cliRC = updateObjectRedefTime(&cliInterface,
+                                catalogNamePart, schemaNamePart, objectNamePart,
+                                COM_BASE_TABLE_OBJECT_LIT, -1, objUID);
+  if (cliRC < 0)
+    {
+      cliInterface.retrieveSQLDiagnostics(CmpCommon::diags());
+
+      deallocEHI(ehi);
+      processReturn();
+      return;
+    }
+
   // invalidate cached NATable info on this table for all users
 
   ActiveSchemaDB()->getNATableDB()->removeNATable
@@ -4911,7 +5155,7 @@ void CmpSeabaseDDL::alterSeabaseTableAddColumn(
 
   if (updateObjectRedefTime(&cliInterface, 
                             catalogNamePart, schemaNamePart, objectNamePart,
-                            COM_BASE_TABLE_OBJECT_LIT))
+                            COM_BASE_TABLE_OBJECT_LIT, -1, objUID))
     {
       processReturn();
 
@@ -5554,7 +5798,7 @@ void CmpSeabaseDDL::alterSeabaseTableDropColumn(
 
   cliRC = updateObjectRedefTime(&cliInterface,
                                 catalogNamePart, schemaNamePart, objectNamePart,
-                                COM_BASE_TABLE_OBJECT_LIT);
+                                COM_BASE_TABLE_OBJECT_LIT, -1, objUID);
   if (cliRC < 0)
     {
       goto label_error;
@@ -5753,6 +5997,18 @@ void CmpSeabaseDDL::alterSeabaseTableAlterIdentityColumn(
         }
     }
 
+  cliRC = updateObjectRedefTime(&cliInterface,
+                                catalogNamePart, schemaNamePart, objectNamePart,
+                                COM_BASE_TABLE_OBJECT_LIT, -1, naTable->objectUid().castToInt64());
+  if (cliRC < 0)
+    {
+      cliInterface.retrieveSQLDiagnostics(CmpCommon::diags());
+
+      processReturn();
+      
+      return;
+    }
+
   ActiveSchemaDB()->getNATableDB()->removeNATable
     (cn,
      ComQiScope::REMOVE_FROM_ALL_USERS, COM_BASE_TABLE_OBJECT,
@@ -5886,6 +6142,7 @@ short CmpSeabaseDDL::recreateUsingViews(ExeCliInterface *cliInterface,
   cliRC = 0;
   
 label_return:
+ 
   for (Lng32 i = 0; i < viewDefnList.entries(); i++)
     {
       ComObjectName tableName(viewNameList[i], COM_TABLE_NAME);
@@ -6651,7 +6908,7 @@ void CmpSeabaseDDL::alterSeabaseTableAlterColumnDatatype(
 
   cliRC = updateObjectRedefTime(&cliInterface,
                                 catalogNamePart, schemaNamePart, objectNamePart,
-                                COM_BASE_TABLE_OBJECT_LIT);
+                                COM_BASE_TABLE_OBJECT_LIT, -1, objUID);
   if (cliRC < 0)
     {
       goto label_error;
@@ -7005,7 +7262,7 @@ void CmpSeabaseDDL::alterSeabaseTableAlterColumnRename(
 
   cliRC = updateObjectRedefTime(&cliInterface,
                                 catalogNamePart, schemaNamePart, objectNamePart,
-                                COM_BASE_TABLE_OBJECT_LIT);
+                                COM_BASE_TABLE_OBJECT_LIT, -1, objUID);
   if (cliRC < 0)
     {
       return;
@@ -7298,7 +7555,7 @@ void CmpSeabaseDDL::alterSeabaseTableAddPKeyConstraint(
 
   if (updateObjectRedefTime(&cliInterface,
                             catalogNamePart, schemaNamePart, objectNamePart,
-                            COM_BASE_TABLE_OBJECT_LIT))
+                            COM_BASE_TABLE_OBJECT_LIT, -1, tableUID))
     {
       processReturn();
 
@@ -7478,7 +7735,7 @@ void CmpSeabaseDDL::alterSeabaseTableAddUniqueConstraint(
 
   if (updateObjectRedefTime(&cliInterface,
                             catalogNamePart, schemaNamePart, objectNamePart,
-                            COM_BASE_TABLE_OBJECT_LIT))
+                            COM_BASE_TABLE_OBJECT_LIT, -1, tableUID))
     {
       processReturn();
 
@@ -8077,7 +8334,7 @@ void CmpSeabaseDDL::alterSeabaseTableAddRIConstraint(
 
   if (updateObjectRedefTime(&cliInterface,
                             catalogNamePart, schemaNamePart, objectNamePart,
-                            COM_BASE_TABLE_OBJECT_LIT))
+                            COM_BASE_TABLE_OBJECT_LIT, -1, tableUID))
     {
       processReturn();
 
@@ -8103,6 +8360,22 @@ void CmpSeabaseDDL::alterSeabaseTableAddRIConstraint(
      COM_BASE_TABLE_OBJECT,
      alterAddConstraint->ddlXns(), FALSE);
 
+  // regenerate and store packed descriptor in metadata for referenced table.
+  if (updateObjectRedefTime
+      (&cliInterface,
+       referencedTableName.getCatalogNamePart().getInternalName(),
+       referencedTableName.getSchemaNamePart().getInternalName(),
+       referencedTableName.getObjectNamePart().getInternalName(),       
+       COM_BASE_TABLE_OBJECT_LIT, -1, 
+       refdNaTable->objectUid().castToInt64()))
+    {
+      processReturn();
+
+      deallocEHI(ehi);
+
+      return;
+    }
+  
   return;
 }
 
@@ -8231,8 +8504,6 @@ short CmpSeabaseDDL::getCheckConstraintText(StmtDDLAddConstraintCheck *addCheckN
   
   PrettifySqlText(qualifiedText, NULL);
 
-  //                  CharType::getCharSetAsPrefix(SqlParser_NATIONAL_CHARSET));
-  
   return 0;
 }
 
@@ -8269,7 +8540,7 @@ short CmpSeabaseDDL::getTextFromMD(const char * catalogName,
 
   char query[1000];
 
-  str_sprintf(query, "select text from %s.\"%s\".%s where text_uid = %Ld and text_type = %d and sub_id = %d for read committed access order by seq_num",
+  str_sprintf(query, "select octet_length(text), text from %s.\"%s\".%s where text_uid = %Ld and text_type = %d and sub_id = %d for read committed access order by seq_num",
               catalogName, SEABASE_MD_SCHEMA, SEABASE_TEXT,
               textUID, static_cast<int>(textType), textSubID);
   
@@ -8287,9 +8558,11 @@ short CmpSeabaseDDL::getTextFromMD(const char * catalogName,
     {
       OutputInfo * vi = (OutputInfo*)textQueue->getNext(); 
     
-      char * text = (char*)vi->get(0);
+      Lng32 len = *(Lng32*)vi->get(0);
+
+      char * text = (char*)vi->get(1);
    
-      outText += text;
+      outText.append(text, len);
     }
 
   return 0;
@@ -8487,7 +8760,7 @@ void CmpSeabaseDDL::alterSeabaseTableAddCheckConstraint(
 
   if (updateObjectRedefTime(&cliInterface,
                             catalogNamePart, schemaNamePart, objectNamePart,
-                            COM_BASE_TABLE_OBJECT_LIT))
+                            COM_BASE_TABLE_OBJECT_LIT, -1, tableUID))
     {
       processReturn();
 
@@ -8839,9 +9112,10 @@ void CmpSeabaseDDL::alterSeabaseTableDropConstraint(
         }
     }
 
+  Int64 tableUID = naTable->objectUid().castToInt64();
   if (updateObjectRedefTime(&cliInterface,
                             catalogNamePart, schemaNamePart, objectNamePart,
-                            COM_BASE_TABLE_OBJECT_LIT))
+                            COM_BASE_TABLE_OBJECT_LIT, -1, tableUID))
     {
       processReturn();
 
@@ -8857,9 +9131,25 @@ void CmpSeabaseDDL::alterSeabaseTableDropConstraint(
      alterDropConstraint->ddlXns(), FALSE);
 
   if (isRefConstr && otherNaTable)
-  {
-    CorrName otherCn(
-      otherNaTable->getExtendedQualName().getQualifiedNameObj(), STMTHEAP);
+    {
+      CorrName otherCn(
+           otherNaTable->getExtendedQualName().getQualifiedNameObj(), STMTHEAP);
+      
+      if (updateObjectRedefTime
+          (&cliInterface,
+           otherCn.getQualifiedNameObj().getCatalogName(),
+           otherCn.getQualifiedNameObj().getSchemaName(),
+           otherCn.getQualifiedNameObj().getObjectName(),
+           COM_BASE_TABLE_OBJECT_LIT, -1, 
+           otherNaTable->objectUid().castToInt64()))
+        {
+          processReturn();
+          
+          deallocEHI(ehi);
+          
+          return;
+        }
+      
     ActiveSchemaDB()->getNATableDB()->removeNATable
       (otherCn,
        ComQiScope::REMOVE_FROM_ALL_USERS, COM_BASE_TABLE_OBJECT,
@@ -9545,7 +9835,7 @@ short CmpSeabaseDDL::getSpecialTableInfo
   return -1;
 }
 
-desc_struct * CmpSeabaseDDL::getSeabaseMDTableDesc(
+TrafDesc * CmpSeabaseDDL::getSeabaseMDTableDesc(
                                                    const NAString &catName, 
                                                    const NAString &schName, 
                                                    const NAString &objName,
@@ -9553,7 +9843,7 @@ desc_struct * CmpSeabaseDDL::getSeabaseMDTableDesc(
 {
   Lng32 cliRC = 0;
 
-  desc_struct * tableDesc = NULL;
+  TrafDesc * tableDesc = NULL;
   NAString schNameL = "\"";
   schNameL += schName;
   schNameL += "\"";
@@ -9620,13 +9910,13 @@ desc_struct * CmpSeabaseDDL::getSeabaseMDTableDesc(
 
 }
 
-desc_struct * CmpSeabaseDDL::getSeabaseHistTableDesc(const NAString &catName, 
+TrafDesc * CmpSeabaseDDL::getSeabaseHistTableDesc(const NAString &catName, 
                                                      const NAString &schName, 
                                                      const NAString &objName)
 {
   Lng32 cliRC = 0;
 
-  desc_struct * tableDesc = NULL;
+  TrafDesc * tableDesc = NULL;
   NAString schNameL = "\"";
   schNameL += schName;
   schNameL += "\"";  // transforms internal format schName to external format
@@ -10006,14 +10296,14 @@ ComTdbVirtTableSequenceInfo * CmpSeabaseDDL::getSeabaseSequenceInfo(
   return seqInfo;
 }
 
-desc_struct * CmpSeabaseDDL::getSeabaseLibraryDesc(
+TrafDesc * CmpSeabaseDDL::getSeabaseLibraryDesc(
    const NAString &catName, 
    const NAString &schName, 
    const NAString &libraryName)
    
 {
 
-  desc_struct * tableDesc = NULL;
+  TrafDesc * tableDesc = NULL;
 
   NAString extLibName;
   Int32 objectOwner = 0;
@@ -10089,9 +10379,9 @@ desc_struct * CmpSeabaseDDL::getSeabaseLibraryDesc(
   libraryInfo->schema_owner_id = schemaOwner;
   libraryInfo->library_UID = libUID;
   
-  desc_struct *library_desc = Generator::createVirtualLibraryDesc(
+  TrafDesc *library_desc = Generator::createVirtualLibraryDesc(
             libraryName.data(),
-            libraryInfo);
+            libraryInfo, NULL);
 
   processReturn();
   return library_desc;
@@ -10100,11 +10390,11 @@ desc_struct * CmpSeabaseDDL::getSeabaseLibraryDesc(
 
 
 
-desc_struct * CmpSeabaseDDL::getSeabaseSequenceDesc(const NAString &catName, 
+TrafDesc * CmpSeabaseDDL::getSeabaseSequenceDesc(const NAString &catName, 
                                                     const NAString &schName, 
                                                     const NAString &seqName)
 {
-  desc_struct * tableDesc = NULL;
+  TrafDesc * tableDesc = NULL;
 
   NAString extSeqName;
   Int32 objectOwner = 0;
@@ -10147,27 +10437,13 @@ desc_struct * CmpSeabaseDDL::getSeabaseSequenceDesc(const NAString &catName,
   return tableDesc;
 }
 
-void populateRegionDescForEndKey(char* buf, Int32 len, struct desc_struct* target)
-{
-   target->body.hbase_region_desc.beginKey = NULL;
-   target->body.hbase_region_desc.beginKeyLen = 0;
-   target->body.hbase_region_desc.endKey = buf;
-   target->body.hbase_region_desc.endKeyLen = len;
-}
-
-void populateRegionDescAsRANGE(char* buf, Int32 len, struct desc_struct* target, NAMemory*)
-{
-   target->header.nodetype = DESC_HBASE_RANGE_REGION_TYPE;
-   populateRegionDescForEndKey(buf, len, target);
-}
-
-
-desc_struct * CmpSeabaseDDL::getSeabaseUserTableDesc(const NAString &catName, 
+TrafDesc * CmpSeabaseDDL::getSeabaseUserTableDesc(const NAString &catName, 
                                                      const NAString &schName, 
                                                      const NAString &objName,
                                                      const ComObjectType objType,
                                                      NABoolean includeInvalidDefs,
-                                                     Int32 ctlFlags)
+                                                     Int32 ctlFlags,
+                                                     Int32 &packedDescLen)
 {
   Lng32 retcode = 0;
   Lng32 cliRC = 0;
@@ -10176,7 +10452,7 @@ desc_struct * CmpSeabaseDDL::getSeabaseUserTableDesc(const NAString &catName,
   ExeCliInterface cliInterface(STMTHEAP, NULL, NULL, 
   CmpCommon::context()->sqlSession()->getParentQid());
   
-  desc_struct * tableDesc = NULL;
+  TrafDesc * tableDesc = NULL;
 
   Int32 objectOwner =  0 ;
   Int32 schemaOwner =  0 ;
@@ -10251,6 +10527,26 @@ desc_struct * CmpSeabaseDDL::getSeabaseUserTableDesc(const NAString &catName,
     }
   }
 
+  if ((ctlFlags & READ_OBJECT_DESC) && // read stored descriptor
+      ((objectFlags & MD_OBJECTS_STORED_DESC) != 0) && // stored desc available
+      ((objectFlags & MD_OBJECTS_DISABLE_STORED_DESC) == 0)) // not disabled
+    {
+
+      TrafDesc * desc = NULL;
+
+      // if good stored desc was retrieved, return it.
+      // Otherwise, continue and generate descriptor the old fashioned way.
+      if (! checkAndGetStoredObjectDesc(&cliInterface, objUID, &desc))
+        {
+          CmpCommon::diags()->clear();
+
+          return desc;
+        }
+
+      // clear diags and continue
+      CmpCommon::diags()->clear();
+    }
+
   str_sprintf(query, "select is_audited, num_salt_partns, row_format, flags from %s.\"%s\".%s where table_uid = %Ld for read committed access",
               getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_TABLES,
               objUID);
@@ -10916,17 +11212,45 @@ desc_struct * CmpSeabaseDDL::getSeabaseUserTableDesc(const NAString &catName,
       char * colFamBufPtr = colFamBuf;
       strcpy(colFamBufPtr, colFamStr.data());
       strsep(&colFamBufPtr, " ");
-      tableInfo->defaultColFam = colFamBuf;
-      tableInfo->allColFams = colFamBufPtr;
+      tableInfo->defaultColFam = new(STMTHEAP) char[strlen(colFamBuf)+1];
+      strcpy((char*)tableInfo->defaultColFam, colFamBuf);
+      tableInfo->allColFams = new(STMTHEAP) char[strlen(colFamBufPtr)+1];
+      strcpy((char*)tableInfo->allColFams, colFamBufPtr);
     }
   else
     {
-      tableInfo->defaultColFam = SEABASE_DEFAULT_COL_FAMILY;
+      tableInfo->defaultColFam = new(STMTHEAP) char[strlen(SEABASE_DEFAULT_COL_FAMILY)+1];
+      strcpy((char*)tableInfo->defaultColFam, SEABASE_DEFAULT_COL_FAMILY);
       tableInfo->allColFams = NULL;
     }
   tableInfo->objectFlags = objectFlags;
   tableInfo->tablesFlags = tablesFlags;
 
+  // request the default
+  ExpHbaseInterface* ehi = CmpSeabaseDDL::allocEHI();
+  if (ehi == NULL) 
+    return NULL;
+  
+  NAArray<HbaseStr>* endKeyArray  = ehi->getRegionEndKeys(extNameForHbase);
+
+  char * snapshotName = NULL;
+  if (ctlFlags & GET_SNAPSHOTS)
+    {
+      Lng32 retcode = 
+        ehi->getLatestSnapshot(extNameForHbase.data(), snapshotName, STMTHEAP);
+      if (retcode < 0)
+        {
+          *CmpCommon::diags()
+            << DgSqlCode(-8448)
+            << DgString0((char*)"ExpHbaseInterface::getLatestSnapshot()")
+            << DgString1(getHbaseErrStr(-retcode))
+            << DgInt0(-retcode)
+            << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
+          delete ehi;
+        }
+    }
+
+  
   tableDesc =
     Generator::createVirtualTableDesc
     (
@@ -10942,73 +11266,43 @@ desc_struct * CmpSeabaseDDL::getSeabaseUserTableDesc(const NAString &catName,
      viewInfoQueue->numEntries(),
      viewInfoArray,
      tableInfo,
-     seqInfo);
-
- // reset the SMD table flag
-  tableDesc->body.table_desc.issystemtablecode = 0;
-
+     seqInfo,
+     endKeyArray,
+     snapshotName,
+     ((ctlFlags & GEN_PACKED_DESC) != 0),
+     &packedDescLen,
+     TRUE /*user table*/);
+  
+  deleteNAArray(heap_, endKeyArray);
+  
   if ( tableDesc ) {
-
-       // request the default
-      ExpHbaseInterface* ehi =CmpSeabaseDDL::allocEHI();
-      if (ehi == NULL) 
-         return NULL;
-      
-      NAArray<HbaseStr>* endKeyArray  = ehi->getRegionEndKeys(extNameForHbase);
-
-      // create a list of region descriptors
-      ((table_desc_struct*)tableDesc)->hbase_regionkey_desc = 
-        assembleDescs(endKeyArray , populateRegionDescAsRANGE, STMTHEAP);
-      deleteNAArray(heap_, endKeyArray);
-
-      // if this is base table or index and hbase object doesn't exist, then this object
-      // is corrupted.
-      if (!objectFlags & SEABASE_OBJECT_IS_EXTERNAL_HIVE &&
-          !objectFlags & SEABASE_OBJECT_IS_EXTERNAL_HBASE)
-        {
-          if ((tableDesc->body.table_desc.objectType == COM_BASE_TABLE_OBJECT) &&
-              (existsInHbase(extNameForHbase, ehi) == 0))
-            {
-              *CmpCommon::diags() << DgSqlCode(-4254)
-                                  << DgString0(*extTableName);
-          
-              tableDesc = NULL;
-          
-              return NULL;
-            }
-        }
-
-      if (ctlFlags & GET_SNAPSHOTS)
+    // if this is base table or index and hbase object doesn't exist,
+    // then this object is corrupted.
+    if (!objectFlags & SEABASE_OBJECT_IS_EXTERNAL_HIVE &&
+        !objectFlags & SEABASE_OBJECT_IS_EXTERNAL_HBASE)
       {
-        char * snapName = NULL;
-        Lng32 retcode = ehi->getLatestSnapshot(extNameForHbase.data(), snapName, STMTHEAP);
-        if (retcode < 0)
-        {
-          *CmpCommon::diags()
-                    << DgSqlCode(-8448)
-                    << DgString0((char*)"ExpHbaseInterface::getLatestSnapshot()")
-                    << DgString1(getHbaseErrStr(-retcode))
-                    << DgInt0(-retcode)
-                    << DgString2((char*)GetCliGlobals()->getJniErrorStr().data());
-          delete ehi;
-        }
-        if (snapName != NULL)
-        {
-          tableDesc->body.table_desc.snapshotName=snapName;
-        }
+        if ((tableDesc->tableDesc()->objectType() == COM_BASE_TABLE_OBJECT) &&
+            (existsInHbase(extNameForHbase, ehi) == 0))
+          {
+            *CmpCommon::diags() << DgSqlCode(-4254)
+                                << DgString0(*extTableName);
+            
+            tableDesc = NULL;
+            
+            return NULL;
+          }
       }
-      //test return code
-      CmpSeabaseDDL::deallocEHI(ehi);
   }
 
-
+  CmpSeabaseDDL::deallocEHI(ehi);
+    
   if (! tableDesc)
     processReturn();
   
   return tableDesc;
 }
 
-desc_struct * CmpSeabaseDDL::getSeabaseTableDesc(const NAString &catName, 
+TrafDesc * CmpSeabaseDDL::getSeabaseTableDesc(const NAString &catName, 
                                                      const NAString &schName, 
                                                      const NAString &objName,
                                                      const ComObjectType objType,
@@ -11030,7 +11324,7 @@ desc_struct * CmpSeabaseDDL::getSeabaseTableDesc(const NAString &catName,
       return NULL;
     }
 
-  desc_struct *tDesc = NULL;
+  TrafDesc *tDesc = NULL;
   NABoolean isMDTable = (isSeabaseMD(catName, schName, objName) || 
                         isSeabasePrivMgrMD(catName, schName));
   if (isMDTable)
@@ -11077,6 +11371,12 @@ desc_struct * CmpSeabaseDDL::getSeabaseTableDesc(const NAString &catName,
         }
       else
         {
+          Int32 ctlFlags = GET_SNAPSHOTS; // get snapshot
+          if ((CmpCommon::getDefault(TRAF_READ_OBJECT_DESC) == DF_ON) &&
+              (!Get_SqlParser_Flags(INTERNAL_QUERY_FROM_EXEUTIL)) &&
+              (NOT includeInvalidDefs))
+            ctlFlags |= READ_OBJECT_DESC;
+
           if (switchCompiler(CmpContextInfo::CMPCONTEXT_TYPE_META))
             return NULL;
 	  switch (objType)
@@ -11088,9 +11388,13 @@ desc_struct * CmpSeabaseDDL::getSeabaseTableDesc(const NAString &catName,
               tDesc = getSeabaseLibraryDesc(catName, schName, objName);
               break;
             default:
+              Int32 packedDescLen = 0;
+
               tDesc = getSeabaseUserTableDesc(catName, schName, objName, 
                                               objType, includeInvalidDefs,
-                                              GET_SNAPSHOTS /* get snapshot */);
+                                              ctlFlags, packedDescLen);
+              break;
+                 
 	  }
           switchBackCompiler();
         }
@@ -11099,57 +11403,15 @@ desc_struct * CmpSeabaseDDL::getSeabaseTableDesc(const NAString &catName,
   return tDesc;
 }
 
-//
-// Produce a list of desc_struct objects. In each object, the body_struct
-// field points at hbase_region_desc. The order of the keyinfo, obtained from
-// org.apache.hadoop.hbase.client.HTable.getEndKey(), is preserved.
-//
-// Allocate space from STMTHEAP, per the call of this function
-// in CmpSeabaseDDL::getSeabaseTableDesc() and the
-// Generator::createVirtualTableDesc() call make before this one that
-// uses STMTPHEAP througout.
-//
-desc_struct* assembleDescs(NAArray<HbaseStr >* keyArray, populateFuncT func, NAMemory* heap)
-{
-   if (keyArray == NULL)
-      return NULL;
-
-   desc_struct *result = NULL;
-   Int32 entries = keyArray->entries();
-   Int32 len = 0;
-   char* buf = NULL;
-
-   for (Int32 i=entries-1; i>=0; i-- ) {
-      len = keyArray->at(i).len;
-      if ( len > 0 ) { 
-         buf = new (heap) char[len];
-         memcpy(buf, keyArray->at(i).val, len); 
-      } else
-         buf = NULL;
-
-      desc_struct* wrapper = NULL;
-      wrapper = new (heap) desc_struct();
-      wrapper->header.OSV = 0; // TBD
-      wrapper->header.OFV = 0; // TBD
-
-      (*func)(buf, len, wrapper, heap);
-
-      wrapper->header.next = result;
-      result = wrapper;
-   }
-
-   return result;
-}
-
 // a wrapper method to getSeabaseRoutineDescInternal so 
 // CmpContext context switching can take place. 
 // getSeabaseRoutineDescInternal prepares and executes
 // several queries on metadata tables
-desc_struct *CmpSeabaseDDL::getSeabaseRoutineDesc(const NAString &catName,
+TrafDesc *CmpSeabaseDDL::getSeabaseRoutineDesc(const NAString &catName,
                                       const NAString &schName,
                                       const NAString &objName)
 {
-   desc_struct *result = NULL;
+   TrafDesc *result = NULL;
 
    if (switchCompiler(CmpContextInfo::CMPCONTEXT_TYPE_META))
      return NULL;
@@ -11162,14 +11424,14 @@ desc_struct *CmpSeabaseDDL::getSeabaseRoutineDesc(const NAString &catName,
 }
 
 
-desc_struct *CmpSeabaseDDL::getSeabaseRoutineDescInternal(const NAString &catName,
+TrafDesc *CmpSeabaseDDL::getSeabaseRoutineDescInternal(const NAString &catName,
                                       const NAString &schName,
                                       const NAString &objName)
 {
   Lng32 retcode = 0;
   Lng32 cliRC = 0;
 
-  desc_struct *result;
+  TrafDesc *result;
   char query[4000];
   char buf[4000];
 
@@ -11338,12 +11600,13 @@ desc_struct *CmpSeabaseDDL::getSeabaseRoutineDescInternal(const NAString &catNam
       return NULL;
     } 
   
-  desc_struct *routine_desc = NULL;
+  TrafDesc *routine_desc = NULL;
   routine_desc = Generator::createVirtualRoutineDesc(
-            objName.data(),
-            routineInfo,
-            numParams,
-            paramsArray);
+       objName.data(),
+       routineInfo,
+       numParams,
+       paramsArray,
+       NULL);
 
   if (routine_desc == NULL)
      processReturn();

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDLview.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLview.cpp b/core/sql/sqlcomp/CmpSeabaseDDLview.cpp
index 3cb7bbb..b423d9b 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLview.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLview.cpp
@@ -53,7 +53,6 @@
 
 #include "ExExeUtilCli.h"
 #include "Generator.h"
-#include "desc.h"
 
 // for privilege checking
 #include "PrivMgrCommands.h"
@@ -941,6 +940,17 @@ void CmpSeabaseDDL::createSeabaseView(
       return;
     }
 
+  if (updateObjectRedefTime(&cliInterface, 
+                            catalogNamePart, schemaNamePart, objectNamePart,
+                            COM_VIEW_OBJECT_LIT, -2, objUID))
+    {
+      deallocEHI(ehi);
+
+      processReturn();
+      
+      return;
+    }
+
   CorrName cn(objectNamePart, STMTHEAP, schemaNamePart, catalogNamePart);
   ActiveSchemaDB()->getNATableDB()->removeNATable
     (cn,

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/DefaultConstants.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/DefaultConstants.h b/core/sql/sqlcomp/DefaultConstants.h
index b274b94..245e4bf 100644
--- a/core/sql/sqlcomp/DefaultConstants.h
+++ b/core/sql/sqlcomp/DefaultConstants.h
@@ -3859,6 +3859,12 @@ enum DefaultConstants
   // if TRUE, create tinyint literal insteadl of smallint.
   TRAF_CREATE_TINYINT_LITERAL,
 
+  // if ON, generate object descriptor during DDL and store it in metadata.
+  TRAF_STORE_OBJECT_DESC,
+
+  // if ON, read object descriptor from metadata, if it was stored.
+  TRAF_READ_OBJECT_DESC,
+
   // This enum constant must be the LAST one in the list; it's a count,
   // not an Attribute (it's not IN DefaultDefaults; it's the SIZE of it)!
   __NUM_DEFAULT_ATTRIBUTES

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/nadefaults.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/nadefaults.cpp b/core/sql/sqlcomp/nadefaults.cpp
index 25c5672..b6311f6 100644
--- a/core/sql/sqlcomp/nadefaults.cpp
+++ b/core/sql/sqlcomp/nadefaults.cpp
@@ -3336,10 +3336,10 @@ XDDkwd__(SUBQUERY_UNNESTING,			"ON"),
   DDansi_(TRAF_CREATE_TABLE_WITH_UID,          ""),
 
   DDkwd__(TRAF_CREATE_TINYINT_LITERAL,        "ON"),   
-
- DDkwd__(TRAF_DEFAULT_COL_CHARSET,            (char *)SQLCHARSETSTRING_ISO88591),
  
- DDkwd__(TRAF_ENABLE_ORC_FORMAT,                 "OFF"),   
+  DDkwd__(TRAF_DEFAULT_COL_CHARSET,            (char *)SQLCHARSETSTRING_ISO88591),
+ 
+  DDkwd__(TRAF_ENABLE_ORC_FORMAT,                 "OFF"),   
 
   DDkwd__(TRAF_INDEX_ALIGNED_ROW_FORMAT,        "ON"),   
   DDkwd__(TRAF_INDEX_CREATE_OPT,          "OFF"),
@@ -3383,10 +3383,14 @@ XDDkwd__(SUBQUERY_UNNESTING,			"ON"),
 
   DDint__(TRAF_NUM_OF_SALT_PARTNS,                     "-1"),
 
+  DDkwd__(TRAF_READ_OBJECT_DESC,                       "OFF"),   
+
   DDkwd__(TRAF_RELOAD_NATABLE_CACHE,                   "OFF"),
   DD_____(TRAF_SAMPLE_TABLE_LOCATION,                  "/sample/"),
   DDint__(TRAF_SEQUENCE_CACHE_SIZE,        "-1"),
 
+  DDkwd__(TRAF_STORE_OBJECT_DESC,                    "OFF"),   
+
   DDkwd__(TRAF_STRING_AUTO_TRUNCATE,      "OFF"),
   DDkwd__(TRAF_STRING_AUTO_TRUNCATE_WARNING,      "OFF"),
 


[02/10] incubator-trafodion git commit: metadata access performance improvement for accessing traf objects

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcat/readRealArk.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcat/readRealArk.cpp b/core/sql/sqlcat/readRealArk.cpp
index 5e04877..e49553c 100644
--- a/core/sql/sqlcat/readRealArk.cpp
+++ b/core/sql/sqlcat/readRealArk.cpp
@@ -22,7 +22,7 @@
  *****************************************************************************
  *
  * File:         readRealArk.C
- * Description:  This module converts SOL based meta-data to desc_struct
+ * Description:  This module converts SOL based meta-data to TrafDesc
  *               based meta-data.
  *
  * Created:      11/20/96
@@ -43,6 +43,7 @@
 #include "CmpStatement.h"	   
 #include "BaseTypes.h"
 #include "readRealArk.h"
+#include "TrafDDLdesc.h"
 
 // Copy a string.  A null terminated buffer is returned.
 // Uses HEAP (StatementHeap) of CmpCommon!
@@ -57,148 +58,59 @@ static char *copyString(const ComString &sourceString,
 
 
 // -----------------------------------------------------------------------
-// Allocate one of the primitive structs and initialize to all zeroes.
-// Uses HEAP (StatementHeap) of CmpCommon!
-// -----------------------------------------------------------------------
-desc_struct *readtabledef_allocate_desc(desc_nodetype nodetype)
-{
-  size_t size = 0;
-
-  switch (nodetype)
-    {
-    case DESC_CHECK_CONSTRNTS_TYPE:
-      size = sizeof(check_constrnts_desc_struct);
-      break;
-    case DESC_COLUMNS_TYPE:
-      size = sizeof(columns_desc_struct);
-      break;
-    case DESC_CONSTRNTS_TYPE:
-      size = sizeof(constrnts_desc_struct);
-      break;
-    case DESC_CONSTRNT_KEY_COLS_TYPE:
-      size = sizeof(constrnt_key_cols_desc_struct);
-      break;
-    case DESC_FILES_TYPE:
-      size = sizeof(files_desc_struct);
-      break;
-    case DESC_HISTOGRAM_TYPE:
-      size = sizeof(histogram_desc_struct);
-      break;
-    case DESC_HIST_INTERVAL_TYPE:
-      size = sizeof(hist_interval_desc_struct);
-      break;
-    case DESC_INDEXES_TYPE:
-      size = sizeof(indexes_desc_struct);
-      break;
-    case DESC_KEYS_TYPE:
-      size = sizeof(keys_desc_struct);
-      break;
-    case DESC_PARTNS_TYPE:
-      size = sizeof(partns_desc_struct);
-      break;
-    case DESC_REF_CONSTRNTS_TYPE:
-      size = sizeof(ref_constrnts_desc_struct);
-      break;
-    case DESC_TABLE_TYPE:
-      size = sizeof(table_desc_struct);
-      break;
-    case DESC_VIEW_TYPE:
-      size = sizeof(view_desc_struct);
-      break;	       
-    case DESC_USING_MV_TYPE:  // MV 
-      size = sizeof(using_mv_desc_struct);
-      break;
-   case DESC_SEQUENCE_GENERATOR_TYPE:   
-      size = sizeof(sequence_generator_desc_struct);
-      break;
-   case DESC_ROUTINE_TYPE:
-      size = sizeof(routine_desc_struct);
-      break;
-   case DESC_LIBRARY_TYPE:
-      size = sizeof(library_desc_struct);
-      break;
-    default:
-      assert(FALSE);
-      break;
-    }
-  // DBG( cerr << "... rtd_allocate_desc " << nodetype << " " << size << " "; )
-
-  size += sizeof(header_desc_struct);
-  char *desc_buf = new HEAP char[size];
-
-  // Note that this puts literal zero bytes into floats and pointer fields,
-  // which are not portably equivalent to (float)0 and (void *)NULL.
-  // This is a better default than not initializing at all, however.
-  memset(desc_buf, 0, size);
-
-  desc_struct *desc_ptr = (desc_struct *)desc_buf;
-  desc_ptr->header.nodetype = nodetype;
-  desc_ptr->header.next     = NULL;                // example of portable initlzn.
-
-  // DBG( cerr << size << " " << desc_ptr << endl; )
-  return desc_ptr;
-
-}
-
-// -----------------------------------------------------------------------
 // Allocate a column_desc and do simple initialization of several fields,
 // based on what's passed in.  Many of the fields we just default,
 // to either hardcoded values or to zero.  The callers,
 // in arkcmplib + generator + optimizer, can set additional fields afterwards.
 // -----------------------------------------------------------------------
-desc_struct *readtabledef_make_column_desc(const char *tablename,
-					   const char *colname,
-					   Lng32 &colnumber,	// INOUT
-					   DataType datatype,
-					   Lng32 length,
-					   Lng32 &offset,	// INOUT
-					   short null_flag,
-					   NABoolean tablenameMustBeAllocated,
-					   desc_struct *passedDesc,
-					   SQLCHARSET_CODE datacharset
-					  )
+TrafDesc *TrafMakeColumnDesc(const char *tablename,
+                                const char *colname,
+                                Lng32 &colnumber,	// INOUT
+                                Int32 datatype,
+                                Lng32 length,
+                                Lng32 &offset,	// INOUT
+                                NABoolean null_flag,
+                                SQLCHARSET_CODE datacharset,
+                                Space * space
+                                )
 {
   #undef  COLUMN
-  #define COLUMN returnDesc->body.columns_desc
+  #define COLUMN returnDesc->columnsDesc()
 
   // Pass in the optional "passedDesc" if you just want to overwrite an
   // already existing desc.
-  desc_struct *returnDesc = passedDesc;
-  if (!returnDesc) returnDesc = readtabledef_allocate_desc(DESC_COLUMNS_TYPE);
+  TrafDesc *returnDesc = 
+    TrafAllocateDDLdesc(DESC_COLUMNS_TYPE, space);
 
-  if (tablenameMustBeAllocated)
-    COLUMN.tablename = copyString(NAString(tablename));
-  else
-    COLUMN.tablename = (char *)tablename;	// just copy the pointer!
+  COLUMN->colname = (char *)colname;
 
-  COLUMN.colname = copyString(colname);
-  COLUMN.colnumber = colnumber;
-  COLUMN.datatype = datatype;
-  COLUMN.length = length;
-  COLUMN.offset = offset;
-  COLUMN.null_flag = null_flag;
+  COLUMN->colnumber = colnumber;
+  COLUMN->datatype = datatype;
+  COLUMN->length = length;
+  COLUMN->offset = offset;
+  COLUMN->setNullable(null_flag);
 
   // Hardcode some fields here.
   // All other fields (scale, precision, etc) default to zero!
 
-  COLUMN.colclass = 'U';
-  COLUMN.defaultClass = COM_NO_DEFAULT;
+  COLUMN->colclass = 'U';
+  COLUMN->setDefaultClass(COM_NO_DEFAULT);
 
   if (DFS2REC::isAnyCharacter(datatype)) {
     if (datacharset == SQLCHARSETCODE_UNKNOWN) {
-    COLUMN.character_set      = CharInfo::DefaultCharSet;
-    COLUMN.encoding_charset   = CharInfo::DefaultCharSet;
+    COLUMN->character_set      = CharInfo::DefaultCharSet;
+    COLUMN->encoding_charset   = CharInfo::DefaultCharSet;
     }
     else {
-    COLUMN.character_set      = (CharInfo::CharSet)datacharset;
-    COLUMN.encoding_charset   = (CharInfo::CharSet)datacharset;
+    COLUMN->character_set      = (CharInfo::CharSet)datacharset;
+    COLUMN->encoding_charset   = (CharInfo::CharSet)datacharset;
     }
-    COLUMN.collation_sequence = CharInfo::DefaultCollation;
+    COLUMN->collation_sequence = CharInfo::DefaultCollation;
     if (DFS2REC::isSQLVarChar(datatype))
       offset += SQL_VARCHAR_HDR_SIZE;
   }
   else {	// datetime, interval, numeric, etc.
-    COLUMN.datetimestart = COLUMN.datetimeend = REC_DATE_UNKNOWN;
+    COLUMN->datetimestart = COLUMN->datetimeend = REC_DATE_UNKNOWN;
   }
 
   colnumber++;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcat/readRealArk.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcat/readRealArk.h b/core/sql/sqlcat/readRealArk.h
index bc70266..cb2867b 100644
--- a/core/sql/sqlcat/readRealArk.h
+++ b/core/sql/sqlcat/readRealArk.h
@@ -24,7 +24,6 @@
 #ifndef READREALARK_H
 #define READREALARK_H
 
-#include "desc.h"
 #include "ComSmallDefs.h"
 #include "ObjectNames.h"
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpDDLCatErrorCodes.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpDDLCatErrorCodes.h b/core/sql/sqlcomp/CmpDDLCatErrorCodes.h
index d79bf2a..25f439c 100644
--- a/core/sql/sqlcomp/CmpDDLCatErrorCodes.h
+++ b/core/sql/sqlcomp/CmpDDLCatErrorCodes.h
@@ -285,6 +285,7 @@ enum CatErrorCode { CAT_FIRST_ERROR = 1000
                   , CAT_COLUMN_WRONG_DEFAULT_TYPE                 = 1295
                   , CAT_COLUMN_MISMATCHED_DEFAULT_TYPES           = 1296
                   , CAT_VOLATILE_SCHEMA_PRESENT                   = 1297
+                  , CAT_UNABLE_TO_ALTER_SCHEMA                    = 1298
 
                   // Restrict and No Action referential action Messages.
                   , CAT_REF_CONSTRAINT_NO_ACTION_NOT_SUPPORTED    = 1301

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpDescribe.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpDescribe.cpp b/core/sql/sqlcomp/CmpDescribe.cpp
index c663fb4..97cd5b5 100644
--- a/core/sql/sqlcomp/CmpDescribe.cpp
+++ b/core/sql/sqlcomp/CmpDescribe.cpp
@@ -96,6 +96,7 @@
 #include "Analyzer.h"
 #include "ComSqlId.h"
 #include "ExExeUtilCli.h"
+#include "TrafDDLdesc.h"
 
 #define CM_SIM_NAME_LEN 32
 
@@ -230,8 +231,8 @@ bool CmpDescribeIsAuthorized(
 
 // ## This only applies to CatSim; remove it!
 #define CONSTRAINT_IS_NAMED(constrdesc) \
-          (constrdesc->body.constrnts_desc.constrntname && \
-          *constrdesc->body.constrnts_desc.constrntname)
+          (constrdesc->constrnts_desc.constrntname && \
+          *constrdesc->constrnts_desc.constrntname)
 
 // Define a shorter synonym.
 #define SpacePrefix     CmpDescribeSpaceCountPrefix
@@ -872,7 +873,7 @@ short CmpDescribe(const char *query, const RelExpr *queryExpr,
       goto finally;  // we are done
     }
 
-  desc_struct *tabledesc = NULL;
+  TrafDesc *tabledesc = NULL;
   if ( ExtendedQualName::isDescribableTableType(tType) )
   {
     *CmpCommon::diags() << DgSqlCode(-4222)
@@ -909,7 +910,7 @@ short CmpDescribe(const char *query, const RelExpr *queryExpr,
       goto finally;
     }
 
-  NAString tableName(tabledesc->body.table_desc.tablename) ;
+  NAString tableName(tabledesc->tableDesc()->tablename) ;
   
   NABoolean external = d->getIsExternal();
   //strip catalog off of table name
@@ -942,7 +943,7 @@ short CmpDescribe(const char *query, const RelExpr *queryExpr,
   buf = new (CmpCommon::statementHeap()) char[LOCAL_BIGBUF_SIZE];
   CMPASSERT(buf);
 
-  desc_struct *viewdesc = tabledesc->body.table_desc.views_desc;
+  TrafDesc *viewdesc = tabledesc->tableDesc()->views_desc;
 
   if (d->getFormat() == Describe::INVOKE_)
     {
@@ -1010,7 +1011,6 @@ short CmpDescribe(const char *query, const RelExpr *queryExpr,
       space.makeContiguous(outbuf, outbuflen);
 
       NADELETEBASIC(buf, CmpCommon::statementHeap());
-      CmpCommon::context()->readTableDef_->deleteTree(tabledesc);
       goto finally;  // we are done and rc is already 0
     }
 
@@ -1060,7 +1060,6 @@ short CmpDescribe(const char *query, const RelExpr *queryExpr,
   Reset_SqlParser_Flags(ALLOW_VOLATILE_SCHEMA_IN_TABLE_NAME);
 
   NADELETEBASIC(buf, CmpCommon::statementHeap());
-  CmpCommon::context()->readTableDef_->deleteTree(tabledesc);
 
  }  // end of try block
 
@@ -3737,7 +3736,7 @@ bool CmpDescribeLibrary(
   ExeCliInterface cliInterface(heap);
         
 
-  desc_struct *tDesc = cmpSBD.getSeabaseLibraryDesc(libCatNamePart, 
+  TrafDesc *tDesc = cmpSBD.getSeabaseLibraryDesc(libCatNamePart, 
                                                     libSchNamePart, 
                                                     libObjNamePart);
   if (tDesc == NULL)
@@ -3748,7 +3747,7 @@ bool CmpDescribeLibrary(
   }
 
 
-  Int64 libraryUID = tDesc->body.library_desc.libraryUID;
+  Int64 libraryUID = tDesc->libraryDesc()->libraryUID;
 
    if (libraryUID <= 0) // does not exist
    {
@@ -3793,7 +3792,7 @@ Space * space = &localSpace;
 char buf[1000];
 
    sprintf(buf,"CREATE LIBRARY %s FILE '%s'",
-           extLibraryName.data(), tDesc->body.library_desc.libraryFilename);
+           extLibraryName.data(), tDesc->libraryDesc()->libraryFilename);
            
    outputShortLine(*space,buf);
    outputShortLine(*space,";");
@@ -3819,8 +3818,8 @@ char buf[1000];
       std::string privilegeText;
       PrivMgrObjectInfo objectInfo (
         libraryUID, extLibraryName.data(),
-        tDesc->body.library_desc.libraryOwnerID,
-        tDesc->body.library_desc.librarySchemaOwnerID,
+        tDesc->libraryDesc()->libraryOwnerID,
+        tDesc->libraryDesc()->librarySchemaOwnerID,
         COM_LIBRARY_OBJECT );
       if (cmpSBD.switchCompiler())
         {

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDL.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDL.h b/core/sql/sqlcomp/CmpSeabaseDDL.h
index a00a7ec..3b583e7 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDL.h
+++ b/core/sql/sqlcomp/CmpSeabaseDDL.h
@@ -40,7 +40,6 @@
 #include "ExpLOBenums.h"
 #include "NADefaults.h"
 #include "NAColumn.h"
-#include "desc.h"
 #include "CmpMessage.h"
 #include "PrivMgrDefs.h"
 #include "PrivMgrMD.h"
@@ -81,6 +80,7 @@ class StmtDDLCreateSequence;
 class StmtDDLDropSequence;
 
 class StmtDDLDropSchema;
+class StmtDDLAlterSchema;
 
 // Classes for user management
 class StmtDDLRegisterUser;
@@ -111,7 +111,7 @@ class NADefaults;
 
 class NAType;
 
-struct desc_struct;
+struct TrafDesc;
 class OutputInfo;
 
 class HbaseCreateOption;
@@ -120,7 +120,7 @@ class Parser;
 
 class NAColumnArray;
 
-struct routine_desc_struct;
+class TrafRoutineDesc;
 struct MDDescsInfo;
 
 class CmpDDLwithStatusInfo;
@@ -232,7 +232,7 @@ class CmpSeabaseDDL
 			  NAString &currCatName, NAString &currSchName,
                           CmpDDLwithStatusInfo *dws = NULL);
 
-  desc_struct * getSeabaseTableDesc(const NAString &catName, 
+  TrafDesc * getSeabaseTableDesc(const NAString &catName, 
 				    const NAString &schName, 
 				    const NAString &objName,
 				    const ComObjectType objType,
@@ -279,12 +279,12 @@ class CmpSeabaseDDL
                                      Int64 objectUID,
                                      ElemDDLHbaseOptions * edhbo);
 
-  desc_struct * getSeabaseLibraryDesc(
+  TrafDesc * getSeabaseLibraryDesc(
      const NAString &catName, 
      const NAString &schName, 
      const NAString &libraryName);
      
-  desc_struct *getSeabaseRoutineDesc(const NAString &catName,
+  TrafDesc *getSeabaseRoutineDesc(const NAString &catName,
                                      const NAString &schName,
                                      const NAString &objName);
   
@@ -334,19 +334,19 @@ class CmpSeabaseDDL
   // The next three methods do use anything from the CmpSeabaseDDL class.
   // They are placed here as a packaging convinience, to avoid code 
   // duplication that would occur if non-member static functions were used.
-  // These methods convert VirtTable*Info classes to corresponding desc_struct
+  // These methods convert VirtTable*Info classes to corresponding TrafDesc
   // objects
   void convertVirtTableColumnInfoToDescStruct( 
        const ComTdbVirtTableColumnInfo * colInfo,
        const ComObjectName * objectName,
-       desc_struct * column_desc);
+       TrafDesc * column_desc);
 
-  desc_struct * convertVirtTableColumnInfoArrayToDescStructs(
+  TrafDesc * convertVirtTableColumnInfoArrayToDescStructs(
      const ComObjectName * objectName,
      const ComTdbVirtTableColumnInfo * colInfoArray,
      Lng32 numCols);
 
-  desc_struct * convertVirtTableKeyInfoArrayToDescStructs(
+  TrafDesc * convertVirtTableKeyInfoArrayToDescStructs(
        const ComTdbVirtTableKeyInfo *keyInfoArray,
        const ComTdbVirtTableColumnInfo *colInfoArray,
        Lng32 numKeys);
@@ -430,7 +430,13 @@ class CmpSeabaseDDL
   
   enum {
     // set if we need to get the hbase snapshot info of the table
-    GET_SNAPSHOTS = 0x0002
+    GET_SNAPSHOTS     = 0x0002,
+
+    // set if descr is to be generated in packed format to be stored in metadata
+    GEN_PACKED_DESC   = 0x0004,
+
+    // set if stored object descriptor is to be read from metadata.
+    READ_OBJECT_DESC  = 0x0008
   };
 
 protected:
@@ -482,7 +488,7 @@ protected:
   void getColName(const char * colFam, const char * colQual,
 		  NAString &colName);
 
-  desc_struct *getSeabaseRoutineDescInternal(const NAString &catName,
+  TrafDesc *getSeabaseRoutineDescInternal(const NAString &catName,
                                              const NAString &schName,
                                              const NAString &objName);
 
@@ -720,13 +726,22 @@ protected:
 			 const char * schName,
 			 const char * objName);
 
+  // retrieved stored desc from metadata, check if it is good,
+  // and set retDesc, if passed in.
+  short checkAndGetStoredObjectDesc(
+       ExeCliInterface *cliInterface,
+       Int64 objUID,
+       TrafDesc* *retDesc);
+
   short updateObjectRedefTime(
                               ExeCliInterface *cliInterface,
                               const NAString &catName,
                               const NAString &schName,
                               const NAString &objName,
                               const char * objType,
-                              Int64 rt = -1);
+                              Int64 rt = -1,
+                              Int64 objUID = -1,
+                              NABoolean force = FALSE);
 
   short updateObjectValidDef(
 			     ExeCliInterface *cliInterface,
@@ -744,6 +759,12 @@ protected:
 			    NABoolean audited,
                             const NAString& objType);
 
+  short updateObjectFlags(
+       ExeCliInterface *cliInterface,
+       const Int64 objUID,
+       const Int64 inFlags,
+       NABoolean reset);
+
   // subID: 0, for text that belongs to table. colNumber, for column based text.
   short updateTextTable(ExeCliInterface *cliInterface,
                         Int64 objUID, 
@@ -752,6 +773,15 @@ protected:
                         NAString &text,
                         NABoolean withDelete = FALSE); // del before ins
 
+  // input data in non-char format.
+  short updateTextTableWithBinaryData(ExeCliInterface *cliInterface,
+                                      Int64 objUID, 
+                                      ComTextType textType, 
+                                      Lng32 subID, 
+                                      char * data,
+                                      Int32 dataLen,
+                                      NABoolean withDelete);
+  
   short deleteFromTextTable(ExeCliInterface *cliInterface,
                             Int64 objUID, 
                             ComTextType textType, 
@@ -764,7 +794,7 @@ protected:
 
   short createEncodedKeysBuffer(char** &encodedKeysBuffer,
                                 int &numSplits,
-				desc_struct * colDescs, desc_struct * keyDescs,
+				TrafDesc * colDescs, TrafDesc * keyDescs,
 				int numSaltPartitions,
                                 Lng32 numSaltSplits,
                                 NAString *splitByClause,
@@ -946,12 +976,14 @@ protected:
                             ExeCliInterface &cliInterface,
                             StmtDDLCreateTable * createTableNode,
                             NAString &currCatName, NAString &currSchName,
-                            NABoolean isCompound = FALSE);
+                            NABoolean isCompound,
+                            Int64 &objUID);
   
   void createSeabaseTable(
 			  StmtDDLCreateTable * createTableNode,
 			  NAString &currCatName, NAString &currSchName,
-                          NABoolean isCompound = FALSE);
+                          NABoolean isCompound = FALSE,
+                          Int64 * retObjUID = NULL);
  
   void createSeabaseTableCompound(
 			  StmtDDLCreateTable                  * createTableNode,
@@ -1012,6 +1044,10 @@ protected:
 			  StmtDDLAlterTableRename                  * renameTableNode,
 			  NAString &currCatName, NAString &currSchName);
 
+  void alterSeabaseTableStoredDesc(
+       StmtDDLAlterTableStoredDesc * alterStoredDesc,
+       NAString &currCatName, NAString &currSchName);
+
   void alterSeabaseTableHBaseOptions(
 			  StmtDDLAlterTableHBaseOptions * hbaseOptionsNode,
 			  NAString &currCatName, NAString &currSchName);
@@ -1227,6 +1263,9 @@ protected:
                                NAString &currCatName, NAString &currSchName);
 
   void dropSeabaseSchema(StmtDDLDropSchema * dropSchemaNode);
+
+  void alterSeabaseSchema(StmtDDLAlterSchema * alterSchemaNode);
+                          
   
   bool dropOneTableorView(
      ExeCliInterface & cliInterface,
@@ -1315,12 +1354,12 @@ protected:
      ComTdbVirtTableTableInfo* &tableInfo
      );
 
-  desc_struct * getSeabaseMDTableDesc(const NAString &catName, 
+  TrafDesc * getSeabaseMDTableDesc(const NAString &catName, 
 				      const NAString &schName, 
 				      const NAString &objName,
 				      const ComObjectType objType);
 
-  desc_struct * getSeabaseHistTableDesc(const NAString &catName, 
+  TrafDesc * getSeabaseHistTableDesc(const NAString &catName, 
 					const NAString &schName, 
 					const NAString &objName);
 
@@ -1333,7 +1372,7 @@ protected:
      Int32 & schemaOwner,
      Int64 & seqUID);
 
-  desc_struct * getSeabaseSequenceDesc(const NAString &catName, 
+  TrafDesc * getSeabaseSequenceDesc(const NAString &catName, 
 				       const NAString &schName, 
 				       const NAString &seqName);
     
@@ -1348,12 +1387,13 @@ protected:
                              Lng32 *numCols,
                              ComTdbVirtTableColumnInfo **colInfoArray);
   
-  desc_struct * getSeabaseUserTableDesc(const NAString &catName, 
+  TrafDesc * getSeabaseUserTableDesc(const NAString &catName, 
 					const NAString &schName, 
 					const NAString &objName,
 					const ComObjectType objType,
 					NABoolean includeInvalidDefs,
-					Int32 ctlFlags);
+					Int32 ctlFlags,
+                                        Int32 &packedDescLen);
  
   static NABoolean getMDtableInfo(const ComObjectName &ansiName,
                                   ComTdbVirtTableTableInfo* &tableInfo,
@@ -1452,7 +1492,4 @@ private:
   NABoolean cmpSwitched_;
 };
 
-desc_struct* assembleDescs(NAArray<HbaseStr>*keyArray, populateFuncT func, NAMemory* heap);
-
-
 #endif // _CMP_SEABASE_DDL_H_

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
index 6b51feb..1a8f16f 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
@@ -71,6 +71,8 @@
 #include "hdfs.h"
 #include "StmtDDLAlterLibrary.h"
 #include "logmxevent_traf.h"
+#include "exp_clause_derived.h"
+#include "TrafDDLdesc.h"
 
 void cleanupLOBDataDescFiles(const char*, int, const char *);
 
@@ -406,29 +408,34 @@ short CmpSeabaseDDL::convertColAndKeyInfoArrays(
     {
       ComTdbVirtTableColumnInfo &ci = btColInfoArray[i];
 
-      columns_desc_struct column_desc;
-      column_desc.datatype = ci.datatype;
-      column_desc.length = ci.length;
-      column_desc.precision = ci.precision;
-      column_desc.scale = ci.scale;
-      column_desc.null_flag = ci.nullable;
-      column_desc.character_set/*CharInfo::CharSet*/ 
+      Lng32 colnum, offset;
+      TrafDesc * desc = 
+        TrafMakeColumnDesc(NULL, NULL, colnum, ci.datatype, ci.length,
+                           offset, ci.nullable, ci.charset, NULL);
+      TrafColumnsDesc *column_desc = desc->columnsDesc();
+      
+      column_desc->datatype = ci.datatype;
+      column_desc->length = ci.length;
+      column_desc->precision = ci.precision;
+      column_desc->scale = ci.scale;
+      column_desc->setNullable(ci.nullable);
+      column_desc->character_set/*CharInfo::CharSet*/ 
         = (CharInfo::CharSet)ci.charset;
-      column_desc.upshift = ci.upshifted;
-      column_desc.caseinsensitive = 0;
-      column_desc.collation_sequence = CharInfo::DefaultCollation;
-      column_desc.encoding_charset = (CharInfo::CharSet)ci.charset;
+      column_desc->setUpshifted(ci.upshifted);
+      column_desc->setCaseInsensitive(FALSE);
+      column_desc->collation_sequence = CharInfo::DefaultCollation;
+      column_desc->encoding_charset = (CharInfo::CharSet)ci.charset;
 
-      column_desc.datetimestart = (rec_datetime_field)ci.dtStart;
-      column_desc.datetimeend = (rec_datetime_field)ci.dtEnd;
-      column_desc.datetimefractprec = ci.scale;
+      column_desc->datetimestart = (rec_datetime_field)ci.dtStart;
+      column_desc->datetimeend = (rec_datetime_field)ci.dtEnd;
+      column_desc->datetimefractprec = ci.scale;
 
-      column_desc.intervalleadingprec = ci.precision;
-      column_desc.defaultClass = ci.defaultClass;
-      column_desc.colFlags = ci.colFlags;
+      column_desc->intervalleadingprec = ci.precision;
+      column_desc->setDefaultClass(ci.defaultClass);
+      column_desc->colFlags = ci.colFlags;
 
       NAType *type;
-      NAColumn::createNAType(&column_desc, NULL, type, STMTHEAP);
+      NAColumn::createNAType(column_desc, NULL, type, STMTHEAP);
 
       NAColumn * nac = new(STMTHEAP) NAColumn(ci.colName, i, type, STMTHEAP);
       naColArray->insert(nac);
@@ -5302,13 +5309,79 @@ short CmpSeabaseDDL::deleteConstraintInfoFromSeabaseMDTables(
   return 0;
 }
 
+short CmpSeabaseDDL::checkAndGetStoredObjectDesc(
+     ExeCliInterface *cliInterface,
+     Int64 objUID,
+     TrafDesc* *retDesc)
+{
+  Lng32 cliRC = 0;
+
+  NAString packedDesc;
+  cliRC = getTextFromMD(
+       cliInterface, objUID, COM_STORED_DESC_TEXT, 0, packedDesc);
+  if (cliRC < 0)
+    {
+      *CmpCommon::diags() << DgSqlCode(-4493)
+                          << DgString0("Error reading from metadata.");
+      
+      processReturn();
+      return -1;
+    }
+  
+  if (packedDesc.length() == 0)
+    {
+      // stored desc doesn't exist
+      *CmpCommon::diags() << DgSqlCode(-4493)
+                          << DgString0("Does not exist. It needs to be regenerated.");
+      
+      processReturn();
+      return -2;
+    }
+  
+  char * descBuf = new(STMTHEAP) char[packedDesc.length()];
+  str_cpy_all(descBuf, packedDesc.data(), packedDesc.length());
+  
+  TrafDesc * desc = (TrafDesc*)descBuf;
+  TrafDesc dummyDesc;
+  desc = (TrafDesc*)desc->driveUnpack((void*)desc, &dummyDesc, NULL);
+  
+  if (! desc)
+    {
+      NADELETEBASIC(descBuf, STMTHEAP);
+
+      // error during unpack. Desc need to be regenerated.
+      *CmpCommon::diags() << DgSqlCode(-4493)
+                          << DgString0("Error during unpacking due to change in stored structures. It needs to be regenerated.");
+      
+      processReturn();
+      return -3;
+    }
+  
+  // all good
+  *CmpCommon::diags() << DgSqlCode(4493)
+                      << DgString0("Uptodate and current.");
+
+  if (retDesc)
+    *retDesc = desc;
+  else
+    NADELETEBASIC(descBuf, STMTHEAP);
+
+  return 0;
+}
+
+// rt = -1, generate redef time. rt = -2, dont update redef time.
+// otherwise use provided redef time.
+//
+// Also generate and update object descriptor in metadata.
 short CmpSeabaseDDL::updateObjectRedefTime(
                                          ExeCliInterface *cliInterface,
                                          const NAString &catName,
                                          const NAString &schName,
                                          const NAString &objName,
                                          const char * objType,
-                                         Int64 rt)
+                                         Int64 rt,
+                                         Int64 objUID,
+                                         NABoolean force)
 {
   Lng32 retcode = 0;
   Lng32 cliRC = 0;
@@ -5322,11 +5395,66 @@ short CmpSeabaseDDL::updateObjectRedefTime(
   NAString quotedObjName;
   ToQuotedString(quotedObjName, NAString(objName), FALSE);
 
-  str_sprintf(buf, "update %s.\"%s\".%s set redef_time = %Ld where catalog_name = '%s' and schema_name = '%s' and object_name = '%s' and object_type = '%s' ",
-              getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_OBJECTS,
-              redefTime,
-              catName.data(), quotedSchName.data(), quotedObjName.data(),
-              objType);
+  Int64 flags = 0;
+  if (((CmpCommon::getDefault(TRAF_STORE_OBJECT_DESC) == DF_ON) ||
+       (force)) &&
+      (objUID > 0) &&
+      (NOT isSeabaseReservedSchema(catName, schName)) &&
+      ((strcmp(objType, COM_BASE_TABLE_OBJECT_LIT) == 0) ||
+       (strcmp(objType, COM_VIEW_OBJECT_LIT) == 0)))
+    {
+      Int32 ctlFlags = GEN_PACKED_DESC | GET_SNAPSHOTS;
+      Int32 packedDescLen = 0;
+      TrafDesc * ds = 
+        getSeabaseUserTableDesc(catName, schName, objName,
+                                (strcmp(objType, COM_BASE_TABLE_OBJECT_LIT) == 0
+                                 ? COM_BASE_TABLE_OBJECT : COM_VIEW_OBJECT),
+                                FALSE, ctlFlags, packedDescLen);
+      if (! ds)
+        {
+          processReturn();
+          return -1;
+        }
+
+      cliRC = updateTextTableWithBinaryData
+        (cliInterface, objUID, 
+         COM_STORED_DESC_TEXT, 0,
+         (char*)ds, packedDescLen, 
+         TRUE /*delete existing data*/);
+      if (cliRC < 0)
+        {
+          processReturn();
+          return -1;
+        }
+      
+      CmpSeabaseDDL::setMDflags(flags, MD_OBJECTS_STORED_DESC);
+    }
+
+  if ((flags & MD_OBJECTS_STORED_DESC) != 0)
+    {
+      if (rt == -2)
+        str_sprintf(buf, "update %s.\"%s\".%s set flags = bitor(flags, %Ld) where catalog_name = '%s' and schema_name = '%s' and object_name = '%s' and object_type = '%s' ", 
+                    getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_OBJECTS,
+                    flags,
+                    catName.data(), quotedSchName.data(), quotedObjName.data(),
+                    objType);
+      else
+        str_sprintf(buf, "update %s.\"%s\".%s set redef_time = %Ld, flags = bitor(flags, %Ld) where catalog_name = '%s' and schema_name = '%s' and object_name = '%s' and object_type = '%s' ",
+                    getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_OBJECTS,
+                    redefTime,
+                    flags,
+                    catName.data(), quotedSchName.data(), quotedObjName.data(),
+                    objType);
+    }
+  else
+    {
+      str_sprintf(buf, "update %s.\"%s\".%s set redef_time = %Ld where catalog_name = '%s' and schema_name = '%s' and object_name = '%s' and object_type = '%s' ",
+                  getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_OBJECTS,
+                  redefTime,
+                  catName.data(), quotedSchName.data(), quotedObjName.data(),
+                  objType);
+    }
+
   cliRC = cliInterface->executeImmediate(buf);
   
   if (cliRC < 0)
@@ -5334,7 +5462,7 @@ short CmpSeabaseDDL::updateObjectRedefTime(
       cliInterface->retrieveSQLDiagnostics(CmpCommon::diags());
       return -1;
     }
-
+  
   return 0;
 }
 
@@ -5436,6 +5564,40 @@ short CmpSeabaseDDL::updateObjectAuditAttr(
   return 0;
 }
 
+short CmpSeabaseDDL::updateObjectFlags(
+     ExeCliInterface *cliInterface,
+     const Int64 objUID,
+     const Int64 inFlags,
+     NABoolean reset)
+{
+  Lng32 retcode = 0;
+  Lng32 cliRC = 0;
+  
+  char buf[4000];
+  
+  Int64 flags = inFlags;
+  if (reset)
+    flags = ~inFlags;
+
+  if (reset)
+    str_sprintf(buf, "update %s.\"%s\".%s set flags = bitand(flags, %Ld) where object_uid = %Ld",
+                getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_OBJECTS,
+                flags, objUID);
+  else
+    str_sprintf(buf, "update %s.\"%s\".%s set flags = bitor(flags, %Ld) where object_uid = %Ld",
+                getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_OBJECTS,
+                flags, objUID);
+  cliRC = cliInterface->executeImmediate(buf);
+  if (cliRC < 0)
+    {
+      cliInterface->retrieveSQLDiagnostics(CmpCommon::diags());
+      
+      return -1;
+    }
+  
+  return 0;
+}
+
 void CmpSeabaseDDL::cleanupObjectAfterError(
                                             ExeCliInterface &cliInterface,
                                             const NAString &catName, 
@@ -6019,6 +6181,93 @@ short CmpSeabaseDDL::updateTextTable(ExeCliInterface *cliInterface,
   return 0;
 }
 
+short CmpSeabaseDDL::updateTextTableWithBinaryData
+(ExeCliInterface *cliInterface,
+ Int64 objUID, 
+ ComTextType textType, 
+ Lng32 subID, 
+ char * inputData,
+ Int32 inputDataLen,
+ NABoolean withDelete)
+{
+  Lng32 cliRC = 0;
+  if (withDelete)
+    {
+      // Note: It might be tempting to try an upsert instead of a
+      // delete followed by an insert, but this won't work. It is
+      // possible that the metadata text could shrink and take fewer
+      // rows in its new form than the old. So we do the simple thing
+      // to avoid such complications.
+      cliRC = deleteFromTextTable(cliInterface, objUID, textType, subID);
+      if (cliRC < 0)
+        {
+          return -1;
+        }
+    }
+
+  // convert input data to utf8 first.
+  ComDiagsArea * diagsArea = CmpCommon::diags();
+  char * inputDataUTF8 = new(STMTHEAP) char[inputDataLen*4];
+  Lng32 inputDataLenUTF8 = 0;
+  ex_expr::exp_return_type rc =
+    convDoIt(inputData,
+             inputDataLen,
+             REC_BYTE_F_ASCII,
+             0,
+             (Int32)CharInfo::ISO88591,
+             inputDataUTF8,
+             inputDataLen*4,
+             REC_BYTE_V_ASCII,
+             inputDataLen,
+             (Int32)CharInfo::UTF8,
+             (char*)&inputDataLenUTF8,
+             sizeof(Lng32),
+             STMTHEAP,
+             &diagsArea,
+             CONV_ASCII_F_V);
+  if ((rc != ex_expr::EXPR_OK) ||
+      (inputDataLenUTF8 <= 0))
+    {
+      return -1;
+    }
+  
+  Int32 maxLen = TEXTLEN;
+  char queryBuf[1000];
+  Lng32 numRows = (inputDataLenUTF8 / maxLen) + 1;
+  Lng32 currPos = 0;
+  Int32 currDataLen = 0;
+
+  for (Lng32 i = 0; i < numRows; i++)
+    {
+      NAString temp;
+
+      if (i < numRows-1)
+        currDataLen = maxLen;
+      else
+        currDataLen = inputDataLenUTF8 - currPos;
+
+      str_sprintf(queryBuf, "insert into %s.\"%s\".%s values (%Ld, %d, %d, %d, 0, cast(? as char(%d bytes) character set utf8 not null))",
+                  getSystemCatalog(), SEABASE_MD_SCHEMA, SEABASE_TEXT,
+                  objUID,
+                  textType,
+                  subID,
+                  i,
+                  currDataLen);
+      cliRC = cliInterface->executeImmediateCEFC
+        (queryBuf, &inputData[currPos], currDataLen, NULL, NULL, NULL);
+      
+      if (cliRC < 0)
+        {
+          cliInterface->retrieveSQLDiagnostics(CmpCommon::diags());
+          return -1;
+        }
+
+      currPos += maxLen;
+    }
+
+  return 0;
+}
+
 short CmpSeabaseDDL::deleteFromTextTable(ExeCliInterface *cliInterface,
                                          Int64 objUID, 
                                          ComTextType textType, 
@@ -6457,8 +6706,8 @@ short CmpSeabaseDDL::validateDivisionByExprForDDL(ItemExpr *divExpr)
 
 short CmpSeabaseDDL::createEncodedKeysBuffer(char** &encodedKeysBuffer,
                                              int &numSplits,
-                                             desc_struct * colDescs, 
-                                             desc_struct * keyDescs,
+                                             TrafDesc * colDescs, 
+                                             TrafDesc * keyDescs,
                                              int numSaltPartitions,
                                              Lng32 numSaltSplits,
                                              NAString *splitByClause,
@@ -8209,9 +8458,9 @@ short CmpSeabaseDDL::truncateHbaseTable(const NAString &catalogNamePart,
   Lng32 keyLength = naf->getKeyLength();
   char ** encodedKeysBuffer = NULL;
 
-  const desc_struct * tableDesc = naTable->getTableDesc();
-  desc_struct * colDescs = tableDesc->body.table_desc.columns_desc; 
-  desc_struct * keyDescs = (desc_struct*)naf->getKeysDesc();
+  TrafDesc * tableDesc = (TrafDesc*)naTable->getTableDesc();
+  TrafDesc * colDescs = tableDesc->tableDesc()->columns_desc; 
+  TrafDesc * keyDescs = (TrafDesc*)naf->getKeysDesc();
 
   if (createEncodedKeysBuffer(encodedKeysBuffer/*out*/,
                               numSplits/*out*/,
@@ -8857,6 +9106,13 @@ short CmpSeabaseDDL::executeSeabaseDDL(DDLExpr * ddlExpr, ExprNode * ddlNode,
           renameSeabaseTable(alterRenameTable,
                                   currCatName, currSchName);
         }
+     else if (ddlNode->getOperatorType() == DDL_ALTER_TABLE_STORED_DESC)
+        {
+          StmtDDLAlterTableStoredDesc * alterStoredDesc =
+            ddlNode->castToStmtDDLNode()->castToStmtDDLAlterTableStoredDesc();
+
+          alterSeabaseTableStoredDesc(alterStoredDesc, currCatName, currSchName);
+        }
      else if (ddlNode->getOperatorType() == DDL_ALTER_TABLE_ALTER_HBASE_OPTIONS)
         {
           StmtDDLAlterTableHBaseOptions * athbo =
@@ -9001,6 +9257,13 @@ short CmpSeabaseDDL::executeSeabaseDDL(DDLExpr * ddlExpr, ExprNode * ddlNode,
           
           dropSeabaseSchema(dropSchemaParseNode);
         }
+      else if (ddlNode->getOperatorType() == DDL_ALTER_SCHEMA)
+        {
+          StmtDDLAlterSchema * alterSchemaParseNode =
+            ddlNode->castToStmtDDLNode()->castToStmtDDLAlterSchema();
+          
+          alterSeabaseSchema(alterSchemaParseNode);
+        }
       else if (ddlNode->getOperatorType() == DDL_CREATE_LIBRARY)
         {
           // create seabase library

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDLincludes.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLincludes.h b/core/sql/sqlcomp/CmpSeabaseDDLincludes.h
index 80fed40..2743bdd 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLincludes.h
+++ b/core/sql/sqlcomp/CmpSeabaseDDLincludes.h
@@ -40,6 +40,7 @@
 #include "StmtDDLCreateTable.h"
 #include "StmtDDLDropTable.h"
 #include "StmtDDLAlterTableRename.h"
+#include "StmtDDLAlterTableStoredDesc.h"
 #include "StmtDDLCreateIndex.h"
 #include "StmtDDLPopulateIndex.h"
 #include "StmtDDLDropIndex.h"
@@ -86,7 +87,6 @@
 
 #include "ExExeUtilCli.h"
 #include "Generator.h"
-#include "desc.h"
 
 #include "ComCextdecs.h"
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDLindex.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLindex.cpp b/core/sql/sqlcomp/CmpSeabaseDDLindex.cpp
index 718934a..9234c66 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLindex.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLindex.cpp
@@ -58,7 +58,6 @@
 
 #include "ExExeUtilCli.h"
 #include "Generator.h"
-#include "desc.h"
 
 #include "ComCextdecs.h"
 #include "ComUser.h"
@@ -556,6 +555,8 @@ void CmpSeabaseDDL::createSeabaseIndex( StmtDDLCreateIndex * createIndexNode,
       return;
     }
 
+  Int64 btObjUID = naTable->objectUid().castToInt64();
+
   NAString &indexColFam = naTable->defaultColFam();
   NAString trafColFam;
   if (indexColFam != SEABASE_DEFAULT_COL_FAMILY)
@@ -859,11 +860,11 @@ void CmpSeabaseDDL::createSeabaseIndex( StmtDDLCreateIndex * createIndexNode,
   char ** encodedKeysBuffer = NULL;
   if (numSplits > 0) {
 
-    desc_struct * colDescs = 
+    TrafDesc * colDescs = 
       convertVirtTableColumnInfoArrayToDescStructs(&tableName,
                                                    colInfoArray,
                                                    totalColCount) ;
-    desc_struct * keyDescs = 
+    TrafDesc * keyDescs = 
       convertVirtTableKeyInfoArrayToDescStructs(keyInfoArray,
                                                 colInfoArray,
                                                 keyColCount) ;
@@ -1027,7 +1028,7 @@ void CmpSeabaseDDL::createSeabaseIndex( StmtDDLCreateIndex * createIndexNode,
 
   if (updateObjectRedefTime(&cliInterface,
                             btCatalogNamePart, btSchemaNamePart, btObjectNamePart,
-                            COM_BASE_TABLE_OBJECT_LIT))
+                            COM_BASE_TABLE_OBJECT_LIT, -1, btObjUID))
     {
       goto label_error_drop_index;
     }
@@ -1244,7 +1245,7 @@ void CmpSeabaseDDL::populateSeabaseIndex(
   // Create a table descriptor that contains information on both valid and
   // invalid indexes. Pass that to getNATable method which will use this
   // table desc to create the NATable struct.
-  desc_struct * tableDesc = 
+  TrafDesc * tableDesc = 
     getSeabaseTableDesc(
 		      tableName.getCatalogNamePart().getInternalName(),
 		      tableName.getSchemaNamePart().getInternalName(),
@@ -1698,7 +1699,7 @@ void CmpSeabaseDDL::dropSeabaseIndex(
 
   if (updateObjectRedefTime(&cliInterface,
                             btCatName, btSchName, btObjName,
-                            COM_BASE_TABLE_OBJECT_LIT))
+                            COM_BASE_TABLE_OBJECT_LIT, -1, btUID))
     {
       processReturn();
 
@@ -1819,10 +1820,10 @@ void CmpSeabaseDDL::alterSeabaseTableDisableOrEnableIndex(
   Int32 btObjOwner = 0;
   Int32 btSchemaOwner = 0;
   Int64 btObjectFlags = 0;
-  if ((getObjectInfo(&cliInterface,
-                     btCatName, btSchName, btObjName, 
-                     COM_BASE_TABLE_OBJECT,
-                     btObjOwner, btSchemaOwner, btObjectFlags)) < 0)
+  if ((btUID = getObjectInfo(&cliInterface,
+                             btCatName, btSchName, btObjName, 
+                             COM_BASE_TABLE_OBJECT,
+                             btObjOwner, btSchemaOwner, btObjectFlags, btUID)) < 0)
     {
       processReturn();
 
@@ -1850,6 +1851,15 @@ void CmpSeabaseDDL::alterSeabaseTableDisableOrEnableIndex(
       return;
     }
 
+  if (updateObjectRedefTime(&cliInterface,
+                            btCatName, btSchName, btObjName,
+                            COM_BASE_TABLE_OBJECT_LIT, -1, btUID))
+    {
+      processReturn();
+
+      return;
+    }
+
   // remove NATable for the base table of this index
   CorrName cn(btObjName, STMTHEAP, btSchName, btCatName);
   ActiveSchemaDB()->getNATableDB()->removeNATable
@@ -2148,6 +2158,16 @@ void CmpSeabaseDDL::alterSeabaseIndexHBaseOptions(
       return;
     }
 
+  if (updateObjectRedefTime(&cliInterface,
+                            btCatName, btSchName, btObjName,
+                            COM_BASE_TABLE_OBJECT_LIT, -1, btUID))
+    {
+      deallocEHI(ehi);
+      processReturn();
+
+      return;
+    }
+
   // invalidate cached NATable info on this table for all users
 
   ActiveSchemaDB()->getNATableDB()->removeNATable

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDLmd.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLmd.h b/core/sql/sqlcomp/CmpSeabaseDDLmd.h
index 83d72c5..e9d6a6f 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLmd.h
+++ b/core/sql/sqlcomp/CmpSeabaseDDLmd.h
@@ -245,10 +245,15 @@ enum SeabaseObjectsFlags {
   SEABASE_OBJECT_IS_EXTERNAL_HIVE  = 0x0000000000000001, // set if this object
                                                          // references external
                                                          // HIVE table
-  SEABASE_OBJECT_IS_EXTERNAL_HBASE  = 0x0000000000000002 // set if this object
+  SEABASE_OBJECT_IS_EXTERNAL_HBASE = 0x0000000000000002, // set if this object
                                                          // references external
                                                          // HBASE table
+  
+  // descriptor was generated for this table and is stored in TEXT table
+  MD_OBJECTS_STORED_DESC           = 0x0000000000000004,
 
+  // stored descriptor is disabled, should not be used
+  MD_OBJECTS_DISABLE_STORED_DESC   = 0x0000000000000008
 };
 
 static const QString seabaseRefConstraintsDDL[] =

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp b/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp
index e2f891f..d6996a6 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp
@@ -60,7 +60,6 @@
 
 #include "ExExeUtilCli.h"
 #include "Generator.h"
-#include "desc.h"
 #include "ComSmallDefs.h"
 #include "CmpDDLCatErrorCodes.h"
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp b/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp
index 03a700e..b914961 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLschema.cpp
@@ -39,6 +39,7 @@
 #include "CmpSeabaseDDLincludes.h"
 #include "StmtDDLCreateSchema.h"
 #include "StmtDDLDropSchema.h"
+#include "StmtDDLAlterSchema.h"
 #include "StmtDDLGive.h"
 #include "ElemDDLColDefault.h"
 #include "NumericType.h"
@@ -971,6 +972,251 @@ label_error:
 
 // *****************************************************************************
 // *                                                                           *
+// * Function: CmpSeabaseDDL::alterSeabaseSchema                                *
+// *                                                                           *
+// *    Implements the ALTER SCHEMA command.                                    *
+// *                                                                           *
+// *****************************************************************************
+// *                                                                           *
+// *  Parameters:                                                              *
+// *                                                                           *
+// *  <alterSchemaNode>                StmtDDLAlterSchema *             In       *
+// *    is a pointer to a create schema parser node.                           *
+// *                                                                           *
+// *****************************************************************************
+void CmpSeabaseDDL::alterSeabaseSchema(StmtDDLAlterSchema * alterSchemaNode)
+   
+{
+   Lng32 cliRC = 0;
+
+   ComSchemaName schemaName(alterSchemaNode->getSchemaName());
+   NAString catName = schemaName.getCatalogNamePartAsAnsiString();
+   ComAnsiNamePart schNameAsComAnsi = schemaName.getSchemaNamePart();
+   NAString schName = schNameAsComAnsi.getInternalName();
+   ComObjectName objName(catName,schName,NAString("dummy"),COM_TABLE_NAME,TRUE);
+
+   ExeCliInterface cliInterface(STMTHEAP, NULL, NULL, 
+                                CmpCommon::context()->sqlSession()->getParentQid());
+   Int32 objectOwnerID = 0;
+   Int32 schemaOwnerID = 0;
+   ComObjectType objectType;
+
+   bool isVolatile = (memcmp(schName.data(),"VOLATILE_SCHEMA",strlen("VOLATILE_SCHEMA")) == 0);
+   int32_t length = 0;
+   int32_t rowCount = 0;
+   bool someObjectsCouldNotBeAltered = false;
+   char errorObjs[1010];
+   Queue * objectsQueue = NULL;
+   Queue * otherObjectsQueue = NULL;
+
+   NABoolean dirtiedMetadata = FALSE;
+   Int32 checkErr = 0;
+
+   StmtDDLAlterTableStoredDesc::AlterStoredDescType sdo = 
+     alterSchemaNode->getStoredDescOperation();
+
+   errorObjs[0] = 0;
+
+   Int64 schemaUID = getObjectTypeandOwner(&cliInterface,catName.data(),schName.data(),
+                               SEABASE_SCHEMA_OBJECTNAME,objectType,schemaOwnerID);
+   
+   // if schemaUID == -1, then either the schema does not exist or an unexpected error occurred
+   if (schemaUID == -1)
+   {
+      // If an error occurred, return
+      if (CmpCommon::diags()->getNumber(DgSqlCode::ERROR_) > 0)
+          goto label_error;
+ 
+      // A Trafodion schema does not exist if the schema object row is not
+      // present: CATALOG-NAME.SCHEMA-NAME.__SCHEMA__.
+      *CmpCommon::diags() << DgSqlCode(-CAT_SCHEMA_DOES_NOT_EXIST_ERROR)
+                          << DgSchemaName(schemaName.getExternalName().data());
+      goto label_error;
+   }
+
+   if (!isDDLOperationAuthorized(SQLOperation::DROP_SCHEMA,
+                                 schemaOwnerID,schemaOwnerID))
+   {
+      *CmpCommon::diags() << DgSqlCode(-CAT_NOT_AUTHORIZED);
+      goto label_error;
+   }
+
+   if ((isSeabaseReservedSchema(objName) ||
+        (schName == SEABASE_SYSTEM_SCHEMA)) &&
+       !Get_SqlParser_Flags(INTERNAL_QUERY_FROM_EXEUTIL))
+   {
+      *CmpCommon::diags() << DgSqlCode(-CAT_USER_CANNOT_DROP_SMD_SCHEMA)
+                          << DgSchemaName(schemaName.getExternalName().data());
+      goto label_error;
+   }
+
+   // Can't alter a schema whose name begins with VOLATILE_SCHEMA unless the 
+   // keyword VOLATILE was specified in the ALTER SCHEMA command. 
+   if (isVolatile && !alterSchemaNode->isVolatile())
+   {
+      *CmpCommon::diags() << DgSqlCode(-CAT_RESERVED_METADATA_SCHEMA_NAME)
+                          << DgTableName(schName);
+      goto label_error;
+   }
+
+   if (alterSchemaNode->isDropAllTables())
+     {
+       // should not reach here, is transformed to DropSchema during parsing
+       *CmpCommon::diags() << DgSqlCode(-3242)
+                           << DgString0("Should not reach here. Should have been transformed to DropSchema during parsing.");
+      goto label_error;
+     }
+
+   if (alterSchemaNode->isRenameSchema())
+     {
+       // Not yet supported
+       *CmpCommon::diags() << DgSqlCode(-3242)
+                           << DgString0("Cannot rename a schema.");
+      goto label_error;
+     }
+
+   if (NOT alterSchemaNode->isAlterStoredDesc())
+     {
+       // unsupported option
+       *CmpCommon::diags() << DgSqlCode(-3242)
+                           << DgString0("Unsupported option specified.");
+      goto label_error;
+     }
+
+   // Get a list of all objects in the schema, excluding the schema object itself.
+   char query[4000];
+
+   // select objects in the schema to alter
+   str_sprintf(query,"SELECT distinct TRIM(object_name), TRIM(object_type), object_uid "
+                     "FROM %s.\"%s\".%s "
+                     "WHERE catalog_name = '%s' AND schema_name = '%s' AND "
+                     "object_name <> '"SEABASE_SCHEMA_OBJECTNAME"' AND "
+                     "(object_type = 'BT' OR "
+                     " object_type = 'VI') "
+                     "FOR READ COMMITTED ACCESS",
+               getSystemCatalog(),SEABASE_MD_SCHEMA,SEABASE_OBJECTS,
+               (char*)catName.data(),(char*)schName.data());
+  
+   cliRC = cliInterface.fetchAllRows(objectsQueue, query, 0, FALSE, FALSE, TRUE);
+   if (cliRC < 0)
+   {
+      cliInterface.retrieveSQLDiagnostics(CmpCommon::diags());
+      goto label_error;
+   }
+
+   objectsQueue->position();
+   for (int idx = 0; idx < objectsQueue->numEntries(); idx++)
+     {
+       OutputInfo * vi = (OutputInfo*)objectsQueue->getNext(); 
+
+       NAString objName = vi->get(0);
+       NAString objType = vi->get(1);
+       Int64 objUID = *(Int64*)vi->get(2);
+       
+       if (sdo == StmtDDLAlterTableStoredDesc::GENERATE)
+         {
+           cliRC = 
+             updateObjectRedefTime(&cliInterface, 
+                                   getSystemCatalog(), schName, objName,
+                                   COM_BASE_TABLE_OBJECT_LIT,
+                                   -1, objUID, TRUE);
+           if (cliRC < 0)
+             {
+               // append error and move on to next one
+               appendErrorObjName(errorObjs, objName);
+               someObjectsCouldNotBeAltered = true;               
+
+               CmpCommon::diags()->clear();
+             }
+         }
+       else if (sdo == StmtDDLAlterTableStoredDesc::DELETE)
+         {
+           cliRC = deleteFromTextTable
+             (&cliInterface, objUID, COM_STORED_DESC_TEXT, 0);
+           if (cliRC < 0)
+             {
+               // append error and move on to next one
+               appendErrorObjName(errorObjs, objName);
+               someObjectsCouldNotBeAltered = true;  
+
+               CmpCommon::diags()->clear();
+             }    
+           
+         } // delete stored desc
+       else if (sdo == StmtDDLAlterTableStoredDesc::ENABLE)
+         {
+           Int64 flags = MD_OBJECTS_DISABLE_STORED_DESC;
+           cliRC = updateObjectFlags(&cliInterface, objUID, flags, TRUE);
+           if (cliRC < 0)
+             {
+               appendErrorObjName(errorObjs, objName);
+               someObjectsCouldNotBeAltered = true;  
+
+               CmpCommon::diags()->clear();
+             }    
+         }
+       else if (sdo == StmtDDLAlterTableStoredDesc::DISABLE)
+         {
+           Int64 flags = MD_OBJECTS_DISABLE_STORED_DESC;
+           cliRC = updateObjectFlags(&cliInterface, objUID, flags, FALSE);
+           if (cliRC < 0)
+             {
+               appendErrorObjName(errorObjs, objName);
+               someObjectsCouldNotBeAltered = true;  
+
+               CmpCommon::diags()->clear();
+             }    
+         }
+       else if (sdo == StmtDDLAlterTableStoredDesc::CHECK)
+         {
+           cliRC = checkAndGetStoredObjectDesc(&cliInterface, objUID, NULL);
+           CmpCommon::diags()->clear();
+           if (cliRC < 0)
+             {
+               checkErr = cliRC;
+               appendErrorObjName(errorObjs, objName);
+               someObjectsCouldNotBeAltered = true;  
+             }    
+         }
+       
+     } // for
+
+   if (someObjectsCouldNotBeAltered)
+     {
+       NAString reason;
+       if (sdo == StmtDDLAlterTableStoredDesc::CHECK)
+         {
+           reason = "Reason: Following objects failed stored descriptor check";
+           if (checkErr == -1)
+             reason += " (object could not be accessed) ";
+           else if (checkErr == -2)
+             reason += " (object does not exist) ";
+           else if (checkErr == -3)
+             reason += " (change in stored structures) ";
+           reason += ": ";
+           reason += errorObjs;
+         }
+       else 
+         reason = "Reason: Some objects could not be accessed in schema " 
+           + schName + ". ObjectsInSchema: " 
+           + errorObjs;
+       *CmpCommon::diags() << DgSqlCode(-CAT_UNABLE_TO_ALTER_SCHEMA)
+                           << DgSchemaName(catName + "." + schName)
+                           << DgString0(reason);
+       goto label_error;
+     }
+
+  // Everything succeeded, return
+  return;
+    
+label_error:
+  return;
+}
+//****************** End of CmpSeabaseDDL::alterSeabaseSchema *****************
+
+
+// *****************************************************************************
+// *                                                                           *
 // * Function: CmpSeabaseDDL::giveSeabaseSchema                                *
 // *                                                                           *
 // *    Implements the GIVE SCHEMA command.                                    *


[09/10] incubator-trafodion git commit: added missing file to git

Posted by an...@apache.org.
added missing file to git


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/15f78779
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/15f78779
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/15f78779

Branch: refs/heads/master
Commit: 15f78779da2fd94e6d7a4020a7e57b9d0ccbb495
Parents: 19c96b1
Author: Anoop Sharma <an...@esgyn.com>
Authored: Tue Aug 2 20:30:19 2016 +0000
Committer: Anoop Sharma <an...@esgyn.com>
Committed: Tue Aug 2 20:30:19 2016 +0000

----------------------------------------------------------------------
 core/sql/parser/StmtDDLAlterTableStoredDesc.h | 102 +++++++++++++++++++++
 1 file changed, 102 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/15f78779/core/sql/parser/StmtDDLAlterTableStoredDesc.h
----------------------------------------------------------------------
diff --git a/core/sql/parser/StmtDDLAlterTableStoredDesc.h b/core/sql/parser/StmtDDLAlterTableStoredDesc.h
new file mode 100644
index 0000000..9f6f757
--- /dev/null
+++ b/core/sql/parser/StmtDDLAlterTableStoredDesc.h
@@ -0,0 +1,102 @@
+/**********************************************************************
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+// @@@ END COPYRIGHT @@@
+**********************************************************************/
+#ifndef STMTDDLALTERTABLESTOREDDESC_H
+#define STMTDDLALTERTABLESTOREDDESC_H
+/* -*-C++-*-
+ *****************************************************************************
+ *
+ * File:         StmtDDLAlterTableStoredDesc.h
+ * Description:  
+ *   Alter Table <table-name> [generate|delete|enable|disable] stored descriptor
+ *               DDL statements
+ *
+ *               
+ * Created:      7/26/2016
+ * Language:     C++
+ *
+ *****************************************************************************
+ */
+
+
+#include "StmtDDLAlterTable.h"
+
+// -----------------------------------------------------------------------
+// contents of this file
+// -----------------------------------------------------------------------
+class StmtDDLAlterTableStoredDesc;
+
+// -----------------------------------------------------------------------
+// forward references
+// -----------------------------------------------------------------------
+// None.
+
+// -----------------------------------------------------------------------
+// definition of class StmtDDLAlterTableStoredDesc
+// -----------------------------------------------------------------------
+class StmtDDLAlterTableStoredDesc : public StmtDDLAlterTable
+{
+
+public:
+  enum AlterStoredDescType
+    {
+      CHECK,
+      GENERATE,
+      DELETE,
+      ENABLE,
+      DISABLE
+    };
+
+  // constructor
+  StmtDDLAlterTableStoredDesc(const AlterStoredDescType type)
+  : StmtDDLAlterTable(DDL_ALTER_TABLE_STORED_DESC),
+    type_(type)
+  {}
+
+  // virtual destructor
+  virtual ~StmtDDLAlterTableStoredDesc()
+  {}
+
+  // cast
+  virtual StmtDDLAlterTableStoredDesc * castToStmtDDLAlterTableStoredDesc()
+  { return this; }
+
+  // accessors
+  AlterStoredDescType getType() { return type_; }
+
+  // method for tracing
+  virtual const NAString getText() const
+  {
+    return "StmtDDLAlterTableStoredDesc";
+  }
+
+private:
+
+  AlterStoredDescType type_;
+
+}; // class StmtDDLAlterTableStoredDesc
+
+// -----------------------------------------------------------------------
+// definitions of inline methods for class StmtDDLAlterTableStoredDesc
+// -----------------------------------------------------------------------
+
+#endif // STMTDDLALTERTABLESTOREDDESC_H


[08/10] incubator-trafodion git commit: metadata access performance improvement for accessing traf objects

Posted by an...@apache.org.
metadata access performance improvement for accessing traf objects

Packed version of descriptor structures is now stored in traf TEXT
table during various DDL operations.
During dml, if packed descriptors exist, then they are read and used.
If they dont exist, then descriptors are generated on the fly.

Descriptor classes are defined in file sqlcat/TrafDDLdesc.h and
are based off the older desc structures from desc.h.
These are simplified and class'ified version of the older structures
and are versioned. Changes to these classes should be done carefully
by either using filler bytes or versioning them.

2 new cqds, traf_store_object_descriptor and traf_read_object_descriptor,
are added to control if packed descs should be stored/read.
These are currently set to OFF by default but are enabled during
regressions run. Once this feature is tested, these cqds will be turned
on by default.

In addition, some helper commands have been added to manipulate descrs.
Syntax:
 alter table t [check|generate|delete|disable|enable] stored descritors

If authorization is enabled, then auth/priv specific info
is generated on the fly and currently not stored in metadata.
In a later checkin, these will also be stored in metadata.


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/19c96b1e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/19c96b1e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/19c96b1e

Branch: refs/heads/master
Commit: 19c96b1ec830f7b340854b37d8b5e6fea72554fd
Parents: 2d7a91f
Author: Anoop Sharma <an...@esgyn.com>
Authored: Tue Aug 2 19:46:35 2016 +0000
Committer: Anoop Sharma <an...@esgyn.com>
Committed: Tue Aug 2 19:46:35 2016 +0000

----------------------------------------------------------------------
 core/sql/arkcmp/CmpStoredProc.cpp               |   96 +-
 core/sql/arkcmp/CmpStoredProc.h                 |   21 +-
 core/sql/bin/SqlciErrors.txt                    |    3 +-
 core/sql/common/CmpCommon.h                     |    1 +
 core/sql/common/ComSmallDefs.h                  |    3 +-
 core/sql/common/OperTypeEnum.h                  |    2 +
 core/sql/generator/GenExplain.cpp               |   99 +-
 core/sql/generator/GenPreCode.cpp               |    4 +-
 core/sql/generator/GenRelExeUtil.cpp            |   43 +-
 core/sql/generator/GenRelMisc.cpp               |  129 +-
 core/sql/generator/GenRelScan.cpp               |   41 +-
 core/sql/generator/GenUdr.cpp                   |    4 +-
 core/sql/generator/Generator.cpp                |  782 ++++---
 core/sql/generator/Generator.h                  |   78 +-
 core/sql/nskgmake/sqlcat/Makefile               |    1 +
 core/sql/optimizer/BindItemExpr.cpp             |    7 +-
 core/sql/optimizer/BindRI.cpp                   |   28 +-
 core/sql/optimizer/BindRelExpr.cpp              |   97 +-
 core/sql/optimizer/BindWA.h                     |    6 +-
 core/sql/optimizer/EncodedKeyValue.cpp          |   77 +-
 core/sql/optimizer/EncodedKeyValue.h            |   21 +-
 core/sql/optimizer/ItemConstr.h                 |    5 +-
 core/sql/optimizer/NAColumn.cpp                 |  192 +-
 core/sql/optimizer/NAColumn.h                   |    4 +-
 core/sql/optimizer/NAFileSet.cpp                |    2 +-
 core/sql/optimizer/NAFileSet.h                  |   10 +-
 core/sql/optimizer/NARoutine.cpp                |   66 +-
 core/sql/optimizer/NARoutine.h                  |    2 +-
 core/sql/optimizer/NATable.cpp                  | 2067 +++++++++---------
 core/sql/optimizer/NATable.h                    |   14 +-
 core/sql/optimizer/RelExeUtil.cpp               |   24 +-
 core/sql/optimizer/RelExeUtil.h                 |   20 +-
 core/sql/optimizer/RelMisc.h                    |    2 +-
 core/sql/optimizer/RelRoutine.cpp               |   15 +-
 core/sql/optimizer/RelRoutine.h                 |   28 +-
 core/sql/optimizer/RelScan.h                    |   10 +-
 core/sql/optimizer/RelStoredProc.cpp            |    2 +-
 core/sql/optimizer/ValueDesc.cpp                |    7 +-
 core/sql/parser/AllStmtDDL.h                    |    1 +
 core/sql/parser/AllStmtDDLAlterTable.h          |    1 +
 core/sql/parser/BindStmtDDL.cpp                 |   31 +
 core/sql/parser/ElemDDLNode.cpp                 |   12 +
 core/sql/parser/ElemDDLNode.h                   |    4 +
 core/sql/parser/StmtDDLAlter.cpp                |   91 +
 core/sql/parser/StmtDDLAlterSchema.h            |  177 ++
 core/sql/parser/sqlparser.y                     |   80 +-
 core/sql/regress/executor/EXPECTED013.SB        |    2 +
 core/sql/regress/executor/TEST122               |    6 +
 core/sql/regress/fullstack2/EXPECTED062         |    6 +
 core/sql/regress/fullstack2/EXPECTED062.RELEASE |    6 +
 core/sql/regress/hive/EXPECTED018               |  187 +-
 core/sql/regress/hive/TEST018                   |    3 +
 core/sql/regress/seabase/EXPECTED031            |  270 ++-
 core/sql/regress/seabase/TEST031                |   48 +-
 core/sql/regress/tools/sbdefs                   |    2 +
 core/sql/sqlcat/ReadTableDef.cpp                |  404 ----
 core/sql/sqlcat/ReadTableDef.h                  |   17 -
 core/sql/sqlcat/TrafDDLdesc.cpp                 |  617 ++++++
 core/sql/sqlcat/TrafDDLdesc.h                   | 1120 ++++++++++
 core/sql/sqlcat/desc.h                          |  473 +---
 core/sql/sqlcat/readRealArk.cpp                 |  146 +-
 core/sql/sqlcat/readRealArk.h                   |    1 -
 core/sql/sqlcomp/CmpDDLCatErrorCodes.h          |    1 +
 core/sql/sqlcomp/CmpDescribe.cpp                |   23 +-
 core/sql/sqlcomp/CmpSeabaseDDL.h                |   85 +-
 core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp        |  323 ++-
 core/sql/sqlcomp/CmpSeabaseDDLincludes.h        |    2 +-
 core/sql/sqlcomp/CmpSeabaseDDLindex.cpp         |   40 +-
 core/sql/sqlcomp/CmpSeabaseDDLmd.h              |    7 +-
 core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp       |    1 -
 core/sql/sqlcomp/CmpSeabaseDDLschema.cpp        |  246 +++
 core/sql/sqlcomp/CmpSeabaseDDLtable.cpp         |  731 +++++--
 core/sql/sqlcomp/CmpSeabaseDDLview.cpp          |   12 +-
 core/sql/sqlcomp/DefaultConstants.h             |    6 +
 core/sql/sqlcomp/nadefaults.cpp                 |   10 +-
 75 files changed, 5829 insertions(+), 3376 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/arkcmp/CmpStoredProc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/arkcmp/CmpStoredProc.cpp b/core/sql/arkcmp/CmpStoredProc.cpp
index 0df7813..bd44e9b 100644
--- a/core/sql/arkcmp/CmpStoredProc.cpp
+++ b/core/sql/arkcmp/CmpStoredProc.cpp
@@ -41,7 +41,7 @@
 #define SQLPARSERGLOBALS_NADEFAULTS
 
 #include "CmpStoredProc.h"
-#include "desc.h"
+#include "TrafDDLdesc.h"
 #include "parser.h"
 #include "str.h"
 
@@ -273,7 +273,7 @@ NABoolean CmpSPOutputFormat::SetFormat(Lng32 nCols,
   nCols_ = nCols;
   // set up tableDesc_, allocate the storage from allocate routine,
   // so the delete of the tableDesc_ could be done correctly. 
-  // As in sqlcat/desc.h readtabledef_allocate_desc(), allocate routine gets 
+  // As in sqlcat/desc.h TrafAllocateDDLdesc(), allocate routine gets 
   // the storage from HEAP ( i.e. CmpCommon::statementHeap() ). 
   // Likewise, copyString should be the same implementation as in 
   // readRealArk.cpp. It was externalized originally, but being put as
@@ -281,44 +281,43 @@ NABoolean CmpSPOutputFormat::SetFormat(Lng32 nCols,
   // in the beginning of the file. ( which will allocate the memory from
   // statementHeap ).
 
-  desc_struct* table_desc = readtabledef_allocate_desc(DESC_TABLE_TYPE);
+  TrafDesc* table_desc = TrafAllocateDDLdesc(DESC_TABLE_TYPE, NULL);
   tableDesc_ = table_desc;
 
   char* objName = copyString(NAString(tableName));
-  table_desc->body.table_desc.tablename = objName;
+  table_desc->tableDesc()->tablename = objName;
 
-  table_desc->body.table_desc.record_length = 0; // to be set later in generator.
-  table_desc->body.table_desc.colcount = (Int32)nCols;
+  table_desc->tableDesc()->record_length = 0; // to be set later in generator.
+  table_desc->tableDesc()->colcount = (Int32)nCols;
 
-  desc_struct * files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  table_desc->body.table_desc.files_desc = files_desc;
-  files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
+  TrafDesc * files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL);
+  table_desc->tableDesc()->files_desc = files_desc;
   
-  // populate the columns_desc_struct
-  desc_struct* prev_col_desc = 0;
-  desc_struct* first_col_desc =  0;
+  // populate the TrafColumnsDesc
+  TrafDesc* prev_col_desc = 0;
+  TrafDesc* first_col_desc =  0;
   for ( Int32 i=0; i < nCols; i++ )
     {
-      desc_struct* column_desc = readtabledef_allocate_desc(DESC_COLUMNS_TYPE);
+      TrafDesc* column_desc = TrafAllocateDDLdesc(DESC_COLUMNS_TYPE, NULL);
       if (prev_col_desc)
-	 prev_col_desc->header.next = column_desc;
+	 prev_col_desc->next = column_desc;
       else
 	 first_col_desc = column_desc;
       prev_col_desc = column_desc;
-      if ( !getColumnDesc( &(fields[i]), &(column_desc->body.columns_desc) ) ) 
+      if ( !getColumnDesc( &(fields[i]), (column_desc->columnsDesc())))
 	{
 	  *(context_->diags()) << DgSqlCode(arkcmpErrorISPFieldDef);
 	  tableDesc_ = 0; // since HEAP is from statement heap, it will
 	  // be removed automatically at the end of statement.
 	  return FALSE;
         }
-      column_desc->body.columns_desc.colnumber = i;      
+      column_desc->columnsDesc()->colnumber = i;      
     }
 
-  table_desc->body.table_desc.columns_desc = first_col_desc;
+  table_desc->tableDesc()->columns_desc = first_col_desc;
 
   // populate index_desc and key_desc
-  desc_struct* keys_desc = 0;
+  TrafDesc* keys_desc = 0;
   if ( !getKeysDesc( nKeys, keys, keys_desc) )
      {
        *(context_->diags()) << DgSqlCode(arkcmpErrorISPFieldDef);
@@ -326,24 +325,23 @@ NABoolean CmpSPOutputFormat::SetFormat(Lng32 nCols,
        return FALSE;
      }
 
-  desc_struct * index_desc = readtabledef_allocate_desc(DESC_INDEXES_TYPE);
-  index_desc->body.indexes_desc.tablename = objName;
-  index_desc->body.indexes_desc.indexname = objName;
-  index_desc->body.indexes_desc.keytag = 0; // primary index
-  index_desc->body.indexes_desc.record_length = 
-    table_desc->body.table_desc.record_length;
-  index_desc->body.indexes_desc.colcount =
-    table_desc->body.table_desc.colcount;
-  index_desc->body.indexes_desc.blocksize = 4096; // anything > 0
+  TrafDesc * index_desc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, NULL);
+  index_desc->indexesDesc()->tablename = objName;
+  index_desc->indexesDesc()->indexname = objName;
+  index_desc->indexesDesc()->keytag = 0; // primary index
+  index_desc->indexesDesc()->record_length = 
+    table_desc->tableDesc()->record_length;
+  index_desc->indexesDesc()->colcount =
+    table_desc->tableDesc()->colcount;
+  index_desc->indexesDesc()->blocksize = 4096; // anything > 0
 
   // cannot simply point to same files desc as the table one,
   // because then ReadTableDef::deleteTree frees same memory twice (error)
-  desc_struct * i_files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  index_desc->body.indexes_desc.files_desc = i_files_desc;
-  i_files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
+  TrafDesc * i_files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL);
+  index_desc->indexesDesc()->files_desc = i_files_desc;
 
-  index_desc->body.indexes_desc.keys_desc  = keys_desc;
-  table_desc->body.table_desc.indexes_desc = index_desc;       
+  index_desc->indexesDesc()->keys_desc  = keys_desc;
+  table_desc->tableDesc()->indexes_desc = index_desc;       
 
   return TRUE;
 }
@@ -353,7 +351,7 @@ CmpSPOutputFormat::~CmpSPOutputFormat()
 }
 
 NABoolean CmpSPOutputFormat::getColumnDesc(SP_FIELDDESC_STRUCT* fDesc, 
-					   columns_desc_struct* colsDesc )
+					   TrafColumnsDesc* colsDesc )
 {
   ElemDDLColDef* elemDDL;
   
@@ -363,7 +361,7 @@ NABoolean CmpSPOutputFormat::getColumnDesc(SP_FIELDDESC_STRUCT* fDesc,
     {
       // convert ElemDDLColViewDef into CatColumn, then column_desc
       if ( !ElemDDLColDef2ColumnDescStruct
-	   (elemDDL, tableDesc_->body.table_desc.tablename, colsDesc) )
+	   (elemDDL, tableDesc_->tableDesc()->tablename, colsDesc) )
 	return FALSE;      
     }
   
@@ -372,23 +370,23 @@ NABoolean CmpSPOutputFormat::getColumnDesc(SP_FIELDDESC_STRUCT* fDesc,
 
 NABoolean CmpSPOutputFormat::getKeysDesc(Lng32 nKeys, 
 				  SP_KEYDESC_STRUCT* keys, 
-				  desc_struct* &keysDesc)
+				  TrafDesc* &keysDesc)
 {
   // key is not supported yet in FCS ( Sep. 97 release ) needs to rework on this.
-  desc_struct* prev_key_desc = 0;
-  desc_struct* first_key_desc = 0;
+  TrafDesc* prev_key_desc = 0;
+  TrafDesc* first_key_desc = 0;
   for ( Int32 i=0; i < nKeys; i++ )
   {
-    desc_struct* key_desc = readtabledef_allocate_desc(DESC_KEYS_TYPE);
+    TrafDesc* key_desc = TrafAllocateDDLdesc(DESC_KEYS_TYPE, NULL);
     if (prev_key_desc)
-      prev_key_desc->header.next = key_desc;
+      prev_key_desc->next = key_desc;
     else
       first_key_desc = key_desc;
     prev_key_desc = key_desc;
-    key_desc->body.keys_desc.keyseqnumber = i;
+    key_desc->keysDesc()->keyseqnumber = i;
     // TODO, find out the tablecolnumber from column name ????
-    key_desc->body.keys_desc.tablecolnumber = 0;
-    key_desc->body.keys_desc.ordering = 0; // ?????
+    key_desc->keysDesc()->tablecolnumber = 0;
+    key_desc->keysDesc()->setDescending(FALSE);
   }
   keysDesc = first_key_desc;
   return TRUE;
@@ -400,18 +398,18 @@ NABoolean CmpSPOutputFormat::getKeysDesc(Lng32 nKeys,
 NABoolean CmpSPOutputFormat::ElemDDLColDef2ColumnDescStruct
   (ElemDDLColDef* elem,
   const char* tableName,
-  columns_desc_struct* colDesc)
+  TrafColumnsDesc* colDesc)
 {
   // Just copy the pointer for this name --
   // no need to alloc + strcpy a la copyString
-  colDesc->tablename = (char *)tableName;
+  //  colDesc->tablename = (char *)tableName;
 
   colDesc->colname = copyString(elem->getColumnName());
 
   // colDesc->colnumber, filled outside
   
   NAType* genericType = elem->getColumnDataType();  
-  colDesc->datatype = (DataType) genericType->getFSDatatype();
+  colDesc->datatype = genericType->getFSDatatype();
   colDesc->length = genericType->getNominalSize();
   colDesc->pictureText = (char *)emptyString;
 
@@ -451,7 +449,7 @@ NABoolean CmpSPOutputFormat::ElemDDLColDef2ColumnDescStruct
       colDesc->character_set	  = charType.getCharSet();
       colDesc->encoding_charset	  = charType.getEncodingCharSet();
       colDesc->collation_sequence = charType.getCollation();
-      colDesc->upshift		  = charType.isUpshifted();
+      colDesc->setUpshifted(charType.isUpshifted());
     }
 
   if ( genericType->getTypeQualifier() == NA_DATETIME_TYPE ||
@@ -468,12 +466,10 @@ NABoolean CmpSPOutputFormat::ElemDDLColDef2ColumnDescStruct
   
   // offset, to be done (do we need it?)
 
-  colDesc->null_flag = NOT elem->isNotNullConstraintSpecified();
+  colDesc->setNullable(NOT elem->isNotNullConstraintSpecified());
   
   colDesc->colclass = 'U';
-  colDesc->addedColumn = 0;
-  colDesc->uec = (Cardinality)0;
-  colDesc->highval = colDesc->lowval = 0;
+  colDesc->setAdded(FALSE);
   
   // defaultclass, to be done? (not referenced, not needed)
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/arkcmp/CmpStoredProc.h
----------------------------------------------------------------------
diff --git a/core/sql/arkcmp/CmpStoredProc.h b/core/sql/arkcmp/CmpStoredProc.h
index df0ad68..90d281a 100644
--- a/core/sql/arkcmp/CmpStoredProc.h
+++ b/core/sql/arkcmp/CmpStoredProc.h
@@ -47,8 +47,7 @@
 
 // for the table descriptions
 #include "enum.h"
-#include "desc.h"
-
+#include "CmpCommon.h"
 #include "Collections.h"  // for NAList
 #include "Int64.h"
 
@@ -73,6 +72,8 @@ class CmpISPDataObject; // the data object for internal stored procedure executi
 class ElemDDLColDef;
 class ItemExpr;
 class CmpMessageISPRequest;
+class TrafDesc;
+class TrafColumnsDesc;
 
 // -----------------------------------------------------------------------
 // CmpSPInputFormat class contains the definition of input data for the
@@ -133,34 +134,34 @@ public:
     );
   
   // generate the table_desc for binder, this method will create the
-  // desc_struct for the virtual table. The memory is allocated from 
+  // TrafDesc for the virtual table. The memory is allocated from 
   // sqlcat/read.C allocate routine, i.e. HEAP defined in common/CmpCommon.h
   // The memory allocated belongs to the caller, 
   // the caller should delete it accordingly.
-  desc_struct* tableDesc() { return tableDesc_; }
+  TrafDesc* tableDesc() { return tableDesc_; }
   
   NABoolean ValidTableFormat() { return !tableDesc_ ; }
 
-  // static function to convert an ElemDDLColDef into columns_desc_struct
+  // static function to convert an ElemDDLColDef into TrafColumnsDesc
   // return TRUE if success, FALSE if not.
   static NABoolean ElemDDLColDef2ColumnDescStruct(ElemDDLColDef* elemDDL,
     const char* tableName,
-    columns_desc_struct* colDesc);
+    TrafColumnsDesc* colDesc);
 
 private:
 
-  // output format is described as a table_desc_struct
-  desc_struct* tableDesc_;
+  // output format is described as TrafTableDesc
+  TrafDesc* tableDesc_;
   Lng32 nCols_;
   CmpContext* context_;
 
   // methods to pupulate column_desc from SP_FIELDDESC_STRUCT
   // return TRUE : success, FALSE : fail
   NABoolean getColumnDesc(SP_FIELDDESC_STRUCT* fDesc,
-    columns_desc_struct* colsDesc);
+    TrafColumnsDesc* colsDesc);
   
   NABoolean getKeysDesc(Lng32 nkeys, SP_KEYDESC_STRUCT* keys, 
-    desc_struct* &keysDesc);
+    TrafDesc* &keysDesc);
 
   CmpSPOutputFormat(const CmpSPOutputFormat&);
   const CmpSPOutputFormat& operator=(const CmpSPOutputFormat&);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/bin/SqlciErrors.txt
----------------------------------------------------------------------
diff --git a/core/sql/bin/SqlciErrors.txt b/core/sql/bin/SqlciErrors.txt
index 88ea933..f21cf09 100644
--- a/core/sql/bin/SqlciErrors.txt
+++ b/core/sql/bin/SqlciErrors.txt
@@ -290,7 +290,7 @@
 1295 ZZZZZ 99999 BEGINNER MAJOR DBADMIN Target column $0~ColumnName has mismatching default type.    
 1296 ZZZZZ 99999 BEGINNER MAJOR DBADMIN Character data type of target column and literal are different.    
 1297 ZZZZZ 99999 BEGINNER MAJOR DBADMIN The $0~string0 command cannot be executed because volatile schema $1~string1 exists.
-1298 ZZZZZ 99999 UUUUUUUU UUUUU UUUUUUU ----- Msg used in Trafodion ------
+1298 ZZZZZ 99999 BEGINNER MINOR DBADMIN Schema $0~SchemaName could not be altered. $0~String0
 1299 ZZZZZ 99999 BEGINNER MAJOR DBADMIN You cannot specify some columns with just the name and others with name & data attributes.
 1300 ZZZZZ 99999 ADVANCED MAJOR DIALOUT Catman generated unknown Exception for procedure $0~TableName.
 1301 ZZZZZ 99999 BEGINNER MAJOR DBADMIN NO ACTION referential action for $0~string0 clause is not yet supported as specified by ANSI SQL99 standard. To alter the behavior, set an appropriate value for the REF_CONSTRAINT_NO_ACTION_LIKE_RESTRICT default.
@@ -1433,6 +1433,7 @@ $1~String1 --------------------------------
 4490 ZZZZZ 99999 BEGINNER MINOR LOGONLY BULK LOAD into a salted table is not supported if ESP parallelism is turned off. 
 4491 42000 99999 BEGINNER MINOR LOGONLY The user does not have $0~string0 privilege on sequence $1~string1$2~string2.
 4492 ZZZZZ 99999 BEGINNER MINOR LOGONLY BULK LOAD option UPDATE STATISTICS cannot be used with UPSERT USING LOAD option.
+4493 ZZZZZ 99999 BEGINNER MINOR LOGONLY Stored Descriptor Status: $0~String0
 5000 ZZZZZ 99999 ADVANCED MAJOR DBADMIN Internal error in the query normalizer.
 6000 ZZZZZ 99999 ADVANCED MAJOR DBADMIN Internal error in the query optimizer.
 6001 0A000 99999 BEGINNER MAJOR DBADMIN DISTINCT aggregates can be computed for only one column per table expression.

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/common/CmpCommon.h
----------------------------------------------------------------------
diff --git a/core/sql/common/CmpCommon.h b/core/sql/common/CmpCommon.h
index a8a5db9..91716b9 100644
--- a/core/sql/common/CmpCommon.h
+++ b/core/sql/common/CmpCommon.h
@@ -131,6 +131,7 @@ public:
   #define CTXTHEAP	(CmpCommon::contextHeap())
   #define STMTHEAP	(CmpCommon::statementHeap())
   #define HEAP		STMTHEAP			// the commonest case
+
   static NAMemory * contextHeap();
   static NAHeap * statementHeap();
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/common/ComSmallDefs.h
----------------------------------------------------------------------
diff --git a/core/sql/common/ComSmallDefs.h b/core/sql/common/ComSmallDefs.h
index cf06803..5a25b62 100644
--- a/core/sql/common/ComSmallDefs.h
+++ b/core/sql/common/ComSmallDefs.h
@@ -641,7 +641,8 @@ enum ComTextType {COM_VIEW_TEXT = 0,
                   COM_TABLE_COMMENT_TEXT = 3,
                   COM_COMPUTED_COL_TEXT = 4,
                   COM_HBASE_COL_FAMILY_TEXT = 5,
-                  COM_HBASE_SPLIT_TEXT = 6
+                  COM_HBASE_SPLIT_TEXT = 6,
+                  COM_STORED_DESC_TEXT = 7
 };
 
 enum ComColumnDirection { COM_UNKNOWN_DIRECTION

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/common/OperTypeEnum.h
----------------------------------------------------------------------
diff --git a/core/sql/common/OperTypeEnum.h b/core/sql/common/OperTypeEnum.h
index b37e315..9dcbd6a 100644
--- a/core/sql/common/OperTypeEnum.h
+++ b/core/sql/common/OperTypeEnum.h
@@ -828,6 +828,7 @@ enum OperatorTypeEnum {
                         DDL_FIRST_STMT_OP = DDL_FIRST_DDL_OP,
                         DDL_ALTER_AUDIT_CONFIG,
                         DDL_ALTER_CATALOG,
+                        DDL_ALTER_SCHEMA,
                         DDL_ALTER_INDEX_ATTRIBUTE,
                         DDL_ALTER_INDEX_ALTER_HBASE_OPTIONS,
                         DDL_ALTER_LIBRARY,
@@ -850,6 +851,7 @@ enum OperatorTypeEnum {
                         DDL_ALTER_TABLE_MOVE,
                         DDL_ALTER_TABLE_PARTITION,
                         DDL_ALTER_TABLE_RENAME,
+                        DDL_ALTER_TABLE_STORED_DESC,
                         DDL_ALTER_TABLE_SET_CONSTRAINT,
                         DDL_ALTER_TABLE_DROPPABLE,
                         DDL_ALTER_TABLE_INSERT_ONLY,

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/GenExplain.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenExplain.cpp b/core/sql/generator/GenExplain.cpp
index 42a29df..eeed24b 100644
--- a/core/sql/generator/GenExplain.cpp
+++ b/core/sql/generator/GenExplain.cpp
@@ -63,6 +63,7 @@
 #include "StmtDDLCreateTable.h"
 #include "StmtDDLCreateIndex.h"
 #include "ComDistribution.h"
+#include "TrafDDLdesc.h"
 
 
 void RelExpr::addExplainPredicates(ExplainTupleMaster * explainTuple,
@@ -1350,6 +1351,21 @@ static NABoolean isInternalCQD(DefaultConstants attr)
   else
     return FALSE;
 }
+
+// explain root displays user specified cqds.
+// Some cqds are disabled or enabled in regress/tools/sbdefs during 
+// regressions run. That can cause explain plan diffs.
+// Specify those cqds in these methods so they are not displayed.
+// This method is only called during regressions run.
+static NABoolean displayDuringRegressRun(DefaultConstants attr)
+{
+  if ((attr == TRAF_READ_OBJECT_DESC) ||
+      (attr == TRAF_STORE_OBJECT_DESC))
+    return FALSE;
+  else
+    return TRUE;
+}
+
 ExplainTuple *
 RelRoot::addSpecificExplainInfo(ExplainTupleMaster *explainTuple,
 				ComTdb * tdb,
@@ -1357,12 +1373,14 @@ RelRoot::addSpecificExplainInfo(ExplainTupleMaster *explainTuple,
 {
   NAString statement;
 
+  NABoolean sqlmxRegress = (getenv("SQLMX_REGRESS") != NULL);
+
   // if regressions are running and this explain is for a DDL, then
   // do not return root specific explain info. This is done to avoid
   // differences in root explain information during regression runs 
   // on different systems.
   if ((child(0) && child(0)->castToRelExpr()->getOperatorType() == REL_DDL) &&
-      (getenv("SQLMX_REGRESS") != NULL))
+      (sqlmxRegress))
       //      (val = ActiveControlDB()->getControlSessionValue("EXPLAIN")) &&
       //      (*val == "ON"))
     {  
@@ -1576,7 +1594,8 @@ RelRoot::addSpecificExplainInfo(ExplainTupleMaster *explainTuple,
   for (CollIndex i = 0; i < cdb->getCQDList().entries(); i++)
   {
     ControlQueryDefault * cqd = cdb->getCQDList()[i];
-    if ((NOT isInternalCQD(cqd->getAttrEnum())) && !cqd->reset())
+    if ((NOT isInternalCQD(cqd->getAttrEnum())) && (!cqd->reset()) &&
+        (sqlmxRegress && displayDuringRegressRun(cqd->getAttrEnum())))
     {
       statement += cqd->getToken().data();
       statement += ": ";
@@ -2077,7 +2096,7 @@ const char * ExplainFunc::getVirtualTableName()
 //{ return "EXPLAIN__"; }
 {return getVirtualTableNameStr();}
 
-desc_struct * ExplainFunc::createVirtualTableDesc()
+TrafDesc * ExplainFunc::createVirtualTableDesc()
 {
   // Create a descriptor for this 'virtual' table called EXPLAIN__.
   // The table has 14 columns:
@@ -2098,20 +2117,17 @@ desc_struct * ExplainFunc::createVirtualTableDesc()
   //
   //
 
-  // readtabledef_allocate_desc() requires that HEAP (STMTHEAP) be used for new
+  // TrafAllocateDDLdesc() requires that HEAP (STMTHEAP) be used for new
 
-  desc_struct *tableDesc = readtabledef_allocate_desc(DESC_TABLE_TYPE);
+  TrafDesc *tableDesc = TrafAllocateDDLdesc(DESC_TABLE_TYPE, NULL);
   const char  *tableName = getVirtualTableName();
-  tableDesc->body.table_desc.tablename = new HEAP char[strlen(tableName)+1];
-  strcpy(tableDesc->body.table_desc.tablename, tableName);
-
-  desc_struct *filesDesc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  tableDesc->body.table_desc.files_desc = filesDesc;
-  filesDesc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
+  tableDesc->tableDesc()->tablename = new HEAP char[strlen(tableName)+1];
+  strcpy(tableDesc->tableDesc()->tablename, tableName);
 
-  tableDesc->body.table_desc.underlyingFileType = SQLMX;
+  TrafDesc *filesDesc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL);
+  tableDesc->tableDesc()->files_desc = filesDesc;
 
-  desc_struct *columnDesc;
+  TrafDesc *columnDesc;
   UInt32 offset = 0;
   Int32 colnumber = ComTdbExplain::getVirtTableNumCols();
   ComTdbVirtTableColumnInfo * vtci = ComTdbExplain::getVirtTableColumnInfo();
@@ -2132,35 +2148,36 @@ desc_struct * ExplainFunc::createVirtualTableDesc()
   columnDesc = Generator::createColDescs(getVirtualTableName(),
 					 vtci, //ComTdbExplain::getVirtTableColumnInfo(),
    					 colnumber,
-					 offset);
-  columnDesc->body.columns_desc.colclass = 'S';
+					 offset, NULL);
+  columnDesc->columnsDesc()->colclass = 'S';
   //  CMPASSERT(colnumber == 14 && offset == 3492);  // Sanity check
-  tableDesc->body.table_desc.columns_desc = columnDesc;
-  tableDesc->body.table_desc.colcount = colnumber;
-  tableDesc->body.table_desc.record_length = (Lng32) offset;
-
-
-  desc_struct *indexDesc = readtabledef_allocate_desc(DESC_INDEXES_TYPE);
-  tableDesc->body.table_desc.indexes_desc = indexDesc;
-  indexDesc->body.indexes_desc.tablename = tableDesc->body.table_desc.tablename;
-  indexDesc->body.indexes_desc.indexname = tableDesc->body.table_desc.tablename;
-  indexDesc->body.indexes_desc.ext_indexname = tableDesc->body.table_desc.tablename;
-  desc_struct *indFilesDesc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  indexDesc->body.indexes_desc.files_desc = indFilesDesc;
-  indFilesDesc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
-
-  indexDesc->body.indexes_desc.keytag = 0;
-  indexDesc->body.indexes_desc.record_length = 4;
-  indexDesc->body.indexes_desc.colcount = 1;
-  indexDesc->body.indexes_desc.unique = -1;
-  indexDesc->body.indexes_desc.blocksize = 4096; // doesn't matter.
-
-  desc_struct *keyDesc = readtabledef_allocate_desc(DESC_KEYS_TYPE);
-  indexDesc->body.indexes_desc.keys_desc = keyDesc;
-  keyDesc->body.keys_desc.indexname = indexDesc->body.indexes_desc.indexname;
-  keyDesc->body.keys_desc.keyseqnumber = 0;
-  keyDesc->body.keys_desc.tablecolnumber = 0;
-  keyDesc->body.keys_desc.ordering = 0;
+  tableDesc->tableDesc()->columns_desc = columnDesc;
+  tableDesc->tableDesc()->colcount = colnumber;
+  tableDesc->tableDesc()->record_length = (Lng32) offset;
+
+  ComUID comUID;
+  comUID.make_UID();
+  Int64 objUID = comUID.get_value();
+  tableDesc->tableDesc()->objectUID = objUID;
+
+  TrafDesc *indexDesc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, NULL);
+  tableDesc->tableDesc()->indexes_desc = indexDesc;
+  indexDesc->indexesDesc()->tablename = tableDesc->tableDesc()->tablename;
+  indexDesc->indexesDesc()->indexname = tableDesc->tableDesc()->tablename;
+  TrafDesc *indFilesDesc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL);
+  indexDesc->indexesDesc()->files_desc = indFilesDesc;
+
+  indexDesc->indexesDesc()->keytag = 0;
+  indexDesc->indexesDesc()->record_length = 4;
+  indexDesc->indexesDesc()->colcount = 1;
+  indexDesc->indexesDesc()->setUnique(TRUE);
+  indexDesc->indexesDesc()->blocksize = 4096; // doesn't matter.
+
+  TrafDesc *keyDesc = TrafAllocateDDLdesc(DESC_KEYS_TYPE, NULL);
+  indexDesc->indexesDesc()->keys_desc = keyDesc;
+  keyDesc->keysDesc()->keyseqnumber = 0;
+  keyDesc->keysDesc()->tablecolnumber = 0;
+  keyDesc->keysDesc()->setDescending(FALSE);
 
   return tableDesc;
 }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/GenPreCode.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenPreCode.cpp b/core/sql/generator/GenPreCode.cpp
index a122a44..d40f115 100644
--- a/core/sql/generator/GenPreCode.cpp
+++ b/core/sql/generator/GenPreCode.cpp
@@ -2839,6 +2839,7 @@ short DDLExpr::ddlXnsInfo(NABoolean &isDDLxn, NABoolean &xnCanBeStarted)
           ddlNode->castToStmtDDLNode()->ddlXns()) &&
             ((ddlNode->getOperatorType() == DDL_CLEANUP_OBJECTS) ||
              (ddlNode->getOperatorType() == DDL_ALTER_TABLE_DROP_COLUMN) ||
+             (ddlNode->getOperatorType() == DDL_ALTER_SCHEMA) ||
              (ddlNode->getOperatorType() == DDL_CREATE_INDEX) ||
              (ddlNode->getOperatorType() == DDL_POPULATE_INDEX) ||
              (ddlNode->getOperatorType() == DDL_ALTER_TABLE_ALTER_COLUMN_DATATYPE)))
@@ -2860,7 +2861,8 @@ RelExpr * DDLExpr::preCodeGen(Generator * generator,
   if (! GenericUtilExpr::preCodeGen(generator,externalInputs,pulledNewInputs))
     return NULL;
   
-  if (specialDDL())
+  if ((specialDDL()) ||
+      (initHbase_))
     {
       generator->setAqrEnabled(FALSE);
     }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/GenRelExeUtil.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenRelExeUtil.cpp b/core/sql/generator/GenRelExeUtil.cpp
index cf72a7f..82ffd07 100644
--- a/core/sql/generator/GenRelExeUtil.cpp
+++ b/core/sql/generator/GenRelExeUtil.cpp
@@ -100,16 +100,15 @@
 #include "ComSmallDefs.h"
 #include "sql_buffer_size.h"
 #include "ExSqlComp.h"		// for NAExecTrans
-
-
+#include "TrafDDLdesc.h"
 
 #include "ComCextdecs.h"
 
 #include "SqlParserGlobals.h"   // Parser Flags
 
 // this comes from GenExplain.cpp (sorry, should have a header file)
-desc_struct * createVirtExplainTableDesc();
-void deleteVirtExplainTableDesc(desc_struct *);
+TrafDesc * createVirtExplainTableDesc();
+void deleteVirtExplainTableDesc(TrafDesc *);
 
 
 short GenericUtilExpr::processOutputRow(Generator * generator,
@@ -276,9 +275,9 @@ short ExeUtilProcessVolatileTable::codeGen(Generator * generator)
 const char * ExeUtilExpr::getVirtualTableName()
 { return ("EXE_UTIL_EXPR__"); }
 
-desc_struct *ExeUtilExpr::createVirtualTableDesc()
+TrafDesc *ExeUtilExpr::createVirtualTableDesc()
 {
-  desc_struct * table_desc =
+  TrafDesc * table_desc =
     Generator::createVirtualTableDesc(getVirtualTableName(),
 				      ComTdbExeUtil::getVirtTableNumCols(),
 				      ComTdbExeUtil::getVirtTableColumnInfo(),
@@ -295,7 +294,7 @@ desc_struct *ExeUtilExpr::createVirtualTableDesc()
 const char * ExeUtilDisplayExplain::getVirtualTableName()
 { return "EXE_UTIL_DISPLAY_EXPLAIN__"; }
 
-desc_struct *ExeUtilDisplayExplain::createVirtualTableDesc()
+TrafDesc *ExeUtilDisplayExplain::createVirtualTableDesc()
 {
   Lng32 outputRowSize =  
     (Lng32) CmpCommon::getDefaultNumeric(EXPLAIN_OUTPUT_ROW_SIZE);
@@ -309,7 +308,7 @@ desc_struct *ExeUtilDisplayExplain::createVirtualTableDesc()
   else
     vtci = ComTdbExeUtilDisplayExplain::getVirtTableColumnInfo();
 
-  desc_struct * table_desc = 
+  TrafDesc * table_desc = 
     Generator::createVirtualTableDesc
     (getVirtualTableName(),
      ComTdbExeUtilDisplayExplain::getVirtTableNumCols(),
@@ -390,17 +389,17 @@ short ExeUtilDisplayExplain::codeGen(Generator * generator)
     }
 
   ExplainFunc ef;
-  desc_struct * desc = ef.createVirtualTableDesc();
+  TrafDesc * desc = ef.createVirtualTableDesc();
 
-  desc_struct * column_desc = desc->body.table_desc.columns_desc;
+  TrafDesc * column_desc = desc->tableDesc()->columns_desc;
   Lng32 ij = 0;
   while (ij < EXPLAIN_DESCRIPTION_INDEX)
     {
-      column_desc = column_desc->header.next;
+      column_desc = column_desc->next;
       ij++;
     }
 
-  Lng32 colDescSize =  column_desc->body.columns_desc.length;
+  Lng32 colDescSize =  column_desc->columnsDesc()->length;
 
   Lng32 outputRowSize =  
     (Lng32) CmpCommon::getDefaultNumeric(EXPLAIN_OUTPUT_ROW_SIZE);
@@ -1214,9 +1213,9 @@ short ExeUtilGetProcessStatistics::codeGen(Generator * generator)
 const char * ExeUtilGetUID::getVirtualTableName()
 { return "EXE_UTIL_GET_UID__"; }
 
-desc_struct *ExeUtilGetUID::createVirtualTableDesc()
+TrafDesc *ExeUtilGetUID::createVirtualTableDesc()
 {
-  desc_struct * table_desc =
+  TrafDesc * table_desc =
     Generator::createVirtualTableDesc(getVirtualTableName(),
 				      ComTdbExeUtilGetUID::getVirtTableNumCols(),
 				      ComTdbExeUtilGetUID::getVirtTableColumnInfo(),
@@ -1292,9 +1291,9 @@ short ExeUtilGetUID::codeGen(Generator * generator)
 const char * ExeUtilGetQID::getVirtualTableName()
 { return "EXE_UTIL_GET_QID__"; }
 
-desc_struct *ExeUtilGetQID::createVirtualTableDesc()
+TrafDesc *ExeUtilGetQID::createVirtualTableDesc()
 {
-  desc_struct * table_desc =
+  TrafDesc * table_desc =
     Generator::createVirtualTableDesc(getVirtualTableName(),
 				      ComTdbExeUtilGetQID::getVirtTableNumCols(),
 				      ComTdbExeUtilGetQID::getVirtTableColumnInfo(),
@@ -3369,9 +3368,9 @@ short ExeUtilHiveTruncate::codeGen(Generator * generator)
 const char * ExeUtilRegionStats::getVirtualTableName()
 { return ("EXE_UTIL_REGION_STATS__"); }
 
-desc_struct *ExeUtilRegionStats::createVirtualTableDesc()
+TrafDesc *ExeUtilRegionStats::createVirtualTableDesc()
 {
-  desc_struct * table_desc = NULL;
+  TrafDesc * table_desc = NULL;
   if (displayFormat_)
     table_desc = ExeUtilExpr::createVirtualTableDesc();
   else
@@ -3486,9 +3485,9 @@ short ExeUtilRegionStats::codeGen(Generator * generator)
 const char * ExeUtilLobInfo::getVirtualTableName()
 { return ("EXE_UTIL_LOB_INFO__"); }
 
-desc_struct *ExeUtilLobInfo::createVirtualTableDesc()
+TrafDesc *ExeUtilLobInfo::createVirtualTableDesc()
 {
-  desc_struct * table_desc = NULL;
+  TrafDesc * table_desc = NULL;
    if (tableFormat_)
     table_desc = Generator::createVirtualTableDesc(
 	 getVirtualTableName(),
@@ -4288,9 +4287,9 @@ const char * HiveMDaccessFunc::getVirtualTableName()
     return "HIVEMD__"; 
 }
 
-desc_struct *HiveMDaccessFunc::createVirtualTableDesc()
+TrafDesc *HiveMDaccessFunc::createVirtualTableDesc()
 {
-  desc_struct * table_desc =
+  TrafDesc * table_desc =
     Generator::createVirtualTableDesc(
 				      getVirtualTableName(),
 				      ComTdbExeUtilHiveMDaccess::getVirtTableNumCols((char*)mdType_.data()),

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/GenRelMisc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenRelMisc.cpp b/core/sql/generator/GenRelMisc.cpp
index 7f61807..d37a8e6 100644
--- a/core/sql/generator/GenRelMisc.cpp
+++ b/core/sql/generator/GenRelMisc.cpp
@@ -105,11 +105,13 @@
 
 #include "ComCextdecs.h"
 
+#include "TrafDDLdesc.h"
+
 #include "SqlParserGlobals.h"   // Parser Flags
 
 // this comes from GenExplain.cpp (sorry, should have a header file)
-desc_struct * createVirtExplainTableDesc();
-void deleteVirtExplainTableDesc(desc_struct *);
+TrafDesc * createVirtExplainTableDesc();
+void deleteVirtExplainTableDesc(TrafDesc *);
 
 /////////////////////////////////////////////////////////////////////
 //
@@ -364,9 +366,9 @@ short GenericUtilExpr::codeGen(Generator * generator)
 const char * DDLExpr::getVirtualTableName()
 { return (producesOutput() ? "DDL_EXPR__" : NULL); }
 
-desc_struct *DDLExpr::createVirtualTableDesc()
+TrafDesc *DDLExpr::createVirtualTableDesc()
 {
-  desc_struct * table_desc = NULL;
+  TrafDesc * table_desc = NULL;
   if (producesOutput())
     {
       table_desc = 
@@ -1226,12 +1228,12 @@ short RelRoot::codeGen(Generator * generator)
 	}
 
       ExplainFunc explainFunc;
-      desc_struct *explainDescStruct = explainFunc.createVirtualTableDesc();
+      TrafDesc *explainDescStruct = explainFunc.createVirtualTableDesc();
 
       Space *explainSpace = generator->getFragmentDir()->
 	getSpace(generator->getExplainFragDirIndex());
 
-      table_desc_struct *tableDesc = &(explainDescStruct->body.table_desc);
+      TrafTableDesc *tableDesc = explainDescStruct->tableDesc();
 
       // Determine the length of the Explain Tuple.
       Lng32 recLength = tableDesc->record_length;
@@ -1242,21 +1244,21 @@ short RelRoot::codeGen(Generator * generator)
       explainDesc =
 	new(explainSpace) ExplainDesc(numCols, recLength, explainSpace);
 
-      desc_struct *cols = tableDesc->columns_desc;
+      TrafDesc *cols = tableDesc->columns_desc;
 
       // For each column of the Virtual Explain Table, extract the
       // relevant info. from the table desc and put it into the ExplainDesc
       for(Int32 c = 0; c < numCols; c++ /* no pun intended */)
 	{
-	  columns_desc_struct *colsDesc = &(cols->body.columns_desc);
+	  TrafColumnsDesc *colsDesc = (cols->columnsDesc());
 
 	  explainDesc->setColDescr(c,
 				   colsDesc->datatype,
 				   colsDesc->length,
 				   colsDesc->offset,
-				   colsDesc->null_flag);
+				   colsDesc->isNullable());
 
-	  cols = cols->header.next;
+	  cols = cols->next;
 	}
 
       explainFunc.deleteVirtualTableDesc(explainDescStruct);
@@ -5092,13 +5094,11 @@ short PhyPack::codeGen(Generator* generator)
 const char * TableValuedFunction::getVirtualTableName()
 { return "??TableValuedFunction??"; }
 
-desc_struct *TableValuedFunction::createVirtualTableDesc()
+TrafDesc *TableValuedFunction::createVirtualTableDesc()
 { return NULL; }
 
-void TableValuedFunction::deleteVirtualTableDesc(desc_struct *vtd)
+void TableValuedFunction::deleteVirtualTableDesc(TrafDesc *vtd)
 {
-  ReadTableDef readTableDef;
-  readTableDef.deleteTree(vtd);
 }
 
 // -----------------------------------------------------------------------
@@ -5108,9 +5108,9 @@ const char * StatisticsFunc::getVirtualTableName()
 //{ return "STATISTICS__"; }
 {return getVirtualTableNameStr();}
 
-desc_struct *StatisticsFunc::createVirtualTableDesc()
+TrafDesc *StatisticsFunc::createVirtualTableDesc()
 {
-  desc_struct * table_desc =
+  TrafDesc * table_desc =
     Generator::createVirtualTableDesc(getVirtualTableName(),
 				      ComTdbStats::getVirtTableNumCols(),
 				      ComTdbStats::getVirtTableColumnInfo(),
@@ -5272,29 +5272,22 @@ short StatisticsFunc::codeGen(Generator* generator)
 // ProxyFunc methods
 // -----------------------------------------------------------------------
 
-static const keys_desc_struct proxy_key_descs[] =
+static void initProxyKeyDescStruct(TrafKeysDesc *tgt, ComUInt32& src)
 {
-  // keys_desc_struct is defined in sqlcat/desc.h:
-  // indexname keyname keyseqnumber tablecolnumber ordering
-  {    0,          0,          1,            0,            0  }
-};
-
-static void initProxyKeyDescStruct(keys_desc_struct *tgt, ComUInt32& src)
-{
-  tgt->keyseqnumber = proxy_key_descs[src].keyseqnumber;
-  tgt->tablecolnumber = proxy_key_descs[src].tablecolnumber;
-  tgt->ordering = proxy_key_descs[src].ordering;
+  tgt->keyseqnumber = 1;
+  tgt->tablecolnumber = 0;
+  tgt->setDescending(FALSE);
 }
 
 static Lng32 createDescStructsForProxy(const ProxyFunc &proxy,
                                         char *tableName,
-                                        desc_struct *&colDescs,
-                                        desc_struct *&keyDescs)
+                                        TrafDesc *&colDescs,
+                                        TrafDesc *&keyDescs)
 {
   colDescs = NULL;
   keyDescs = NULL;
   Lng32 reclen = 0;
-  desc_struct *prev_desc = NULL;
+  TrafDesc *prev_desc = NULL;
   ComUInt32 numCols = proxy.getNumColumns();
 
   // Creates and populates column descs
@@ -5302,75 +5295,71 @@ static Lng32 createDescStructsForProxy(const ProxyFunc &proxy,
 
   // Create key descs
   prev_desc = NULL;
-  numCols = sizeof(proxy_key_descs) / sizeof(keys_desc_struct);
+  numCols = 1; 
   for (ComUInt32 keyNum = 0; keyNum < numCols; keyNum++)
   {
-    desc_struct *key_desc = readtabledef_allocate_desc(DESC_KEYS_TYPE);
+    TrafDesc *key_desc = TrafAllocateDDLdesc(DESC_KEYS_TYPE, NULL);
     if (prev_desc)
-      prev_desc->header.next = key_desc;
+      prev_desc->next = key_desc;
     else
       keyDescs = key_desc;      
     
     prev_desc = key_desc;
     
-    initProxyKeyDescStruct(&key_desc->body.keys_desc, keyNum);
+    initProxyKeyDescStruct(key_desc->keysDesc(), keyNum);
   }
   
   return reclen;
 }
 
-desc_struct *ProxyFunc::createVirtualTableDesc()
+TrafDesc *ProxyFunc::createVirtualTableDesc()
 {
-  // readtabledef_allocate_desc() requires that HEAP (STMTHEAP) 
+  // TrafAllocateDDLdesc() requires that HEAP (STMTHEAP) 
   // be used for operator new herein
 
-  desc_struct *table_desc = readtabledef_allocate_desc(DESC_TABLE_TYPE);
+  TrafDesc *table_desc = TrafAllocateDDLdesc(DESC_TABLE_TYPE, NULL);
   const char *tableName = getVirtualTableName();
-  table_desc->body.table_desc.tablename = new HEAP char[strlen(tableName)+1];
-  strcpy(table_desc->body.table_desc.tablename, tableName);
+  table_desc->tableDesc()->tablename = new HEAP char[strlen(tableName)+1];
+  strcpy(table_desc->tableDesc()->tablename, tableName);
 
-  table_desc->body.table_desc.issystemtablecode = 1;
-  table_desc->body.table_desc.underlyingFileType = SQLMX;
+  table_desc->tableDesc()->setSystemTableCode(TRUE);
 
-  desc_struct *files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  files_desc->body.files_desc.audit = -1; // audited table
-  files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
-  table_desc->body.table_desc.files_desc = files_desc;
+  TrafDesc *files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL);
+  files_desc->filesDesc()->setAudited(TRUE); // audited table
+  table_desc->tableDesc()->files_desc = files_desc;
   
-  desc_struct *cols_descs = NULL;
-  desc_struct *keys_descs = NULL;
+  TrafDesc *cols_descs = NULL;
+  TrafDesc *keys_descs = NULL;
 
-  table_desc->body.table_desc.colcount = (Int32) getNumColumns();
+  table_desc->tableDesc()->colcount = (Int32) getNumColumns();
 
-  table_desc->body.table_desc.record_length =
+  table_desc->tableDesc()->record_length =
     createDescStructsForProxy(*this,
-                                table_desc->body.table_desc.tablename,
+                                table_desc->tableDesc()->tablename,
                                 cols_descs,
                                 keys_descs);
   
-  desc_struct *index_desc = readtabledef_allocate_desc(DESC_INDEXES_TYPE);
-  index_desc->body.indexes_desc.tablename =
-    table_desc->body.table_desc.tablename;
-  index_desc->body.indexes_desc.indexname =
-    table_desc->body.table_desc.tablename;
-  index_desc->body.indexes_desc.keytag = 0; // primary index
-  index_desc->body.indexes_desc.record_length =
-    table_desc->body.table_desc.record_length;
-  index_desc->body.indexes_desc.colcount =
-    table_desc->body.table_desc.colcount;
-  index_desc->body.indexes_desc.isVerticalPartition = 0;
-  index_desc->body.indexes_desc.blocksize = 4096; // doesn't matter.
+  TrafDesc *index_desc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, NULL);
+  index_desc->indexesDesc()->tablename =
+    table_desc->tableDesc()->tablename;
+  index_desc->indexesDesc()->indexname =
+    table_desc->tableDesc()->tablename;
+  index_desc->indexesDesc()->keytag = 0; // primary index
+  index_desc->indexesDesc()->record_length =
+    table_desc->tableDesc()->record_length;
+  index_desc->indexesDesc()->colcount =
+    table_desc->tableDesc()->colcount;
+  index_desc->indexesDesc()->blocksize = 4096; // doesn't matter.
 
   // cannot simply point to same files desc as the table one,
   // because then ReadTableDef::deleteTree frees same memory twice (error)
-  desc_struct *i_files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  i_files_desc->body.files_desc.audit = -1; // audited table
-  i_files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
-  index_desc->body.indexes_desc.files_desc = i_files_desc;
-
-  index_desc->body.indexes_desc.keys_desc  = keys_descs;
-  table_desc->body.table_desc.columns_desc = cols_descs;
-  table_desc->body.table_desc.indexes_desc = index_desc;
+  TrafDesc *i_files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL);
+  i_files_desc->filesDesc()->setAudited(TRUE); // audited table
+  index_desc->indexesDesc()->files_desc = i_files_desc;
+
+  index_desc->indexesDesc()->keys_desc  = keys_descs;
+  table_desc->tableDesc()->columns_desc = cols_descs;
+  table_desc->tableDesc()->indexes_desc = index_desc;
  
   return table_desc;
 }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/GenRelScan.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenRelScan.cpp b/core/sql/generator/GenRelScan.cpp
index 0b152ff..042ffea 100644
--- a/core/sql/generator/GenRelScan.cpp
+++ b/core/sql/generator/GenRelScan.cpp
@@ -50,6 +50,7 @@
 #include "RelUpdate.h"
 #include "HDFSHook.h"
 #include "CmpSeabaseDDL.h"
+#include "TrafDDLdesc.h"
 
 
 /////////////////////////////////////////////////////////////////////
@@ -1377,21 +1378,19 @@ NABoolean HbaseAccess::validateVirtualTableDesc(NATable * naTable)
   return TRUE;
 }
 
-void populateRangeDescForBeginKey(char* buf, Int32 len, struct desc_struct* target, NAMemory* heap)
+void populateRangeDescForBeginKey(char* buf, Int32 len, struct TrafDesc* target, NAMemory* heap)
 {  
-   target->header.nodetype = DESC_HBASE_RANGE_REGION_TYPE;
-   target->body.hbase_region_desc.beginKey = buf;
-   target->body.hbase_region_desc.beginKeyLen = len;
-   target->body.hbase_region_desc.endKey = NULL;
-   target->body.hbase_region_desc.endKeyLen = 0;   
+  target->nodetype = DESC_HBASE_RANGE_REGION_TYPE;
+  target->hbaseRegionDesc()->beginKey = buf;
+  target->hbaseRegionDesc()->beginKeyLen = len;
+  target->hbaseRegionDesc()->endKey = NULL;
+  target->hbaseRegionDesc()->endKeyLen = 0;   
 }
 
-void populateRegionDescAsRANGE(char* buf, Int32 len, struct desc_struct* target, NAMemory*);
-
-desc_struct *HbaseAccess::createVirtualTableDesc(const char * name,
+TrafDesc *HbaseAccess::createVirtualTableDesc(const char * name,
 						 NABoolean isRW, NABoolean isCW, NAArray<HbaseStr>* beginKeys)
 {
-  desc_struct * table_desc = NULL;
+  TrafDesc * table_desc = NULL;
 
   if (isRW)
     table_desc =
@@ -1411,9 +1410,9 @@ desc_struct *HbaseAccess::createVirtualTableDesc(const char * name,
 
   if (table_desc)
     {
-       struct desc_struct* head = assembleDescs(beginKeys, populateRangeDescForBeginKey, STMTHEAP);
+      struct TrafDesc* head = Generator::assembleDescs(beginKeys, NULL, NULL);
 
-      ((table_desc_struct*)table_desc)->hbase_regionkey_desc = head;
+      table_desc->tableDesc()->hbase_regionkey_desc = head;
 
       Lng32 v1 = 
 	(Lng32) CmpCommon::getDefaultNumeric(HBASE_MAX_COLUMN_NAME_LENGTH);
@@ -1422,26 +1421,26 @@ desc_struct *HbaseAccess::createVirtualTableDesc(const char * name,
       Lng32 v3 = 
 	(Lng32) CmpCommon::getDefaultNumeric(HBASE_MAX_COLUMN_INFO_LENGTH);
 
-      desc_struct * cols_desc =  table_desc->body.table_desc.columns_desc;
-      for (Lng32 i = 0; i < table_desc->body.table_desc.colcount; i++)
+      TrafDesc * cols_desc =  table_desc->tableDesc()->columns_desc;
+      for (Lng32 i = 0; i < table_desc->tableDesc()->colcount; i++)
 	{
 	  if (isRW)
 	    {
 	      if (i == HBASE_ROW_ROWID_INDEX)
-		cols_desc->body.columns_desc.length = v1;
+		cols_desc->columnsDesc()->length = v1;
 	      else if (i == HBASE_COL_DETAILS_INDEX)
-		cols_desc->body.columns_desc.length = v3;
+		cols_desc->columnsDesc()->length = v3;
 	    }
 	  else
 	    {
 	      if ((i == HBASE_ROW_ID_INDEX) ||
 		  (i == HBASE_COL_NAME_INDEX) ||
 		  (i == HBASE_COL_FAMILY_INDEX))
-		cols_desc->body.columns_desc.length = v1;
+		cols_desc->columnsDesc()->length = v1;
 	      else if (i == HBASE_COL_VALUE_INDEX)
-		cols_desc->body.columns_desc.length = v2;
+		cols_desc->columnsDesc()->length = v2;
 	    }
-	  cols_desc = cols_desc->header.next;
+	  cols_desc = cols_desc->next;
 
 	} // for
     }
@@ -1449,11 +1448,11 @@ desc_struct *HbaseAccess::createVirtualTableDesc(const char * name,
   return table_desc;
 }
 
-desc_struct *HbaseAccess::createVirtualTableDesc(const char * name,
+TrafDesc *HbaseAccess::createVirtualTableDesc(const char * name,
 						 NAList<char*> &colNameList,
 						 NAList<char*> &colValList)
 {
-  desc_struct * table_desc = NULL;
+  TrafDesc * table_desc = NULL;
 
   Lng32 arrSize = colNameList.entries();
   ComTdbVirtTableColumnInfo * colInfoArray = (ComTdbVirtTableColumnInfo*)

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/GenUdr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenUdr.cpp b/core/sql/generator/GenUdr.cpp
index a19aa47..baffd54 100644
--- a/core/sql/generator/GenUdr.cpp
+++ b/core/sql/generator/GenUdr.cpp
@@ -1907,7 +1907,7 @@ PhysicalTableMappingUDF::codeGen(Generator *generator)
   return result;
 }
 
-desc_struct *TableMappingUDF::createVirtualTableDesc()
+TrafDesc *TableMappingUDF::createVirtualTableDesc()
 {
 
   Int32 numOutputCols = getNARoutine()->getOutParamCount();
@@ -1922,7 +1922,7 @@ desc_struct *TableMappingUDF::createVirtualTableDesc()
     outColsInfo[i].length = outCol->getType()->getNominalSize();
     outColsInfo[i].nullable = (Lng32) outCol->getType()->supportsSQLnull();
   }
-  desc_struct * table_desc =
+  TrafDesc * table_desc =
     Generator::createVirtualTableDesc(getRoutineName().getQualifiedNameAsString().data(),
                                       numOutputCols,
 				      outColsInfo,


[04/10] incubator-trafodion git commit: metadata access performance improvement for accessing traf objects

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/NATable.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NATable.h b/core/sql/optimizer/NATable.h
index 7a87344..8b5e3fe 100644
--- a/core/sql/optimizer/NATable.h
+++ b/core/sql/optimizer/NATable.h
@@ -60,7 +60,7 @@ class HistogramsCacheEntry;
 class BindWA;
 class MVInfoForDML;
 class NATableDB;
-struct desc_struct;
+struct TrafDesc;
 class HbaseCreateOption;
 class PrivMgrUserPrivs;
 class ExpHbaseInterface;
@@ -384,7 +384,7 @@ public:
   // ---------------------------------------------------------------------
 
   NATable(BindWA *bindWA, const CorrName &corrName, NAMemory *heap,
-          desc_struct *inTableDesc = NULL);
+          TrafDesc *inTableDesc = NULL);
 
   NATable(BindWA *bindWA, const CorrName &corrName, NAMemory *heap,
           struct hive_tbl_desc*);
@@ -489,7 +489,7 @@ public:
 				       NABoolean *isPkey = NULL,
                                        NAList<int> *reorderList = NULL);
     
-  const desc_struct * getPartnsDesc() const { return partnsDesc_; }
+  const TrafDesc * getPartnsDesc() const { return partnsDesc_; }
 
   // A not-found partition is an offline partition.
   NABoolean containsPartition(const NAString &partitionName) const
@@ -826,7 +826,7 @@ public:
 
   NABoolean insertMissingStatsWarning(CollIndexSet colsSet) const;
 
-  const desc_struct * getTableDesc() const { return tableDesc_; }
+  const TrafDesc * getTableDesc() const { return tableDesc_; }
   NAList<HbaseCreateOption*> * hbaseCreateOptions()
     { return clusteringIndex_->hbaseCreateOptions();}
 
@@ -1144,9 +1144,9 @@ private:
 
   ComSecurityKeySet secKeySet_ ;
 
-  desc_struct *partnsDesc_;
+  TrafDesc *partnsDesc_;
 
-  desc_struct *tableDesc_;
+  TrafDesc *tableDesc_;
 
   // hash table to store all the column positions for which missing
   // stats warning has been generated. We are not storing ValueIdSet
@@ -1254,7 +1254,7 @@ public:
 
   NATable * get(const ExtendedQualName* key, BindWA * bindWA = NULL, NABoolean findInCacheOnly = FALSE);
   NATable * get(CorrName& corrName, BindWA * bindWA,
-                desc_struct *inTableDescStruct);
+                TrafDesc *inTableDescStruct);
 
   void removeNATable2(CorrName &corrName, ComQiScope qiScope, 
                       ComObjectType ot);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/RelExeUtil.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExeUtil.cpp b/core/sql/optimizer/RelExeUtil.cpp
index 25fbdd4..0711aa7 100644
--- a/core/sql/optimizer/RelExeUtil.cpp
+++ b/core/sql/optimizer/RelExeUtil.cpp
@@ -68,6 +68,7 @@
 #include "StmtDDLPopulateIndex.h"
 #include "StmtDDLDropIndex.h"
 #include "StmtDDLAlterIndex.h"   // why don't we need StmtDDLAlterTable as well???
+#include "StmtDDLAlterSchema.h"
 #include "StmtDDLCreateDropSequence.h"
 #include "StmtDDLGrant.h"
 #include "StmtDDLRevoke.h"
@@ -156,7 +157,7 @@ RelExpr * GenericUtilExpr::bindNode(BindWA *bindWA)
 	get(&corrName.getExtendedQualNameObj());
       
       if (NOT naTable) {
-	desc_struct *tableDesc = createVirtualTableDesc();
+	TrafDesc *tableDesc = createVirtualTableDesc();
 	naTable = bindWA->getNATable(corrName, FALSE/*catmanUsages*/, tableDesc);
 	if (bindWA->errStatus())
 	  return this;
@@ -230,6 +231,7 @@ RelExpr * DDLExpr::copyTopNode(RelExpr *derivedNode, CollHeap* outHeap)
   result->objName_ = objName_;
   result->isVolatile_ = isVolatile_;
   result->isTable_ = isTable_;
+  result->isSchema_ = isSchema_;
   result->isIndex_ = isIndex_;
   result->isMV_ = isMV_;
   result->isView_ = isView_;
@@ -3903,6 +3905,7 @@ RelExpr * DDLExpr::bindNode(BindWA *bindWA)
   isHbase_ = FALSE;
   isNative_ = FALSE;
   hbaseDDLNoUserXn_ = FALSE;
+  isSchema_ = FALSE;
 
   NABoolean isSeq = FALSE;
 
@@ -3915,10 +3918,12 @@ RelExpr * DDLExpr::bindNode(BindWA *bindWA)
   NABoolean isPrivilegeMngt = FALSE;
   NABoolean isCreateSchema = FALSE;
   NABoolean isDropSchema = FALSE;
+  NABoolean isAlterSchema = FALSE;
   NABoolean isAuth = FALSE;
   NABoolean alterAddConstr = FALSE;
   NABoolean alterDropConstr = FALSE;
   NABoolean alterRenameTable = FALSE;
+  NABoolean alterStoredDesc = FALSE;
   NABoolean alterIdentityCol = FALSE;
   NABoolean alterColDatatype = FALSE;
   NABoolean alterColRename = FALSE;
@@ -4153,6 +4158,8 @@ RelExpr * DDLExpr::bindNode(BindWA *bindWA)
          alterColRename = TRUE;
        else if (getExprNode()->castToStmtDDLNode()->castToStmtDDLAlterTableHBaseOptions())
          alterHBaseOptions = TRUE;
+       else if (getExprNode()->castToStmtDDLNode()->castToStmtDDLAlterTableStoredDesc())
+         alterStoredDesc = TRUE;
        else
         otherAlters = TRUE;
 
@@ -4160,6 +4167,18 @@ RelExpr * DDLExpr::bindNode(BindWA *bindWA)
         getDDLNode()->castToStmtDDLNode()->castToStmtDDLAlterTable()->
         getTableNameAsQualifiedName();
     }
+    else if (getExprNode()->castToStmtDDLNode()->castToStmtDDLAlterSchema())
+    {
+      isAlter_ = TRUE;
+      isSchema_ = TRUE;
+
+      isAlterSchema = TRUE;
+
+      qualObjName_ =
+        QualifiedName(NAString("dummy"),
+                      getExprNode()->castToStmtDDLNode()->castToStmtDDLAlterSchema()->getSchemaNameAsQualifiedName().getSchemaName(),
+                      getExprNode()->castToStmtDDLNode()->castToStmtDDLAlterSchema()->getSchemaNameAsQualifiedName().getCatalogName());
+    }
     else if (getExprNode()->castToStmtDDLNode()->castToStmtDDLAlterIndex())
     {
       isAlter_ = TRUE;
@@ -4356,11 +4375,12 @@ RelExpr * DDLExpr::bindNode(BindWA *bindWA)
           hbaseDDLNoUserXn_ = TRUE;
       }
 
-    if ((isCreateSchema || isDropSchema) ||
+    if ((isCreateSchema || isDropSchema || isAlterSchema) ||
         ((isTable_ || isIndex_ || isView_ || isRoutine_ || isLibrary_ || isSeq) &&
          (isCreate_ || isDrop_ || purgedataHbase_ ||
           (isAlter_ && (alterAddCol || alterDropCol || alterDisableIndex || alterEnableIndex || 
 			alterAddConstr || alterDropConstr || alterRenameTable ||
+                        alterStoredDesc ||
                         alterIdentityCol || alterColDatatype || alterColRename ||
                         alterHBaseOptions || alterLibrary || otherAlters)))))
       {

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/RelExeUtil.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExeUtil.h b/core/sql/optimizer/RelExeUtil.h
index 2591926..4de738e 100644
--- a/core/sql/optimizer/RelExeUtil.h
+++ b/core/sql/optimizer/RelExeUtil.h
@@ -122,7 +122,7 @@ public:
 
   virtual NABoolean producesOutput() { return FALSE; }
   virtual const char 	*getVirtualTableName() { return NULL;};
-  virtual desc_struct 	*createVirtualTableDesc() { return NULL;};
+  virtual TrafDesc 	*createVirtualTableDesc() { return NULL;};
   TableDesc * getVirtualTableDesc() const
   {
     return virtualTabId_;
@@ -230,6 +230,7 @@ public:
     isCreate_(FALSE), isCreateLike_(FALSE), isVolatile_(FALSE), 
     isDrop_(FALSE), isAlter_(FALSE), isCleanup_(FALSE),
     isTable_(FALSE), isIndex_(FALSE), isMV_(FALSE), isView_(FALSE),
+    isSchema_(FALSE),
     isLibrary_(FALSE), isRoutine_(FALSE),
     isUstat_(FALSE),
     isHbase_(FALSE),
@@ -270,6 +271,7 @@ public:
     isCreate_(FALSE), isCreateLike_(FALSE), isVolatile_(FALSE), 
     isDrop_(FALSE), isAlter_(FALSE), isCleanup_(FALSE),
     isTable_(FALSE), isIndex_(FALSE), isMV_(FALSE), isView_(FALSE),
+    isSchema_(FALSE),
     isLibrary_(FALSE), isRoutine_(FALSE),
     isUstat_(FALSE),
     isHbase_(FALSE),
@@ -310,6 +312,7 @@ public:
     isCreate_(FALSE), isCreateLike_(FALSE), isVolatile_(FALSE), 
     isDrop_(FALSE), isAlter_(FALSE), isCleanup_(FALSE),
     isTable_(FALSE), isIndex_(FALSE), isMV_(FALSE), isView_(FALSE),
+    isSchema_(FALSE),
     isUstat_(FALSE),
     isHbase_(FALSE),
     isNative_(FALSE),
@@ -355,7 +358,7 @@ public:
 
   virtual NABoolean producesOutput() { return returnStatus_;}
   virtual const char 	*getVirtualTableName();
-  virtual desc_struct 	*createVirtualTableDesc();
+  virtual TrafDesc 	*createVirtualTableDesc();
 
   ExprNode * getDDLNode(){return getExprNode();};
 
@@ -475,6 +478,7 @@ public:
   NABoolean isCreate_;
   NABoolean isCreateLike_;
   NABoolean isVolatile_;
+  NABoolean isSchema_;
   NABoolean isTable_;
   NABoolean isIndex_;
   NABoolean isMV_;
@@ -606,7 +610,7 @@ public:
 
   virtual NABoolean producesOutput() { return FALSE; }
   virtual const char 	*getVirtualTableName();
-  virtual desc_struct 	*createVirtualTableDesc();
+  virtual TrafDesc 	*createVirtualTableDesc();
 
   // exeutil statements whose query type need to be returned as 
   // SQL_EXE_UTIL. Set during RelRoot::codeGen in ComTdbRoot class.
@@ -680,7 +684,7 @@ public:
   virtual short codeGen(Generator*);
 
   virtual const char 	*getVirtualTableName();
-  virtual desc_struct 	*createVirtualTableDesc();
+  virtual TrafDesc 	*createVirtualTableDesc();
 
   virtual NABoolean producesOutput() { return TRUE; }
 
@@ -1771,7 +1775,7 @@ public:
   virtual const char 	*getVirtualTableName();
   static const char * getVirtualTableNameStr() 
   { return "EXE_UTIL_REGION_STATS__";}
-  virtual desc_struct 	*createVirtualTableDesc();
+  virtual TrafDesc 	*createVirtualTableDesc();
 
   virtual NABoolean producesOutput() { return TRUE; }
 
@@ -1818,7 +1822,7 @@ public:
   virtual const char 	*getVirtualTableName();
   static const char * getVirtualTableNameStr() 
   { return "EXE_UTIL_LOB_INFO__";}
-  virtual desc_struct 	*createVirtualTableDesc();
+  virtual TrafDesc 	*createVirtualTableDesc();
 
   virtual NABoolean producesOutput() { return TRUE; }
 
@@ -1947,7 +1951,7 @@ public:
   virtual short codeGen(Generator*);
 
   virtual const char 	*getVirtualTableName();
-  virtual desc_struct 	*createVirtualTableDesc();
+  virtual TrafDesc 	*createVirtualTableDesc();
 
 private:
   // using this enum from MaintainObject class as it serves the
@@ -1976,7 +1980,7 @@ public:
   virtual short codeGen(Generator*);
 
   virtual const char 	*getVirtualTableName();
-  virtual desc_struct 	*createVirtualTableDesc();
+  virtual TrafDesc 	*createVirtualTableDesc();
 
 private:
   NAString statement_;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/RelMisc.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelMisc.h b/core/sql/optimizer/RelMisc.h
index baf86d7..e4632bf 100644
--- a/core/sql/optimizer/RelMisc.h
+++ b/core/sql/optimizer/RelMisc.h
@@ -48,7 +48,7 @@
 #include "SequenceGeneratorAttributes.h"
 #include "ComSecurityKey.h"
 
-struct desc_struct;
+class TrafDesc;
 
 // -----------------------------------------------------------------------
 // contents of this file

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/RelRoutine.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelRoutine.cpp b/core/sql/optimizer/RelRoutine.cpp
index b7a0385..0c08c3d 100644
--- a/core/sql/optimizer/RelRoutine.cpp
+++ b/core/sql/optimizer/RelRoutine.cpp
@@ -68,6 +68,7 @@
 #include "ElemDDLColDefArray.h"
 #include "CmpSeabaseDDL.h"
 #include "UdfDllInteraction.h"
+#include "TrafDDLdesc.h"
 
 
 // -----------------------------------------------------------------------
@@ -951,7 +952,7 @@ NARoutine * TableMappingUDF::getRoutineMetadata(
   NARoutine *result = NULL;
   CmpSeabaseDDL cmpSBD((NAHeap *)bindWA->wHeap());
 
-  desc_struct *tmudfMetadata =
+  TrafDesc *tmudfMetadata =
     cmpSBD.getSeabaseRoutineDesc(
          routineName.getCatalogName(),
          routineName.getSchemaName(),
@@ -968,7 +969,7 @@ NARoutine * TableMappingUDF::getRoutineMetadata(
 
   ComRoutineType udfType ;
 
-  udfType = tmudfMetadata->body.routine_desc.UDRType ;
+  udfType = tmudfMetadata->routineDesc()->UDRType ;
 
   // IS req 6: Check ROUTINE_TYPE column of ROUTINES table.
   // Emit error if invalid type.
@@ -1609,7 +1610,7 @@ const NAString *ProxyFunc::getColumnHeading(ComUInt32 i) const
 
 //! ProxyFunc::populateColumnDesc method 
 void ProxyFunc::populateColumnDesc(char *tableNam,
-                                   desc_struct *&colDescs,
+                                   TrafDesc *&colDescs,
                                    Lng32 &reclen) const
 {
     ElemDDLColDefArray colArray;
@@ -1651,19 +1652,19 @@ void ProxyFunc::populateColumnDesc(char *tableNam,
                                                                   numCols) ;
 
   // calculate the record length 
-  desc_struct *tempDescs = colDescs;
+  TrafDesc *tempDescs = colDescs;
   for (ComUInt32 colNum = 0; colNum < numCols; colNum++)
   { 
     NAType *naType = getColumn(colNum).getColumnDataType();
     Int32 fsType = naType->getFSDatatype();
 
-    if (tempDescs->body.columns_desc.null_flag)
+    if (tempDescs->columnsDesc()->isNullable())
       reclen += SQL_NULL_HDR_SIZE;
     if (DFS2REC::isSQLVarChar(fsType))
       reclen += SQL_VARCHAR_HDR_SIZE;
 
-    reclen += tempDescs->body.columns_desc.length;
-    tempDescs = tempDescs->header.next;
+    reclen += tempDescs->columnsDesc()->length;
+    tempDescs = tempDescs->next;
   }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/RelRoutine.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelRoutine.h b/core/sql/optimizer/RelRoutine.h
index 3cd37eb..823924a 100644
--- a/core/sql/optimizer/RelRoutine.h
+++ b/core/sql/optimizer/RelRoutine.h
@@ -484,12 +484,12 @@ public:
   inline void setTableDesc(TableDesc * tdesc) { tabId_ = tdesc; };
 
   //! createVirtualTableDesc method
-  //  creates a desc_struct for the Virtual Table
-  virtual desc_struct *createVirtualTableDesc();
+  //  creates a TrafDesc for the Virtual Table
+  virtual TrafDesc *createVirtualTableDesc();
 
   //! deleteVirtualTableDesc method
-  //  deletes the given desc_struct
-  virtual  void deleteVirtualTableDesc(desc_struct *vtd);
+  //  deletes the given TrafDesc
+  virtual  void deleteVirtualTableDesc(TrafDesc *vtd);
 
   //! bindNode method
   // a virtual function for performing name binding within the query tree
@@ -752,7 +752,7 @@ public :
   virtual PredefinedTableMappingFunction * castToPredefinedTableMappingFunction();
 
   virtual RelExpr* bindNode(BindWA* bindWA); 
-  virtual desc_struct   *createVirtualTableDesc();
+  virtual TrafDesc   *createVirtualTableDesc();
   virtual void transformNode(NormWA & normWARef,
     ExprGroupId & locationOfPointerToMe);
   virtual void rewriteNode(NormWA & normWARef) ;
@@ -1211,8 +1211,8 @@ public:
   // mutators
 
   //! createVirtualTableDesc method
-  //  creates a desc_struct for the Virtual Table
-  virtual desc_struct *createVirtualTableDesc();
+  //  creates a TrafDesc for the Virtual Table
+  virtual TrafDesc *createVirtualTableDesc();
 
   //! getPotentialOutputValues method
   //  computes the output values the node can generate
@@ -1335,8 +1335,8 @@ public:
 
   // mutators
   //! createVirtualTableDesc method
-  //  returns a desc_struct pointer to the name of the Virtual Table descriptor
-  virtual desc_struct *createVirtualTableDesc();
+  //  returns a TrafDesc pointer to the name of the Virtual Table descriptor
+  virtual TrafDesc *createVirtualTableDesc();
 
 
   //! preCodeGen method
@@ -1410,8 +1410,8 @@ public:
   // mutators
 
   //! createVirtualTableDesc method
-  //  creates a desc_struct for the Virtual Table
-  virtual desc_struct *createVirtualTableDesc();
+  //  creates a TrafDesc for the Virtual Table
+  virtual TrafDesc *createVirtualTableDesc();
 
   //! getPotentialOutputValues method
   //  computes the output values the node can generate
@@ -1567,12 +1567,12 @@ public:
   //! populateColumnDesc method
   // Copy attributes getColumns to colDescs
 void populateColumnDesc(char *tableNam,
-                        desc_struct *&colDescs,
+                        TrafDesc *&colDescs,
                         Lng32 &reclen) const;
 
   //! createVirtualTableDesc method
-  //  create the desc_struct for the Virtual Table
-  virtual desc_struct *createVirtualTableDesc();
+  //  create the TrafDesc for the Virtual Table
+  virtual TrafDesc *createVirtualTableDesc();
 
   // The RelExpr interface
   //! bindNode method

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/RelScan.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelScan.h b/core/sql/optimizer/RelScan.h
index 50797f7..ee596ed 100644
--- a/core/sql/optimizer/RelScan.h
+++ b/core/sql/optimizer/RelScan.h
@@ -872,7 +872,7 @@ public:
                          char* &hdfsHostName,
                          Int32 &hdfsPort);
   
- static desc_struct *createHbaseTableDesc(const char * table_name);
+ static TrafDesc *createHbaseTableDesc(const char * table_name);
 
   // Return a (short-lived) reference to the respective predicates
   const ValueIdList & getBeginKeyPred() const    { return beginKeyPred_; }
@@ -1273,14 +1273,14 @@ public:
   // mutators
 
   //! createVirtualTableDesc method
-  //  creates a desc_struct for the Virtual Table
-  //  virtual desc_struct *createVirtualTableDesc();
-  static desc_struct *createVirtualTableDesc(const char * name,
+  //  creates a TrafDesc for the Virtual Table
+  //  virtual TrafDesc *createVirtualTableDesc();
+  static TrafDesc *createVirtualTableDesc(const char * name,
 					     NABoolean isRW = FALSE,
 					     NABoolean isCW = FALSE, 
                                              NAArray<HbaseStr> * hbaseKeys = NULL);
 
-  static desc_struct *createVirtualTableDesc(const char * name,
+  static TrafDesc *createVirtualTableDesc(const char * name,
 					     NAList<char*> &colNameList,
 					     NAList<char*> &colValList);
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/RelStoredProc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelStoredProc.cpp b/core/sql/optimizer/RelStoredProc.cpp
index 35e6247..43e5cff 100644
--- a/core/sql/optimizer/RelStoredProc.cpp
+++ b/core/sql/optimizer/RelStoredProc.cpp
@@ -384,7 +384,7 @@ RelExpr* RelInternalSP::bindNode(BindWA *bindWA)
       CmpSPOutputFormat outFormat(bindWA->currentCmpContext());
       if ( !cmpInternalSP->OutputFormat(outFormat) )
         return 0;      
-      desc_struct* outTableDesc = outFormat.tableDesc();      
+      TrafDesc* outTableDesc = outFormat.tableDesc();      
       
       // the outTableDesc is expected to be deleteed in NATable::NATable
       if (outTableDesc)

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/ValueDesc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ValueDesc.cpp b/core/sql/optimizer/ValueDesc.cpp
index 9e45fbc..6ee6e32 100644
--- a/core/sql/optimizer/ValueDesc.cpp
+++ b/core/sql/optimizer/ValueDesc.cpp
@@ -62,6 +62,7 @@
 //
 #include "NATable.h"
 #include "EncodedKeyValue.h"
+#include "TrafDDLdesc.h"
 
 #include "SqlParserGlobals.h"		// must be last #include
 
@@ -6580,9 +6581,9 @@ ValueIdList::computeEncodedKey(const TableDesc* tDesc, NABoolean isMaxKey,
    }
 
    const NAFileSet * naf = naTable->getClusteringIndex();
-   const desc_struct * tableDesc = naTable->getTableDesc();
-   desc_struct * colDescs = tableDesc->body.table_desc.columns_desc;
-   desc_struct * keyDescs = (desc_struct*)naf->getKeysDesc();
+   const TrafDesc * tableDesc = naTable->getTableDesc();
+   TrafDesc * colDescs = tableDesc->tableDesc()->columns_desc;
+   TrafDesc * keyDescs = (TrafDesc*)naf->getKeysDesc();
 
    // cast away const since the method may compute and store the length
    keyBufLen = ((NAFileSet*)naf)->getEncodedKeyLength(); 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/parser/AllStmtDDL.h
----------------------------------------------------------------------
diff --git a/core/sql/parser/AllStmtDDL.h b/core/sql/parser/AllStmtDDL.h
index 4b3cc95..7427f21 100644
--- a/core/sql/parser/AllStmtDDL.h
+++ b/core/sql/parser/AllStmtDDL.h
@@ -45,6 +45,7 @@
 #include "AllStmtDDLAlter.h" // MV - RG
 #include "AllStmtDDLGive.h"
 #include "StmtDDLAlterCatalog.h"
+#include "StmtDDLAlterSchema.h"
 #include "StmtDDLAlterTrigger.h"
 #include "StmtDDLAlterIndexAttribute.h"
 #include "StmtDDLAlterIndexHBaseOptions.h"

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/parser/AllStmtDDLAlterTable.h
----------------------------------------------------------------------
diff --git a/core/sql/parser/AllStmtDDLAlterTable.h b/core/sql/parser/AllStmtDDLAlterTable.h
index 630d66e..ddab2f4 100644
--- a/core/sql/parser/AllStmtDDLAlterTable.h
+++ b/core/sql/parser/AllStmtDDLAlterTable.h
@@ -61,6 +61,7 @@
 #include "StmtDDLAlterTableMove.h"
 #include "StmtDDLAlterTablePartition.h"
 #include "StmtDDLAlterTableRename.h"
+#include "StmtDDLAlterTableStoredDesc.h"
 #include "StmtDDLAlterTableNamespace.h"
 #include "StmtDDLAlterTableSetConstraint.h"
 #include "StmtDDLAlterTableToggleConstraint.h"

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/parser/BindStmtDDL.cpp
----------------------------------------------------------------------
diff --git a/core/sql/parser/BindStmtDDL.cpp b/core/sql/parser/BindStmtDDL.cpp
index 9894181..f01d746 100644
--- a/core/sql/parser/BindStmtDDL.cpp
+++ b/core/sql/parser/BindStmtDDL.cpp
@@ -1848,6 +1848,37 @@ StmtDDLDropSchema::bindNode(BindWA * pBindWA)
   return this;
 }
 
+// -----------------------------------------------------------------------
+// definition of method bindNode() for class StmtDDLAlterSchema
+// -----------------------------------------------------------------------
+
+//
+// a virtual function for performing name
+// binding within the AlterSchema tree
+//
+ExprNode *
+StmtDDLAlterSchema::bindNode(BindWA * pBindWA)
+{
+  ComASSERT(pBindWA);
+  if (pBindWA->raiseAccessDefaultSchemaOnlyError())
+    return this;
+
+  // expand schema Name.
+
+  if (schemaQualName_.getCatalogName().isNull())
+  {
+    schemaQualName_.setCatalogName(pBindWA->getDefaultSchema().
+                                   getCatalogName());
+  }
+     
+  schemaName_ = ToAnsiIdentifier(schemaQualName_.getCatalogName()) + "." + 
+                ToAnsiIdentifier(schemaQualName_.getSchemaName()) ;
+
+  markAsBound();
+
+  return this;
+}
+
 // ----------------------------------------------------------------------
 // definition of method bindNode() for class StmtDDLDropSynonym
 // ----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/parser/ElemDDLNode.cpp
----------------------------------------------------------------------
diff --git a/core/sql/parser/ElemDDLNode.cpp b/core/sql/parser/ElemDDLNode.cpp
index a91f9bd..f243f35 100644
--- a/core/sql/parser/ElemDDLNode.cpp
+++ b/core/sql/parser/ElemDDLNode.cpp
@@ -1286,6 +1286,12 @@ ElemDDLNode::castToStmtDDLAlterCatalog()
   return NULL;
 }
 
+StmtDDLAlterSchema *
+ElemDDLNode::castToStmtDDLAlterSchema()
+{
+  return NULL;
+}
+
 StmtDDLAlterSynonym *
 ElemDDLNode::castToStmtDDLAlterSynonym()
 {
@@ -1390,6 +1396,12 @@ ElemDDLNode::castToStmtDDLAlterTableRename()
   return NULL;
 }
 
+StmtDDLAlterTableStoredDesc *
+ElemDDLNode::castToStmtDDLAlterTableStoredDesc()
+{
+  return NULL;
+}
+
 StmtDDLAlterTableNamespace *
 ElemDDLNode::castToStmtDDLAlterTableNamespace()
 {

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/parser/ElemDDLNode.h
----------------------------------------------------------------------
diff --git a/core/sql/parser/ElemDDLNode.h b/core/sql/parser/ElemDDLNode.h
index 6d90249..3203ba0 100644
--- a/core/sql/parser/ElemDDLNode.h
+++ b/core/sql/parser/ElemDDLNode.h
@@ -259,6 +259,7 @@ class StmtDDLAddConstraintRI;
 class StmtDDLAddConstraintUnique;
 class StmtDDLAlterAuditConfig;
 class StmtDDLAlterCatalog;
+class StmtDDLAlterSchema;
 class StmtDDLAlterIndex;
 class StmtDDLAlterIndexAttribute;
 class StmtDDLAlterIndexHBaseOptions;
@@ -274,6 +275,7 @@ class StmtDDLAlterTableColumn;
 class StmtDDLAlterTableMove;
 class StmtDDLAlterTablePartition;
 class StmtDDLAlterTableRename;
+class StmtDDLAlterTableStoredDesc;
 class StmtDDLAlterTableNamespace;
 class StmtDDLAlterTableAlterColumnDatatype;
 class StmtDDLAlterTableAlterColumnRename;
@@ -586,6 +588,7 @@ public:
   virtual StmtDDLAddConstraintUnique    * castToStmtDDLAddConstraintUnique(); 
   virtual StmtDDLAlterAuditConfig       * castToStmtDDLAlterAuditConfig();
   virtual StmtDDLAlterCatalog           * castToStmtDDLAlterCatalog();
+  virtual StmtDDLAlterSchema            * castToStmtDDLAlterSchema();
   virtual StmtDDLAlterIndex             * castToStmtDDLAlterIndex();
   virtual StmtDDLAlterIndexAttribute    * castToStmtDDLAlterIndexAttribute();
   virtual StmtDDLAlterIndexHBaseOptions * castToStmtDDLAlterIndexHBaseOptions();
@@ -604,6 +607,7 @@ public:
   virtual StmtDDLAlterTableHBaseOptions * castToStmtDDLAlterTableHBaseOptions();
   virtual StmtDDLAlterTablePartition    * castToStmtDDLAlterTablePartition();
   virtual StmtDDLAlterTableRename       * castToStmtDDLAlterTableRename();
+  virtual StmtDDLAlterTableStoredDesc   * castToStmtDDLAlterTableStoredDesc();
   virtual StmtDDLAlterTableNamespace    * castToStmtDDLAlterTableNamespace();
   virtual StmtDDLAlterTableAlterColumnDefaultValue* 
                 castToStmtDDLAlterTableAlterColumnDefaultValue();

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/parser/StmtDDLAlter.cpp
----------------------------------------------------------------------
diff --git a/core/sql/parser/StmtDDLAlter.cpp b/core/sql/parser/StmtDDLAlter.cpp
index bab9829..31efde0 100644
--- a/core/sql/parser/StmtDDLAlter.cpp
+++ b/core/sql/parser/StmtDDLAlter.cpp
@@ -60,6 +60,7 @@
 #include "AllElemDDLFileAttr.h"
 #include "StmtDDLAlterAuditConfig.h"
 #include "StmtDDLAlterCatalog.h"
+#include "StmtDDLAlterSchema.h"
 #include "StmtDDLAlterLibrary.h"
 #include "StmtDDLAlterSynonym.h"
 #include "StmtDDLAlterTableDisableIndex.h"
@@ -441,6 +442,96 @@ StmtDDLAlterCatalog::setAllPrivileges(NABoolean isAll)
 
 
 // -----------------------------------------------------------------------
+// Methods for class StmtDDLAlterSchema
+// -----------------------------------------------------------------------
+
+void StmtDDLAlterSchema::initChecks()
+{
+  if (schemaQualName_.getCatalogName().isNull())
+    {
+      schemaName_ = ToAnsiIdentifier(schemaQualName_.getSchemaName());
+    }
+  else
+    {
+      schemaName_ = ToAnsiIdentifier(schemaQualName_.getCatalogName()) + "." +
+        ToAnsiIdentifier(schemaQualName_.getSchemaName());
+    }
+  
+  // If the schema name specified is reserved name, users cannot drop them.
+  // They can only be dropped internally.
+  if ((! Get_SqlParser_Flags(INTERNAL_QUERY_FROM_EXEUTIL)) &&
+      (ComIsTrafodionReservedSchemaName(schemaQualName_.getSchemaName())) &&
+      (!ComIsTrafodionExternalSchemaName(schemaQualName_.getSchemaName())))
+    {
+      // error.
+      *SqlParser_Diags << DgSqlCode(-1430)
+                       << DgSchemaName(schemaName_);
+    }
+}
+
+StmtDDLAlterSchema::StmtDDLAlterSchema(const ElemDDLSchemaName & aSchemaNameParseNode,
+                                       CollHeap    * heap)
+: StmtDDLNode(DDL_ALTER_SCHEMA),
+  schemaQualName_(aSchemaNameParseNode.getSchemaName(), heap),
+  dropAllTables_(TRUE),
+  renameSchema_(FALSE),
+  alterStoredDesc_(FALSE)
+{
+  initChecks();
+}
+
+StmtDDLAlterSchema::StmtDDLAlterSchema(const ElemDDLSchemaName & aSchemaNameParseNode,
+                                       NAString &renamedSchName,
+                                       CollHeap    * heap)
+: StmtDDLNode(DDL_ALTER_SCHEMA),
+  schemaQualName_(aSchemaNameParseNode.getSchemaName(), heap),
+  dropAllTables_(FALSE),
+  renameSchema_(TRUE),
+  renamedSchName_(renamedSchName),
+  alterStoredDesc_(FALSE)
+{
+  initChecks();
+}
+
+StmtDDLAlterSchema::StmtDDLAlterSchema(const ElemDDLSchemaName & aSchemaNameParseNode,
+                                       const StmtDDLAlterTableStoredDesc::AlterStoredDescType oper,
+                                       CollHeap    * heap)
+     
+: StmtDDLNode(DDL_ALTER_SCHEMA),
+  schemaQualName_(aSchemaNameParseNode.getSchemaName(), heap),
+  dropAllTables_(FALSE),
+  renameSchema_(FALSE),
+  alterStoredDesc_(TRUE),
+  storedDescOper_(oper)
+{
+  initChecks();
+}
+
+StmtDDLAlterSchema::~StmtDDLAlterSchema()
+{}
+
+// cast
+
+StmtDDLAlterSchema *
+StmtDDLAlterSchema::castToStmtDDLAlterSchema()
+{
+   return this;
+}
+
+// for tracing
+const NAString
+StmtDDLAlterSchema::displayLabel1() const
+{
+   return NAString("Schema name: " ) + getSchemaName();
+}
+
+const NAString
+StmtDDLAlterSchema::getText() const
+{
+   return "StmtDDLAlterSchema";
+}
+
+// -----------------------------------------------------------------------
 // Methods for class StmtDDLAlterSynonym
 // -----------------------------------------------------------------------
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/parser/StmtDDLAlterSchema.h
----------------------------------------------------------------------
diff --git a/core/sql/parser/StmtDDLAlterSchema.h b/core/sql/parser/StmtDDLAlterSchema.h
new file mode 100644
index 0000000..eedf9cd
--- /dev/null
+++ b/core/sql/parser/StmtDDLAlterSchema.h
@@ -0,0 +1,177 @@
+/**********************************************************************
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+// @@@ END COPYRIGHT @@@
+**********************************************************************/
+#ifndef STMTDDLALTERSCHEMA_H
+#define STMTDDLALTERSCHEMA_H
+
+/* -*-C++-*-
+ *****************************************************************************
+ *
+ * File:         StmtDDLAlterSchema.h
+ * Description:  Alter Schema Statement (parse node)
+ *
+ *
+ * Created:     
+ * Language:     C++
+ *
+ *
+ *
+ *
+ *****************************************************************************
+ */
+
+
+#include "ElemDDLSchemaName.h"
+#include "StmtDDLNode.h"
+#include "StmtDDLAlterTableStoredDesc.h"
+
+// -----------------------------------------------------------------------
+// contents of this file
+// -----------------------------------------------------------------------
+class StmtDDLAlterSchema;
+
+// -----------------------------------------------------------------------
+// forward references
+// -----------------------------------------------------------------------
+// None.
+
+
+// -----------------------------------------------------------------------
+// Alter Schema statement
+// -----------------------------------------------------------------------
+class StmtDDLAlterSchema : public StmtDDLNode
+{
+public:
+
+  // called for 'drop all tables'
+  StmtDDLAlterSchema(const ElemDDLSchemaName & aSchemaNameParseNode,
+                     CollHeap    * heap = PARSERHEAP());
+  
+  // called for 'rename schema'
+  StmtDDLAlterSchema(const ElemDDLSchemaName & aSchemaNameParseNode,
+                     NAString &renamedSchName,
+                     CollHeap    * heap = PARSERHEAP());
+  
+  // called for 'stored descriptor' processing
+  StmtDDLAlterSchema(const ElemDDLSchemaName & aSchemaNameParseNode,
+                     const StmtDDLAlterTableStoredDesc::AlterStoredDescType oper,
+                     CollHeap    * heap = PARSERHEAP());
+
+  void initChecks();
+
+  // virtual destructor
+  virtual ~StmtDDLAlterSchema();
+
+  // cast
+  virtual StmtDDLAlterSchema * castToStmtDDLAlterSchema();
+
+  //
+  // accessors
+  //
+
+  inline const NAString & getSchemaName() const;
+  inline const SchemaName & getSchemaNameAsQualifiedName() const;
+  inline       SchemaName & getSchemaNameAsQualifiedName();
+
+  //
+  // other public methods
+  //
+
+  NABoolean isDropAllTables() { return dropAllTables_; }
+  const NABoolean isDropAllTables() const { return dropAllTables_; }
+
+  NABoolean isRenameSchema() { return renameSchema_; }
+  const NABoolean isRenameSchema() const { return renameSchema_; }
+
+  NABoolean isAlterStoredDesc() { return alterStoredDesc_; }
+  const NABoolean isAlterStoredDesc() const { return alterStoredDesc_; }
+
+  NAString &getRenamedSchemaName() { return renamedSchName_; }
+  const NAString &getRenamedSchemaName() const { return renamedSchName_; }
+
+  StmtDDLAlterTableStoredDesc::AlterStoredDescType &getStoredDescOperation()
+  { return storedDescOper_; }
+
+  // method for processing
+  ExprNode * bindNode(BindWA *bindWAPtr);
+
+  // method for collecting information
+  //  void synthesize();
+
+  // methods for tracing
+  virtual const NAString displayLabel1() const;
+  virtual const NAString getText() const;
+
+private:
+
+  // ---------------------------------------------------------------------
+  // private methods
+  // ---------------------------------------------------------------------
+
+  //
+  // please do not use the following methods
+  //
+  
+  StmtDDLAlterSchema();                                         // DO NOT USE
+  StmtDDLAlterSchema(const StmtDDLAlterSchema &);              // DO NOT USE
+  StmtDDLAlterSchema & operator=(const StmtDDLAlterSchema &);  // DO NOT USE
+
+  // ---------------------------------------------------------------------
+  // private data members
+  // ---------------------------------------------------------------------
+  
+  NAString schemaName_;
+  SchemaName schemaQualName_;
+  NABoolean dropAllTables_;
+  NABoolean renameSchema_;
+  NAString renamedSchName_;
+  NABoolean alterStoredDesc_;
+  StmtDDLAlterTableStoredDesc::AlterStoredDescType storedDescOper_;
+
+}; // class StmtDDLAlterSchema
+
+// -----------------------------------------------------------------------
+// definitions of inline methods for class StmtDDLAlterSchema
+// -----------------------------------------------------------------------
+
+//
+// accessors
+//
+inline SchemaName &
+StmtDDLAlterSchema::getSchemaNameAsQualifiedName() 
+{
+  return schemaQualName_;
+}
+
+inline const SchemaName &
+StmtDDLAlterSchema::getSchemaNameAsQualifiedName() const
+{
+  return schemaQualName_;
+}
+
+inline const NAString &
+StmtDDLAlterSchema::getSchemaName() const
+{
+  return schemaName_;
+}
+
+#endif // STMTDDLALTERSCHEMA_H

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 9dfdb2b..da577dd 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -2489,10 +2489,12 @@ static void enableMakeQuotedStringISO88591Mechanism()
 
 %type <pStmtDDL>		alter_audit_config_statement
 %type <pStmtDDL>		alter_catalog_statement
+%type <pStmtDDL>		alter_schema_statement
 %type <pElemDDL>  		alter_table_move_clause
 %type <pStmtDDL>  		alter_table_rename_clause
-%type <pStmtDDL>           alter_table_enable_index_clause
-%type <pStmtDDL>           alter_table_disable_index_clause
+%type <pStmtDDL>                alter_table_enable_index_clause
+%type <pStmtDDL>                alter_table_disable_index_clause
+%type <uint>  		        alter_stored_descriptor_option
 %type <boolean>   		optional_cascade
 %type <pStmtDDL>  		alter_table_add_column_clause
 %type <pStmtDDL>  		alter_table_drop_column_clause
@@ -14221,6 +14223,10 @@ sql_schema_manipulation_statement :
 				{
 				}
 
+	      | alter_schema_statement
+				{
+				}
+
               | alter_index_statement
 				{
 				}
@@ -31017,6 +31023,47 @@ alter_catalog_statement: TOK_ALTER TOK_CATALOG sql_mx_catalog_name enable_status
                                        TRUE,    //disable/enable_create
 				       *$8);
                                 }
+
+/* type pStmtDDL */
+alter_schema_statement: TOK_ALTER TOK_SCHEMA schema_name_clause alter_stored_descriptor_option
+			{
+                          $$ = new (PARSERHEAP()) 
+                            StmtDDLAlterSchema
+                            (*$3,
+                             (StmtDDLAlterTableStoredDesc::AlterStoredDescType)$4);
+
+                        }
+                     |  TOK_ALTER TOK_SCHEMA schema_name_clause TOK_DROP TOK_ALL TOK_TABLES
+			{
+                          NAString extSchName($3->getSchemaName().getSchemaNameAsAnsiString());
+                          if (! validateVolatileSchemaName(extSchName))
+                            {
+                              YYERROR;
+                            }
+                          
+                          $$ = new (PARSERHEAP())
+                            StmtDDLDropSchema(
+                                 *$3 /*schema_name_clause*/,
+                                 COM_CASCADE_DROP_BEHAVIOR,
+                                 FALSE /*optional_cleanup*/,
+                                 TRUE);
+                          delete $3 /*schema_name*/;
+                        }
+                     |  TOK_ALTER TOK_SCHEMA schema_name_clause TOK_RENAME TOK_TO identifier
+			{
+                          NAString extSchName($3->getSchemaName().getSchemaNameAsAnsiString());
+                          if (! validateVolatileSchemaName(extSchName))
+                            {
+                              YYERROR;
+                            }
+                          
+                          $$ = new (PARSERHEAP())
+                            StmtDDLAlterSchema(
+                                 *$3 /*schema_name_clause*/,
+                                 *$6);
+                          delete $3 /*schema_name*/;
+                          delete $6; // renamed schema
+                        }
                                 
 /* type pStmtDDL */
 alter_library_statement : TOK_ALTER TOK_LIBRARY ddl_qualified_name 
@@ -31429,6 +31476,12 @@ alter_table_action : add_table_constraint_definition
 				  StmtDDLAlterTableHBaseOptions($2->castToElemDDLHbaseOptions());
                         }
 			
+                      | alter_stored_descriptor_option
+                        {
+                          $$ = new (PARSERHEAP()) StmtDDLAlterTableStoredDesc
+                            ((StmtDDLAlterTableStoredDesc::AlterStoredDescType)$1);
+                        }
+
 
 /* type pStmtDDL */
 alter_synonym_statement : TOK_ALTER TOK_SYNONYM ddl_qualified_name 
@@ -31825,6 +31878,29 @@ alter_table_drop_column_clause : TOK_DROP optional_col_keyword TOK_IF TOK_EXISTS
                                    $$ = pNode;
                                   }
 
+/* type uint */
+alter_stored_descriptor_option : TOK_GENERATE TOK_STORED TOK_DESCRIPTOR
+              {
+                $$ = (Int32)StmtDDLAlterTableStoredDesc::GENERATE;
+              }
+              | TOK_CHECK TOK_STORED TOK_DESCRIPTOR
+              {
+                $$ = (Int32)StmtDDLAlterTableStoredDesc::CHECK;
+              }
+              | TOK_DELETE TOK_STORED TOK_DESCRIPTOR
+              {
+                $$ = (Int32)StmtDDLAlterTableStoredDesc::DELETE;
+              }
+              | TOK_ENABLE TOK_STORED TOK_DESCRIPTOR
+              {
+                $$ = (Int32)StmtDDLAlterTableStoredDesc::ENABLE;
+              }
+              | TOK_DISABLE TOK_STORED TOK_DESCRIPTOR
+              {
+                $$ = (Int32)StmtDDLAlterTableStoredDesc::DISABLE;
+              }
+
+
 /* type pStmtDDL */
 
 drop_sql : TOK_DROP TOK_SQL extension_drop_behavior

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/executor/EXPECTED013.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/executor/EXPECTED013.SB b/core/sql/regress/executor/EXPECTED013.SB
index 8a64c9f..da6f64b 100644
--- a/core/sql/regress/executor/EXPECTED013.SB
+++ b/core/sql/regress/executor/EXPECTED013.SB
@@ -450,6 +450,8 @@ CONTROL QUERY DEFAULT
   HBASE_SMALL_SCANNER           	SYSTEM
   HBASE_FILTER_PREDS            	2
   TRAF_INDEX_CREATE_OPT         	ON
+  TRAF_READ_OBJECT_DESC         	ON
+  TRAF_STORE_OBJECT_DESC        	ON
   HBASE_ASYNC_DROP_TABLE        	OFF
   POS                           	OFF
   SCHEMA                        	TRAFODION.T013_SCH

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/executor/TEST122
----------------------------------------------------------------------
diff --git a/core/sql/regress/executor/TEST122 b/core/sql/regress/executor/TEST122
index 2290b42..f2e0c72 100755
--- a/core/sql/regress/executor/TEST122
+++ b/core/sql/regress/executor/TEST122
@@ -389,6 +389,7 @@ log LOG122;
 ?section drop_tab
 
 set schema $$TEST_SCHEMA$$;
+obey $$scriptsdir$$/tools/sbdefs;
 
 log LOG122;
 
@@ -400,6 +401,7 @@ insert into t122t1 values ('i'), ('ii'), ('iii'), ('iv');
 
 ?section alter_tbl_add
 set schema $$TEST_SCHEMA$$;
+obey $$scriptsdir$$/tools/sbdefs;
 
 log LOG122;
 -- add columns, constraints, and indexes
@@ -412,6 +414,8 @@ create index t122t3_index on t122t3(c2);
 
 ?section alter_tbl_drop
 set schema $$TEST_SCHEMA$$;
+obey $$scriptsdir$$/tools/sbdefs;
+
 log LOG122;
 -- drop columns, constraints, and indexes
 alter table t122t3_col drop column c3;
@@ -423,6 +427,8 @@ drop index t122t3_index;
 
 ?section drop_view
 set schema $$TEST_SCHEMA$$;
+obey $$scriptsdir$$/tools/sbdefs;
+
 log LOG122;
 
 drop view t122_v7;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/fullstack2/EXPECTED062
----------------------------------------------------------------------
diff --git a/core/sql/regress/fullstack2/EXPECTED062 b/core/sql/regress/fullstack2/EXPECTED062
index ca88f6d..11fc562 100644
--- a/core/sql/regress/fullstack2/EXPECTED062
+++ b/core/sql/regress/fullstack2/EXPECTED062
@@ -501,6 +501,8 @@ CONTROL QUERY DEFAULT
   HBASE_SMALL_SCANNER           	SYSTEM
   HBASE_FILTER_PREDS            	2
   TRAF_INDEX_CREATE_OPT         	ON
+  TRAF_READ_OBJECT_DESC         	ON
+  TRAF_STORE_OBJECT_DESC        	ON
   SHOWCONTROL_SHOW_ALL          	ON
   SCHEMA                        	AAA.BBB
   CATALOG                       	CCC
@@ -545,6 +547,8 @@ CONTROL QUERY DEFAULT
   HBASE_SMALL_SCANNER           	SYSTEM
   HBASE_FILTER_PREDS            	2
   TRAF_INDEX_CREATE_OPT         	ON
+  TRAF_READ_OBJECT_DESC         	ON
+  TRAF_STORE_OBJECT_DESC        	ON
   SHOWCONTROL_SHOW_ALL          	ON
   DEF_CHUNK_SIZE                	1000
   CPUCOST_DM_GET                	.001
@@ -580,6 +584,8 @@ CONTROL QUERY DEFAULT
   HBASE_SMALL_SCANNER           	SYSTEM
   HBASE_FILTER_PREDS            	2
   TRAF_INDEX_CREATE_OPT         	ON
+  TRAF_READ_OBJECT_DESC         	ON
+  TRAF_STORE_OBJECT_DESC        	ON
   SHOWCONTROL_SHOW_ALL          	ON
   DEF_CHUNK_SIZE                	1000
   CPUCOST_DM_GET                	.001

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/fullstack2/EXPECTED062.RELEASE
----------------------------------------------------------------------
diff --git a/core/sql/regress/fullstack2/EXPECTED062.RELEASE b/core/sql/regress/fullstack2/EXPECTED062.RELEASE
index 4b48a87..849ddf7 100644
--- a/core/sql/regress/fullstack2/EXPECTED062.RELEASE
+++ b/core/sql/regress/fullstack2/EXPECTED062.RELEASE
@@ -501,6 +501,8 @@ CONTROL QUERY DEFAULT
   HBASE_SMALL_SCANNER           	SYSTEM
   HBASE_FILTER_PREDS            	2
   TRAF_INDEX_CREATE_OPT         	ON
+  TRAF_READ_OBJECT_DESC         	ON
+  TRAF_STORE_OBJECT_DESC        	ON
   SHOWCONTROL_SHOW_ALL          	ON
   SCHEMA                        	AAA.BBB
   CATALOG                       	CCC
@@ -545,6 +547,8 @@ CONTROL QUERY DEFAULT
   HBASE_SMALL_SCANNER           	SYSTEM
   HBASE_FILTER_PREDS            	2
   TRAF_INDEX_CREATE_OPT         	ON
+  TRAF_READ_OBJECT_DESC         	ON
+  TRAF_STORE_OBJECT_DESC        	ON
   SHOWCONTROL_SHOW_ALL          	ON
   DEF_CHUNK_SIZE                	1000
   CPUCOST_DM_GET                	.001
@@ -580,6 +584,8 @@ CONTROL QUERY DEFAULT
   HBASE_SMALL_SCANNER           	SYSTEM
   HBASE_FILTER_PREDS            	2
   TRAF_INDEX_CREATE_OPT         	ON
+  TRAF_READ_OBJECT_DESC         	ON
+  TRAF_STORE_OBJECT_DESC        	ON
   SHOWCONTROL_SHOW_ALL          	ON
   DEF_CHUNK_SIZE                	1000
   CPUCOST_DM_GET                	.001

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/hive/EXPECTED018
----------------------------------------------------------------------
diff --git a/core/sql/regress/hive/EXPECTED018 b/core/sql/regress/hive/EXPECTED018
index 883e349..14cd75a 100644
--- a/core/sql/regress/hive/EXPECTED018
+++ b/core/sql/regress/hive/EXPECTED018
@@ -150,9 +150,9 @@ Task:  CLEANUP         Status: Started    Object: TRAFODION.HBASE.CUSTOMER_ADDRE
 Task:  CLEANUP         Status: Ended      Object: TRAFODION.HBASE.CUSTOMER_ADDRESS
 Task:  PREPARATION     Status: Started    Object: TRAFODION.HBASE.CUSTOMER_ADDRESS
        Rows Processed: 50000 
-Task:  PREPARATION     Status: Ended      ET: 00:00:09.733
+Task:  PREPARATION     Status: Ended      ET: 00:00:08.019
 Task:  COMPLETION      Status: Started    Object: TRAFODION.HBASE.CUSTOMER_ADDRESS
-Task:  COMPLETION      Status: Ended      ET: 00:00:00.398
+Task:  COMPLETION      Status: Ended      ET: 00:00:00.251
 
 --- 50000 row(s) loaded.
 >>--
@@ -181,9 +181,9 @@ Task:  CLEANUP         Status: Started    Object: TRAFODION.HBASE.CUSTOMER_DEMOG
 Task:  CLEANUP         Status: Ended      Object: TRAFODION.HBASE.CUSTOMER_DEMOGRAPHICS
 Task:  PREPARATION     Status: Started    Object: TRAFODION.HBASE.CUSTOMER_DEMOGRAPHICS
        Rows Processed: 20000 
-Task:  PREPARATION     Status: Ended      ET: 00:00:12.160
+Task:  PREPARATION     Status: Ended      ET: 00:00:10.738
 Task:  COMPLETION      Status: Started    Object: TRAFODION.HBASE.CUSTOMER_DEMOGRAPHICS
-Task:  COMPLETION      Status: Ended      ET: 00:00:00.362
+Task:  COMPLETION      Status: Ended      ET: 00:00:00.182
 
 --- 20000 row(s) loaded.
 >>--
@@ -213,9 +213,9 @@ Task:  CLEANUP         Status: Started    Object: TRAFODION.HBASE.CUSTOMER_DEMOG
 Task:  CLEANUP         Status: Ended      Object: TRAFODION.HBASE.CUSTOMER_DEMOGRAPHICS_SALT
 Task:  PREPARATION     Status: Started    Object: TRAFODION.HBASE.CUSTOMER_DEMOGRAPHICS_SALT
        Rows Processed: 20000 
-Task:  PREPARATION     Status: Ended      ET: 00:00:08.208
+Task:  PREPARATION     Status: Ended      ET: 00:00:08.632
 Task:  COMPLETION      Status: Started    Object: TRAFODION.HBASE.CUSTOMER_DEMOGRAPHICS_SALT
-Task:  COMPLETION      Status: Ended      ET: 00:00:00.327
+Task:  COMPLETION      Status: Ended      ET: 00:00:00.165
 
 --- 20000 row(s) loaded.
 >>--                                                                              
@@ -235,9 +235,9 @@ Task:  CLEANUP         Status: Started    Object: TRAFODION.HBASE.CUSTOMER_SALT
 Task:  CLEANUP         Status: Ended      Object: TRAFODION.HBASE.CUSTOMER_SALT
 Task:  PREPARATION     Status: Started    Object: TRAFODION.HBASE.CUSTOMER_SALT
        Rows Processed: 100000 
-Task:  PREPARATION     Status: Ended      ET: 00:00:10.404
+Task:  PREPARATION     Status: Ended      ET: 00:00:07.306
 Task:  COMPLETION      Status: Started    Object: TRAFODION.HBASE.CUSTOMER_SALT
-Task:  COMPLETION      Status: Ended      ET: 00:00:00.332
+Task:  COMPLETION      Status: Ended      ET: 00:00:00.192
 
 --- 100000 row(s) loaded.
 >>--
@@ -266,9 +266,9 @@ Task:  CLEANUP         Status: Started    Object: TRAFODION.HBASE.STORE_SALES_SA
 Task:  CLEANUP         Status: Ended      Object: TRAFODION.HBASE.STORE_SALES_SALT
 Task:  PREPARATION     Status: Started    Object: TRAFODION.HBASE.STORE_SALES_SALT
        Rows Processed: 160756 
-Task:  PREPARATION     Status: Ended      ET: 00:00:13.314
+Task:  PREPARATION     Status: Ended      ET: 00:00:10.315
 Task:  COMPLETION      Status: Started    Object: TRAFODION.HBASE.STORE_SALES_SALT
-Task:  COMPLETION      Status: Ended      ET: 00:00:00.309
+Task:  COMPLETION      Status: Ended      ET: 00:00:00.168
 
 --- 160756 row(s) loaded.
 >>--
@@ -356,10 +356,10 @@ a
 +>   select * from null_format_src;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 10 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.334
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.219
 
 --- 10 row(s) unloaded.
 >>select * from hive.hive.null_format_default;
@@ -385,10 +385,10 @@ a
 +>   select * from null_format_src;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.008
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
 Task:  EXTRACT         Status: Started
        Rows Processed: 10 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.325
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.196
 
 --- 10 row(s) unloaded.
 >>select * from hive.hive.null_format_empty;
@@ -414,10 +414,10 @@ a                                                             ?
 +>   select * from null_format_src;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 10 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.409
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.199
 
 --- 10 row(s) unloaded.
 >>select * from hive.hive.null_format_colon;
@@ -445,6 +445,15 @@ a
 >>
 >>sh  regrhbase.ksh $REGRTSTDIR/TEST018_create_hbase_objects.hbase &> $REGRRUNDIR/LOG018_create_hbase_tables.log ;
 >>
+>>alter table hbase.customer_address generate stored descriptor;
+
+--- SQL operation complete.
+>>alter table hbase.customer_demographics_salt generate stored descriptor;
+
+--- SQL operation complete.
+>>alter table hbase.customer_salt generate stored descriptor;
+
+--- SQL operation complete.
 >>
 >>--exp1
 >>explain options 'f' 
@@ -471,12 +480,12 @@ LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 +>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.024
 Task:  EXTRACT         Status: Started
        Rows Processed: 50000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:04.200
+Task:  EXTRACT         Status: Ended      ET: 00:00:02.162
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.064
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.038
 
 --- 50000 row(s) unloaded.
 >>log;
@@ -509,12 +518,12 @@ LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.006
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.146
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.631
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.039
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.017
 
 --- 20000 row(s) unloaded.
 >>log;
@@ -533,12 +542,12 @@ cat /tmp/merged_customer_demogs | wc -l
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.006
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.983
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.593
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.024
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.036
 
 --- 20000 row(s) unloaded.
 >>log;
@@ -570,12 +579,12 @@ LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.010
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.386
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.790
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.052
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.028
 
 --- 20000 row(s) unloaded.
 >>
@@ -593,12 +602,12 @@ regrhadoop.ksh fs -du -s /bulkload/customer_demographics_salt/merged_customer_de
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.911
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.560
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.049
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.032
 
 --- 20000 row(s) unloaded.
 >>
@@ -631,10 +640,10 @@ LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.244
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.467
 
 --- 20000 row(s) unloaded.
 >>
@@ -654,12 +663,12 @@ regrhadoop.ksh fs -ls /bulkload/customer_demographics_salt/file* |  grep file |
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.010
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.009
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.058
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.504
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.057
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.030
 
 --- 20000 row(s) unloaded.
 >>
@@ -792,12 +801,12 @@ CD_DEMO_SK   CD_GENDER
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.982
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.560
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.048
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.035
 
 --- 20000 row(s) unloaded.
 >>log;
@@ -832,12 +841,12 @@ regrhadoop.ksh fs -ls /bulkload/customer_demographics_salt/merged* | grep merge
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.007
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.064
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.477
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.059
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.074
 
 --- 20000 row(s) unloaded.
 >>--sh sleep 10;
@@ -890,7 +899,7 @@ Task:  EMPTY TARGET    Status: Started
 Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.995
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.448
 
 --- 20000 row(s) unloaded.
 >>--sh sleep 10;
@@ -941,10 +950,10 @@ CD_DEMO_SK   CD_GENDER
 +>select * from trafodion.hbase.customer_address ;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 50000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:02.475
+Task:  EXTRACT         Status: Ended      ET: 00:00:01.450
 
 --- 50000 row(s) unloaded.
 >>--sh sleep 10;
@@ -994,10 +1003,10 @@ CA_ADDRESS_SK  CA_ADDRESS_ID
 +>select * from trafodion.hbase.customer_address ;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.011
 Task:  EXTRACT         Status: Started
        Rows Processed: 50000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:02.595
+Task:  EXTRACT         Status: Ended      ET: 00:00:01.355
 
 --- 50000 row(s) unloaded.
 >>--sh sleep 10;
@@ -1060,10 +1069,10 @@ CA_ADDRESS_SK  CA_ADDRESS_ID
 +>select * from trafodion.hbase.customer_salt;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.006
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 100000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:07.642
+Task:  EXTRACT         Status: Ended      ET: 00:00:04.708
 
 --- 100000 row(s) unloaded.
 >>--sh sleep 10;
@@ -1114,10 +1123,10 @@ C_CUSTOMER_SK  C_CUSTOMER_ID
 +>select * from trafodion.hbase.customer_demographics_salt;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.019
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.008
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.228
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.708
 
 --- 20000 row(s) unloaded.
 >>--sh sleep 10;
@@ -1170,9 +1179,9 @@ Task:  EMPTY TARGET    Status: Started
 Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 99 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.216
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.200
 Task:  MERGE FILES     Status: Started
-Task:  MERGE FILES     Status: Ended      ET: 00:00:00.023
+Task:  MERGE FILES     Status: Ended      ET: 00:00:00.020
 
 --- 99 row(s) unloaded.
 >>
@@ -1211,7 +1220,7 @@ Task:  EMPTY TARGET    Status: Started
 Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
 Task:  EXTRACT         Status: Started
        Rows Processed: 12349 
-Task:  EXTRACT         Status: Ended      ET: 00:00:10.062
+Task:  EXTRACT         Status: Ended      ET: 00:00:05.157
 
 --- 12349 row(s) unloaded.
 >>--sh sleep 10;
@@ -1330,10 +1339,10 @@ SS_SOLD_DATE_SK  SS_STORE_SK  SS_QUANTITY
 +>select * from trafodion.hbase.customer_salt c join trafodion.hbase.customer_address ca on c.c_current_addr_sk = ca.ca_address_sk ;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  EXTRACT         Status: Started
        Rows Processed: 100000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:09.838
+Task:  EXTRACT         Status: Ended      ET: 00:00:05.823
 
 --- 100000 row(s) unloaded.
 >>--sh sleep 10;
@@ -1384,7 +1393,7 @@ Task:  EMPTY TARGET    Status: Started
 Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
 Task:  EXTRACT         Status: Started
        Rows Processed: 1998 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.695
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.449
 
 --- 1998 row(s) unloaded.
 >>--sh sleep 10;
@@ -1495,7 +1504,7 @@ ESP_EXCHANGE ==============================  SEQ_NO 3        ONLY CHILD 2
   use_snapshot_scan ...... TRUE
   full_table_name ........ TRAFODION.HBASE.CUSTOMER_DEMOGRAPHICS_SALT
   snapshot_name .......... TRAFODION.HBASE.CUSTOMER_DEMOGRAPHICS_SALT_SNAP111
-  snapshot_temp_location   /bulkload/20160708212424/
+  snapshot_temp_location   /bulkload/20160728184715/
 grep -i -e 'explain reg' -e snapshot -e full_table_name  -e esp_exchange  LOG018_REGULAR_SCAN_PLAN.TXT | grep -v snapshot_scan_run_id
 >>--no snapshot
 >>explain reg;
@@ -1575,7 +1584,7 @@ grep -i -e 'explain snp' -e snapshot -e full_table_name -e esp_exchange LOG018_S
   use_snapshot_scan ...... TRUE
   full_table_name ........ TRAFODION.HBASE.CUSTOMER_ADDRESS
   snapshot_name .......... TRAFODION.HBASE.CUSTOMER_ADDRESS_SNAP111
-  snapshot_temp_location   /bulkload/20160708212436/
+  snapshot_temp_location   /bulkload/20160728184722/
 grep -i -e 'explain reg' -e snapshot -e full_table_name  -e esp_exchange  LOG018_REGULAR_SCAN_PLAN.TXT | grep -v snapshot_scan_run_id
 >>--no snapshot
 >>explain reg;
@@ -1657,11 +1666,11 @@ grep -i -e 'explain snp' -e snapshot -e full_table_name -e esp_exchange LOG018_S
   use_snapshot_scan ...... TRUE
   full_table_name ........ TRAFODION.HBASE.CUSTOMER_SALT
   snapshot_name .......... TRAFODION.HBASE.CUSTOMER_SALT_SNAP111
-  snapshot_temp_location   /bulkload/20160708212512/
+  snapshot_temp_location   /bulkload/20160728184741/
   use_snapshot_scan ...... TRUE
   full_table_name ........ TRAFODION.HBASE.CUSTOMER_ADDRESS
   snapshot_name .......... TRAFODION.HBASE.CUSTOMER_ADDRESS_SNAP111
-  snapshot_temp_location   /bulkload/20160708212512/
+  snapshot_temp_location   /bulkload/20160728184741/
 grep -i -e 'explain reg' -e snapshot -e full_table_name  -e esp_exchange  LOG018_REGULAR_SCAN_PLAN.TXT | grep -v snapshot_scan_run_id
 >>--no snapshot
 >>explain reg;
@@ -1774,13 +1783,13 @@ LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 +><<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.025
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  VERIFY SNAPSHO  Status: Started
        Snapshots verified: 1 
-Task:  VERIFY SNAPSHO  Status: Ended      ET: 00:00:00.494
+Task:  VERIFY SNAPSHO  Status: Ended      ET: 00:00:00.294
 Task:  EXTRACT         Status: Started
        Rows Processed: 50000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:03.271
+Task:  EXTRACT         Status: Ended      ET: 00:00:01.446
 
 --- 50000 row(s) unloaded.
 >>
@@ -1852,13 +1861,13 @@ LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 +>select * from trafodion.hbase.customer_demographics_salt <<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.002
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  VERIFY SNAPSHO  Status: Started
        Snapshots verified: 1 
-Task:  VERIFY SNAPSHO  Status: Ended      ET: 00:00:00.374
+Task:  VERIFY SNAPSHO  Status: Ended      ET: 00:00:00.297
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:02.347
+Task:  EXTRACT         Status: Ended      ET: 00:00:01.827
 
 --- 20000 row(s) unloaded.
 >>
@@ -1906,16 +1915,16 @@ CD_DEMO_SK   CD_GENDER
 +>select * from trafodion.hbase.customer_demographics_salt <<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.008
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.007
 Task:  CREATE SNAPSHO  Status: Started
        Snapshots created: 1 
-Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:01.520
+Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:00.436
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.725
+Task:  EXTRACT         Status: Ended      ET: 00:00:01.026
 Task:  DELETE SNAPSHO  Status: Started
        Snapshots deleted: 1 
-Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.028
+Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.010
 
 --- 20000 row(s) unloaded.
 >>
@@ -1967,16 +1976,16 @@ CD_DEMO_SK   CD_GENDER
 +>select * from trafodion.hbase.customer_demographics_salt <<+ cardinality 10e10 >>;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.009
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.007
 Task:  CREATE SNAPSHO  Status: Started
        Snapshots created: 1 
-Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:01.458
+Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:00.590
 Task:  EXTRACT         Status: Started
        Rows Processed: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.347
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.996
 Task:  DELETE SNAPSHO  Status: Started
        Snapshots deleted: 1 
-Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.006
+Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.004
 
 --- 20000 row(s) unloaded.
 >>
@@ -2029,16 +2038,16 @@ CD_DEMO_SK   CD_GENDER
 +>select * from customer_address where ca_address_sk < 1000 union select * from customer_address where ca_address_sk > 40000  and ca_address_sk < 41000;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.006
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
 Task:  CREATE SNAPSHO  Status: Started
        Snapshots created: 1 
-Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:01.079
+Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:00.500
 Task:  EXTRACT         Status: Started
        Rows Processed: 1998 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.725
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.562
 Task:  DELETE SNAPSHO  Status: Started
        Snapshots deleted: 1 
-Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.005
+Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.003
 
 --- 1998 row(s) unloaded.
 >>
@@ -2113,16 +2122,16 @@ CA_ADDRESS_SK  CA_ADDRESS_ID
 +>select * from trafodion.hbase.customer_salt c join trafodion.hbase.customer_address ca on c.c_current_addr_sk = ca.ca_address_sk ;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.004
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.003
 Task:  CREATE SNAPSHO  Status: Started
        Snapshots created: 2 
-Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:03.077
+Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:01.644
 Task:  EXTRACT         Status: Started
        Rows Processed: 100000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:09.442
+Task:  EXTRACT         Status: Ended      ET: 00:00:06.607
 Task:  DELETE SNAPSHO  Status: Started
        Snapshots deleted: 2 
-Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.009
+Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.006
 
 --- 100000 row(s) unloaded.
 >>--sh sleep 10;
@@ -2190,16 +2199,16 @@ LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 +>select c_first_name,c_last_name from trafodion.hbase.customer_salt;
 Task: UNLOAD           Status: Started
 Task:  EMPTY TARGET    Status: Started
-Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.005
+Task:  EMPTY TARGET    Status: Ended      ET: 00:00:00.009
 Task:  CREATE SNAPSHO  Status: Started
        Snapshots created: 1 
-Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:00.640
+Task:  CREATE SNAPSHO  Status: Ended      ET: 00:00:00.361
 Task:  EXTRACT         Status: Started
        Rows Processed: 100000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:01.597
+Task:  EXTRACT         Status: Ended      ET: 00:00:01.350
 Task:  DELETE SNAPSHO  Status: Started
        Snapshots deleted: 1 
-Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.007
+Task:  DELETE SNAPSHO  Status: Ended      ET: 00:00:00.004
 
 --- 100000 row(s) unloaded.
 >>--sh sleep 10;
@@ -2280,7 +2289,7 @@ unload with delimiter 0 into '/bulkload/test' select * from CUSTOMER_ADDRESS;
 Task: UNLOAD           Status: Started
 Task:  EXTRACT         Status: Started
        Rows Processed: 50000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:02.827
+Task:  EXTRACT         Status: Ended      ET: 00:00:01.328
 
 --- 50000 row(s) unloaded.
 >>--unload  24 -- should give an error
@@ -2345,7 +2354,7 @@ regrhadoop.ksh fs -rm /user/hive/exttables/unload_customer_demographics/*
 Task: UNLOAD           Status: Started
 Task:  EXTRACT         Status: Started
        Rows Processed but NOT Written to Disk: 20000 
-Task:  EXTRACT         Status: Ended      ET: 00:00:00.904
+Task:  EXTRACT         Status: Ended      ET: 00:00:00.435
 
 --- 20000 row(s) unloaded.
 >>--sh sleep 10;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/hive/TEST018
----------------------------------------------------------------------
diff --git a/core/sql/regress/hive/TEST018 b/core/sql/regress/hive/TEST018
index 5f1b611..8a17313 100644
--- a/core/sql/regress/hive/TEST018
+++ b/core/sql/regress/hive/TEST018
@@ -279,6 +279,9 @@ create index customer_idx1 on customer_salt(c_first_name, c_last_name);
 
 sh  regrhbase.ksh $REGRTSTDIR/TEST018_create_hbase_objects.hbase &> $REGRRUNDIR/LOG018_create_hbase_tables.log ;
 
+alter table hbase.customer_address generate stored descriptor;
+alter table hbase.customer_demographics_salt generate stored descriptor;
+alter table hbase.customer_salt generate stored descriptor;
 
 --exp1
 explain options 'f' 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/seabase/EXPECTED031
----------------------------------------------------------------------
diff --git a/core/sql/regress/seabase/EXPECTED031 b/core/sql/regress/seabase/EXPECTED031
index 873ed2c..b6f3a9d 100644
--- a/core/sql/regress/seabase/EXPECTED031
+++ b/core/sql/regress/seabase/EXPECTED031
@@ -1,6 +1,6 @@
 >>
 >>-- tests for PRIMARY KEY constraint usage
->>drop table if exists t031t1;
+>>drop table if exists t031t1 cascade;
 
 --- SQL operation complete.
 >>create table t031t1 (a int not null, b int not null, constraint ppk primary key(a));
@@ -431,19 +431,19 @@ Z            Z            (EXPR)  (EXPR)
 --- 1 row(s) selected.
 >>select substring(a, 1, 10), cast(b as char(10)) from hive.hive.t031hive;
 
-(EXPR)                                    (EXPR)
-----------------------------------------  ----------------------------------------
+(EXPR)      (EXPR)    
+----------  ----------
 
-aaaaaaaaaa                                def                                     
-aaaaaaaaaa                                zzz                                     
-aaaaaaaaaa                                zzz                                     
-aaaaaaaaaa                                zzz                                     
-aaaaaaaaaa                                zzz                                     
-aaaaaaaaaa                                zzz                                     
-a                                         zzz                                     
-aaaaaaaaaa                                ?                                       
-aaaaaaaaaa                                ?                                       
-aaaaaaaaaa                                ?                                       
+aaaaaaaaaa  def       
+aaaaaaaaaa  zzz       
+aaaaaaaaaa  zzz       
+aaaaaaaaaa  zzz       
+aaaaaaaaaa  zzz       
+aaaaaaaaaa  zzz       
+a           zzz       
+aaaaaaaaaa  ?         
+aaaaaaaaaa  ?         
+aaaaaaaaaa  ?         
 
 --- 10 row(s) selected.
 >>select [last 0] * from hive.hive.t031hive;
@@ -482,7 +482,7 @@ aaaaaaaaaa                                ?
 >>invoke t031t1;
 
 -- Definition of Trafodion table TRAFODION.SCH.T031T1
--- Definition current  Wed Jul 13 23:30:01 2016
+-- Definition current  Tue Aug  2 19:11:21 2016
 
   (
     SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
@@ -513,7 +513,7 @@ A            B
 >>invoke t031t1;
 
 -- Definition of Trafodion table TRAFODION.SCH.T031T1
--- Definition current  Wed Jul 13 23:30:02 2016
+-- Definition current  Tue Aug  2 19:11:28 2016
 
   (
     SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
@@ -548,4 +548,244 @@ A            B                     C
 
 --- 3 row(s) selected.
 >>
+>>-- metadata stored descriptor tests
+>>cqd traf_store_object_desc 'OFF';
+
+--- SQL operation complete.
+>>cqd traf_read_object_desc 'OFF';
+
+--- SQL operation complete.
+>>drop table if exists t031t1 cascade;
+
+--- SQL operation complete.
+>>create table t031t1 (a int);
+
+--- SQL operation complete.
+>>invoke t031t1;
+
+-- Definition of Trafodion table TRAFODION.SCH.T031T1
+-- Definition current  Tue Aug  2 19:11:35 2016
+
+  (
+    SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
+  , A                                INT DEFAULT NULL
+  )
+
+--- SQL operation complete.
+>>alter table t031t1 check stored descriptor;
+
+*** ERROR[4493] Stored Descriptor Status: Does not exist. It needs to be regenerated.
+
+--- SQL operation failed with errors.
+>>
+>>cqd traf_store_object_desc 'ON';
+
+--- SQL operation complete.
+>>cqd traf_read_object_desc 'ON';
+
+--- SQL operation complete.
+>>drop table if exists t031t1;
+
+--- SQL operation complete.
+>>create table t031t1 (a int);
+
+--- SQL operation complete.
+>>invoke t031t1;
+
+-- Definition of Trafodion table TRAFODION.SCH.T031T1
+-- Definition current  Tue Aug  2 19:11:42 2016
+
+  (
+    SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
+  , A                                INT DEFAULT NULL
+  )
+
+--- SQL operation complete.
+>>alter table t031t1 check stored descriptor;
+
+*** WARNING[4493] Stored Descriptor Status: Uptodate and current.
+
+--- SQL operation complete.
+>>
+>>alter table t031t1 delete stored descriptor;
+
+--- SQL operation complete.
+>>alter table t031t1 check stored descriptor;
+
+*** ERROR[4493] Stored Descriptor Status: Does not exist. It needs to be regenerated.
+
+--- SQL operation failed with errors.
+>>invoke t031t1;
+
+-- Definition of Trafodion table TRAFODION.SCH.T031T1
+-- Definition current  Tue Aug  2 19:11:51 2016
+
+  (
+    SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
+  , A                                INT DEFAULT NULL
+  )
+
+--- SQL operation complete.
+>>
+>>alter table t031t1 generate stored descriptor;
+
+--- SQL operation complete.
+>>alter table t031t1 check stored descriptor;
+
+*** WARNING[4493] Stored Descriptor Status: Uptodate and current.
+
+--- SQL operation complete.
+>>invoke t031t1;
+
+-- Definition of Trafodion table TRAFODION.SCH.T031T1
+-- Definition current  Tue Aug  2 19:11:53 2016
+
+  (
+    SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
+  , A                                INT DEFAULT NULL
+  )
+
+--- SQL operation complete.
+>>
+>>create view t031v1 as select * from t031t1;
+
+--- SQL operation complete.
+>>invoke t031v1;
+
+-- Definition of Trafodion view TRAFODION.SCH.T031V1
+-- Definition current  Tue Aug  2 19:11:54 2016
+
+  (
+    A                                INT DEFAULT NULL
+  )
+
+--- SQL operation complete.
+>>alter table t031v1 check stored descriptor;
+
+*** WARNING[4493] Stored Descriptor Status: Uptodate and current.
+
+--- SQL operation complete.
+>>alter table t031v1 delete stored descriptor;
+
+--- SQL operation complete.
+>>alter table t031v1 check stored descriptor;
+
+*** ERROR[4493] Stored Descriptor Status: Does not exist. It needs to be regenerated.
+
+--- SQL operation failed with errors.
+>>invoke t031v1;
+
+-- Definition of Trafodion view TRAFODION.SCH.T031V1
+-- Definition current  Tue Aug  2 19:11:59 2016
+
+  (
+    A                                INT DEFAULT NULL
+  )
+
+--- SQL operation complete.
+>>alter table t031v1 generate stored descriptor;
+
+--- SQL operation complete.
+>>alter table t031v1 check stored descriptor;
+
+*** WARNING[4493] Stored Descriptor Status: Uptodate and current.
+
+--- SQL operation complete.
+>>invoke t031v1;
+
+-- Definition of Trafodion view TRAFODION.SCH.T031V1
+-- Definition current  Tue Aug  2 19:12:01 2016
+
+  (
+    A                                INT DEFAULT NULL
+  )
+
+--- SQL operation complete.
+>>
+>>create index t031t1i1 on t031t1(a);
+
+--- SQL operation complete.
+>>showddl t031t1;
+
+CREATE TABLE TRAFODION.SCH.T031T1
+  (
+    A                                INT DEFAULT NULL
+  )
+;
+
+CREATE INDEX T031T1I1 ON TRAFODION.SCH.T031T1
+  (
+    A ASC
+  )
+;
+
+--- SQL operation complete.
+>>alter table t031t1 check stored descriptor;
+
+*** WARNING[4493] Stored Descriptor Status: Uptodate and current.
+
+--- SQL operation complete.
+>>alter table t031t1 delete stored descriptor;
+
+--- SQL operation complete.
+>>alter table t031t1 check stored descriptor;
+
+*** ERROR[4493] Stored Descriptor Status: Does not exist. It needs to be regenerated.
+
+--- SQL operation failed with errors.
+>>showddl t031t1;
+
+CREATE TABLE TRAFODION.SCH.T031T1
+  (
+    A                                INT DEFAULT NULL
+  )
+;
+
+CREATE INDEX T031T1I1 ON TRAFODION.SCH.T031T1
+  (
+    A ASC
+  )
+;
+
+--- SQL operation complete.
+>>alter table t031t1 generate stored descriptor;
+
+--- SQL operation complete.
+>>alter table t031t1 check stored descriptor;
+
+*** WARNING[4493] Stored Descriptor Status: Uptodate and current.
+
+--- SQL operation complete.
+>>showddl t031t1;
+
+CREATE TABLE TRAFODION.SCH.T031T1
+  (
+    A                                INT DEFAULT NULL
+  )
+;
+
+CREATE INDEX T031T1I1 ON TRAFODION.SCH.T031T1
+  (
+    A ASC
+  )
+;
+
+--- SQL operation complete.
+>>
+>>set parserflags 1;
+
+--- SQL operation complete.
+>>invoke table(index_table t031t1i1);
+
+-- Definition of Trafodion table TRAFODION.SCH.T031T1I1
+-- Definition current  Tue Aug  2 19:12:17 2016
+
+  (
+    "A@"                             INT NO DEFAULT
+  , SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
+  )
+  PRIMARY KEY ("A@" ASC, SYSKEY ASC)
+
+--- SQL operation complete.
+>>
 >>log;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/seabase/TEST031
----------------------------------------------------------------------
diff --git a/core/sql/regress/seabase/TEST031 b/core/sql/regress/seabase/TEST031
index 382e18f..94b2122 100644
--- a/core/sql/regress/seabase/TEST031
+++ b/core/sql/regress/seabase/TEST031
@@ -25,7 +25,7 @@
 log LOG031 clear;
 
 -- tests for PRIMARY KEY constraint usage
-drop table if exists t031t1;
+drop table if exists t031t1 cascade;
 create table t031t1 (a int not null, b int not null, constraint ppk primary key(a));
 alter table t031t1 add constraint ppk primary key(b);
 alter table t031t1 add constraint ppk2 primary key(b);
@@ -179,4 +179,50 @@ select * from t031t1;
 insert into t031t1 default values;
 select * from t031t1;
 
+-- metadata stored descriptor tests
+cqd traf_store_object_desc 'OFF';
+cqd traf_read_object_desc 'OFF';
+drop table if exists t031t1 cascade;
+create table t031t1 (a int);
+invoke t031t1;
+alter table t031t1 check stored descriptor;
+
+cqd traf_store_object_desc 'ON';
+cqd traf_read_object_desc 'ON';
+drop table if exists t031t1;
+create table t031t1 (a int);
+invoke t031t1;
+alter table t031t1 check stored descriptor;
+
+alter table t031t1 delete stored descriptor;
+alter table t031t1 check stored descriptor;
+invoke t031t1;
+
+alter table t031t1 generate stored descriptor;
+alter table t031t1 check stored descriptor;
+invoke t031t1;
+
+create view t031v1 as select * from t031t1;
+invoke t031v1;
+alter table t031v1 check stored descriptor;
+alter table t031v1 delete stored descriptor;
+alter table t031v1 check stored descriptor;
+invoke t031v1;
+alter table t031v1 generate stored descriptor;
+alter table t031v1 check stored descriptor;
+invoke t031v1;
+
+create index t031t1i1 on t031t1(a);
+showddl t031t1;
+alter table t031t1 check stored descriptor;
+alter table t031t1 delete stored descriptor;
+alter table t031t1 check stored descriptor;
+showddl t031t1;
+alter table t031t1 generate stored descriptor;
+alter table t031t1 check stored descriptor;
+showddl t031t1;
+
+set parserflags 1;
+invoke table(index_table t031t1i1);
+
 log;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/regress/tools/sbdefs
----------------------------------------------------------------------
diff --git a/core/sql/regress/tools/sbdefs b/core/sql/regress/tools/sbdefs
index ec6d988..20e09f5 100644
--- a/core/sql/regress/tools/sbdefs
+++ b/core/sql/regress/tools/sbdefs
@@ -33,6 +33,8 @@ cqd traf_aligned_row_format 'OFF';
 --cqd traf_default_col_charset 'UTF8';
 cqd traf_index_create_opt 'ON';
 --cqd ddl_transactions 'ON';
+cqd traf_read_object_desc 'ON';
+cqd traf_store_object_desc 'ON';
 cqd schema '$$TEST_SCHEMA$$';
 set SCHEMA $$TEST_SCHEMA$$;
 #endif


[06/10] incubator-trafodion git commit: metadata access performance improvement for accessing traf objects

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/NAColumn.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NAColumn.cpp b/core/sql/optimizer/NAColumn.cpp
index 9a726a8..812c951 100644
--- a/core/sql/optimizer/NAColumn.cpp
+++ b/core/sql/optimizer/NAColumn.cpp
@@ -39,6 +39,7 @@
 #include "NATable.h"
 #include "Sqlcomp.h"
 #include "ex_error.h"
+#include "TrafDDLdesc.h"
 
 // -----------------------------------------------------------------------
 // Can't be inline because then circular #include-dependencies
@@ -154,17 +155,16 @@ const QualifiedName& NAColumn::getNotNullConstraintName() const
 
 // warning elimination (removed "inline")
 static NAString makeTableName(const NATable *table,
-			      const columns_desc_struct *column_desc)
+			      const TrafColumnsDesc *column_desc)
 {
   return NAString(
-	      table ?
-		table->getTableName().getQualifiedNameAsAnsiString().data() :
-	      column_desc->tablename ?
-		column_desc->tablename : "");
+       table ?
+       table->getTableName().getQualifiedNameAsAnsiString().data() : "");
 }
+
 // warning elimination (removed "inline")
 static NAString makeColumnName(const NATable *table,
-			       const columns_desc_struct *column_desc)
+			       const TrafColumnsDesc *column_desc)
 {
   NAString nam(makeTableName(table, column_desc));
   if (!nam.isNull()) nam += ".";
@@ -173,9 +173,9 @@ static NAString makeColumnName(const NATable *table,
 }
 
 // -----------------------------------------------------------------------
-// Method for creating NAType from desc_struct.
+// Method for creating NAType from TrafDesc.
 // -----------------------------------------------------------------------
-NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
+NABoolean NAColumn::createNAType(TrafColumnsDesc *column_desc	/*IN*/,
 				 const NATable *table  		/*IN*/,
 				 NAType *&type       		/*OUT*/,
 				 NAMemory *heap			/*IN*/,
@@ -187,7 +187,7 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
   //
   #define REC_INTERVAL REC_MIN_INTERVAL
 
-  DataType datatype = column_desc->datatype;
+  Int16 datatype = column_desc->datatype;
   if (REC_MIN_INTERVAL <= datatype && datatype <= REC_MAX_INTERVAL)
     datatype = REC_INTERVAL;
 
@@ -195,7 +195,7 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 
   if ( DFS2REC::isAnyCharacter(column_desc->datatype) )
   {
-     if ( CharInfo::isCharSetSupported(column_desc->character_set) == FALSE ) {
+     if ( CharInfo::isCharSetSupported(column_desc->characterSet()) == FALSE ) {
        if (!errorCode)
        {
          *CmpCommon::diags() << DgSqlCode(-4082)
@@ -208,7 +208,7 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
        return TRUE; // error
      }
 
-     if ( CharInfo::is_NCHAR_MP(column_desc->character_set) )
+     if ( CharInfo::is_NCHAR_MP(column_desc->characterSet()) )
         charCount /= SQL_DBCHAR_SIZE;
   }
 
@@ -217,7 +217,7 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 
     case REC_BPINT_UNSIGNED :
       type = new (heap)
-      SQLBPInt(column_desc->precision, column_desc->null_flag, FALSE, heap);
+      SQLBPInt(column_desc->precision, column_desc->isNullable(), FALSE, heap);
       break;
 
     case REC_BIN8_SIGNED:
@@ -227,13 +227,13 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLTiny(TRUE,
-		 column_desc->null_flag,
+		 column_desc->isNullable(),
                  heap
 		 );
       break;
@@ -244,13 +244,13 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLTiny(FALSE,
-		 column_desc->null_flag,
+		 column_desc->isNullable(),
                  heap
 		 );
       break;
@@ -262,13 +262,13 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLSmall(TRUE,
-		 column_desc->null_flag,
+		 column_desc->isNullable(),
                  heap
 		 );
       break;
@@ -279,13 +279,13 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLSmall(FALSE,
-		 column_desc->null_flag,
+		 column_desc->isNullable(),
                  heap
 		 );
       break;
@@ -297,13 +297,13 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLInt(TRUE,
-	       column_desc->null_flag,
+	       column_desc->isNullable(),
                heap
 	       );
       break;
@@ -314,13 +314,13 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLInt(FALSE,
-	       column_desc->null_flag,
+	       column_desc->isNullable(),
                heap
 	       );
       break;
@@ -331,13 +331,13 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLLargeInt(TRUE,
-		    column_desc->null_flag,
+		    column_desc->isNullable(),
                     heap
 		    );
       break;
@@ -348,13 +348,13 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
         SQLLargeInt(FALSE,
-		    column_desc->null_flag,
+		    column_desc->isNullable(),
                     heap
 		    );
       break;
@@ -363,7 +363,7 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 	SQLDecimal(column_desc->length,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       break;
@@ -372,7 +372,7 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 	SQLDecimal(column_desc->length,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       break;
@@ -382,7 +382,7 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		  column_desc->scale,
 		  TRUE, // is a real bignum
 		  FALSE,
-		  column_desc->null_flag,
+		  column_desc->isNullable(),
 		  heap
 		  );
       break;
@@ -392,65 +392,65 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
 		  column_desc->scale,
 		  TRUE, // is a real bignum
 		  TRUE,
-		  column_desc->null_flag,
+		  column_desc->isNullable(),
 		  heap
 		  );
       break;
 
     case REC_FLOAT32:
       type = new (heap)
-	SQLReal(column_desc->null_flag, heap, column_desc->precision);
+	SQLReal(column_desc->isNullable(), heap, column_desc->precision);
       break;
 
     case REC_FLOAT64:
       type = new (heap)
-	SQLDoublePrecision(column_desc->null_flag, heap, column_desc->precision);
+	SQLDoublePrecision(column_desc->isNullable(), heap, column_desc->precision);
       break;
 
     case REC_BYTE_F_DOUBLE:
       charCount /= SQL_DBCHAR_SIZE;	    // divide the storage length by 2
       type = new (heap)
 	SQLChar(charCount,
-		column_desc->null_flag,
-		column_desc->upshift,
-		column_desc->caseinsensitive,
+		column_desc->isNullable(),
+		column_desc->isUpshifted(),
+		column_desc->isCaseInsensitive(),
 		FALSE,
-		column_desc->character_set,
-		column_desc->collation_sequence,
+		column_desc->characterSet(),
+		column_desc->collationSequence(),
 		CharInfo::IMPLICIT
 		);
       break;
 
     case REC_BYTE_F_ASCII:
-      if (column_desc->character_set == CharInfo::UTF8 ||
-          (column_desc->character_set == CharInfo::SJIS &&
-           column_desc->encoding_charset == CharInfo::SJIS))
+      if (column_desc->characterSet() == CharInfo::UTF8 ||
+          (column_desc->characterSet() == CharInfo::SJIS &&
+           column_desc->encodingCharset() == CharInfo::SJIS))
       {
-        Lng32 maxBytesPerChar = CharInfo::maxBytesPerChar(column_desc->character_set);
+        Lng32 maxBytesPerChar = CharInfo::maxBytesPerChar(column_desc->characterSet());
         Lng32 sizeInChars = charCount ;  // Applies when CharLenUnit == BYTES
         if ( column_desc->precision > 0 )
            sizeInChars = column_desc->precision;
         type = new (heap)
 	SQLChar(CharLenInfo(sizeInChars, charCount/*in_bytes*/),
-		column_desc->null_flag,
-		column_desc->upshift,
-		column_desc->caseinsensitive,
+		column_desc->isNullable(),
+		column_desc->isUpshifted(),
+		column_desc->isCaseInsensitive(),
 		FALSE, // varLenFlag
-		column_desc->character_set,
-		column_desc->collation_sequence,
+		column_desc->characterSet(),
+		column_desc->collationSequence(),
 		CharInfo::IMPLICIT, // Coercibility
-		column_desc->encoding_charset
+		column_desc->encodingCharset()
 		);
       }
       else // keep the old behavior
       type = new (heap)
 	SQLChar(charCount,
-		column_desc->null_flag,
-		column_desc->upshift,
-		column_desc->caseinsensitive,
+		column_desc->isNullable(),
+		column_desc->isUpshifted(),
+		column_desc->isCaseInsensitive(),
 		FALSE,
-		column_desc->character_set,
-		column_desc->collation_sequence,
+		column_desc->characterSet(),
+		column_desc->collationSequence(),
 		CharInfo::IMPLICIT
 		);
       break;
@@ -459,32 +459,32 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
       charCount /= SQL_DBCHAR_SIZE;	    // divide the storage length by 2
       // fall thru
     case REC_BYTE_V_ASCII:
-      if (column_desc->character_set == CharInfo::SJIS ||
-          column_desc->character_set == CharInfo::UTF8)
+      if (column_desc->characterSet() == CharInfo::SJIS ||
+          column_desc->characterSet() == CharInfo::UTF8)
       {
-        Lng32 maxBytesPerChar = CharInfo::maxBytesPerChar(column_desc->character_set);
+        Lng32 maxBytesPerChar = CharInfo::maxBytesPerChar(column_desc->characterSet());
         Lng32 sizeInChars = charCount ;  // Applies when CharLenUnit == BYTES
         if ( column_desc->precision > 0 )
            sizeInChars = column_desc->precision;
         type = new (heap)
 	SQLVarChar(CharLenInfo(sizeInChars, charCount/*in_bytes*/),
-		   column_desc->null_flag,
-		   column_desc->upshift,
-		   column_desc->caseinsensitive,
-		   column_desc->character_set,
-		   column_desc->collation_sequence,
+		   column_desc->isNullable(),
+		   column_desc->isUpshifted(),
+		   column_desc->isCaseInsensitive(),
+		   column_desc->characterSet(),
+		   column_desc->collationSequence(),
 		   CharInfo::IMPLICIT, // Coercibility
-		   column_desc->encoding_charset
+		   column_desc->encodingCharset()
 		   );
       }
       else // keep the old behavior
       type = new (heap)
 	SQLVarChar(charCount,
-		   column_desc->null_flag,
-		   column_desc->upshift,
-		   column_desc->caseinsensitive,
-		   column_desc->character_set,
-		   column_desc->collation_sequence,
+		   column_desc->isNullable(),
+		   column_desc->isUpshifted(),
+		   column_desc->isCaseInsensitive(),
+		   column_desc->characterSet(),
+		   column_desc->collationSequence(),
 		   CharInfo::IMPLICIT
 		   );
       break;
@@ -493,47 +493,47 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
       type = new (heap)
 	SQLLongVarChar(charCount,
 		       FALSE,
-		       column_desc->null_flag,
-		       column_desc->upshift,
-		       column_desc->caseinsensitive,
-		       column_desc->character_set,
-		       column_desc->collation_sequence,
+		       column_desc->isNullable(),
+		       column_desc->isUpshifted(),
+		       column_desc->isCaseInsensitive(),
+		       column_desc->characterSet(),
+		       column_desc->collationSequence(),
 		       CharInfo::IMPLICIT
 		      );
       break;
     case REC_DATETIME:
       type = DatetimeType::constructSubtype(
-					    column_desc->null_flag,
-					    column_desc->datetimestart,
-					    column_desc->datetimeend,
+					    column_desc->isNullable(),
+					    column_desc->datetimeStart(),
+					    column_desc->datetimeEnd(),
 					    column_desc->datetimefractprec,
 					    heap
 					    );
       CMPASSERT(type);
       if (!type->isSupportedType())
 	{
-         column_desc->defaultClass = COM_NO_DEFAULT;           // can't set a default for these, either.
+          column_desc->setDefaultClass(COM_NO_DEFAULT);           // can't set a default for these, either.
 	  // 4030 Column is an unsupported combination of datetime fields
-     if (!errorCode)
-     {
-         *CmpCommon::diags() << DgSqlCode(4030)
-	    << DgColumnName(makeColumnName(table, column_desc))
-	    << DgInt0(column_desc->datetimestart)
-	    << DgInt1(column_desc->datetimeend)
-	    << DgInt2(column_desc->datetimefractprec);
-     }
-     else
-     {
-       *errorCode = 4030;
-     }
+          if (!errorCode)
+            {
+              *CmpCommon::diags() << DgSqlCode(4030)
+                                  << DgColumnName(makeColumnName(table, column_desc))
+                                  << DgInt0(column_desc->datetimeStart())
+                                  << DgInt1(column_desc->datetimeEnd())
+                                  << DgInt2(column_desc->datetimefractprec);
+            }
+          else
+            {
+              *errorCode = 4030;
+            }
 	}
       break;
     case REC_INTERVAL:
       type = new (heap)
-         SQLInterval(column_desc->null_flag,
-		    column_desc->datetimestart,
+         SQLInterval(column_desc->isNullable(),
+		    column_desc->datetimeStart(),
 		    column_desc->intervalleadingprec,
-		    column_desc->datetimeend,
+		    column_desc->datetimeEnd(),
 		    column_desc->datetimefractprec,
                     heap
 		    );
@@ -542,7 +542,7 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
          return TRUE;                                            // error
       if (!type->isSupportedType())
       {
-        column_desc->defaultClass = COM_NO_DEFAULT;           // can't set a default for these, either.
+        column_desc->setDefaultClass(COM_NO_DEFAULT);           // can't set a default for these, either.
         if (!errorCode)
           *CmpCommon::diags() << DgSqlCode(3044) << DgString0(column_desc->colname);
         else
@@ -553,17 +553,17 @@ NABoolean NAColumn::createNAType(columns_desc_struct *column_desc	/*IN*/,
     case REC_BLOB :
       type = new (heap)
 	SQLBlob(column_desc->precision, Lob_Invalid_Storage,
-		column_desc->null_flag);
+		column_desc->isNullable());
       break;
 
     case REC_CLOB :
       type = new (heap)
 	SQLClob(column_desc->precision, Lob_Invalid_Storage,
-		column_desc->null_flag);
+		column_desc->isNullable());
       break;
 
     case REC_BOOLEAN :
-      type = new (heap) SQLBooleanNative(column_desc->null_flag);
+      type = new (heap) SQLBooleanNative(column_desc->isNullable());
       break;
 
     default:

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/NAColumn.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NAColumn.h b/core/sql/optimizer/NAColumn.h
index 2c13c57..4c3d928 100644
--- a/core/sql/optimizer/NAColumn.h
+++ b/core/sql/optimizer/NAColumn.h
@@ -54,7 +54,7 @@ class CheckConstraint;
 class DomainDesc;
 class NATable;
 class NAType;
-struct columns_desc_struct;
+class TrafColumnsDesc;
 
 enum ColumnClass  { SYSTEM_COLUMN, USER_COLUMN, USER_AND_SYSTEM_COLUMNS };
 enum SortOrdering { NOT_ORDERED = 0, ASCENDING = +1, DESCENDING = -1 };
@@ -328,7 +328,7 @@ public:
   inline void setMvSystemAddedColumn() { mvSystemAddedColumn_ = TRUE; }
   inline NABoolean isMvSystemAddedColumn() const { return mvSystemAddedColumn_; }
 
-  static NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
+  static NABoolean createNAType(TrafColumnsDesc *column_desc	/*IN*/,
 				const NATable *table  		/*IN*/,
 				NAType *&type       		/*OUT*/,
 				NAMemory *heap			/*IN*/,

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/NAFileSet.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NAFileSet.cpp b/core/sql/optimizer/NAFileSet.cpp
index ea6b840..3f2b699 100644
--- a/core/sql/optimizer/NAFileSet.cpp
+++ b/core/sql/optimizer/NAFileSet.cpp
@@ -76,7 +76,7 @@ NAFileSet::NAFileSet(const QualifiedName & fileSetName,
 		     NABoolean isVolatile,
 		     NABoolean inMemObjectDefn,
                      Int64 indexUID,
-                     desc_struct *keysDesc,
+                     TrafDesc *keysDesc,
                      HHDFSTableStats *hHDFSTableStats,
                      Lng32 numSaltPartns,
                      NAList<HbaseCreateOption*>* hbaseCreateOptions,

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/NAFileSet.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NAFileSet.h b/core/sql/optimizer/NAFileSet.h
index ea4414e..92b1c3c 100644
--- a/core/sql/optimizer/NAFileSet.h
+++ b/core/sql/optimizer/NAFileSet.h
@@ -53,7 +53,7 @@ class NAFileSetList;
 // Forward declarations
 // -----------------------------------------------------------------------
 class PartitioningFunction;
-struct desc_struct;
+class TrafDesc;
 class HHDFSTableStats;
 class HbaseCreateOption;
 
@@ -117,7 +117,7 @@ public:
 	    NABoolean isVolatile,
 	    NABoolean inMemObjectDefn,
             Int64 indexUID,
-            desc_struct *keysDesc,
+            TrafDesc *keysDesc,
             HHDFSTableStats *hHDFSTableStats,
             Lng32 numSaltPartns,
             NAList<HbaseCreateOption*>* hbaseCreateOptions,
@@ -153,8 +153,8 @@ public:
   const NAColumnArray & getIndexKeyColumns() const
                                               { return indexKeyColumns_; }
 
-  const desc_struct * getKeysDesc() const { return keysDesc_; }
-  desc_struct * getKeysDesc() { return keysDesc_; }
+  const TrafDesc * getKeysDesc() const { return keysDesc_; }
+  TrafDesc * getKeysDesc() { return keysDesc_; }
 
   Lng32 getCountOfFiles() const                  { return countOfFiles_; }
 
@@ -391,7 +391,7 @@ private:
   // uid for index
   Int64 indexUID_;
 
-  desc_struct *keysDesc_;  // needed for parallel label operations.
+  TrafDesc *keysDesc_;  // needed for parallel label operations.
 
   // ---------------------------------------------------------------------
   // Horizontal partitioning:

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/NARoutine.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NARoutine.cpp b/core/sql/optimizer/NARoutine.cpp
index bc8c504..e3d8571 100644
--- a/core/sql/optimizer/NARoutine.cpp
+++ b/core/sql/optimizer/NARoutine.cpp
@@ -32,7 +32,7 @@
 **************************************************************************
 */
 #include "BaseTypes.h"
-#include "desc.h"
+#include "TrafDDLdesc.h"
 #include "BindWA.h"
 #include "NAType.h"
 #include "NumericType.h"
@@ -343,29 +343,29 @@ NARoutine::NARoutine (const NARoutine &old, CollHeap *h)
 }
 
 NARoutine::NARoutine(const QualifiedName   &name,
-           const desc_struct    *routine_desc,
+           const TrafDesc    *routine_desc,
            BindWA                *bindWA,
            Int32                 &errorOccurred,
            NAMemory              *heap)
     : name_                   (name, heap)
     , hashKey_                (name, heap) 
-    , language_               (routine_desc->body.routine_desc.language)
-    , UDRType_                (routine_desc->body.routine_desc.UDRType)
-    , sqlAccess_              (routine_desc->body.routine_desc.sqlAccess)
-    , transactionAttributes_  (routine_desc->body.routine_desc.transactionAttributes)
-    , maxResults_             (routine_desc->body.routine_desc.maxResults)
-    , stateAreaSize_          (routine_desc->body.routine_desc.stateAreaSize)
+    , language_               (routine_desc->routineDesc()->language)
+    , UDRType_                (routine_desc->routineDesc()->UDRType)
+    , sqlAccess_              (routine_desc->routineDesc()->sqlAccess)
+    , transactionAttributes_  (routine_desc->routineDesc()->transactionAttributes)
+    , maxResults_             (routine_desc->routineDesc()->maxResults)
+    , stateAreaSize_          (routine_desc->routineDesc()->stateAreaSize)
     , externalFile_           ("", heap)
-    , externalPath_           (routine_desc->body.routine_desc.libraryFileName, heap)
+    , externalPath_           (routine_desc->routineDesc()->libraryFileName, heap)
     , externalName_           ("", heap)
-    , librarySqlName_         (routine_desc->body.routine_desc.librarySqlName, COM_UNKNOWN_NAME, FALSE, heap) //TODO
-    , signature_              (routine_desc->body.routine_desc.signature, heap)
-    , paramStyle_             (routine_desc->body.routine_desc.paramStyle)
+    , librarySqlName_         (routine_desc->routineDesc()->librarySqlName, COM_UNKNOWN_NAME, FALSE, heap) //TODO
+    , signature_              (routine_desc->routineDesc()->signature, heap)
+    , paramStyle_             (routine_desc->routineDesc()->paramStyle)
     , paramStyleVersion_      (COM_ROUTINE_PARAM_STYLE_VERSION_1)
-    , isDeterministic_        (routine_desc->body.routine_desc.isDeterministic)
-    , isCallOnNull_           (routine_desc->body.routine_desc.isCallOnNull )
-    , isIsolate_              (routine_desc->body.routine_desc.isIsolate)
-    , externalSecurity_       (routine_desc->body.routine_desc.externalSecurity)
+    , isDeterministic_        (routine_desc->routineDesc()->isDeterministic)
+    , isCallOnNull_           (routine_desc->routineDesc()->isCallOnNull )
+    , isIsolate_              (routine_desc->routineDesc()->isIsolate)
+    , externalSecurity_       (routine_desc->routineDesc()->externalSecurity)
     , isExtraCall_            (FALSE) //TODO
     , hasOutParams_           (FALSE)
     , redefTime_              (0)  //TODO
@@ -379,33 +379,33 @@ NARoutine::NARoutine(const QualifiedName   &name,
     , isUniversal_            (0) // TODO
     , actionPosition_         (0) // TODO
     , executionMode_          (COM_ROUTINE_SAFE_EXECUTION)
-    , objectUID_              (routine_desc->body.routine_desc.objectUID)
-    , dllName_                (routine_desc->body.routine_desc.libraryFileName, heap)
-    , dllEntryPoint_          (routine_desc->body.routine_desc.externalName, heap)
+    , objectUID_              (routine_desc->routineDesc()->objectUID)
+    , dllName_                (routine_desc->routineDesc()->libraryFileName, heap)
+    , dllEntryPoint_          (routine_desc->routineDesc()->externalName, heap)
     , sasFormatWidth_         ("", heap) //TODO
     , systemName_             ("", heap) // TODO
     , dataSource_             ("", heap) // TODO
     , fileSuffix_             ("", heap) // TODO
     , schemaVersionOfRoutine_ ((COM_VERSION)0) // TODO
-    , objectOwner_            (routine_desc->body.routine_desc.owner)
-    , schemaOwner_            (routine_desc->body.routine_desc.schemaOwner)
+    , objectOwner_            (routine_desc->routineDesc()->owner)
+    , schemaOwner_            (routine_desc->routineDesc()->schemaOwner)
     , privInfo_               (NULL)
     , heap_(heap)
 {
   char parallelism[5];
-  CmGetComRoutineParallelismAsLit(routine_desc->body.routine_desc.parallelism, parallelism);
+  CmGetComRoutineParallelismAsLit(routine_desc->routineDesc()->parallelism, parallelism);
   comRoutineParallelism_ = ((char *)parallelism);
 
   if (paramStyle_ == COM_STYLE_JAVA_CALL)
   {
-    NAString extName(routine_desc->body.routine_desc.externalName);
+    NAString extName(routine_desc->routineDesc()->externalName);
     size_t pos=extName.last('.');
     externalName_ = extName(pos+1, (extName.length()-pos-1)); // method_name
     externalFile_ = extName.remove (pos); // package_name.class_name 
   }
   else
   {
-    externalName_ = routine_desc->body.routine_desc.externalName;
+    externalName_ = routine_desc->routineDesc()->externalName;
     if (language_ == COM_LANGUAGE_C ||
         language_ == COM_LANGUAGE_CPP)
       {
@@ -434,7 +434,7 @@ NARoutine::NARoutine(const QualifiedName   &name,
       } // if (len > 0)
   }
 
-  ComSInt32 colCount = routine_desc->body.routine_desc.paramsCount;
+  ComSInt32 colCount = routine_desc->routineDesc()->paramsCount;
   NAColumn *newCol = NULL;
   NAType   *newColType = NULL;
   extRoutineName_ = new (heap) ExtendedQualName( name_, heap );
@@ -475,16 +475,16 @@ NARoutine::NARoutine(const QualifiedName   &name,
   normalRowCost_.setIOTime( normIOCost < 0 ? csMinusOne  : normalIOCost);
   normalRowCost_.setMSGTime( normMsgCost < 0 ? csMinusOne  : normalMsgCost);
 
-  const desc_struct *params_desc_list  = routine_desc->body.routine_desc.params;
-  const columns_desc_struct *param_desc;
+  TrafDesc *params_desc_list  = routine_desc->routineDesc()->params;
+  TrafColumnsDesc *param_desc;
 
   int i = 0;
   while (params_desc_list)
   {
-    param_desc = &params_desc_list->body.columns_desc;
+    param_desc = params_desc_list->columnsDesc();
 
     // Create the new NAType.
-    if (NAColumn::createNAType((columns_desc_struct *)param_desc, (const NATable *)NULL, newColType, heap_))
+    if (NAColumn::createNAType(param_desc->columnsDesc(), (const NATable *)NULL, newColType, heap_))
       {
       errorOccurred = TRUE;
       return;
@@ -494,7 +494,7 @@ NARoutine::NARoutine(const QualifiedName   &name,
       memset(param_desc->colname, 0, 2);
     }
 
-    ComParamDirection colDirection = param_desc->paramDirection;
+    ComParamDirection colDirection = param_desc->paramDirection();
     
     // Create the new NAColumn and insert it into the NAColumnArray
     newCol = new (heap) NAColumn(
@@ -507,10 +507,10 @@ NARoutine::NARoutine(const QualifiedName   &name,
          , COM_NO_DEFAULT
          , NULL   // default value
          , UDRCopyString("", heap) // TODO:heading can it have some value
-         , param_desc->upshift
+         , param_desc->isUpshifted()
          , FALSE // addedColumn
          , (ComColumnDirection) colDirection
-         , param_desc->isOptional
+         , param_desc->isOptional()
          , (char *) COM_NORMAL_PARAM_TYPE_LIT
 				 );
 	
@@ -566,7 +566,7 @@ NARoutine::NARoutine(const QualifiedName   &name,
 
     direction[i] = (ComColumnDirection) colDirection;
     
-    params_desc_list = params_desc_list->header.next;
+    params_desc_list = params_desc_list->next;
     i++;
   } // for
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/NARoutine.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NARoutine.h b/core/sql/optimizer/NARoutine.h
index d725c0d..395955c 100644
--- a/core/sql/optimizer/NARoutine.h
+++ b/core/sql/optimizer/NARoutine.h
@@ -100,7 +100,7 @@ public:
   // How to set up the NARoutineDB and delete the NARoutineDB entry at the
   // end of the statement, use contextHeap()
   NARoutine(const QualifiedName   &name,
-            const desc_struct    *desc_struct,
+            const TrafDesc    *TrafDesc,
             BindWA                *bindWA,
             Int32                   &errorOccurred,
             NAMemory              *heap = CmpCommon::contextHeap());


[05/10] incubator-trafodion git commit: metadata access performance improvement for accessing traf objects

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/NATable.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NATable.cpp b/core/sql/optimizer/NATable.cpp
index 098e514..eb68a51 100644
--- a/core/sql/optimizer/NATable.cpp
+++ b/core/sql/optimizer/NATable.cpp
@@ -45,7 +45,6 @@
 #include "NATable.h"
 #include "Sqlcomp.h"
 #include "Const.h"
-#include "desc.h"
 #include "dfs2rec.h"
 #include "hs_read.h"
 #include "parser.h"
@@ -84,6 +83,7 @@
 #include "ComUser.h"
 #include "ComSmallDefs.h"
 #include "CmpMain.h"
+#include "TrafDDLdesc.h"
 
 #define MAX_NODE_NAME 9
 #define MAX_PRECISION_ALLOWED  18
@@ -96,7 +96,7 @@
 
 
 #include "SqlParserGlobals.h"
-extern desc_struct *generateSpecialDesc(const CorrName& corrName);
+extern TrafDesc *generateSpecialDesc(const CorrName& corrName);
 
 #include "CmpMemoryMonitor.h"
 
@@ -1871,7 +1871,7 @@ NABoolean checkColumnTypeForSupportability(const NAColumnArray & partColArray, c
 // -----------------------------------------------------------------------
 #pragma nowarn(1506)   // warning elimination
 static RangePartitionBoundaries * createRangePartitionBoundaries
-                                     (desc_struct * part_desc_list,
+                                     (TrafDesc * part_desc_list,
 				      Lng32 numberOfPartitions,
 			              const NAColumnArray & partColArray,
 				      NAMemory* heap)
@@ -1883,8 +1883,8 @@ static RangePartitionBoundaries * createRangePartitionBoundaries
   //             first partition and the last element is the descriptor
   //             for the last partition, in partitioning key sequence.
   // ---------------------------------------------------------------------
-    desc_struct * partns_desc = part_desc_list;
-  CMPASSERT(partns_desc->body.partns_desc.primarypartition);
+    TrafDesc * partns_desc = part_desc_list;
+  CMPASSERT(partns_desc->partnsDesc()->primarypartition);
 
 
   // Check all the partitioning keys.  If any of them are not
@@ -1893,7 +1893,7 @@ static RangePartitionBoundaries * createRangePartitionBoundaries
   // Skip past the primary partition, so that a meaningful first
   // key value can be used for the error message.
 
-  char* key = (partns_desc->header.next) ->body.partns_desc.firstkey;
+  char* key = (partns_desc->next) ->partnsDesc()->firstkey;
 
   if ( !checkColumnTypeForSupportability(partColArray, key) )
     return NULL;
@@ -1920,14 +1920,14 @@ static RangePartitionBoundaries * createRangePartitionBoundaries
   // string in the SMD.
   // NOTE: The RangePartitionBoundaries is 0 based.
   // ---------------------------------------------------------------------
-  partns_desc = partns_desc->header.next; // skip the primary partition
+  partns_desc = partns_desc->next; // skip the primary partition
   Lng32 counter = 1;
   char* encodedKey;
 
   while (partns_desc AND (counter < numberOfPartitions))
     {
-      encodedKey = partns_desc->body.partns_desc.encodedkey;
-      size_t encodedKeyLen = partns_desc->body.partns_desc.encodedkeylen;
+      encodedKey = partns_desc->partnsDesc()->encodedkey;
+      size_t encodedKeyLen = partns_desc->partnsDesc()->encodedkeylen;
 
       if(heap != CmpCommon::statementHeap())
       {
@@ -1938,19 +1938,19 @@ static RangePartitionBoundaries * createRangePartitionBoundaries
         //to make it "\0\0".
         encodedKey = new(heap) char [encodedKeyLen+2];
         encodedKey[encodedKeyLen] = encodedKey[encodedKeyLen+1] = '\0';
-        str_cpy_all(encodedKey, partns_desc->body.partns_desc.encodedkey,
+        str_cpy_all(encodedKey, partns_desc->partnsDesc()->encodedkey,
                     encodedKeyLen);
       }
 
       ItemExpr *rangePartBoundValues = NULL;
 
-      if (partns_desc->body.partns_desc.firstkey)
+      if (partns_desc->partnsDesc()->firstkey)
         // Extract and parse the partition boundary values, producing an
         // ItemExprList of the boundary values.
         //
         rangePartBoundValues = getRangePartitionBoundaryValues(
-             partns_desc->body.partns_desc.firstkey,
-             partns_desc->body.partns_desc.firstkeylen,
+             partns_desc->partnsDesc()->firstkey,
+             partns_desc->partnsDesc()->firstkeylen,
              heap);
       else
         rangePartBoundValues = getRangePartitionBoundaryValuesFromEncodedKeys(
@@ -1980,7 +1980,7 @@ static RangePartitionBoundaries * createRangePartitionBoundaries
         // ERROR 1123 Unable to process the partition key values...
         *CmpCommon::diags()
           << DgSqlCode(-1123)
-          << DgString0(partns_desc->body.partns_desc.firstkey)
+          << DgString0(partns_desc->partnsDesc()->firstkey)
           << DgTableName(tableName);
         delete partBounds;
         //coverity[leaked_storage]
@@ -1992,7 +1992,7 @@ static RangePartitionBoundaries * createRangePartitionBoundaries
            rangePartBoundValues,
            encodedKey);
 
-      partns_desc = partns_desc->header.next;
+      partns_desc = partns_desc->next;
     } // end while (partns_desc)
 
   // ---------------------------------------------------------------------
@@ -2016,7 +2016,7 @@ static RangePartitionBoundaries * createRangePartitionBoundaries
 // This method is used for creating a rangePartitioningFunction.
 // -----------------------------------------------------------------------
 static PartitioningFunction * createRangePartitioningFunction
-                                (desc_struct * part_desc_list,
+                                (TrafDesc * part_desc_list,
 			         const NAColumnArray & partKeyColArray,
                                  NodeMap* nodeMap,
 				 NAMemory* heap)
@@ -2024,12 +2024,12 @@ static PartitioningFunction * createRangePartitioningFunction
   // ---------------------------------------------------------------------
   // Compute the number of partitions.
   // ---------------------------------------------------------------------
-  desc_struct * partns_desc = part_desc_list;
+  TrafDesc * partns_desc = part_desc_list;
   Lng32 numberOfPartitions = 0;
   while (partns_desc)
     {
       numberOfPartitions++;
-      partns_desc = partns_desc->header.next;
+      partns_desc = partns_desc->next;
     }
 
   // ---------------------------------------------------------------------
@@ -2078,19 +2078,19 @@ static PartitioningFunction * createRangePartitioningFunction
 // -----------------------------------------------------------------------
 // LCOV_EXCL_START :cnu
 static PartitioningFunction * createRoundRobinPartitioningFunction
-                                (desc_struct * part_desc_list,
+                                (TrafDesc * part_desc_list,
                                  NodeMap* nodeMap,
 				 NAMemory* heap)
 {
   // ---------------------------------------------------------------------
   // Compute the number of partitions.
   // ---------------------------------------------------------------------
-  desc_struct * partns_desc = part_desc_list;
+  TrafDesc * partns_desc = part_desc_list;
   Lng32 numberOfPartitions = 0;
   while (partns_desc)
     {
       numberOfPartitions++;
-      partns_desc = partns_desc->header.next;
+      partns_desc = partns_desc->next;
     }
 
   // ---------------------------------------------------------------------
@@ -2115,7 +2115,7 @@ static PartitioningFunction * createRoundRobinPartitioningFunction
 // This method is used for creating a HashDistPartitioningFunction.
 // -----------------------------------------------------------------------
 static PartitioningFunction * createHashDistPartitioningFunction
-                                (desc_struct * part_desc_list,
+                                (TrafDesc * part_desc_list,
 			         const NAColumnArray & partKeyColArray,
                                  NodeMap* nodeMap,
 				 NAMemory* heap)
@@ -2123,12 +2123,12 @@ static PartitioningFunction * createHashDistPartitioningFunction
   // ---------------------------------------------------------------------
   // Compute the number of partitions.
   // ---------------------------------------------------------------------
-  desc_struct * partns_desc = part_desc_list;
+  TrafDesc * partns_desc = part_desc_list;
   Lng32 numberOfPartitions = 0;
   while (partns_desc)
     {
       numberOfPartitions++;
-      partns_desc = partns_desc->header.next;
+      partns_desc = partns_desc->next;
     }
 
   // ---------------------------------------------------------------------
@@ -2148,7 +2148,7 @@ static PartitioningFunction * createHashDistPartitioningFunction
 // This method is used for creating a Hash2PartitioningFunction.
 // -----------------------------------------------------------------------
 static PartitioningFunction * createHash2PartitioningFunction
-                                (desc_struct * part_desc_list,
+                                (TrafDesc * part_desc_list,
                                  const NAColumnArray & partKeyColArray,
                                  NodeMap* nodeMap,
                                  NAMemory* heap)
@@ -2156,12 +2156,12 @@ static PartitioningFunction * createHash2PartitioningFunction
   // ---------------------------------------------------------------------
   // Compute the number of partitions.
   // ---------------------------------------------------------------------
-  desc_struct * partns_desc = part_desc_list;
+  TrafDesc * partns_desc = part_desc_list;
   Lng32 numberOfPartitions = 0;
   while (partns_desc)
     {
       numberOfPartitions++;
-      partns_desc = partns_desc->header.next;
+      partns_desc = partns_desc->next;
     }
 
   // ---------------------------------------------------------------------
@@ -2195,16 +2195,16 @@ static PartitioningFunction * createHash2PartitioningFunction
 
 
 static 
-NodeMap* createNodeMapForHbase(desc_struct* desc, const NATable* table,
+NodeMap* createNodeMapForHbase(TrafDesc* desc, const NATable* table,
                                int numSaltBuckets, NAMemory* heap)
 {
    Int32 partns = 0;
    Int32 numRegions = 0;
-   desc_struct* hrk = desc;
+   TrafDesc* hrk = desc;
  
    while ( hrk ) {
      numRegions++;
-     hrk=hrk->header.next;
+     hrk=hrk->next;
    }
 
    if (numSaltBuckets <= 1)
@@ -2240,13 +2240,13 @@ NodeMap* createNodeMapForHbase(desc_struct* desc, const NATable* table,
 
 static 
 PartitioningFunction*
-createHash2PartitioningFunctionForHBase(desc_struct* desc,
+createHash2PartitioningFunctionForHBase(TrafDesc* desc,
                                         const NATable * table,
                                         int numSaltBuckets,
                                         NAMemory* heap)
 {
 
-   desc_struct* hrk = desc;
+   TrafDesc* hrk = desc;
  
    NodeMap* nodeMap = createNodeMapForHbase(desc, table, numSaltBuckets, heap);
 
@@ -2479,23 +2479,23 @@ createRangePartitioningFunctionForSingleRegionHBase(
    }
 
 
-   struct desc_struct* head = NULL;
-   struct desc_struct* tail = NULL;
+   struct TrafDesc* head = NULL;
+   struct TrafDesc* tail = NULL;
 
    Int32 i=0;
    for ( i=0; i<regionsToFake; i++ ) {
 
      if ( tail == NULL ) {
-        head = tail = new (heap) struct desc_struct;
+        head = tail = new (heap) TrafPartnsDesc();
 
         // to satisfy createRangePartitionBoundaries() in NATable.cpp
-        tail->body.partns_desc.primarypartition = 1;
+        tail->partnsDesc()->primarypartition = 1;
 
      } else {
-        tail->header.next = new (heap) struct desc_struct;
-        tail = tail->header.next;
+        tail->next = new (heap) TrafPartnsDesc();
+        tail = tail->next;
      }
-     tail->header.next = NULL;
+     tail->next = NULL;
 
      NAString firstkey('(');
      for ( Int32 i=0; i<keys; i++ ) {
@@ -2523,14 +2523,14 @@ createRangePartitioningFunctionForSingleRegionHBase(
 
      Int32 len = firstkey.length();
 
-     tail->body.partns_desc.firstkeylen = len;
-     tail->body.partns_desc.firstkey = new (heap) char[len];
-     memcpy(tail->body.partns_desc.firstkey, firstkey.data(), len);
+     tail->partnsDesc()->firstkeylen = len;
+     tail->partnsDesc()->firstkey = new (heap) char[len];
+     memcpy(tail->partnsDesc()->firstkey, firstkey.data(), len);
 
      // For now, assume firstkey == encodedkey
-     tail->body.partns_desc.encodedkeylen = len;
-     tail->body.partns_desc.encodedkey = new (heap) char[len];
-     memcpy(tail->body.partns_desc.encodedkey, firstkey.data(), len);
+     tail->partnsDesc()->encodedkeylen = len;
+     tail->partnsDesc()->encodedkey = new (heap) char[len];
+     memcpy(tail->partnsDesc()->encodedkey, firstkey.data(), len);
 
    }
 
@@ -2543,43 +2543,43 @@ createRangePartitioningFunctionForSingleRegionHBase(
 }
 
 void
-populatePartnDescOnEncodingKey( struct desc_struct* prevEndKey,
-                               struct desc_struct* tail, 
-                               struct desc_struct* hrk, 
+populatePartnDescOnEncodingKey( struct TrafDesc* prevEndKey,
+                               struct TrafDesc* tail, 
+                               struct TrafDesc* hrk, 
                                NAMemory* heap)
 {
      if (!prevEndKey) {
        // the start key of the first partitions has all zeroes in it
-       Int32 len = hrk->body.hbase_region_desc.endKeyLen;
+       Int32 len = hrk->hbaseRegionDesc()->endKeyLen;
 
-       tail->body.partns_desc.encodedkeylen = len;
-       tail->body.partns_desc.encodedkey = new (heap) char[len];
-       memset(tail->body.partns_desc.encodedkey, 0, len);
+       tail->partnsDesc()->encodedkeylen = len;
+       tail->partnsDesc()->encodedkey = new (heap) char[len];
+       memset(tail->partnsDesc()->encodedkey, 0, len);
      }
      else {
        // the beginning key of this partition is the end key of
        // the previous one
        // (HBase returns end keys, we need begin keys here)
-       Int32 len = prevEndKey->body.hbase_region_desc.endKeyLen;
+       Int32 len = prevEndKey->hbaseRegionDesc()->endKeyLen;
 
        // For HBase regions, we don't have the text representation
        // (value, value, ... value) of the boundary, just the encoded
        // key.
-       tail->body.partns_desc.encodedkeylen = len;
-       tail->body.partns_desc.encodedkey = new (heap) char[len];
-       memcpy(tail->body.partns_desc.encodedkey, 
-              prevEndKey->body.hbase_region_desc.endKey, len);
+       tail->partnsDesc()->encodedkeylen = len;
+       tail->partnsDesc()->encodedkey = new (heap) char[len];
+       memcpy(tail->partnsDesc()->encodedkey, 
+              prevEndKey->hbaseRegionDesc()->endKey, len);
      }
 }
 
 void
-populatePartnDescOnFirstKey( struct desc_struct* ,
-                             struct desc_struct* tail, 
-                             struct desc_struct* hrk,
+populatePartnDescOnFirstKey( struct TrafDesc* ,
+                             struct TrafDesc* tail, 
+                             struct TrafDesc* hrk,
                              NAMemory* heap)
 {
-   char* buf = hrk->body.hbase_region_desc.beginKey;
-   Int32 len = hrk->body.hbase_region_desc.beginKeyLen;
+   char* buf = hrk->hbaseRegionDesc()->beginKey;
+   Int32 len = hrk->hbaseRegionDesc()->beginKeyLen;
 
    NAString firstkey('(');
    firstkey.append('\'');
@@ -2588,51 +2588,49 @@ populatePartnDescOnFirstKey( struct desc_struct* ,
    firstkey.append(')');
 
    Int32 keyLen = firstkey.length();
-   tail->body.partns_desc.firstkeylen = keyLen;
-   tail->body.partns_desc.firstkey = new (heap) char[keyLen];
-   memcpy(tail->body.partns_desc.firstkey, firstkey.data(), keyLen);
+   tail->partnsDesc()->firstkeylen = keyLen;
+   tail->partnsDesc()->firstkey = new (heap) char[keyLen];
+   memcpy(tail->partnsDesc()->firstkey, firstkey.data(), keyLen);
 
-   tail->body.partns_desc.encodedkeylen = keyLen;
-   tail->body.partns_desc.encodedkey = new (heap) char[keyLen];
-   memcpy(tail->body.partns_desc.encodedkey, firstkey.data(), keyLen);
+   tail->partnsDesc()->encodedkeylen = keyLen;
+   tail->partnsDesc()->encodedkey = new (heap) char[keyLen];
+   memcpy(tail->partnsDesc()->encodedkey, firstkey.data(), keyLen);
 }
 
-typedef void (*populatePartnDescT)( struct desc_struct* prevEndKey,
-                                    struct desc_struct* tail, 
-                                    struct desc_struct* hrk,
+typedef void (*populatePartnDescT)( struct TrafDesc* prevEndKey,
+                                    struct TrafDesc* tail, 
+                                    struct TrafDesc* hrk,
                                     NAMemory* heap);
-static struct desc_struct*
-convertRangeDescToPartnsDesc(desc_struct* desc, populatePartnDescT funcPtr, NAMemory* heap)
+static struct TrafDesc*
+convertRangeDescToPartnsDesc(TrafDesc* desc, populatePartnDescT funcPtr, NAMemory* heap)
 {
-   desc_struct* hrk = desc;
-   desc_struct* prevEndKey = NULL;
+   TrafDesc* hrk = desc;
+   TrafDesc* prevEndKey = NULL;
  
-   struct desc_struct* head = NULL;
-   struct desc_struct* tail = NULL;
+   struct TrafDesc* head = NULL;
+   struct TrafDesc* tail = NULL;
 
    Int32 i=0;
    while ( hrk ) {
 
-     struct desc_struct *newNode = new (heap) struct desc_struct;
-     memset(&newNode->header, 0, sizeof(newNode->header));
-     memset(&newNode->body.partns_desc, 0, sizeof(tail->body.partns_desc));
-     newNode->header.nodetype = DESC_PARTNS_TYPE;
+     struct TrafDesc *newNode = 
+       TrafAllocateDDLdesc(DESC_PARTNS_TYPE, NULL);
 
      if ( tail == NULL ) {
         head = tail = newNode;
 
         // to satisfy createRangePartitionBoundaries() in NATable.cpp
-        tail->body.partns_desc.primarypartition = 1;
+        tail->partnsDesc()->primarypartition = 1;
 
      } else {
-        tail->header.next = newNode;
-        tail = tail->header.next;
+        tail->next = newNode;
+        tail = tail->next;
      }
 
      (*funcPtr)(prevEndKey, tail, hrk, heap);
 
      prevEndKey = hrk;
-     hrk     = hrk->header.next;
+     hrk     = hrk->next;
    }
 
    return head;
@@ -2642,14 +2640,14 @@ convertRangeDescToPartnsDesc(desc_struct* desc, populatePartnDescT funcPtr, NAMe
 static 
 PartitioningFunction*
 createRangePartitioningFunctionForMultiRegionHBase(Int32 partns,
-                                        desc_struct* desc, 
+                                        TrafDesc* desc, 
                                         const NATable* table, 
 			                const NAColumnArray & partKeyColArray,
                                         NAMemory* heap)
 {
    NodeMap* nodeMap = createNodeMapForHbase(desc, table, -1, heap);
 
-   struct desc_struct* 
+   struct TrafDesc* 
       partns_desc = ( table->isHbaseCellTable() || table->isHbaseRowTable()) ?
          convertRangeDescToPartnsDesc(desc, populatePartnDescOnFirstKey, heap)
              :
@@ -2663,13 +2661,13 @@ createRangePartitioningFunctionForMultiRegionHBase(Int32 partns,
                                  heap);
 }
 
-Int32 findDescEntries(desc_struct* desc)
+Int32 findDescEntries(TrafDesc* desc)
 {
    Int32 partns = 0;
-   desc_struct* hrk = desc;
+   TrafDesc* hrk = desc;
    while ( hrk ) {
      partns++;
-     hrk = hrk->header.next;
+     hrk = hrk->next;
    }
    return partns;
 }
@@ -2680,7 +2678,7 @@ Int32 findDescEntries(desc_struct* desc)
 //
 static 
 PartitioningFunction*
-createRangePartitioningFunctionForHBase(desc_struct* desc, 
+createRangePartitioningFunctionForHBase(TrafDesc* desc, 
 			                const NATable* table,
                                         const NAColumnArray & partKeyColArray,
                                         NAMemory* heap)
@@ -2723,7 +2721,7 @@ static PartitioningFunction * createHivePartitioningFunction
 // associated with this table or index.
 // -----------------------------------------------------------------------
 #pragma nowarn(1506)   // warning elimination
-static void createNodeMap (desc_struct* part_desc_list,
+static void createNodeMap (TrafDesc* part_desc_list,
 		           NodeMap*     nodeMap,
                            NAMemory*    heap,
                            char * tableName,
@@ -2733,7 +2731,7 @@ static void createNodeMap (desc_struct* part_desc_list,
   // Loop over all partitions creating a DP2 node map entry for each
   // partition.
   // ---------------------------------------------------------------------
-  desc_struct* partns_desc      = part_desc_list;
+  TrafDesc* partns_desc      = part_desc_list;
   CollIndex    currentPartition = 0;
   if(NOT partns_desc)
   {
@@ -2744,11 +2742,11 @@ static void createNodeMap (desc_struct* part_desc_list,
   else{
     while (partns_desc)
     {
-      NodeMapEntry entry(partns_desc->body.partns_desc.partitionname,
-	partns_desc->body.partns_desc.givenname,
+      NodeMapEntry entry(partns_desc->partnsDesc()->partitionname,
+	partns_desc->partnsDesc()->givenname,
         heap,tableIdent);
       nodeMap->setNodeMapEntry(currentPartition,entry,heap);
-      partns_desc = partns_desc->header.next;
+      partns_desc = partns_desc->next;
       currentPartition++;
     }
   }
@@ -2887,7 +2885,7 @@ static void createNodeMap (hive_tbl_desc* hvt_desc,
 // on the local node.
 //-------------------------------------------------------------------------
 #pragma nowarn(262)   // warning elimination
-static NABoolean checkRemote(desc_struct* part_desc_list,
+static NABoolean checkRemote(TrafDesc* part_desc_list,
                              char * tableName)
 {
     return TRUE;
@@ -2895,19 +2893,17 @@ static NABoolean checkRemote(desc_struct* part_desc_list,
 #pragma warn(262)  // warning elimination
 
 
-// warning elimination (removed "inline")
 static NAString makeTableName(const NATable *table,
-			      const columns_desc_struct *column_desc)
+			      const TrafColumnsDesc *column_desc)
 {
   return NAString(
-	      table ?
-		table->getTableName().getQualifiedNameAsAnsiString().data() :
-	      column_desc->tablename ?
-		column_desc->tablename : "");
+       table ?
+       table->getTableName().getQualifiedNameAsAnsiString().data() : "");
 }
+
 // warning elimination (removed "inline")
 static NAString makeColumnName(const NATable *table,
-			       const columns_desc_struct *column_desc)
+			       const TrafColumnsDesc *column_desc)
 {
   NAString nam(makeTableName(table, column_desc));
   if (!nam.isNull()) nam += ".";
@@ -2916,9 +2912,9 @@ static NAString makeColumnName(const NATable *table,
 }
 
 // -----------------------------------------------------------------------
-// Method for creating NAType from desc_struct.
+// Method for creating NAType from TrafDesc.
 // -----------------------------------------------------------------------
-NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
+NABoolean createNAType(TrafColumnsDesc *column_desc	/*IN*/,
 		       const NATable *table  		/*IN*/,
 		       NAType *&type       		/*OUT*/,
 		       NAMemory *heap			/*IN*/,
@@ -2930,7 +2926,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
   //
   #define REC_INTERVAL REC_MIN_INTERVAL
 
-  DataType datatype = column_desc->datatype;
+  Int16 datatype = column_desc->datatype;
   if (REC_MIN_INTERVAL <= datatype && datatype <= REC_MAX_INTERVAL)
     datatype = REC_INTERVAL;
 
@@ -2938,7 +2934,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 
   if ( DFS2REC::isAnyCharacter(column_desc->datatype) )
   {
-     if ( CharInfo::isCharSetSupported(column_desc->character_set) == FALSE ) {
+     if ( CharInfo::isCharSetSupported(column_desc->characterSet()) == FALSE ) {
        if (!errorCode)
        {
          *CmpCommon::diags() << DgSqlCode(-4082)
@@ -2951,7 +2947,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
        return TRUE; // error
      }
 
-     if ( CharInfo::is_NCHAR_MP(column_desc->character_set) )
+     if ( CharInfo::is_NCHAR_MP(column_desc->characterSet()) )
         charCount /= SQL_DBCHAR_SIZE;
   }
 
@@ -2960,7 +2956,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 
     case REC_BPINT_UNSIGNED :
       type = new (heap)
-      SQLBPInt(column_desc->precision, column_desc->null_flag, FALSE, heap);
+      SQLBPInt(column_desc->precision, column_desc->isNullable(), FALSE, heap);
       break;
 
     case REC_BIN8_SIGNED:
@@ -2970,13 +2966,13 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLTiny(TRUE,
-		 column_desc->null_flag,
+		 column_desc->isNullable(),
                  heap
 		 );
       break;
@@ -2987,13 +2983,13 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLTiny(FALSE,
-		 column_desc->null_flag,
+		 column_desc->isNullable(),
                  heap
 		 );
       break;
@@ -3005,13 +3001,13 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLSmall(TRUE,
-		 column_desc->null_flag,
+		 column_desc->isNullable(),
                  heap
 		 );
       break;
@@ -3022,13 +3018,13 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLSmall(FALSE,
-		 column_desc->null_flag,
+		 column_desc->isNullable(),
                  heap
 		 );
       break;
@@ -3040,13 +3036,13 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLInt(TRUE,
-	       column_desc->null_flag,
+	       column_desc->isNullable(),
                heap
 	       );
       break;
@@ -3057,13 +3053,13 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLInt(FALSE,
-	       column_desc->null_flag,
+	       column_desc->isNullable(),
                heap
 	       );
       break;
@@ -3074,13 +3070,13 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
 	SQLLargeInt(TRUE,
-		    column_desc->null_flag,
+		    column_desc->isNullable(),
                     heap
 		    );
       break;
@@ -3091,13 +3087,13 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		   column_desc->precision,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       else
 	type = new (heap)
           SQLLargeInt(FALSE,
-		    column_desc->null_flag,
+		    column_desc->isNullable(),
                     heap
 		    );
       break;
@@ -3106,7 +3102,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 	SQLDecimal(column_desc->length,
 		   column_desc->scale,
 		   FALSE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       break;
@@ -3115,7 +3111,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 	SQLDecimal(column_desc->length,
 		   column_desc->scale,
 		   TRUE,
-		   column_desc->null_flag,
+		   column_desc->isNullable(),
                    heap
 		   );
       break;
@@ -3125,7 +3121,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		  column_desc->scale,
 		  TRUE, // is a real bignum
 		  FALSE,
-		  column_desc->null_flag,
+		  column_desc->isNullable(),
 		  heap
 		  );
       break;
@@ -3135,65 +3131,65 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 		  column_desc->scale,
 		  TRUE, // is a real bignum
 		  TRUE,
-		  column_desc->null_flag,
+		  column_desc->isNullable(),
 		  heap
 		  );
       break;
 
     case REC_FLOAT32:
       type = new (heap)
-	SQLReal(column_desc->null_flag, heap, column_desc->precision);
+	SQLReal(column_desc->isNullable(), heap, column_desc->precision);
       break;
 
     case REC_FLOAT64:
       type = new (heap)
-	SQLDoublePrecision(column_desc->null_flag, heap, column_desc->precision);
+	SQLDoublePrecision(column_desc->isNullable(), heap, column_desc->precision);
       break;
 
     case REC_BYTE_F_DOUBLE:
       charCount /= SQL_DBCHAR_SIZE;	    // divide the storage length by 2
       type = new (heap)
 	SQLChar(charCount,
-		column_desc->null_flag,
-		column_desc->upshift,
-		column_desc->caseinsensitive,
+		column_desc->isNullable(),
+		column_desc->isUpshifted(),
+		column_desc->isCaseInsensitive(),
 		FALSE,
-		column_desc->character_set,
-		column_desc->collation_sequence,
+		column_desc->characterSet(),
+		column_desc->collationSequence(),
 		CharInfo::IMPLICIT
 		);
       break;
 
     case REC_BYTE_F_ASCII:
-      if (column_desc->character_set == CharInfo::UTF8 ||
-          (column_desc->character_set == CharInfo::SJIS &&
+      if (column_desc->characterSet() == CharInfo::UTF8 ||
+          (column_desc->characterSet() == CharInfo::SJIS &&
            column_desc->encoding_charset == CharInfo::SJIS))
       {
-        Lng32 maxBytesPerChar = CharInfo::maxBytesPerChar(column_desc->character_set);
+        Lng32 maxBytesPerChar = CharInfo::maxBytesPerChar(column_desc->characterSet());
         Lng32 sizeInChars = charCount ;  // Applies when CharLenUnit == BYTES
         if ( column_desc->precision > 0 )
            sizeInChars = column_desc->precision;
         type = new (heap)
 	SQLChar(CharLenInfo(sizeInChars, charCount/*in_bytes*/),
-		column_desc->null_flag,
-		column_desc->upshift,
-		column_desc->caseinsensitive,
+		column_desc->isNullable(),
+		column_desc->isUpshifted(),
+		column_desc->isCaseInsensitive(),
 		FALSE, // varLenFlag
-		column_desc->character_set,
-		column_desc->collation_sequence,
+		column_desc->characterSet(),
+		column_desc->collationSequence(),
 		CharInfo::IMPLICIT, // Coercibility
-		column_desc->encoding_charset
+		column_desc->encodingCharset()
 		);
       }
       else // keep the old behavior
       type = new (heap)
 	SQLChar(charCount,
-		column_desc->null_flag,
-		column_desc->upshift,
-		column_desc->caseinsensitive,
+		column_desc->isNullable(),
+		column_desc->isUpshifted(),
+		column_desc->isCaseInsensitive(),
 		FALSE,
-		column_desc->character_set,
-		column_desc->collation_sequence,
+		column_desc->characterSet(),
+		column_desc->collationSequence(),
 		CharInfo::IMPLICIT
 		);
       break;
@@ -3202,32 +3198,32 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
       charCount /= SQL_DBCHAR_SIZE;	    // divide the storage length by 2
       // fall thru
     case REC_BYTE_V_ASCII:
-      if (column_desc->character_set == CharInfo::SJIS ||
-          column_desc->character_set == CharInfo::UTF8)
+      if (column_desc->characterSet() == CharInfo::SJIS ||
+          column_desc->characterSet() == CharInfo::UTF8)
       {
-        Lng32 maxBytesPerChar = CharInfo::maxBytesPerChar(column_desc->character_set);
+        Lng32 maxBytesPerChar = CharInfo::maxBytesPerChar(column_desc->characterSet());
         Lng32 sizeInChars = charCount ;  // Applies when CharLenUnit == BYTES
         if ( column_desc->precision > 0 )
            sizeInChars = column_desc->precision;
         type = new (heap)
 	SQLVarChar(CharLenInfo(sizeInChars, charCount/*in_bytes*/),
-		   column_desc->null_flag,
-		   column_desc->upshift,
-		   column_desc->caseinsensitive,
-		   column_desc->character_set,
-		   column_desc->collation_sequence,
+		   column_desc->isNullable(),
+		   column_desc->isUpshifted(),
+		   column_desc->isCaseInsensitive(),
+		   column_desc->characterSet(),
+		   column_desc->collationSequence(),
 		   CharInfo::IMPLICIT, // Coercibility
-		   column_desc->encoding_charset
+		   column_desc->encodingCharset()
 		   );
       }
       else // keep the old behavior
       type = new (heap)
 	SQLVarChar(charCount,
-		   column_desc->null_flag,
-		   column_desc->upshift,
-		   column_desc->caseinsensitive,
-		   column_desc->character_set,
-		   column_desc->collation_sequence,
+		   column_desc->isNullable(),
+		   column_desc->isUpshifted(),
+		   column_desc->isCaseInsensitive(),
+		   column_desc->characterSet(),
+		   column_desc->collationSequence(),
 		   CharInfo::IMPLICIT
 		   );
       break;
@@ -3236,33 +3232,33 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
       type = new (heap)
 	SQLLongVarChar(charCount,
 		       FALSE,
-		       column_desc->null_flag,
-		       column_desc->upshift,
-		       column_desc->caseinsensitive,
-		       column_desc->character_set,
-		       column_desc->collation_sequence,
+		       column_desc->isNullable(),
+		       column_desc->isUpshifted(),
+		       column_desc->isCaseInsensitive(),
+		       column_desc->characterSet(),
+		       column_desc->collationSequence(),
 		       CharInfo::IMPLICIT
 		      );
       break;
     case REC_DATETIME:
       type = DatetimeType::constructSubtype(
-					    column_desc->null_flag,
-					    column_desc->datetimestart,
-					    column_desc->datetimeend,
+					    column_desc->isNullable(),
+					    column_desc->datetimeStart(),
+					    column_desc->datetimeEnd(),
 					    column_desc->datetimefractprec,
 					    heap
 					    );
       CMPASSERT(type);
       if (!type->isSupportedType())
 	{
-         column_desc->defaultClass = COM_NO_DEFAULT;           // can't set a default for these, either.
+          column_desc->setDefaultClass(COM_NO_DEFAULT);           // can't set a default for these, either.
 	  // 4030 Column is an unsupported combination of datetime fields
      if (!errorCode)
      {
          *CmpCommon::diags() << DgSqlCode(4030)
 	    << DgColumnName(makeColumnName(table, column_desc))
-	    << DgInt0(column_desc->datetimestart)
-	    << DgInt1(column_desc->datetimeend)
+	    << DgInt0(column_desc->datetimeStart())
+	    << DgInt1(column_desc->datetimeEnd())
 	    << DgInt2(column_desc->datetimefractprec);
      }
      else
@@ -3273,10 +3269,10 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
       break;
     case REC_INTERVAL:
       type = new (heap)
-         SQLInterval(column_desc->null_flag,
-		    column_desc->datetimestart,
+         SQLInterval(column_desc->isNullable(),
+		    column_desc->datetimeStart(),
 		    column_desc->intervalleadingprec,
-		    column_desc->datetimeend,
+		    column_desc->datetimeEnd(),
 		    column_desc->datetimefractprec,
                     heap
 		    );
@@ -3285,7 +3281,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
          return TRUE;                                            // error
       if (!type->isSupportedType())
       {
-        column_desc->defaultClass = COM_NO_DEFAULT;           // can't set a default for these, either.
+        column_desc->setDefaultClass(COM_NO_DEFAULT);           // can't set a default for these, either.
         if (!errorCode)
           *CmpCommon::diags() << DgSqlCode(3044) << DgString0(column_desc->colname);
         else
@@ -3297,18 +3293,18 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
     case REC_BLOB :
       type = new (heap)
 	SQLBlob(column_desc->precision,Lob_Invalid_Storage,
-		column_desc->null_flag);
+		column_desc->isNullable());
       break;
 
     case REC_CLOB :
       type = new (heap)
 	SQLClob(column_desc->precision,Lob_Invalid_Storage,
-		column_desc->null_flag);
+		column_desc->isNullable());
       break;
 
     case REC_BOOLEAN :
       {
-        type = new (heap) SQLBooleanNative(column_desc->null_flag);
+        type = new (heap) SQLBooleanNative(column_desc->isNullable());
       }
       break;
 
@@ -3393,7 +3389,7 @@ NABoolean createNAType(columns_desc_struct *column_desc	/*IN*/,
 // one for each column_desc in the list supplied as input.
 // -----------------------------------------------------------------------
 #pragma nowarn(1506)   // warning elimination
-NABoolean createNAColumns(desc_struct *column_desc_list	/*IN*/,
+NABoolean createNAColumns(TrafDesc *column_desc_list	/*IN*/,
 			  NATable *table		/*IN*/,
 			  NAColumnArray &colArray	/*OUT*/,
 			  NAMemory *heap		/*IN*/)
@@ -3402,7 +3398,7 @@ NABoolean createNAColumns(desc_struct *column_desc_list	/*IN*/,
   ColumnClass colClass;
   while (column_desc_list)
     {
-      columns_desc_struct * column_desc = &column_desc_list->body.columns_desc;
+      TrafColumnsDesc * column_desc = column_desc_list->columnsDesc();
       NABoolean isMvSystemAdded = FALSE;
       NABoolean hasSystemColumnAsUserColumn = FALSE;
 
@@ -3461,7 +3457,7 @@ NABoolean createNAColumns(desc_struct *column_desc_list	/*IN*/,
          NABoolean isSaltColumn = FALSE;
          NABoolean isDivisioningColumn = FALSE;
 
-         if (column_desc->defaultClass == COM_ALWAYS_COMPUTE_COMPUTED_COLUMN_DEFAULT)
+         if (column_desc->defaultClass() == COM_ALWAYS_COMPUTE_COMPUTED_COLUMN_DEFAULT)
            {
              if (column_desc->colFlags & SEABASE_COLUMN_IS_SALT)
                isSaltColumn = TRUE;
@@ -3502,16 +3498,16 @@ NABoolean createNAColumns(desc_struct *column_desc_list	/*IN*/,
                                heap,
 			       table,
 			       colClass,
-			       column_desc->defaultClass,
+			       column_desc->defaultClass(),
 			       defaultValue,
                                heading,
-			       column_desc->upshift,
+			       column_desc->isUpshifted(),
 			       ((column_desc->colclass == 'A') ||
                                 (column_desc->colclass == 'C')),
                                COM_UNKNOWN_DIRECTION,
                                FALSE,
                                NULL,
-                               column_desc->stored_on_disk,
+                               TRUE, // stored on disk
                                computed_column_text,
                                isSaltColumn,
                                isDivisioningColumn,
@@ -3561,7 +3557,7 @@ NABoolean createNAColumns(desc_struct *column_desc_list	/*IN*/,
 
       colArray.insert(newColumn);
 
-      column_desc_list = column_desc_list->header.next;
+      column_desc_list = column_desc_list->next;
     } // end while
 
   return FALSE;							// no error
@@ -3790,7 +3786,7 @@ NABoolean createNAColumns(struct hive_column_desc* hcolumn /*IN*/,
                              COM_NULL_DEFAULT  ,//defaultClass,
                              (char*)"", // defaultValue,
                              (char*)"", // heading,
-                             FALSE, // column_desc->upshift,
+                             FALSE, // column_desc->isUpshifted(),
                              FALSE, // added column
                              COM_UNKNOWN_DIRECTION,
                              FALSE,  // isOptional
@@ -3821,30 +3817,30 @@ NABoolean createNAColumns(struct hive_column_desc* hcolumn /*IN*/,
 
 
 
-NABoolean createNAKeyColumns(desc_struct *keys_desc_list	/*IN*/,
+NABoolean createNAKeyColumns(TrafDesc *keys_desc_list	/*IN*/,
 			     NAColumnArray &colArray	/*IN*/,
 			     NAColumnArray &keyColArray /*OUT*/,
 			     CollHeap *heap		/*IN*/)
 {
-  const desc_struct *keys_desc = keys_desc_list;
+  const TrafDesc *keys_desc = keys_desc_list;
 
   while (keys_desc)
     {
-      Int32 tablecolnumber = keys_desc->body.keys_desc.tablecolnumber;
+      Int32 tablecolnumber = keys_desc->keysDesc()->tablecolnumber;
 
       NAColumn *indexColumn = colArray.getColumn(tablecolnumber);
 
       SortOrdering order = NOT_ORDERED;
 
       keyColArray.insert(indexColumn);
-      order = keys_desc->body.keys_desc.ordering ? DESCENDING : ASCENDING;
+      order = keys_desc->keysDesc()->isDescending() ? DESCENDING : ASCENDING;
       keyColArray.setAscending(keyColArray.entries()-1, order == ASCENDING);
 
       // Remember that this columns is part of the clustering
       // key and remember its key ordering (asc or desc)
       indexColumn->setClusteringKey(order);
 
-      keys_desc = keys_desc->header.next;
+      keys_desc = keys_desc->next;
     } // end while (keys_desc)
 
   return FALSE;
@@ -3893,7 +3889,7 @@ void processDuplicateNames(NAHashDictionaryIterator<NAString, Int32> &Iter,
 // -----------------------------------------------------------------------
 #pragma nowarn(1506)   // warning elimination
 static
-NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
+NABoolean createNAFileSets(TrafDesc * table_desc       /*IN*/,
                            const NATable * table          /*IN*/,
                            const NAColumnArray & colArray /*IN*/,
                            NAFileSetList & indexes        /*OUT*/,
@@ -3919,17 +3915,16 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 
   NAList<NAString *> stringList (CmpCommon::statementHeap());
 
-  desc_struct *indexes_desc = table_desc->body.table_desc.indexes_desc;
+  TrafDesc *indexes_desc = table_desc->tableDesc()->indexes_desc;
 
-  while (indexes_desc AND indexes_desc->body.indexes_desc.keytag)
-    indexes_desc = indexes_desc->header.next;
+  while (indexes_desc AND indexes_desc->indexesDesc()->keytag)
+    indexes_desc = indexes_desc->next;
 
   // must have a clustering key if not view
-  CMPASSERT((indexes_desc AND !indexes_desc->body.indexes_desc.keytag) OR
-	    (table_desc->body.table_desc.views_desc));
+  CMPASSERT((indexes_desc AND !indexes_desc->indexesDesc()->keytag) OR
+	    (table_desc->tableDesc()->views_desc));
 
   NABoolean isTheClusteringKey = TRUE;
-  NABoolean isVerticalPartition;
   NABoolean hasRemotePartition = FALSE;
   CollIndex numClusteringKeyColumns = 0;
   NABoolean tableAlignedRowFormat = table->isSQLMXAlignedTable();
@@ -3988,13 +3983,10 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
       NAColumnArray saveNAColumns(CmpCommon::statementHeap());// save NAColums of secondary index columns
       NAColumnArray partitioningKeyColumns(CmpCommon::statementHeap());// the partitioning key columns
       PartitioningFunction * partFunc = NULL;
-      // is this an index or is it really a VP?
-      isVerticalPartition = indexes_desc->body.indexes_desc.isVerticalPartition;
-      NABoolean isPacked = indexes_desc->body.indexes_desc.isPacked;
-      NABoolean indexAlignedRowFormat = (indexes_desc->body.indexes_desc.rowFormat == COM_ALIGNED_FORMAT_TYPE);
+      NABoolean isPacked = FALSE;
+      NABoolean indexAlignedRowFormat = (indexes_desc->indexesDesc()->rowFormat() == COM_ALIGNED_FORMAT_TYPE);
 
-      NABoolean isNotAvailable =
-	indexes_desc->body.indexes_desc.notAvailable;
+      NABoolean isNotAvailable = FALSE;
 
       ItemExprList hbaseSaltColumnList(CmpCommon::statementHeap());
       Int64 numOfSaltedPartitions = 0;
@@ -4002,7 +3994,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
       // ---------------------------------------------------------------------
       // loop over the clustering key columns of the index
       // ---------------------------------------------------------------------
-      const desc_struct *keys_desc = indexes_desc->body.indexes_desc.keys_desc;
+      const TrafDesc *keys_desc = indexes_desc->indexesDesc()->keys_desc;
       while (keys_desc)
 	{
           // Add an index/VP key column.
@@ -4015,7 +4007,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 	  // key columns used to find the base table record. This is
 	  // true for both SQL/MP and SQL/MX tables at this time.
 	  // To make these assumptions is not optimal, but the
-	  // desc_structs that are used as input are a historical
+	  // TrafDescs that are used as input are a historical
 	  // leftover from SQL/MP and therefore aren't set up very
 	  // well to describe index columns and index keys.  Some day
 	  // we might consider a direct conversion from the MX catalog
@@ -4026,17 +4018,17 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 	  // of a unique alternate index (which ARE described in the
 	  // keys_desc) get deleted later.
           
-	  Int32 tablecolnumber = keys_desc->body.keys_desc.tablecolnumber;
+	  Int32 tablecolnumber = keys_desc->keysDesc()->tablecolnumber;
           indexColumn = colArray.getColumn(tablecolnumber);
           
           if ((table->isHbaseTable()) &&
-              ((indexes_desc->body.indexes_desc.keytag != 0) || 
+              ((indexes_desc->indexesDesc()->keytag != 0) || 
                 (indexAlignedRowFormat  && indexAlignedRowFormat != tableAlignedRowFormat)))
             {
               newIndexColumn = new(heap) NAColumn(*indexColumn);
-              newIndexColumn->setIndexColName(keys_desc->body.keys_desc.keyname);
-              newIndexColumn->setHbaseColFam(keys_desc->body.keys_desc.hbaseColFam);
-              newIndexColumn->setHbaseColQual(keys_desc->body.keys_desc.hbaseColQual);
+              newIndexColumn->setIndexColName(keys_desc->keysDesc()->keyname);
+              newIndexColumn->setHbaseColFam(keys_desc->keysDesc()->hbaseColFam);
+              newIndexColumn->setHbaseColQual(keys_desc->keysDesc()->hbaseColQual);
               newIndexColumn->resetSerialization(); 
               saveNAColumns.insert(indexColumn);
               newColumns.insert(newIndexColumn);
@@ -4050,7 +4042,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
           // assume at first that all columns are key columns
           // and we make adjustments later
           indexKeyColumns.insert(indexColumn);
-          order = keys_desc->body.keys_desc.ordering ?
+          order = keys_desc->keysDesc()->isDescending() ?
             DESCENDING : ASCENDING;
           indexKeyColumns.setAscending(indexKeyColumns.entries() - 1,
                                        order == ASCENDING);
@@ -4109,7 +4101,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 	    allColumns.insert(indexColumn);
 	  }
 
-	  keys_desc = keys_desc->header.next;
+	  keys_desc = keys_desc->next;
 	} // end while (keys_desc)
 
       // ---------------------------------------------------------------------
@@ -4117,32 +4109,32 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
       // These columns get added to the list of all the columns for the index/
       // VP.  Their length also contributes to the total record length.
       // ---------------------------------------------------------------------
-      const desc_struct *non_keys_desc =
-                         indexes_desc->body.indexes_desc.non_keys_desc;
+      const TrafDesc *non_keys_desc =
+                         indexes_desc->indexesDesc()->non_keys_desc;
       while (non_keys_desc)
 	{
-	  Int32 tablecolnumber = non_keys_desc->body.keys_desc.tablecolnumber;
+	  Int32 tablecolnumber = non_keys_desc->keysDesc()->tablecolnumber;
           indexColumn = colArray.getColumn(tablecolnumber);
 
 	  if ((table->isHbaseTable()) &&
-	      ((indexes_desc->body.indexes_desc.keytag != 0) || 
+	      ((indexes_desc->indexesDesc()->keytag != 0) || 
                (indexAlignedRowFormat  && indexAlignedRowFormat != tableAlignedRowFormat)))
 	    {
 	      newIndexColumn = new(heap) NAColumn(*indexColumn);
-	      if (non_keys_desc->body.keys_desc.keyname)
-		newIndexColumn->setIndexColName(non_keys_desc->body.keys_desc.keyname);
-	      newIndexColumn->setHbaseColFam(non_keys_desc->body.keys_desc.hbaseColFam);
-	      newIndexColumn->setHbaseColQual(non_keys_desc->body.keys_desc.hbaseColQual);
+	      if (non_keys_desc->keysDesc()->keyname)
+		newIndexColumn->setIndexColName(non_keys_desc->keysDesc()->keyname);
+	      newIndexColumn->setHbaseColFam(non_keys_desc->keysDesc()->hbaseColFam);
+	      newIndexColumn->setHbaseColQual(non_keys_desc->keysDesc()->hbaseColQual);
               newIndexColumn->resetSerialization(); 
 	      indexColumn = newIndexColumn;
               newColumns.insert(newIndexColumn);
 	    }
 
 	  allColumns.insert(indexColumn);
-	  non_keys_desc = non_keys_desc->header.next;
+	  non_keys_desc = non_keys_desc->next;
 	} // end while (non_keys_desc)
 
-      desc_struct *files_desc;
+      TrafDesc *files_desc;
       NABoolean isSystemTable;
       if (isTheClusteringKey)
 	{
@@ -4161,15 +4153,15 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 		}
 	    } // end for
 
-	  files_desc = table_desc->body.table_desc.files_desc;
-	  isSystemTable = table_desc->body.table_desc.issystemtablecode;
+	  files_desc = table_desc->tableDesc()->files_desc;
+	  isSystemTable = table_desc->tableDesc()->isSystemTableCode();
 
           // Record length of clustering key is the same as that of the base table record
-          indexes_desc->body.indexes_desc.record_length = table_desc->body.table_desc.record_length;
+          indexes_desc->indexesDesc()->record_length = table_desc->tableDesc()->record_length;
 	} // endif (isTheClusteringKey)
       else
 	{
-	  if (indexes_desc->body.indexes_desc.unique)
+	  if (indexes_desc->indexesDesc()->isUnique())
 	    {
 	      // As mentioned above, if this is a unique index,
 	      // the last numClusteringKeyColumns are actually not
@@ -4187,8 +4179,8 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 	      //   indexKeyColumns.removeAt(indexKeyColumns.entries() - 1);
 	    }
 
-	  files_desc = indexes_desc->body.indexes_desc.files_desc;
-	  isSystemTable = indexes_desc->body.indexes_desc.issystemtablecode;
+	  files_desc = indexes_desc->indexesDesc()->files_desc;
+	  isSystemTable = indexes_desc->indexesDesc()->isSystemTableCode();
 
 	} // endif (NOT isTheClusteringKey)
 
@@ -4204,9 +4196,10 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
       // We will ASSUME here that NonStop SQL/MP or the simulator will not
       // put anything into partitioning keys desc and only SQL/MX will.  So
       // we don't have to deal with keytag columns here.
+      //
+      // Partitioning Keys Desc is not set and returned for traf tables.
       // -------------------------------------------------------------------
-      const desc_struct *partitioning_keys_desc =
-                         indexes_desc->body.indexes_desc.partitioning_keys_desc;
+      const TrafDesc *partitioning_keys_desc = NULL;
 
       // the key columns that build the salt column for HBase table
       NAColumnArray hbaseSaltOnColumns(CmpCommon::statementHeap());
@@ -4217,16 +4210,16 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
           while (keys_desc)
 	    {
               Int32 tablecolnumber = keys_desc
-                                   ->body.keys_desc.tablecolnumber;
+                                   ->keysDesc()->tablecolnumber;
               indexColumn = colArray.getColumn(tablecolnumber);
               partitioningKeyColumns.insert(indexColumn);
               SortOrdering order = keys_desc
-				     ->body.keys_desc.ordering ?
-				       DESCENDING : ASCENDING;
+                ->keysDesc()->isDescending() ?
+                DESCENDING : ASCENDING;
 	      partitioningKeyColumns.setAscending
                                        (partitioningKeyColumns.entries() - 1,
 				        order == ASCENDING);
-              keys_desc = keys_desc->header.next;
+              keys_desc = keys_desc->next;
             } // end while (keys_desc)
         }
       else {
@@ -4254,29 +4247,26 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 
       // NB: Just in case, we made a call to setupClusterInfo at the
       // beginning of this function.
-      desc_struct * partns_desc;
+      TrafDesc * partns_desc;
       Int32 indexLevels = 1;
-      Int32 blockSize = indexes_desc->body.indexes_desc.blocksize;
+      Int32 blockSize = indexes_desc->indexesDesc()->blocksize;
       if (files_desc)
       {
 	if( (table->getSpecialType() != ExtendedQualName::VIRTUAL_TABLE AND
-/*
-	     table->getSpecialType() != ExtendedQualName::ISP_TABLE AND
-*/
 	     (NOT table->isHbaseTable()))
-	    OR files_desc->body.files_desc.partns_desc )
+	    OR files_desc->filesDesc()->partns_desc )
 	  {
             nodeMap = new (heap) NodeMap(heap);
-	    createNodeMap(files_desc->body.files_desc.partns_desc,
+	    createNodeMap(files_desc->filesDesc()->partns_desc,
 			  nodeMap,
 			  heap,
-			  table_desc->body.table_desc.tablename,
+			  table_desc->tableDesc()->tablename,
 			  cmpCurrentContext->getTableIdent());
 	    tableIdList.insert(CollIndex(cmpCurrentContext->getTableIdent()));
 	  }
 	// Check whether the index has any remote partitions.
-	if (checkRemote(files_desc->body.files_desc.partns_desc,
-			indexes_desc->body.indexes_desc.indexname))
+	if (checkRemote(files_desc->filesDesc()->partns_desc,
+			indexes_desc->indexesDesc()->indexname))
 	  hasRemotePartition = TRUE;
 	else
 	  hasRemotePartition = FALSE;
@@ -4285,12 +4275,12 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 	// partitioned same as the indexes, hence we used table partitioning
 	// to create partitionining function. But this is not true. Hence
 	// we now use the indexes partitioning function
-	switch (indexes_desc->body.indexes_desc.partitioningScheme)
+	switch (indexes_desc->indexesDesc()->partitioningScheme())
         {
 	case COM_ROUND_ROBIN_PARTITIONING :
 	  // Round Robin partitioned table
 	  partFunc = createRoundRobinPartitioningFunction(
-	       files_desc->body.files_desc.partns_desc,
+	       files_desc->filesDesc()->partns_desc,
 	       nodeMap,
 	       heap);
 	  break;
@@ -4298,7 +4288,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 	case COM_HASH_V1_PARTITIONING :
 	  // Hash partitioned table
 	  partFunc = createHashDistPartitioningFunction(
-	       files_desc->body.files_desc.partns_desc,
+	       files_desc->filesDesc()->partns_desc,
 	       partitioningKeyColumns,
 	       nodeMap,
 	       heap);
@@ -4307,7 +4297,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 	case COM_HASH_V2_PARTITIONING :
 	  // Hash partitioned table
 	  partFunc = createHash2PartitioningFunction(
-	       files_desc->body.files_desc.partns_desc,
+	       files_desc->filesDesc()->partns_desc,
 	       partitioningKeyColumns,
 	       nodeMap,
 	       heap);
@@ -4325,8 +4315,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 	    // values as MP Stored Text.
 	    //
 
-              desc_struct* hbd = 
-                   ((table_desc_struct*)table_desc)->hbase_regionkey_desc;
+              TrafDesc* hbd = table_desc->tableDesc()->hbase_regionkey_desc;
 
               // splits will be 1 for single partitioned table.
               Int32 splits = findDescEntries(hbd);
@@ -4339,7 +4328,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
               if ( hbd )
                 if ( doHash2 ) {
 	           partFunc = createHash2PartitioningFunctionForHBase(
-	    	      ((table_desc_struct*)table_desc)->hbase_regionkey_desc,
+                        table_desc->tableDesc()->hbase_regionkey_desc,
                       table,
                       numOfSaltedPartitions,
                       heap);
@@ -4348,15 +4337,15 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
                 }
                 else
 	           partFunc = createRangePartitioningFunctionForHBase(
-	    	      ((table_desc_struct*)table_desc)->hbase_regionkey_desc,
-                      table,
-	    	      partitioningKeyColumns,
-		      heap);
+                        table_desc->tableDesc()->hbase_regionkey_desc,
+                        table,
+                        partitioningKeyColumns,
+                        heap);
               else {
 
 	        // no region descriptor, range partitioned or single partition table
 	        partFunc = createRangePartitioningFunction(
-	    	   files_desc->body.files_desc.partns_desc,
+	    	   files_desc->filesDesc()->partns_desc,
 	    	   partitioningKeyColumns,
 		   nodeMap,
 		   heap);
@@ -4392,14 +4381,14 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
         // currently we save the indexLevels in the fileset. Since there
         // is a indexLevel for each file that belongs to the fileset,
         // we get the biggest of this indexLevels and save in the fileset.
-        partns_desc = files_desc->body.files_desc.partns_desc;
+        partns_desc = files_desc->filesDesc()->partns_desc;
 	if(partns_desc)
 	  {
 	    while (partns_desc)
 	      {
-		if ( indexLevels < partns_desc->body.partns_desc.indexlevel)
-		  indexLevels = partns_desc->body.partns_desc.indexlevel;
-		partns_desc = partns_desc->header.next;
+		if ( indexLevels < partns_desc->partnsDesc()->indexlevel)
+		  indexLevels = partns_desc->partnsDesc()->indexlevel;
+		partns_desc = partns_desc->next;
 	      }
 
 	  }
@@ -4415,21 +4404,19 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
       // Create fully qualified ANSI name from indexname, the PHYSICAL name.
       // If this descriptor was created for a sql/mp table, then the
       // indexname is a fully qualified NSK name (\sys.$vol.subvol.name).
-      QualifiedName qualIndexName(indexes_desc->body.indexes_desc.indexname,
+      QualifiedName qualIndexName(indexes_desc->indexesDesc()->indexname,
       				  1, heap, bindWA);
 
       // This ext_indexname is expected to be set up correctly as an
       // EXTERNAL-format name (i.e., dquoted if any delimited identifiers)
       // by sqlcat/read*.cpp.  The ...AsAnsiString() is just-in-case (MP?).
       NAString extIndexName(
-	   indexes_desc->body.indexes_desc.ext_indexname ?
-	   (NAString)indexes_desc->body.indexes_desc.ext_indexname :
 	   qualIndexName.getQualifiedNameAsAnsiString(),
 	   CmpCommon::statementHeap());
 
       QualifiedName qualExtIndexName;
 
-      //if (indexes_desc->body.indexes_desc.isVolatile)
+      //if (indexes_desc->indexesDesc()->isVolatile)
       if (table->getSpecialType() != ExtendedQualName::VIRTUAL_TABLE)
 	qualExtIndexName = QualifiedName(extIndexName, 1, heap, bindWA);
       else
@@ -4437,7 +4424,7 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
 
       // for volatile tables, set the object part as the external name.
       // cat/sch parts are internal and should not be shown.
-      if (indexes_desc->body.indexes_desc.isVolatile)
+      if (indexes_desc->indexesDesc()->isVolatile())
 	{
 	  ComObjectName con(extIndexName);
 	  extIndexName = con.getObjectNamePartAsAnsiString();
@@ -4446,12 +4433,12 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
       if (partFunc)
 	numberOfFiles = partFunc->getCountOfPartitions();
 
-      CMPASSERT(indexes_desc->body.indexes_desc.blocksize > 0);
+      CMPASSERT(indexes_desc->indexesDesc()->blocksize > 0);
 
       NAList<HbaseCreateOption*>* hbaseCreateOptions = NULL;
-      if ((indexes_desc->body.indexes_desc.hbaseCreateOptions) &&
+      if ((indexes_desc->indexesDesc()->hbaseCreateOptions) &&
           (CmpSeabaseDDL::genHbaseCreateOptions
-           (indexes_desc->body.indexes_desc.hbaseCreateOptions,
+           (indexes_desc->indexesDesc()->hbaseCreateOptions,
             hbaseCreateOptions,
             heap,
             NULL,
@@ -4466,833 +4453,816 @@ NABoolean createNAFileSets(desc_struct * table_desc       /*IN*/,
       newIndex = new (heap)
 	NAFileSet(
 		  qualIndexName, // QN containing "\NSK.$VOL", FUNNYSV, FUNNYNM
-		  //(indexes_desc->body.indexes_desc.isVolatile ?
 		  qualExtIndexName, // :
-		  //qualIndexName),
 		  extIndexName,	 // string containing Ansi name CAT.SCH."indx"
-		  files_desc ? files_desc->body.files_desc.fileorganization
-		             : KEY_SEQUENCED_FILE,
+		  KEY_SEQUENCED_FILE,
 		  isSystemTable,
 		  numberOfFiles,
-		  MAXOF(table_desc->body.table_desc.rowcount,0),
-                  indexes_desc->body.indexes_desc.record_length,
+		  100,
+                  indexes_desc->indexesDesc()->record_length,
                   blockSize,
 		  indexLevels,
 		  allColumns,
 		  indexKeyColumns,
 		  partitioningKeyColumns,
 		  partFunc,
-		  indexes_desc->body.indexes_desc.keytag,
-		  uint32ArrayToInt64(
-		       indexes_desc->body.indexes_desc.redeftime),
-		  files_desc ? files_desc->body.files_desc.audit : 0,
-		  files_desc ? files_desc->body.files_desc.auditcompress : 0,
-		  files_desc ? files_desc->body.files_desc.compressed : 0,
-		  files_desc ? (ComCompressionType)files_desc->body.files_desc.dcompressed : COM_NO_COMPRESSION,
-		  files_desc ? files_desc->body.files_desc.icompressed : 0,
-		  files_desc ? files_desc->body.files_desc.buffered: 0,
-		  files_desc ? files_desc->body.files_desc.clearOnPurge: 0,
-		  isPacked,
+		  indexes_desc->indexesDesc()->keytag,
+                  0, 
+                  files_desc ? files_desc->filesDesc()->isAudited() : 0,
+                  0,
+                  0,
+                  COM_NO_COMPRESSION,
+                  0,
+                  0,
+                  0,
+                  isPacked,
                   hasRemotePartition,
-		  ((indexes_desc->body.indexes_desc.keytag != 0) &&
-		   (indexes_desc->body.indexes_desc.unique != 0)),
-                  files_desc ? files_desc->body.files_desc.decoupledPartitionKeyList: 0,
-                  files_desc ? files_desc->body.files_desc.fileCode : 0,
-		  (indexes_desc->body.indexes_desc.isVolatile != 0),
-		  (indexes_desc->body.indexes_desc.isInMemoryObjectDefn != 0),
-                  indexes_desc->body.indexes_desc.indexUID,
-                  indexes_desc->body.indexes_desc.keys_desc,
+                  ((indexes_desc->indexesDesc()->keytag != 0) &&
+                   (indexes_desc->indexesDesc()->isUnique())),
+                  0,
+                  0,
+                  (indexes_desc->indexesDesc()->isVolatile()),
+                  (indexes_desc->indexesDesc()->isInMemoryObject()),
+                  indexes_desc->indexesDesc()->indexUID,
+                  indexes_desc->indexesDesc()->keys_desc,
                   NULL, // no Hive stats
-                  indexes_desc->body.indexes_desc.numSaltPartns,
+                  indexes_desc->indexesDesc()->numSaltPartns,
                   hbaseCreateOptions,
                   heap);
-
-      if (isNotAvailable)
-	newIndex->setNotAvailable(TRUE);
-
-      newIndex->setRowFormat(indexes_desc->body.indexes_desc.rowFormat);
-      // Mark each NAColumn in the list
-      indexKeyColumns.setIndexKey();
-      if ((table->isHbaseTable()) && (indexes_desc->body.indexes_desc.keytag != 0))
-        saveNAColumns.setIndexKey();
-
-      if (indexes_desc->body.indexes_desc.isCreatedExplicitly)
-	newIndex->setIsCreatedExplicitly(TRUE);
-
-      //if index is unique and is on one column, then mark column as unique
-      if ((indexes_desc->body.indexes_desc.unique) &&
-	  (indexKeyColumns.entries() == 1))
-        indexKeyColumns[0]->setIsUnique();
       
-      partitioningKeyColumns.setPartitioningKey();
-
-      // If it is a VP add it to the list of VPs.
-      // Otherwise, add it to the list of indices.
-      if (isVerticalPartition)
-        vertParts.insert(newIndex); // >>>> RETURN VALUE
-      else
-      {
-        indexes.insert(newIndex);
-      }
-
-      //
-      // advance to the next index
-      //
-      if (isTheClusteringKey)
-	{
-	  clusteringIndex = newIndex; // >>>> RETURN VALUE
-	  // switch to the alternate indexes by starting over again
-	  isTheClusteringKey = FALSE;
-	  indexes_desc = table_desc->body.table_desc.indexes_desc;
-	}
-      else
-	{
-	  // simply advance to the next in the list
-	  indexes_desc = indexes_desc->header.next;
-	}
+      if (isNotAvailable)
+         newIndex->setNotAvailable(TRUE);
 
-      // skip the clustering index, if we encounter it again
-      if (indexes_desc AND !indexes_desc->body.indexes_desc.keytag)
-	indexes_desc = indexes_desc->header.next;
-    } // end while (indexes_desc)
+       newIndex->setRowFormat(indexes_desc->indexesDesc()->rowFormat());
+       // Mark each NAColumn in the list
+       indexKeyColumns.setIndexKey();
+       if ((table->isHbaseTable()) && (indexes_desc->indexesDesc()->keytag != 0))
+         saveNAColumns.setIndexKey();
 
-    // logic related to indexes hiding
-  return FALSE;
-} // static createNAFileSets()
-#pragma warn(1506)  // warning elimination
+       if (indexes_desc->indexesDesc()->isExplicit())
+         newIndex->setIsCreatedExplicitly(TRUE);
 
+       //if index is unique and is on one column, then mark column as unique
+       if ((indexes_desc->indexesDesc()->isUnique()) &&
+           (indexKeyColumns.entries() == 1))
+         indexKeyColumns[0]->setIsUnique();
 
-// for Hive tables
-NABoolean createNAFileSets(hive_tbl_desc* hvt_desc        /*IN*/,
-                           const NATable * table          /*IN*/,
-                           const NAColumnArray & colArray /*IN*/,
-                           NAFileSetList & indexes        /*OUT*/,
-                           NAFileSetList & vertParts      /*OUT*/,
-                           NAFileSet * & clusteringIndex  /*OUT*/,
-			   LIST(CollIndex) & tableIdList  /*OUT*/,
-                           NAMemory* heap,
-                           BindWA * bindWA,
-			   Int32 *maxIndexLevelsPtr = NULL)
-{
-  NABoolean isTheClusteringKey = TRUE;
-  NABoolean isVerticalPartition;
-  NABoolean hasRemotePartition = FALSE;
-  CollIndex numClusteringKeyColumns = 0;
+       partitioningKeyColumns.setPartitioningKey();
 
-  // Set up global cluster information.  This global information always
-  // gets put on the context heap.
-  //
-  // Note that this function call will probably not do anything, since
-  // this cluster information is set up when arkcmp is created; however,
-  // it's certainly better to have this call here, rather than in a
-  // doubly-nested loop below where it used to be ...
+       indexes.insert(newIndex);
 
-  // $$$ probably not necessary to call this even once ...
-  setUpClusterInfo(CmpCommon::contextHeap());
+       //
+       // advance to the next index
+       //
+       if (isTheClusteringKey)
+         {
+           clusteringIndex = newIndex; // >>>> RETURN VALUE
+           // switch to the alternate indexes by starting over again
+           isTheClusteringKey = FALSE;
+           indexes_desc = table_desc->tableDesc()->indexes_desc;
+         }
+       else
+         {
+           // simply advance to the next in the list
+           indexes_desc = indexes_desc->next;
+         }
 
-  // only one set of key columns to handle for hive
+       // skip the clustering index, if we encounter it again
+       if (indexes_desc AND !indexes_desc->indexesDesc()->keytag)
+         indexes_desc = indexes_desc->next;
+     } // end while (indexes_desc)
+
+     // logic related to indexes hiding
+   return FALSE;
+ } // static createNAFileSets()
+ #pragma warn(1506)  // warning elimination
+
+
+ // for Hive tables
+ NABoolean createNAFileSets(hive_tbl_desc* hvt_desc        /*IN*/,
+                            const NATable * table          /*IN*/,
+                            const NAColumnArray & colArray /*IN*/,
+                            NAFileSetList & indexes        /*OUT*/,
+                            NAFileSetList & vertParts      /*OUT*/,
+                            NAFileSet * & clusteringIndex  /*OUT*/,
+                            LIST(CollIndex) & tableIdList  /*OUT*/,
+                            NAMemory* heap,
+                            BindWA * bindWA,
+                            Int32 *maxIndexLevelsPtr = NULL)
+ {
+   NABoolean isTheClusteringKey = TRUE;
+   NABoolean hasRemotePartition = FALSE;
+   CollIndex numClusteringKeyColumns = 0;
+
+   // Set up global cluster information.  This global information always
+   // gets put on the context heap.
+   //
+   // Note that this function call will probably not do anything, since
+   // this cluster information is set up when arkcmp is created; however,
+   // it's certainly better to have this call here, rather than in a
+   // doubly-nested loop below where it used to be ...
 
-      Lng32 numberOfFiles = 1;	  	// always at least 1
-      //      NAColumn * indexColumn;		// an index/VP key column
-      NAFileSet * newIndex;		// a new file set
+   // $$$ probably not necessary to call this even once ...
+   setUpClusterInfo(CmpCommon::contextHeap());
 
-      // all columns that belong to an index
-      NAColumnArray allColumns(CmpCommon::statementHeap());
+   // only one set of key columns to handle for hive
 
-      // the index key columns - the SORT columns
-      NAColumnArray indexKeyColumns(CmpCommon::statementHeap());
+       Lng32 numberOfFiles = 1;	  	// always at least 1
+       //      NAColumn * indexColumn;		// an index/VP key column
+       NAFileSet * newIndex;		// a new file set
 
-      // the partitioning key columns - the BUCKETING columns
-      NAColumnArray partitioningKeyColumns(CmpCommon::statementHeap());
+       // all columns that belong to an index
+       NAColumnArray allColumns(CmpCommon::statementHeap());
 
-      PartitioningFunction * partFunc = NULL;
-      // is this an index or is it really a VP?
+       // the index key columns - the SORT columns
+       NAColumnArray indexKeyColumns(CmpCommon::statementHeap());
 
-      isVerticalPartition = FALSE;
-      NABoolean isPacked = FALSE;
+       // the partitioning key columns - the BUCKETING columns
+       NAColumnArray partitioningKeyColumns(CmpCommon::statementHeap());
 
-      NABoolean isNotAvailable = FALSE;
+       PartitioningFunction * partFunc = NULL;
+       // is this an index or is it really a VP?
 
-      // ---------------------------------------------------------------------
-      // loop over the clustering key columns of the index
-      // ---------------------------------------------------------------------
-      const hive_bkey_desc *hbk_desc = hvt_desc->getBucketingKeys();
+       NABoolean isPacked = FALSE;
 
-      Int32 numBucketingColumns = 0;
+       NABoolean isNotAvailable = FALSE;
 
-      while (hbk_desc)
-	{
-          NAString colName(hbk_desc->name_);
-          colName.toUpper();
+       // ---------------------------------------------------------------------
+       // loop over the clustering key columns of the index
+       // ---------------------------------------------------------------------
+       const hive_bkey_desc *hbk_desc = hvt_desc->getBucketingKeys();
 
-          NAColumn* bucketingColumn = colArray.getColumn(colName);
+       Int32 numBucketingColumns = 0;
 
-          if ( bucketingColumn ) {
-	     partitioningKeyColumns.insert(bucketingColumn);
-             numBucketingColumns++;
-          }
+       while (hbk_desc)
+         {
+           NAString colName(hbk_desc->name_);
+           colName.toUpper();
 
-	  hbk_desc = hbk_desc->next_;
-	} // end while (hvk_desc)
+           NAColumn* bucketingColumn = colArray.getColumn(colName);
 
-      const hive_skey_desc *hsk_desc = hvt_desc->getSortKeys();
-      if ( hsk_desc == NULL ) {
-         // assume all columns are index key columns
-          for (CollIndex i=0; i<colArray.entries(); i++ )
-	     indexKeyColumns.insert(colArray[i]);
-      } else {
-        while (hsk_desc)
-        {
-          NAString colName(hsk_desc->name_);
-          colName.toUpper();
+           if ( bucketingColumn ) {
+              partitioningKeyColumns.insert(bucketingColumn);
+              numBucketingColumns++;
+           }
 
-          NAColumn* sortKeyColumn = colArray.getColumn(colName);
+           hbk_desc = hbk_desc->next_;
+         } // end while (hvk_desc)
 
-          if ( sortKeyColumn ) {
+       const hive_skey_desc *hsk_desc = hvt_desc->getSortKeys();
+       if ( hsk_desc == NULL ) {
+          // assume all columns are index key columns
+           for (CollIndex i=0; i<colArray.entries(); i++ )
+              indexKeyColumns.insert(colArray[i]);
+       } else {
+         while (hsk_desc)
+         {
+           NAString colName(hsk_desc->name_);
+           colName.toUpper();
 
-               indexKeyColumns.insert(sortKeyColumn);
-               indexKeyColumns.setAscending(indexKeyColumns.entries() - 1,
-                                            hsk_desc->orderInt_);
-          }
+           NAColumn* sortKeyColumn = colArray.getColumn(colName);
 
-          hsk_desc = hsk_desc->next_;
-        } // end while (hsk_desc)
-      }
+           if ( sortKeyColumn ) {
 
+                indexKeyColumns.insert(sortKeyColumn);
+                indexKeyColumns.setAscending(indexKeyColumns.entries() - 1,
+                                             hsk_desc->orderInt_);
+           }
 
-      // ---------------------------------------------------------------------
-      // Loop over the non key columns. 
-      // ---------------------------------------------------------------------
-      for (CollIndex i=0; i<colArray.entries(); i++)
-	{
-	  allColumns.insert(colArray[i]);
-	}
+           hsk_desc = hsk_desc->next_;
+         } // end while (hsk_desc)
+       }
 
-      //increment for each table/index to create unique identifier
-      cmpCurrentContext->incrementTableIdent();
 
-      // collect file stats from HDFS for the table
-      const hive_sd_desc *sd_desc = hvt_desc->getSDs();
-      HHDFSTableStats * hiveHDFSTableStats = new(heap) HHDFSTableStats(heap);
-      hiveHDFSTableStats->
-        setPortOverride(CmpCommon::getDefaultLong(HIVE_LIB_HDFS_PORT_OVERRIDE));
+       // ---------------------------------------------------------------------
+       // Loop over the non key columns. 
+       // ---------------------------------------------------------------------
+       for (CollIndex i=0; i<colArray.entries(); i++)
+         {
+           allColumns.insert(colArray[i]);
+         }
 
-      // create file-level statistics and estimate total row count and record length
-      hiveHDFSTableStats->populate(hvt_desc);
-      if (hiveHDFSTableStats->hasError())
-        {
-          *CmpCommon::diags() << DgSqlCode(-1200)
-                              << DgString0(hiveHDFSTableStats->getDiags().getErrMsg())
-                              << DgTableName(table->getTableName().getQualifiedNameAsAnsiString());
-          return TRUE;
-        }
+       //increment for each table/index to create unique identifier
+       cmpCurrentContext->incrementTableIdent();
 
-      if ((hiveHDFSTableStats->isOrcFile()) &&
-          (CmpCommon::getDefault(TRAF_ENABLE_ORC_FORMAT) == DF_OFF))
-        {
-          *CmpCommon::diags() << DgSqlCode(-3069)
-                              << DgTableName(table->getTableName().getQualifiedNameAsAnsiString());
-          return TRUE;
-        }
+       // collect file stats from HDFS for the table
+       const hive_sd_desc *sd_desc = hvt_desc->getSDs();
+       HHDFSTableStats * hiveHDFSTableStats = new(heap) HHDFSTableStats(heap);
+       hiveHDFSTableStats->
+         setPortOverride(CmpCommon::getDefaultLong(HIVE_LIB_HDFS_PORT_OVERRIDE));
 
-#ifndef NDEBUG
-      NAString logFile = 
-        ActiveSchemaDB()->getDefaults().getValue(HIVE_HDFS_STATS_LOG_FILE);
-      if (logFile.length())
-        {
-          FILE *ofd = fopen(logFile, "a");
-          if (ofd)
-            {
-              hiveHDFSTableStats->print(ofd);
-              fclose(ofd);
-            }
-        }
-      // for release code, would need to sandbox the ability to write
-      // files, e.g. to a fixed log directory
-#endif
+       // create file-level statistics and estimate total row count and record length
+       hiveHDFSTableStats->populate(hvt_desc);
+       if (hiveHDFSTableStats->hasError())
+         {
+           *CmpCommon::diags() << DgSqlCode(-1200)
+                               << DgString0(hiveHDFSTableStats->getDiags().getErrMsg())
+                               << DgTableName(table->getTableName().getQualifiedNameAsAnsiString());
+           return TRUE;
+         }
 
+       if ((hiveHDFSTableStats->isOrcFile()) &&
+           (CmpCommon::getDefault(TRAF_ENABLE_ORC_FORMAT) == DF_OFF))
+         {
+           *CmpCommon::diags() << DgSqlCode(-3069)
+                               << DgTableName(table->getTableName().getQualifiedNameAsAnsiString());
+           return TRUE;
+         }
 
-      // Create a node map for partitioning function.
-      NodeMap* nodeMap = new (heap) NodeMap(heap, NodeMap::HIVE);
+ #ifndef NDEBUG
+       NAString logFile = 
+         ActiveSchemaDB()->getDefaults().getValue(HIVE_HDFS_STATS_LOG_FILE);
+       if (logFile.length())
+         {
+           FILE *ofd = fopen(logFile, "a");
+           if (ofd)
+             {
+               hiveHDFSTableStats->print(ofd);
+               fclose(ofd);
+             }
+         }
+       // for release code, would need to sandbox the ability to write
+       // files, e.g. to a fixed log directory
+ #endif
 
-      createNodeMap(hvt_desc,
-                  nodeMap,
-                  heap,
-                  (char*)(table->getTableName().getObjectName().data()),
-                  cmpCurrentContext->getTableIdent());
-      tableIdList.insert(CollIndex(cmpCurrentContext->getTableIdent()));
 
-      // For the time being, set it up as Hash2 partitioned table
-               
-      Int32 numBuckets = hvt_desc->getSDs()->buckets_;
+       // Create a node map for partitioning function.
+       NodeMap* nodeMap = new (heap) NodeMap(heap, NodeMap::HIVE);
 
-      if (numBuckets>1 && partitioningKeyColumns.entries()>0) {
-         if ( CmpCommon::getDefault(HIVE_USE_HASH2_AS_PARTFUNCION) == DF_ON )
-            partFunc = createHash2PartitioningFunction
-                          (numBuckets, partitioningKeyColumns, nodeMap, heap);
-         else
-            partFunc = createHivePartitioningFunction
-                          (numBuckets, partitioningKeyColumns, nodeMap, heap);
-      } else
-         partFunc = new (heap)
-                       SinglePartitionPartitioningFunction(nodeMap, heap);
+       createNodeMap(hvt_desc,
+                   nodeMap,
+                   heap,
+                   (char*)(table->getTableName().getObjectName().data()),
+                   cmpCurrentContext->getTableIdent());
+       tableIdList.insert(CollIndex(cmpCurrentContext->getTableIdent()));
 
-      // NB: Just in case, we made a call to setupClusterInfo at the
-      // beginning of this function.
-      //      desc_struct * partns_desc;
-      Int32 indexLevels = 1;
-      
+       // For the time being, set it up as Hash2 partitioned table
 
-      // add a new access path
-      //
-      // $$$ The estimated number of records should be available from
-      // $$$ a FILES descriptor. If it is not available, it may have
-      // $$$ to be computed by examining the EOFs of each individual
-      // $$$ file that belongs to the file set.
+       Int32 numBuckets = hvt_desc->getSDs()->buckets_;
 
-      // Create fully qualified ANSI name from indexname, the PHYSICAL name.
-      // If this descriptor was created for a sql/mp table, then the
-      // indexname is a fully qualified NSK name (\sys.$vol.subvol.name).
-      QualifiedName qualIndexName(
-                  (char*)(table->getTableName().getObjectName().data()),
-                  "HIVE", "", heap);
+       if (numBuckets>1 && partitioningKeyColumns.entries()>0) {
+          if ( CmpCommon::getDefault(HIVE_USE_HASH2_AS_PARTFUNCION) == DF_ON )
+             partFunc = createHash2PartitioningFunction
+                           (numBuckets, partitioningKeyColumns, nodeMap, heap);
+          else
+             partFunc = createHivePartitioningFunction
+                           (numBuckets, partitioningKeyColumns, nodeMap, heap);
+       } else
+          partFunc = new (heap)
+                        SinglePartitionPartitioningFunction(nodeMap, heap);
 
-      // This ext_indexname is expected to be set up correctly as an
-      // EXTERNAL-format name (i.e., dquoted if any delimited identifiers)
-      // by sqlcat/read*.cpp.  The ...AsAnsiString() is just-in-case (MP?).
-      NAString extIndexName(
-	   qualIndexName.getQualifiedNameAsAnsiString(),
-	   CmpCommon::statementHeap());
+       // NB: Just in case, we made a call to setupClusterInfo at the
+       // beginning of this function.
+       //      TrafDesc * partns_desc;
+       Int32 indexLevels = 1;
 
-      QualifiedName qualExtIndexName = QualifiedName(extIndexName, 1, heap, bindWA);
 
+       // add a new access path
+       //
+       // $$$ The estimated number of records should be available from
+       // $$$ a FILES descriptor. If it is not available, it may have
+       // $$$ to be computed by examining the EOFs of each individual
+       // $$$ file that belongs to the file set.
 
-      if (partFunc)
-	numberOfFiles = partFunc->getCountOfPartitions();
+       // Create fully qualified ANSI name from indexname, the PHYSICAL name.
+       // If this descriptor was created for a sql/mp table, then the
+       // indexname is a fully qualified NSK name (\sys.$vol.subvol.name).
+       QualifiedName qualIndexName(
+                   (char*)(table->getTableName().getObjectName().data()),
+                   "HIVE", "", heap);
 
-      Int64 estimatedRC = 0;
-      Int64 estimatedRecordLength = 0;
+       // This ext_indexname is expected to be set up correctly as an
+       // EXTERNAL-format name (i.e., dquoted if any delimited identifiers)
+       // by sqlcat/read*.cpp.  The ...AsAnsiString() is just-in-case (MP?).
+       NAString extIndexName(
+            qualIndexName.getQualifiedNameAsAnsiString(),
+            CmpCommon::statementHeap());
 
-      if ( !sd_desc->isTrulyText() ) {
-         //
-         // Poor man's estimation by assuming the record length in hive is the 
-         // same as SQ's. We can do better once we know how the binary data is
-         // stored in hdfs.
-         //
-         estimatedRecordLength = colArray.getTotalStorageSize();
-         estimatedRC = hiveHDFSTableStats->getTotalSize() / estimatedRecordLength;
-      } else {
-         // use the information estimated during populate() call
-         estimatedRC = hiveHDFSTableStats->getEstimatedRowCount();
-         estimatedRecordLength = 
-           Lng32(MINOF(hiveHDFSTableStats->getEstimatedRecordLength(),
-                       hiveHDFSTableStats->getEstimatedBlockSize()-100));
-      }
+       QualifiedName qualExtIndexName = QualifiedName(extIndexName, 1, heap, bindWA);
 
-      ((NATable*)table)-> setOriginalRowCount((double)estimatedRC);
 
-      newIndex = new (heap)
-	NAFileSet(
-		  qualIndexName, // QN containing "\NSK.$VOL", FUNNYSV, FUNNYNM
-		  //(indexes_desc->body.indexes_desc.isVolatile ?
-		  qualExtIndexName, // :
-		  //qualIndexName),
-		  extIndexName,	 // string containing Ansi name CAT.SCH."indx"
+       if (partFunc)
+         numberOfFiles = partFunc->getCountOfPartitions();
 
-                  // The real orginization is a hybrid of KEY_SEQ and HASH.
-                  // Well, we just take the KEY_SEQ for now.
-                  KEY_SEQUENCED_FILE,
+       Int64 estimatedRC = 0;
+       Int64 estimatedRecordLength = 0;
 
-		  FALSE, // isSystemTable
-		  numberOfFiles,
+       if ( !sd_desc->isTrulyText() ) {
+          //
+          // Poor man's estimation by assuming the record length in hive is the 
+          // same as SQ's. We can do better once we know how the binary data is
+          // stored in hdfs.
+          //
+          estimatedRecordLength = colArray.getTotalStorageSize();
+          estimatedRC = hiveHDFSTableStats->getTotalSize() / estimatedRecordLength;
+       } else {
+          // use the information estimated during populate() call
+          estimatedRC = hiveHDFSTableStats->getEstimatedRowCount();
+          estimatedRecordLength = 
+            Lng32(MINOF(hiveHDFSTableStats->getEstimatedRecordLength(),
+                        hiveHDFSTableStats->getEstimatedBlockSize()-100));
+       }
 
-                  // HIVE-TBD
-		  Cardinality(estimatedRC),
-                  Lng32(estimatedRecordLength),
+       ((NATable*)table)-> setOriginalRowCount((double)estimatedRC);
+
+       newIndex = new (heap)
+         NAFileSet(
+                   qualIndexName, // QN containing "\NSK.$VOL", FUNNYSV, FUNNYNM
+                   qualExtIndexName, // :
+                   extIndexName,	 // string containing Ansi name CAT.SCH."indx"
+
+                   // The real orginization is a hybrid of KEY_SEQ and HASH.
+                   // Well, we just take the KEY_SEQ for now.
+                   KEY_SEQUENCED_FILE,
+
+                   FALSE, // isSystemTable
+                   numberOfFiles,
+
+                   // HIVE-TBD
+                   Cardinality(estimatedRC),
+                   Lng32(estimatedRecordLength),
+
+                   //hvt_desc->getBlockSize(), 
+                   (Lng32)hiveHDFSTableStats->getEstimatedBlockSize(), 
+
+                   indexLevels, // HIVE-TBD
+                   allColumns,
+                   indexKeyColumns,
+                   partitioningKeyColumns,
+                   partFunc,
+                   0, // indexes_desc->indexesDesc()->keytag,
+
+                   hvt_desc->redeftime(), 
+
+                   1, // files_desc->filesDesc()->audit 
+                   0, // files_desc->filesDesc()->auditcompress 
+                   0, // files_desc->filesDesc()->compressed 
+                   COM_NO_COMPRESSION,
+                   0, // files_desc->filesDesc()->icompressed 
+                   0, // files_desc->filesDesc()->buffered:
+                   0, // files_desc->filesDesc()->clearOnPurge: 0,
+                   isPacked,
+                   hasRemotePartition,
+                   0, // not a unique secondary index
+                   0, // isDecoupledRangePartitioned
+                   0, // file code
+                   0, // not a volatile
+                   0, // inMemObjectDefn
+                   0,
+                   NULL, // indexes_desc->indexesDesc()->keys_desc,
+                   hiveHDFSTableStats,
+                   0, // saltPartns
+                   NULL, //hbaseCreateOptions
+                   heap);
+
+       if (isNotAvailable)
+         newIndex->setNotAvailable(TRUE);
+
+       // Mark each NAColumn in the list
+       indexKeyColumns.setIndexKey();
+
+       partitioningKeyColumns.setPartitioningKey();
+
+       // If it is a VP add it to the list of VPs.
+       // Otherwise, add it to the list of indices.
+       indexes.insert(newIndex);
+
+        clusteringIndex = newIndex;
+
+
+   return FALSE;
+ } // static createNAFileSets()
+
+ #pragma warn(1506)  // warning elimination
+
+ // -----------------------------------------------------------------------
+ // Mark columns named in PRIMARY KEY constraint (these will be different
+ // from clustering key columns when the PK is droppable), for Binder error 4033.
+ // -----------------------------------------------------------------------
+ static void markPKCols(const TrafConstrntsDesc * constrnt /*IN*/,
+                        const NAColumnArray& columnArray       /*IN*/)
+ {
+   TrafDesc *keycols_desc = constrnt->constr_key_cols_desc;
+   while (keycols_desc)
+     {
+       TrafConstrntKeyColsDesc *key =
+         keycols_desc->constrntKeyColsDesc();
+       // Lookup by name (not position: key->position is pos *within the PK*)
+       NAColumn *nacol = columnArray.getColumn(key->colname);
+       if(nacol != NULL)
+         nacol->setPrimaryKey();
+       keycols_desc = keycols_desc->next;
+     }
+ } // static markPKCols
+
+ // -----------------------------------------------------------------------
+ // Insert MP CHECK CONSTRAINT text into NATable::checkConstraints_.
+ // -----------------------------------------------------------------------
+ static NABoolean
+ createConstraintInfo(const TrafDesc * table_desc        /*IN*/,
+                      const QualifiedName& tableQualName    /*IN*/,
+                      const NAColumnArray& columnArray      /*IN*/,
+                      CheckConstraintList& checkConstraints /*OUT*/,
+                      AbstractRIConstraintList& uniqueConstraints,
+                      AbstractRIConstraintList& refConstraints,
+                      NAMemory* heap,
+                      BindWA *bindWA)
+ {
+   TrafDesc *constrnts_desc = table_desc->tableDesc()->constrnts_desc;
+
+   while (constrnts_desc)
+     {
+       TrafConstrntsDesc *constrntHdr = constrnts_desc->constrntsDesc();
 
-		  //hvt_desc->getB

<TRUNCATED>


[07/10] incubator-trafodion git commit: metadata access performance improvement for accessing traf objects

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/Generator.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/Generator.cpp b/core/sql/generator/Generator.cpp
index 466e124..6530a3a 100644
--- a/core/sql/generator/Generator.cpp
+++ b/core/sql/generator/Generator.cpp
@@ -37,6 +37,7 @@
 #include <sys/time.h>
 #include "dfs2rec.h"
 
+#include "TrafDDLdesc.h"
 
 #include "ComOptIncludes.h"
 #include "GroupAttr.h"
@@ -71,6 +72,7 @@
 #include "CmUtil.h"
 
 #include "PCodeExprCache.h"
+#include "TrafDDLdesc.h"
 
 // -----------------------------------------------------------------------
 // When called within arkcmp.exe, fixupVTblPtr() translates to a call
@@ -1485,17 +1487,18 @@ Lng32 Generator::getRecordLength(ComTdbVirtTableIndexInfo * indexInfo,
   return recLen;
 }
 
-desc_struct* Generator::createColDescs(
+TrafDesc* Generator::createColDescs(
   const char * tableName,
   ComTdbVirtTableColumnInfo * columnInfo,
   Int16 numCols,
-  UInt32 &offset)
+  UInt32 &offset,
+  Space * space)
 {
   if (! columnInfo)
     return NULL;
 
-  desc_struct * first_col_desc = NULL;
-  desc_struct * prev_desc = NULL;
+  TrafDesc * first_col_desc = NULL;
+  TrafDesc * prev_desc = NULL;
   for (Int16 colNum = 0; colNum < numCols; colNum++)
     {
       ComTdbVirtTableColumnInfo * info = columnInfo + colNum;
@@ -1512,106 +1515,124 @@ desc_struct* Generator::createColDescs(
                                                      info->datatype == REC_NCHAR_F_UNICODE ||
                                                      info->datatype == REC_NCHAR_V_ANSI_UNICODE))
         info_charset = SQLCHARSETCODE_UCS2;
-      desc_struct * col_desc = readtabledef_make_column_desc(
-                                    tableName,
-                                    info->colName,
-                                    i,
-                                    info->datatype,
-                                    info->length,
-                                    tmpOffset,
-                                    (short) info->nullable,
-                                    (NABoolean) FALSE,    // tablenameMustBeAllocated = FALSE
-                                    (desc_struct *) NULL, // passedDesc = NULL
-                                    info_charset);
 
+      char * colname = new GENHEAP(space) char[strlen(info->colName)+1];
+      strcpy(colname, info->colName);
+
+      TrafDesc * col_desc = TrafMakeColumnDesc(
+           tableName,
+           colname, //info->colName,
+           i,
+           info->datatype,
+           info->length,
+           tmpOffset,
+           info->nullable,
+           info_charset,
+           space);
+      
       // Virtual tables use SQLARK_EXPLODED_FORMAT in which numeric column
-      // values are aligned.  Ignore readtabledef_make_column_desc's
+      // values are aligned.  Ignore TrafMakeColumnDesc's
       // offset calculation which doesn't reflect column value alignment.
       offset = colOffset + info->length;
 
       // EXPLAIN__ table uses 22-bit precision REAL values
       if (info->datatype == REC_FLOAT32)
-        col_desc->body.columns_desc.precision = 22;
+        col_desc->columnsDesc()->precision = 22;
 
-      col_desc->body.columns_desc.precision = info->precision;
+      col_desc->columnsDesc()->precision = info->precision;
       if (DFS2REC::isInterval(info->datatype))
-	col_desc->body.columns_desc.intervalleadingprec = info->precision;
+	col_desc->columnsDesc()->intervalleadingprec = info->precision;
 
-      col_desc->body.columns_desc.scale = info->scale;
+      col_desc->columnsDesc()->scale = info->scale;
       if ((DFS2REC::isInterval(info->datatype)) ||
 	  (DFS2REC::isDateTime(info->datatype)))
-	col_desc->body.columns_desc.datetimefractprec = info->scale;
-
-      col_desc->body.columns_desc.datetimestart = (rec_datetime_field)info->dtStart;
-      col_desc->body.columns_desc.datetimeend = (rec_datetime_field)info->dtEnd;
-
-      col_desc->body.columns_desc.upshift = (info->upshifted ? 1 : 0);
-      col_desc->body.columns_desc.caseinsensitive = (short)FALSE;
-
-      col_desc->body.columns_desc.pictureText = new HEAP char[340];
-      NAType::convertTypeToText(col_desc->body.columns_desc.pictureText,//OUT
-				col_desc->body.columns_desc.datatype,
-				col_desc->body.columns_desc.length,
-				col_desc->body.columns_desc.precision,
-				col_desc->body.columns_desc.scale,
-				col_desc->body.columns_desc.datetimestart,
-				col_desc->body.columns_desc.datetimeend,
-				col_desc->body.columns_desc.datetimefractprec,
-				col_desc->body.columns_desc.intervalleadingprec,
-				col_desc->body.columns_desc.upshift,
-				col_desc->body.columns_desc.caseinsensitive,
-				(CharInfo::CharSet)col_desc->body.columns_desc.character_set,
-				(CharInfo::Collation)col_desc->body.columns_desc.collation_sequence,
+	col_desc->columnsDesc()->datetimefractprec = info->scale;
+
+      col_desc->columnsDesc()->datetimestart = (rec_datetime_field)info->dtStart;
+      col_desc->columnsDesc()->datetimeend = (rec_datetime_field)info->dtEnd;
+
+      col_desc->columnsDesc()->setUpshifted(info->upshifted);
+      col_desc->columnsDesc()->setCaseInsensitive(FALSE);
+
+      char pt[350];
+      NAType::convertTypeToText(pt, //OUT
+				col_desc->columnsDesc()->datatype,
+				col_desc->columnsDesc()->length,
+				col_desc->columnsDesc()->precision,
+				col_desc->columnsDesc()->scale,
+				col_desc->columnsDesc()->datetimeStart(),
+				col_desc->columnsDesc()->datetimeEnd(),
+				col_desc->columnsDesc()->datetimefractprec,
+				col_desc->columnsDesc()->intervalleadingprec,
+				col_desc->columnsDesc()->isUpshifted(),
+				col_desc->columnsDesc()->isCaseInsensitive(),
+				(CharInfo::CharSet)col_desc->columnsDesc()->character_set,
+				(CharInfo::Collation)col_desc->columnsDesc()->collation_sequence,
 				NULL
 				);
-
-      col_desc->body.columns_desc.defaultClass  = info->defaultClass;
-      if (info->defaultClass == COM_NO_DEFAULT)
-	col_desc->body.columns_desc.defaultvalue = NULL;
+      col_desc->columnsDesc()->pictureText 
+        = new GENHEAP(space) char[strlen(pt)+1];
+      strcpy(col_desc->columnsDesc()->pictureText, pt);
+      col_desc->columnsDesc()->setDefaultClass(info->defaultClass);
+      if ((info->defaultClass == COM_NO_DEFAULT) ||
+          (info->defVal == NULL))
+	col_desc->columnsDesc()->defaultvalue = NULL;
       else
-	col_desc->body.columns_desc.defaultvalue = (char*)info->defVal;
+        {
+          col_desc->columnsDesc()->defaultvalue = new GENHEAP(space) char[strlen(info->defVal) +1];
+          strcpy(col_desc->columnsDesc()->defaultvalue, (char*)info->defVal);
+        }
 
-      col_desc->body.columns_desc.colclass = 'U';
-      col_desc->body.columns_desc.addedColumn = 0;
+      col_desc->columnsDesc()->colclass = 'U';
+      col_desc->columnsDesc()->setAdded(FALSE);
       if (info->columnClass == COM_SYSTEM_COLUMN)
-	col_desc->body.columns_desc.colclass = 'S';
+	col_desc->columnsDesc()->colclass = 'S';
       else if (info->columnClass == COM_ADDED_USER_COLUMN)
 	{
-	  col_desc->body.columns_desc.colclass = 'A';
-	  col_desc->body.columns_desc.addedColumn = 1;
+	  col_desc->columnsDesc()->colclass = 'A';
+	  col_desc->columnsDesc()->setAdded(TRUE);
 	}
       else if (info->columnClass == COM_ALTERED_USER_COLUMN)
 	{
-	  col_desc->body.columns_desc.colclass = 'C';
-	  col_desc->body.columns_desc.addedColumn = 1;
+	  col_desc->columnsDesc()->colclass = 'C';
+	  col_desc->columnsDesc()->setAdded(TRUE);
 	}
 
       if (info->colHeading)
-	col_desc->body.columns_desc.heading = (char*)info->colHeading;
+        {
+          col_desc->columnsDesc()->heading = new GENHEAP(space) char[strlen(info->colHeading) + 1];
+          strcpy(col_desc->columnsDesc()->heading, info->colHeading);
+        }
       else
-	col_desc->body.columns_desc.hbaseColFam = NULL;
+	col_desc->columnsDesc()->heading = NULL;
 
       if (info->hbaseColFam)
-	col_desc->body.columns_desc.hbaseColFam = (char*)info->hbaseColFam;
+        {
+          col_desc->columnsDesc()->hbaseColFam = new GENHEAP(space) char[strlen(info->hbaseColFam) + 1];
+          strcpy(col_desc->columnsDesc()->hbaseColFam, (char*)info->hbaseColFam);
+        }
       else
-	col_desc->body.columns_desc.hbaseColFam = NULL;
+	col_desc->columnsDesc()->hbaseColFam = NULL;
 
       if (info->hbaseColQual)
-	col_desc->body.columns_desc.hbaseColQual = (char*)info->hbaseColQual;
+        {
+          col_desc->columnsDesc()->hbaseColQual = new GENHEAP(space) char[strlen(info->hbaseColQual) + 1];
+          strcpy(col_desc->columnsDesc()->hbaseColQual, (char*)info->hbaseColQual);
+        }
       else
-	col_desc->body.columns_desc.hbaseColQual = NULL;
+	col_desc->columnsDesc()->hbaseColQual = NULL;
 
-      col_desc->body.columns_desc.hbaseColFlags = info->hbaseColFlags;
+      col_desc->columnsDesc()->hbaseColFlags = info->hbaseColFlags;
 
-      col_desc->body.columns_desc.paramDirection =
-           CmGetComDirectionAsComParamDirection(info->paramDirection);
-      col_desc->body.columns_desc.isOptional = info->isOptional;
-      col_desc->body.columns_desc.colFlags = info->colFlags;
+      col_desc->columnsDesc()->setParamDirection(
+           CmGetComDirectionAsComParamDirection(info->paramDirection));
+      col_desc->columnsDesc()->setOptional(info->isOptional);
+      col_desc->columnsDesc()->colFlags = info->colFlags;
 
       if (!first_col_desc)
 	first_col_desc = col_desc;
       else
-	prev_desc->header.next = col_desc;
+	prev_desc->next = col_desc;
 
       prev_desc = col_desc;
     }
@@ -1619,14 +1640,13 @@ desc_struct* Generator::createColDescs(
   return first_col_desc;
 }
 
-static void initKeyDescStruct(keys_desc_struct * tgt,
-			      const ComTdbVirtTableKeyInfo * src)
+static void initKeyDescStruct(TrafKeysDesc * tgt,
+			      const ComTdbVirtTableKeyInfo * src,
+                              Space * space)
 {
-  tgt->indexname = NULL;
-
   if (src->colName)
     {
-      tgt->keyname = new HEAP char[strlen(src->colName) +1];
+      tgt->keyname = new GENHEAP(space) char[strlen(src->colName) +1];
       strcpy(tgt->keyname, src->colName);
     }
   else
@@ -1634,10 +1654,10 @@ static void initKeyDescStruct(keys_desc_struct * tgt,
       
   tgt->keyseqnumber     = src->keySeqNum;
   tgt->tablecolnumber   = src->tableColNum;
-  tgt->ordering         = src->ordering;
+  tgt->setDescending(src->ordering ? TRUE : FALSE);
   if (src->hbaseColFam)
     {
-      tgt->hbaseColFam = new HEAP char[strlen(src->hbaseColFam)+1];
+      tgt->hbaseColFam = new GENHEAP(space) char[strlen(src->hbaseColFam)+1];
       strcpy(tgt->hbaseColFam, src->hbaseColFam);
     }
   else
@@ -1645,65 +1665,67 @@ static void initKeyDescStruct(keys_desc_struct * tgt,
 
   if (src->hbaseColQual)
     {
-      tgt->hbaseColQual = new HEAP char[strlen(src->hbaseColQual)+1];
+      tgt->hbaseColQual = new GENHEAP(space) char[strlen(src->hbaseColQual)+1];
       strcpy(tgt->hbaseColQual, src->hbaseColQual);
     }
   else
     tgt->hbaseColQual = NULL;
 }
 
-desc_struct * Generator::createKeyDescs(Int32 numKeys,
-					const ComTdbVirtTableKeyInfo * keyInfo)
+TrafDesc * Generator::createKeyDescs(Int32 numKeys,
+					const ComTdbVirtTableKeyInfo * keyInfo,
+                                        Space * space)
 {
-  desc_struct * first_key_desc = NULL;
+  TrafDesc * first_key_desc = NULL;
 
   if (keyInfo == NULL)
     return NULL;
 
   // create key descs
-  desc_struct * prev_desc = NULL;
+  TrafDesc * prev_desc = NULL;
   for (Int32 keyNum = 0; keyNum < numKeys; keyNum++)
     {
-      desc_struct * key_desc = readtabledef_allocate_desc(DESC_KEYS_TYPE);
+      TrafDesc * key_desc = TrafAllocateDDLdesc(DESC_KEYS_TYPE, space);
       if (prev_desc)
-	prev_desc->header.next = key_desc;
+	prev_desc->next = key_desc;
       else
        first_key_desc = key_desc;
 
       prev_desc = key_desc;
 
-      initKeyDescStruct(&key_desc->body.keys_desc,
-			&keyInfo[keyNum]);
+      initKeyDescStruct(key_desc->keysDesc(),
+			&keyInfo[keyNum], space);
     }
 
   return first_key_desc;
 }
 
-desc_struct * Generator::createConstrKeyColsDescs(Int32 numKeys,
-					ComTdbVirtTableKeyInfo * keyInfo)
+TrafDesc * Generator::createConstrKeyColsDescs(Int32 numKeys,
+                                                  ComTdbVirtTableKeyInfo * keyInfo,
+                                                  Space * space)
 {
-  desc_struct * first_key_desc = NULL;
+  TrafDesc * first_key_desc = NULL;
 
   if (keyInfo == NULL)
     return NULL;
 
   // create key descs
-  desc_struct * prev_desc = NULL;
+  TrafDesc * prev_desc = NULL;
   for (Int32 keyNum = 0; keyNum < numKeys; keyNum++)
     {
-      desc_struct * key_desc = readtabledef_allocate_desc(DESC_CONSTRNT_KEY_COLS_TYPE);
+      TrafDesc * key_desc = TrafAllocateDDLdesc(DESC_CONSTRNT_KEY_COLS_TYPE, space);
       if (prev_desc)
-	prev_desc->header.next = key_desc;
+	prev_desc->next = key_desc;
       else
        first_key_desc = key_desc;
 
       prev_desc = key_desc;
 
       ComTdbVirtTableKeyInfo * src = &keyInfo[keyNum];
-      constrnt_key_cols_desc_struct * tgt = &key_desc->body.constrnt_key_cols_desc;
+      TrafConstrntKeyColsDesc * tgt = key_desc->constrntKeyColsDesc();
       if (src->colName)
 	{
-	  tgt->colname = new HEAP char[strlen(src->colName) +1];
+	  tgt->colname = new GENHEAP(space) char[strlen(src->colName) +1];
 	  strcpy(tgt->colname, src->colName);
 	}
       else
@@ -1716,32 +1738,33 @@ desc_struct * Generator::createConstrKeyColsDescs(Int32 numKeys,
 }
 
 // this method is used to create both referencing and referenced constraint structs.
-desc_struct * Generator::createRefConstrDescStructs(
+TrafDesc * Generator::createRefConstrDescStructs(
 						    Int32 numConstrs,
-						    ComTdbVirtTableRefConstraints * refConstrs)
+						    ComTdbVirtTableRefConstraints * refConstrs,
+                                                    Space * space)
 {
-  desc_struct * first_constr_desc = NULL;
+  TrafDesc * first_constr_desc = NULL;
 
   if ((numConstrs == 0) || (refConstrs == NULL))
     return NULL;
 
    // create constr descs
-  desc_struct * prev_desc = NULL;
+  TrafDesc * prev_desc = NULL;
   for (Int32 constrNum = 0; constrNum < numConstrs; constrNum++)
     {
-      desc_struct * constr_desc = readtabledef_allocate_desc(DESC_REF_CONSTRNTS_TYPE);
+      TrafDesc * constr_desc = TrafAllocateDDLdesc(DESC_REF_CONSTRNTS_TYPE, space);
       if (prev_desc)
-	prev_desc->header.next = constr_desc;
+	prev_desc->next = constr_desc;
       else
        first_constr_desc = constr_desc;
 
       prev_desc = constr_desc;
 
       ComTdbVirtTableRefConstraints * src = &refConstrs[constrNum];
-      ref_constrnts_desc_struct * tgt = &constr_desc->body.ref_constrnts_desc;
+      TrafRefConstrntsDesc * tgt = constr_desc->refConstrntsDesc();
       if (src->constrName)
 	{
-	  tgt->constrntname = new HEAP char[strlen(src->constrName) +1];
+	  tgt->constrntname = new GENHEAP(space) char[strlen(src->constrName) +1];
 	  strcpy(tgt->constrntname, src->constrName);
 	}
       else
@@ -1749,7 +1772,7 @@ desc_struct * Generator::createRefConstrDescStructs(
 
       if (src->baseTableName)
 	{
-	  tgt->tablename = new HEAP char[strlen(src->baseTableName) +1];
+	  tgt->tablename = new GENHEAP(space) char[strlen(src->baseTableName) +1];
 	  strcpy(tgt->tablename, src->baseTableName);
 	}
       else
@@ -1761,12 +1784,13 @@ desc_struct * Generator::createRefConstrDescStructs(
 }
 
 static Lng32 createDescStructs(char * rforkName,
-			      Int32 numCols,
-			      ComTdbVirtTableColumnInfo * columnInfo,
-			      Int32 numKeys,
-			      ComTdbVirtTableKeyInfo * keyInfo,
-			      desc_struct* &colDescs,
-			      desc_struct* &keyDescs)
+                               Int32 numCols,
+                               ComTdbVirtTableColumnInfo * columnInfo,
+                               Int32 numKeys,
+                               ComTdbVirtTableKeyInfo * keyInfo,
+                               TrafDesc* &colDescs,
+                               TrafDesc* &keyDescs,
+                               Space * space)
 {
   colDescs = NULL;
   keyDescs = NULL;
@@ -1774,266 +1798,331 @@ static Lng32 createDescStructs(char * rforkName,
 
   // create column descs
   colDescs = Generator::createColDescs(rforkName, columnInfo, (Int16) numCols,
-                                       reclen);
+                                       reclen, space);
 
-  keyDescs = Generator::createKeyDescs(numKeys, keyInfo);
+  keyDescs = Generator::createKeyDescs(numKeys, keyInfo, space);
 
   return (Lng32) reclen;
 }
 
-desc_struct * Generator::createVirtualTableDesc(
-						const char * inTableName,
-						Int32 numCols,
-						ComTdbVirtTableColumnInfo * columnInfo,
-						Int32 numKeys,
-						ComTdbVirtTableKeyInfo * keyInfo,
-						Int32 numConstrs,
-						ComTdbVirtTableConstraintInfo * constrInfo,
-						Int32 numIndexes,
-						ComTdbVirtTableIndexInfo * indexInfo,
-						Int32 numViews,
-						ComTdbVirtTableViewInfo * viewInfo,
-						ComTdbVirtTableTableInfo * tableInfo,
-						ComTdbVirtTableSequenceInfo * seqInfo)
-{
-  // readtabledef_allocate_desc() requires that HEAP (STMTHEAP)
-  // be used for operator new herein
+static void populateRegionDescForEndKey(char* buf, Int32 len, struct TrafDesc* target)
+{
+   target->hbaseRegionDesc()->beginKey = NULL;
+   target->hbaseRegionDesc()->beginKeyLen = 0;
+   target->hbaseRegionDesc()->endKey = buf;
+   target->hbaseRegionDesc()->endKeyLen = len;
+}
+
+static void populateRegionDescAsRANGE(char* buf, Int32 len, struct TrafDesc* target, NAMemory*, Space*)
+{
+   target->nodetype = DESC_HBASE_RANGE_REGION_TYPE;
+   populateRegionDescForEndKey(buf, len, target);
+}
 
-  const char * tableName = (tableInfo ? tableInfo->tableName : inTableName);
-  desc_struct * table_desc = readtabledef_allocate_desc(DESC_TABLE_TYPE);
-  table_desc->body.table_desc.tablename = new HEAP char[strlen(tableName)+1];
-  strcpy(table_desc->body.table_desc.tablename, tableName);
+//
+// Produce a list of TrafDesc objects. In each object, the body_struct
+// field points at hbaseRegion_desc. The order of the keyinfo, obtained from
+// org.apache.hadoop.hbase.client.HTable.getEndKey(), is preserved.
+//
+// Allocate space from STMTHEAP, per the call of this function
+// in CmpSeabaseDDL::getSeabaseTableDesc() and the
+// Generator::createVirtualTableDesc() call make before this one that
+// uses STMTPHEAP througout.
+//
+TrafDesc* Generator::assembleDescs(
+     NAArray<HbaseStr >* keyArray,
+     NAMemory* heap,
+     Space * space)
+{
+   if (keyArray == NULL)
+     return NULL;
+   
+   TrafDesc *result = NULL;
+   Int32 entries = keyArray->entries();
+   Int32 len = 0;
+   char* buf = NULL;
+
+   for (Int32 i=entries-1; i>=0; i-- ) {
+     len = keyArray->at(i).len;
+     if ( len > 0 ) { 
+       buf = new GENHEAP(space) char[len];
+       memcpy(buf, keyArray->at(i).val, len); 
+     } else
+       buf = NULL;
+     
+     TrafDesc* wrapper = 
+       TrafAllocateDDLdesc(DESC_HBASE_RANGE_REGION_TYPE, space);
+     
+     populateRegionDescAsRANGE(buf, len, wrapper, heap, space);
+     
+     wrapper->next = result;
+     result = wrapper;
+   }
+   
+   return result;
+}
+
+TrafDesc * Generator::createVirtualTableDesc
+(
+     const char * inTableName,
+     Int32 numCols,
+     ComTdbVirtTableColumnInfo * columnInfo,
+     Int32 numKeys,
+     ComTdbVirtTableKeyInfo * keyInfo,
+     Int32 numConstrs,
+     ComTdbVirtTableConstraintInfo * constrInfo,
+     Int32 numIndexes,
+     ComTdbVirtTableIndexInfo * indexInfo,
+     Int32 numViews,
+     ComTdbVirtTableViewInfo * viewInfo,
+     ComTdbVirtTableTableInfo * tableInfo,
+     ComTdbVirtTableSequenceInfo * seqInfo,
+     NAArray<HbaseStr>* endKeyArray,
+     char * snapshotName,
+     NABoolean genPackedDesc,
+     Int32 * packedDescLen,
+     NABoolean isUserTable
+ )
+{
+  // If genPackedDesc is set, then use Space class to allocate descriptors and
+  // returned contiguous packed copy of it.
+  // This packed copy will be stored in metadata.
+
+  Space lSpace(ComSpace::GENERATOR_SPACE);
+  Space * space = NULL;
+  if (genPackedDesc)
+    space = &lSpace;
   
+  const char * tableName = (tableInfo ? tableInfo->tableName : inTableName);
+  TrafDesc * table_desc = TrafAllocateDDLdesc(DESC_TABLE_TYPE, space);
+  table_desc->tableDesc()->tablename = new GENHEAP(space) char[strlen(tableName)+1];
+  strcpy(table_desc->tableDesc()->tablename, tableName);
+
+  table_desc->tableDesc()->tableDescFlags = 0;
+  table_desc->tableDesc()->catUID = 0;
+  table_desc->tableDesc()->schemaUID = 0;
   if (tableInfo)
     {
-      convertInt64ToUInt32Array(tableInfo->createTime, table_desc->body.table_desc.createtime);
-      convertInt64ToUInt32Array(tableInfo->redefTime, table_desc->body.table_desc.redeftime);
-      convertInt64ToUInt32Array(tableInfo->objUID, table_desc->body.table_desc.objectUID);
+      table_desc->tableDesc()->createTime = tableInfo->createTime;
+      table_desc->tableDesc()->redefTime = tableInfo->redefTime;
+      table_desc->tableDesc()->objectUID = tableInfo->objUID;
     }
   else
     {
-      *(Int64*)&table_desc->body.table_desc.createtime = 0;
-      *(Int64*)&table_desc->body.table_desc.redeftime = 0;
+      table_desc->tableDesc()->createTime = 0;
+      table_desc->tableDesc()->redefTime = 0;
 
       ComUID comUID;
       comUID.make_UID();
       Int64 objUID = comUID.get_value();
 
-      *(Int64*)&table_desc->body.table_desc.objectUID = objUID;
+      table_desc->tableDesc()->objectUID = objUID;
     }
 
-  table_desc->body.table_desc.issystemtablecode = 1;
-  table_desc->body.table_desc.underlyingFileType = SQLMX;
-  table_desc->body.table_desc.rowcount = 100;
+  if (isUserTable)
+    table_desc->tableDesc()->setSystemTableCode(FALSE);
+  else
+    table_desc->tableDesc()->setSystemTableCode(TRUE);
 
   if (tableInfo)
-    table_desc->body.table_desc.rowFormat =
-      tableInfo->rowFormat ;
+    table_desc->tableDesc()->setRowFormat(tableInfo->rowFormat);
 
   if (CmpCommon::context()->sqlSession()->validateVolatileName(tableName))
-    table_desc->body.table_desc.isVolatile = 1;
+    table_desc->tableDesc()->setVolatileTable(TRUE);
   else
-    table_desc->body.table_desc.isVolatile = 0;
+    table_desc->tableDesc()->setVolatileTable(FALSE);
 
   if (numViews > 0)
-    table_desc->body.table_desc.objectType = COM_VIEW_OBJECT;
+    table_desc->tableDesc()->setObjectType(COM_VIEW_OBJECT);
   else if ((seqInfo) && (! columnInfo))
-    table_desc->body.table_desc.objectType = COM_SEQUENCE_GENERATOR_OBJECT;
+    table_desc->tableDesc()->setObjectType(COM_SEQUENCE_GENERATOR_OBJECT);
   else
-    table_desc->body.table_desc.objectType = COM_BASE_TABLE_OBJECT;
+    table_desc->tableDesc()->setObjectType(COM_BASE_TABLE_OBJECT);
 
-  table_desc->body.table_desc.owner = (tableInfo ? tableInfo->objOwnerID : SUPER_USER);
-  table_desc->body.table_desc.schemaOwner = (tableInfo ? tableInfo->schemaOwnerID : SUPER_USER);
+  table_desc->tableDesc()->owner = (tableInfo ? tableInfo->objOwnerID : SUPER_USER);
+  table_desc->tableDesc()->schemaOwner = (tableInfo ? tableInfo->schemaOwnerID : SUPER_USER);
 
   if (tableInfo && tableInfo->defaultColFam)
     {
-      table_desc->body.table_desc.default_col_fam = 
-        new HEAP char[strlen(tableInfo->defaultColFam)+1];
-      strcpy(table_desc->body.table_desc.default_col_fam, tableInfo->defaultColFam);
+      table_desc->tableDesc()->default_col_fam = 
+        new GENHEAP(space) char[strlen(tableInfo->defaultColFam)+1];
+      strcpy(table_desc->tableDesc()->default_col_fam, tableInfo->defaultColFam);
     }
 
   if (tableInfo && tableInfo->allColFams)
     {
-      table_desc->body.table_desc.all_col_fams = 
-        new HEAP char[strlen(tableInfo->allColFams)+1];
-      strcpy(table_desc->body.table_desc.all_col_fams, tableInfo->allColFams);
+      table_desc->tableDesc()->all_col_fams = 
+        new GENHEAP(space) char[strlen(tableInfo->allColFams)+1];
+      strcpy(table_desc->tableDesc()->all_col_fams, tableInfo->allColFams);
     }
 
-  table_desc->body.table_desc.objectFlags = (tableInfo ? tableInfo->objectFlags : 0);
-  table_desc->body.table_desc.tablesFlags = (tableInfo ? tableInfo->tablesFlags : 0);
+  table_desc->tableDesc()->objectFlags = (tableInfo ? tableInfo->objectFlags : 0);
+  table_desc->tableDesc()->tablesFlags = (tableInfo ? tableInfo->tablesFlags : 0);
 
-  desc_struct * files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  //  files_desc->body.files_desc.audit = -1; // audited table
-  files_desc->body.files_desc.audit = (tableInfo ? tableInfo->isAudited : -1);
+  TrafDesc * files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, space);
+  files_desc->filesDesc()->setAudited(tableInfo ? tableInfo->isAudited : -1);
 
-  files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
-  table_desc->body.table_desc.files_desc = files_desc;
+  table_desc->tableDesc()->files_desc = files_desc;
 
-  desc_struct * cols_descs = NULL;
-  desc_struct * keys_descs = NULL;
-  table_desc->body.table_desc.colcount = numCols;
-  table_desc->body.table_desc.record_length =
-    createDescStructs(table_desc->body.table_desc.tablename,
+  TrafDesc * cols_descs = NULL;
+  TrafDesc * keys_descs = NULL;
+  table_desc->tableDesc()->colcount = numCols;
+  table_desc->tableDesc()->record_length =
+    createDescStructs(table_desc->tableDesc()->tablename,
 		      numCols, columnInfo, numKeys, keyInfo,
-		      cols_descs, keys_descs);
+		      cols_descs, keys_descs, space);
 
-  desc_struct * first_constr_desc = NULL;
+  TrafDesc * first_constr_desc = NULL;
   if (numConstrs > 0)
     {
-      desc_struct * prev_desc = NULL;
+      TrafDesc * prev_desc = NULL;
       for (int i = 0; i < numConstrs; i++)
 	{
-	  desc_struct * curr_constr_desc = readtabledef_allocate_desc(DESC_CONSTRNTS_TYPE);
+	  TrafDesc * curr_constr_desc = TrafAllocateDDLdesc(DESC_CONSTRNTS_TYPE, space);
 
 	  if (! first_constr_desc)
 	    first_constr_desc = curr_constr_desc;
 
-	  curr_constr_desc->body.constrnts_desc.tablename = new HEAP char[strlen(constrInfo[i].baseTableName)+1];
-	  strcpy(curr_constr_desc->body.constrnts_desc.tablename, constrInfo[i].baseTableName);
+	  curr_constr_desc->constrntsDesc()->tablename = new GENHEAP(space) char[strlen(constrInfo[i].baseTableName)+1];
+	  strcpy(curr_constr_desc->constrntsDesc()->tablename, constrInfo[i].baseTableName);
 	  
-	  curr_constr_desc->body.constrnts_desc.constrntname = new HEAP char[strlen(constrInfo[i].constrName)+1];
-	  strcpy(curr_constr_desc->body.constrnts_desc.constrntname, constrInfo[i].constrName);
+	  curr_constr_desc->constrntsDesc()->constrntname = new GENHEAP(space) char[strlen(constrInfo[i].constrName)+1];
+	  strcpy(curr_constr_desc->constrntsDesc()->constrntname, constrInfo[i].constrName);
 	  
-	  curr_constr_desc->body.constrnts_desc.indexname = NULL;
-
-	  curr_constr_desc->body.constrnts_desc.check_constrnts_desc = NULL;
-	  curr_constr_desc->body.constrnts_desc.isEnforced = constrInfo[i].isEnforced;
+	  curr_constr_desc->constrntsDesc()->check_constrnts_desc = NULL;
+	  curr_constr_desc->constrntsDesc()->setEnforced(constrInfo[i].isEnforced);
 
 	  switch (constrInfo[i].constrType)
 	    {
 	    case 0: // unique_constr
-	      curr_constr_desc->body.constrnts_desc.type = UNIQUE_CONSTRAINT;
+	      curr_constr_desc->constrntsDesc()->type = UNIQUE_CONSTRAINT;
 	      break;
 
 	    case 1: // ref_constr
-	      curr_constr_desc->body.constrnts_desc.type = REF_CONSTRAINT;
+	      curr_constr_desc->constrntsDesc()->type = REF_CONSTRAINT;
 	      break;
 
 	    case 2: // check_constr
-	      curr_constr_desc->body.constrnts_desc.type = CHECK_CONSTRAINT;
+	      curr_constr_desc->constrntsDesc()->type = CHECK_CONSTRAINT;
 	      break;
 
 	    case 3: // pkey_constr
-	      curr_constr_desc->body.constrnts_desc.type = PRIMARY_KEY_CONSTRAINT;
+	      curr_constr_desc->constrntsDesc()->type = PRIMARY_KEY_CONSTRAINT;
 	      break;
 
 	    } // switch
 
-	  curr_constr_desc->body.constrnts_desc.colcount = constrInfo[i].colCount;
+	  curr_constr_desc->constrntsDesc()->colcount = constrInfo[i].colCount;
 
-	  curr_constr_desc->body.constrnts_desc.constr_key_cols_desc =
-	    Generator::createConstrKeyColsDescs(constrInfo[i].colCount, constrInfo[i].keyInfoArray);
+	  curr_constr_desc->constrntsDesc()->constr_key_cols_desc =
+	    Generator::createConstrKeyColsDescs(constrInfo[i].colCount, constrInfo[i].keyInfoArray, space);
 
 	  if (constrInfo[i].ringConstrArray)
 	    {
-	      curr_constr_desc->body.constrnts_desc.referencing_constrnts_desc =
+	      curr_constr_desc->constrntsDesc()->referencing_constrnts_desc =
 		Generator::createRefConstrDescStructs(constrInfo[i].numRingConstr,
-						      constrInfo[i].ringConstrArray);
+						      constrInfo[i].ringConstrArray, space);
 	    }
 
 	  if (constrInfo[i].refdConstrArray)
 	    {
-	      curr_constr_desc->body.constrnts_desc.referenced_constrnts_desc =
+	      curr_constr_desc->constrntsDesc()->referenced_constrnts_desc =
 		Generator::createRefConstrDescStructs(constrInfo[i].numRefdConstr,
-						      constrInfo[i].refdConstrArray);
+						      constrInfo[i].refdConstrArray, space);
 	    }
 
 	  if ((constrInfo[i].constrType == 2) && // check constr
 	      (constrInfo[i].checkConstrLen > 0))
 	    {
-	      desc_struct * check_constr_desc = readtabledef_allocate_desc(DESC_CHECK_CONSTRNTS_TYPE);
+	      TrafDesc * check_constr_desc = TrafAllocateDDLdesc(DESC_CHECK_CONSTRNTS_TYPE, space);
 	      
-	      check_constr_desc->body.check_constrnts_desc.seqnumber = 1;
-	      check_constr_desc->body.check_constrnts_desc.constrnt_text = 
-		new HEAP char[constrInfo[i].checkConstrLen + 1];
-	      memcpy(check_constr_desc->body.check_constrnts_desc.constrnt_text,
+	      check_constr_desc->checkConstrntsDesc()->constrnt_text = 
+		new GENHEAP(space) char[constrInfo[i].checkConstrLen + 1];
+	      memcpy(check_constr_desc->checkConstrntsDesc()->constrnt_text,
 		     constrInfo[i].checkConstrText, constrInfo[i].checkConstrLen);
-	      check_constr_desc->body.check_constrnts_desc.constrnt_text
+	      check_constr_desc->checkConstrntsDesc()->constrnt_text
 		[constrInfo[i].checkConstrLen] = 0;
 
-	      curr_constr_desc->body.constrnts_desc.check_constrnts_desc =
+	      curr_constr_desc->constrntsDesc()->check_constrnts_desc =
 		check_constr_desc;
 	    }
 
 	  if (prev_desc)
-	    prev_desc->header.next = curr_constr_desc;
+	    prev_desc->next = curr_constr_desc;
 
 	  prev_desc = curr_constr_desc;
 	} // for
     }
 
-  desc_struct * index_desc = readtabledef_allocate_desc(DESC_INDEXES_TYPE);
-  index_desc->body.indexes_desc.tablename = table_desc->body.table_desc.tablename;
-  index_desc->body.indexes_desc.indexname = table_desc->body.table_desc.tablename;
-  index_desc->body.indexes_desc.keytag = 0; // primary index
-  index_desc->body.indexes_desc.indexUID = 0;
-  index_desc->body.indexes_desc.record_length = table_desc->body.table_desc.record_length;
-  index_desc->body.indexes_desc.colcount = table_desc->body.table_desc.colcount;
-  index_desc->body.indexes_desc.isVerticalPartition = 0;
-  index_desc->body.indexes_desc.blocksize = 32*1024; //100000; //4096; // doesn't matter.
-  index_desc->body.indexes_desc.isVolatile = table_desc->body.table_desc.isVolatile;
-  index_desc->body.indexes_desc.hbaseCreateOptions  = NULL;
-  index_desc->body.indexes_desc.numSaltPartns = 0;
-  index_desc->body.indexes_desc.rowFormat = table_desc->body.table_desc.rowFormat;
+  TrafDesc * index_desc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, space);
+  index_desc->indexesDesc()->tablename = table_desc->tableDesc()->tablename;
+  index_desc->indexesDesc()->indexname = table_desc->tableDesc()->tablename;
+  index_desc->indexesDesc()->keytag = 0; // primary index
+  index_desc->indexesDesc()->indexUID = 0;
+  index_desc->indexesDesc()->record_length = table_desc->tableDesc()->record_length;
+  index_desc->indexesDesc()->colcount = table_desc->tableDesc()->colcount;
+  index_desc->indexesDesc()->blocksize = 32*1024;
+  index_desc->indexesDesc()->setVolatile(table_desc->tableDesc()->isVolatileTable());
+  index_desc->indexesDesc()->hbaseCreateOptions  = NULL;
+  index_desc->indexesDesc()->numSaltPartns = 0;
+  index_desc->indexesDesc()->setRowFormat(table_desc->tableDesc()->rowFormat());
   if (tableInfo)
   {
-    index_desc->body.indexes_desc.indexUID = tableInfo->objUID;
+    index_desc->indexesDesc()->indexUID = tableInfo->objUID;
     
-    index_desc->body.indexes_desc.numSaltPartns = tableInfo->numSaltPartns;
+    index_desc->indexesDesc()->numSaltPartns = tableInfo->numSaltPartns;
     if (tableInfo->hbaseCreateOptions)
       {
-        index_desc->body.indexes_desc.hbaseCreateOptions  = 
-          new HEAP char[strlen(tableInfo->hbaseCreateOptions) + 1];
-        strcpy(index_desc->body.indexes_desc.hbaseCreateOptions, 
+        index_desc->indexesDesc()->hbaseCreateOptions  = 
+          new GENHEAP(space) char[strlen(tableInfo->hbaseCreateOptions) + 1];
+        strcpy(index_desc->indexesDesc()->hbaseCreateOptions, 
                tableInfo->hbaseCreateOptions);
       }
   }
   
   if (numIndexes > 0)
     {
-      desc_struct * prev_desc = index_desc;
+      TrafDesc * prev_desc = index_desc;
       for (int i = 0; i < numIndexes; i++)
 	{
-	  desc_struct * curr_index_desc = readtabledef_allocate_desc(DESC_INDEXES_TYPE);
+	  TrafDesc * curr_index_desc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, space);
 	  
-	  prev_desc->header.next = curr_index_desc;
+	  prev_desc->next = curr_index_desc;
 
-	  curr_index_desc->body.indexes_desc.tablename = new HEAP char[strlen(indexInfo[i].baseTableName)+1];
-	  strcpy(curr_index_desc->body.indexes_desc.tablename, indexInfo[i].baseTableName);
+	  curr_index_desc->indexesDesc()->tablename = new GENHEAP(space) char[strlen(indexInfo[i].baseTableName)+1];
+	  strcpy(curr_index_desc->indexesDesc()->tablename, indexInfo[i].baseTableName);
 
-	  curr_index_desc->body.indexes_desc.indexname = new HEAP char[strlen(indexInfo[i].indexName)+1];
-	  strcpy(curr_index_desc->body.indexes_desc.indexname, indexInfo[i].indexName);
+	  curr_index_desc->indexesDesc()->indexname = new GENHEAP(space) char[strlen(indexInfo[i].indexName)+1];
+	  strcpy(curr_index_desc->indexesDesc()->indexname, indexInfo[i].indexName);
 
-          curr_index_desc->body.indexes_desc.indexUID = indexInfo[i].indexUID;
-	  curr_index_desc->body.indexes_desc.keytag = indexInfo[i].keytag;
-	  curr_index_desc->body.indexes_desc.unique = indexInfo[i].isUnique;
-	  curr_index_desc->body.indexes_desc.isCreatedExplicitly = indexInfo[i].isExplicit;
-          curr_index_desc->body.indexes_desc.record_length = 
+          curr_index_desc->indexesDesc()->indexUID = indexInfo[i].indexUID;
+	  curr_index_desc->indexesDesc()->keytag = indexInfo[i].keytag;
+	  curr_index_desc->indexesDesc()->setUnique(indexInfo[i].isUnique);
+	  curr_index_desc->indexesDesc()->setExplicit(indexInfo[i].isExplicit);
+          curr_index_desc->indexesDesc()->record_length = 
             getRecordLength(&indexInfo[i], columnInfo);
-	  curr_index_desc->body.indexes_desc.colcount = indexInfo[i].keyColCount + indexInfo[i].nonKeyColCount;
-	  curr_index_desc->body.indexes_desc.isVerticalPartition = 0;
-	  curr_index_desc->body.indexes_desc.blocksize = 32*1024; //100000; //4096; // doesn't matter.
+	  curr_index_desc->indexesDesc()->colcount = indexInfo[i].keyColCount + indexInfo[i].nonKeyColCount;
+	  curr_index_desc->indexesDesc()->blocksize = 32*1024;
 
-	  curr_index_desc->body.indexes_desc.keys_desc = 
-	    Generator::createKeyDescs(indexInfo[i].keyColCount, indexInfo[i].keyInfoArray);
+	  curr_index_desc->indexesDesc()->keys_desc = 
+	    Generator::createKeyDescs(indexInfo[i].keyColCount, indexInfo[i].keyInfoArray, space);
 
-	  curr_index_desc->body.indexes_desc.non_keys_desc = 
-	    Generator::createKeyDescs(indexInfo[i].nonKeyColCount, indexInfo[i].nonKeyInfoArray);
+	  curr_index_desc->indexesDesc()->non_keys_desc = 
+	    Generator::createKeyDescs(indexInfo[i].nonKeyColCount, indexInfo[i].nonKeyInfoArray, space);
 
 	  if (CmpCommon::context()->sqlSession()->validateVolatileName(indexInfo[i].indexName))
-	    curr_index_desc->body.indexes_desc.isVolatile = 1;
+	    curr_index_desc->indexesDesc()->setVolatile(TRUE);
 	  else
-	    curr_index_desc->body.indexes_desc.isVolatile = 0;
-          curr_index_desc->body.indexes_desc.hbaseCreateOptions  = NULL;
-          curr_index_desc->body.indexes_desc.numSaltPartns = 
+	    curr_index_desc->indexesDesc()->setVolatile(FALSE);
+          curr_index_desc->indexesDesc()->hbaseCreateOptions  = NULL;
+          curr_index_desc->indexesDesc()->numSaltPartns = 
             indexInfo[i].numSaltPartns;
-          curr_index_desc->body.indexes_desc.rowFormat = 
-            indexInfo[i].rowFormat;
+          curr_index_desc->indexesDesc()->setRowFormat(indexInfo[i].rowFormat);
           if (indexInfo[i].hbaseCreateOptions)
           {
-            curr_index_desc->body.indexes_desc.hbaseCreateOptions  = 
-              new HEAP char[strlen(indexInfo[i].hbaseCreateOptions) + 1];
-            strcpy(curr_index_desc->body.indexes_desc.hbaseCreateOptions, 
+            curr_index_desc->indexesDesc()->hbaseCreateOptions  = 
+              new GENHEAP(space) char[strlen(indexInfo[i].hbaseCreateOptions) + 1];
+            strcpy(curr_index_desc->indexesDesc()->hbaseCreateOptions, 
                indexInfo[i].hbaseCreateOptions);
           }
 
@@ -2042,144 +2131,177 @@ desc_struct * Generator::createVirtualTableDesc(
 	}
     }
 
-  desc_struct * view_desc = NULL;
+  TrafDesc * view_desc = NULL;
   if (numViews > 0)
     {
-      view_desc = readtabledef_allocate_desc(DESC_VIEW_TYPE);
+      view_desc = TrafAllocateDDLdesc(DESC_VIEW_TYPE, space);
       
-      view_desc->body.view_desc.viewname = new HEAP char[strlen(viewInfo[0].viewName)+1];
-      strcpy(view_desc->body.view_desc.viewname, viewInfo[0].viewName);
+      view_desc->viewDesc()->viewname = new GENHEAP(space) char[strlen(viewInfo[0].viewName)+1];
+      strcpy(view_desc->viewDesc()->viewname, viewInfo[0].viewName);
 
-      view_desc->body.view_desc.viewfilename = view_desc->body.view_desc.viewname;
-      view_desc->body.view_desc.viewtext = new HEAP char[strlen(viewInfo[0].viewText) + 1];
-      strcpy(view_desc->body.view_desc.viewtext, viewInfo[0].viewText);
+      view_desc->viewDesc()->viewfilename = view_desc->viewDesc()->viewname;
+      view_desc->viewDesc()->viewtext = new GENHEAP(space) char[strlen(viewInfo[0].viewText) + 1];
+      strcpy(view_desc->viewDesc()->viewtext, viewInfo[0].viewText);
 
-      view_desc->body.view_desc.viewtextcharset = (CharInfo::CharSet)SQLCHARSETCODE_UTF8;
+      view_desc->viewDesc()->viewtextcharset = (CharInfo::CharSet)SQLCHARSETCODE_UTF8;
 
       if (viewInfo[0].viewCheckText)
 	{
-	  view_desc->body.view_desc.viewchecktext = new HEAP char[strlen(viewInfo[0].viewCheckText)+1];
-	  strcpy(view_desc->body.view_desc.viewchecktext, viewInfo[0].viewCheckText);
+	  view_desc->viewDesc()->viewchecktext = new GENHEAP(space) char[strlen(viewInfo[0].viewCheckText)+1];
+	  strcpy(view_desc->viewDesc()->viewchecktext, viewInfo[0].viewCheckText);
 	}
       else
-	view_desc->body.view_desc.viewchecktext = NULL;
+	view_desc->viewDesc()->viewchecktext = NULL;
 
-      view_desc->body.view_desc.updatable = viewInfo[0].isUpdatable;
-      view_desc->body.view_desc.insertable = viewInfo[0].isInsertable;
+      view_desc->viewDesc()->setUpdatable(viewInfo[0].isUpdatable);
+      view_desc->viewDesc()->setInsertable(viewInfo[0].isInsertable);
     }
 
-  desc_struct * seq_desc = NULL;
+  TrafDesc * seq_desc = NULL;
   if (seqInfo)
     {
-      seq_desc = readtabledef_allocate_desc(DESC_SEQUENCE_GENERATOR_TYPE);
+      seq_desc = TrafAllocateDDLdesc(DESC_SEQUENCE_GENERATOR_TYPE, space);
       
-      seq_desc->body.sequence_generator_desc.sgType = (ComSequenceGeneratorType)seqInfo->seqType;
+      seq_desc->sequenceGeneratorDesc()->setSgType((ComSequenceGeneratorType)seqInfo->seqType);
 
-      seq_desc->body.sequence_generator_desc.fsDataType = (ComFSDataType)seqInfo->datatype;
-      seq_desc->body.sequence_generator_desc.startValue = seqInfo->startValue;
-      seq_desc->body.sequence_generator_desc.increment = seqInfo->increment;
+      seq_desc->sequenceGeneratorDesc()->fsDataType = (ComFSDataType)seqInfo->datatype;
+      seq_desc->sequenceGeneratorDesc()->startValue = seqInfo->startValue;
+      seq_desc->sequenceGeneratorDesc()->increment = seqInfo->increment;
 
-      seq_desc->body.sequence_generator_desc.maxValue = seqInfo->maxValue;
-      seq_desc->body.sequence_generator_desc.minValue = seqInfo->minValue;
-      seq_desc->body.sequence_generator_desc.cycleOption = 
+      seq_desc->sequenceGeneratorDesc()->maxValue = seqInfo->maxValue;
+      seq_desc->sequenceGeneratorDesc()->minValue = seqInfo->minValue;
+      seq_desc->sequenceGeneratorDesc()->cycleOption = 
 	(seqInfo->cycleOption ? TRUE : FALSE);
-      seq_desc->body.sequence_generator_desc.cache = seqInfo->cache;      
-      seq_desc->body.sequence_generator_desc.objectUID = seqInfo->seqUID;
+      seq_desc->sequenceGeneratorDesc()->cache = seqInfo->cache;      
+      seq_desc->sequenceGeneratorDesc()->objectUID = seqInfo->seqUID;
       
-      seq_desc->body.sequence_generator_desc.nextValue = seqInfo->nextValue;
-      seq_desc->body.sequence_generator_desc.redefTime = seqInfo->redefTime;
+      seq_desc->sequenceGeneratorDesc()->nextValue = seqInfo->nextValue;
+      seq_desc->sequenceGeneratorDesc()->redefTime = seqInfo->redefTime;
     }
 
   // cannot simply point to same files desc as the table one,
   // because then ReadTableDef::deleteTree frees same memory twice (error)
-  desc_struct * i_files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  i_files_desc->body.files_desc.audit = -1; // audited table
-  i_files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
-  index_desc->body.indexes_desc.files_desc = i_files_desc;
-
-  index_desc->body.indexes_desc.keys_desc  = keys_descs;
-  table_desc->body.table_desc.columns_desc = cols_descs;
-  table_desc->body.table_desc.indexes_desc = index_desc;
-  table_desc->body.table_desc.views_desc = view_desc;
-  table_desc->body.table_desc.constrnts_desc = first_constr_desc;
-  table_desc->body.table_desc.constr_count = numConstrs; 
-  table_desc->body.table_desc.sequence_generator_desc = seq_desc;
+  TrafDesc * i_files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, space);
+  i_files_desc->filesDesc()->setAudited(TRUE); // audited table
+  index_desc->indexesDesc()->files_desc = i_files_desc;
+
+  index_desc->indexesDesc()->keys_desc  = keys_descs;
+  table_desc->tableDesc()->columns_desc = cols_descs;
+  table_desc->tableDesc()->indexes_desc = index_desc;
+  table_desc->tableDesc()->views_desc = view_desc;
+  table_desc->tableDesc()->constrnts_desc = first_constr_desc;
+  table_desc->tableDesc()->constr_count = numConstrs; 
+  table_desc->tableDesc()->sequence_generator_desc = seq_desc;
+
+  if (endKeyArray)
+    {
+      // create a list of region descriptors
+      table_desc->tableDesc()->hbase_regionkey_desc = 
+        assembleDescs(endKeyArray, STMTHEAP, space);
+    }
+
+  if (snapshotName != NULL)
+    {
+      table_desc->tableDesc()->snapshotName = 
+        new GENHEAP(space) char[strlen(snapshotName) + 1];
+      strcpy(table_desc->tableDesc()->snapshotName, snapshotName);
+    }
+
+  if (genPackedDesc && space)
+    {
+      // pack generated desc and move it to a contiguous buffer before return.
+      DescStructPtr((TrafDesc*)table_desc).pack(space);
+
+      Lng32 allocSize = space->getAllocatedSpaceSize();
+      char * contigTableDesc = new HEAP char[allocSize];
+      if (! space->makeContiguous(contigTableDesc, allocSize))
+        {
+          table_desc = NULL;
+          return table_desc;
+        }
+
+      table_desc = (TrafDesc*)contigTableDesc;
+
+      if (packedDescLen)
+        *packedDescLen = allocSize;
+    }
 
   return table_desc;
 }
 
-
-desc_struct *Generator::createVirtualLibraryDesc(
-   const char *libraryName,
-   ComTdbVirtTableLibraryInfo *libraryInfo)
-   
+TrafDesc *Generator::createVirtualLibraryDesc(
+     const char *libraryName,
+     ComTdbVirtTableLibraryInfo *libraryInfo,
+     Space * space)
 {
 
-   desc_struct *library_desc = readtabledef_allocate_desc(DESC_LIBRARY_TYPE);
-   library_desc->body.library_desc.libraryName = new HEAP char[strlen(libraryName) + 1];
-   strcpy(library_desc->body.library_desc.libraryName, libraryName);
-   library_desc->body.library_desc.libraryFilename = new HEAP char[strlen(libraryInfo->library_filename) + 1];
-   strcpy(library_desc->body.library_desc.libraryFilename, libraryInfo->library_filename);
-   library_desc->body.library_desc.libraryVersion = libraryInfo->library_version;
-   library_desc->body.library_desc.libraryUID = libraryInfo->library_UID;
-   library_desc->body.library_desc.libraryOwnerID = libraryInfo->object_owner_id;
-   library_desc->body.library_desc.librarySchemaOwnerID = libraryInfo->schema_owner_id;
+  TrafDesc *library_desc = TrafAllocateDDLdesc(DESC_LIBRARY_TYPE, space);
+   library_desc->libraryDesc()->libraryName = new GENHEAP(space) char[strlen(libraryName) + 1];
+   strcpy(library_desc->libraryDesc()->libraryName, libraryName);
+   library_desc->libraryDesc()->libraryFilename = new GENHEAP(space) char[strlen(libraryInfo->library_filename) + 1];
+   strcpy(library_desc->libraryDesc()->libraryFilename, libraryInfo->library_filename);
+   library_desc->libraryDesc()->libraryVersion = libraryInfo->library_version;
+   library_desc->libraryDesc()->libraryUID = libraryInfo->library_UID;
+   library_desc->libraryDesc()->libraryOwnerID = libraryInfo->object_owner_id;
+   library_desc->libraryDesc()->librarySchemaOwnerID = libraryInfo->schema_owner_id;
    
    return library_desc;
    
 }
 
 
-desc_struct *Generator::createVirtualRoutineDesc(
-                                  const char *routineName,
-                                  ComTdbVirtTableRoutineInfo *routineInfo,
-                                  Int32 numParams,
-                                  ComTdbVirtTableColumnInfo *paramsArray)
-{
-   desc_struct *routine_desc = readtabledef_allocate_desc(DESC_ROUTINE_TYPE);
-   routine_desc->body.routine_desc.objectUID = routineInfo->object_uid;
-   routine_desc->body.routine_desc.routineName = new HEAP char[strlen(routineName)+1];
-   strcpy(routine_desc->body.routine_desc.routineName, routineName);
-   routine_desc->body.routine_desc.externalName = new HEAP char[strlen(routineInfo->external_name)+1];
-   strcpy(routine_desc->body.routine_desc.externalName, routineInfo->external_name);
-   routine_desc->body.routine_desc.librarySqlName = NULL; 
-   routine_desc->body.routine_desc.libraryFileName = new HEAP char[strlen(routineInfo->library_filename)+1];
-   strcpy(routine_desc->body.routine_desc.libraryFileName, routineInfo->library_filename);
-   routine_desc->body.routine_desc.signature = new HEAP char[strlen(routineInfo->signature)+1];
-   strcpy(routine_desc->body.routine_desc.signature, routineInfo->signature);
-   routine_desc->body.routine_desc.librarySqlName = new HEAP char[strlen(routineInfo->library_sqlname)+1];
-   strcpy(routine_desc->body.routine_desc.librarySqlName, routineInfo->library_sqlname);
-   routine_desc->body.routine_desc.language  = 
+TrafDesc *Generator::createVirtualRoutineDesc(
+     const char *routineName,
+     ComTdbVirtTableRoutineInfo *routineInfo,
+     Int32 numParams,
+     ComTdbVirtTableColumnInfo *paramsArray,
+     Space * space)
+{
+  TrafDesc *routine_desc = TrafAllocateDDLdesc(DESC_ROUTINE_TYPE, space);
+   routine_desc->routineDesc()->objectUID = routineInfo->object_uid;
+   routine_desc->routineDesc()->routineName = new GENHEAP(space) char[strlen(routineName)+1];
+   strcpy(routine_desc->routineDesc()->routineName, routineName);
+   routine_desc->routineDesc()->externalName = new GENHEAP(space) char[strlen(routineInfo->external_name)+1];
+   strcpy(routine_desc->routineDesc()->externalName, routineInfo->external_name);
+   routine_desc->routineDesc()->librarySqlName = NULL; 
+   routine_desc->routineDesc()->libraryFileName = new GENHEAP(space) char[strlen(routineInfo->library_filename)+1];
+   strcpy(routine_desc->routineDesc()->libraryFileName, routineInfo->library_filename);
+   routine_desc->routineDesc()->signature = new GENHEAP(space) char[strlen(routineInfo->signature)+1];
+   strcpy(routine_desc->routineDesc()->signature, routineInfo->signature);
+   routine_desc->routineDesc()->librarySqlName = new GENHEAP(space) char[strlen(routineInfo->library_sqlname)+1];
+   strcpy(routine_desc->routineDesc()->librarySqlName, routineInfo->library_sqlname);
+   routine_desc->routineDesc()->language  = 
            CmGetComRoutineLanguageAsRoutineLanguage(routineInfo->language_type);
-   routine_desc->body.routine_desc.UDRType  = 
+   routine_desc->routineDesc()->UDRType  = 
            CmGetComRoutineTypeAsRoutineType(routineInfo->UDR_type);
-   routine_desc->body.routine_desc.sqlAccess  = 
+   routine_desc->routineDesc()->sqlAccess  = 
            CmGetComRoutineSQLAccessAsRoutineSQLAccess(routineInfo->sql_access);
-   routine_desc->body.routine_desc.transactionAttributes  = 
+   routine_desc->routineDesc()->transactionAttributes  = 
            CmGetComRoutineTransactionAttributesAsRoutineTransactionAttributes
                   (routineInfo->transaction_attributes);
-   routine_desc->body.routine_desc.maxResults = routineInfo->max_results;
-   routine_desc->body.routine_desc.paramStyle  = 
+   routine_desc->routineDesc()->maxResults = routineInfo->max_results;
+   routine_desc->routineDesc()->paramStyle  = 
            CmGetComRoutineParamStyleAsRoutineParamStyle(routineInfo->param_style);
-   routine_desc->body.routine_desc.isDeterministic = routineInfo->deterministic;
-   routine_desc->body.routine_desc.isCallOnNull = routineInfo->call_on_null;
-   routine_desc->body.routine_desc.isIsolate = routineInfo->isolate;
-   routine_desc->body.routine_desc.externalSecurity  = 
+   routine_desc->routineDesc()->isDeterministic = routineInfo->deterministic;
+   routine_desc->routineDesc()->isCallOnNull = routineInfo->call_on_null;
+   routine_desc->routineDesc()->isIsolate = routineInfo->isolate;
+   routine_desc->routineDesc()->externalSecurity  = 
            CmGetRoutineExternalSecurityAsComRoutineExternalSecurity
                   (routineInfo->external_security);
-   routine_desc->body.routine_desc.executionMode  = 
+   routine_desc->routineDesc()->executionMode  = 
            CmGetRoutineExecutionModeAsComRoutineExecutionMode
                  (routineInfo->execution_mode);
-   routine_desc->body.routine_desc.stateAreaSize = routineInfo->state_area_size;
-   routine_desc->body.routine_desc.parallelism  = 
+   routine_desc->routineDesc()->stateAreaSize = routineInfo->state_area_size;
+   routine_desc->routineDesc()->parallelism  = 
            CmGetRoutineParallelismAsComRoutineParallelism(routineInfo->parallelism);
    UInt32 reclen; 
-   routine_desc->body.routine_desc.paramsCount = numParams;
-   routine_desc->body.routine_desc.params = 
+   routine_desc->routineDesc()->paramsCount = numParams;
+   routine_desc->routineDesc()->params = 
              Generator::createColDescs(routineName, 
-              paramsArray, (Int16) numParams, reclen);
-   routine_desc->body.routine_desc.owner = routineInfo->object_owner_id;
-   routine_desc->body.routine_desc.schemaOwner = routineInfo->schema_owner_id; 
+                                       paramsArray, (Int16) numParams, reclen, 
+                                       space);
+   routine_desc->routineDesc()->owner = routineInfo->object_owner_id;
+   routine_desc->routineDesc()->schemaOwner = routineInfo->schema_owner_id; 
    return routine_desc;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/Generator.h
----------------------------------------------------------------------
diff --git a/core/sql/generator/Generator.h b/core/sql/generator/Generator.h
index 58b9571..c3093a3 100644
--- a/core/sql/generator/Generator.h
+++ b/core/sql/generator/Generator.h
@@ -1370,45 +1370,61 @@ public:
   static Lng32 getRecordLength(ComTdbVirtTableIndexInfo * indexInfo,
                                ComTdbVirtTableColumnInfo * columnInfoArray);
 
-  static desc_struct *createColDescs(
-	const char * tableName,
-	ComTdbVirtTableColumnInfo * columnInfo,
-	Int16 numCols,
-	UInt32 &offset);
-
-  static desc_struct * createKeyDescs(Int32 numKeys,
-				      const ComTdbVirtTableKeyInfo * keyInfo);
+  static TrafDesc *createColDescs(
+       const char * tableName,
+       ComTdbVirtTableColumnInfo * columnInfo,
+       Int16 numCols,
+       UInt32 &offset,
+       Space * space);
+  
+  static TrafDesc * createKeyDescs(Int32 numKeys,
+				      const ComTdbVirtTableKeyInfo * keyInfo,
+                                      Space * space);
 
-  static desc_struct * createConstrKeyColsDescs(Int32 numKeys,
-				      ComTdbVirtTableKeyInfo * keyInfo);
+  static TrafDesc * createConstrKeyColsDescs(Int32 numKeys,
+                                                ComTdbVirtTableKeyInfo * keyInfo,
+                                                Space * space);
 
-  static desc_struct * createRefConstrDescStructs(
+  static TrafDesc * createRefConstrDescStructs(
 						  Int32 numConstrs,
-						  ComTdbVirtTableRefConstraints * refConstrs);
+						  ComTdbVirtTableRefConstraints * refConstrs,
+                                                  Space * space);
   
-  static desc_struct *createVirtualTableDesc(
-					     const char * tableName, 
-					     Int32 numCols,
-					     ComTdbVirtTableColumnInfo * columnInfo,
-					     Int32 numKeys,
-					     ComTdbVirtTableKeyInfo * keyInfo,
-					     Int32 numConstrs = 0,
-					     ComTdbVirtTableConstraintInfo * constrInfo = NULL,
-					     Int32 numIndexes = 0,
-					     ComTdbVirtTableIndexInfo * indexInfo = NULL,
-					     Int32 numViews = 0,
-					     ComTdbVirtTableViewInfo * viewInfo = NULL,
-					     ComTdbVirtTableTableInfo * tableInfo = NULL,
-					     ComTdbVirtTableSequenceInfo * seqInfo = NULL);
-
-  static desc_struct *createVirtualRoutineDesc(
+  static TrafDesc *createVirtualTableDesc(
+       const char * tableName, 
+       Int32 numCols,
+       ComTdbVirtTableColumnInfo * columnInfo,
+       Int32 numKeys,
+       ComTdbVirtTableKeyInfo * keyInfo,
+       Int32 numConstrs = 0,
+       ComTdbVirtTableConstraintInfo * constrInfo = NULL,
+       Int32 numIndexes = 0,
+       ComTdbVirtTableIndexInfo * indexInfo = NULL,
+       Int32 numViews = 0,
+       ComTdbVirtTableViewInfo * viewInfo = NULL,
+       ComTdbVirtTableTableInfo * tableInfo = NULL,
+       ComTdbVirtTableSequenceInfo * seqInfo = NULL,
+       NAArray<HbaseStr>* endKeyArray = NULL,
+       char * snapshotName = NULL,
+       NABoolean genPackedDesc = FALSE,
+       Int32 * packedDescLen = NULL,
+       NABoolean isUserTable = FALSE);
+
+  static TrafDesc* assembleDescs(
+     NAArray<HbaseStr >* keyArray, 
+     NAMemory* heap,
+     Space * space);
+
+  static TrafDesc *createVirtualRoutineDesc(
                                   const char *routineName,
                                   ComTdbVirtTableRoutineInfo *routineInfo,
                                   Int32 numParams,
-                                  ComTdbVirtTableColumnInfo *paramsArray);
-  static desc_struct *createVirtualLibraryDesc(
+                                  ComTdbVirtTableColumnInfo *paramsArray,
+                                  Space * space);
+  static TrafDesc *createVirtualLibraryDesc(
                                   const char *libraryName,
-                                  ComTdbVirtTableLibraryInfo *libraryInfo);
+                                  ComTdbVirtTableLibraryInfo *libraryInfo,
+                                  Space * space);
   static short genAndEvalExpr(
 			      CmpContext * cmpContext,
 			      char * exprStr, Lng32 numChildren, 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/nskgmake/sqlcat/Makefile
----------------------------------------------------------------------
diff --git a/core/sql/nskgmake/sqlcat/Makefile b/core/sql/nskgmake/sqlcat/Makefile
index 1255927..74e4e58 100755
--- a/core/sql/nskgmake/sqlcat/Makefile
+++ b/core/sql/nskgmake/sqlcat/Makefile
@@ -23,5 +23,6 @@
 
 CPPSRC := readRealArk.cpp \
 	  ReadTableDef.cpp \
+	  TrafDDLdesc.cpp \
 	  vers_libsqlcat.cpp
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/BindItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp
index 0561f8d..789587d 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -78,6 +78,7 @@
 #include "CmpSeabaseDDL.h"
 #include "QCache.h"
 
+#include "TrafDDLdesc.h"
 #include "exp_datetime.h"
 
 #include <stack>
@@ -9277,8 +9278,8 @@ ItemExpr *UDFunction::bindNode(BindWA *bindWA)
 
 
   // Find UDF in cache or metadata
-  desc_struct *udfMetadata = NULL;
-  desc_struct *oldUdfMetadata = NULL; // not used, just to get code to compile
+  TrafDesc *udfMetadata = NULL;
+  TrafDesc *oldUdfMetadata = NULL; // not used, just to get code to compile
   CmpSeabaseDDL cmpSBD(heap);
 
   try 
@@ -9426,7 +9427,7 @@ ItemExpr *UDFunction::bindNode(BindWA *bindWA)
     ComRoutineType udrType;
     if (CmpCommon::getDefault(COMP_BOOL_191) == DF_OFF)
       {
-         udrType = udfMetadata->body.routine_desc.UDRType ;
+        udrType = udfMetadata->routineDesc()->UDRType ;
       }
 
     if (udrType != COM_SCALAR_UDF_TYPE &&

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/BindRI.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindRI.cpp b/core/sql/optimizer/BindRI.cpp
index 1b3d138..7d9354c 100644
--- a/core/sql/optimizer/BindRI.cpp
+++ b/core/sql/optimizer/BindRI.cpp
@@ -86,7 +86,7 @@
 */
 #endif // documentation
 
-
+#include "TrafDDLdesc.h"
 #include "BindWA.h"
 #include "ItemConstr.h"
 #include "NATable.h"
@@ -185,21 +185,21 @@ AbstractRIConstraint *AbstractRIConstraint::findConstraint(
 } // AbstractRIConstraint::findConstraint
 
 void AbstractRIConstraint::setKeyColumns(
-				      const struct constrnts_desc_struct *desc,
-				      CollHeap *heap)
+     const struct TrafConstrntsDesc *desc,
+     CollHeap *heap)
 {
-  struct constrnt_key_cols_desc_struct *colDesc;
+  TrafConstrntKeyColsDesc *colDesc;
   NAColumn *column;
   CollIndex i = 0;
-  struct desc_struct *keyColDesc = desc->constr_key_cols_desc;
+  TrafDesc *keyColDesc = desc->constr_key_cols_desc;
 
   while (keyColDesc)
   {
-    colDesc = &keyColDesc->body.constrnt_key_cols_desc;
+    colDesc = keyColDesc->constrntKeyColsDesc();
     column = new (heap) NAColumn(colDesc->colname, colDesc->position, NULL, heap);
     keyColumns_.insertAt(i, column);
     i++;
-    keyColDesc = keyColDesc->header.next; 
+    keyColDesc = keyColDesc->next; 
   }
 
   CMPASSERT(desc->colcount == (signed)i);
@@ -273,19 +273,19 @@ Int32 UniqueConstraint::getRefConstraints(BindWA *bindWA,
 
 
 void UniqueConstraint::setRefConstraintsReferencingMe (
-						       const struct constrnts_desc_struct* desc, 
-						       CollHeap* heap,
-						       BindWA* bindWA)
+     const struct TrafConstrntsDesc* desc, 
+     CollHeap* heap,
+     BindWA* bindWA)
 {
-  struct desc_struct *referencingConstraintDesc = desc->referencing_constrnts_desc;
+  struct TrafDesc *referencingConstraintDesc = desc->referencing_constrnts_desc;
   ComplementaryRIConstraint *constraintsReferencingMe;
 
   while (referencingConstraintDesc)
     {
       char *refConstrntName = 
-        referencingConstraintDesc->body.ref_constrnts_desc.constrntname;
+        referencingConstraintDesc->refConstrntsDesc()->constrntname;
       char *refTableName = 
-        referencingConstraintDesc->body.ref_constrnts_desc.tablename;
+        referencingConstraintDesc->refConstrntsDesc()->tablename;
       
       QualifiedName refConstrnt(refConstrntName, 3, heap, bindWA);
       QualifiedName refTable(refTableName, 3, heap, bindWA);
@@ -295,7 +295,7 @@ void UniqueConstraint::setRefConstraintsReferencingMe (
                                                                       heap);
       refConstraintsReferencingMe_.insert(constraintsReferencingMe);
       
-      referencingConstraintDesc = referencingConstraintDesc->header.next;
+      referencingConstraintDesc = referencingConstraintDesc->next;
     }
 } // UniqueConstraint::setRefConstraintsReferencingMe
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/BindRelExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindRelExpr.cpp b/core/sql/optimizer/BindRelExpr.cpp
index 94cd2f1..9390671 100644
--- a/core/sql/optimizer/BindRelExpr.cpp
+++ b/core/sql/optimizer/BindRelExpr.cpp
@@ -72,7 +72,7 @@
 #include "StmtDDLCreateView.h"
 #include "ElemDDLColRefArray.h"
 #include "ElemDDLSaltOptions.h"
-#include "desc.h"
+#include "TrafDDLdesc.h"
 #include "UdrErrors.h"
 #include "SequenceGeneratorAttributes.h"
 
@@ -1294,9 +1294,9 @@ void castComputedColumnsToAnsiTypes(BindWA *bindWA,
   }   // loop over cols in RETDesc
 }   // castComputedColumnsToAnsiTypes()
 
-desc_struct *generateSpecialDesc(const CorrName& corrName)
+TrafDesc *generateSpecialDesc(const CorrName& corrName)
 {
-  desc_struct * desc = NULL;
+  TrafDesc * desc = NULL;
 
   if (corrName.getSpecialType() == ExtendedQualName::VIRTUAL_TABLE)
     {
@@ -1347,7 +1347,7 @@ NARoutine *BindWA::getNARoutine ( const QualifiedName &name )
   NARoutine * naRoutine = getSchemaDB()->getNARoutineDB()->get(this, &key);
   if (!naRoutine)
   {
-     desc_struct *udfMetadata = NULL;
+     TrafDesc *udfMetadata = NULL;
      CmpSeabaseDDL cmpSBD(STMTHEAP);
      udfMetadata =  cmpSBD.getSeabaseRoutineDesc(
 				       name.getCatalogName(),
@@ -1389,7 +1389,7 @@ NARoutine *BindWA::getNARoutine ( const QualifiedName &name )
 
 NATable *BindWA::getNATable(CorrName& corrName,
                             NABoolean catmanCollectTableUsages, // default TRUE
-                            desc_struct *inTableDescStruct)     // default NULL
+                            TrafDesc *inTableDescStruct)     // default NULL
 {
   BindWA *bindWA = this;   // for coding convenience
 
@@ -13232,7 +13232,7 @@ RelExpr *BuiltinTableValuedFunction::bindNode(BindWA *bindWA)
 	
 	if (NOT naTable) 
 	  {
-	    desc_struct *tableDesc = createVirtualTableDesc();
+	    TrafDesc *tableDesc = createVirtualTableDesc();
 	    if (tableDesc)
 	      naTable = bindWA->getNATable(corrName, FALSE/*catmanUsages*/, tableDesc);
 	    
@@ -13676,55 +13676,54 @@ RelExpr *Describe::bindNode(BindWA *bindWA)
   //
   #define MAX_DESCRIBE_LEN 3000 // e.g., SQL/MP Views.ViewText column
 
-  // readtabledef_allocate_desc requires that HEAP (STMTHEAP) be used for new's!
+  // TrafAllocateDDLdesc requires that HEAP (STMTHEAP) be used for new's!
 
-  desc_struct * table_desc = readtabledef_allocate_desc(DESC_TABLE_TYPE);
-  table_desc->body.table_desc.tablename = new HEAP char[strlen("DESCRIBE__")+1];
-  strcpy(table_desc->body.table_desc.tablename, "DESCRIBE__");
+  TrafDesc * table_desc = TrafAllocateDDLdesc(DESC_TABLE_TYPE, NULL);
+  table_desc->tableDesc()->tablename = new HEAP char[strlen("DESCRIBE__")+1];
+  strcpy(table_desc->tableDesc()->tablename, "DESCRIBE__");
 
   // see nearly identical code below for indexes file desc
-  desc_struct * files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  table_desc->body.table_desc.files_desc = files_desc;
-  files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
+  TrafDesc * files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL);
+  table_desc->tableDesc()->files_desc = files_desc;
 
   Lng32 colnumber = 0, offset = 0;
-  desc_struct * column_desc = readtabledef_make_column_desc(
-                                     table_desc->body.table_desc.tablename,
-                                     "DESCRIBE__COL",
-                                     colnumber,      // INOUT
-                                     REC_BYTE_V_ASCII,
-                                     MAX_DESCRIBE_LEN,
-                                     offset);      // INOUT
-  column_desc->body.columns_desc.character_set    = CharInfo::UTF8;
-  column_desc->body.columns_desc.encoding_charset = CharInfo::UTF8;
-
-  table_desc->body.table_desc.colcount = colnumber;
-  table_desc->body.table_desc.record_length = offset;
-
-  desc_struct * index_desc = readtabledef_allocate_desc(DESC_INDEXES_TYPE);
-  index_desc->body.indexes_desc.tablename = table_desc->body.table_desc.tablename;
-  index_desc->body.indexes_desc.indexname = table_desc->body.table_desc.tablename;
-  index_desc->body.indexes_desc.ext_indexname = table_desc->body.table_desc.tablename;
-  index_desc->body.indexes_desc.keytag = 0; // primary index
-  index_desc->body.indexes_desc.record_length = table_desc->body.table_desc.record_length;
-  index_desc->body.indexes_desc.colcount = table_desc->body.table_desc.colcount;
-  index_desc->body.indexes_desc.blocksize = 4096; // anything > 0
+  TrafDesc * column_desc = TrafMakeColumnDesc(
+       table_desc->tableDesc()->tablename,
+       "DESCRIBE__COL",
+       colnumber,      // INOUT
+       REC_BYTE_V_ASCII,
+       MAX_DESCRIBE_LEN,
+       offset,      // INOUT
+       FALSE/*not null*/,
+       SQLCHARSETCODE_UNKNOWN,
+       NULL);
+  column_desc->columnsDesc()->character_set    = CharInfo::UTF8;
+  column_desc->columnsDesc()->encoding_charset = CharInfo::UTF8;
+
+  table_desc->tableDesc()->colcount = colnumber;
+  table_desc->tableDesc()->record_length = offset;
+
+  TrafDesc * index_desc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, NULL);
+  index_desc->indexesDesc()->tablename = table_desc->tableDesc()->tablename;
+  index_desc->indexesDesc()->indexname = table_desc->tableDesc()->tablename;
+  index_desc->indexesDesc()->keytag = 0; // primary index
+  index_desc->indexesDesc()->record_length = table_desc->tableDesc()->record_length;
+  index_desc->indexesDesc()->colcount = table_desc->tableDesc()->colcount;
+  index_desc->indexesDesc()->blocksize = 4096; // anything > 0
 
   // Cannot simply point to same files desc as the table one,
   // because then ReadTableDef::deleteTree frees same memory twice (error)
-  desc_struct * i_files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE);
-  index_desc->body.indexes_desc.files_desc = i_files_desc;
-  i_files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE;
+  TrafDesc * i_files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL);
+  index_desc->indexesDesc()->files_desc = i_files_desc;
 
-  desc_struct * key_desc = readtabledef_allocate_desc(DESC_KEYS_TYPE);
-  key_desc->body.keys_desc.indexname = index_desc->body.indexes_desc.indexname;
-  key_desc->body.keys_desc.keyseqnumber = 1;
-  key_desc->body.keys_desc.tablecolnumber = 0;
-  key_desc->body.keys_desc.ordering= 0;
+  TrafDesc * key_desc = TrafAllocateDDLdesc(DESC_KEYS_TYPE, NULL);
+  key_desc->keysDesc()->keyseqnumber = 1;
+  key_desc->keysDesc()->tablecolnumber = 0;
+  key_desc->keysDesc()->setDescending(FALSE);
 
-  index_desc->body.indexes_desc.keys_desc = key_desc;
-  table_desc->body.table_desc.columns_desc = column_desc;
-  table_desc->body.table_desc.indexes_desc = index_desc;
+  index_desc->indexesDesc()->keys_desc = key_desc;
+  table_desc->tableDesc()->columns_desc = column_desc;
+  table_desc->tableDesc()->indexes_desc = index_desc;
 
   //
   // Get the NATable for this object.
@@ -15469,7 +15468,7 @@ RelExpr *CallSP::bindNode(BindWA *bindWA)
 
 
   CmpSeabaseDDL cmpSBD((NAHeap*)bindWA->wHeap());
-  desc_struct *catRoutine = 
+  TrafDesc *catRoutine = 
 	    cmpSBD.getSeabaseRoutineDesc(
 				       name.getCatalogName(),
 				       name.getSchemaName(),
@@ -16221,10 +16220,10 @@ void RelRoutine::gatherParamValueIds (const ItemExpr *tree, ValueIdList &paramsL
 
 void ProxyFunc::createProxyFuncTableDesc(BindWA *bindWA, CorrName &corrName)
 {
-  // Map column definitions into a desc_struct
-  desc_struct *tableDesc = createVirtualTableDesc();
+  // Map column definitions into a TrafDesc
+  TrafDesc *tableDesc = createVirtualTableDesc();
 
-  // Map the desc_struct into an NATable. This will also add an
+  // Map the TrafDesc into an NATable. This will also add an
   // NATable entry into the bindWA's NATableDB.
   NATable *naTable =
     bindWA->getNATable(corrName, FALSE /*catmanUsages*/, tableDesc);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/BindWA.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindWA.h b/core/sql/optimizer/BindWA.h
index c88b631..ae6aa20 100644
--- a/core/sql/optimizer/BindWA.h
+++ b/core/sql/optimizer/BindWA.h
@@ -80,7 +80,7 @@ class SchemaDB;
 class StmtDDLCreateView;
 class StmtLevelAccessOptions;
 class StmtDDLCreateTrigger;
-struct desc_struct;
+struct TrafDesc;
 class NARoutine;
 class HbaseColUsageInfo;
 class ExeUtilHbaseCoProcAggr;
@@ -1339,7 +1339,7 @@ public:
   // --------------------------------------------------------------------
   NATable *getNATable(CorrName &corrName,
 		      NABoolean catmanCollectTableUsages = TRUE,
-		      desc_struct *inTableDesc = NULL);
+		      TrafDesc *inTableDesc = NULL);
 
   TableDesc *createTableDesc(const NATable *naTable,
                              CorrName &corrName,
@@ -1354,7 +1354,7 @@ public:
   // (i.e. the same table can be referred to many times, via many corr names).
   // --------------------------------------------------------------------
 //  NARoutine *getNARoutine(QualifiedName &routineName,
-//		          desc_struct *inRoutineDesc = NULL);
+//		          TrafDesc *inRoutineDesc = NULL);
 
 
   // --------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/EncodedKeyValue.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/EncodedKeyValue.cpp b/core/sql/optimizer/EncodedKeyValue.cpp
index 84ab2d8..3698031 100644
--- a/core/sql/optimizer/EncodedKeyValue.cpp
+++ b/core/sql/optimizer/EncodedKeyValue.cpp
@@ -25,7 +25,7 @@
 *
 * File:         EncodedKeyValue.cpp
 * Description:  Functions to compute binary encoded keys that can be written 
-                to disk for a given set of desc_structs.
+                to disk for a given set of TrafDescs.
 * Origin:       Copy of existing code from GenRFork.cpp
 * Created:      10/30/2013
 * Language:     C++
@@ -42,6 +42,7 @@
 #include "exp_clause_derived.h"
 #include "CmpStatement.h"
 #include "NATable.h"
+#include "TrafDDLdesc.h"
 
 // defined in SynthType.cpp
 extern
@@ -55,15 +56,15 @@ void emitDyadicTypeSQLnameMsg(Lng32 sqlCode,
 
 
 
-NAString * getMinMaxValue(desc_struct * column,
-				 desc_struct * key,
+NAString * getMinMaxValue(TrafDesc * column,
+				 TrafDesc * key,
 				 NABoolean highKey,
                                  CollHeap * h)
 {
   NAString * minMaxValue = NULL;
   
   NAType * type; // deleted at the end of this method
-  if (NAColumn::createNAType(&column->body.columns_desc, NULL, type, NULL))
+  if (NAColumn::createNAType(column->columnsDesc(), NULL, type, NULL))
     return NULL;
   
   Lng32 buflen = type->getTotalSize();
@@ -73,7 +74,7 @@ NAString * getMinMaxValue(desc_struct * column,
   if (highKey == FALSE)
     {
       // low key needed
-      if (key->body.keys_desc.ordering == 0) // ascending
+      if (NOT key->keysDesc()->isDescending()) // ascending
 	type->minRepresentableValue(buf, &buflen, 
 				    &minMaxValue,
 				    h) ;
@@ -95,7 +96,7 @@ NAString * getMinMaxValue(desc_struct * column,
   else
     {
       // high key needed
-      if (key->body.keys_desc.ordering == 0) // ascending
+      if (NOT key->keysDesc()->isDescending()) // ascending
 	{
 	  if (type->supportsSQLnull())
 	    {
@@ -119,8 +120,8 @@ NAString * getMinMaxValue(desc_struct * column,
   return minMaxValue;
 }
 
-NAString ** createInArrayForLowOrHighKeys(desc_struct   * column_descs,
-					  desc_struct   * key_descs,
+NAString ** createInArrayForLowOrHighKeys(TrafDesc   * column_descs,
+					  TrafDesc   * key_descs,
 					  Lng32 numKeys,
 					  NABoolean highKey,
                                           NABoolean isIndex,
@@ -128,30 +129,30 @@ NAString ** createInArrayForLowOrHighKeys(desc_struct   * column_descs,
 {
   NAString ** inValuesArray = new (h) NAString * [numKeys];
   
-  desc_struct * column = column_descs;
-  desc_struct * key    = key_descs;
+  TrafDesc * column = column_descs;
+  TrafDesc * key    = key_descs;
   Int32 i = 0;
   while (key)
     {
       if (!isIndex) {
         column = column_descs;
-        for (Int32 j = 0; j < key->body.keys_desc.tablecolnumber; j++)
-          column = column->header.next;
+        for (Int32 j = 0; j < key->keysDesc()->tablecolnumber; j++)
+          column = column->next;
       }
 
       inValuesArray[i] = getMinMaxValue(column, key, highKey, h) ;
       
       i++;
-      key = key->header.next;
+      key = key->next;
       if (isIndex)
-        column = column->header.next;
+        column = column->next;
     }
   
   return inValuesArray;
 }
 
-ItemExpr * buildEncodeTree(desc_struct * column,
-                           desc_struct * key,
+ItemExpr * buildEncodeTree(TrafDesc * column,
+                           TrafDesc * key,
                            NAString * dataBuffer, //IN:contains original value
                            Generator * generator,
                            ComDiagsArea * diagsArea)
@@ -176,17 +177,17 @@ ItemExpr * buildEncodeTree(desc_struct * column,
   NABoolean nullValue = FALSE;
 
   NABoolean caseinsensitiveEncode = FALSE;
-  if (column->body.columns_desc.caseinsensitive)
+  if (column->columnsDesc()->isCaseInsensitive())
     caseinsensitiveEncode = TRUE;
 
-  if (column->body.columns_desc.null_flag &&
+  if (column->columnsDesc()->isNullable() &&
       dataBuffer->length() >= 4 &&
       str_cmp(*dataBuffer, "NULL", 4) == 0)
     {
       nullValue = TRUE;
 
       ns = "CAST ( @A1 AS ";
-      ns += column->body.columns_desc.pictureText;
+      ns += column->columnsDesc()->pictureText;
       ns += ");";
   
       // create a NULL constant
@@ -203,7 +204,7 @@ ItemExpr * buildEncodeTree(desc_struct * column,
       ns = "CAST ( ";
       ns += *dataBuffer;
       ns += " AS ";
-      ns += column->body.columns_desc.pictureText;
+      ns += column->columnsDesc()->pictureText;
       ns += ");";
   
       itemExpr = expGen->createExprTree(ns,
@@ -234,7 +235,7 @@ ItemExpr * buildEncodeTree(desc_struct * column,
 	  emitDyadicTypeSQLnameMsg(-4039, 
 				   itemExpr->getValueId().getType(),
 				   srcNode->getValueId().getType(),
-				   column->body.columns_desc.colname,
+				   column->columnsDesc()->colname,
 				   NULL,
 				   diagsArea);
 	}
@@ -242,7 +243,7 @@ ItemExpr * buildEncodeTree(desc_struct * column,
       return NULL;
     }
 
-  if (column->body.columns_desc.null_flag)
+  if (column->columnsDesc()->isNullable())
     ((NAType *)&(itemExpr->getValueId().getType()))->setNullable(TRUE);
   else
     ((NAType *)&(itemExpr->getValueId().getType()))->setNullable(FALSE);
@@ -250,39 +251,39 @@ ItemExpr * buildEncodeTree(desc_struct * column,
   // Explode varchars by moving them to a fixed field
   // whose length is equal to the max length of varchar.
   ////collation??
-  DataType datatype = column->body.columns_desc.datatype;
+  Int16 datatype = column->columnsDesc()->datatype;
   if (DFS2REC::isSQLVarChar(datatype))
     {
       char lenBuf[10];
       NAString vc((NASize_T)100);	// preallocate a big-enough buf
 
-      size_t len = column->body.columns_desc.length;
+      size_t len = column->columnsDesc()->length;
       if (datatype == REC_BYTE_V_DOUBLE) len /= SQL_DBCHAR_SIZE;
 
       vc = "CAST (@A1 as CHAR(";
       vc += str_itoa(len, lenBuf);
-      if ( column->body.columns_desc.character_set == CharInfo::UTF8 ||
-           ( column->body.columns_desc.character_set == CharInfo::SJIS &&
-             column->body.columns_desc.encoding_charset == CharInfo::SJIS ) )
+      if ( column->columnsDesc()->character_set == CharInfo::UTF8 ||
+           ( column->columnsDesc()->character_set == CharInfo::SJIS &&
+             column->columnsDesc()->encoding_charset == CharInfo::SJIS ) )
         {
           vc += " BYTE";
           if (len > 1)
             vc += "S";
         }
       vc += ") CHARACTER SET ";
-      vc += CharInfo::getCharSetName(column->body.columns_desc.character_set);
+      vc += CharInfo::getCharSetName(column->columnsDesc()->characterSet());
       vc += ");";
 
       itemExpr = expGen->createExprTree(vc, CharInfo::UTF8, vc.length(), 1, itemExpr);
       itemExpr->synthTypeAndValueId();
 
       ((NAType *)&(itemExpr->getValueId().getType()))->
-        setNullable(column->body.columns_desc.null_flag);
+        setNullable(column->columnsDesc()->isNullable());
   }
 
   // add the encode node on top of it.
   short desc_flag = TRUE;
-  if (key->body.keys_desc.ordering == 0) // ascending
+  if (NOT key->keysDesc()->isDescending()) // ascending
     desc_flag = FALSE;
   
   itemExpr = new(expGen->wHeap()) CompEncode(itemExpr, desc_flag);
@@ -301,8 +302,8 @@ ItemExpr * buildEncodeTree(desc_struct * column,
 // value in the encodedKeyBuffer. 
 // RETURNS: -1, if error. 0, if all Ok.
 ///////////////////////////////////////////////////////////////////
-short encodeKeyValues(desc_struct   * column_descs,
-		      desc_struct   * key_descs,
+short encodeKeyValues(TrafDesc   * column_descs,
+		      TrafDesc   * key_descs,
 		      NAString      * inValuesArray[],          // INPUT
                       NABoolean isIndex,
                       NABoolean isMaxKey,                       // INPUT
@@ -333,8 +334,8 @@ short encodeKeyValues(desc_struct   * column_descs,
 
   // Let's start with a list of size 4 rather than resizing continuously
   ValueIdList encodedValueIdList(4);
-  desc_struct * column = column_descs;
-  desc_struct * key    = key_descs;
+  TrafDesc * column = column_descs;
+  TrafDesc * key    = key_descs;
   Int32 i = 0;
 
   if (inValuesArray == NULL)
@@ -346,8 +347,8 @@ short encodeKeyValues(desc_struct   * column_descs,
       // the following for loop is not needed.
       if (!isIndex) {
       column = column_descs;
-      for (Int32 j = 0; j < key->body.keys_desc.tablecolnumber; j++)
-	column = column->header.next;
+      for (Int32 j = 0; j < key->keysDesc()->tablecolnumber; j++)
+	column = column->next;
       }
 
       if (inValuesArray[i] == NULL)
@@ -361,9 +362,9 @@ short encodeKeyValues(desc_struct   * column_descs,
       encodedValueIdList.insert(itemExpr->getValueId());
       
       i++;
-      key = key->header.next;
+      key = key->next;
       if (isIndex)
-        column = column->header.next;
+        column = column->next;
     }
   
   // allocate a work cri desc to encode keys. It has

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/EncodedKeyValue.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/EncodedKeyValue.h b/core/sql/optimizer/EncodedKeyValue.h
index 90ffaca..4452593 100644
--- a/core/sql/optimizer/EncodedKeyValue.h
+++ b/core/sql/optimizer/EncodedKeyValue.h
@@ -27,8 +27,8 @@
 *
 * File:         EncodedKeyValue.h
 * Description:  Functions to compute binary encoded keys that can be written 
-                to disk for a given set of desc_structs.
-* Origin:       Copy of existing code from GenRFork.cpp
+                to disk for a given set of TrafDescs.
+* Origin:       
 * Created:      10/30/2013
 * Language:     C++
 *
@@ -36,32 +36,31 @@
 */
 
 #include "Platform.h"
-#include "desc.h"
 #include "NAString.h"
 #include "Generator.h"
 
 
-NAString * getMinMaxValue(desc_struct * column,
-                          desc_struct * key,
+NAString * getMinMaxValue(TrafDesc * column,
+                          TrafDesc * key,
                           NABoolean highKey,
                           CollHeap * h);
 
-NAString ** createInArrayForLowOrHighKeys(desc_struct   * column_descs,
-					  desc_struct   * key_descs,
+NAString ** createInArrayForLowOrHighKeys(TrafDesc   * column_descs,
+					  TrafDesc   * key_descs,
 					  Lng32 numKeys,
 					  NABoolean highKey,
                                           NABoolean isIndex,
                                           CollHeap * h);
 
 
-ItemExpr * buildEncodeTree(desc_struct * column,
-                           desc_struct * key,
+ItemExpr * buildEncodeTree(TrafDesc * column,
+                           TrafDesc * key,
                            NAString * dataBuffer, //IN:contains original value
                            Generator * generator,
                            ComDiagsArea * diagsArea);
 
-short encodeKeyValues(desc_struct   * column_descs,
-		      desc_struct   * key_descs,
+short encodeKeyValues(TrafDesc   * column_descs,
+		      TrafDesc   * key_descs,
 		      NAString      * inValuesArray[],          // INPUT
                       NABoolean isIndex,
                       NABoolean isMaxKey,			// INPUT

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/ItemConstr.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ItemConstr.h b/core/sql/optimizer/ItemConstr.h
index 147a0c7..6c94c64 100644
--- a/core/sql/optimizer/ItemConstr.h
+++ b/core/sql/optimizer/ItemConstr.h
@@ -41,7 +41,6 @@
 
 #include "ItemExpr.h"
 #include "ObjectNames.h"
-#include "desc.h"
 
 // forward references
 class BindWA;
@@ -451,7 +450,7 @@ public:
 
   const QualifiedName &getDefiningTableName() const { return *defTableName_; }
 
-  void setKeyColumns(const struct constrnts_desc_struct*, CollHeap*);
+  void setKeyColumns(const struct TrafConstrntsDesc*, CollHeap*);
 
   const KeyColumns &keyColumns() const { return keyColumns_; }
 
@@ -555,7 +554,7 @@ public:
   virtual Int32 getRefConstraints(BindWA *bindWA,
 				const ColSignature &updateCols,
 				RefConstraintList &resultList);
-  void setRefConstraintsReferencingMe(const struct constrnts_desc_struct*,
+  void setRefConstraintsReferencingMe(const struct TrafConstrntsDesc*,
                                     CollHeap*, BindWA*);
   NABoolean hasRefConstraintsReferencingMe()
   { return NOT refConstraintsReferencingMe_.isEmpty() ; };


[10/10] incubator-trafodion git commit: Merge [TRAFODION-2137] PR-634 Metadata access performance improvements

Posted by an...@apache.org.
Merge [TRAFODION-2137] PR-634 Metadata access performance  improvements


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/71c2d35a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/71c2d35a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/71c2d35a

Branch: refs/heads/master
Commit: 71c2d35af65be2fc51954d5a6385fe7e88b0390c
Parents: 98b00b6 15f7877
Author: Anoop Sharma <an...@esgyn.com>
Authored: Tue Aug 2 23:24:06 2016 +0000
Committer: Anoop Sharma <an...@esgyn.com>
Committed: Tue Aug 2 23:24:06 2016 +0000

----------------------------------------------------------------------
 core/sql/arkcmp/CmpStoredProc.cpp               |   96 +-
 core/sql/arkcmp/CmpStoredProc.h                 |   21 +-
 core/sql/bin/SqlciErrors.txt                    |    3 +-
 core/sql/common/CmpCommon.h                     |    1 +
 core/sql/common/ComSmallDefs.h                  |    3 +-
 core/sql/common/OperTypeEnum.h                  |    2 +
 core/sql/generator/GenExplain.cpp               |   99 +-
 core/sql/generator/GenPreCode.cpp               |    4 +-
 core/sql/generator/GenRelExeUtil.cpp            |   43 +-
 core/sql/generator/GenRelMisc.cpp               |  129 +-
 core/sql/generator/GenRelScan.cpp               |   41 +-
 core/sql/generator/GenUdr.cpp                   |    4 +-
 core/sql/generator/Generator.cpp                |  782 ++++---
 core/sql/generator/Generator.h                  |   78 +-
 core/sql/nskgmake/sqlcat/Makefile               |    1 +
 core/sql/optimizer/BindItemExpr.cpp             |    7 +-
 core/sql/optimizer/BindRI.cpp                   |   28 +-
 core/sql/optimizer/BindRelExpr.cpp              |   97 +-
 core/sql/optimizer/BindWA.h                     |    6 +-
 core/sql/optimizer/EncodedKeyValue.cpp          |   77 +-
 core/sql/optimizer/EncodedKeyValue.h            |   21 +-
 core/sql/optimizer/ItemConstr.h                 |    5 +-
 core/sql/optimizer/NAColumn.cpp                 |  192 +-
 core/sql/optimizer/NAColumn.h                   |    4 +-
 core/sql/optimizer/NAFileSet.cpp                |    2 +-
 core/sql/optimizer/NAFileSet.h                  |   10 +-
 core/sql/optimizer/NARoutine.cpp                |   66 +-
 core/sql/optimizer/NARoutine.h                  |    2 +-
 core/sql/optimizer/NATable.cpp                  | 2067 +++++++++---------
 core/sql/optimizer/NATable.h                    |   14 +-
 core/sql/optimizer/RelExeUtil.cpp               |   24 +-
 core/sql/optimizer/RelExeUtil.h                 |   20 +-
 core/sql/optimizer/RelMisc.h                    |    2 +-
 core/sql/optimizer/RelRoutine.cpp               |   15 +-
 core/sql/optimizer/RelRoutine.h                 |   28 +-
 core/sql/optimizer/RelScan.h                    |   10 +-
 core/sql/optimizer/RelStoredProc.cpp            |    2 +-
 core/sql/optimizer/ValueDesc.cpp                |    7 +-
 core/sql/parser/AllStmtDDL.h                    |    1 +
 core/sql/parser/AllStmtDDLAlterTable.h          |    1 +
 core/sql/parser/BindStmtDDL.cpp                 |   31 +
 core/sql/parser/ElemDDLNode.cpp                 |   12 +
 core/sql/parser/ElemDDLNode.h                   |    4 +
 core/sql/parser/StmtDDLAlter.cpp                |   91 +
 core/sql/parser/StmtDDLAlterSchema.h            |  177 ++
 core/sql/parser/StmtDDLAlterTableStoredDesc.h   |  102 +
 core/sql/parser/sqlparser.y                     |   80 +-
 core/sql/regress/executor/EXPECTED013.SB        |    2 +
 core/sql/regress/executor/TEST122               |    6 +
 core/sql/regress/fullstack2/EXPECTED062         |    6 +
 core/sql/regress/fullstack2/EXPECTED062.RELEASE |    6 +
 core/sql/regress/hive/EXPECTED018               |  187 +-
 core/sql/regress/hive/TEST018                   |    3 +
 core/sql/regress/seabase/EXPECTED031            |  270 ++-
 core/sql/regress/seabase/TEST031                |   48 +-
 core/sql/regress/tools/sbdefs                   |    2 +
 core/sql/sqlcat/ReadTableDef.cpp                |  404 ----
 core/sql/sqlcat/ReadTableDef.h                  |   17 -
 core/sql/sqlcat/TrafDDLdesc.cpp                 |  617 ++++++
 core/sql/sqlcat/TrafDDLdesc.h                   | 1120 ++++++++++
 core/sql/sqlcat/desc.h                          |  473 +---
 core/sql/sqlcat/readRealArk.cpp                 |  146 +-
 core/sql/sqlcat/readRealArk.h                   |    1 -
 core/sql/sqlcomp/CmpDDLCatErrorCodes.h          |    1 +
 core/sql/sqlcomp/CmpDescribe.cpp                |   23 +-
 core/sql/sqlcomp/CmpSeabaseDDL.h                |   85 +-
 core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp        |  323 ++-
 core/sql/sqlcomp/CmpSeabaseDDLincludes.h        |    2 +-
 core/sql/sqlcomp/CmpSeabaseDDLindex.cpp         |   40 +-
 core/sql/sqlcomp/CmpSeabaseDDLmd.h              |    7 +-
 core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp       |    1 -
 core/sql/sqlcomp/CmpSeabaseDDLschema.cpp        |  246 +++
 core/sql/sqlcomp/CmpSeabaseDDLtable.cpp         |  731 +++++--
 core/sql/sqlcomp/CmpSeabaseDDLview.cpp          |   12 +-
 core/sql/sqlcomp/DefaultConstants.h             |    6 +
 core/sql/sqlcomp/nadefaults.cpp                 |   10 +-
 76 files changed, 5931 insertions(+), 3376 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/71c2d35a/core/sql/optimizer/BindRelExpr.cpp
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/71c2d35a/core/sql/parser/sqlparser.y
----------------------------------------------------------------------


[03/10] incubator-trafodion git commit: metadata access performance improvement for accessing traf objects

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcat/ReadTableDef.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcat/ReadTableDef.cpp b/core/sql/sqlcat/ReadTableDef.cpp
index c6b3ecb..31bafb7 100644
--- a/core/sql/sqlcat/ReadTableDef.cpp
+++ b/core/sql/sqlcat/ReadTableDef.cpp
@@ -56,28 +56,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-  
-#include "NLSConversion.h"
-
-#ifdef NA_LITTLE_ENDIAN
-  #include "ComSysUtils.h"
-  #define  ENCODE(xxx)		xxx->encode()
-  #define  REVERSEBYTES(xxx)	xxx = (Lng32) reversebytes((ULng32) xxx)
-#else
-  #define  ENCODE(xxx)
-  #define  REVERSEBYTES(xxx)
-#endif
-
-#include "fs/feerrors.h"	// FEOK, FENOTOPEN, FEPATHDOWN, etc.
-
-extern "C" {
-int_16 TMF_SETTXHANDLE_(short *);
-int_16 TMF_GETTXHANDLE_(short *);
-int_16 GETTRANSID(short *);
-int_16 TMF_GETCURRENTTCBREF_(short *);
-int_16 BEGINTRANSACTION(int *tag);
-}
-
 #include "CmpCommon.h"		// HEAP stuff
 #include "CmpContext.h"		// CmpCommon::context()->readTableDef_
 #include "DefaultValidator.h"	// for ValidateCollationList
@@ -96,48 +74,6 @@ int_16 BEGINTRANSACTION(int *tag);
 extern Lng32 SQLCODE;
 
 //------------------------------------------------------------------------
-// Static variables declarations
-//------------------------------------------------------------------------
-
-
-#define NODETYPE_MX	header.nodetype	  // desc_structPtr->NODETYPE_MX
-
-// MX SqlCat simulator xxx_desc_struct
-#define STRUCTMX(xxx)	xxx ## _desc_struct
-
-// MX SqlCat simulator DESC_XXX_TYPE
-#define TYPEMX(XXX)	DESC_ ## XXX ## _TYPE
-
-// xxx_desc_struct * xxx = (xxx_desc_struct *) &top->body
-#define CASTMX(xxx)	STRUCTMX(xxx) * xxx = (STRUCTMX(xxx) *)&top->body
-
-// Guardian LargeInt is little-endian:  least significant bits are on the right.
-// So mpvar[0] is to left of i.e. more significant than mpvar[1].
-// NNNN Truncation error (64 to 32 bits overflow) in ReadTableDef $String0.
-// (If this #define is ever used, then create error message for NNNN.)
-#define FMT_LARGEINT(arr)						\
-			arr[0] << "," << arr[1] << endl
-
-#define COUT(var,fld)							\
-			cout << "  " << setw(20) 			\
-			     << #fld << "  " << var->fld << endl
-
-// For compilers that don't cast enums to int 	// NT_PORT mhr 03/14/97
-#define COUT_ENUM(var,fld)						\
-			cout << "  " << setw(20) 			\
-			     << #fld << "  " << (Int32)var->fld << endl
-
-#define COUT_STRING(var,fld)						\
-			if (var->fld) COUT(var,fld);			\
-			else						\
-			  cout << "  " << setw(20)			\
-			       << #fld << " is null" << endl
-
-#define COUT_LARGEINT(var,fld)						\
-			cout << "  " << setw(20) 			\
-			     << #fld << "  " << FMT_LARGEINT(var->fld)
-
-//------------------------------------------------------------------------
 // Constructor
 //------------------------------------------------------------------------
 
@@ -158,343 +94,3 @@ ReadTableDef::~ReadTableDef()
 }
 
 
-
-//------------------------------------------------------------------------
-// displayTreeMX()
-//------------------------------------------------------------------------
-void ReadTableDef::displayTree(const desc_struct * top) const
-{
-  displayTreeMX(top, "");
-}
-
-void ReadTableDef::displayTreeMX(const desc_struct * top,
-                                  const char * caller) const
-{
-  if (top == NULL) return;
-
-  char title[50];
-  snprintf(title, sizeof(title),
-          ", type %d, address %p, parent %s\n",
-          top->NODETYPE_MX, (void *)top, caller);
-  #undef  TITLE
-  #define TITLE(XXX)    cout << "### " << XXX << title;         \
-                        strcpy(title, XXX)
-
-  cout.setf(ios::right);
-
-  switch (top->NODETYPE_MX)
-    {
-    case TYPEMX(CHECK_CONSTRNTS):
-      {
-        TITLE("CHECK_CONSTRNTS");
-        CASTMX(check_constrnts);
-        COUT(check_constrnts, seqnumber);
-        COUT_STRING(check_constrnts, constrnt_text);
-      }
-      break;
-
-    case TYPEMX(COLUMNS):
-      {
-        TITLE("COLUMNS");
-        CASTMX(columns);
-        COUT(columns, tablename);
-        COUT(columns, colname);
-        COUT(columns, colnumber);
-        COUT(columns, datatype);
-        COUT(columns, length);
-        COUT(columns, scale);
-        COUT(columns, precision);
-        COUT_ENUM(columns, datetimestart);
-        COUT_ENUM(columns, datetimeend);
-        COUT(columns, datetimefractprec);
-        COUT(columns, intervalleadingprec);
-        COUT(columns, offset);
-        COUT(columns, null_flag);
-        COUT(columns, upshift);
-        COUT(columns, colclass);
-        COUT(columns, uec);
-        COUT_STRING(columns, highval);
-        COUT_STRING(columns, lowval);
-
-        Int32 defaultValueInLocaleLen = 
-#pragma nowarn(1506)   // warning elimination 
-              NAWstrlen((NAWchar*)(columns->defaultvalue));
-#pragma warn(1506)  // warning elimination 
-        char* defaultValueInLocale = new HEAP char[defaultValueInLocaleLen+1];
-
-        CharInfo::CharSet mapCharSet = SqlParser_ISO_MAPPING;
-
-        Int32 x = UnicodeStringToLocale(mapCharSet,
-                 (NAWchar*)(columns->defaultvalue), defaultValueInLocaleLen,
-                 defaultValueInLocale, defaultValueInLocaleLen+1
-                             );
-        if (columns->defaultvalue)  {
-          cout << "  " << setw(20) << "defaultvalue"
-               << "  " << defaultValueInLocale << endl;
-        } else {
-          cout << "  " << setw(20) << "defaultvalue" << " is null" << endl;
-        }
-        NADELETEBASIC(defaultValueInLocale, HEAP);
-      }
-      break;
-
-    case TYPEMX(CONSTRNTS):
-      {
-        TITLE("CONSTRNTS");
-        CASTMX(constrnts);
-        COUT(constrnts, constrntname);
-        COUT(constrnts, tablename);
-        COUT_ENUM(constrnts, type);
-        COUT(constrnts, colcount);
-        COUT_STRING(constrnts, indexname);
-        displayTreeMX(constrnts->check_constrnts_desc, title);
-        displayTreeMX(constrnts->constr_key_cols_desc, title);
-        displayTreeMX(constrnts->referenced_constrnts_desc, title);
-        displayTreeMX(constrnts->referencing_constrnts_desc, title);
-      }
-      break;
-
-    case TYPEMX(CONSTRNT_KEY_COLS):
-      {
-        TITLE("CONSTRNT_KEY_COLS");
-        CASTMX(constrnt_key_cols);
-        COUT(constrnt_key_cols, colname);
-        COUT(constrnt_key_cols, position);
-      }
-      break;
-
-    case TYPEMX(FILES):
-      {
-        TITLE("FILES");
-        CASTMX(files);
-        COUT_ENUM(files, fileorganization);
-        COUT(files, audit);
-        COUT(files, auditcompress);
-        COUT(files, compressed);
-        displayTreeMX(files->partns_desc, title);
-      }
-      break;
-
-    case TYPEMX(HISTOGRAM):
-      {
-        TITLE("HISTOGRAM");
-        CASTMX(histogram);
-        COUT(histogram, tablename);
-        COUT(histogram, tablecolnumber);
-        COUT(histogram, histid);
-        COUT(histogram, colposition);
-        COUT(histogram, rowcount);
-        COUT(histogram, uec);
-        COUT_STRING(histogram, highval);
-        COUT_STRING(histogram, lowval);
-        displayTreeMX(histogram->hist_interval_desc, title);
-      }
-      break;
-
-    case TYPEMX(HIST_INTERVAL):
-      {
-        TITLE("HIST_INTERVAL");
-        CASTMX(hist_interval);
-        COUT(hist_interval, histid);
-        COUT(hist_interval, intnum);
-        COUT(hist_interval, intboundary);
-        COUT(hist_interval, rowcount);
-        COUT(hist_interval, uec);
-      }
-      break;
-
-    case TYPEMX(INDEXES):
-      {
-        TITLE("INDEXES");
-        CASTMX(indexes);
-        COUT(indexes, tablename);
-        COUT(indexes, indexname);
-        COUT(indexes, keytag);
-        COUT(indexes, record_length);
-        COUT(indexes, colcount);
-        COUT(indexes, unique);
-        displayTreeMX(indexes->files_desc, title);
-        displayTreeMX(indexes->keys_desc, title);
-    displayTreeMX(indexes->non_keys_desc, title);
-      }
-      break;
-
-    case TYPEMX(KEYS):
-      {
-        TITLE("KEYS");
-        CASTMX(keys);
-        COUT(keys, indexname);
-        COUT(keys, keyseqnumber);
-        COUT(keys, tablecolnumber);
-        COUT(keys, ordering);
-      }
-      break;
-
-    case TYPEMX(PARTNS):
-      {
-        TITLE("PARTNS");
-        CASTMX(partns);
-        COUT(partns, tablename);
-        COUT(partns, primarypartition);
-        COUT(partns, partitionname);
-        COUT_STRING(partns, firstkey);
-      }
-      break;
-
-    case TYPEMX(REF_CONSTRNTS):
-      {
-        TITLE("REF_CONSTRNTS");
-        CASTMX(ref_constrnts);
-        COUT(ref_constrnts, constrntname);
-        COUT(ref_constrnts, tablename);
-      }
-      break;
-
-    case TYPEMX(TABLE):
-      {
-        TITLE("TABLE");
-        CASTMX(table);
-        COUT_LARGEINT(table, createtime);
-        COUT_LARGEINT(table, redeftime);
-        COUT(table, tablename);
-        COUT(table, record_length);
-        COUT(table, colcount);
-        COUT(table, constr_count);
-        COUT(table, rowcount);
-        displayTreeMX(table->files_desc, title);
-        displayTreeMX(table->columns_desc, title);
-        displayTreeMX(table->views_desc, title);
-        displayTreeMX(table->indexes_desc, title);
-        displayTreeMX(table->constrnts_desc, title);
-        if (table->constrnts_tables_desc != top)
-          displayTreeMX(table->constrnts_tables_desc, title);
-        displayTreeMX(table->referenced_tables_desc, title);
-        displayTreeMX(table->referencing_tables_desc, title);
-        displayTreeMX(table->histograms_desc, title);
-      }
-      break;
-
-    case TYPEMX(VIEW):
-      {
-        TITLE("VIEW");
-        CASTMX(view);
-        COUT(view, viewname);
-        COUT_STRING(view, viewtext);
-        COUT_STRING(view, viewchecktext);
-        COUT(view, updatable);
-        COUT(view, insertable);
-      }
-      break;
-
-    default:
-      {
-        TITLE("??? UNKNOWN ???");
-      }
-      break;
-    }  // switch
-
-  displayTreeMX (top->header.next, title);
-
-} // displayTreeMX
-
-
-//------------------------------------------------------------------------
-// deleteTreeMX()
-//------------------------------------------------------------------------
-void ReadTableDef::deleteTree(desc_struct * top) const
-{
-  deleteTreeMX(top);
-}
-
-void ReadTableDef::deleteTreeMX(desc_struct * top) const
-{
-  if (top == NULL) return;
-
-  switch (top->NODETYPE_MX)
-    {
-    case TYPEMX(CHECK_CONSTRNTS):
-      break;
-
-    case TYPEMX(COLUMNS):
-      break;
-
-    case TYPEMX(CONSTRNTS):
-      {
-	CASTMX(constrnts);
-	deleteTreeMX(constrnts->check_constrnts_desc);
-	deleteTreeMX(constrnts->constr_key_cols_desc);
-	deleteTreeMX(constrnts->referenced_constrnts_desc);
-	deleteTreeMX(constrnts->referencing_constrnts_desc);
-      }
-      break;
-
-    case TYPEMX(CONSTRNT_KEY_COLS):
-      break;
-
-    case TYPEMX(FILES):
-      {
-	CASTMX(files);
-	deleteTreeMX(files->partns_desc);
-      }
-      break;
-
-    case TYPEMX(HISTOGRAM):
-      {
-	CASTMX(histogram);
-	deleteTreeMX(histogram->hist_interval_desc);
-      }
-      break;
-
-    case TYPEMX(HIST_INTERVAL):
-      break;
-
-    case TYPEMX(INDEXES):
-      {
-	CASTMX(indexes);
-	deleteTreeMX(indexes->keys_desc);
-    deleteTreeMX(indexes->non_keys_desc);
-	deleteTreeMX(indexes->files_desc);
-      }
-      break;
-
-    case TYPEMX(KEYS):
-      break;
-
-    case TYPEMX(PARTNS):
-      break;
-
-    case TYPEMX(REF_CONSTRNTS):
-      break;
-
-    case TYPEMX(TABLE):
-      {
-	CASTMX(table);
-	deleteTreeMX(table->columns_desc);
-	deleteTreeMX(table->views_desc);
-	deleteTreeMX(table->files_desc);
-	deleteTreeMX(table->indexes_desc);
-	deleteTreeMX(table->constrnts_desc);
-	if (table->constrnts_tables_desc != top)
-	  deleteTreeMX(table->constrnts_tables_desc);
-	deleteTreeMX(table->referenced_tables_desc);
-	deleteTreeMX(table->referencing_tables_desc);
-	deleteTreeMX(table->histograms_desc);
-      }
-      break;
-
-    case TYPEMX(VIEW):
-      break;
-
-    default:
-      {
-	cerr << "ReadTableDef: memory leak at node type " << top->NODETYPE_MX
-	     << endl;
-      }
-      break;
-    }  // switch
-
-  deleteTreeMX (top->header.next);
-  NADELETEBASIC(top, HEAP);
-
-} // deleteTreeWMX
-

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcat/ReadTableDef.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcat/ReadTableDef.h b/core/sql/sqlcat/ReadTableDef.h
index 21ca81d..e813745 100644
--- a/core/sql/sqlcat/ReadTableDef.h
+++ b/core/sql/sqlcat/ReadTableDef.h
@@ -46,9 +46,6 @@
 #include "ObjectNames.h"
 #include "ComSmallDefs.h"        // added for ComDiskFileFormat enum
 
-// SQL/MX SqlCat definitions
-#include "desc.h"
-
 #include "sqlca.h"
 
 // Forward references
@@ -87,23 +84,9 @@ public:
   // destructor
   ~ReadTableDef();
 
-  void deleteTree(desc_struct * top) const;
-  void displayTree(const desc_struct * top) const;	// debugging only 
-
 private:
   void initSQLCA(NABoolean force = FALSE);
 
-  void deleteTreeMX(desc_struct * top) const;
-  void displayTreeMX(const desc_struct * top,
-                      const char * caller) const;       // debugging only
-
-  // Versioning Light: Methods for Lazy Update
-#if 0
-  void dealWithCLIError (void);
-  short lazyUpdateNeedSeparateTx (void);
-  void lazyUpdate (const ComObjectName & objectName);
-#endif //if 0
-
   // data members
   TransactionState      transactionState_;
   NABoolean		transInProgress_;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcat/TrafDDLdesc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcat/TrafDDLdesc.cpp b/core/sql/sqlcat/TrafDDLdesc.cpp
new file mode 100644
index 0000000..112bfac
--- /dev/null
+++ b/core/sql/sqlcat/TrafDDLdesc.cpp
@@ -0,0 +1,617 @@
+/**********************************************************************
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+// @@@ END COPYRIGHT @@@
+//
+**********************************************************************/
+
+#include "TrafDDLdesc.h"
+#include "CmpCommon.h"
+
+// -----------------------------------------------------------------------
+// Allocate one of the primitive structs and initialize to all zeroes.
+// Uses HEAP (StatementHeap) of CmpCommon or space.
+// -----------------------------------------------------------------------
+TrafDesc *TrafAllocateDDLdesc(desc_nodetype nodetype, Space * space)
+{
+  size_t size = 0;
+  TrafDesc * desc_ptr = NULL;
+
+  switch (nodetype)
+    {
+    case DESC_CHECK_CONSTRNTS_TYPE:
+      desc_ptr = new GENHEAP(space) TrafCheckConstrntsDesc();
+      break;
+    case DESC_COLUMNS_TYPE:
+      desc_ptr = new GENHEAP(space) TrafColumnsDesc();
+      break;
+    case DESC_CONSTRNTS_TYPE:
+      desc_ptr = new GENHEAP(space) TrafConstrntsDesc();
+      break;
+    case DESC_CONSTRNT_KEY_COLS_TYPE:
+      desc_ptr = new GENHEAP(space) TrafConstrntKeyColsDesc();
+      break;
+    case DESC_FILES_TYPE:
+      desc_ptr = new GENHEAP(space) TrafFilesDesc();
+      break;
+    case DESC_HBASE_RANGE_REGION_TYPE:
+      desc_ptr = new GENHEAP(space) TrafHbaseRegionDesc();
+      break;
+    case DESC_HISTOGRAM_TYPE:
+      desc_ptr = new GENHEAP(space) TrafHistogramDesc();
+      break;
+    case DESC_HIST_INTERVAL_TYPE:
+      desc_ptr = new GENHEAP(space) TrafHistIntervalDesc();
+      break;
+    case DESC_INDEXES_TYPE:
+      desc_ptr = new GENHEAP(space) TrafIndexesDesc();
+      break;
+    case DESC_KEYS_TYPE:
+      desc_ptr = new GENHEAP(space) TrafKeysDesc();
+      break;
+    case DESC_LIBRARY_TYPE:
+      desc_ptr = new GENHEAP(space) TrafLibraryDesc();
+      break;
+     case DESC_PARTNS_TYPE:
+      desc_ptr = new GENHEAP(space) TrafPartnsDesc();
+      break;
+    case DESC_REF_CONSTRNTS_TYPE:
+      desc_ptr = new GENHEAP(space) TrafRefConstrntsDesc();
+      break;
+    case DESC_ROUTINE_TYPE:
+      desc_ptr = new GENHEAP(space) TrafRoutineDesc();
+      break;
+    case DESC_SEQUENCE_GENERATOR_TYPE:   
+      desc_ptr = new GENHEAP(space) TrafSequenceGeneratorDesc();
+      break;
+    case DESC_TABLE_TYPE:
+      desc_ptr = new GENHEAP(space) TrafTableDesc();
+      break;
+    case DESC_VIEW_TYPE:
+      desc_ptr = new GENHEAP(space) TrafViewDesc();
+      break;	       
+    case DESC_USING_MV_TYPE: 
+      desc_ptr = new GENHEAP(space) TrafUsingMvDesc();
+      break;
+    default:
+      assert(FALSE);
+      break;
+    }
+
+  // if not being allocated from space, memset all bytes to 0.
+  // If allocated from space, it will be set to 0 during space allocation.
+  if (! space)
+    memset((char*)desc_ptr+sizeof(TrafDesc), 0, 
+           desc_ptr->getClassSize()-sizeof(TrafDesc));
+
+  return desc_ptr;
+
+}
+
+TrafDesc::TrafDesc(UInt16 nodeType) 
+  : NAVersionedObject(nodeType),
+    nodetype(nodeType),
+    version(CURR_VERSION),
+    descFlags(0),
+    next(NULL)
+{}
+
+Lng32 TrafDesc::validateSize()
+{
+  if (getImageSize() != getClassSize())
+    return -1;
+
+  return 0;
+}
+
+Lng32 TrafDesc::validateVersion()
+{
+  if (version != CURR_VERSION)
+    return -1;
+
+  return 0;
+}
+
+Lng32 TrafDesc::migrateToNewVersion(
+     NAVersionedObject *&newImage)
+{
+  short tempimagesize = getClassSize();
+  // -----------------------------------------------------------------
+  // The base class implementation of migrateToNewVersion() is only
+  // called with newImage == NULL when the same function is not
+  // redefined at the subclass. That means no new version of that
+  // subclass has been invented yet.
+  // -----------------------------------------------------------------
+  if (newImage == NULL)
+    {
+      if (validateSize())
+        return -1;
+
+      if (validateVersion())
+        return -1;
+    }
+
+  return NAVersionedObject::migrateToNewVersion(newImage);
+}
+
+char *TrafDesc::findVTblPtr(short classID)
+{
+  char *vtblptr = NULL;
+
+  switch (classID)
+    {
+    case DESC_CHECK_CONSTRNTS_TYPE:
+      GetVTblPtr(vtblptr, TrafCheckConstrntsDesc);
+      break;
+    case DESC_COLUMNS_TYPE:
+      GetVTblPtr(vtblptr, TrafColumnsDesc);
+      break;
+    case DESC_CONSTRNTS_TYPE:
+      GetVTblPtr(vtblptr, TrafConstrntsDesc);
+      break;
+    case DESC_CONSTRNT_KEY_COLS_TYPE:
+      GetVTblPtr(vtblptr, TrafConstrntKeyColsDesc);
+      break;
+    case DESC_FILES_TYPE:
+      GetVTblPtr(vtblptr, TrafFilesDesc);
+      break;
+    case DESC_HBASE_RANGE_REGION_TYPE:
+      GetVTblPtr(vtblptr, TrafHbaseRegionDesc);
+      break;
+    case DESC_HISTOGRAM_TYPE:
+      GetVTblPtr(vtblptr, TrafHistogramDesc);
+      break;
+    case DESC_HIST_INTERVAL_TYPE:
+      GetVTblPtr(vtblptr, TrafHistIntervalDesc);
+      break;
+    case DESC_INDEXES_TYPE:
+      GetVTblPtr(vtblptr, TrafIndexesDesc);
+      break;
+    case DESC_KEYS_TYPE:
+      GetVTblPtr(vtblptr, TrafKeysDesc);
+      break;
+    case DESC_LIBRARY_TYPE:
+      GetVTblPtr(vtblptr, TrafLibraryDesc);
+      break;
+     case DESC_PARTNS_TYPE:
+      GetVTblPtr(vtblptr, TrafPartnsDesc);
+      break;
+    case DESC_REF_CONSTRNTS_TYPE:
+      GetVTblPtr(vtblptr, TrafRefConstrntsDesc);
+      break;
+    case DESC_ROUTINE_TYPE:
+      GetVTblPtr(vtblptr, TrafRoutineDesc);
+      break;
+    case DESC_SEQUENCE_GENERATOR_TYPE:   
+      GetVTblPtr(vtblptr, TrafSequenceGeneratorDesc);
+      break;
+    case DESC_TABLE_TYPE:
+      GetVTblPtr(vtblptr, TrafTableDesc);
+      break;
+    case DESC_VIEW_TYPE:
+      GetVTblPtr(vtblptr, TrafViewDesc);
+      break;	       
+    case DESC_USING_MV_TYPE: 
+      GetVTblPtr(vtblptr, TrafUsingMvDesc);
+      break;
+    default:
+      assert(FALSE);
+      break;
+    }
+
+  return vtblptr;
+}
+
+// pack and unpack methods for various descriptor structs
+
+Long TrafDesc::pack(void * space)
+{
+  next.pack(space);
+
+  return NAVersionedObject::pack(space);
+}
+
+Lng32 TrafDesc::unpack(void * base, void * reallocator)
+{
+  if(next.unpack(base, reallocator)) return -1;
+
+  return NAVersionedObject::unpack(base, reallocator);
+}
+
+Long TrafCheckConstrntsDesc::pack(void * space)
+{
+  constrnt_text = (constrnt_text ? (char*)(((Space*)space)->convertToOffset(constrnt_text)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafCheckConstrntsDesc::unpack(void * base, void * reallocator)
+{
+  constrnt_text = (constrnt_text ? (char*)((char*)base - (Long)constrnt_text) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafColumnsDesc::pack(void * space)
+{
+  colname = (colname ? (char*)(((Space*)space)->convertToOffset(colname)) : NULL);
+
+  pictureText = (pictureText ? (char*)(((Space*)space)->convertToOffset(pictureText)) : NULL);
+
+  defaultvalue = (defaultvalue ? (char*)(((Space*)space)->convertToOffset(defaultvalue)) : NULL);
+  heading = (heading ? (char*)(((Space*)space)->convertToOffset(heading)) : NULL);
+  computed_column_text = (computed_column_text ? (char*)(((Space*)space)->convertToOffset(computed_column_text)) : NULL);
+
+  hbaseColFam = (hbaseColFam ? (char*)(((Space*)space)->convertToOffset(hbaseColFam)) : NULL);
+  hbaseColQual = (hbaseColQual ? (char*)(((Space*)space)->convertToOffset(hbaseColQual)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafColumnsDesc::unpack(void * base, void * reallocator)
+{
+  colname = (colname ? (char*)((char*)base - (Long)colname) : NULL);
+
+  pictureText = (pictureText ? (char*)((char*)base - (Long)pictureText) : NULL);
+
+  defaultvalue = (defaultvalue ? (char*)((char*)base - (Long)defaultvalue) : NULL);
+  heading = (heading ? (char*)((char*)base - (Long)heading) : NULL);
+  computed_column_text = (computed_column_text ? (char*)((char*)base - (Long)computed_column_text) : NULL);
+
+  hbaseColFam = (hbaseColFam ? (char*)((char*)base - (Long)hbaseColFam) : NULL);
+  hbaseColQual = (hbaseColQual ? (char*)((char*)base - (Long)hbaseColQual) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafConstrntsDesc::pack(void * space)
+{
+  constrntname = (constrntname ? (char*)(((Space*)space)->convertToOffset(constrntname)) : NULL);
+  tablename = (tablename ? (char*)(((Space*)space)->convertToOffset(tablename)) : NULL);
+  
+  check_constrnts_desc.pack(space);
+  constr_key_cols_desc.pack(space);
+  referenced_constrnts_desc.pack(space);
+  referencing_constrnts_desc.pack(space);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafConstrntsDesc::unpack(void * base, void * reallocator)
+{
+  constrntname = (constrntname ? (char*)((char*)base - (Long)constrntname) : NULL);
+  tablename = (tablename ? (char*)((char*)base - (Long)tablename) : NULL);
+
+  if (check_constrnts_desc.unpack(base, reallocator)) return -1;
+  if (constr_key_cols_desc.unpack(base, reallocator)) return -1;
+  if (referenced_constrnts_desc.unpack(base, reallocator)) return -1;
+  if (referencing_constrnts_desc.unpack(base, reallocator)) return -1;
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafConstrntKeyColsDesc::pack(void * space)
+{
+  colname = (colname ? (char*)(((Space*)space)->convertToOffset(colname)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafConstrntKeyColsDesc::unpack(void * base, void * reallocator)
+{
+  colname = (colname ? (char*)((char*)base - (Long)colname) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+
+Long TrafFilesDesc::pack(void * space)
+{
+  partns_desc.pack(space);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafFilesDesc::unpack(void * base, void * reallocator)
+{
+  if (partns_desc.unpack(base, reallocator)) return -1;
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafHbaseRegionDesc::pack(void * space)
+{
+  beginKey = (beginKey ? (char*)(((Space*)space)->convertToOffset(beginKey)) : NULL);
+  endKey = (endKey ? (char*)(((Space*)space)->convertToOffset(endKey)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafHbaseRegionDesc::unpack(void * base, void * reallocator)
+{
+  beginKey = (beginKey ? (char*)((char*)base - (Long)beginKey) : NULL);
+  endKey = (endKey ? (char*)((char*)base - (Long)endKey) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafHistogramDesc::pack(void * space)
+{
+  tablename = (tablename ? (char*)(((Space*)space)->convertToOffset(tablename)) : NULL);
+  histid = (histid ? (char*)(((Space*)space)->convertToOffset(histid)) : NULL);
+  highval = (highval ? (char*)(((Space*)space)->convertToOffset(highval)) : NULL);
+  lowval = (lowval ? (char*)(((Space*)space)->convertToOffset(lowval)) : NULL);
+
+  hist_interval_desc.pack(space);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafHistogramDesc::unpack(void * base, void * reallocator)
+{
+  tablename = (tablename ? (char*)((char*)base - (Long)tablename) : NULL);
+  histid = (histid ? (char*)((char*)base - (Long)histid) : NULL);
+  highval = (highval ? (char*)((char*)base - (Long)highval) : NULL);
+  lowval = (lowval ? (char*)((char*)base - (Long)lowval) : NULL);
+
+  if (hist_interval_desc.unpack(base, reallocator)) return -1;
+  
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafHistIntervalDesc::pack(void * space)
+{
+  histid = (histid ? (char*)(((Space*)space)->convertToOffset(histid)) : NULL);
+  intboundary = (intboundary ? (char*)(((Space*)space)->convertToOffset(intboundary)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafHistIntervalDesc::unpack(void * base, void * reallocator)
+{
+  histid = (histid ? (char*)((char*)base - (Long)histid) : NULL);
+  intboundary = (intboundary ? (char*)((char*)base - (Long)intboundary) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafIndexesDesc::pack(void * space)
+{
+  tablename = (tablename ? (char*)(((Space*)space)->convertToOffset(tablename)) : NULL);
+  indexname = (indexname ? (char*)(((Space*)space)->convertToOffset(indexname)) : NULL);
+  hbaseCreateOptions = (hbaseCreateOptions ? (char*)(((Space*)space)->convertToOffset(hbaseCreateOptions)) : NULL);
+
+  files_desc.pack(space);
+  keys_desc.pack(space);
+  non_keys_desc.pack(space);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafIndexesDesc::unpack(void * base, void * reallocator)
+{
+  tablename = (tablename ? (char*)((char*)base - (Long)tablename) : NULL);
+  indexname = (indexname ? (char*)((char*)base - (Long)indexname) : NULL);
+  hbaseCreateOptions = (hbaseCreateOptions ? (char*)((char*)base - (Long)hbaseCreateOptions) : NULL);
+
+  if (files_desc.unpack(base, reallocator)) return -1;
+  if (keys_desc.unpack(base, reallocator)) return -1;
+  if (non_keys_desc.unpack(base, reallocator)) return -1;
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafKeysDesc::pack(void * space)
+{
+  keyname = (keyname ? (char*)(((Space*)space)->convertToOffset(keyname)) : NULL);
+  hbaseColFam = (hbaseColFam ? (char*)(((Space*)space)->convertToOffset(hbaseColFam)) : NULL);
+  hbaseColQual = (hbaseColQual ? (char*)(((Space*)space)->convertToOffset(hbaseColQual)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafKeysDesc::unpack(void * base, void * reallocator)
+{
+  keyname = (keyname ? (char*)((char*)base - (Long)keyname) : NULL);
+  hbaseColFam = (hbaseColFam ? (char*)((char*)base - (Long)hbaseColFam) : NULL);
+  hbaseColQual = (hbaseColQual ? (char*)((char*)base - (Long)hbaseColQual) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafLibraryDesc::pack(void * space)
+{
+  libraryName = (libraryName ? (char*)(((Space*)space)->convertToOffset(libraryName)) : NULL);
+  libraryFilename = (libraryFilename ? (char*)(((Space*)space)->convertToOffset(libraryFilename)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafLibraryDesc::unpack(void * base, void * reallocator)
+{
+  libraryName = (libraryName ? (char*)((char*)base - (Long)libraryName) : NULL);
+  libraryFilename = (libraryFilename ? (char*)((char*)base - (Long)libraryFilename) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafPartnsDesc::pack(void * space)
+{
+  tablename = (tablename ? (char*)(((Space*)space)->convertToOffset(tablename)) : NULL);
+  partitionname = (partitionname ? (char*)(((Space*)space)->convertToOffset(partitionname)) : NULL);
+  logicalpartitionname = (logicalpartitionname ? (char*)(((Space*)space)->convertToOffset(logicalpartitionname)) : NULL);
+  firstkey = (firstkey ? (char*)(((Space*)space)->convertToOffset(firstkey)) : NULL);
+  encodedkey = (encodedkey ? (char*)(((Space*)space)->convertToOffset(encodedkey)) : NULL);
+  lowKey = (lowKey ? (char*)(((Space*)space)->convertToOffset(lowKey)) : NULL);
+  highKey = (highKey ? (char*)(((Space*)space)->convertToOffset(highKey)) : NULL);
+  givenname = (givenname ? (char*)(((Space*)space)->convertToOffset(givenname)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafPartnsDesc::unpack(void * base, void * reallocator)
+{
+  tablename = (tablename ? (char*)((char*)base - (Long)tablename) : NULL);
+  partitionname = (partitionname ? (char*)((char*)base - (Long)partitionname) : NULL);
+  logicalpartitionname = (logicalpartitionname ? (char*)((char*)base - (Long)logicalpartitionname) : NULL);
+  firstkey = (firstkey ? (char*)((char*)base - (Long)firstkey) : NULL);
+  encodedkey = (encodedkey ? (char*)((char*)base - (Long)encodedkey) : NULL);
+  lowKey = (lowKey ? (char*)((char*)base - (Long)lowKey) : NULL);
+  highKey = (highKey ? (char*)((char*)base - (Long)highKey) : NULL);
+  givenname = (givenname ? (char*)((char*)base - (Long)givenname) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafRefConstrntsDesc::pack(void * space)
+{
+  constrntname = (constrntname ? (char*)(((Space*)space)->convertToOffset(constrntname)) : NULL);
+  tablename = (tablename ? (char*)(((Space*)space)->convertToOffset(tablename)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafRefConstrntsDesc::unpack(void * base, void * reallocator)
+{
+  constrntname = (constrntname ? (char*)((char*)base - (Long)constrntname) : NULL);
+  tablename = (tablename ? (char*)((char*)base - (Long)tablename) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafRoutineDesc::pack(void * space)
+{
+  routineName = (routineName ? (char*)(((Space*)space)->convertToOffset(routineName)) : NULL);
+  externalName = (externalName ? (char*)(((Space*)space)->convertToOffset(externalName)) : NULL);
+  librarySqlName = (librarySqlName ? (char*)(((Space*)space)->convertToOffset(librarySqlName)) : NULL);
+  libraryFileName = (libraryFileName ? (char*)(((Space*)space)->convertToOffset(libraryFileName)) : NULL);
+  signature = (signature ? (char*)(((Space*)space)->convertToOffset(signature)) : NULL);
+
+  params.pack(space);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafRoutineDesc::unpack(void * base, void * reallocator)
+{
+  routineName = (routineName ? (char*)((char*)base - (Long)routineName) : NULL);
+  externalName = (externalName ? (char*)((char*)base - (Long)externalName) : NULL);
+  librarySqlName = (librarySqlName ? (char*)((char*)base - (Long)librarySqlName) : NULL);
+  libraryFileName = (libraryFileName ? (char*)((char*)base - (Long)libraryFileName) : NULL);
+  signature = (signature ? (char*)((char*)base - (Long)signature) : NULL);
+
+  if (params.unpack(base, reallocator)) return -1;
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafSequenceGeneratorDesc::pack(void * space)
+{
+  sgLocation = (sgLocation ? (char*)(((Space*)space)->convertToOffset(sgLocation)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafSequenceGeneratorDesc::unpack(void * base, void * reallocator)
+{
+  sgLocation = (sgLocation ? (char*)((char*)base - (Long)sgLocation) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafTableDesc::pack(void * space)
+{
+  tablename = (tablename ? (char*)(((Space*)space)->convertToOffset(tablename)) : NULL);
+  snapshotName = (snapshotName ? (char*)(((Space*)space)->convertToOffset(snapshotName)) : NULL);
+  default_col_fam = (default_col_fam ? (char*)(((Space*)space)->convertToOffset(default_col_fam)) : NULL);
+  all_col_fams = (all_col_fams ? (char*)(((Space*)space)->convertToOffset(all_col_fams)) : NULL);
+
+  columns_desc.pack(space);
+  indexes_desc.pack(space);
+  constrnts_desc.pack(space);
+  views_desc.pack(space);
+  constrnts_tables_desc.pack(space);
+  referenced_tables_desc.pack(space);
+  referencing_tables_desc.pack(space);
+  histograms_desc.pack(space);
+  files_desc.pack(space);
+  hbase_regionkey_desc.pack(space);
+  sequence_generator_desc.pack(space);
+
+  return TrafDesc::pack(space);  
+}
+
+Lng32 TrafTableDesc::unpack(void * base, void * reallocator)
+{
+  tablename = (tablename ? (char*)((char*)base - (Long)tablename) : NULL);
+  snapshotName = (snapshotName ? (char*)((char*)base - (Long)snapshotName) : NULL);
+  default_col_fam = (default_col_fam ? (char*)((char*)base - (Long)default_col_fam) : NULL);
+  all_col_fams = (all_col_fams ? (char*)((char*)base - (Long)all_col_fams) : NULL);
+
+  if (columns_desc.unpack(base, reallocator)) return -1;
+  if (indexes_desc.unpack(base, reallocator)) return -1;
+  if (constrnts_desc.unpack(base, reallocator)) return -1;
+  if (views_desc.unpack(base, reallocator)) return -1;
+  if (constrnts_tables_desc.unpack(base, reallocator)) return -1;
+  if (referenced_tables_desc.unpack(base, reallocator)) return -1;
+  if (referencing_tables_desc.unpack(base, reallocator)) return -1;
+  if (histograms_desc.unpack(base, reallocator)) return -1;
+  if (files_desc.unpack(base, reallocator)) return -1;
+  if (hbase_regionkey_desc.unpack(base, reallocator)) return -1;
+  if (sequence_generator_desc.unpack(base, reallocator)) return -1;
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafUsingMvDesc::pack(void * space)
+{
+  mvName = (mvName ? (char*)(((Space*)space)->convertToOffset(mvName)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafUsingMvDesc::unpack(void * base, void * reallocator)
+{
+  mvName = (mvName ? (char*)((char*)base - (Long)mvName) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}
+
+Long TrafViewDesc::pack(void * space)
+{
+  viewname = (viewname ? (char*)(((Space*)space)->convertToOffset(viewname)) : NULL);
+  viewfilename = (viewfilename ? (char*)(((Space*)space)->convertToOffset(viewfilename)) : NULL);
+
+  viewtext = (viewtext ? (char*)(((Space*)space)->convertToOffset(viewtext)) : NULL);
+  viewchecktext = (viewchecktext ? (char*)(((Space*)space)->convertToOffset(viewchecktext)) : NULL);
+
+  return TrafDesc::pack(space);
+}
+
+Lng32 TrafViewDesc::unpack(void * base, void * reallocator)
+{
+  viewname = (viewname ? (char*)((char*)base - (Long)viewname) : NULL);
+  viewfilename = (viewfilename ? (char*)((char*)base - (Long)viewfilename) : NULL);
+
+  viewtext = (viewtext ? (char*)((char*)base - (Long)viewtext) : NULL);
+  viewchecktext = (viewchecktext ? (char*)((char*)base - (Long)viewchecktext) : NULL);
+
+  return TrafDesc::unpack(base, reallocator);
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcat/TrafDDLdesc.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcat/TrafDDLdesc.h b/core/sql/sqlcat/TrafDDLdesc.h
new file mode 100644
index 0000000..3a599e6
--- /dev/null
+++ b/core/sql/sqlcat/TrafDDLdesc.h
@@ -0,0 +1,1120 @@
+/**********************************************************************
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+// @@@ END COPYRIGHT @@@
+//
+**********************************************************************/
+#ifndef TRAF_DDL_DESC_H
+#define TRAF_DDL_DESC_H
+
+#include "Platform.h"
+#include "NAVersionedObject.h"
+#include "charinfo.h"
+#include "ComSmallDefs.h"
+
+#define GENHEAP(h)    (h ? (NAMemory*)h : CmpCommon::statementHeap())
+
+enum ConstraintType { UNIQUE_CONSTRAINT, PRIMARY_KEY_CONSTRAINT, REF_CONSTRAINT,
+		      CHECK_CONSTRAINT
+		    };
+
+enum desc_nodetype {
+  DESC_UNKNOWN_TYPE = 0,
+  DESC_CHECK_CONSTRNTS_TYPE,
+  DESC_COLUMNS_TYPE,
+  DESC_CONSTRNTS_TYPE,
+  DESC_CONSTRNT_KEY_COLS_TYPE,
+  DESC_FILES_TYPE,
+  DESC_HBASE_RANGE_REGION_TYPE,
+  DESC_HISTOGRAM_TYPE,
+  DESC_HIST_INTERVAL_TYPE,
+  DESC_INDEXES_TYPE,
+  DESC_KEYS_TYPE,
+  DESC_PARTNS_TYPE,
+  DESC_REF_CONSTRNTS_TYPE,
+  DESC_TABLE_TYPE,
+  DESC_USING_MV_TYPE,  // MV  -- marks an MV using this object
+  DESC_VIEW_TYPE,
+  DESC_SCHEMA_LABEL_TYPE,
+  DESC_SEQUENCE_GENERATOR_TYPE,
+  DESC_ROUTINE_TYPE,
+  DESC_LIBRARY_TYPE
+};
+
+class TrafDesc;
+typedef NAVersionedObjectPtrTempl<TrafDesc> DescStructPtr;
+
+class TrafCheckConstrntsDesc;
+class TrafColumnsDesc;
+class TrafConstrntsDesc;
+class TrafConstrntKeyColsDesc;
+class TrafHbaseRegionDesc;
+class TrafHistogramDesc;
+class TrafHistIntervalDesc;
+class TrafFilesDesc;
+class TrafKeysDesc;
+class TrafIndexesDesc;
+class TrafLibraryDesc;
+class TrafPartnsDesc;
+class TrafRefConstrntsDesc;
+class TrafRoutineDesc;
+class TrafSequenceGeneratorDesc;
+class TrafTableDesc;
+class TrafUsingMvDesc;
+class TrafViewDesc;
+
+class TrafDesc : public NAVersionedObject {
+public:
+  enum {CURR_VERSION = 1};
+
+  TrafDesc(UInt16 nodeType);
+  TrafDesc() : NAVersionedObject(-1) {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafDesc); }
+
+  virtual Lng32 migrateToNewVersion(NAVersionedObject *&newImage);
+
+  virtual char *findVTblPtr(short classID);
+
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  Lng32 validateSize();
+  Lng32 validateVersion();
+ 
+  UInt16 nodetype;
+  UInt16 version;
+  UInt32 descFlags;
+  DescStructPtr next;
+  char* descExtension; // extension of descriptor, if it needs to be extended
+
+  virtual TrafCheckConstrntsDesc *checkConstrntsDesc() const { return NULL; }
+  virtual TrafColumnsDesc *columnsDesc() const { return NULL; }
+  virtual TrafConstrntsDesc *constrntsDesc() const { return NULL; }
+  virtual TrafConstrntKeyColsDesc *constrntKeyColsDesc() const { return NULL; }
+  virtual TrafFilesDesc *filesDesc() const { return NULL; }
+  virtual TrafHbaseRegionDesc *hbaseRegionDesc() const { return NULL; }
+  virtual TrafHistogramDesc *histogramDesc() const { return NULL; }
+  virtual TrafHistIntervalDesc *histIntervalDesc() const { return NULL; }
+  virtual TrafKeysDesc *keysDesc() const { return NULL; }
+  virtual TrafIndexesDesc *indexesDesc() const { return NULL; }
+  virtual TrafLibraryDesc *libraryDesc() const { return NULL; }
+  virtual TrafPartnsDesc *partnsDesc() const { return NULL; }
+  virtual TrafRefConstrntsDesc *refConstrntsDesc() const { return NULL; }
+  virtual TrafRoutineDesc *routineDesc() const { return NULL; }
+  virtual TrafSequenceGeneratorDesc *sequenceGeneratorDesc() const { return NULL; }
+  virtual TrafTableDesc *tableDesc() const { return NULL; }
+  virtual TrafUsingMvDesc *usingMvDesc() const { return NULL; }
+  virtual TrafViewDesc *viewDesc() const { return NULL; }
+
+};
+
+class TrafCheckConstrntsDesc : public TrafDesc {
+public:
+  TrafCheckConstrntsDesc() : TrafDesc(DESC_CHECK_CONSTRNTS_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafCheckConstrntsDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafCheckConstrntsDesc *checkConstrntsDesc() const { return (TrafCheckConstrntsDesc*)this; }
+
+  char* constrnt_text;
+  char filler[16];
+};
+
+class TrafColumnsDesc : public TrafDesc {
+public:
+  TrafColumnsDesc() : TrafDesc(DESC_COLUMNS_TYPE) 
+  {};
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafColumnsDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafColumnsDesc *columnsDesc() const { return (TrafColumnsDesc*)this; }
+
+  enum ColumnsDescFlags
+    { 
+      NULLABLE           = 0x0001,  
+      ADDED              = 0x0002,
+      UPSHIFTED          = 0x0004,
+      CASEINSENSITIVE    = 0x0008,
+      OPTIONAL           = 0x0010
+    };
+
+  void setNullable(NABoolean v) 
+  {(v ? columnsDescFlags |= NULLABLE : columnsDescFlags &= ~NULLABLE); };
+  NABoolean isNullable() { return (columnsDescFlags & NULLABLE) != 0; };
+
+  void setAdded(NABoolean v) 
+  {(v ? columnsDescFlags |= ADDED : columnsDescFlags &= ~ADDED); };
+  NABoolean isAdded() { return (columnsDescFlags & ADDED) != 0; };
+
+  void setUpshifted(NABoolean v) 
+  {(v ? columnsDescFlags |= UPSHIFTED : columnsDescFlags &= ~UPSHIFTED); };
+  NABoolean isUpshifted() { return (columnsDescFlags & UPSHIFTED) != 0; };
+
+  void setCaseInsensitive(NABoolean v) 
+  {(v ? columnsDescFlags |= CASEINSENSITIVE : columnsDescFlags &= ~CASEINSENSITIVE); };
+  NABoolean isCaseInsensitive() { return (columnsDescFlags & CASEINSENSITIVE) != 0; };
+
+  void setOptional(NABoolean v) 
+  {(v ? columnsDescFlags |= OPTIONAL : columnsDescFlags &= ~OPTIONAL); };
+  NABoolean isOptional() { return (columnsDescFlags & OPTIONAL) != 0; };
+
+  rec_datetime_field datetimeStart() 
+  { return (rec_datetime_field)datetimestart;}
+  rec_datetime_field datetimeEnd() 
+  { return (rec_datetime_field)datetimeend;}
+
+  ComColumnDefaultClass defaultClass() 
+  { return (ComColumnDefaultClass)defaultClass_;}
+  void setDefaultClass(ComColumnDefaultClass v)
+  { defaultClass_ = (Int16)v;}
+
+  CharInfo::CharSet characterSet() 
+  { return (CharInfo::CharSet)character_set;}
+  CharInfo::CharSet encodingCharset() 
+  { return (CharInfo::CharSet)encoding_charset;}
+  CharInfo::Collation  collationSequence()
+  {return (CharInfo::Collation)collation_sequence; }
+
+  ComParamDirection paramDirection() 
+  { return (ComParamDirection)paramDirection_;}
+  void setParamDirection(ComParamDirection v)
+  {paramDirection_ = (Int16)v; }
+
+  char* colname;
+
+  Int32 colnumber;
+  Int32 datatype;
+
+  Int32 offset;
+  Lng32 length;
+
+  Lng32 scale;
+  Lng32 precision;
+
+  Int16/*rec_datetime_field*/ datetimestart, datetimeend;
+  Int16 datetimefractprec, intervalleadingprec;
+
+  Int16/*ComColumnDefaultClass*/ defaultClass_;
+  Int16/*CharInfo::CharSet*/     character_set;
+  Int16/*CharInfo::CharSet*/     encoding_charset;
+  Int16/*CharInfo::Collation*/   collation_sequence;
+
+  ULng32 hbaseColFlags;
+  Int16/*ComParamDirection*/ paramDirection_;
+  char colclass; // 'S' -- system generated, 'U' -- user created
+  char filler0;
+
+  Int64 colFlags;
+  Int64 columnsDescFlags; // my flags
+
+  char* pictureText;
+  char* defaultvalue;
+  char* heading;
+  char* computed_column_text;
+  char* hbaseColFam;
+  char* hbaseColQual;
+
+  char filler[24];
+};
+
+class TrafConstrntKeyColsDesc : public TrafDesc {
+public:
+  TrafConstrntKeyColsDesc() : TrafDesc(DESC_CONSTRNT_KEY_COLS_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafConstrntKeyColsDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafConstrntKeyColsDesc *constrntKeyColsDesc() const { return (TrafConstrntKeyColsDesc*)this; }
+
+  char* colname;
+  Int32  position;
+
+  Int64 constrntKeyColsDescFlags; // my flags
+
+  char filler[16];
+};
+
+class TrafConstrntsDesc : public TrafDesc {
+public:
+  TrafConstrntsDesc() : TrafDesc(DESC_CONSTRNTS_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafConstrntsDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafConstrntsDesc *constrntsDesc() const { return (TrafConstrntsDesc*)this; }
+
+  enum ConstrntsDescFlags
+    { 
+      ENFORCED           = 0x0001
+    };
+
+  void setEnforced(NABoolean v) 
+  {(v ? constrntsDescFlags |= ENFORCED : constrntsDescFlags &= ~ENFORCED); };
+  NABoolean isEnforced() { return (constrntsDescFlags & ENFORCED) != 0; };
+
+  char* constrntname;
+  char* tablename;
+
+  Int16 /*ConstraintType*/ type;
+  Int16 fillerInt16;
+  Int32  colcount;
+
+  Int64 constrntsDescFlags; // my flags
+
+  DescStructPtr check_constrnts_desc;
+  DescStructPtr constr_key_cols_desc;
+  DescStructPtr referenced_constrnts_desc;
+  DescStructPtr referencing_constrnts_desc;
+
+  char filler[24];
+};
+
+class TrafFilesDesc : public TrafDesc {
+public:
+  TrafFilesDesc() : TrafDesc(DESC_FILES_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafFilesDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafFilesDesc *filesDesc() const { return (TrafFilesDesc*)this; }
+
+  enum FilesDescFlags
+    { 
+      AUDITED           = 0x0001
+    };
+
+  void setAudited(NABoolean v) 
+  {(v ? filesDescFlags |= AUDITED : filesDescFlags &= ~AUDITED); };
+  NABoolean isAudited() { return (filesDescFlags & AUDITED) != 0; };
+
+  Int64 filesDescFlags; // my flags
+  DescStructPtr partns_desc;
+};
+
+class TrafHbaseRegionDesc : public TrafDesc {
+public:
+  TrafHbaseRegionDesc() : TrafDesc(DESC_HBASE_RANGE_REGION_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafHbaseRegionDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafHbaseRegionDesc *hbaseRegionDesc() const { return (TrafHbaseRegionDesc*)this; }
+
+  Int64  hbaseRegionDescFlags; // my flags
+
+  Lng32  beginKeyLen;
+  Lng32  endKeyLen;
+
+  char*  beginKey;
+  char*  endKey;
+
+  char filler[16];
+};
+
+class TrafHistogramDesc : public TrafDesc {
+public:
+  TrafHistogramDesc() : TrafDesc(DESC_HISTOGRAM_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafHistogramDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafHistogramDesc *histogramDesc() const { return (TrafHistogramDesc*)this; }
+
+  char*   tablename;
+  char*   histid;
+
+  Int32   tablecolnumber;
+  Int32   colposition;
+
+  Float32 rowcount;
+  Float32 uec;
+
+  char*   highval;
+  char*   lowval;
+
+  Int64 histogramDescFlags; // my flags
+
+  DescStructPtr hist_interval_desc;
+
+  char filler[24];
+};
+
+class TrafHistIntervalDesc : public TrafDesc {
+public:
+  TrafHistIntervalDesc() : TrafDesc(DESC_HIST_INTERVAL_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafHistIntervalDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafHistIntervalDesc *histIntervalDesc() const { return (TrafHistIntervalDesc*)this; }
+
+  char*   histid;
+  char*   intboundary;
+
+  Float32  rowcount;
+  Float32  uec;
+
+  Int32   intnum;
+  Int32   fillerInt32;
+
+  Int64 histIntervalDescFlags; // my flags
+
+  char filler[16];
+};
+
+class TrafIndexesDesc : public TrafDesc {
+public:
+  TrafIndexesDesc() : TrafDesc(DESC_INDEXES_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafIndexesDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafIndexesDesc *indexesDesc() const { return (TrafIndexesDesc*)this; }
+
+  enum IndexesDescFlags
+    { 
+      SYSTEM_TABLE_CODE = 0x0001,  
+      EXPLICIT          = 0x0002,
+      VOLATILE          = 0x0004,
+      IN_MEM_OBJ        = 0x0008,
+      UNIQUE            = 0x0010
+    };
+
+  void setSystemTableCode(NABoolean v) 
+  {(v ? indexesDescFlags |= SYSTEM_TABLE_CODE : indexesDescFlags &= ~SYSTEM_TABLE_CODE); };
+  NABoolean isSystemTableCode() { return (indexesDescFlags & SYSTEM_TABLE_CODE) != 0; };
+
+  void setExplicit(NABoolean v) 
+  {(v ? indexesDescFlags |= EXPLICIT : indexesDescFlags &= ~EXPLICIT); };
+  NABoolean isExplicit() { return (indexesDescFlags & EXPLICIT) != 0; };
+
+  void setVolatile(NABoolean v) 
+  {(v ? indexesDescFlags |= VOLATILE : indexesDescFlags &= ~VOLATILE); };
+  NABoolean isVolatile() { return (indexesDescFlags & VOLATILE) != 0; };
+
+  void setInMemoryObject(NABoolean v) 
+  {(v ? indexesDescFlags |= IN_MEM_OBJ : indexesDescFlags &= ~IN_MEM_OBJ); };
+  NABoolean isInMemoryObject() { return (indexesDescFlags & IN_MEM_OBJ) != 0; };
+
+  void setUnique(NABoolean v) 
+  {(v ? indexesDescFlags |= UNIQUE : indexesDescFlags &= ~UNIQUE); };
+  NABoolean isUnique() { return (indexesDescFlags & UNIQUE) != 0; };
+
+  ComPartitioningScheme partitioningScheme() 
+  { return (ComPartitioningScheme)partitioningScheme_; }
+  void setPartitioningScheme(ComPartitioningScheme v) 
+  { partitioningScheme_ = (Int16)v; }
+  ComRowFormat rowFormat() { return (ComRowFormat)rowFormat_; }
+  void setRowFormat(ComRowFormat v) { rowFormat_ = (Int16)v; }
+
+  char* tablename;  // name of the base table
+  char* indexname;  // physical name of index. Different from ext_indexname
+                    // for ARK tables.
+  Int64 indexUID;
+
+  Int32 keytag;
+  Int32 record_length;
+  Int32 colcount;
+  Int32 blocksize;
+
+  Int16 /*ComPartitioningScheme*/ partitioningScheme_; 
+  Int16 /*ComRowFormat*/          rowFormat_;
+  Lng32 numSaltPartns; // number of salted partns created for a seabase table.
+
+  Int64 indexesDescFlags; // my flags
+
+  char*  hbaseCreateOptions;
+
+  DescStructPtr files_desc;
+
+  // Clustering keys columns
+  DescStructPtr keys_desc;
+
+  // Columns that are not part of the clustering key.
+  // Used specially for vertical partition column(s).
+  DescStructPtr non_keys_desc;
+
+  char filler[24];
+};
+
+class TrafKeysDesc : public TrafDesc {
+public:
+  TrafKeysDesc() : TrafDesc(DESC_KEYS_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafKeysDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafKeysDesc *keysDesc() const { return (TrafKeysDesc*)this; }
+
+  enum KeysDescFlags
+    { 
+      DESCENDING           = 0x0001
+    };
+
+  void setDescending(NABoolean v) 
+  {(v ? keysDescFlags |= DESCENDING : keysDescFlags &= ~DESCENDING); };
+  NABoolean isDescending() { return (keysDescFlags & DESCENDING) != 0; };
+
+  char* keyname;
+  Int32 keyseqnumber;
+  Int32 tablecolnumber;
+
+  Int64 keysDescFlags; // my flags
+
+  char* hbaseColFam;
+  char* hbaseColQual;
+
+  char filler[16];
+};
+
+class TrafLibraryDesc : public TrafDesc {
+public:
+  TrafLibraryDesc() : TrafDesc(DESC_LIBRARY_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafLibraryDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafLibraryDesc *libraryDesc() const { return (TrafLibraryDesc*)this; }
+
+  char* libraryName;
+  char* libraryFilename;
+  Int64 libraryUID;
+  Int32 libraryVersion;
+  Int32 libraryOwnerID;
+  Int32 librarySchemaOwnerID;
+
+  char filler[20];
+};
+
+class TrafPartnsDesc : public TrafDesc {
+public:
+  TrafPartnsDesc() : TrafDesc(DESC_PARTNS_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafPartnsDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafPartnsDesc *partnsDesc() const { return (TrafPartnsDesc*)this; }
+
+  char*  tablename;
+  Int32 primarypartition;
+  char*  partitionname;
+  char*  logicalpartitionname;
+  char*  firstkey;
+  Lng32 firstkeylen;         //soln:10-031112-1256
+  Lng32 encodedkeylen;
+  char*  encodedkey;
+  char*  lowKey;
+  char*  highKey;
+  Int32    indexlevel;
+  Int32  priExt;
+  Int32  secExt;
+  Int32  maxExt;
+  char*  givenname;
+};
+
+class TrafRefConstrntsDesc : public TrafDesc {
+public:
+  TrafRefConstrntsDesc() : TrafDesc(DESC_REF_CONSTRNTS_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafRefConstrntsDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafRefConstrntsDesc *refConstrntsDesc() const { return (TrafRefConstrntsDesc*)this; }
+
+  Int64 refConstrntsDescFlags; // my flags
+  char* constrntname;
+  char* tablename;
+
+  char filler[16];
+};
+
+class TrafRoutineDesc : public TrafDesc {
+public:
+  TrafRoutineDesc() : TrafDesc(DESC_ROUTINE_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafRoutineDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafRoutineDesc *routineDesc() const { return (TrafRoutineDesc*)this; }
+
+  Int64 objectUID;
+  char* routineName;
+  char* externalName;
+  char* librarySqlName;
+  char* libraryFileName;
+  char* signature;
+  ComSInt32 paramsCount;
+  DescStructPtr params;
+  ComRoutineLanguage language;
+  ComRoutineType UDRType;
+  ComRoutineSQLAccess sqlAccess;
+  ComRoutineTransactionAttributes transactionAttributes;
+  ComSInt32 maxResults;
+  ComRoutineParamStyle paramStyle;
+  NABoolean isDeterministic;
+  NABoolean isCallOnNull;
+  NABoolean isIsolate;
+  ComRoutineExternalSecurity externalSecurity;
+  ComRoutineExecutionMode executionMode;
+  Int32 stateAreaSize;
+  ComRoutineParallelism parallelism;
+  Int32 owner;
+  Int32 schemaOwner;
+
+  Int64 routineDescFlags; // my flags
+
+  char filler[24];
+};
+
+class TrafSequenceGeneratorDesc : public TrafDesc {
+public:
+  TrafSequenceGeneratorDesc() : TrafDesc(DESC_SEQUENCE_GENERATOR_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafSequenceGeneratorDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafSequenceGeneratorDesc *sequenceGeneratorDesc() const { return (TrafSequenceGeneratorDesc*)this; }
+
+  ComSequenceGeneratorType sgType() 
+  { return (ComSequenceGeneratorType)sgType_; }
+  void setSgType(ComSequenceGeneratorType v) 
+  { sgType_ = (Int16)v; }
+
+  Int64                     startValue;
+  Int64                     increment;
+
+  Int16 /*ComSequenceGeneratorType*/  sgType_;
+  Int16 /*ComSQLDataType*/  sqlDataType;
+  Int16 /*ComFSDataType*/   fsDataType;
+  Int16                     cycleOption;
+
+  Int64                     maxValue;
+  Int64                     minValue;
+  Int64                     cache;
+  Int64                     objectUID;
+  char*                     sgLocation;
+  Int64                     nextValue;
+  Int64                     redefTime;
+
+  Int64 sequenceGeneratorDescFlags; // my flags
+
+  char filler[16];
+};
+
+class TrafTableDesc : public TrafDesc {
+public:
+  TrafTableDesc() : TrafDesc(DESC_TABLE_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafTableDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafTableDesc *tableDesc() const { return (TrafTableDesc*)this; }
+
+  enum TableDescFlags
+    { 
+      SYSTEM_TABLE_CODE = 0x0001,  
+      UMD_TABLE         = 0x0002,
+      MV_TABLE          = 0x0004,
+      IUD_LOG           = 0x0008,
+      MV_MD_OBJECT      = 0x0010,
+      SYN_TRANS_DONE    = 0x0020,
+      VOLATILE          = 0x0040,
+      IN_MEM_OBJ        = 0x0080,
+      DROPPABLE         = 0x0100,
+      INSERT_ONLY       = 0x0200
+    };
+
+  void setSystemTableCode(NABoolean v) 
+  {(v ? tableDescFlags |= SYSTEM_TABLE_CODE : tableDescFlags &= ~SYSTEM_TABLE_CODE); };
+  NABoolean isSystemTableCode() { return (tableDescFlags & SYSTEM_TABLE_CODE) != 0; };
+
+  void setUMDTable(NABoolean v) 
+  {(v ? tableDescFlags |= UMD_TABLE : tableDescFlags &= ~UMD_TABLE); };
+  NABoolean isUMDTable() { return (tableDescFlags & UMD_TABLE) != 0; };
+
+  void setMVTable(NABoolean v) 
+  {(v ? tableDescFlags |= MV_TABLE : tableDescFlags &= ~MV_TABLE); };
+  NABoolean isMVTable() { return (tableDescFlags & MV_TABLE) != 0; };
+
+  void setIUDLog(NABoolean v) 
+  {(v ? tableDescFlags |= IUD_LOG : tableDescFlags &= ~IUD_LOG); };
+  NABoolean isIUDLog() { return (tableDescFlags & IUD_LOG) != 0; };
+
+  void setMVMetadataObject(NABoolean v) 
+  {(v ? tableDescFlags |= MV_MD_OBJECT : tableDescFlags &= ~MV_MD_OBJECT); };
+  NABoolean isMVMetadataObject() { return (tableDescFlags & MV_MD_OBJECT) != 0; };
+
+  void setSynonymTranslationDone(NABoolean v) 
+  {(v ? tableDescFlags |= SYN_TRANS_DONE : tableDescFlags &= ~SYN_TRANS_DONE); };
+  NABoolean isSynonymTranslationDone() { return (tableDescFlags & SYN_TRANS_DONE) != 0; };
+
+  void setVolatileTable(NABoolean v) 
+  {(v ? tableDescFlags |= VOLATILE : tableDescFlags &= ~VOLATILE); };
+  NABoolean isVolatileTable() { return (tableDescFlags & VOLATILE) != 0; };
+
+  void setInMemoryObject(NABoolean v) 
+  {(v ? tableDescFlags |= IN_MEM_OBJ : tableDescFlags &= ~IN_MEM_OBJ); };
+  NABoolean isInMemoryObject() { return (tableDescFlags & IN_MEM_OBJ) != 0; };
+
+  void setDroppable(NABoolean v) 
+  {(v ? tableDescFlags |= DROPPABLE : tableDescFlags &= ~DROPPABLE); };
+  NABoolean isDroppable() { return (tableDescFlags & DROPPABLE) != 0; };
+
+  void setInsertOnly(NABoolean v) 
+  {(v ? tableDescFlags |= INSERT_ONLY : tableDescFlags &= ~INSERT_ONLY); };
+  NABoolean isInsertOnly() { return (tableDescFlags & INSERT_ONLY) != 0; };
+
+  ComInsertMode insertMode() { return (ComInsertMode)insertMode_;}
+  void setInsertMode(ComInsertMode v) {insertMode_ = (Int16)v;}
+
+  ComPartitioningScheme partitioningScheme() 
+  { return (ComPartitioningScheme)partitioningScheme_; }
+  void setPartitioningScheme(ComPartitioningScheme v) 
+  { partitioningScheme_ = (Int16)v; }
+  ComRowFormat rowFormat() { return (ComRowFormat)rowFormat_; }
+  void setRowFormat(ComRowFormat v) { rowFormat_ = (Int16)v; }
+  ComObjectType objectType() { return (ComObjectType)objectType_; }
+  void setObjectType(ComObjectType v) { objectType_ = (Int16)v; }
+
+  char* tablename;
+
+  Int64 createTime;
+  Int64 redefTime;
+  Int64 cacheTime;
+
+  Int32 mvAttributesBitmap;
+  Int32 record_length;
+  Int32 colcount;
+  Int32 constr_count;
+
+  Int16 /*ComInsertMode*/ insertMode_;
+  Int16 /*ComPartitioningScheme*/ partitioningScheme_; 
+  Int16 /*ComRowFormat*/  rowFormat_;
+  Int16 /*ComObjectType*/ objectType_; 
+
+  Int64 catUID;
+  Int64 schemaUID;
+  Int64 objectUID;
+
+  Lng32 owner;
+  Lng32 schemaOwner;
+
+  char*  snapshotName;
+  char*  default_col_fam;
+  char*  all_col_fams;
+  Int64 objectFlags;
+  Int64 tablesFlags;
+
+  Int64 tableDescFlags; // my flags
+
+  DescStructPtr columns_desc;
+  DescStructPtr indexes_desc;
+  DescStructPtr constrnts_desc;
+  DescStructPtr views_desc;
+  DescStructPtr constrnts_tables_desc;
+  DescStructPtr referenced_tables_desc;
+  DescStructPtr referencing_tables_desc;
+  DescStructPtr histograms_desc;
+  DescStructPtr files_desc;
+
+  // for hbase's region keys
+  DescStructPtr hbase_regionkey_desc;
+  DescStructPtr sequence_generator_desc;
+
+  char filler[32];
+};
+
+class TrafUsingMvDesc : public TrafDesc {
+public:
+  TrafUsingMvDesc() : TrafDesc(DESC_USING_MV_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafUsingMvDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafUsingMvDesc *usingMvDesc() const { return (TrafUsingMvDesc*)this; }
+
+  ComMVRefreshType refreshType() { return (ComMVRefreshType)refreshType_;}
+  void setRefreshType(ComMVRefreshType v) 
+  { refreshType_ = (Int16)v;}
+
+  char* mvName;
+  Int32  rewriteEnabled;
+  Int32  isInitialized;
+  Int16 /*ComMVRefreshType*/ refreshType_; // unknown here means "non incremental"
+
+  char filler[14];
+};
+
+class TrafViewDesc : public TrafDesc {
+public:
+  TrafViewDesc() : TrafDesc(DESC_VIEW_TYPE)
+  {}
+
+  // ---------------------------------------------------------------------
+  // Redefine virtual functions required for Versioning.
+  //----------------------------------------------------------------------
+  virtual unsigned char getClassVersionID()
+  {
+    return 1;
+  }
+
+  virtual void populateImageVersionIDArray()
+  {
+    setImageVersionID(0,getClassVersionID());
+  }
+
+  virtual short getClassSize()      { return (short)sizeof(TrafViewDesc); }
+ 
+  virtual Long pack(void *space);
+  virtual Lng32 unpack(void * base, void * reallocator);
+
+  virtual TrafViewDesc *viewDesc() const { return (TrafViewDesc*)this; }
+
+  enum ViewDescFlags
+    { 
+      UPDATABLE           = 0x0001,
+      INSERTABLE          = 0x0002
+    };
+
+  void setUpdatable(NABoolean v) 
+  {(v ? viewDescFlags |= UPDATABLE : viewDescFlags &= ~UPDATABLE); };
+  NABoolean isUpdatable() { return (viewDescFlags & UPDATABLE) != 0; };
+
+  void setInsertable(NABoolean v) 
+  {(v ? viewDescFlags |= INSERTABLE : viewDescFlags &= ~INSERTABLE); };
+  NABoolean isInsertable() { return (viewDescFlags & INSERTABLE) != 0; };
+
+  char*  viewname;
+  char*  viewfilename;    // the physical file, to be Opened for auth-cking.
+  char*  viewtext;
+  char*  viewchecktext;
+
+  Int64 viewDescFlags; // my flags
+
+  Int16 /*CharInfo::CharSet*/ viewtextcharset;
+
+  char filler[22];
+};
+
+// if space is passed in, use it. Otherwise use HEAP of CmpCommon
+TrafDesc *TrafAllocateDDLdesc(desc_nodetype nodetype, 
+                                 Space *space);
+
+TrafDesc *TrafMakeColumnDesc
+(
+     const char *tablename,
+     const char *colname,
+     Lng32 &colnumber,		  // INOUT
+     Int32 datatype,
+     Lng32 length,
+     Lng32 &offset,		  // INOUT
+     NABoolean null_flag,
+     SQLCHARSET_CODE datacharset, // i.e., use CharInfo::DefaultCharSet;
+     Space * space
+ );
+
+#endif

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/sqlcat/desc.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcat/desc.h b/core/sql/sqlcat/desc.h
index f6b8beb..0575b73 100644
--- a/core/sql/sqlcat/desc.h
+++ b/core/sql/sqlcat/desc.h
@@ -24,477 +24,6 @@
 #ifndef DESC_H
 #define DESC_H
 
-typedef Lng32 DataType;
-
-#include "Platform.h"
-#include "dfs2rec.h"
-#include "BaseTypes.h"
-#include "CmpCommon.h"	// defines HEAP for allocate() + all funcs in sqlcat
-#include "ItemConstr.h"	// defines ConstraintType enum
-#include "NAFileSet.h"
-#include "ComSmallDefs.h"
-
-class ElemDDLColDef;
-
-enum ConstraintType { UNIQUE_CONSTRAINT, PRIMARY_KEY_CONSTRAINT, REF_CONSTRAINT,
-		      CHECK_CONSTRAINT, MP_CHECK_CONSTRAINT,
-			// The next value is for catsim only;
-			// in ARK, NOT NULL constraints are CHECK constraints:
-		      CATSIM_NOT_NULL_CONSTRAINT
-		    };
-
-enum desc_nodetype {
-  DESC_UNKNOWN_TYPE = 0,
-  DESC_CHECK_CONSTRNTS_TYPE,
-  DESC_COLUMNS_TYPE,
-  DESC_CONSTRNTS_TYPE,
-  DESC_CONSTRNT_KEY_COLS_TYPE,
-  DESC_FILES_TYPE,
-  DESC_HISTOGRAM_TYPE,
-  DESC_HIST_INTERVAL_TYPE,
-  DESC_INDEXES_TYPE,
-  DESC_KEYS_TYPE,
-  DESC_PARTNS_TYPE,
-  DESC_REF_CONSTRNTS_TYPE,
-  DESC_TABLE_TYPE,
-  DESC_USING_MV_TYPE,  // MV  -- marks an MV using this object
-  DESC_VIEW_TYPE,
-  DESC_SCHEMA_LABEL_TYPE,
-  DESC_SEQUENCE_GENERATOR_TYPE,
-  DESC_HBASE_RANGE_REGION_TYPE,
-  DESC_ROUTINE_TYPE,
-  DESC_LIBRARY_TYPE
-};
-
-typedef ComDiskFileFormat UnderlyingFileType;
-
-struct desc_struct;	// forward reference; fully defined way at bottom
-
-struct header_desc_struct {
-  Int32 nodetype;
-  Int32 OSV;			// Object Schema Version, created at object creation time
-  Int32 OFV;
-  desc_struct *next;
-};
-
-struct table_desc_struct {
-  char *tablename;
-  char *catalogName;
-  char *parentTableName;
-  char *schemalabelfilename;    // the physical file, to be Opened for auth-cking.
-  UnderlyingFileType underlyingFileType;  // SQLMP or SQLMX 
-  ULng32 createtime[2];
-  ULng32 redeftime[2];
-  ULng32 cachetime[2];
-  Int32 issystemtablecode;	// logically belongs in files_desc_struct but..
-
-  Int32 isUMDTable;               // VO: Set to true if the table is one of the histograms UMD tables,
-                                //     the system_defaults UMD table or an odbc_schema UMD table.
-                                //     Otherwise set to false.
-  Int32 isMVtable;  // MV -- mark this table as an MV table
-  Int32 hasIUDLog;    // MV -- does this table have a log ?
-  Int32 isMVMetaDataObject;
-  Int32 isSynonymNameTranslationDone;
-  ComSInt32  mvAttributesBitmap;
-
-  Int32 isVolatile;
-  Int32 isInMemoryObjectDefn;
-  Int32 isDroppable;
-  ComInsertMode insertMode;
-
-  Int32 record_length;
-  Int32 colcount;
-  Int32 constr_count;
-  Cardinality rowcount;
-  ComPartitioningScheme partitioningScheme;   // round robin, range, etc
-  ComAccessPathType accessPathType;     //BT, IX, isVP, hasVP, LobTable --needed for binder check
-  ComRowFormat  rowFormat;
-  ULng32 catUID[2];
-  ULng32 schemaUID[2];
-  ULng32 objectUID[2];
-  Lng32 owner;
-  Lng32 schemaOwner;
-  ComObjectType objectType; 
-  void * rcb;
-  ULng32 rcbLen;
-  ULng32 maxRecLen;
-  ULng32 keyLen;
-  void * privInfo;
-  void * secKeySet;
-  ComBoolean isInsertOnly;
-  char * snapshotName;
-  char * default_col_fam;
-  char * all_col_fams;
-  Int64 objectFlags;
-  Int64 tablesFlags;
-  desc_struct *columns_desc;
-  desc_struct *indexes_desc;
-  desc_struct *constrnts_desc;
-  desc_struct *views_desc;
-  desc_struct *constrnts_tables_desc;
-  desc_struct *referenced_tables_desc;
-  desc_struct *referencing_tables_desc;
-  desc_struct *histograms_desc;
-  desc_struct *files_desc;
-  desc_struct *using_mvs_desc;
-// for hbase's region keys
-  desc_struct *hbase_regionkey_desc;
-  desc_struct *sequence_generator_desc;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-// MV 
-struct using_mv_desc_struct {
-  char *mvName;
-  ComMVRefreshType refreshType; // unknown here means "non incremental"
-  Int32  rewriteEnabled;
-  Int32  isInitialized;
-};
-
-struct view_desc_struct {
-  char * viewname;
-  char * viewfilename;    // the physical file, to be Opened for auth-cking.
-  char * viewtext;
-  char * viewchecktext;
-  Int32 updatable;
-  Int32 insertable;
-  CharInfo::CharSet viewtextcharset;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct indexes_desc_struct {
-  char *tablename;  // name of the base table
-  char *ext_indexname; // (ansi) name of index, as specified in CREATE INDEX
-  char *indexname;  // physical name of index. Different from ext_indexname
-                    // for ARK tables.
-  ULng32 redeftime[2];
-  Int64 indexUID;
-  Int32 issystemtablecode;	// ...but too much bother in ReadTableDef.C
-  // Indicates whether it is a vertical partition or an index
-  ComPartitioningScheme partitioningScheme;     // round robin, range, etc.
-  Int32 isVerticalPartition;
-  Int32 isCreatedExplicitly;
-  Int32 isPacked;
-  Int32 isVolatile;
-
-  // this object was only created in mxcmp memory(catman cache, NAtable
-  // cache. It doesn't exist in metadata or physical labels.
-  // Used to test different access plans without actually creating
-  // the object. 
-  Int32 isInMemoryObjectDefn;
-
-  Int32 notAvailable;
-  Lng32 packingScheme;
-  Lng32 packingFactor;
-  Int32 keytag;
-  Int32 unique;
-  Int32 record_length;
-  Int32 colcount;
-  Int32 blocksize;
-  Lng32 numSaltPartns; // number of salted partns created for a seabase table.
-  char * hbaseCreateOptions;
-  desc_struct *files_desc;
-  // Clustering keys columns
-  desc_struct *keys_desc;
-  // Columns that are not part of the clustering key.
-  // Used specially for vertical partition column(s).
-  desc_struct *non_keys_desc;
-  // Partitioning key columns -- used by NonStop SQL/MX to accommodate
-  // independent partitioning and clustering keys
-  desc_struct *partitioning_keys_desc;
-  ComRowFormat rowFormat;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct files_desc_struct {
-  FileOrganizationEnum fileorganization;
-  Int32 audit;
-  Int32 auditcompress;
-  Int32 clearOnPurge;
-  Int32 lockLength;
-  Int32 fileCode; 
-  Int32 buffered;
-  Int32 compressed;
-  Int32 dcompressed;
-  Int32 icompressed;
-  Int32 blockSize;
-  Int32 decoupledPartitionKeyList;
-  desc_struct *partns_desc;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct keys_desc_struct {
-  char *indexname;
-  char *keyname;
-  Int32  keyseqnumber;
-  Int32  tablecolnumber;
-  Int32  basetablecolnumber;  // for indexes, this is the corresponding base
-                            // table colnum. This is needed for the parallel
-                            // label operations.
-  Int32  ordering; // 0 is ascending, -1 is descending
-  char *hbaseColFam;
-  char *hbaseColQual;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct partns_desc_struct
-{
-  char * tablename;
-  Int32 primarypartition;
-  char * partitionname;
-  char * logicalpartitionname;
-  char * firstkey;
-  Lng32 firstkeylen;         //soln:10-031112-1256
-  Lng32 encodedkeylen;
-  char * encodedkey;
-  char * lowKey;
-  char * highKey;
-  Int32    indexlevel;
-  Int32  priExt;
-  Int32  secExt;
-  Int32  maxExt;
-  char * givenname;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct hbase_region_desc_struct
-{
-  Lng32  beginKeyLen;
-  char * beginKey;
-  Lng32  endKeyLen;
-  char * endKey;
-};
-
-struct columns_desc_struct {
-  char *tablename;
-  char *colname;
-  Int32 colnumber;
-  DataType datatype;
-  char * pictureText;
-  Lng32 length;
-  Lng32 scale;
-  Lng32 precision;
-  rec_datetime_field datetimestart, datetimeend;
-  short datetimefractprec, intervalleadingprec;
-  Lng32 offset;
-  short null_flag;
-  short upshift;
-  short caseinsensitive;
-  char colclass; // 'S' -- system generated, 'U' -- user created
-  short addedColumn;
-  Cardinality uec;
-  char *highval;
-  char *lowval;
-  ComColumnDefaultClass defaultClass;
-  char *defaultvalue;
-  char *heading;
-  CharInfo::CharSet   character_set;
-  CharInfo::CharSet   encoding_charset;
-  CharInfo::Collation collation_sequence;
-  short stored_on_disk;
-  char *computed_column_text;
-  char *hbaseColFam;
-  char *hbaseColQual;
-  ULng32 hbaseColFlags;
-  ComParamDirection paramDirection;
-  NABoolean isOptional; 
-  Int64 colFlags;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct constrnts_desc_struct {
-  char *constrntname;
-  char *tablename;
-  ConstraintType type;
-  Int32  colcount;
-  Int32  isEnforced;
-  char *indexname;
-  desc_struct *check_constrnts_desc;
-  desc_struct *constr_key_cols_desc;
-  desc_struct *referenced_constrnts_desc;
-  desc_struct *referencing_constrnts_desc;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct check_constrnts_desc_struct {
-  Int32 seqnumber;
-  char *constrnt_text;
-  CharInfo::CharSet constrnt_textcharset;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct constrnt_key_cols_desc_struct {
-  char *colname;
-  Int32  position;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct ref_constrnts_desc_struct {
-  char *constrntname;
-  char *tablename;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct histogram_desc_struct
-{
-  char *tablename;
-  Int32  tablecolnumber;
-  char *histid;
-  Int32  colposition;
-  Cardinality rowcount;
-  Cardinality uec;
-  char *highval;
-  char *lowval;
-  desc_struct *hist_interval_desc;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct hist_interval_desc_struct
-{
-  char * histid;
-  Int32    intnum;
-  char * intboundary;
-  Cardinality rowcount;
-  Cardinality uec;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-struct sequence_generator_desc_struct {
-  ComSequenceGeneratorType  sgType;
-  ComSInt64                 startValue;
-  ComSInt64                 increment;
-  ComSQLDataType            sqlDataType;
-  ComFSDataType             fsDataType;
-  ComSInt64                 maxValue;
-  ComSInt64                 minValue;
-  ComBoolean                cycleOption;
-  ComSInt64                  cache;
-  ComSInt64                  objectUID;
-  char *                          sgLocation;
-  ComSInt64                 nextValue;
-  ComSInt64                 redefTime;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif  
-};
-
-struct routine_desc_struct {
-  Int64 objectUID;
-  char *routineName;
-  char *externalName;
-  char *librarySqlName;
-  char *libraryFileName;
-  char *signature;
-  ComSInt32 paramsCount;
-  desc_struct *params;
-  ComRoutineLanguage language;
-  ComRoutineType UDRType;
-  ComRoutineSQLAccess sqlAccess;
-  ComRoutineTransactionAttributes transactionAttributes;
-  ComSInt32 maxResults;
-  ComRoutineParamStyle paramStyle;
-  NABoolean isDeterministic;
-  NABoolean isCallOnNull;
-  NABoolean isIsolate;
-  ComRoutineExternalSecurity externalSecurity;
-  ComRoutineExecutionMode executionMode;
-  Int32 stateAreaSize;
-  ComRoutineParallelism parallelism;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-  Int32 owner;
-  Int32 schemaOwner;
-
-};
-
-struct library_desc_struct {
-  char *libraryName;
-  char *libraryFilename;
-  Int32 libraryVersion;
-  ComSInt64 libraryUID;
-  Int32 libraryOwnerID;
-  Int32 librarySchemaOwnerID;
-#ifdef NA_LITTLE_ENDIAN
-  void encode() {}
-#endif
-};
-
-union body_struct {
-  check_constrnts_desc_struct check_constrnts_desc;
-  columns_desc_struct columns_desc;
-  constrnts_desc_struct constrnts_desc;
-  constrnt_key_cols_desc_struct constrnt_key_cols_desc;
-  files_desc_struct files_desc;
-  histogram_desc_struct histogram_desc;
-  hist_interval_desc_struct hist_interval_desc;
-  indexes_desc_struct indexes_desc;
-  keys_desc_struct keys_desc;
-  partns_desc_struct partns_desc;
-  ref_constrnts_desc_struct ref_constrnts_desc;
-  table_desc_struct table_desc;
-  view_desc_struct view_desc;
-  using_mv_desc_struct  using_mv_desc;  // MV 
-  sequence_generator_desc_struct  sequence_generator_desc;  
-  hbase_region_desc_struct hbase_region_desc;
-  routine_desc_struct routine_desc;
-  library_desc_struct library_desc;
-};
-
-struct desc_struct {
-  header_desc_struct header;
-  body_struct body;
-
-  void pack(char *buffer);
-  Lng32 getLength(void);
-};
-
-// Used by assembleDescs() to populate the fields of each new desc_struct.
-// // buf and len describe the new data extracted from the source (usually from JNI)
-// // target is the new desc_struct object to populate with.
-// // h is the heap from which memory allocation can be done.
-typedef void (*populateFuncT)(char* buf, Int32 len, desc_struct* target, NAMemory* h);
-
-// uses HEAP of CmpCommon!
-desc_struct *readtabledef_allocate_desc(desc_nodetype nodetype);
-
-desc_struct *readtabledef_make_column_desc(
-				const char *tablename,
-				const char *colname,
-				Lng32 &colnumber,		// INOUT
-				DataType datatype,
-				Lng32 length,
-				Lng32 &offset,			// INOUT
-				short null_flag = FALSE,
-				NABoolean tablenameMustBeAllocated = FALSE,
-				desc_struct *passedDesc = NULL,
-				SQLCHARSET_CODE datacharset = SQLCHARSETCODE_UNKNOWN // i.e., use CharInfo::DefaultCharSet;
-				);
+obsolete file, should not be included. Will give syntax error if it is.
 
 #endif