Github user DaveBirdsall commented on a diff in the pull request:

    https://github.com/apache/incubator-trafodion/pull/194#discussion_r46316310
  
    --- Diff: core/sql/executor/ExExeUtilGet.cpp ---
    @@ -5315,4 +5358,745 @@ 
ExExeUtilHiveMDaccessPrivateState::~ExExeUtilHiveMDaccessPrivateState()
     {
     };
     
    +///////////////////////////////////////////////////////////////////
    +ex_tcb * ExExeUtilRegionStatsTdb::build(ex_globals * glob)
    +{
    +  ExExeUtilRegionStatsTcb * exe_util_tcb;
    +
    +  if (displayFormat())
    +    exe_util_tcb = new(glob->getSpace()) 
ExExeUtilRegionStatsFormatTcb(*this, glob);
    +  else
    +    exe_util_tcb = new(glob->getSpace()) ExExeUtilRegionStatsTcb(*this, 
glob);
    +    
    +  exe_util_tcb->registerSubtasks();
    +
    +  return (exe_util_tcb);
    +}
    +
    +////////////////////////////////////////////////////////////////
    +// Constructor for class ExExeUtilRegionStatsTcb
    +///////////////////////////////////////////////////////////////
    +ExExeUtilRegionStatsTcb::ExExeUtilRegionStatsTcb(
    +     const ComTdbExeUtilRegionStats & exe_util_tdb,
    +     ex_globals * glob)
    +     : ExExeUtilTcb( exe_util_tdb, NULL, glob)
    +{
    +  statsBuf_ = new(glob->getDefaultHeap()) 
char[sizeof(ComTdbRegionStatsVirtTableColumnStruct)];
    +  statsBufLen_ = sizeof(ComTdbRegionStatsVirtTableColumnStruct);
    +
    +  stats_ = (ComTdbRegionStatsVirtTableColumnStruct*)statsBuf_;
    +
    +  inputNameBuf_ = NULL;
    +  if (exe_util_tdb.inputExpr_)
    +    {
    +      inputNameBuf_ = new(glob->getDefaultHeap()) 
char[exe_util_tdb.inputRowlen_];
    +    }
    +
    +  int jniDebugPort = 0;
    +  int jniDebugTimeout = 0;
    +  ehi_ = ExpHbaseInterface::newInstance(glob->getDefaultHeap(),
    +                                   (char*)"", //exe_util_tdb.server(), 
    +                                   (char*)"", //exe_util_tdb.zkPort(),
    +                                        jniDebugPort,
    +                                        jniDebugTimeout);
    +
    +  regionInfoList_ = NULL;
    +  
    +  tableName_ = new(glob->getDefaultHeap()) char[2000];
    +
    +  // get hbase rootdir location
    +  hbaseRootdir_ = new(glob->getDefaultHeap()) char[1000];
    +  strcpy(hbaseRootdir_, "/hbase");
    +
    +  step_ = INITIAL_;
    +}
    +
    +ExExeUtilRegionStatsTcb::~ExExeUtilRegionStatsTcb()
    +{
    +  if (statsBuf_)
    +    NADELETEBASIC(statsBuf_, getGlobals()->getDefaultHeap());
    +
    +  if (ehi_)
    +    delete ehi_;
    +
    +  statsBuf_ = NULL;
    +}
    +
    +//////////////////////////////////////////////////////
    +// work() for ExExeUtilRegionStatsTcb
    +//////////////////////////////////////////////////////
    +Int64 ExExeUtilRegionStatsTcb::getEmbeddedNumValue
    +(char* &sep, char endChar, NABoolean adjustLen)
    +{
    +  Int64 num = -1;
    +  char * sepEnd = strchr(sep+1, endChar);
    +  if (sepEnd)
    +    {
    +      char longBuf[30];
    +
    +      Lng32 len = sepEnd - sep - 1;
    +      str_cpy_all(longBuf, (sep+1), len);
    +      longBuf[len] = 0;                
    +      
    +      num = str_atoi(longBuf, len);
    +
    +      sep += len + 1;
    +
    +      if ((adjustLen) && (num == 0))
    +        num = 1024;
    +    }
    +
    +  return num;
    +}
    +
    +short ExExeUtilRegionStatsTcb::collectStats(char * tableName)
    +{
    +  // populate catName_, schName_, objName_.
    +  if (extractParts(tableName,
    +                   &catName_, &schName_, &objName_))
    +    {
    +      return -1;
    +    }
    +
    +  // collect stats from ehi.
    +  HbaseStr tblName;
    +  
    +  NAString extNameForHbase = 
    +    NAString(catName_) + "." + NAString(schName_) + "." + 
NAString(objName_);
    +  tblName.val = (char*)extNameForHbase.data();
    +  tblName.len = extNameForHbase.length();
    +  
    +  regionInfoList_ = ehi_->getRegionStats(tblName);
    +  if (! regionInfoList_)
    +    {
    +      return -1;
    +    }
    + 
    +  currIndex_ = 0;
    +
    +  return 0;
    +}
    +
    +short ExExeUtilRegionStatsTcb::populateStats
    +(Int32 currIndex, NABoolean nullTerminate)
    +{
    +  str_pad(stats_->catalogName, sizeof(stats_->catalogName), ' ');
    +  str_cpy_all(stats_->catalogName, catName_, strlen(catName_));
    +  if (nullTerminate)
    +    stats_->catalogName[strlen(catName_)] = 0;
    --- End diff --
    
    We declared this field as 256 bytes; should we have declared them 257 to 
allow for the null?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to