[ 
https://issues.apache.org/jira/browse/TRAFODION-2492?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15881735#comment-15881735
 ] 

ASF GitHub Bot commented on TRAFODION-2492:
-------------------------------------------

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

    https://github.com/apache/incubator-trafodion/pull/976#discussion_r102861976
  
    --- Diff: core/sql/optimizer/NATable.cpp ---
    @@ -5008,541 +5009,546 @@ NABoolean createNAFileSets(TrafDesc * table_desc  
     /*IN*/,
          }
     
        if (table_desc->tableDesc()->isInMemoryObject())
    -   {
    -     setInMemoryObjectDefn( TRUE );
    -   }
    +     {
    +       setInMemoryObjectDefn( TRUE );
    +     }
     
        if (table_desc->tableDesc()->isDroppable())
    -   {
    -     setDroppableTable( TRUE );
    -   }
    +     {
    +       setDroppableTable( TRUE );
    +     }
     
        if (corrName.isExternal())
    -   {
    -     setIsExternalTable(TRUE);
    -   }
    +     {
    +       setIsExternalTable(TRUE);
    +     }
     
        if (qualifiedName_.getQualifiedNameObj().isHistograms() || 
            qualifiedName_.getQualifiedNameObj().isHistogramIntervals())
    -   {
    -     setIsHistogramTable(TRUE);
    -   }
    +     {
    +       setIsHistogramTable(TRUE);
    +     }
      
    -  insertMode_ = table_desc->tableDesc()->insertMode();
    +   insertMode_ = table_desc->tableDesc()->insertMode();
     
    -  setRecordLength(table_desc->tableDesc()->record_length);
    -  //
    -  // Add timestamp information.
    -  //
    -  createTime_ = table_desc->tableDesc()->createTime;
    -  redefTime_  = table_desc->tableDesc()->redefTime;
    -  cacheTime_  = table_desc->tableDesc()->cacheTime;
    +   setRecordLength(table_desc->tableDesc()->record_length);
    +   //
    +   // Add timestamp information.
    +   //
    +   createTime_ = table_desc->tableDesc()->createTime;
    +   redefTime_  = table_desc->tableDesc()->redefTime;
    +   cacheTime_  = table_desc->tableDesc()->cacheTime;
     
    -  catalogUID_ = table_desc->tableDesc()->catUID;
    -  schemaUID_ = table_desc->tableDesc()->schemaUID;
    -  objectUID_ = table_desc->tableDesc()->objectUID;
    +   catalogUID_ = table_desc->tableDesc()->catUID;
    +   schemaUID_ = table_desc->tableDesc()->schemaUID;
    +   objectUID_ = table_desc->tableDesc()->objectUID;
     
    -  // Set the objectUID_ for hbase Cell and Row tables, if the table has
    -  // been defined in Trafodion use this value, otherwise, set to 0
    -  if (isHbaseCell_ || isHbaseRow_)
    -    {
    -      if ( !fetchObjectUIDForNativeTable(corrName) )
    -        return;
    +   // Set the objectUID_ for hbase Cell and Row tables, if the table has
    +   // been defined in Trafodion use this value, otherwise, set to 0
    +   if (isHbaseCell_ || isHbaseRow_)
    +     {
    +       if ( !fetchObjectUIDForNativeTable(corrName) )
    +         return;
     
    -      if (objectUID_ > 0 )
    -        setHasExternalTable(TRUE);
    -    }
    +       if (objectUID_ > 0 )
    +         setHasExternalTable(TRUE);
    +     }
     
    -  if (table_desc->tableDesc()->owner)
    -    {
    -      Int32 userInfo (table_desc->tableDesc()->owner);
    -      owner_ = userInfo;
    -    }
    -  if (table_desc->tableDesc()->schemaOwner)
    -    {
    -      Int32 schemaUser(table_desc->tableDesc()->schemaOwner);
    -      schemaOwner_ = schemaUser;
    -    }
    +   if (table_desc->tableDesc()->owner)
    +     {
    +       Int32 userInfo (table_desc->tableDesc()->owner);
    +       owner_ = userInfo;
    +     }
    +   if (table_desc->tableDesc()->schemaOwner)
    +     {
    +       Int32 schemaUser(table_desc->tableDesc()->schemaOwner);
    +       schemaOwner_ = schemaUser;
    +     }
     
    -  objectType_ = table_desc->tableDesc()->objectType();
    -  partitioningScheme_ = table_desc->tableDesc()->partitioningScheme();
    +   objectType_ = table_desc->tableDesc()->objectType();
    +   partitioningScheme_ = table_desc->tableDesc()->partitioningScheme();
     
    -  // Set up privs
    -  if ((corrName.getSpecialType() == ExtendedQualName::SG_TABLE) ||
    -      (!(corrName.isSeabaseMD() || corrName.isSpecialTable())))
    +   // Set up privs
    +   if ((corrName.getSpecialType() == ExtendedQualName::SG_TABLE) ||
    +       (!(corrName.isSeabaseMD() || corrName.isSpecialTable())))
          getPrivileges(table_desc->tableDesc()->priv_desc);
     
    -  if ((table_desc->tableDesc()->objectFlags & 
SEABASE_OBJECT_IS_EXTERNAL_HIVE) != 0 ||
    -      (table_desc->tableDesc()->objectFlags & 
SEABASE_OBJECT_IS_EXTERNAL_HBASE) != 0)
    -    setIsExternalTable(TRUE);
    -
    -  if (CmpSeabaseDDL::isMDflagsSet
    -      (table_desc->tableDesc()->tablesFlags, MD_TABLES_HIVE_EXT_COL_ATTRS))
    -    setHiveExtColAttrs(TRUE);
    -  if (CmpSeabaseDDL::isMDflagsSet
    -      (table_desc->tableDesc()->tablesFlags, MD_TABLES_HIVE_EXT_KEY_ATTRS))
    -    setHiveExtKeyAttrs(TRUE);
    +   if ((table_desc->tableDesc()->objectFlags & 
SEABASE_OBJECT_IS_EXTERNAL_HIVE) != 0 ||
    +       (table_desc->tableDesc()->objectFlags & 
SEABASE_OBJECT_IS_EXTERNAL_HBASE) != 0)
    +     {
    +       setIsExternalTable(TRUE);
     
    -  if (table_desc->tableDesc()->snapshotName)
    -    {
    -    snapshotName_ =
    -        new(heap_) char[strlen(table_desc->tableDesc()->snapshotName) + 1];
    -      strcpy(snapshotName_, table_desc->tableDesc()->snapshotName);
    -    }
    +       if (table_desc->tableDesc()->objectFlags & 
SEABASE_OBJECT_IS_IMPLICIT_EXTERNAL_HIVE)   
    +         setIsImplicitExternalTable(TRUE);
    +     }
     
    -  if (table_desc->tableDesc()->default_col_fam)
    -    defaultColFam_ = table_desc->tableDesc()->default_col_fam;
    +   if (CmpSeabaseDDL::isMDflagsSet
    +       (table_desc->tableDesc()->tablesFlags, 
MD_TABLES_HIVE_EXT_COL_ATTRS))
    +     setHiveExtColAttrs(TRUE);
    +   if (CmpSeabaseDDL::isMDflagsSet
    +       (table_desc->tableDesc()->tablesFlags, 
MD_TABLES_HIVE_EXT_KEY_ATTRS))
    +     setHiveExtKeyAttrs(TRUE);
     
    -  if (table_desc->tableDesc()->all_col_fams)
    -    {
    -      // Space delimited col families.
    +   if (table_desc->tableDesc()->snapshotName)
    +     {
    +       snapshotName_ =
    +         new(heap_) char[strlen(table_desc->tableDesc()->snapshotName) + 
1];
    +       strcpy(snapshotName_, table_desc->tableDesc()->snapshotName);
    +     }
     
    -       string buf; // Have a buffer string
    -       stringstream ss(table_desc->tableDesc()->all_col_fams); // Insert 
the string into a stream
    +   if (table_desc->tableDesc()->default_col_fam)
    +     defaultColFam_ = table_desc->tableDesc()->default_col_fam;
     
    -       while (ss >> buf)
    -       {
    -               allColFams_.insert(buf.c_str());
    -       }
    -    }
    -  else
    -     allColFams_.insert(defaultColFam_);
    +   if (table_desc->tableDesc()->all_col_fams)
    +     {
    +       // Space delimited col families.
     
    -  TrafDesc * files_desc = table_desc->tableDesc()->files_desc;
    +       string buf; // Have a buffer string
    +       stringstream ss(table_desc->tableDesc()->all_col_fams); // Insert 
the string into a stream
     
    -  // Some objects don't have a file_desc set up (e.g. views)
    -  // Therefore, only setup the partnsDesc_ if this is a partitionable 
object
    -  if (files_desc)
    -  {
    -     if (files_desc->filesDesc()->partns_desc)
    -             partnsDesc_ = files_desc->filesDesc()->partns_desc;
    -  }
    -  else
    -     partnsDesc_ = NULL;
    +       while (ss >> buf)
    +         {
    +           allColFams_.insert(buf.c_str());
    +         }
    +     }
    +   else
    +     allColFams_.insert(defaultColFam_);
     
    -  //
    -  // Insert a NAColumn in the colArray_ for this NATable for each
    -  // columns_desc from the ARK SMD. Returns TRUE if error creating 
