Merge branch 'master' into trafodion-2189

Conflicts:
        core/sql/optimizer/NATable.cpp
        core/sql/sqlcomp/PrivMgrDesc.h


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

Branch: refs/heads/master
Commit: b10bc1b0b03e3c13354fadcfb6fea56a6aab1f3f
Parents: 3b43772 66bc826
Author: Roberta Marton <rmarton@edev07.esgyn.local>
Authored: Wed Oct 12 23:18:05 2016 +0000
Committer: Roberta Marton <rmarton@edev07.esgyn.local>
Committed: Wed Oct 12 23:18:05 2016 +0000

----------------------------------------------------------------------
 .../SqlCompilerDebugger/ItemExpressionView.cpp  |   4 +-
 core/sql/arkcmp/CmpContext.cpp                  |   7 +-
 core/sql/arkcmp/CmpStatement.cpp                |   2 +
 core/sql/arkcmp/CmpStoredProc.cpp               |   2 +-
 core/sql/arkcmp/cmpargs.cpp                     |   2 +-
 core/sql/bin/SqlciErrors.txt                    |   2 +-
 core/sql/cli/CliExtern.cpp                      |  16 +-
 core/sql/cli/Context.cpp                        |  21 +-
 core/sql/cli/Globals.cpp                        |  17 +-
 core/sql/comexe/ComTdbSort.h                    |  10 +-
 core/sql/common/BloomFilter.cpp                 |   2 +-
 core/sql/common/ColIndList.h                    |   4 +-
 core/sql/common/Collections.cpp                 |   1 -
 core/sql/common/Collections.h                   |  47 ++-
 core/sql/common/ComExeTrace.cpp                 |   1 +
 core/sql/common/Ipc.h                           |   4 +-
 core/sql/common/NAMemory.cpp                    |   2 +-
 core/sql/common/NATestpoint.cpp                 |   3 +-
 core/sql/common/NATraceList.h                   |   2 +-
 core/sql/executor/ExHbaseAccess.cpp             |   1 +
 core/sql/executor/ExHbaseDDL.cpp                |   2 +-
 core/sql/executor/ex_sort.cpp                   |  16 +-
 core/sql/exp/ExpLOB.h                           |   4 +-
 core/sql/exp/ExpPCodeOptimizations.cpp          |   2 +-
 core/sql/exp/ExpPCodeOptsBulk.cpp               |   4 +-
 core/sql/exp/ExpPCodeOptsNativeExpr.cpp         |   2 +-
 core/sql/exp/exp_tuple_desc.cpp                 |  17 +-
 core/sql/export/ComDiags.cpp                    |   4 +-
 core/sql/generator/GenExplain.cpp               |   2 +-
 core/sql/generator/GenKey.cpp                   |   2 +-
 core/sql/generator/GenRelGrby.cpp               |   2 +-
 core/sql/generator/GenRelJoin.cpp               |   2 +-
 core/sql/generator/GenRelMisc.cpp               |   3 +-
 core/sql/generator/GenRelScan.cpp               |   2 +-
 core/sql/generator/GenRelUpdate.cpp             |  12 +-
 core/sql/generator/GenResources.cpp             |   2 +-
 core/sql/generator/Generator.cpp                |  16 +-
 core/sql/langman/LmRoutineJava.cpp              |   3 +-
 core/sql/langman/LmUtility.cpp                  |   2 +-
 core/sql/nskgmake/sort/Makefile                 |   3 +-
 core/sql/optimizer/Analyzer.cpp                 |  15 +-
 core/sql/optimizer/Analyzer.h                   |   5 +
 core/sql/optimizer/BindItemExpr.cpp             |   6 +-
 core/sql/optimizer/BindRI.cpp                   |   2 +-
 core/sql/optimizer/BindRelExpr.cpp              |  11 +-
 core/sql/optimizer/BindWA.cpp                   |   1 +
 core/sql/optimizer/BindWA.h                     |   2 +-
 core/sql/optimizer/CacheWA.cpp                  |   3 +
 core/sql/optimizer/ColStatDesc.cpp              |  20 +-
 core/sql/optimizer/ControlDB.cpp                |   8 +-
 core/sql/optimizer/EncodedValue.cpp             |   3 +-
 core/sql/optimizer/HDFSHook.cpp                 |   2 +-
 core/sql/optimizer/HbaseSearchSpec.h            |  52 +--
 core/sql/optimizer/ItemFuncUDF.h                |  11 +-
 core/sql/optimizer/ItemOther.h                  |   2 +-
 core/sql/optimizer/LargeScopeRules.cpp          |   4 +-
 core/sql/optimizer/MJVIndexBuilder.cpp          |  12 +-
 core/sql/optimizer/MVCandidates.cpp             |  10 +-
 core/sql/optimizer/MVInfo.cpp                   |  13 +-
 core/sql/optimizer/MVJoinGraph.cpp              |   5 +-
 core/sql/optimizer/MjvBuilder.cpp               |   2 +-
 core/sql/optimizer/MultiJoin.cpp                |   2 +-
 core/sql/optimizer/MvRefreshBuilder.cpp         |   4 +-
 core/sql/optimizer/NAClusterInfo.cpp            |   2 +-
 core/sql/optimizer/NATable.cpp                  | 215 ++++++-------
 core/sql/optimizer/NATable.h                    |   9 +-
 core/sql/optimizer/NodeMap.cpp                  |   2 +-
 core/sql/optimizer/NormRelExpr.cpp              |   8 +-
 core/sql/optimizer/NormWA.cpp                   |   4 +-
 core/sql/optimizer/NormWA.h                     |   8 +
 core/sql/optimizer/OptItemExpr.cpp              |   2 +-
 core/sql/optimizer/OptLogRelExpr.cpp            |   2 +-
 core/sql/optimizer/OptRange.cpp                 |   4 +-
 core/sql/optimizer/QRDescGenerator.cpp          |   2 +-
 core/sql/optimizer/QRDescGenerator.h            |   5 +-
 core/sql/optimizer/RETDesc.cpp                  |  10 +-
 core/sql/optimizer/Refresh.cpp                  |   2 +-
 core/sql/optimizer/RelExeUtil.h                 |   3 +-
 core/sql/optimizer/RelExpr.cpp                  |  29 +-
 core/sql/optimizer/RelPackedRows.cpp            |   2 +-
 core/sql/optimizer/RelRoutine.cpp               |   2 +-
 core/sql/optimizer/RelScan.h                    |   7 +-
 core/sql/optimizer/Rule.cpp                     |   4 +-
 core/sql/optimizer/ScanOptimizer.cpp            |   4 +-
 core/sql/optimizer/SchemaDB.cpp                 |   2 +-
 core/sql/optimizer/SearchKey.cpp                |   6 +-
 core/sql/optimizer/Stats.cpp                    |   3 +-
 core/sql/optimizer/Stats.h                      |  12 +-
 core/sql/optimizer/TableNameMap.h               |   3 +-
 core/sql/optimizer/TransRule.cpp                |   2 +-
 core/sql/optimizer/VEGTable.cpp                 |   6 +-
 core/sql/optimizer/ValueDesc.cpp                |   2 +-
 core/sql/optimizer/memo.cpp                     |   2 +-
 core/sql/parser/ElemDDLHbaseOptions.h           |   3 +-
 core/sql/parser/SqlParserAux.cpp                |   6 +-
 core/sql/parser/StmtDDLCreate.cpp               |   6 +-
 core/sql/parser/sqlparser.y                     |  36 +--
 core/sql/qmscommon/QRLogger.cpp                 |   6 +
 core/sql/qmscommon/Range.cpp                    |   3 +-
 core/sql/qmscommon/Range.h                      |   3 +-
 core/sql/regress/compGeneral/DIFF042.KNOWN      |  36 +--
 core/sql/regress/compGeneral/EXPECTED001.SB     |   2 +-
 core/sql/runtimestats/ssmpipc.cpp               |   5 +-
 core/sql/sort/Qsort.h                           |   5 +-
 core/sql/sort/Record.cpp                        |  14 +-
 core/sql/sort/Record.h                          |   8 +
 core/sql/sort/SortTopN.cpp                      | 318 +++++++++++++++++++
 core/sql/sort/SortTopN.h                        |  89 ++++++
 core/sql/sort/SortUtil.cpp                      |  78 +++--
 core/sql/sort/SortUtil.h                        |   2 +-
 core/sql/sort/SortUtilCfg.cpp                   |  43 +--
 core/sql/sort/SortUtilCfg.h                     |  11 +-
 core/sql/sqlcomp/CmpDescribe.cpp                |   4 +-
 core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp        |  10 +-
 core/sql/sqlcomp/CmpSeabaseDDLindex.cpp         |   8 +-
 core/sql/sqlcomp/CmpSeabaseDDLrepos.cpp         |   4 +-
 core/sql/sqlcomp/CmpSeabaseDDLtable.cpp         |  36 +--
 core/sql/sqlcomp/CmpSeabaseDDLview.cpp          |   4 +-
 core/sql/sqlcomp/DefaultConstants.h             |   1 +
 core/sql/sqlcomp/PrivMgrCommands.cpp            |   4 +-
 core/sql/sqlcomp/PrivMgrDesc.h                  |   6 +-
 core/sql/sqlcomp/PrivMgrPrivileges.cpp          |   8 +-
 core/sql/sqlcomp/QCache.cpp                     |   2 +-
 core/sql/sqlcomp/QCache.h                       |   1 +
 core/sql/sqlcomp/nadefaults.cpp                 |   2 +
 core/sql/sqlcomp/parser.cpp                     |   5 +-
 core/sql/sqlmsg/GetErrorMessage.cpp             |   2 +-
 core/sql/sqlmxevents/logmxevent_traf.cpp        |   2 +-
 .../java/org/trafodion/sql/HBaseClient.java     |  13 +-
 core/sql/udrserv/spinfo.cpp                     |   3 +-
 core/sql/ustat/hs_cli.cpp                       |   2 +-
 core/sql/ustat/hs_parser.cpp                    |   4 +-
 .../src/asciidoc/_chapters/binder_msgs.adoc     | 102 +++---
 docs/messages_guide/src/asciidoc/index.adoc     |   1 +
 install/installer/traf_sqconfig                 |   5 +-
 135 files changed, 1125 insertions(+), 589 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b10bc1b0/core/sql/optimizer/NATable.cpp
