Skip to content
This repository has been archived by the owner on Jun 7, 2021. It is now read-only.

[TRAFODION-2953] Do not merge #1540

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions core/sql/comexe/ComTdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -821,6 +821,7 @@ class ComTdbVirtTableTableInfo : public ComTdbVirtTableBase
const char * allColFams;
Int64 objectFlags; // flags from OBJECTS table
Int64 tablesFlags; // flags from TABLES table
const char * superTable;
};

class ComTdbVirtTableColumnInfo : public ComTdbVirtTableBase
Expand Down
3 changes: 2 additions & 1 deletion core/sql/common/ComSmallDefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -685,7 +685,8 @@ enum ComTextType {COM_VIEW_TEXT = 0,
COM_STORED_DESC_TEXT = 7,
COM_VIEW_REF_COLS_TEXT = 8,
COM_OBJECT_COMMENT_TEXT = COM_TABLE_COMMENT_TEXT,
COM_COLUMN_COMMENT_TEXT = 12
COM_COLUMN_COMMENT_TEXT = 12 ,
COM_SUPER_TABLE_TEXT = 13
};

enum ComColumnDirection { COM_UNKNOWN_DIRECTION
Expand Down
3 changes: 2 additions & 1 deletion core/sql/common/OperTypeEnum.h
Original file line number Diff line number Diff line change
Expand Up @@ -1244,7 +1244,8 @@ enum OperatorTypeEnum {
// Unpublished attributes
ELM_FILE_ATTR_EXTENT_ELEM,
ELM_FILE_ATTR_MAXEXTENTS_ELEM,
ELM_FILE_ATTR_UID_ELEM
ELM_FILE_ATTR_UID_ELEM,
ELM_FILE_ATTR_SUPER_TABLE_ELEM
};

#endif // OPERTYPEENUM_H
34 changes: 32 additions & 2 deletions core/sql/generator/GenPreCode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3777,6 +3777,8 @@ RelExpr * FileScan::preCodeGen(Generator * generator,
myPartFunc->isPartitioned() &&
!myPartFunc->isAReplicationPartitioningFunction());

NABoolean isSmallTable = getTableDesc()->getNATable()->isSmallTable();

if (isRewrittenMV())
generator->setNonCacheableMVQRplan(TRUE);

Expand Down Expand Up @@ -3816,6 +3818,31 @@ RelExpr * FileScan::preCodeGen(Generator * generator,
VEGRewritePairs vegPairs(generator->wHeap());
ValueIdSet partKeyPredsHBase;

if (isSmallTable)
{
ValueId saltCol;
const ValueIdList &keyCols = getIndexDesc()->getIndexKey();

for (CollIndex i=0; i<keyCols.entries(); i++)
{
if (keyCols[i].isSaltColumn() )
{
continue;
}
else
{
saltCol = keyCols[i];
break;
}
}
if (saltCol != NULL_VALUE_ID)
{
((PartitioningFunction*)myPartFunc)->createSmallTableKeyPredicates(getTableDesc()->getNATable()->getTableName().getQualifiedNameAsString().data(), saltCol.getItemExpr());
}
partKeyPredsHBase = myPartFunc->getPartitioningKeyPredicates();
}


if (usePartKeyPreds)
{
// add the partitioning key predicates to this scan node,
Expand Down Expand Up @@ -3844,7 +3871,7 @@ RelExpr * FileScan::preCodeGen(Generator * generator,
createPartitioningKeyPredicatesForSaltedTable(saltCol);
}

partKeyPredsHBase = myPartFunc->getPartitioningKeyPredicates();
partKeyPredsHBase += myPartFunc->getPartitioningKeyPredicates();
}

if (getMdamKeyPtr() != NULL)
Expand Down Expand Up @@ -3918,7 +3945,10 @@ RelExpr * FileScan::preCodeGen(Generator * generator,

if (getSearchKey())
existingKeyPreds += getSearchKey()->getKeyPredicates();


if (isSmallTable)
existingKeyPreds += myPartFunc->getPartitioningKeyPredicates();

// create a new search key that has the partitioning key preds
SearchKey * partKeySearchKey =
myPartFunc->createSearchKey(getIndexDesc(),
Expand Down
24 changes: 21 additions & 3 deletions core/sql/generator/GenRelScan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2438,6 +2438,7 @@ short HbaseAccess::codeGen(Generator * generator)

NABoolean isAlignedFormat = getTableDesc()->getNATable()->isAlignedFormat(getIndexDesc());
NABoolean isHbaseMapFormat = getTableDesc()->getNATable()->isHbaseMapTable();
NABoolean isSmallTable = getTableDesc()->getNATable()->isSmallTable();

// If CIF is not OFF use aligned format, except when table is
// not aligned and it has added columns. Support for added columns
Expand Down Expand Up @@ -2481,7 +2482,14 @@ short HbaseAccess::codeGen(Generator * generator)
{
if (getIndexDesc() && getIndexDesc()->getNAFileSet())
{
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getNAFileSet()->getFileSetName()), 0);
if(getTableDesc()->getNATable()->isSmallTable())
{
NAString st("");
st = getTableDesc()->getNATable()->superTable() ;
tablename = space->AllocateAndCopyToAlignedSpace(st, 0);
}
else
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getNAFileSet()->getFileSetName()), 0);
if (getIndexDesc()->isClusteringIndex())
{
//base table
Expand All @@ -2495,9 +2503,15 @@ short HbaseAccess::codeGen(Generator * generator)
}

if (! tablename)
tablename =
{
if(getTableDesc()->getNATable()->isSmallTable())
tablename =
space->AllocateAndCopyToAlignedSpace( NAString(getTableDesc()->getNATable()->superTable()), 0);
else
tablename =
space->AllocateAndCopyToAlignedSpace(
GenGetQualifiedName(getTableName()), 0);
}

ValueIdList columnList;
if ((getTableDesc()->getNATable()->isSeabaseTable()) &&
Expand Down Expand Up @@ -3410,7 +3424,11 @@ short HbaseAccessCoProcAggr::codeGen(Generator * generator)
}
else
{
tablename =
if (getTableDesc()->getNATable()->isSmallTable())
tablename =
space->AllocateAndCopyToAlignedSpace( NAString(getTableDesc()->getNATable()->superTable()), 0);
else
tablename =
space->AllocateAndCopyToAlignedSpace(
GenGetQualifiedName(getTableName()), 0);
}
Expand Down
32 changes: 24 additions & 8 deletions core/sql/generator/GenRelUpdate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1175,7 +1175,9 @@ short HbaseDelete::codeGen(Generator * generator)
(getTableName().getQualifiedNameObj().isHbaseMappedName()))
{
if (getIndexDesc() && getIndexDesc()->getNAFileSet())
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getNAFileSet()->getFileSetName().getObjectName()), 0);
{
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getNAFileSet()->getFileSetName().getObjectName()), 0);
}
}
else
{
Expand All @@ -1184,9 +1186,14 @@ short HbaseDelete::codeGen(Generator * generator)
}

