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

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

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

    https://github.com/apache/incubator-trafodion/pull/976#discussion_r102809220
  
    --- 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 --
    
    No, we dont support constraints on hive external tables. An error will be 
returned if unique, foreign, or check constraint is specified while creating a 
hive external table. 
    
    On the other question of IMPLICIT keyword, so that can only be used when 
the create stmt
    is issued internally and the internal flag is set. If used externally, a 
syntax error will be returned.
    From functionality pov, there is no difference between an explicit or 
implicit external table.
    
    In showddl output, the implicit keyword shows up as an informational 
comment:
      create /*implicit*/ external table...
    This is similar to how we also show traf internally created system indexes.



> 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