----------------------------------------------------------------------
diff --cc core/sql/optimizer/NATable.cpp
index 24cfbf3,b240f17..67ebadd
--- a/core/sql/optimizer/NATable.cpp
+++ b/core/sql/optimizer/NATable.cpp
@@@ -5360,110 -5360,110 +5361,109 @@@ NABoolean createNAFileSets(TrafDesc * t
    //
    TrafDesc *view_desc = table_desc->tableDesc()->views_desc;
    if (view_desc)
 -    {
 -      viewText_ = new (heap_) char[strlen(view_desc->viewDesc()->viewtext) + 
2];
 -      strcpy(viewText_, view_desc->viewDesc()->viewtext);
 -      strcat(viewText_, ";");
 -
 -      viewTextCharSet_ = 
(CharInfo::CharSet)view_desc->viewDesc()->viewtextcharset;
 -
 -      viewCheck_    = NULL; //initialize
 -      if(view_desc->viewDesc()->viewchecktext){
 -        UInt32 viewCheckLength = 
str_len(view_desc->viewDesc()->viewchecktext)+1;
 -        viewCheck_ = new (heap_) char[ viewCheckLength];
 -        memcpy(viewCheck_, view_desc->viewDesc()->viewchecktext,
 -               viewCheckLength);
 -      }
 -
 -      viewColUsages_ = NULL;
 -      if(view_desc->viewDesc()->viewcolusages){
 -        viewColUsages_ = new (heap_) NAList<ComViewColUsage *>(heap_); 
//initialize empty list
 -        char * beginStr (view_desc->viewDesc()->viewcolusages);
 -        char * endStr = strchr(beginStr, ';');
 -        while (endStr != NULL) {
 -          ComViewColUsage *colUsage = new (heap_) ComViewColUsage;
 -          NAString currentUsage(beginStr, endStr - beginStr + 1); 
 -          colUsage->unpackUsage (currentUsage.data());
 -          viewColUsages_->insert(colUsage);
 -          beginStr = endStr+1;
 -          endStr = strchr(beginStr, ';');
 -        }
 -      }
 +  {
 +        viewText_ = new (heap_) char[strlen(view_desc->viewDesc()->viewtext) 
+ 2];
 +        strcpy(viewText_, view_desc->viewDesc()->viewtext);
 +        strcat(viewText_, ";");
 +
 +        viewTextCharSet_ = 
(CharInfo::CharSet)view_desc->viewDesc()->viewtextcharset;
 +
 +        viewCheck_    = NULL; //initialize
 +        if(view_desc->viewDesc()->viewchecktext){
 +                UInt32 viewCheckLength = 
str_len(view_desc->viewDesc()->viewchecktext)+1;
 +                viewCheck_ = new (heap_) char[ viewCheckLength];
 +                memcpy(viewCheck_, view_desc->viewDesc()->viewchecktext,
 +                                viewCheckLength);
 +        }
  
 -      setUpdatable(view_desc->viewDesc()->isUpdatable());
 -      setInsertable(view_desc->viewDesc()->isInsertable());
 +        viewColUsages_ = NULL;
 +        if(view_desc->viewDesc()->viewcolusages){
-                 viewColUsages_ = new (heap_) NAList<ComViewColUsage *>; 
//initialize empty list
++                viewColUsages_ = new (heap_) NAList<ComViewColUsage 
*>(heap_); //initialize empty list
 +                char * beginStr (view_desc->viewDesc()->viewcolusages);
 +                char * endStr = strchr(beginStr, ';');
 +                while (endStr != NULL) {
 +                        ComViewColUsage *colUsage = new (heap_) 
ComViewColUsage;
 +                        NAString currentUsage(beginStr, endStr - beginStr + 
1); 
 +                        colUsage->unpackUsage (currentUsage.data());
 +                        viewColUsages_->insert(colUsage);
 +                        beginStr = endStr+1;
 +                        endStr = strchr(beginStr, ';');
 +                }
 +        }
- 
 +        setUpdatable(view_desc->viewDesc()->isUpdatable());
 +        setInsertable(view_desc->viewDesc()->isInsertable());
  
 -      //
 -      // The updatable flag is false for an MP view only if it is NOT a
 -      // protection view. Therefore updatable == FALSE iff it is a
 -      // shorthand view. See ReadTableDef.cpp, l. 3379.
 -      //
 +        //
 +        // The updatable flag is false for an MP view only if it is NOT a
 +        // protection view. Therefore updatable == FALSE iff it is a
 +        // shorthand view. See ReadTableDef.cpp, l. 3379.
 +        //
  
 -      viewFileName_ = NULL;
 -      CMPASSERT(view_desc->viewDesc()->viewfilename);
 -      UInt32 viewFileNameLength = 
str_len(view_desc->viewDesc()->viewfilename) + 1;
 -      viewFileName_ = new (heap_) char[viewFileNameLength];
 -      memcpy(viewFileName_, view_desc->viewDesc()->viewfilename,
 -           viewFileNameLength);
 -    }
 +        viewFileName_ = NULL;
 +        CMPASSERT(view_desc->viewDesc()->viewfilename);
 +        UInt32 viewFileNameLength = 
str_len(view_desc->viewDesc()->viewfilename) + 1;
 +        viewFileName_ = new (heap_) char[viewFileNameLength];
 +        memcpy(viewFileName_, view_desc->viewDesc()->viewfilename,
 +                        viewFileNameLength);
 +  }
    else
 -    {
 -      //keep track of memory used by NAFileSets
 -      Lng32 preCreateNAFileSetsMemSize = heap_->getAllocSize();
 +  {
 +        //keep track of memory used by NAFileSets
 +        Lng32 preCreateNAFileSetsMemSize = heap_->getAllocSize();
  
 -      //
 -      // Process indexes and vertical partitions for this table.
 -      //
 -      if (createNAFileSets(table_desc       /*IN*/,
 -                           this             /*IN*/,
 -                           colArray_        /*IN*/,
 -                           indexes_         /*OUT*/,
 -                           vertParts_       /*OUT*/,
 -                           clusteringIndex_ /*OUT*/,
 -                         tableIdList_     /*OUT*/,
 -                           heap_,
 -                           bindWA,
 -                           newColumns_,     /*OUT*/
 -                         maxIndexLevelsPtr)) {
 -        return; // colcount_ == 0 indicates an error
 -      }
 +        //
 +        // Process indexes and vertical partitions for this table.
 +        //
 +        if (createNAFileSets(table_desc       /*IN*/,
 +                                this             /*IN*/,
 +                                colArray_        /*IN*/,
 +                                indexes_         /*OUT*/,
 +                                vertParts_       /*OUT*/,
 +                                clusteringIndex_ /*OUT*/,
 +                                tableIdList_     /*OUT*/,
 +                                heap_,
 +                                bindWA,
 +                                newColumns_,     /*OUT*/
 +                                maxIndexLevelsPtr)) {
 +                return; // colcount_ == 0 indicates an error
 +        }
  
 -      // Add constraint info.
 -      //
 -      // This call to createConstraintInfo, calls the parser on
 -      // the constraint name
 -      //
 -      
 -      NABoolean  errorOccurred =
 -        createConstraintInfo(table_desc        /*IN*/,
 -                             getTableName()    /*IN*/,
 -                             getNAColumnArray()/*IN (some columns updated)*/,
 -                             checkConstraints_ /*OUT*/,
 -                             uniqueConstraints_/*OUT*/,
 -                             refConstraints_   /*OUT*/,
 -                             heap_,
 -                             bindWA);
 -      
 -      if (errorOccurred) {
 -        // return before setting colcount_, indicating that there
 -        // was an error in constructing this NATable.
 -        //
 -        return;
 -      }
 -      
 -      //
 -      // FetchHistograms call used to be here -- moved to getStatistics().
 -      //
 -    }
 -  
 -    // change partFunc for base table if PARTITION clause has been used
 -    // to limit the number of partitions that will be accessed.
 -    if ((qualifiedName_.isPartitionNameSpecified()) ||
 -      (qualifiedName_.isPartitionRangeSpecified())) {
 -      if (filterUnusedPartitions(corrName.getPartnClause())) {
 -      return ;
 -      }
 -    }
 +        // Add constraint info.
 +        //
 +        // This call to createConstraintInfo, calls the parser on
 +        // the constraint name
 +        //
 +
 +        NABoolean  errorOccurred =
 +                createConstraintInfo(table_desc        /*IN*/,
 +                                getTableName()    /*IN*/,
 +                                getNAColumnArray()/*IN (some columns 
updated)*/,
 +                                checkConstraints_ /*OUT*/,
 +                                uniqueConstraints_/*OUT*/,
 +                                refConstraints_   /*OUT*/,
 +                                heap_,
 +                                bindWA);
 +
 +        if (errorOccurred) {
 +                // return before setting colcount_, indicating that there
 +                // was an error in constructing this NATable.
 +                //
 +                return;
 +        }
 +
 +        //
 +        // FetchHistograms call used to be here -- moved to getStatistics().
 +        //
 +  }
 +
 +  // change partFunc for base table if PARTITION clause has been used
 +  // to limit the number of partitions that will be accessed.
 +  if ((qualifiedName_.isPartitionNameSpecified()) ||
 +                (qualifiedName_.isPartitionRangeSpecified())) {
 +        if (filterUnusedPartitions(corrName.getPartnClause())) {
 +                return ;
 +        }
 +  }
  
    //
    // Set colcount_ after all possible errors (Binder uses nonzero colcount
@@@ -5773,267 -5771,268 +5773,268 @@@
  
  // Constructor for a Hive table
  NATable::NATable(BindWA *bindWA,
-               const CorrName& corrName,
-               NAMemory *heap,
-               struct hive_tbl_desc* htbl)
-       //
-       // The NATable heap ( i.e. heap_ ) used to come from ContextHeap
-       // (i.e. heap) but it creates high memory usage/leakage in Context
-       // Heap. Although the NATables are deleted at the end of each statement,
-       // the heap_ is returned to heap (i.e. context heap) which caused
-       // context heap containing a lot of not used chunk of memory. So it is
-       // changed to be from whatever heap is passed in at the call in
-       // NATableDB.getNATable.
-       //
-       // Now NATable objects can be cached.If an object is to be cached 
(persisted
-       // across statements) a NATable heap is allocated for the object
-       // and is passed in (this is done in NATableDB::get(CorrName& 
corrName...).
-       // Otherwise a reference to the Statement heap is passed in. When a 
cached
-       // object is to be deleted the object's heap is deleted which wipes out 
the
-       // NATable object all its related stuff. NATable objects that are not 
cached
-       // are wiped out at the end of the statement when the statement heap is 
deleted.
-       //
-       : heap_(heap),
-       referenceCount_(0),
-       refsIncompatibleDP2Halloween_(FALSE),
-       isHalloweenTable_(FALSE),
-       qualifiedName_(corrName.getExtendedQualNameObj(),heap),
-       synonymReferenceName_(heap),
-       fileSetName_(corrName.getQualifiedNameObj(),heap),   // for now, set 
equal
-       clusteringIndex_(NULL),
-       colcount_(0),
-       colArray_(heap),
-       recordLength_(0),
-       indexes_(heap),
-       vertParts_(heap),
-       colStats_(NULL),
-       statsFetched_(FALSE),
-       viewFileName_(NULL),
-       viewText_(NULL),
-       viewTextInNAWchars_(heap),
-       viewTextCharSet_(CharInfo::UnknownCharSet),
-       viewCheck_(NULL),
-       viewColUsages_(NULL),
-       flags_(IS_INSERTABLE | IS_UPDATABLE),
-       insertMode_(COM_REGULAR_TABLE_INSERT_MODE),
-       isSynonymTranslationDone_(FALSE),
-       checkConstraints_(heap),
-       createTime_(htbl->creationTS_),
-       redefTime_(htbl->redeftime()),
-       cacheTime_(0),
-       statsTime_(0),
-       catalogUID_(0),
-       schemaUID_(0),
-       objectUID_(0),
-       objectType_(COM_UNKNOWN_OBJECT),
-       partitioningScheme_(COM_UNKNOWN_PARTITIONING),
-       uniqueConstraints_(heap),
-       refConstraints_(heap),
-       isAnMV_(FALSE),
-       isAnMVMetaData_(FALSE),
-       mvsUsingMe_(heap),
-       mvInfo_(NULL),
-       accessedInCurrentStatement_(TRUE),
-       setupForStatement_(FALSE),
-       resetAfterStatement_(FALSE),
-       hitCount_(0),
-       replacementCounter_(2),
-       sizeInCache_(0),
-       recentlyUsed_(TRUE),
-       tableConstructionHadWarnings_(FALSE),
-       isAnMPTableWithAnsiName_(FALSE),
-       isUMDTable_(FALSE),
-       isSMDTable_(FALSE),
-       isMVUMDTable_(FALSE),
- 
-       // For virtual tables, we set the object schema version
-       // to be the current schema version
-       osv_(COM_VERS_CURR_SCHEMA),
-       ofv_(COM_VERS_CURR_SCHEMA),
-       partnsDesc_(NULL),
-       colsWithMissingStats_(NULL),
-       originalCardinality_(-1.0),
-       tableIdList_(heap),
-       rcb_(NULL),
-       rcbLen_(0),
-       keyLength_(0),
-       parentTableName_(NULL),
-       sgAttributes_(NULL),
-       isHive_(TRUE),
-       isHbase_(FALSE),
-       isHbaseCell_(FALSE),
-       isHbaseRow_(FALSE),
-       isSeabase_(FALSE),
-       isSeabaseMD_(FALSE),
-       isSeabasePrivSchemaTable_(FALSE),
-       isUserUpdatableSeabaseMD_(FALSE),
-       resetHDFSStatsAfterStmt_(FALSE),
-       hiveDefaultStringLen_(0),
-       hiveTableId_(htbl->tblID_),
-       tableDesc_(NULL),
-       secKeySet_(heap),
-       privInfo_(NULL),
-       newColumns_(heap),
-       snapshotName_(NULL)
+                  const CorrName& corrName,
+                NAMemory *heap,
+                struct hive_tbl_desc* htbl)
+   //
+   // The NATable heap ( i.e. heap_ ) used to come from ContextHeap
+   // (i.e. heap) but it creates high memory usage/leakage in Context
+   // Heap. Although the NATables are deleted at the end of each statement,
+   // the heap_ is returned to heap (i.e. context heap) which caused
+   // context heap containing a lot of not used chunk of memory. So it is
+   // changed to be from whatever heap is passed in at the call in
+   // NATableDB.getNATable.
+   //
+   // Now NATable objects can be cached.If an object is to be cached (persisted
+   // across statements) a NATable heap is allocated for the object
+   // and is passed in (this is done in NATableDB::get(CorrName& corrName...).
+   // Otherwise a reference to the Statement heap is passed in. When a cached
+   // object is to be deleted the object's heap is deleted which wipes out the
+   // NATable object all its related stuff. NATable objects that are not cached
+   // are wiped out at the end of the statement when the statement heap is 
deleted.
+   //
+   : heap_(heap),
+     referenceCount_(0),
+     refsIncompatibleDP2Halloween_(FALSE),
+     isHalloweenTable_(FALSE),
+     qualifiedName_(corrName.getExtendedQualNameObj(),heap),
+     synonymReferenceName_(heap),
+     fileSetName_(corrName.getQualifiedNameObj(),heap),   // for now, set equal
+     clusteringIndex_(NULL),
+     colcount_(0),
+     colArray_(heap),
+     recordLength_(0),
+     indexes_(heap),
+     vertParts_(heap),
+     colStats_(NULL),
+     statsFetched_(FALSE),
+     viewFileName_(NULL),
+     viewText_(NULL),
+     viewTextInNAWchars_(heap),
+     viewTextCharSet_(CharInfo::UnknownCharSet),
+     viewCheck_(NULL),
+     viewColUsages_(NULL),
+     flags_(IS_INSERTABLE | IS_UPDATABLE),
+     insertMode_(COM_REGULAR_TABLE_INSERT_MODE),
+     isSynonymTranslationDone_(FALSE),
+     checkConstraints_(heap),
+     createTime_(htbl->creationTS_),
+     redefTime_(htbl->redeftime()),
+     cacheTime_(0),
+     statsTime_(0),
+     catalogUID_(0),
+     schemaUID_(0),
+     objectUID_(0),
+     objectType_(COM_UNKNOWN_OBJECT),
+     partitioningScheme_(COM_UNKNOWN_PARTITIONING),
+     uniqueConstraints_(heap),
+     refConstraints_(heap),
+     isAnMV_(FALSE),
+     isAnMVMetaData_(FALSE),
+     mvsUsingMe_(heap),
+     mvInfo_(NULL),
+     accessedInCurrentStatement_(TRUE),
+     setupForStatement_(FALSE),
+     resetAfterStatement_(FALSE),
+     hitCount_(0),
+     replacementCounter_(2),
+     sizeInCache_(0),
+     recentlyUsed_(TRUE),
+     tableConstructionHadWarnings_(FALSE),
+     isAnMPTableWithAnsiName_(FALSE),
+     isUMDTable_(FALSE),
+     isSMDTable_(FALSE),
+     isMVUMDTable_(FALSE),
+ 
+     // For virtual tables, we set the object schema version
+     // to be the current schema version
+     osv_(COM_VERS_CURR_SCHEMA),
+     ofv_(COM_VERS_CURR_SCHEMA),
+     partnsDesc_(NULL),
+     colsWithMissingStats_(NULL),
+     originalCardinality_(-1.0),
+     tableIdList_(heap),
+     rcb_(NULL),
+     rcbLen_(0),
+     keyLength_(0),
+     parentTableName_(NULL),
+     sgAttributes_(NULL),
+     isHive_(TRUE),
+     isHbase_(FALSE),
+     isHbaseCell_(FALSE),
+     isHbaseRow_(FALSE),
+     isSeabase_(FALSE),
+     isSeabaseMD_(FALSE),
+     isSeabasePrivSchemaTable_(FALSE),
+     isUserUpdatableSeabaseMD_(FALSE),
+     resetHDFSStatsAfterStmt_(FALSE),
+     hiveDefaultStringLen_(0),
+     hiveTableId_(htbl->tblID_),
+     tableDesc_(NULL),
+     secKeySet_(heap),
+     privInfo_(NULL),
+     newColumns_(heap),
+     snapshotName_(NULL),
+     allColFams_(heap)
  {
  
 -  NAString tblName = 
qualifiedName_.getQualifiedNameObj().getQualifiedNameAsString();
 -  NAString mmPhase;
 -
 -  Lng32 preCreateNATableWarnings = 
CmpCommon::diags()->getNumber(DgSqlCode::WARNING_);
 -
 -  //set heap type
 -  if(heap_ == CmpCommon::statementHeap()){
 -    heapType_ = STATEMENT;
 -    mmPhase = "NATable Init (Stmt) - " + tblName;
 -  }else if (heap_ == CmpCommon::contextHeap()){
 -    heapType_ = CONTEXT;
 -    mmPhase = "NATable Init (Cnxt) - " + tblName;
 -  }else {
 -    heapType_ = OTHER;
 -    mmPhase = "NATable Init (Other) - " + tblName;
 -  }
 +      NAString tblName = 
qualifiedName_.getQualifiedNameObj().getQualifiedNameAsString();
 +      NAString mmPhase;
 +
 +      Lng32 preCreateNATableWarnings = 
CmpCommon::diags()->getNumber(DgSqlCode::WARNING_);
 +
 +      //set heap type
 +      if(heap_ == CmpCommon::statementHeap()){
 +              heapType_ = STATEMENT;
 +              mmPhase = "NATable Init (Stmt) - " + tblName;
 +      }else if (heap_ == CmpCommon::contextHeap()){
 +              heapType_ = CONTEXT;
 +              mmPhase = "NATable Init (Cnxt) - " + tblName;
 +      }else {
 +              heapType_ = OTHER;
 +              mmPhase = "NATable Init (Other) - " + tblName;
 +      }
  
 -  MonitorMemoryUsage_Enter((char*)mmPhase.data(), heap_, TRUE);
 +      MonitorMemoryUsage_Enter((char*)mmPhase.data(), heap_, TRUE);
  
  
 -  isTrigTempTable_ = FALSE;
 +      isTrigTempTable_ = FALSE;
  
  
 -  insertMode_ = 
 -     COM_MULTISET_TABLE_INSERT_MODE; // allow dup, to check
 -     //ComInsertMode::COM_MULTISET_TABLE_INSERT_MODE; // allow dup, to check
 +      insertMode_ = 
 +              COM_MULTISET_TABLE_INSERT_MODE; // allow dup, to check
 +      //ComInsertMode::COM_MULTISET_TABLE_INSERT_MODE; // allow dup, to check
  
 -  //
 -  // Add timestamp information.
 -  //
 +      //
 +      // Add timestamp information.
 +      //
  
 -  // To get from Hive
 -/*
 -  createTime_ = longArrayToInt64(table_desc->tableDesc()->createtime);
 -  redefTime_  = longArrayToInt64(table_desc->tableDesc()->redeftime);
 -  cacheTime_  = longArrayToInt64(table_desc->tableDesc()->cachetime);
 -*/
 +      // To get from Hive
 +      /*
 +         createTime_ = longArrayToInt64(table_desc->tableDesc()->createtime);
 +         redefTime_  = longArrayToInt64(table_desc->tableDesc()->redeftime);
 +         cacheTime_  = longArrayToInt64(table_desc->tableDesc()->cachetime);
 +         */
  
 -  // NATable has a schemaUID column, probably should propogate it.
 -  // for now, set to 0.
 -  schemaUID_ = 0;
 +      // NATable has a schemaUID column, probably should propogate it.
 +      // for now, set to 0.
 +      schemaUID_ = 0;
  
 -  // Set the objectUID_
 -  // If the HIVE table has been registered in Trafodion, get the objectUID
 -  // from Trafodion, otherwise, set it to 0.
 -  // TBD - does getQualifiedNameObj handle delimited names correctly?
 -  if ( !fetchObjectUIDForNativeTable(corrName) )
 -     return;
 +      // Set the objectUID_
 +      // If the HIVE table has been registered in Trafodion, get the objectUID
 +      // from Trafodion, otherwise, set it to 0.
 +      // TBD - does getQualifiedNameObj handle delimited names correctly?
 +      if ( !fetchObjectUIDForNativeTable(corrName) )
 +              return;
  
 -  if ( objectUID_ > 0 )
 -    setHasExternalTable(TRUE);
 +      if ( objectUID_ > 0 )
 +              setHasExternalTable(TRUE);
  
 -  // for HIVE objects, the schema owner and table owner is HIVE_ROLE_ID
 -  if (CmpCommon::context()->isAuthorizationEnabled())
 -  {
 -    owner_ = HIVE_ROLE_ID;
 -    schemaOwner_ = HIVE_ROLE_ID;
 -  }
 -  else
 -  {
 -     owner_ = SUPER_USER;
 -     schemaOwner_ = SUPER_USER;
 -  }
 +      // for HIVE objects, the schema owner and table owner is HIVE_ROLE_ID
 +      if (CmpCommon::context()->isAuthorizationEnabled())
 +      {
 +              owner_ = HIVE_ROLE_ID;
 +              schemaOwner_ = HIVE_ROLE_ID;
 +      }
 +      else
 +      {
 +              owner_ = SUPER_USER;
 +              schemaOwner_ = SUPER_USER;
 +      }
  
 -  if (hasExternalTable())
 -    getPrivileges(NULL); 
 +      if (hasExternalTable())
 +              getPrivileges(NULL); 
  
 -  // TBD - if authorization is enabled and there is no external table to store
 -  // privileges, go get privilege information from HIVE metadata ...
 -  
 -  // TBD - add a check to verify that the column list coming from HIVE matches
 -  // the column list stored in the external table.  Maybe some common method
 -  // that can be used to compare other things as well...
 - 
 -  objectType_ = COM_BASE_TABLE_OBJECT;
 +      // TBD - if authorization is enabled and there is no external table to 
store
 +      // privileges, go get privilege information from HIVE metadata ...
  
 -// to check
 -  partitioningScheme_ = COM_UNKNOWN_PARTITIONING;
 +      // TBD - add a check to verify that the column list coming from HIVE 
matches
 +      // the column list stored in the external table.  Maybe some common 
method
 +      // that can be used to compare other things as well...
  
 -// to check
 -  rcb_ = 0;
 -  rcbLen_ = 0;
 -  keyLength_ = 0;
 +      objectType_ = COM_BASE_TABLE_OBJECT;
  
 -  partnsDesc_ = NULL;
 +      // to check
 +      partitioningScheme_ = COM_UNKNOWN_PARTITIONING;
  
 -  //
 -  // Insert a NAColumn in the colArray_ for this NATable for each
 -  // columns_desc from the ARK SMD. Returns TRUE if error creating NAColumns.
 -  //
 +      // to check
 +      rcb_ = 0;
 +      rcbLen_ = 0;
 +      keyLength_ = 0;
  
 -  if (createNAColumns(htbl->getColumns(),
 -                    this,
 -                    colArray_ /*OUT*/,
 -                    heap_))
 -    //coverity[leaked_storage]
 -    return;
 +      partnsDesc_ = NULL;
  
 +      //
 +      // Insert a NAColumn in the colArray_ for this NATable for each
 +      // columns_desc from the ARK SMD. Returns TRUE if error creating 
NAColumns.
 +      //
  
 -  //
 -  // Set colcount_ after all possible errors (Binder uses nonzero colcount
 -  // as an indicator of valid table definition).
 -  //
 +      if (createNAColumns(htbl->getColumns(),
 +                              this,
 +                              colArray_ /*OUT*/,
 +                              heap_))
 +              //coverity[leaked_storage]
 +              return;
  
 -  // To set it via the new createNAColumns()
 -  colcount_ = colArray_.entries();
  
 -  // compute record length from colArray
 +      //
 +      // Set colcount_ after all possible errors (Binder uses nonzero colcount
 +      // as an indicator of valid table definition).
 +      //
  
 -  Int32 recLen = 0;
 -  for ( CollIndex i=0; i<colcount_; i++ ) {
 -    recLen += colArray_[i]->getType()->getNominalSize();
 -  } 
 +      // To set it via the new createNAColumns()
 +      colcount_ = colArray_.entries();
  
 -  setRecordLength(recLen);
 -
 -  if (createNAFileSets(htbl             /*IN*/,
 -                       this             /*IN*/,
 -                       colArray_        /*IN*/,
 -                           indexes_         /*OUT*/,
 -                           vertParts_       /*OUT*/,
 -                           clusteringIndex_ /*OUT*/,
 -                           tableIdList_     /*OUT*/,
 -                           heap_,
 -                           bindWA
 -                           )) {
 -    colcount_ = 0; // indicates failure
 -    return;
 -  }
 +      // compute record length from colArray
  
 -  // HIVE-TBD ignore constraint info creation for now
 +      Int32 recLen = 0;
 +      for ( CollIndex i=0; i<colcount_; i++ ) {
 +              recLen += colArray_[i]->getType()->getNominalSize();
 +      } 
  
 +      setRecordLength(recLen);
  
 -  // If there is a host variable associated with this table, store it
 -  // for use by the generator to generate late-name resolution information.
 -  //
 -  HostVar *hv = corrName.getPrototype();
 -  prototype_ = hv ? new (heap_) HostVar(*hv) : NULL;
 +      if (createNAFileSets(htbl             /*IN*/,
 +                              this             /*IN*/,
 +                              colArray_        /*IN*/,
 +                              indexes_         /*OUT*/,
 +                              vertParts_       /*OUT*/,
 +                              clusteringIndex_ /*OUT*/,
 +                              tableIdList_     /*OUT*/,
 +                              heap_,
 +                              bindWA
 +                          )) {
 +              colcount_ = 0; // indicates failure
 +              return;
 +      }
  
 -  // MV
 -  // Initialize the MV support data members
 -  isAnMV_           = FALSE;
 -  isAnMVMetaData_   = FALSE;
 +      // HIVE-TBD ignore constraint info creation for now
  
 -  Lng32 postCreateNATableWarnings = 
CmpCommon::diags()->getNumber(DgSqlCode::WARNING_);
  
 -  if(postCreateNATableWarnings != preCreateNATableWarnings)
 -    tableConstructionHadWarnings_=TRUE;
 +      // If there is a host variable associated with this table, store it
 +      // for use by the generator to generate late-name resolution 
information.
 +      //
 +      HostVar *hv = corrName.getPrototype();
 +      prototype_ = hv ? new (heap_) HostVar(*hv) : NULL;
  
 -  hiveDefaultStringLen_ = CmpCommon::getDefaultLong(HIVE_MAX_STRING_LENGTH);
 -  Int32 hiveDefaultStringLenInBytes = 
CmpCommon::getDefaultLong(HIVE_MAX_STRING_LENGTH_IN_BYTES);
 -  if( hiveDefaultStringLenInBytes != 32000 ) 
 -      hiveDefaultStringLen_ = hiveDefaultStringLenInBytes;
 +      // MV
 +      // Initialize the MV support data members
 +      isAnMV_           = FALSE;
 +      isAnMVMetaData_   = FALSE;
  
 -// LCOV_EXCL_STOP
 -  initialSize_ = heap_->getAllocSize();
 -  MonitorMemoryUsage_Exit((char*)mmPhase.data(), heap_, NULL, TRUE);
 +      Lng32 postCreateNATableWarnings = 
CmpCommon::diags()->getNumber(DgSqlCode::WARNING_);
 +
 +      if(postCreateNATableWarnings != preCreateNATableWarnings)
 +              tableConstructionHadWarnings_=TRUE;
 +
 +      hiveDefaultStringLen_ = 
CmpCommon::getDefaultLong(HIVE_MAX_STRING_LENGTH);
 +      Int32 hiveDefaultStringLenInBytes = 
CmpCommon::getDefaultLong(HIVE_MAX_STRING_LENGTH_IN_BYTES);
 +      if( hiveDefaultStringLenInBytes != 32000 ) 
 +              hiveDefaultStringLen_ = hiveDefaultStringLenInBytes;
 +
 +      // LCOV_EXCL_STOP
 +      initialSize_ = heap_->getAllocSize();
 +      MonitorMemoryUsage_Exit((char*)mmPhase.data(), heap_, NULL, TRUE);
  } // NATable()
  #pragma warn(770)  // warning elimination
  