if (! tablename)
tablename =
space->AllocateAndCopyToAlignedSpace(
{
tablename =
space->AllocateAndCopyToAlignedSpace(
GenGetQualifiedName(getTableName()), 0);
}

if(getTableDesc()->getNATable()->isSmallTable())
strcpy(tablename, NAString(getTableDesc()->getNATable()->superTable()) );

NAString serverNAS = ActiveSchemaDB()->getDefaults().getValue(HBASE_SERVER);
NAString zkPortNAS = ActiveSchemaDB()->getDefaults().getValue(HBASE_ZOOKEEPER_PORT);
Expand Down Expand Up @@ -2138,18 +2145,25 @@ short HbaseUpdate::codeGen(Generator * generator)
(getTableDesc()->getNATable()->isHbaseCellTable()))
{
if (getIndexDesc() && getIndexDesc()->getNAFileSet())
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getNAFileSet()->getFileSetName().getObjectName()), 0);
{
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getNAFileSet()->getFileSetName().getObjectName()), 0);
}
}
else
{
if (getIndexDesc() && getIndexDesc()->getNAFileSet())
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getNAFileSet()->getFileSetName()), 0);
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getNAFileSet()->getFileSetName()), 0);
}

if (! tablename)
{
tablename =
space->AllocateAndCopyToAlignedSpace(
GenGetQualifiedName(getTableName()), 0);
}