NAColumns.
    -  //
    -  if (createNAColumns(table_desc->tableDesc()->columns_desc,
    -                     this,
    -                     colArray_ /*OUT*/,
    -                     heap_))
    -     //coverity[leaked_storage]
    -     return; // colcount_ == 0 indicates an error
    +   TrafDesc * files_desc = table_desc->tableDesc()->files_desc;
     
    -  //
    -  // Add view information, if this is a view
    -  //
    -  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);
    -     }
    +   // Some objects don't have a file_desc set up (e.g. views)
    +   // Therefore, only setup the partnsDesc_ if this is a partitionable 
object
    +   if (files_desc)
    +     {
    +       if (files_desc->filesDesc()->partns_desc)
    +         partnsDesc_ = files_desc->filesDesc()->partns_desc;
    +     }
    +   else
    +     partnsDesc_ = NULL;
     
    -     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, ';');
    -             }
    -     }
    -     setUpdatable(view_desc->viewDesc()->isUpdatable());
    -     setInsertable(view_desc->viewDesc()->isInsertable());
    +   //
    +   // Insert a NAColumn in the colArray_ for this NATable for each
    +   // columns_desc from the ARK SMD. Returns TRUE if error creating 
NAColumns.
    +   //
    +   if (createNAColumns(table_desc->tableDesc()->columns_desc,
    +                       this,
    +                       colArray_ /*OUT*/,
    +                       heap_))
    +     //coverity[leaked_storage]
    +     return; // colcount_ == 0 indicates an error
     
    -     //
    -     // 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.
    -     //
    +   //
    +   // Add view information, if this is a view
    +   //
    +   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);
    +       }
     
    -     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();
    +       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, ';');
    +         }
    +       }
    +       setUpdatable(view_desc->viewDesc()->isUpdatable());
    +       setInsertable(view_desc->viewDesc()->isInsertable());
     
    -     //
    -     // 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
    -     }
    +       //
    +       // 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.
    +       //
     
    -     // Add constraint info.
    -     //
    -     // This call to createConstraintInfo, calls the parser on
    -     // the constraint name
    -     //
    +       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();
     
    -     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;
    -     }
    +       //
    +       // 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
    +       }
     
    -     //
    -     // FetchHistograms call used to be here -- moved to getStatistics().
    -     //
    -  }
    +       // Add constraint info.
    +       //
    +       // This call to createConstraintInfo, calls the parser on
    +       // the constraint name
    +       //
     
    -  // 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 ;
    -     }
    -  }
    +       NABoolean  errorOccurred =
    --- End diff --
    
    Thanks for the info. If I have plenty of spare time someday I'll look into 
non-enforced constraints on Hive tables.


> Add support to access native hive views from trafodion
> ------------------------------------------------------
>
>                 Key: TRAFODION-2492
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-2492
>             Project: Apache Trafodion
>          Issue Type: Improvement
>            Reporter: Anoop Sharma
>            Assignee: Anoop Sharma
>            Priority: Minor
>
> If a native hive view created on hive tables is accessed
> from trafodion, that operation fails and an error is returned.
> This jira is to enhance trafodion to access native hive views
> in traf sql queries.
> A different jira (trafodion-2439) handled the enhancement of creating
> trafodion views on hive tables through trafodion interface. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to