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 2 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