if(getTableDesc()->getNATable()->isSmallTable())
strcpy(tablename, NAString(getTableDesc()->getNATable()->superTable()) );

NAString serverNAS = ActiveSchemaDB()->getDefaults().getValue(HBASE_SERVER);
NAString zkPortNAS = ActiveSchemaDB()->getDefaults().getValue(HBASE_ZOOKEEPER_PORT);
Expand All @@ -2165,7 +2179,6 @@ short HbaseUpdate::codeGen(Generator * generator)
// estrowsaccessed is 0 for now, so cache size will be set to minimum
generator->setHBaseNumCacheRows(getEstRowsAccessed().getValue(), hbpa) ;


// create hdfsscan_tdb
ComTdbHbaseAccess *hbasescan_tdb = new(space)
ComTdbHbaseAccess(
Expand Down Expand Up @@ -2768,14 +2781,17 @@ short HbaseInsert::codeGen(Generator *generator)
(getTableDesc()->getNATable()->isHbaseCellTable()) ||
(getTableName().getQualifiedNameObj().isHbaseMappedName()))
{
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getIndexName().getObjectName()), 0);
tablename = space->AllocateAndCopyToAlignedSpace(GenGetQualifiedName(getIndexDesc()->getIndexName().getObjectName()), 0);
}
else
{
tablename = space->AllocateAndCopyToAlignedSpace(
tablename = space->AllocateAndCopyToAlignedSpace(
GenGetQualifiedName(getIndexDesc()->getIndexName()), 0);
}

if(getTableDesc()->getNATable()->isSmallTable())
strcpy(tablename, NAString(getTableDesc()->getNATable()->superTable()) );

NAString serverNAS = ActiveSchemaDB()->getDefaults().getValue(HBASE_SERVER);
NAString zkPortNAS = ActiveSchemaDB()->getDefaults().getValue(HBASE_ZOOKEEPER_PORT);
char * server = space->allocateAlignedSpace(serverNAS.length() + 1);
Expand Down
9 changes: 9 additions & 0 deletions core/sql/generator/Generator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2001,6 +2001,15 @@ TrafDesc * Generator::createVirtualTableDesc
new GENHEAP(space) char[strlen(tableInfo->allColFams)+1];
strcpy(table_desc->tableDesc()->all_col_fams, tableInfo->allColFams);
}
if (tableInfo)
if (tableInfo->superTable != NULL)
{
table_desc->tableDesc()->superTable_=
new GENHEAP(space) char[strlen(tableInfo->superTable)+1];
strcpy(table_desc->tableDesc()->superTable_, tableInfo->superTable);

table_desc->tableDesc()->setSuperTable(tableInfo->superTable);
}

table_desc->tableDesc()->objectFlags = (tableInfo ? tableInfo->objectFlags : 0);
table_desc->tableDesc()->tablesFlags = (tableInfo ? tableInfo->tablesFlags : 0);
Expand Down
2 changes: 2 additions & 0 deletions core/sql/optimizer/BindRI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,8 @@ static NABoolean isHiddenColumn(const char *colname)
int len = strlen(colname);
if(strcmp(colname , "_SALT_") ==0)
return TRUE;
if(strcmp(colname , "_TBLNM_") ==0)
return TRUE;
//check for DIVISION column
//pattern _DIVISION_%d_
//must longer than 12
Expand Down
47 changes: 47 additions & 0 deletions core/sql/optimizer/BindRelExpr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8189,6 +8189,53 @@ RelExpr *Scan::bindNode(BindWA *bindWA)
}
}