@@@ -6890,36 -6885,28 +6891,36 @@@ void NATable::getPrivileges(TrafDesc * 
    if (CmpSeabaseDDL::isSeabasePrivMgrMD
         (qualifiedName_.getQualifiedNameObj().getCatalogName(),
          qualifiedName_.getQualifiedNameObj().getSchemaName()))
 +
 +  {
      isSeabasePrivSchemaTable_ = TRUE;
-     return;
++   return;
 +  }
  
 -  if ((!isSeabaseTable() && !isHiveTable()) ||
 -      !CmpCommon::context()->isAuthorizationEnabled() ||
 -      isVolatileTable() ||
 -      ComUser::isRootUserID()||
 -      ComUser::getCurrentUser() == owner_)
 -    {
 -      privInfo_ = new(heap_) PrivMgrUserPrivs;
 -      privInfo_->setOwnerDefaultPrivs();
 -      return;
 -    }
 -  
 -  // priv_desc could be NULL if NATable is being created for an MD or hive
 -  // table. 
 -  // For hive tables, go ahead and read the privilege manager metadata to 
 -  // extract privs
 -  // Much of the time, MD is read by the compiler/DDL on behalf of the user 
so 
 +  // Most of the time, MD is read by the compiler/DDL on behalf of the user 
so 
    // privilege checks are skipped.  Instead of performing the I/O to get 
    // privilege information at this time, set privInfo_ to NULL and rely on 
    // RelRoot::checkPrivileges to look up privileges. checkPrivileges is 
    // optimized to lookup privileges only when needed.
 +  if (CmpSeabaseDDL::isSeabaseReservedSchema
 +       (qualifiedName_.getQualifiedNameObj().getCatalogName(),
 +        qualifiedName_.getQualifiedNameObj().getSchemaName()))
 +    return;
 +
 +  // If current user is root, object owner, or this is a volatile table
 +  // automatically have owner default privileges.
 +  if ((!isSeabaseTable() && !isHiveTable()) ||
 +       !CmpCommon::context()->isAuthorizationEnabled() ||
 +       isVolatileTable() ||
 +       ComUser::isRootUserID()||
 +       ComUser::getCurrentUser() == owner_)
 +  {
 +    privInfo_ = new(heap_) PrivMgrUserPrivs;
 +    privInfo_->setOwnerDefaultPrivs();
 +    return;
 +  }
 +
-   ComSecurityKeySet secKeyVec;
++  ComSecurityKeySet secKeyVec(heap_);
    if (priv_desc == NULL)
      {
        if (isHiveTable())

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b10bc1b0/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b10bc1b0/core/sql/sqlcomp/PrivMgrCommands.cpp
----------------------------------------------------------------------
diff --cc core/sql/sqlcomp/PrivMgrCommands.cpp
index 6faf70b,550ac64..30b6eea
--- a/core/sql/sqlcomp/PrivMgrCommands.cpp
+++ b/core/sql/sqlcomp/PrivMgrCommands.cpp
@@@ -78,76 -75,69 +78,76 @@@ bool PrivMgrUserPrivs::initUserPrivs
  
    // generate PrivMgrUserPrivs from the priv_desc structure
    TrafDesc *priv_grantees_desc = priv_desc->privDesc()->privGrantees;
-   NAList<PrivMgrDesc> descList;
 -  TrafDesc *priv_grantee_desc = NULL;
 -  TrafDesc *priv_public_desc = NULL;
++  NAList<PrivMgrDesc> descList(NULL);
  
 -  // Find relevant desc for the user
 +  // Find relevant descs for the user
    while (priv_grantees_desc)
    {
      Int32 grantee = priv_grantees_desc->privGranteeDesc()->grantee;
 +    bool addDesc = false;
      if (grantee == userID)
 -      priv_grantee_desc = priv_grantees_desc->privGranteeDesc();
 +      addDesc = true;
 +
 +    if (PrivMgr::isRoleID(grantee))
 +    {
 +      if ((std::find(roleIDs.begin(), roleIDs.end(), grantee)) != 
roleIDs.end())
 +        addDesc = true;
 +    }
  
      if (ComUser::isPublicUserID(grantee))
 -      priv_public_desc = priv_grantees_desc->privGranteeDesc();
 +    {
 +      addDesc = true;
 +      hasPublicPriv_ = true;
 +    }
  
 -    priv_grantees_desc = priv_grantees_desc->next;
 -  }
 +    // Create a list of PrivMgrDesc contain privileges for user, user's roles,
 +    // and public
 +    if (addDesc)
 +    {
 +      TrafDesc *objectPrivs = 
priv_grantees_desc->privGranteeDesc()->objectBitmap;
  
 -  // If the user has a privilege in the priv_grantees_desc list, use it to
 -  // create the PrivMgrUserPrivs class.
 -  if (priv_grantee_desc)
 -  {
 +      PrivMgrCoreDesc objectDesc(objectPrivs->privBitmapDesc()->privBitmap,
 +                                 
objectPrivs->privBitmapDesc()->privWGOBitmap);
 +      
 +      TrafDesc *priv_grantee_desc = priv_grantees_desc->privGranteeDesc();
 +      TrafDesc *columnPrivs = 
priv_grantee_desc->privGranteeDesc()->columnBitmaps;
-       NAList<PrivMgrCoreDesc> columnDescs;
++      NAList<PrivMgrCoreDesc> columnDescs(NULL);
 +      while (columnPrivs)
 +      {
 +        PrivMgrCoreDesc columnDesc(columnPrivs->privBitmapDesc()->privBitmap,
 +                                   
columnPrivs->privBitmapDesc()->privWGOBitmap,
 +                                   
columnPrivs->privBitmapDesc()->columnOrdinal);
 +        columnDescs.insert(columnDesc);
 +        columnPrivs = columnPrivs->next;
 +      }
  
 -    // Set up object level privileges
 -    TrafDesc *objectPrivs = 
priv_grantee_desc->privGranteeDesc()->objectBitmap;
 -    objectBitmap_ = objectPrivs->privBitmapDesc()->privBitmap;
 -    grantableBitmap_ = objectPrivs->privBitmapDesc()->privWGOBitmap;
 +      PrivMgrDesc privs(priv_grantees_desc->privGranteeDesc()->grantee);
 +      privs.setTablePrivs(objectDesc);
 +      privs.setColumnPrivs(columnDescs);
 +      privs.setHasPublicPriv(hasPublicPriv_);
  
 -    // Set up column level privileges
 -    // The PrivColList is a key <=> value pair structure, the key is the
 -    // column ordinal (number) and the value is the associated bitmap.
 -    TrafDesc *columnPrivs = 
priv_grantee_desc->privGranteeDesc()->columnBitmaps;
 -    PrivColList colPrivsList;
 -    PrivColList colGrantableList;
 -    while (columnPrivs)
 -    {
 -      Int32 columnOrdinal = columnPrivs->privBitmapDesc()->columnOrdinal;
 -      colPrivsList[columnOrdinal] = columnPrivs->privBitmapDesc()->privBitmap;
 -      colGrantableList[columnOrdinal] = 
columnPrivs->privBitmapDesc()->privWGOBitmap;
 -      columnPrivs = columnPrivs->next;
 +      descList.insert(privs);
      }
 -    colPrivsList_= colPrivsList;
 -    colGrantableList_ = colGrantableList;
 +    priv_grantees_desc = priv_grantees_desc->next;
    }
  
 -  // See if there are privileges assigned to public.  If so, "or" the public
 -  // list to the user to the current bitmaps. Initially all the bitmap are
 -  // set to 0.
 -  if (priv_public_desc)
 +  // Union privileges from all grantees together to create a single set of
 +  // bitmaps.  Create security invalidation keys
 +  for (int i = 0; i < descList.entries(); i++)
    {
 +    PrivMgrDesc privs = descList[i];
 +
      // Set up object level privileges
 -    TrafDesc *objectPrivs = priv_public_desc->privGranteeDesc()->objectBitmap;
 -    objectBitmap_ |= objectPrivs->privBitmapDesc()->privBitmap;
 -    grantableBitmap_ |= objectPrivs->privBitmapDesc()->privWGOBitmap;
 +    objectBitmap_ |= privs.getTablePrivs().getPrivBitmap();
 +    grantableBitmap_ |= privs.getTablePrivs().getWgoBitmap();
  
      // Set up column level privileges
 -    // The PrivColList is a key <=> value pair structure, the key is the
 -    // column ordinal (number) and the value is the associated bitmap.
 -    TrafDesc *columnPrivs = 
priv_public_desc->privGranteeDesc()->columnBitmaps;
 -    PrivColList colPrivsList;
 -    PrivColList colGrantableList;
 -    std::map<size_t,PrivColumnBitmap>::iterator it; 
 -    while (columnPrivs)
 +    NAList<PrivMgrCoreDesc> columnPrivs = privs.getColumnPrivs();
 +    std::map<size_t,PrivColumnBitmap>::iterator it;
 +    for (int j = 0; j < columnPrivs.entries(); j++)
      {
 -      Int32 columnOrdinal = columnPrivs->privBitmapDesc()->columnOrdinal;
 +      PrivMgrCoreDesc colDesc = columnPrivs[j];
 +      Int32 columnOrdinal = colDesc.getColumnOrdinal();
        it = colPrivsList_.find(columnOrdinal);
        if (it == colPrivsList_.end())
        {

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b10bc1b0/core/sql/sqlcomp/PrivMgrDesc.h
----------------------------------------------------------------------
diff --cc core/sql/sqlcomp/PrivMgrDesc.h
index dc72474,1ebc8ce..13e83a2
--- a/core/sql/sqlcomp/PrivMgrDesc.h
+++ b/core/sql/sqlcomp/PrivMgrDesc.h
@@@ -390,24 -389,21 +390,24 @@@ public
                 const int32_t nbrCols = 0    // preset constructor
                )
     : tableLevel_(),
-      columnLevel_(),
+      columnLevel_(NULL),
 -     grantee_(grantee)
 +     grantee_(grantee),
 +     hasPublicPriv_(false)
    {}
  
     PrivMgrDesc(const PrivMgrDesc &privs,            // preset constructor
                 const int32_t grantee)
     : tableLevel_(privs.tableLevel_),
-      columnLevel_(privs.columnLevel_),
 -    columnLevel_(privs.columnLevel_, NULL),
 -     grantee_(privs.grantee_)
++     columnLevel_(privs.columnLevel_,NULL),
 +     grantee_(privs.grantee_),
 +     hasPublicPriv_(privs.hasPublicPriv_)
     {}
  
     PrivMgrDesc(void)
     : tableLevel_(),
-      columnLevel_(),
+      columnLevel_(NULL),
 -     grantee_(0)
 +     grantee_(0),
 +     hasPublicPriv_(false)
     {}
  
     virtual ~PrivMgrDesc()                 // destructor

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b10bc1b0/core/sql/sqlcomp/PrivMgrPrivileges.cpp
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b10bc1b0/core/sql/sqlcomp/QCache.cpp
----------------------------------------------------------------------


Reply via email to