[
https://issues.apache.org/jira/browse/TRAFODION-2492?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15880907#comment-15880907
]
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_r102769335
--- 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 --
Just a question: Do we support constraints on Hive exernal tables? For
example a unique or check constraint?
> 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)