if (naTable->isSmallTable())
{
//go through all columns and find out the tblnm
NAColumn *nac = NULL;
for (CollIndex c = 0; c < naTable->getColumnCount(); c++) {
nac = naTable->getNAColumnArray()[c];
if (nac->getColName()=="_TBLNM_")
break;
}

ItemExpr *partPred = NULL;
ColReference *tnmColRef = new(bindWA->wHeap()) ColReference(
new(bindWA->wHeap()) ColRefName(
nac->getFullColRefName(), bindWA->wHeap()));

NAString tb=naTable->getTableName().getQualifiedNameAsAnsiString();

ConstValue *tblnmpart= new (CmpCommon::statementHeap())
ConstValue(
tb, CharInfo::UTF8, CharInfo::DefaultCollation, CharInfo::COERCIBLE ,
CmpCommon::statementHeap()
);
ItemExpr * dataConversionErrorFlag = new(bindWA->wHeap())
HostVar("_sys_dataConversionErrorFlag",
new(CmpCommon::statementHeap()) SQLInt(bindWA->wHeap(), TRUE,FALSE), // int not null
TRUE);
NAType * paramType = new (bindWA->wHeap())
SQLChar(bindWA->wHeap(), 128, FALSE, FALSE);

ItemExpr *n = new(bindWA->wHeap()) Narrow( tblnmpart, dataConversionErrorFlag, paramType, ITM_NARROW , FALSE);
partPred = new(bindWA->wHeap()) BiRelat
(ITM_EQUAL,
tnmColRef,
n);
ItemExpr *newSelPred = removeSelPredTree();

if (newSelPred)
newSelPred = new(bindWA->wHeap()) BiLogic(ITM_AND,
newSelPred,
partPred);
else
newSelPred = partPred;

addSelPredTree(newSelPred->bindNode(bindWA));

}

if (naTable->isHiveTable() &&
!(naTable->getClusteringIndex()->getHHDFSTableStats()->isOrcFile() ||
naTable->getClusteringIndex()->getHHDFSTableStats()
Expand Down
12 changes: 12 additions & 0 deletions core/sql/optimizer/NATable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5170,6 +5170,18 @@ NABoolean NATable::fetchObjectUIDForNativeTable(const CorrName& corrName,
if (table_desc->tableDesc()->default_col_fam)
defaultColFam_ = table_desc->tableDesc()->default_col_fam;

if (table_desc->tableDesc()->hasSuperTable() )
{
if( table_desc->tableDesc()->superTable_ != NULL)
{
superTable_ = new(heap_) char[strlen(table_desc->tableDesc()->superTable_) + 1];
strcpy(superTable_,table_desc->tableDesc()->superTable_);
setHasSuperTable(TRUE);
}
else
printf("LMDBG: Oops!\n");
}

if (table_desc->tableDesc()->all_col_fams)
{
// Space delimited col families.
Expand Down
25 changes: 23 additions & 2 deletions core/sql/optimizer/NATable.h
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,12 @@ class NATable : public NABasicObject
else
return getSQLMXAlignedTable();
}


NABoolean isSmallTable() const
{
return hasSuperTable();
}

NABoolean isAlignedFormat(const IndexDesc *indexDesc) const
{
NABoolean isAlignedFormat;
Expand Down Expand Up @@ -781,6 +786,16 @@ class NATable : public NABasicObject
NABoolean isInternalRegistered() const
{ return (flags_ & IS_INTERNAL_REGISTERED) != 0; }

void setHasSuperTable( NABoolean value )
{
value ? flags_ |= HAS_SUPER_TABLE: flags_ &= ~HAS_SUPER_TABLE;
}

NABoolean hasSuperTable() const
{
return (flags_ & HAS_SUPER_TABLE) != 0;
}

const CheckConstraintList &getCheckConstraints() const
{ return checkConstraints_; }
const AbstractRIConstraintList &getUniqueConstraints() const
Expand Down Expand Up @@ -919,6 +934,8 @@ class NATable : public NABasicObject
static NAArray<HbaseStr>* getRegionsBeginKey(const char* extHBaseName);

NAString &defaultColFam() { return defaultColFam_; }
char *superTable() const {
return superTable_; }
NAList<NAString> &allColFams() { return allColFams_; }

private:
Expand Down Expand Up @@ -1007,7 +1024,8 @@ class NATable : public NABasicObject
HIVE_EXT_KEY_ATTRS = 0x04000000,
IS_IMPLICIT_EXTERNAL_TABLE= 0x08000000,
IS_REGISTERED = 0x10000000,
IS_INTERNAL_REGISTERED = 0x20000000
IS_INTERNAL_REGISTERED = 0x20000000,
HAS_SUPER_TABLE = 0x40000000
};

UInt32 flags_;
Expand Down Expand Up @@ -1232,6 +1250,9 @@ class NATable : public NABasicObject
NAColumnArray newColumns_;

NAString defaultColFam_;

char *superTable_;

NAList<NAString> allColFams_;
}; // class NATable

Expand Down
Loading