http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/Generator.cpp ---------------------------------------------------------------------- diff --git a/core/sql/generator/Generator.cpp b/core/sql/generator/Generator.cpp index 466e124..6530a3a 100644 --- a/core/sql/generator/Generator.cpp +++ b/core/sql/generator/Generator.cpp @@ -37,6 +37,7 @@ #include <sys/time.h> #include "dfs2rec.h" +#include "TrafDDLdesc.h" #include "ComOptIncludes.h" #include "GroupAttr.h" @@ -71,6 +72,7 @@ #include "CmUtil.h" #include "PCodeExprCache.h" +#include "TrafDDLdesc.h" // ----------------------------------------------------------------------- // When called within arkcmp.exe, fixupVTblPtr() translates to a call @@ -1485,17 +1487,18 @@ Lng32 Generator::getRecordLength(ComTdbVirtTableIndexInfo * indexInfo, return recLen; } -desc_struct* Generator::createColDescs( +TrafDesc* Generator::createColDescs( const char * tableName, ComTdbVirtTableColumnInfo * columnInfo, Int16 numCols, - UInt32 &offset) + UInt32 &offset, + Space * space) { if (! columnInfo) return NULL; - desc_struct * first_col_desc = NULL; - desc_struct * prev_desc = NULL; + TrafDesc * first_col_desc = NULL; + TrafDesc * prev_desc = NULL; for (Int16 colNum = 0; colNum < numCols; colNum++) { ComTdbVirtTableColumnInfo * info = columnInfo + colNum; @@ -1512,106 +1515,124 @@ desc_struct* Generator::createColDescs( info->datatype == REC_NCHAR_F_UNICODE || info->datatype == REC_NCHAR_V_ANSI_UNICODE)) info_charset = SQLCHARSETCODE_UCS2; - desc_struct * col_desc = readtabledef_make_column_desc( - tableName, - info->colName, - i, - info->datatype, - info->length, - tmpOffset, - (short) info->nullable, - (NABoolean) FALSE, // tablenameMustBeAllocated = FALSE - (desc_struct *) NULL, // passedDesc = NULL - info_charset); + char * colname = new GENHEAP(space) char[strlen(info->colName)+1]; + strcpy(colname, info->colName); + + TrafDesc * col_desc = TrafMakeColumnDesc( + tableName, + colname, //info->colName, + i, + info->datatype, + info->length, + tmpOffset, + info->nullable, + info_charset, + space); + // Virtual tables use SQLARK_EXPLODED_FORMAT in which numeric column - // values are aligned. Ignore readtabledef_make_column_desc's + // values are aligned. Ignore TrafMakeColumnDesc's // offset calculation which doesn't reflect column value alignment. offset = colOffset + info->length; // EXPLAIN__ table uses 22-bit precision REAL values if (info->datatype == REC_FLOAT32) - col_desc->body.columns_desc.precision = 22; + col_desc->columnsDesc()->precision = 22; - col_desc->body.columns_desc.precision = info->precision; + col_desc->columnsDesc()->precision = info->precision; if (DFS2REC::isInterval(info->datatype)) - col_desc->body.columns_desc.intervalleadingprec = info->precision; + col_desc->columnsDesc()->intervalleadingprec = info->precision; - col_desc->body.columns_desc.scale = info->scale; + col_desc->columnsDesc()->scale = info->scale; if ((DFS2REC::isInterval(info->datatype)) || (DFS2REC::isDateTime(info->datatype))) - col_desc->body.columns_desc.datetimefractprec = info->scale; - - col_desc->body.columns_desc.datetimestart = (rec_datetime_field)info->dtStart; - col_desc->body.columns_desc.datetimeend = (rec_datetime_field)info->dtEnd; - - col_desc->body.columns_desc.upshift = (info->upshifted ? 1 : 0); - col_desc->body.columns_desc.caseinsensitive = (short)FALSE; - - col_desc->body.columns_desc.pictureText = new HEAP char[340]; - NAType::convertTypeToText(col_desc->body.columns_desc.pictureText,//OUT - col_desc->body.columns_desc.datatype, - col_desc->body.columns_desc.length, - col_desc->body.columns_desc.precision, - col_desc->body.columns_desc.scale, - col_desc->body.columns_desc.datetimestart, - col_desc->body.columns_desc.datetimeend, - col_desc->body.columns_desc.datetimefractprec, - col_desc->body.columns_desc.intervalleadingprec, - col_desc->body.columns_desc.upshift, - col_desc->body.columns_desc.caseinsensitive, - (CharInfo::CharSet)col_desc->body.columns_desc.character_set, - (CharInfo::Collation)col_desc->body.columns_desc.collation_sequence, + col_desc->columnsDesc()->datetimefractprec = info->scale; + + col_desc->columnsDesc()->datetimestart = (rec_datetime_field)info->dtStart; + col_desc->columnsDesc()->datetimeend = (rec_datetime_field)info->dtEnd; + + col_desc->columnsDesc()->setUpshifted(info->upshifted); + col_desc->columnsDesc()->setCaseInsensitive(FALSE); + + char pt[350]; + NAType::convertTypeToText(pt, //OUT + col_desc->columnsDesc()->datatype, + col_desc->columnsDesc()->length, + col_desc->columnsDesc()->precision, + col_desc->columnsDesc()->scale, + col_desc->columnsDesc()->datetimeStart(), + col_desc->columnsDesc()->datetimeEnd(), + col_desc->columnsDesc()->datetimefractprec, + col_desc->columnsDesc()->intervalleadingprec, + col_desc->columnsDesc()->isUpshifted(), + col_desc->columnsDesc()->isCaseInsensitive(), + (CharInfo::CharSet)col_desc->columnsDesc()->character_set, + (CharInfo::Collation)col_desc->columnsDesc()->collation_sequence, NULL ); - - col_desc->body.columns_desc.defaultClass = info->defaultClass; - if (info->defaultClass == COM_NO_DEFAULT) - col_desc->body.columns_desc.defaultvalue = NULL; + col_desc->columnsDesc()->pictureText + = new GENHEAP(space) char[strlen(pt)+1]; + strcpy(col_desc->columnsDesc()->pictureText, pt); + col_desc->columnsDesc()->setDefaultClass(info->defaultClass); + if ((info->defaultClass == COM_NO_DEFAULT) || + (info->defVal == NULL)) + col_desc->columnsDesc()->defaultvalue = NULL; else - col_desc->body.columns_desc.defaultvalue = (char*)info->defVal; + { + col_desc->columnsDesc()->defaultvalue = new GENHEAP(space) char[strlen(info->defVal) +1]; + strcpy(col_desc->columnsDesc()->defaultvalue, (char*)info->defVal); + } - col_desc->body.columns_desc.colclass = 'U'; - col_desc->body.columns_desc.addedColumn = 0; + col_desc->columnsDesc()->colclass = 'U'; + col_desc->columnsDesc()->setAdded(FALSE); if (info->columnClass == COM_SYSTEM_COLUMN) - col_desc->body.columns_desc.colclass = 'S'; + col_desc->columnsDesc()->colclass = 'S'; else if (info->columnClass == COM_ADDED_USER_COLUMN) { - col_desc->body.columns_desc.colclass = 'A'; - col_desc->body.columns_desc.addedColumn = 1; + col_desc->columnsDesc()->colclass = 'A'; + col_desc->columnsDesc()->setAdded(TRUE); } else if (info->columnClass == COM_ALTERED_USER_COLUMN) { - col_desc->body.columns_desc.colclass = 'C'; - col_desc->body.columns_desc.addedColumn = 1; + col_desc->columnsDesc()->colclass = 'C'; + col_desc->columnsDesc()->setAdded(TRUE); } if (info->colHeading) - col_desc->body.columns_desc.heading = (char*)info->colHeading; + { + col_desc->columnsDesc()->heading = new GENHEAP(space) char[strlen(info->colHeading) + 1]; + strcpy(col_desc->columnsDesc()->heading, info->colHeading); + } else - col_desc->body.columns_desc.hbaseColFam = NULL; + col_desc->columnsDesc()->heading = NULL; if (info->hbaseColFam) - col_desc->body.columns_desc.hbaseColFam = (char*)info->hbaseColFam; + { + col_desc->columnsDesc()->hbaseColFam = new GENHEAP(space) char[strlen(info->hbaseColFam) + 1]; + strcpy(col_desc->columnsDesc()->hbaseColFam, (char*)info->hbaseColFam); + } else - col_desc->body.columns_desc.hbaseColFam = NULL; + col_desc->columnsDesc()->hbaseColFam = NULL; if (info->hbaseColQual) - col_desc->body.columns_desc.hbaseColQual = (char*)info->hbaseColQual; + { + col_desc->columnsDesc()->hbaseColQual = new GENHEAP(space) char[strlen(info->hbaseColQual) + 1]; + strcpy(col_desc->columnsDesc()->hbaseColQual, (char*)info->hbaseColQual); + } else - col_desc->body.columns_desc.hbaseColQual = NULL; + col_desc->columnsDesc()->hbaseColQual = NULL; - col_desc->body.columns_desc.hbaseColFlags = info->hbaseColFlags; + col_desc->columnsDesc()->hbaseColFlags = info->hbaseColFlags; - col_desc->body.columns_desc.paramDirection = - CmGetComDirectionAsComParamDirection(info->paramDirection); - col_desc->body.columns_desc.isOptional = info->isOptional; - col_desc->body.columns_desc.colFlags = info->colFlags; + col_desc->columnsDesc()->setParamDirection( + CmGetComDirectionAsComParamDirection(info->paramDirection)); + col_desc->columnsDesc()->setOptional(info->isOptional); + col_desc->columnsDesc()->colFlags = info->colFlags; if (!first_col_desc) first_col_desc = col_desc; else - prev_desc->header.next = col_desc; + prev_desc->next = col_desc; prev_desc = col_desc; } @@ -1619,14 +1640,13 @@ desc_struct* Generator::createColDescs( return first_col_desc; } -static void initKeyDescStruct(keys_desc_struct * tgt, - const ComTdbVirtTableKeyInfo * src) +static void initKeyDescStruct(TrafKeysDesc * tgt, + const ComTdbVirtTableKeyInfo * src, + Space * space) { - tgt->indexname = NULL; - if (src->colName) { - tgt->keyname = new HEAP char[strlen(src->colName) +1]; + tgt->keyname = new GENHEAP(space) char[strlen(src->colName) +1]; strcpy(tgt->keyname, src->colName); } else @@ -1634,10 +1654,10 @@ static void initKeyDescStruct(keys_desc_struct * tgt, tgt->keyseqnumber = src->keySeqNum; tgt->tablecolnumber = src->tableColNum; - tgt->ordering = src->ordering; + tgt->setDescending(src->ordering ? TRUE : FALSE); if (src->hbaseColFam) { - tgt->hbaseColFam = new HEAP char[strlen(src->hbaseColFam)+1]; + tgt->hbaseColFam = new GENHEAP(space) char[strlen(src->hbaseColFam)+1]; strcpy(tgt->hbaseColFam, src->hbaseColFam); } else @@ -1645,65 +1665,67 @@ static void initKeyDescStruct(keys_desc_struct * tgt, if (src->hbaseColQual) { - tgt->hbaseColQual = new HEAP char[strlen(src->hbaseColQual)+1]; + tgt->hbaseColQual = new GENHEAP(space) char[strlen(src->hbaseColQual)+1]; strcpy(tgt->hbaseColQual, src->hbaseColQual); } else tgt->hbaseColQual = NULL; } -desc_struct * Generator::createKeyDescs(Int32 numKeys, - const ComTdbVirtTableKeyInfo * keyInfo) +TrafDesc * Generator::createKeyDescs(Int32 numKeys, + const ComTdbVirtTableKeyInfo * keyInfo, + Space * space) { - desc_struct * first_key_desc = NULL; + TrafDesc * first_key_desc = NULL; if (keyInfo == NULL) return NULL; // create key descs - desc_struct * prev_desc = NULL; + TrafDesc * prev_desc = NULL; for (Int32 keyNum = 0; keyNum < numKeys; keyNum++) { - desc_struct * key_desc = readtabledef_allocate_desc(DESC_KEYS_TYPE); + TrafDesc * key_desc = TrafAllocateDDLdesc(DESC_KEYS_TYPE, space); if (prev_desc) - prev_desc->header.next = key_desc; + prev_desc->next = key_desc; else first_key_desc = key_desc; prev_desc = key_desc; - initKeyDescStruct(&key_desc->body.keys_desc, - &keyInfo[keyNum]); + initKeyDescStruct(key_desc->keysDesc(), + &keyInfo[keyNum], space); } return first_key_desc; } -desc_struct * Generator::createConstrKeyColsDescs(Int32 numKeys, - ComTdbVirtTableKeyInfo * keyInfo) +TrafDesc * Generator::createConstrKeyColsDescs(Int32 numKeys, + ComTdbVirtTableKeyInfo * keyInfo, + Space * space) { - desc_struct * first_key_desc = NULL; + TrafDesc * first_key_desc = NULL; if (keyInfo == NULL) return NULL; // create key descs - desc_struct * prev_desc = NULL; + TrafDesc * prev_desc = NULL; for (Int32 keyNum = 0; keyNum < numKeys; keyNum++) { - desc_struct * key_desc = readtabledef_allocate_desc(DESC_CONSTRNT_KEY_COLS_TYPE); + TrafDesc * key_desc = TrafAllocateDDLdesc(DESC_CONSTRNT_KEY_COLS_TYPE, space); if (prev_desc) - prev_desc->header.next = key_desc; + prev_desc->next = key_desc; else first_key_desc = key_desc; prev_desc = key_desc; ComTdbVirtTableKeyInfo * src = &keyInfo[keyNum]; - constrnt_key_cols_desc_struct * tgt = &key_desc->body.constrnt_key_cols_desc; + TrafConstrntKeyColsDesc * tgt = key_desc->constrntKeyColsDesc(); if (src->colName) { - tgt->colname = new HEAP char[strlen(src->colName) +1]; + tgt->colname = new GENHEAP(space) char[strlen(src->colName) +1]; strcpy(tgt->colname, src->colName); } else @@ -1716,32 +1738,33 @@ desc_struct * Generator::createConstrKeyColsDescs(Int32 numKeys, } // this method is used to create both referencing and referenced constraint structs. -desc_struct * Generator::createRefConstrDescStructs( +TrafDesc * Generator::createRefConstrDescStructs( Int32 numConstrs, - ComTdbVirtTableRefConstraints * refConstrs) + ComTdbVirtTableRefConstraints * refConstrs, + Space * space) { - desc_struct * first_constr_desc = NULL; + TrafDesc * first_constr_desc = NULL; if ((numConstrs == 0) || (refConstrs == NULL)) return NULL; // create constr descs - desc_struct * prev_desc = NULL; + TrafDesc * prev_desc = NULL; for (Int32 constrNum = 0; constrNum < numConstrs; constrNum++) { - desc_struct * constr_desc = readtabledef_allocate_desc(DESC_REF_CONSTRNTS_TYPE); + TrafDesc * constr_desc = TrafAllocateDDLdesc(DESC_REF_CONSTRNTS_TYPE, space); if (prev_desc) - prev_desc->header.next = constr_desc; + prev_desc->next = constr_desc; else first_constr_desc = constr_desc; prev_desc = constr_desc; ComTdbVirtTableRefConstraints * src = &refConstrs[constrNum]; - ref_constrnts_desc_struct * tgt = &constr_desc->body.ref_constrnts_desc; + TrafRefConstrntsDesc * tgt = constr_desc->refConstrntsDesc(); if (src->constrName) { - tgt->constrntname = new HEAP char[strlen(src->constrName) +1]; + tgt->constrntname = new GENHEAP(space) char[strlen(src->constrName) +1]; strcpy(tgt->constrntname, src->constrName); } else @@ -1749,7 +1772,7 @@ desc_struct * Generator::createRefConstrDescStructs( if (src->baseTableName) { - tgt->tablename = new HEAP char[strlen(src->baseTableName) +1]; + tgt->tablename = new GENHEAP(space) char[strlen(src->baseTableName) +1]; strcpy(tgt->tablename, src->baseTableName); } else @@ -1761,12 +1784,13 @@ desc_struct * Generator::createRefConstrDescStructs( } static Lng32 createDescStructs(char * rforkName, - Int32 numCols, - ComTdbVirtTableColumnInfo * columnInfo, - Int32 numKeys, - ComTdbVirtTableKeyInfo * keyInfo, - desc_struct* &colDescs, - desc_struct* &keyDescs) + Int32 numCols, + ComTdbVirtTableColumnInfo * columnInfo, + Int32 numKeys, + ComTdbVirtTableKeyInfo * keyInfo, + TrafDesc* &colDescs, + TrafDesc* &keyDescs, + Space * space) { colDescs = NULL; keyDescs = NULL; @@ -1774,266 +1798,331 @@ static Lng32 createDescStructs(char * rforkName, // create column descs colDescs = Generator::createColDescs(rforkName, columnInfo, (Int16) numCols, - reclen); + reclen, space); - keyDescs = Generator::createKeyDescs(numKeys, keyInfo); + keyDescs = Generator::createKeyDescs(numKeys, keyInfo, space); return (Lng32) reclen; } -desc_struct * Generator::createVirtualTableDesc( - const char * inTableName, - Int32 numCols, - ComTdbVirtTableColumnInfo * columnInfo, - Int32 numKeys, - ComTdbVirtTableKeyInfo * keyInfo, - Int32 numConstrs, - ComTdbVirtTableConstraintInfo * constrInfo, - Int32 numIndexes, - ComTdbVirtTableIndexInfo * indexInfo, - Int32 numViews, - ComTdbVirtTableViewInfo * viewInfo, - ComTdbVirtTableTableInfo * tableInfo, - ComTdbVirtTableSequenceInfo * seqInfo) -{ - // readtabledef_allocate_desc() requires that HEAP (STMTHEAP) - // be used for operator new herein +static void populateRegionDescForEndKey(char* buf, Int32 len, struct TrafDesc* target) +{ + target->hbaseRegionDesc()->beginKey = NULL; + target->hbaseRegionDesc()->beginKeyLen = 0; + target->hbaseRegionDesc()->endKey = buf; + target->hbaseRegionDesc()->endKeyLen = len; +} + +static void populateRegionDescAsRANGE(char* buf, Int32 len, struct TrafDesc* target, NAMemory*, Space*) +{ + target->nodetype = DESC_HBASE_RANGE_REGION_TYPE; + populateRegionDescForEndKey(buf, len, target); +} - const char * tableName = (tableInfo ? tableInfo->tableName : inTableName); - desc_struct * table_desc = readtabledef_allocate_desc(DESC_TABLE_TYPE); - table_desc->body.table_desc.tablename = new HEAP char[strlen(tableName)+1]; - strcpy(table_desc->body.table_desc.tablename, tableName); +// +// Produce a list of TrafDesc objects. In each object, the body_struct +// field points at hbaseRegion_desc. The order of the keyinfo, obtained from +// org.apache.hadoop.hbase.client.HTable.getEndKey(), is preserved. +// +// Allocate space from STMTHEAP, per the call of this function +// in CmpSeabaseDDL::getSeabaseTableDesc() and the +// Generator::createVirtualTableDesc() call make before this one that +// uses STMTPHEAP througout. +// +TrafDesc* Generator::assembleDescs( + NAArray<HbaseStr >* keyArray, + NAMemory* heap, + Space * space) +{ + if (keyArray == NULL) + return NULL; + + TrafDesc *result = NULL; + Int32 entries = keyArray->entries(); + Int32 len = 0; + char* buf = NULL; + + for (Int32 i=entries-1; i>=0; i-- ) { + len = keyArray->at(i).len; + if ( len > 0 ) { + buf = new GENHEAP(space) char[len]; + memcpy(buf, keyArray->at(i).val, len); + } else + buf = NULL; + + TrafDesc* wrapper = + TrafAllocateDDLdesc(DESC_HBASE_RANGE_REGION_TYPE, space); + + populateRegionDescAsRANGE(buf, len, wrapper, heap, space); + + wrapper->next = result; + result = wrapper; + } + + return result; +} + +TrafDesc * Generator::createVirtualTableDesc +( + const char * inTableName, + Int32 numCols, + ComTdbVirtTableColumnInfo * columnInfo, + Int32 numKeys, + ComTdbVirtTableKeyInfo * keyInfo, + Int32 numConstrs, + ComTdbVirtTableConstraintInfo * constrInfo, + Int32 numIndexes, + ComTdbVirtTableIndexInfo * indexInfo, + Int32 numViews, + ComTdbVirtTableViewInfo * viewInfo, + ComTdbVirtTableTableInfo * tableInfo, + ComTdbVirtTableSequenceInfo * seqInfo, + NAArray<HbaseStr>* endKeyArray, + char * snapshotName, + NABoolean genPackedDesc, + Int32 * packedDescLen, + NABoolean isUserTable + ) +{ + // If genPackedDesc is set, then use Space class to allocate descriptors and + // returned contiguous packed copy of it. + // This packed copy will be stored in metadata. + + Space lSpace(ComSpace::GENERATOR_SPACE); + Space * space = NULL; + if (genPackedDesc) + space = &lSpace; + const char * tableName = (tableInfo ? tableInfo->tableName : inTableName); + TrafDesc * table_desc = TrafAllocateDDLdesc(DESC_TABLE_TYPE, space); + table_desc->tableDesc()->tablename = new GENHEAP(space) char[strlen(tableName)+1]; + strcpy(table_desc->tableDesc()->tablename, tableName); + + table_desc->tableDesc()->tableDescFlags = 0; + table_desc->tableDesc()->catUID = 0; + table_desc->tableDesc()->schemaUID = 0; if (tableInfo) { - convertInt64ToUInt32Array(tableInfo->createTime, table_desc->body.table_desc.createtime); - convertInt64ToUInt32Array(tableInfo->redefTime, table_desc->body.table_desc.redeftime); - convertInt64ToUInt32Array(tableInfo->objUID, table_desc->body.table_desc.objectUID); + table_desc->tableDesc()->createTime = tableInfo->createTime; + table_desc->tableDesc()->redefTime = tableInfo->redefTime; + table_desc->tableDesc()->objectUID = tableInfo->objUID; } else { - *(Int64*)&table_desc->body.table_desc.createtime = 0; - *(Int64*)&table_desc->body.table_desc.redeftime = 0; + table_desc->tableDesc()->createTime = 0; + table_desc->tableDesc()->redefTime = 0; ComUID comUID; comUID.make_UID(); Int64 objUID = comUID.get_value(); - *(Int64*)&table_desc->body.table_desc.objectUID = objUID; + table_desc->tableDesc()->objectUID = objUID; } - table_desc->body.table_desc.issystemtablecode = 1; - table_desc->body.table_desc.underlyingFileType = SQLMX; - table_desc->body.table_desc.rowcount = 100; + if (isUserTable) + table_desc->tableDesc()->setSystemTableCode(FALSE); + else + table_desc->tableDesc()->setSystemTableCode(TRUE); if (tableInfo) - table_desc->body.table_desc.rowFormat = - tableInfo->rowFormat ; + table_desc->tableDesc()->setRowFormat(tableInfo->rowFormat); if (CmpCommon::context()->sqlSession()->validateVolatileName(tableName)) - table_desc->body.table_desc.isVolatile = 1; + table_desc->tableDesc()->setVolatileTable(TRUE); else - table_desc->body.table_desc.isVolatile = 0; + table_desc->tableDesc()->setVolatileTable(FALSE); if (numViews > 0) - table_desc->body.table_desc.objectType = COM_VIEW_OBJECT; + table_desc->tableDesc()->setObjectType(COM_VIEW_OBJECT); else if ((seqInfo) && (! columnInfo)) - table_desc->body.table_desc.objectType = COM_SEQUENCE_GENERATOR_OBJECT; + table_desc->tableDesc()->setObjectType(COM_SEQUENCE_GENERATOR_OBJECT); else - table_desc->body.table_desc.objectType = COM_BASE_TABLE_OBJECT; + table_desc->tableDesc()->setObjectType(COM_BASE_TABLE_OBJECT); - table_desc->body.table_desc.owner = (tableInfo ? tableInfo->objOwnerID : SUPER_USER); - table_desc->body.table_desc.schemaOwner = (tableInfo ? tableInfo->schemaOwnerID : SUPER_USER); + table_desc->tableDesc()->owner = (tableInfo ? tableInfo->objOwnerID : SUPER_USER); + table_desc->tableDesc()->schemaOwner = (tableInfo ? tableInfo->schemaOwnerID : SUPER_USER); if (tableInfo && tableInfo->defaultColFam) { - table_desc->body.table_desc.default_col_fam = - new HEAP char[strlen(tableInfo->defaultColFam)+1]; - strcpy(table_desc->body.table_desc.default_col_fam, tableInfo->defaultColFam); + table_desc->tableDesc()->default_col_fam = + new GENHEAP(space) char[strlen(tableInfo->defaultColFam)+1]; + strcpy(table_desc->tableDesc()->default_col_fam, tableInfo->defaultColFam); } if (tableInfo && tableInfo->allColFams) { - table_desc->body.table_desc.all_col_fams = - new HEAP char[strlen(tableInfo->allColFams)+1]; - strcpy(table_desc->body.table_desc.all_col_fams, tableInfo->allColFams); + table_desc->tableDesc()->all_col_fams = + new GENHEAP(space) char[strlen(tableInfo->allColFams)+1]; + strcpy(table_desc->tableDesc()->all_col_fams, tableInfo->allColFams); } - table_desc->body.table_desc.objectFlags = (tableInfo ? tableInfo->objectFlags : 0); - table_desc->body.table_desc.tablesFlags = (tableInfo ? tableInfo->tablesFlags : 0); + table_desc->tableDesc()->objectFlags = (tableInfo ? tableInfo->objectFlags : 0); + table_desc->tableDesc()->tablesFlags = (tableInfo ? tableInfo->tablesFlags : 0); - desc_struct * files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE); - // files_desc->body.files_desc.audit = -1; // audited table - files_desc->body.files_desc.audit = (tableInfo ? tableInfo->isAudited : -1); + TrafDesc * files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, space); + files_desc->filesDesc()->setAudited(tableInfo ? tableInfo->isAudited : -1); - files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE; - table_desc->body.table_desc.files_desc = files_desc; + table_desc->tableDesc()->files_desc = files_desc; - desc_struct * cols_descs = NULL; - desc_struct * keys_descs = NULL; - table_desc->body.table_desc.colcount = numCols; - table_desc->body.table_desc.record_length = - createDescStructs(table_desc->body.table_desc.tablename, + TrafDesc * cols_descs = NULL; + TrafDesc * keys_descs = NULL; + table_desc->tableDesc()->colcount = numCols; + table_desc->tableDesc()->record_length = + createDescStructs(table_desc->tableDesc()->tablename, numCols, columnInfo, numKeys, keyInfo, - cols_descs, keys_descs); + cols_descs, keys_descs, space); - desc_struct * first_constr_desc = NULL; + TrafDesc * first_constr_desc = NULL; if (numConstrs > 0) { - desc_struct * prev_desc = NULL; + TrafDesc * prev_desc = NULL; for (int i = 0; i < numConstrs; i++) { - desc_struct * curr_constr_desc = readtabledef_allocate_desc(DESC_CONSTRNTS_TYPE); + TrafDesc * curr_constr_desc = TrafAllocateDDLdesc(DESC_CONSTRNTS_TYPE, space); if (! first_constr_desc) first_constr_desc = curr_constr_desc; - curr_constr_desc->body.constrnts_desc.tablename = new HEAP char[strlen(constrInfo[i].baseTableName)+1]; - strcpy(curr_constr_desc->body.constrnts_desc.tablename, constrInfo[i].baseTableName); + curr_constr_desc->constrntsDesc()->tablename = new GENHEAP(space) char[strlen(constrInfo[i].baseTableName)+1]; + strcpy(curr_constr_desc->constrntsDesc()->tablename, constrInfo[i].baseTableName); - curr_constr_desc->body.constrnts_desc.constrntname = new HEAP char[strlen(constrInfo[i].constrName)+1]; - strcpy(curr_constr_desc->body.constrnts_desc.constrntname, constrInfo[i].constrName); + curr_constr_desc->constrntsDesc()->constrntname = new GENHEAP(space) char[strlen(constrInfo[i].constrName)+1]; + strcpy(curr_constr_desc->constrntsDesc()->constrntname, constrInfo[i].constrName); - curr_constr_desc->body.constrnts_desc.indexname = NULL; - - curr_constr_desc->body.constrnts_desc.check_constrnts_desc = NULL; - curr_constr_desc->body.constrnts_desc.isEnforced = constrInfo[i].isEnforced; + curr_constr_desc->constrntsDesc()->check_constrnts_desc = NULL; + curr_constr_desc->constrntsDesc()->setEnforced(constrInfo[i].isEnforced); switch (constrInfo[i].constrType) { case 0: // unique_constr - curr_constr_desc->body.constrnts_desc.type = UNIQUE_CONSTRAINT; + curr_constr_desc->constrntsDesc()->type = UNIQUE_CONSTRAINT; break; case 1: // ref_constr - curr_constr_desc->body.constrnts_desc.type = REF_CONSTRAINT; + curr_constr_desc->constrntsDesc()->type = REF_CONSTRAINT; break; case 2: // check_constr - curr_constr_desc->body.constrnts_desc.type = CHECK_CONSTRAINT; + curr_constr_desc->constrntsDesc()->type = CHECK_CONSTRAINT; break; case 3: // pkey_constr - curr_constr_desc->body.constrnts_desc.type = PRIMARY_KEY_CONSTRAINT; + curr_constr_desc->constrntsDesc()->type = PRIMARY_KEY_CONSTRAINT; break; } // switch - curr_constr_desc->body.constrnts_desc.colcount = constrInfo[i].colCount; + curr_constr_desc->constrntsDesc()->colcount = constrInfo[i].colCount; - curr_constr_desc->body.constrnts_desc.constr_key_cols_desc = - Generator::createConstrKeyColsDescs(constrInfo[i].colCount, constrInfo[i].keyInfoArray); + curr_constr_desc->constrntsDesc()->constr_key_cols_desc = + Generator::createConstrKeyColsDescs(constrInfo[i].colCount, constrInfo[i].keyInfoArray, space); if (constrInfo[i].ringConstrArray) { - curr_constr_desc->body.constrnts_desc.referencing_constrnts_desc = + curr_constr_desc->constrntsDesc()->referencing_constrnts_desc = Generator::createRefConstrDescStructs(constrInfo[i].numRingConstr, - constrInfo[i].ringConstrArray); + constrInfo[i].ringConstrArray, space); } if (constrInfo[i].refdConstrArray) { - curr_constr_desc->body.constrnts_desc.referenced_constrnts_desc = + curr_constr_desc->constrntsDesc()->referenced_constrnts_desc = Generator::createRefConstrDescStructs(constrInfo[i].numRefdConstr, - constrInfo[i].refdConstrArray); + constrInfo[i].refdConstrArray, space); } if ((constrInfo[i].constrType == 2) && // check constr (constrInfo[i].checkConstrLen > 0)) { - desc_struct * check_constr_desc = readtabledef_allocate_desc(DESC_CHECK_CONSTRNTS_TYPE); + TrafDesc * check_constr_desc = TrafAllocateDDLdesc(DESC_CHECK_CONSTRNTS_TYPE, space); - check_constr_desc->body.check_constrnts_desc.seqnumber = 1; - check_constr_desc->body.check_constrnts_desc.constrnt_text = - new HEAP char[constrInfo[i].checkConstrLen + 1]; - memcpy(check_constr_desc->body.check_constrnts_desc.constrnt_text, + check_constr_desc->checkConstrntsDesc()->constrnt_text = + new GENHEAP(space) char[constrInfo[i].checkConstrLen + 1]; + memcpy(check_constr_desc->checkConstrntsDesc()->constrnt_text, constrInfo[i].checkConstrText, constrInfo[i].checkConstrLen); - check_constr_desc->body.check_constrnts_desc.constrnt_text + check_constr_desc->checkConstrntsDesc()->constrnt_text [constrInfo[i].checkConstrLen] = 0; - curr_constr_desc->body.constrnts_desc.check_constrnts_desc = + curr_constr_desc->constrntsDesc()->check_constrnts_desc = check_constr_desc; } if (prev_desc) - prev_desc->header.next = curr_constr_desc; + prev_desc->next = curr_constr_desc; prev_desc = curr_constr_desc; } // for } - desc_struct * index_desc = readtabledef_allocate_desc(DESC_INDEXES_TYPE); - index_desc->body.indexes_desc.tablename = table_desc->body.table_desc.tablename; - index_desc->body.indexes_desc.indexname = table_desc->body.table_desc.tablename; - index_desc->body.indexes_desc.keytag = 0; // primary index - index_desc->body.indexes_desc.indexUID = 0; - index_desc->body.indexes_desc.record_length = table_desc->body.table_desc.record_length; - index_desc->body.indexes_desc.colcount = table_desc->body.table_desc.colcount; - index_desc->body.indexes_desc.isVerticalPartition = 0; - index_desc->body.indexes_desc.blocksize = 32*1024; //100000; //4096; // doesn't matter. - index_desc->body.indexes_desc.isVolatile = table_desc->body.table_desc.isVolatile; - index_desc->body.indexes_desc.hbaseCreateOptions = NULL; - index_desc->body.indexes_desc.numSaltPartns = 0; - index_desc->body.indexes_desc.rowFormat = table_desc->body.table_desc.rowFormat; + TrafDesc * index_desc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, space); + index_desc->indexesDesc()->tablename = table_desc->tableDesc()->tablename; + index_desc->indexesDesc()->indexname = table_desc->tableDesc()->tablename; + index_desc->indexesDesc()->keytag = 0; // primary index + index_desc->indexesDesc()->indexUID = 0; + index_desc->indexesDesc()->record_length = table_desc->tableDesc()->record_length; + index_desc->indexesDesc()->colcount = table_desc->tableDesc()->colcount; + index_desc->indexesDesc()->blocksize = 32*1024; + index_desc->indexesDesc()->setVolatile(table_desc->tableDesc()->isVolatileTable()); + index_desc->indexesDesc()->hbaseCreateOptions = NULL; + index_desc->indexesDesc()->numSaltPartns = 0; + index_desc->indexesDesc()->setRowFormat(table_desc->tableDesc()->rowFormat()); if (tableInfo) { - index_desc->body.indexes_desc.indexUID = tableInfo->objUID; + index_desc->indexesDesc()->indexUID = tableInfo->objUID; - index_desc->body.indexes_desc.numSaltPartns = tableInfo->numSaltPartns; + index_desc->indexesDesc()->numSaltPartns = tableInfo->numSaltPartns; if (tableInfo->hbaseCreateOptions) { - index_desc->body.indexes_desc.hbaseCreateOptions = - new HEAP char[strlen(tableInfo->hbaseCreateOptions) + 1]; - strcpy(index_desc->body.indexes_desc.hbaseCreateOptions, + index_desc->indexesDesc()->hbaseCreateOptions = + new GENHEAP(space) char[strlen(tableInfo->hbaseCreateOptions) + 1]; + strcpy(index_desc->indexesDesc()->hbaseCreateOptions, tableInfo->hbaseCreateOptions); } } if (numIndexes > 0) { - desc_struct * prev_desc = index_desc; + TrafDesc * prev_desc = index_desc; for (int i = 0; i < numIndexes; i++) { - desc_struct * curr_index_desc = readtabledef_allocate_desc(DESC_INDEXES_TYPE); + TrafDesc * curr_index_desc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, space); - prev_desc->header.next = curr_index_desc; + prev_desc->next = curr_index_desc; - curr_index_desc->body.indexes_desc.tablename = new HEAP char[strlen(indexInfo[i].baseTableName)+1]; - strcpy(curr_index_desc->body.indexes_desc.tablename, indexInfo[i].baseTableName); + curr_index_desc->indexesDesc()->tablename = new GENHEAP(space) char[strlen(indexInfo[i].baseTableName)+1]; + strcpy(curr_index_desc->indexesDesc()->tablename, indexInfo[i].baseTableName); - curr_index_desc->body.indexes_desc.indexname = new HEAP char[strlen(indexInfo[i].indexName)+1]; - strcpy(curr_index_desc->body.indexes_desc.indexname, indexInfo[i].indexName); + curr_index_desc->indexesDesc()->indexname = new GENHEAP(space) char[strlen(indexInfo[i].indexName)+1]; + strcpy(curr_index_desc->indexesDesc()->indexname, indexInfo[i].indexName); - curr_index_desc->body.indexes_desc.indexUID = indexInfo[i].indexUID; - curr_index_desc->body.indexes_desc.keytag = indexInfo[i].keytag; - curr_index_desc->body.indexes_desc.unique = indexInfo[i].isUnique; - curr_index_desc->body.indexes_desc.isCreatedExplicitly = indexInfo[i].isExplicit; - curr_index_desc->body.indexes_desc.record_length = + curr_index_desc->indexesDesc()->indexUID = indexInfo[i].indexUID; + curr_index_desc->indexesDesc()->keytag = indexInfo[i].keytag; + curr_index_desc->indexesDesc()->setUnique(indexInfo[i].isUnique); + curr_index_desc->indexesDesc()->setExplicit(indexInfo[i].isExplicit); + curr_index_desc->indexesDesc()->record_length = getRecordLength(&indexInfo[i], columnInfo); - curr_index_desc->body.indexes_desc.colcount = indexInfo[i].keyColCount + indexInfo[i].nonKeyColCount; - curr_index_desc->body.indexes_desc.isVerticalPartition = 0; - curr_index_desc->body.indexes_desc.blocksize = 32*1024; //100000; //4096; // doesn't matter. + curr_index_desc->indexesDesc()->colcount = indexInfo[i].keyColCount + indexInfo[i].nonKeyColCount; + curr_index_desc->indexesDesc()->blocksize = 32*1024; - curr_index_desc->body.indexes_desc.keys_desc = - Generator::createKeyDescs(indexInfo[i].keyColCount, indexInfo[i].keyInfoArray); + curr_index_desc->indexesDesc()->keys_desc = + Generator::createKeyDescs(indexInfo[i].keyColCount, indexInfo[i].keyInfoArray, space); - curr_index_desc->body.indexes_desc.non_keys_desc = - Generator::createKeyDescs(indexInfo[i].nonKeyColCount, indexInfo[i].nonKeyInfoArray); + curr_index_desc->indexesDesc()->non_keys_desc = + Generator::createKeyDescs(indexInfo[i].nonKeyColCount, indexInfo[i].nonKeyInfoArray, space); if (CmpCommon::context()->sqlSession()->validateVolatileName(indexInfo[i].indexName)) - curr_index_desc->body.indexes_desc.isVolatile = 1; + curr_index_desc->indexesDesc()->setVolatile(TRUE); else - curr_index_desc->body.indexes_desc.isVolatile = 0; - curr_index_desc->body.indexes_desc.hbaseCreateOptions = NULL; - curr_index_desc->body.indexes_desc.numSaltPartns = + curr_index_desc->indexesDesc()->setVolatile(FALSE); + curr_index_desc->indexesDesc()->hbaseCreateOptions = NULL; + curr_index_desc->indexesDesc()->numSaltPartns = indexInfo[i].numSaltPartns; - curr_index_desc->body.indexes_desc.rowFormat = - indexInfo[i].rowFormat; + curr_index_desc->indexesDesc()->setRowFormat(indexInfo[i].rowFormat); if (indexInfo[i].hbaseCreateOptions) { - curr_index_desc->body.indexes_desc.hbaseCreateOptions = - new HEAP char[strlen(indexInfo[i].hbaseCreateOptions) + 1]; - strcpy(curr_index_desc->body.indexes_desc.hbaseCreateOptions, + curr_index_desc->indexesDesc()->hbaseCreateOptions = + new GENHEAP(space) char[strlen(indexInfo[i].hbaseCreateOptions) + 1]; + strcpy(curr_index_desc->indexesDesc()->hbaseCreateOptions, indexInfo[i].hbaseCreateOptions); } @@ -2042,144 +2131,177 @@ desc_struct * Generator::createVirtualTableDesc( } } - desc_struct * view_desc = NULL; + TrafDesc * view_desc = NULL; if (numViews > 0) { - view_desc = readtabledef_allocate_desc(DESC_VIEW_TYPE); + view_desc = TrafAllocateDDLdesc(DESC_VIEW_TYPE, space); - view_desc->body.view_desc.viewname = new HEAP char[strlen(viewInfo[0].viewName)+1]; - strcpy(view_desc->body.view_desc.viewname, viewInfo[0].viewName); + view_desc->viewDesc()->viewname = new GENHEAP(space) char[strlen(viewInfo[0].viewName)+1]; + strcpy(view_desc->viewDesc()->viewname, viewInfo[0].viewName); - view_desc->body.view_desc.viewfilename = view_desc->body.view_desc.viewname; - view_desc->body.view_desc.viewtext = new HEAP char[strlen(viewInfo[0].viewText) + 1]; - strcpy(view_desc->body.view_desc.viewtext, viewInfo[0].viewText); + view_desc->viewDesc()->viewfilename = view_desc->viewDesc()->viewname; + view_desc->viewDesc()->viewtext = new GENHEAP(space) char[strlen(viewInfo[0].viewText) + 1]; + strcpy(view_desc->viewDesc()->viewtext, viewInfo[0].viewText); - view_desc->body.view_desc.viewtextcharset = (CharInfo::CharSet)SQLCHARSETCODE_UTF8; + view_desc->viewDesc()->viewtextcharset = (CharInfo::CharSet)SQLCHARSETCODE_UTF8; if (viewInfo[0].viewCheckText) { - view_desc->body.view_desc.viewchecktext = new HEAP char[strlen(viewInfo[0].viewCheckText)+1]; - strcpy(view_desc->body.view_desc.viewchecktext, viewInfo[0].viewCheckText); + view_desc->viewDesc()->viewchecktext = new GENHEAP(space) char[strlen(viewInfo[0].viewCheckText)+1]; + strcpy(view_desc->viewDesc()->viewchecktext, viewInfo[0].viewCheckText); } else - view_desc->body.view_desc.viewchecktext = NULL; + view_desc->viewDesc()->viewchecktext = NULL; - view_desc->body.view_desc.updatable = viewInfo[0].isUpdatable; - view_desc->body.view_desc.insertable = viewInfo[0].isInsertable; + view_desc->viewDesc()->setUpdatable(viewInfo[0].isUpdatable); + view_desc->viewDesc()->setInsertable(viewInfo[0].isInsertable); } - desc_struct * seq_desc = NULL; + TrafDesc * seq_desc = NULL; if (seqInfo) { - seq_desc = readtabledef_allocate_desc(DESC_SEQUENCE_GENERATOR_TYPE); + seq_desc = TrafAllocateDDLdesc(DESC_SEQUENCE_GENERATOR_TYPE, space); - seq_desc->body.sequence_generator_desc.sgType = (ComSequenceGeneratorType)seqInfo->seqType; + seq_desc->sequenceGeneratorDesc()->setSgType((ComSequenceGeneratorType)seqInfo->seqType); - seq_desc->body.sequence_generator_desc.fsDataType = (ComFSDataType)seqInfo->datatype; - seq_desc->body.sequence_generator_desc.startValue = seqInfo->startValue; - seq_desc->body.sequence_generator_desc.increment = seqInfo->increment; + seq_desc->sequenceGeneratorDesc()->fsDataType = (ComFSDataType)seqInfo->datatype; + seq_desc->sequenceGeneratorDesc()->startValue = seqInfo->startValue; + seq_desc->sequenceGeneratorDesc()->increment = seqInfo->increment; - seq_desc->body.sequence_generator_desc.maxValue = seqInfo->maxValue; - seq_desc->body.sequence_generator_desc.minValue = seqInfo->minValue; - seq_desc->body.sequence_generator_desc.cycleOption = + seq_desc->sequenceGeneratorDesc()->maxValue = seqInfo->maxValue; + seq_desc->sequenceGeneratorDesc()->minValue = seqInfo->minValue; + seq_desc->sequenceGeneratorDesc()->cycleOption = (seqInfo->cycleOption ? TRUE : FALSE); - seq_desc->body.sequence_generator_desc.cache = seqInfo->cache; - seq_desc->body.sequence_generator_desc.objectUID = seqInfo->seqUID; + seq_desc->sequenceGeneratorDesc()->cache = seqInfo->cache; + seq_desc->sequenceGeneratorDesc()->objectUID = seqInfo->seqUID; - seq_desc->body.sequence_generator_desc.nextValue = seqInfo->nextValue; - seq_desc->body.sequence_generator_desc.redefTime = seqInfo->redefTime; + seq_desc->sequenceGeneratorDesc()->nextValue = seqInfo->nextValue; + seq_desc->sequenceGeneratorDesc()->redefTime = seqInfo->redefTime; } // cannot simply point to same files desc as the table one, // because then ReadTableDef::deleteTree frees same memory twice (error) - desc_struct * i_files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE); - i_files_desc->body.files_desc.audit = -1; // audited table - i_files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE; - index_desc->body.indexes_desc.files_desc = i_files_desc; - - index_desc->body.indexes_desc.keys_desc = keys_descs; - table_desc->body.table_desc.columns_desc = cols_descs; - table_desc->body.table_desc.indexes_desc = index_desc; - table_desc->body.table_desc.views_desc = view_desc; - table_desc->body.table_desc.constrnts_desc = first_constr_desc; - table_desc->body.table_desc.constr_count = numConstrs; - table_desc->body.table_desc.sequence_generator_desc = seq_desc; + TrafDesc * i_files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, space); + i_files_desc->filesDesc()->setAudited(TRUE); // audited table + index_desc->indexesDesc()->files_desc = i_files_desc; + + index_desc->indexesDesc()->keys_desc = keys_descs; + table_desc->tableDesc()->columns_desc = cols_descs; + table_desc->tableDesc()->indexes_desc = index_desc; + table_desc->tableDesc()->views_desc = view_desc; + table_desc->tableDesc()->constrnts_desc = first_constr_desc; + table_desc->tableDesc()->constr_count = numConstrs; + table_desc->tableDesc()->sequence_generator_desc = seq_desc; + + if (endKeyArray) + { + // create a list of region descriptors + table_desc->tableDesc()->hbase_regionkey_desc = + assembleDescs(endKeyArray, STMTHEAP, space); + } + + if (snapshotName != NULL) + { + table_desc->tableDesc()->snapshotName = + new GENHEAP(space) char[strlen(snapshotName) + 1]; + strcpy(table_desc->tableDesc()->snapshotName, snapshotName); + } + + if (genPackedDesc && space) + { + // pack generated desc and move it to a contiguous buffer before return. + DescStructPtr((TrafDesc*)table_desc).pack(space); + + Lng32 allocSize = space->getAllocatedSpaceSize(); + char * contigTableDesc = new HEAP char[allocSize]; + if (! space->makeContiguous(contigTableDesc, allocSize)) + { + table_desc = NULL; + return table_desc; + } + + table_desc = (TrafDesc*)contigTableDesc; + + if (packedDescLen) + *packedDescLen = allocSize; + } return table_desc; } - -desc_struct *Generator::createVirtualLibraryDesc( - const char *libraryName, - ComTdbVirtTableLibraryInfo *libraryInfo) - +TrafDesc *Generator::createVirtualLibraryDesc( + const char *libraryName, + ComTdbVirtTableLibraryInfo *libraryInfo, + Space * space) { - desc_struct *library_desc = readtabledef_allocate_desc(DESC_LIBRARY_TYPE); - library_desc->body.library_desc.libraryName = new HEAP char[strlen(libraryName) + 1]; - strcpy(library_desc->body.library_desc.libraryName, libraryName); - library_desc->body.library_desc.libraryFilename = new HEAP char[strlen(libraryInfo->library_filename) + 1]; - strcpy(library_desc->body.library_desc.libraryFilename, libraryInfo->library_filename); - library_desc->body.library_desc.libraryVersion = libraryInfo->library_version; - library_desc->body.library_desc.libraryUID = libraryInfo->library_UID; - library_desc->body.library_desc.libraryOwnerID = libraryInfo->object_owner_id; - library_desc->body.library_desc.librarySchemaOwnerID = libraryInfo->schema_owner_id; + TrafDesc *library_desc = TrafAllocateDDLdesc(DESC_LIBRARY_TYPE, space); + library_desc->libraryDesc()->libraryName = new GENHEAP(space) char[strlen(libraryName) + 1]; + strcpy(library_desc->libraryDesc()->libraryName, libraryName); + library_desc->libraryDesc()->libraryFilename = new GENHEAP(space) char[strlen(libraryInfo->library_filename) + 1]; + strcpy(library_desc->libraryDesc()->libraryFilename, libraryInfo->library_filename); + library_desc->libraryDesc()->libraryVersion = libraryInfo->library_version; + library_desc->libraryDesc()->libraryUID = libraryInfo->library_UID; + library_desc->libraryDesc()->libraryOwnerID = libraryInfo->object_owner_id; + library_desc->libraryDesc()->librarySchemaOwnerID = libraryInfo->schema_owner_id; return library_desc; } -desc_struct *Generator::createVirtualRoutineDesc( - const char *routineName, - ComTdbVirtTableRoutineInfo *routineInfo, - Int32 numParams, - ComTdbVirtTableColumnInfo *paramsArray) -{ - desc_struct *routine_desc = readtabledef_allocate_desc(DESC_ROUTINE_TYPE); - routine_desc->body.routine_desc.objectUID = routineInfo->object_uid; - routine_desc->body.routine_desc.routineName = new HEAP char[strlen(routineName)+1]; - strcpy(routine_desc->body.routine_desc.routineName, routineName); - routine_desc->body.routine_desc.externalName = new HEAP char[strlen(routineInfo->external_name)+1]; - strcpy(routine_desc->body.routine_desc.externalName, routineInfo->external_name); - routine_desc->body.routine_desc.librarySqlName = NULL; - routine_desc->body.routine_desc.libraryFileName = new HEAP char[strlen(routineInfo->library_filename)+1]; - strcpy(routine_desc->body.routine_desc.libraryFileName, routineInfo->library_filename); - routine_desc->body.routine_desc.signature = new HEAP char[strlen(routineInfo->signature)+1]; - strcpy(routine_desc->body.routine_desc.signature, routineInfo->signature); - routine_desc->body.routine_desc.librarySqlName = new HEAP char[strlen(routineInfo->library_sqlname)+1]; - strcpy(routine_desc->body.routine_desc.librarySqlName, routineInfo->library_sqlname); - routine_desc->body.routine_desc.language = +TrafDesc *Generator::createVirtualRoutineDesc( + const char *routineName, + ComTdbVirtTableRoutineInfo *routineInfo, + Int32 numParams, + ComTdbVirtTableColumnInfo *paramsArray, + Space * space) +{ + TrafDesc *routine_desc = TrafAllocateDDLdesc(DESC_ROUTINE_TYPE, space); + routine_desc->routineDesc()->objectUID = routineInfo->object_uid; + routine_desc->routineDesc()->routineName = new GENHEAP(space) char[strlen(routineName)+1]; + strcpy(routine_desc->routineDesc()->routineName, routineName); + routine_desc->routineDesc()->externalName = new GENHEAP(space) char[strlen(routineInfo->external_name)+1]; + strcpy(routine_desc->routineDesc()->externalName, routineInfo->external_name); + routine_desc->routineDesc()->librarySqlName = NULL; + routine_desc->routineDesc()->libraryFileName = new GENHEAP(space) char[strlen(routineInfo->library_filename)+1]; + strcpy(routine_desc->routineDesc()->libraryFileName, routineInfo->library_filename); + routine_desc->routineDesc()->signature = new GENHEAP(space) char[strlen(routineInfo->signature)+1]; + strcpy(routine_desc->routineDesc()->signature, routineInfo->signature); + routine_desc->routineDesc()->librarySqlName = new GENHEAP(space) char[strlen(routineInfo->library_sqlname)+1]; + strcpy(routine_desc->routineDesc()->librarySqlName, routineInfo->library_sqlname); + routine_desc->routineDesc()->language = CmGetComRoutineLanguageAsRoutineLanguage(routineInfo->language_type); - routine_desc->body.routine_desc.UDRType = + routine_desc->routineDesc()->UDRType = CmGetComRoutineTypeAsRoutineType(routineInfo->UDR_type); - routine_desc->body.routine_desc.sqlAccess = + routine_desc->routineDesc()->sqlAccess = CmGetComRoutineSQLAccessAsRoutineSQLAccess(routineInfo->sql_access); - routine_desc->body.routine_desc.transactionAttributes = + routine_desc->routineDesc()->transactionAttributes = CmGetComRoutineTransactionAttributesAsRoutineTransactionAttributes (routineInfo->transaction_attributes); - routine_desc->body.routine_desc.maxResults = routineInfo->max_results; - routine_desc->body.routine_desc.paramStyle = + routine_desc->routineDesc()->maxResults = routineInfo->max_results; + routine_desc->routineDesc()->paramStyle = CmGetComRoutineParamStyleAsRoutineParamStyle(routineInfo->param_style); - routine_desc->body.routine_desc.isDeterministic = routineInfo->deterministic; - routine_desc->body.routine_desc.isCallOnNull = routineInfo->call_on_null; - routine_desc->body.routine_desc.isIsolate = routineInfo->isolate; - routine_desc->body.routine_desc.externalSecurity = + routine_desc->routineDesc()->isDeterministic = routineInfo->deterministic; + routine_desc->routineDesc()->isCallOnNull = routineInfo->call_on_null; + routine_desc->routineDesc()->isIsolate = routineInfo->isolate; + routine_desc->routineDesc()->externalSecurity = CmGetRoutineExternalSecurityAsComRoutineExternalSecurity (routineInfo->external_security); - routine_desc->body.routine_desc.executionMode = + routine_desc->routineDesc()->executionMode = CmGetRoutineExecutionModeAsComRoutineExecutionMode (routineInfo->execution_mode); - routine_desc->body.routine_desc.stateAreaSize = routineInfo->state_area_size; - routine_desc->body.routine_desc.parallelism = + routine_desc->routineDesc()->stateAreaSize = routineInfo->state_area_size; + routine_desc->routineDesc()->parallelism = CmGetRoutineParallelismAsComRoutineParallelism(routineInfo->parallelism); UInt32 reclen; - routine_desc->body.routine_desc.paramsCount = numParams; - routine_desc->body.routine_desc.params = + routine_desc->routineDesc()->paramsCount = numParams; + routine_desc->routineDesc()->params = Generator::createColDescs(routineName, - paramsArray, (Int16) numParams, reclen); - routine_desc->body.routine_desc.owner = routineInfo->object_owner_id; - routine_desc->body.routine_desc.schemaOwner = routineInfo->schema_owner_id; + paramsArray, (Int16) numParams, reclen, + space); + routine_desc->routineDesc()->owner = routineInfo->object_owner_id; + routine_desc->routineDesc()->schemaOwner = routineInfo->schema_owner_id; return routine_desc; }
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/generator/Generator.h ---------------------------------------------------------------------- diff --git a/core/sql/generator/Generator.h b/core/sql/generator/Generator.h index 58b9571..c3093a3 100644 --- a/core/sql/generator/Generator.h +++ b/core/sql/generator/Generator.h @@ -1370,45 +1370,61 @@ public: static Lng32 getRecordLength(ComTdbVirtTableIndexInfo * indexInfo, ComTdbVirtTableColumnInfo * columnInfoArray); - static desc_struct *createColDescs( - const char * tableName, - ComTdbVirtTableColumnInfo * columnInfo, - Int16 numCols, - UInt32 &offset); - - static desc_struct * createKeyDescs(Int32 numKeys, - const ComTdbVirtTableKeyInfo * keyInfo); + static TrafDesc *createColDescs( + const char * tableName, + ComTdbVirtTableColumnInfo * columnInfo, + Int16 numCols, + UInt32 &offset, + Space * space); + + static TrafDesc * createKeyDescs(Int32 numKeys, + const ComTdbVirtTableKeyInfo * keyInfo, + Space * space); - static desc_struct * createConstrKeyColsDescs(Int32 numKeys, - ComTdbVirtTableKeyInfo * keyInfo); + static TrafDesc * createConstrKeyColsDescs(Int32 numKeys, + ComTdbVirtTableKeyInfo * keyInfo, + Space * space); - static desc_struct * createRefConstrDescStructs( + static TrafDesc * createRefConstrDescStructs( Int32 numConstrs, - ComTdbVirtTableRefConstraints * refConstrs); + ComTdbVirtTableRefConstraints * refConstrs, + Space * space); - static desc_struct *createVirtualTableDesc( - const char * tableName, - Int32 numCols, - ComTdbVirtTableColumnInfo * columnInfo, - Int32 numKeys, - ComTdbVirtTableKeyInfo * keyInfo, - Int32 numConstrs = 0, - ComTdbVirtTableConstraintInfo * constrInfo = NULL, - Int32 numIndexes = 0, - ComTdbVirtTableIndexInfo * indexInfo = NULL, - Int32 numViews = 0, - ComTdbVirtTableViewInfo * viewInfo = NULL, - ComTdbVirtTableTableInfo * tableInfo = NULL, - ComTdbVirtTableSequenceInfo * seqInfo = NULL); - - static desc_struct *createVirtualRoutineDesc( + static TrafDesc *createVirtualTableDesc( + const char * tableName, + Int32 numCols, + ComTdbVirtTableColumnInfo * columnInfo, + Int32 numKeys, + ComTdbVirtTableKeyInfo * keyInfo, + Int32 numConstrs = 0, + ComTdbVirtTableConstraintInfo * constrInfo = NULL, + Int32 numIndexes = 0, + ComTdbVirtTableIndexInfo * indexInfo = NULL, + Int32 numViews = 0, + ComTdbVirtTableViewInfo * viewInfo = NULL, + ComTdbVirtTableTableInfo * tableInfo = NULL, + ComTdbVirtTableSequenceInfo * seqInfo = NULL, + NAArray<HbaseStr>* endKeyArray = NULL, + char * snapshotName = NULL, + NABoolean genPackedDesc = FALSE, + Int32 * packedDescLen = NULL, + NABoolean isUserTable = FALSE); + + static TrafDesc* assembleDescs( + NAArray<HbaseStr >* keyArray, + NAMemory* heap, + Space * space); + + static TrafDesc *createVirtualRoutineDesc( const char *routineName, ComTdbVirtTableRoutineInfo *routineInfo, Int32 numParams, - ComTdbVirtTableColumnInfo *paramsArray); - static desc_struct *createVirtualLibraryDesc( + ComTdbVirtTableColumnInfo *paramsArray, + Space * space); + static TrafDesc *createVirtualLibraryDesc( const char *libraryName, - ComTdbVirtTableLibraryInfo *libraryInfo); + ComTdbVirtTableLibraryInfo *libraryInfo, + Space * space); static short genAndEvalExpr( CmpContext * cmpContext, char * exprStr, Lng32 numChildren, http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/nskgmake/sqlcat/Makefile ---------------------------------------------------------------------- diff --git a/core/sql/nskgmake/sqlcat/Makefile b/core/sql/nskgmake/sqlcat/Makefile index 1255927..74e4e58 100755 --- a/core/sql/nskgmake/sqlcat/Makefile +++ b/core/sql/nskgmake/sqlcat/Makefile @@ -23,5 +23,6 @@ CPPSRC := readRealArk.cpp \ ReadTableDef.cpp \ + TrafDDLdesc.cpp \ vers_libsqlcat.cpp http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/BindItemExpr.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp index 0561f8d..789587d 100644 --- a/core/sql/optimizer/BindItemExpr.cpp +++ b/core/sql/optimizer/BindItemExpr.cpp @@ -78,6 +78,7 @@ #include "CmpSeabaseDDL.h" #include "QCache.h" +#include "TrafDDLdesc.h" #include "exp_datetime.h" #include <stack> @@ -9277,8 +9278,8 @@ ItemExpr *UDFunction::bindNode(BindWA *bindWA) // Find UDF in cache or metadata - desc_struct *udfMetadata = NULL; - desc_struct *oldUdfMetadata = NULL; // not used, just to get code to compile + TrafDesc *udfMetadata = NULL; + TrafDesc *oldUdfMetadata = NULL; // not used, just to get code to compile CmpSeabaseDDL cmpSBD(heap); try @@ -9426,7 +9427,7 @@ ItemExpr *UDFunction::bindNode(BindWA *bindWA) ComRoutineType udrType; if (CmpCommon::getDefault(COMP_BOOL_191) == DF_OFF) { - udrType = udfMetadata->body.routine_desc.UDRType ; + udrType = udfMetadata->routineDesc()->UDRType ; } if (udrType != COM_SCALAR_UDF_TYPE && http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/BindRI.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/BindRI.cpp b/core/sql/optimizer/BindRI.cpp index 1b3d138..7d9354c 100644 --- a/core/sql/optimizer/BindRI.cpp +++ b/core/sql/optimizer/BindRI.cpp @@ -86,7 +86,7 @@ */ #endif // documentation - +#include "TrafDDLdesc.h" #include "BindWA.h" #include "ItemConstr.h" #include "NATable.h" @@ -185,21 +185,21 @@ AbstractRIConstraint *AbstractRIConstraint::findConstraint( } // AbstractRIConstraint::findConstraint void AbstractRIConstraint::setKeyColumns( - const struct constrnts_desc_struct *desc, - CollHeap *heap) + const struct TrafConstrntsDesc *desc, + CollHeap *heap) { - struct constrnt_key_cols_desc_struct *colDesc; + TrafConstrntKeyColsDesc *colDesc; NAColumn *column; CollIndex i = 0; - struct desc_struct *keyColDesc = desc->constr_key_cols_desc; + TrafDesc *keyColDesc = desc->constr_key_cols_desc; while (keyColDesc) { - colDesc = &keyColDesc->body.constrnt_key_cols_desc; + colDesc = keyColDesc->constrntKeyColsDesc(); column = new (heap) NAColumn(colDesc->colname, colDesc->position, NULL, heap); keyColumns_.insertAt(i, column); i++; - keyColDesc = keyColDesc->header.next; + keyColDesc = keyColDesc->next; } CMPASSERT(desc->colcount == (signed)i); @@ -273,19 +273,19 @@ Int32 UniqueConstraint::getRefConstraints(BindWA *bindWA, void UniqueConstraint::setRefConstraintsReferencingMe ( - const struct constrnts_desc_struct* desc, - CollHeap* heap, - BindWA* bindWA) + const struct TrafConstrntsDesc* desc, + CollHeap* heap, + BindWA* bindWA) { - struct desc_struct *referencingConstraintDesc = desc->referencing_constrnts_desc; + struct TrafDesc *referencingConstraintDesc = desc->referencing_constrnts_desc; ComplementaryRIConstraint *constraintsReferencingMe; while (referencingConstraintDesc) { char *refConstrntName = - referencingConstraintDesc->body.ref_constrnts_desc.constrntname; + referencingConstraintDesc->refConstrntsDesc()->constrntname; char *refTableName = - referencingConstraintDesc->body.ref_constrnts_desc.tablename; + referencingConstraintDesc->refConstrntsDesc()->tablename; QualifiedName refConstrnt(refConstrntName, 3, heap, bindWA); QualifiedName refTable(refTableName, 3, heap, bindWA); @@ -295,7 +295,7 @@ void UniqueConstraint::setRefConstraintsReferencingMe ( heap); refConstraintsReferencingMe_.insert(constraintsReferencingMe); - referencingConstraintDesc = referencingConstraintDesc->header.next; + referencingConstraintDesc = referencingConstraintDesc->next; } } // UniqueConstraint::setRefConstraintsReferencingMe http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/BindRelExpr.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/BindRelExpr.cpp b/core/sql/optimizer/BindRelExpr.cpp index 94cd2f1..9390671 100644 --- a/core/sql/optimizer/BindRelExpr.cpp +++ b/core/sql/optimizer/BindRelExpr.cpp @@ -72,7 +72,7 @@ #include "StmtDDLCreateView.h" #include "ElemDDLColRefArray.h" #include "ElemDDLSaltOptions.h" -#include "desc.h" +#include "TrafDDLdesc.h" #include "UdrErrors.h" #include "SequenceGeneratorAttributes.h" @@ -1294,9 +1294,9 @@ void castComputedColumnsToAnsiTypes(BindWA *bindWA, } // loop over cols in RETDesc } // castComputedColumnsToAnsiTypes() -desc_struct *generateSpecialDesc(const CorrName& corrName) +TrafDesc *generateSpecialDesc(const CorrName& corrName) { - desc_struct * desc = NULL; + TrafDesc * desc = NULL; if (corrName.getSpecialType() == ExtendedQualName::VIRTUAL_TABLE) { @@ -1347,7 +1347,7 @@ NARoutine *BindWA::getNARoutine ( const QualifiedName &name ) NARoutine * naRoutine = getSchemaDB()->getNARoutineDB()->get(this, &key); if (!naRoutine) { - desc_struct *udfMetadata = NULL; + TrafDesc *udfMetadata = NULL; CmpSeabaseDDL cmpSBD(STMTHEAP); udfMetadata = cmpSBD.getSeabaseRoutineDesc( name.getCatalogName(), @@ -1389,7 +1389,7 @@ NARoutine *BindWA::getNARoutine ( const QualifiedName &name ) NATable *BindWA::getNATable(CorrName& corrName, NABoolean catmanCollectTableUsages, // default TRUE - desc_struct *inTableDescStruct) // default NULL + TrafDesc *inTableDescStruct) // default NULL { BindWA *bindWA = this; // for coding convenience @@ -13232,7 +13232,7 @@ RelExpr *BuiltinTableValuedFunction::bindNode(BindWA *bindWA) if (NOT naTable) { - desc_struct *tableDesc = createVirtualTableDesc(); + TrafDesc *tableDesc = createVirtualTableDesc(); if (tableDesc) naTable = bindWA->getNATable(corrName, FALSE/*catmanUsages*/, tableDesc); @@ -13676,55 +13676,54 @@ RelExpr *Describe::bindNode(BindWA *bindWA) // #define MAX_DESCRIBE_LEN 3000 // e.g., SQL/MP Views.ViewText column - // readtabledef_allocate_desc requires that HEAP (STMTHEAP) be used for new's! + // TrafAllocateDDLdesc requires that HEAP (STMTHEAP) be used for new's! - desc_struct * table_desc = readtabledef_allocate_desc(DESC_TABLE_TYPE); - table_desc->body.table_desc.tablename = new HEAP char[strlen("DESCRIBE__")+1]; - strcpy(table_desc->body.table_desc.tablename, "DESCRIBE__"); + TrafDesc * table_desc = TrafAllocateDDLdesc(DESC_TABLE_TYPE, NULL); + table_desc->tableDesc()->tablename = new HEAP char[strlen("DESCRIBE__")+1]; + strcpy(table_desc->tableDesc()->tablename, "DESCRIBE__"); // see nearly identical code below for indexes file desc - desc_struct * files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE); - table_desc->body.table_desc.files_desc = files_desc; - files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE; + TrafDesc * files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL); + table_desc->tableDesc()->files_desc = files_desc; Lng32 colnumber = 0, offset = 0; - desc_struct * column_desc = readtabledef_make_column_desc( - table_desc->body.table_desc.tablename, - "DESCRIBE__COL", - colnumber, // INOUT - REC_BYTE_V_ASCII, - MAX_DESCRIBE_LEN, - offset); // INOUT - column_desc->body.columns_desc.character_set = CharInfo::UTF8; - column_desc->body.columns_desc.encoding_charset = CharInfo::UTF8; - - table_desc->body.table_desc.colcount = colnumber; - table_desc->body.table_desc.record_length = offset; - - desc_struct * index_desc = readtabledef_allocate_desc(DESC_INDEXES_TYPE); - index_desc->body.indexes_desc.tablename = table_desc->body.table_desc.tablename; - index_desc->body.indexes_desc.indexname = table_desc->body.table_desc.tablename; - index_desc->body.indexes_desc.ext_indexname = table_desc->body.table_desc.tablename; - index_desc->body.indexes_desc.keytag = 0; // primary index - index_desc->body.indexes_desc.record_length = table_desc->body.table_desc.record_length; - index_desc->body.indexes_desc.colcount = table_desc->body.table_desc.colcount; - index_desc->body.indexes_desc.blocksize = 4096; // anything > 0 + TrafDesc * column_desc = TrafMakeColumnDesc( + table_desc->tableDesc()->tablename, + "DESCRIBE__COL", + colnumber, // INOUT + REC_BYTE_V_ASCII, + MAX_DESCRIBE_LEN, + offset, // INOUT + FALSE/*not null*/, + SQLCHARSETCODE_UNKNOWN, + NULL); + column_desc->columnsDesc()->character_set = CharInfo::UTF8; + column_desc->columnsDesc()->encoding_charset = CharInfo::UTF8; + + table_desc->tableDesc()->colcount = colnumber; + table_desc->tableDesc()->record_length = offset; + + TrafDesc * index_desc = TrafAllocateDDLdesc(DESC_INDEXES_TYPE, NULL); + index_desc->indexesDesc()->tablename = table_desc->tableDesc()->tablename; + index_desc->indexesDesc()->indexname = table_desc->tableDesc()->tablename; + index_desc->indexesDesc()->keytag = 0; // primary index + index_desc->indexesDesc()->record_length = table_desc->tableDesc()->record_length; + index_desc->indexesDesc()->colcount = table_desc->tableDesc()->colcount; + index_desc->indexesDesc()->blocksize = 4096; // anything > 0 // Cannot simply point to same files desc as the table one, // because then ReadTableDef::deleteTree frees same memory twice (error) - desc_struct * i_files_desc = readtabledef_allocate_desc(DESC_FILES_TYPE); - index_desc->body.indexes_desc.files_desc = i_files_desc; - i_files_desc->body.files_desc.fileorganization = KEY_SEQUENCED_FILE; + TrafDesc * i_files_desc = TrafAllocateDDLdesc(DESC_FILES_TYPE, NULL); + index_desc->indexesDesc()->files_desc = i_files_desc; - desc_struct * key_desc = readtabledef_allocate_desc(DESC_KEYS_TYPE); - key_desc->body.keys_desc.indexname = index_desc->body.indexes_desc.indexname; - key_desc->body.keys_desc.keyseqnumber = 1; - key_desc->body.keys_desc.tablecolnumber = 0; - key_desc->body.keys_desc.ordering= 0; + TrafDesc * key_desc = TrafAllocateDDLdesc(DESC_KEYS_TYPE, NULL); + key_desc->keysDesc()->keyseqnumber = 1; + key_desc->keysDesc()->tablecolnumber = 0; + key_desc->keysDesc()->setDescending(FALSE); - index_desc->body.indexes_desc.keys_desc = key_desc; - table_desc->body.table_desc.columns_desc = column_desc; - table_desc->body.table_desc.indexes_desc = index_desc; + index_desc->indexesDesc()->keys_desc = key_desc; + table_desc->tableDesc()->columns_desc = column_desc; + table_desc->tableDesc()->indexes_desc = index_desc; // // Get the NATable for this object. @@ -15469,7 +15468,7 @@ RelExpr *CallSP::bindNode(BindWA *bindWA) CmpSeabaseDDL cmpSBD((NAHeap*)bindWA->wHeap()); - desc_struct *catRoutine = + TrafDesc *catRoutine = cmpSBD.getSeabaseRoutineDesc( name.getCatalogName(), name.getSchemaName(), @@ -16221,10 +16220,10 @@ void RelRoutine::gatherParamValueIds (const ItemExpr *tree, ValueIdList ¶msL void ProxyFunc::createProxyFuncTableDesc(BindWA *bindWA, CorrName &corrName) { - // Map column definitions into a desc_struct - desc_struct *tableDesc = createVirtualTableDesc(); + // Map column definitions into a TrafDesc + TrafDesc *tableDesc = createVirtualTableDesc(); - // Map the desc_struct into an NATable. This will also add an + // Map the TrafDesc into an NATable. This will also add an // NATable entry into the bindWA's NATableDB. NATable *naTable = bindWA->getNATable(corrName, FALSE /*catmanUsages*/, tableDesc); http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/BindWA.h ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/BindWA.h b/core/sql/optimizer/BindWA.h index c88b631..ae6aa20 100644 --- a/core/sql/optimizer/BindWA.h +++ b/core/sql/optimizer/BindWA.h @@ -80,7 +80,7 @@ class SchemaDB; class StmtDDLCreateView; class StmtLevelAccessOptions; class StmtDDLCreateTrigger; -struct desc_struct; +struct TrafDesc; class NARoutine; class HbaseColUsageInfo; class ExeUtilHbaseCoProcAggr; @@ -1339,7 +1339,7 @@ public: // -------------------------------------------------------------------- NATable *getNATable(CorrName &corrName, NABoolean catmanCollectTableUsages = TRUE, - desc_struct *inTableDesc = NULL); + TrafDesc *inTableDesc = NULL); TableDesc *createTableDesc(const NATable *naTable, CorrName &corrName, @@ -1354,7 +1354,7 @@ public: // (i.e. the same table can be referred to many times, via many corr names). // -------------------------------------------------------------------- // NARoutine *getNARoutine(QualifiedName &routineName, -// desc_struct *inRoutineDesc = NULL); +// TrafDesc *inRoutineDesc = NULL); // -------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/EncodedKeyValue.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/EncodedKeyValue.cpp b/core/sql/optimizer/EncodedKeyValue.cpp index 84ab2d8..3698031 100644 --- a/core/sql/optimizer/EncodedKeyValue.cpp +++ b/core/sql/optimizer/EncodedKeyValue.cpp @@ -25,7 +25,7 @@ * * File: EncodedKeyValue.cpp * Description: Functions to compute binary encoded keys that can be written - to disk for a given set of desc_structs. + to disk for a given set of TrafDescs. * Origin: Copy of existing code from GenRFork.cpp * Created: 10/30/2013 * Language: C++ @@ -42,6 +42,7 @@ #include "exp_clause_derived.h" #include "CmpStatement.h" #include "NATable.h" +#include "TrafDDLdesc.h" // defined in SynthType.cpp extern @@ -55,15 +56,15 @@ void emitDyadicTypeSQLnameMsg(Lng32 sqlCode, -NAString * getMinMaxValue(desc_struct * column, - desc_struct * key, +NAString * getMinMaxValue(TrafDesc * column, + TrafDesc * key, NABoolean highKey, CollHeap * h) { NAString * minMaxValue = NULL; NAType * type; // deleted at the end of this method - if (NAColumn::createNAType(&column->body.columns_desc, NULL, type, NULL)) + if (NAColumn::createNAType(column->columnsDesc(), NULL, type, NULL)) return NULL; Lng32 buflen = type->getTotalSize(); @@ -73,7 +74,7 @@ NAString * getMinMaxValue(desc_struct * column, if (highKey == FALSE) { // low key needed - if (key->body.keys_desc.ordering == 0) // ascending + if (NOT key->keysDesc()->isDescending()) // ascending type->minRepresentableValue(buf, &buflen, &minMaxValue, h) ; @@ -95,7 +96,7 @@ NAString * getMinMaxValue(desc_struct * column, else { // high key needed - if (key->body.keys_desc.ordering == 0) // ascending + if (NOT key->keysDesc()->isDescending()) // ascending { if (type->supportsSQLnull()) { @@ -119,8 +120,8 @@ NAString * getMinMaxValue(desc_struct * column, return minMaxValue; } -NAString ** createInArrayForLowOrHighKeys(desc_struct * column_descs, - desc_struct * key_descs, +NAString ** createInArrayForLowOrHighKeys(TrafDesc * column_descs, + TrafDesc * key_descs, Lng32 numKeys, NABoolean highKey, NABoolean isIndex, @@ -128,30 +129,30 @@ NAString ** createInArrayForLowOrHighKeys(desc_struct * column_descs, { NAString ** inValuesArray = new (h) NAString * [numKeys]; - desc_struct * column = column_descs; - desc_struct * key = key_descs; + TrafDesc * column = column_descs; + TrafDesc * key = key_descs; Int32 i = 0; while (key) { if (!isIndex) { column = column_descs; - for (Int32 j = 0; j < key->body.keys_desc.tablecolnumber; j++) - column = column->header.next; + for (Int32 j = 0; j < key->keysDesc()->tablecolnumber; j++) + column = column->next; } inValuesArray[i] = getMinMaxValue(column, key, highKey, h) ; i++; - key = key->header.next; + key = key->next; if (isIndex) - column = column->header.next; + column = column->next; } return inValuesArray; } -ItemExpr * buildEncodeTree(desc_struct * column, - desc_struct * key, +ItemExpr * buildEncodeTree(TrafDesc * column, + TrafDesc * key, NAString * dataBuffer, //IN:contains original value Generator * generator, ComDiagsArea * diagsArea) @@ -176,17 +177,17 @@ ItemExpr * buildEncodeTree(desc_struct * column, NABoolean nullValue = FALSE; NABoolean caseinsensitiveEncode = FALSE; - if (column->body.columns_desc.caseinsensitive) + if (column->columnsDesc()->isCaseInsensitive()) caseinsensitiveEncode = TRUE; - if (column->body.columns_desc.null_flag && + if (column->columnsDesc()->isNullable() && dataBuffer->length() >= 4 && str_cmp(*dataBuffer, "NULL", 4) == 0) { nullValue = TRUE; ns = "CAST ( @A1 AS "; - ns += column->body.columns_desc.pictureText; + ns += column->columnsDesc()->pictureText; ns += ");"; // create a NULL constant @@ -203,7 +204,7 @@ ItemExpr * buildEncodeTree(desc_struct * column, ns = "CAST ( "; ns += *dataBuffer; ns += " AS "; - ns += column->body.columns_desc.pictureText; + ns += column->columnsDesc()->pictureText; ns += ");"; itemExpr = expGen->createExprTree(ns, @@ -234,7 +235,7 @@ ItemExpr * buildEncodeTree(desc_struct * column, emitDyadicTypeSQLnameMsg(-4039, itemExpr->getValueId().getType(), srcNode->getValueId().getType(), - column->body.columns_desc.colname, + column->columnsDesc()->colname, NULL, diagsArea); } @@ -242,7 +243,7 @@ ItemExpr * buildEncodeTree(desc_struct * column, return NULL; } - if (column->body.columns_desc.null_flag) + if (column->columnsDesc()->isNullable()) ((NAType *)&(itemExpr->getValueId().getType()))->setNullable(TRUE); else ((NAType *)&(itemExpr->getValueId().getType()))->setNullable(FALSE); @@ -250,39 +251,39 @@ ItemExpr * buildEncodeTree(desc_struct * column, // Explode varchars by moving them to a fixed field // whose length is equal to the max length of varchar. ////collation?? - DataType datatype = column->body.columns_desc.datatype; + Int16 datatype = column->columnsDesc()->datatype; if (DFS2REC::isSQLVarChar(datatype)) { char lenBuf[10]; NAString vc((NASize_T)100); // preallocate a big-enough buf - size_t len = column->body.columns_desc.length; + size_t len = column->columnsDesc()->length; if (datatype == REC_BYTE_V_DOUBLE) len /= SQL_DBCHAR_SIZE; vc = "CAST (@A1 as CHAR("; vc += str_itoa(len, lenBuf); - if ( column->body.columns_desc.character_set == CharInfo::UTF8 || - ( column->body.columns_desc.character_set == CharInfo::SJIS && - column->body.columns_desc.encoding_charset == CharInfo::SJIS ) ) + if ( column->columnsDesc()->character_set == CharInfo::UTF8 || + ( column->columnsDesc()->character_set == CharInfo::SJIS && + column->columnsDesc()->encoding_charset == CharInfo::SJIS ) ) { vc += " BYTE"; if (len > 1) vc += "S"; } vc += ") CHARACTER SET "; - vc += CharInfo::getCharSetName(column->body.columns_desc.character_set); + vc += CharInfo::getCharSetName(column->columnsDesc()->characterSet()); vc += ");"; itemExpr = expGen->createExprTree(vc, CharInfo::UTF8, vc.length(), 1, itemExpr); itemExpr->synthTypeAndValueId(); ((NAType *)&(itemExpr->getValueId().getType()))-> - setNullable(column->body.columns_desc.null_flag); + setNullable(column->columnsDesc()->isNullable()); } // add the encode node on top of it. short desc_flag = TRUE; - if (key->body.keys_desc.ordering == 0) // ascending + if (NOT key->keysDesc()->isDescending()) // ascending desc_flag = FALSE; itemExpr = new(expGen->wHeap()) CompEncode(itemExpr, desc_flag); @@ -301,8 +302,8 @@ ItemExpr * buildEncodeTree(desc_struct * column, // value in the encodedKeyBuffer. // RETURNS: -1, if error. 0, if all Ok. /////////////////////////////////////////////////////////////////// -short encodeKeyValues(desc_struct * column_descs, - desc_struct * key_descs, +short encodeKeyValues(TrafDesc * column_descs, + TrafDesc * key_descs, NAString * inValuesArray[], // INPUT NABoolean isIndex, NABoolean isMaxKey, // INPUT @@ -333,8 +334,8 @@ short encodeKeyValues(desc_struct * column_descs, // Let's start with a list of size 4 rather than resizing continuously ValueIdList encodedValueIdList(4); - desc_struct * column = column_descs; - desc_struct * key = key_descs; + TrafDesc * column = column_descs; + TrafDesc * key = key_descs; Int32 i = 0; if (inValuesArray == NULL) @@ -346,8 +347,8 @@ short encodeKeyValues(desc_struct * column_descs, // the following for loop is not needed. if (!isIndex) { column = column_descs; - for (Int32 j = 0; j < key->body.keys_desc.tablecolnumber; j++) - column = column->header.next; + for (Int32 j = 0; j < key->keysDesc()->tablecolnumber; j++) + column = column->next; } if (inValuesArray[i] == NULL) @@ -361,9 +362,9 @@ short encodeKeyValues(desc_struct * column_descs, encodedValueIdList.insert(itemExpr->getValueId()); i++; - key = key->header.next; + key = key->next; if (isIndex) - column = column->header.next; + column = column->next; } // allocate a work cri desc to encode keys. It has http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/EncodedKeyValue.h ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/EncodedKeyValue.h b/core/sql/optimizer/EncodedKeyValue.h index 90ffaca..4452593 100644 --- a/core/sql/optimizer/EncodedKeyValue.h +++ b/core/sql/optimizer/EncodedKeyValue.h @@ -27,8 +27,8 @@ * * File: EncodedKeyValue.h * Description: Functions to compute binary encoded keys that can be written - to disk for a given set of desc_structs. -* Origin: Copy of existing code from GenRFork.cpp + to disk for a given set of TrafDescs. +* Origin: * Created: 10/30/2013 * Language: C++ * @@ -36,32 +36,31 @@ */ #include "Platform.h" -#include "desc.h" #include "NAString.h" #include "Generator.h" -NAString * getMinMaxValue(desc_struct * column, - desc_struct * key, +NAString * getMinMaxValue(TrafDesc * column, + TrafDesc * key, NABoolean highKey, CollHeap * h); -NAString ** createInArrayForLowOrHighKeys(desc_struct * column_descs, - desc_struct * key_descs, +NAString ** createInArrayForLowOrHighKeys(TrafDesc * column_descs, + TrafDesc * key_descs, Lng32 numKeys, NABoolean highKey, NABoolean isIndex, CollHeap * h); -ItemExpr * buildEncodeTree(desc_struct * column, - desc_struct * key, +ItemExpr * buildEncodeTree(TrafDesc * column, + TrafDesc * key, NAString * dataBuffer, //IN:contains original value Generator * generator, ComDiagsArea * diagsArea); -short encodeKeyValues(desc_struct * column_descs, - desc_struct * key_descs, +short encodeKeyValues(TrafDesc * column_descs, + TrafDesc * key_descs, NAString * inValuesArray[], // INPUT NABoolean isIndex, NABoolean isMaxKey, // INPUT http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/19c96b1e/core/sql/optimizer/ItemConstr.h ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/ItemConstr.h b/core/sql/optimizer/ItemConstr.h index 147a0c7..6c94c64 100644 --- a/core/sql/optimizer/ItemConstr.h +++ b/core/sql/optimizer/ItemConstr.h @@ -41,7 +41,6 @@ #include "ItemExpr.h" #include "ObjectNames.h" -#include "desc.h" // forward references class BindWA; @@ -451,7 +450,7 @@ public: const QualifiedName &getDefiningTableName() const { return *defTableName_; } - void setKeyColumns(const struct constrnts_desc_struct*, CollHeap*); + void setKeyColumns(const struct TrafConstrntsDesc*, CollHeap*); const KeyColumns &keyColumns() const { return keyColumns_; } @@ -555,7 +554,7 @@ public: virtual Int32 getRefConstraints(BindWA *bindWA, const ColSignature &updateCols, RefConstraintList &resultList); - void setRefConstraintsReferencingMe(const struct constrnts_desc_struct*, + void setRefConstraintsReferencingMe(const struct TrafConstrntsDesc*, CollHeap*, BindWA*); NABoolean hasRefConstraintsReferencingMe() { return NOT refConstraintsReferencingMe_.isEmpty() ; };