blob: e00728f2054cc398e4a7eee2a5d16a03bd2308eb [file] [log] [blame]
/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
**********************************************************************/
/* -*-C++-*-
****************************************************************************
*
* File: ComTdb.h
* Description: Class declaration for the base class of Task Definition
* Blocks (TDBs). TDBs are generated by the SQL compiler
* and describe executor operators such as join, scan, ...
*
*
*
****************************************************************************
*/
#ifndef COMTDB_H
#define COMTDB_H
#include "Int64.h" // for Int64
#include "NAVersionedObject.h" // for NAVersionedObject
#include "BaseTypes.h" // for Cardinality
#include "ExpCriDesc.h"
#include "exp_expr.h" // subclasses of TDB contain expressions
#include "sqlcli.h"
#include "ComSmallDefs.h"
#include "PrivMgrDesc.h" // Privilege descriptors
// -----------------------------------------------------------------------
// Classes defined in this file
// -----------------------------------------------------------------------
class ComTdb;
// -----------------------------------------------------------------------
// Classes referenced in this file
// -----------------------------------------------------------------------
class ex_tcb;
class ex_expr;
class ex_globals;
struct ex_eye_catcher
{
char name_for_sun_compiler[4];
};
#include "QueueIndex.h"
// -----------------------------------------------------------------------
// copy only 4 chars and not the '\0'
// -----------------------------------------------------------------------
#define eye_CS "CS "
#define eye_CONTROL_QUERY "CQRY"
#define eye_DDL "DDL "
#define eye_DESCRIBE "DESC"
#define eye_FASTSORT "FSRT"
#define eye_FIRST_N "FSTN"
#define eye_FREE "FREE"
#define eye_ROOT "ROOT"
#define eye_LOCK "LOCK"
#define eye_MATER "MATR"
#define eye_ONLJ "ONLJ"
#define eye_UNLJ "UNLJ"
#define eye_MJ "MJ "
#define eye_SCAN "SCAN"
#define eye_HASHJ "HSHJ"
#define eye_HASH_GRBY "HGBY"
#define eye_INSERT "INS "
#define eye_PACKROWS "PACK"
#define eye_PROBE_CACHE "PRBC"
#define eye_RECURSE "RCRS"
#define eye_SAMPLE "SAMP"
#define eye_SEQUENCE_FUNCTION "SEQF"
#define eye_SET_TIMEOUT "TOUT"
#define eye_SORT "SORT"
#define eye_SORT_GRBY "SGBY"
#define eye_STATS "STAT"
#define eye_TRANSACTION "TRAN"
#define eye_TRANSPOSE "TRSP"
#define eye_UNION "UN "
#define eye_UNPACKROWS "UNPK"
#define eye_UPDATE "UPD "
#define eye_TUPLE "TUPL"
#define eye_TUPLE_FLOW "TFLO"
#define eye_SPLIT_TOP "SPLT"
#define eye_SPLIT_BOTTOM "SPLB"
#define eye_STORED_PROC "STPR"
#define eye_EID_ROOT "EIDR"
#define eye_PARTN_ACCESS "PA "
#define eye_SEND_TOP "SNDT"
#define eye_SEND_BOTTOM "SNDB"
#define eye_EXPLAIN "XPLN"
#define eye_IM_DATA "IMDT"
#define eye_VPJOIN "VPJN"
#define eye_UDR "UDR "
#define eye_CANCEL "CNCL"
#define eye_FAST_EXTRACT "EXTR"
#define eye_HDFS_SCAN "HDFS"
#define eye_HIVE_MD "HVMD"
#define eye_HBASE_ACCESS "HBSA"
#define eye_HBASE_COPROC_AGGR "HBCA"
#define eye_AQR_WNR_INS "UAWI"
#define eye_ORC_AGGR "ORCA"
// -----------------------------------------------------------------------
// Template instantiation to produce a 64-bit pointer emulator class
// for ComTdb
// -----------------------------------------------------------------------
typedef NAVersionedObjectPtrTempl<ComTdb> ComTdbPtr;
// -----------------------------------------------------------------------
// Template instantiation to produce a 64-bit pointer emulator class
// for ComTdbPtr
// -----------------------------------------------------------------------
typedef NAVersionedObjectPtrArrayTempl<ComTdbPtr> ComTdbPtrPtr;
class ComTdbParams
{
public:
ComTdbParams(Cardinality estimatedRowCount,
ex_cri_desc *criDown,
ex_cri_desc *criUp,
queue_index sizeDown,
queue_index sizeUp,
Int32 numBuffers,
UInt32 bufferSize,
Int32 firstNRows
)
: estimatedRowCount_(estimatedRowCount),
criDown_(criDown), criUp_(criUp),
sizeDown_(sizeDown), sizeUp_(sizeUp),
numBuffers_(numBuffers), bufferSize_(bufferSize),
firstNRows_(firstNRows)
{};
void getValues(Cardinality &estimatedRowCount,
ExCriDescPtr &criDown,
ExCriDescPtr &criUp,
queue_index &sizeDown,
queue_index &sizeUp,
Int32 &numBuffers,
UInt32 &bufferSize,
Int32 &firstNRows);
private:
Cardinality estimatedRowCount_;
ex_cri_desc *criDown_;
ex_cri_desc *criUp_;
queue_index sizeDown_;
queue_index sizeUp_;
Int32 numBuffers_;
UInt32 bufferSize_;
Int32 firstNRows_;
char filler_[40];
};
// -----------------------------------------------------------------------
// ComTdb
// -----------------------------------------------------------------------
class ComTdb : public NAVersionedObject
{
// ---------------------------------------------------------------------
// Allow access to protected part of tdb from tcb
// ---------------------------------------------------------------------
friend class ex_tcb;
public:
// ---------------------------------------------------------------------
// ex_node_type is used in both TCBs and TDBs.
// Don't ever change the assigned numeric values of a node type when
// a new one is added. Always add new types as the end of the list.
// ---------------------------------------------------------------------
enum ex_node_type
{
ex_TDB = -1, // Object of this base class ComTdb.
ex_CONTROL_QUERY = 1, // control query statements
ex_DDL = 3, // process DDL statements
ex_DESCRIBE = 4, // describe DDL statements
ex_STATS = 5, // return statistics
ex_ROOT = 10, // communicates with CLI
ex_ONLJ = 11, // vanilla NLJ -- Records returned in order
ex_MJ = 12, // merge join
ex_FASTSORT = 13,
ex_HASHJ = 14, // hash join
ex_HASH_GRBY = 50, // hash groupby
ex_LOCK = 51, // Lock/Unlock Table/View
ex_SORT = 55, // sort
ex_SORT_GRBY = 56, // sort groupby
ex_STORED_PROC = 57, // stored procedure
ex_TRANSACTION = 58, // transaction
ex_TRANSPOSE = 59, // transpose
ex_UNION = 70, // merge union
ex_TUPLE = 74, // Base class for all tuple operators
ex_LEAF_TUPLE = 75,
ex_NON_LEAF_TUPLE = 76,
ex_FIRST_N = 77,
ex_TUPLE_FLOW = 80, // moves rows from left child to right
ex_SPLIT_TOP = 81, // top node in a connection master-ESP/ESP-ESP
ex_SPLIT_BOTTOM = 82, // bottom node in such a connection
ex_PARTN_ACCESS = 83,
ex_SEND_TOP = 84, // top node in a connection master-ESP/ESP-ESP
ex_SEND_BOTTOM = 85, // bottom node in such a connection
ex_EXPLAIN = 86, // explain the plan generated
ex_VPJOIN = 87, // join scans of vertical partition together
ex_UNPACKROWS = 88, // unpack rows retrieved from a packed table
ex_PACKROWS = 89, // pack rows to insert into a packed table
ex_SAMPLE = 91,
ex_SEQUENCE_FUNCTION = 92,
ex_COMPOUND_STMT = 93,
ex_SET_TIMEOUT = 94,
ex_UDR = 100, // User-defined routines
ex_EXE_UTIL = 101, // general exe util tdb, used to implement
// a variety of requests. See ComTdbExeUtil.
ex_REORG = 102,
ex_DISPLAY_EXPLAIN = 103,
ex_MAINTAIN_OBJECT = 104,
ex_PROCESS_VOLATILE_TABLE = 107,
ex_LOAD_VOLATILE_TABLE = 108,
ex_CLEANUP_VOLATILE_TABLES = 109,
ex_GET_VOLATILE_INFO = 110,
ex_CREATE_TABLE_AS = 111,
ex_GET_STATISTICS = 113,
ex_PROBE_CACHE = 114,
ex_LONG_RUNNING = 116,
ex_GET_METADATA_INFO = 117,
ex_GET_VERSION_INFO = 118,
ex_LOB_INFO =119,
ex_SUSPEND_ACTIVATE = 121,
ex_DISK_LABEL_STATISTICS = 122,
ex_REGION_STATS = 123,
ex_GET_FORMATTED_DISK_STATS = 124,
ex_SHOW_SET = 125,
ex_AQR = 126,
ex_CANCEL = 127,
ex_DISPLAY_EXPLAIN_COMPLEX = 128,
ex_PROCESS_INMEMORY_TABLE = 129,
ex_GET_UID = 130,
ex_POP_IN_MEM_STATS = 131,
ex_REPLICATOR = 133,
ex_FAST_EXTRACT = 134,
ex_GET_ERROR_INFO = 136,
ex_HDFS_SCAN = 137,
ex_LOB_EXTRACT = 138,
ex_LOB_SHOWDDL = 139,
ex_GET_REORG_STATISTICS = 140,
ex_GET_HIVE_METADATA_INFO = 141,
ex_HIVE_MD_ACCESS = 142,
ex_HBASE_ACCESS = 143,
ex_HBASE_COPROC_AGGR = 144,
ex_PROCESS_STATISTICS = 145,
ex_ARQ_WNR_INSERT = 146,
ex_METADATA_UPGRADE = 147,
ex_HBASE_LOAD = 148,
ex_HBASE_UNLOAD = 149,
ex_ORC_AGGR = 150,
ex_DDL_WITH_STATUS = 151,
ex_GET_QID = 152,
ex_HIVE_TRUNCATE = 153,
ex_LOB_UPDATE_UTIL = 154,
ex_HIVE_QUERY = 155,
ex_LAST = 9999 // not used
};
// ---------------------------------------------------------------------
// Constructor/Destructor.
// If params is not NULL, then initialize variable from ComTdbParams
// object passed in.
// ---------------------------------------------------------------------
ComTdb(ex_node_type type,
const char *eye,
Cardinality estRowsUsed = 0.0,
ex_cri_desc *criDown = NULL,
ex_cri_desc *criUp = NULL,
queue_index sizeDown = 0,
queue_index sizeUp = 0,
Int32 numBuffers = 0,
UInt32 bufferSize = 0,
Lng32 uniqueId = 0,
ULng32 initialQueueSizeDown = 4,
ULng32 initialQueueSizeUp = 4,
short queueResizeLimit = 9,
short queueResizeFactor = 4,
ComTdbParams * params = NULL);
// ---------------------------------------------------------------------
// Dummy constructor used in findVTblPtr()
// ---------------------------------------------------------------------
ComTdb();
virtual ~ComTdb();
// ---------------------------------------------------------------------
// Pack a TDB before storing it on disk or transporting it to another
// process. Unpack a TDB after it's retrieved from disk or receive from
// another process.
// ---------------------------------------------------------------------
virtual Long pack(void *space);
virtual Lng32 unpack(void *base, void * reallocator);
// ---------------------------------------------------------------------
// Fix up the virtual function table pointer of a TDB retrieved from
// disk or in a message according to classID_ field. fixupVTblPtrCom()
// fixes up the result to a Compiler version of TDB. fixupVTblPtrExe()
// fixes up the result to an Executor version of TDB which redefines
// project.
// ---------------------------------------------------------------------
void fixupVTblPtr();
void fixupVTblPtrCom();
void fixupVTblPtrExe();
// ---------------------------------------------------------------------
// Redefinition of methods inherited from NAVersionedObject.
// ---------------------------------------------------------------------
virtual char *findVTblPtr(short classID);
virtual unsigned char getClassVersionID() { return 1; }
virtual void populateImageVersionIDArray()
{ setImageVersionID(0,getClassVersionID()); }
virtual short getClassSize()
{ return (short)sizeof(ComTdb); }
// ---------------------------------------------------------------------
// There are two versions of findVTblPtr(classID). The version which is
// linked into the executor (or tdm_sqlcli.dll) calls findVTblPtrExe()
// which the one linked into the compiler (or tdm_arkcmp.exe) calls
// findVTblPtrCom(). The former returns the VtblPtr of an executor TDB
// which has the build() method defined, while the latter returns the
// one of a "compiler" TDB with no build() method.
// ---------------------------------------------------------------------
char *findVTblPtrExe(short classID);
char *findVTblPtrCom(short classID);
// ---------------------------------------------------------------------
// Whether the TDB supports out-of-order replies to its requests.
// ---------------------------------------------------------------------
virtual Int32 orderedQueueProtocol() const { return 1; }
// ---------------------------------------------------------------------
// Used by the internal SHOWPLAN command to get attributes of a TDB.
// ---------------------------------------------------------------------
virtual void displayContents(Space *space,ULng32 flag);
virtual void displayExpression(Space *space,ULng32 flag);
virtual void displayChildren(Space *space,ULng32 flag);
// ---------------------------------------------------------------------
// Accessors/Mutators.
// ---------------------------------------------------------------------
inline ex_node_type getNodeType() const
{ return (ComTdb::ex_node_type)getClassID(); }
inline void setNodeType(ex_node_type t) { setClassID(t); }
inline void setEyeCatcher(const char * eye) { str_cpy_all((char*)&eyeCatcher_, eye, 4); }
inline ComTdb *getParentTdb() { return parentTdb_; }
inline void setParentTdb(ComTdb *tdb) { parentTdb_ = tdb; }
inline void setTdbId(Lng32 uniqueId) { tdbId_ = uniqueId; }
inline Lng32 getTdbId() const { return tdbId_; }
inline Cardinality getEstRowsAccessed() const
{
return estRowsAccessed_;
}
inline void setEstRowsAccessed(Cardinality estRowsAccessed)
{
estRowsAccessed_ = estRowsAccessed;
}
inline Cardinality getEstRowsUsed() const
{
return estRowsUsed_;
}
inline void setEstRowsUsed(Cardinality estRowsUsed)
{
estRowsUsed_ = estRowsUsed;
}
inline ULng32 getMaxQueueSizeDown() const
{ return queueSizeDown_; }
inline ULng32 getMaxQueueSizeUp() const
{ return queueSizeUp_; }
inline void setMaxQueueSizeUp(ULng32 qSize)
{ queueSizeUp_ = qSize; }
inline ULng32 getInitialQueueSizeDown() const
{ return initialQueueSizeDown_; }
inline ULng32 getInitialQueueSizeUp() const
{ return initialQueueSizeUp_; }
inline short getQueueResizeLimit() const
{ return queueResizeLimit_; }
inline short getQueueResizeFactor() const
{ return queueResizeFactor_; }
inline void setQueueResizeParams(
ULng32 initialQueueSizeDown,
ULng32 initialQueueSizeUp,
short queueResizeLimit,
short queueResizeFactor)
{
initialQueueSizeDown_ = initialQueueSizeDown;
initialQueueSizeUp_ = initialQueueSizeUp;
queueResizeLimit_ = queueResizeLimit;
queueResizeFactor_ = queueResizeFactor;
}
// this method should be defined in any TDB which store the plan
// version.
virtual
void setPlanVersion(UInt32 /*pv*/)
{
// should never reach here.
}
// ---------------------------------------------------------------------
// numChildren() -- Returns the number of children for this TDB
// ---------------------------------------------------------------------
virtual Int32 numChildren() const { return -1; }
// ---------------------------------------------------------------------
// getNodeName() -- Returns the name of this TDB.
// ---------------------------------------------------------------------
virtual const char *getNodeName() const { return "ComTDB"; }
// ---------------------------------------------------------------------
// getChild(int child) -- Returns a pointer to the nth child TDB of this
// TDB. This function cannot be used to get children which reside in
// other processes -- see getChildForGUI.
// ---------------------------------------------------------------------
virtual const ComTdb *getChild(Int32) const { return NULL; }
// ---------------------------------------------------------------------
// getChildForGUI() takes as additional arguments the fragment directory
// and the base pointer. The method is used by the GUI to display a
// complete TDB tree, including the parts which will be shipped to a
// different process (to DP2 or ESP). It is only redefined by operators
// which will sit on process boundaries. Since the child TDB of such
// operators is located in another fragment, the fragment directory has
// to be looked up. See ComTdbPartnAccess.h_tdb::getChildForGUI() for an
// example of how this could be done.
// ---------------------------------------------------------------------
virtual const ComTdb *getChildForGUI(Int32 pos,
Lng32 /*base*/,
void * /*frag_dir*/) const
{
return getChild(pos);
}
// ---------------------------------------------------------------------
// numExpressions() -- Returns the number of expression for this TDB.
// ---------------------------------------------------------------------
virtual Int32 numExpressions() const { return 0; }
// ---------------------------------------------------------------------
// GetExpressionName(int) -- Returns a string identifying the nth
// expression for this TDB.
// ---------------------------------------------------------------------
virtual const char *getExpressionName(Int32) const
{ return "none"; }
// ---------------------------------------------------------------------
// GetExpressionNode(int) -- Returns the nth expression for this TDB.
// ---------------------------------------------------------------------
virtual ex_expr *getExpressionNode(Int32) { return 0; }
// ---------------------------------------------------------------------
// overloaded to return TRUE for root operators (master executor root,
// EID root, ESP root)
// ---------------------------------------------------------------------
virtual NABoolean isRoot() const { return FALSE; }
// ---------------------------------------------------------------------
// Build a TCB for this TDB. Redefined in the Executor project.
// ---------------------------------------------------------------------
virtual ex_tcb *build(ex_globals *globals) { return NULL; }
Lng32 getBufferSize() const {return bufferSize_;}
Lng32 getNumBuffers() const {return numBuffers_;}
void resetBufInfo(Int32 numBuffers, UInt32 bufferSize)
{
numBuffers_ = numBuffers;
bufferSize_ = bufferSize;
}
Int32 &firstNRows()
{
return firstNRows_;
}
// ---------------------------------------------------------------------
// do we collect statistics? This indicator is only set for root tdbs.
// (root, eid-root and split-bottom (esp-root).
// The root nodes allocate a stats area if the indicator is true. All
// other tcbs allocate a stats entry if the stats area is present
// ---------------------------------------------------------------------
NABoolean getCollectStats()
{ return (flags_ & COLLECT_STATS) != 0; }
inline void setCollectStats(NABoolean v)
{ (v ? flags_ |= COLLECT_STATS : flags_ &= ~COLLECT_STATS); }
NABoolean denseBuffers()
{ return (flags_ & DENSE_BUFFERS) != 0; }
inline void setDenseBuffers(NABoolean v)
{ (v ? flags_ |= DENSE_BUFFERS : flags_ &= ~DENSE_BUFFERS); }
short doOltQueryOpt() const{return flags_ & DO_OLT_QUERY_OPT;}
void setDoOltQueryOpt(NABoolean v)
{ (v ? flags_ |= DO_OLT_QUERY_OPT : flags_ &= ~DO_OLT_QUERY_OPT); };
short doOltQueryOptLean() const{return flags_ & DO_OLT_QUERY_OPT_LEAN;}
void setDoOltQueryOptLean(NABoolean v)
{ (v ? flags_ |= DO_OLT_QUERY_OPT_LEAN : flags_ &= ~DO_OLT_QUERY_OPT_LEAN); };
NABoolean getCollectRtsStats()
{ return (flags_ & COLLECT_RTS_STATS) != 0; }
inline void setCollectRtsStats(NABoolean v)
{ (v ? flags_ |= COLLECT_RTS_STATS : flags_ &= ~COLLECT_RTS_STATS); }
short floatFieldsAreIEEE() const{return flags_ & FLOAT_FIELDS_ARE_IEEE;}
short isNonFatalErrorTolerated() const { return flags_ & TOLERATE_NONFATAL_ERROR;}
void setTolerateNonFatalError(NABoolean v){ v ? flags_ |= TOLERATE_NONFATAL_ERROR: flags_ &= ~TOLERATE_NONFATAL_ERROR;}
short isCIFON() const { return flags_ & CIFON;}
void setCIFON(NABoolean v){ v ? flags_ |= CIFON: flags_ &= ~CIFON;}
short processLOB() const { return flags_ & PROCESS_LOB;}
void setProcessLOB(NABoolean v){ v ? flags_ |= PROCESS_LOB: flags_ &= ~PROCESS_LOB;}
NABoolean useLibHdfs() const { return ((flags_ & USE_LIBHDFS) > 0);}
void setUseLibHdfs(NABoolean v){ v ? flags_ |= USE_LIBHDFS : flags_ &= ~USE_LIBHDFS ;}
enum CollectStatsType
{
NO_STATS = SQLCLI_NO_STATS,
ACCUMULATED_STATS = SQLCLI_ACCUMULATED_STATS, // collect accumulated stats.
PERTABLE_STATS = SQLCLI_PERTABLE_STATS, // collect per table stats that
ALL_STATS = SQLCLI_ALL_STATS, // collect all stats about all exe operators
OPERATOR_STATS = SQLCLI_OPERATOR_STATS, // collect all stats but merge at operator(tdb)
// granularity. Used to return data at user operator
// level.
CPU_OFFENDER_STATS = SQLCLI_CPU_OFFENDER_STATS, // Collection of ROOT_OPER_STATS of
// all currently running queries in a cpu
QID_DETAIL_STATS = SQLCLI_QID_DETAIL_STATS, // Collection of ROOT_OPER_STATS for
// a given QID
SE_OFFENDER_STATS = SQLCLI_SE_OFFENDER_STATS,
RMS_INFO_STATS = SQLCLI_RMS_INFO_STATS,
SAME_STATS = SQLCLI_SAME_STATS,
PROGRESS_STATS = SQLCLI_PROGRESS_STATS, // Petable Stats + BMO stats for display via GET STATISTICS command
ET_OFFENDER_STATS = SQLCLI_ET_OFFENDER_STATS,
MEM_OFFENDER_STATS = SQLCLI_MEM_OFFENDER_STATS
};
CollectStatsType getCollectStatsType() { return (CollectStatsType)collectStatsType_; };
void setCollectStatsType(CollectStatsType s)
{ collectStatsType_ = s; };
Lng32 getExplainNodeId() const { return (Lng32) explainNodeId_; }
void setExplainNodeId(Lng32 id) { explainNodeId_ = (Int32) id; }
UInt16 getPertableStatsTdbId() const { return pertableStatsTdbId_; }
void setPertableStatsTdbId(UInt16 id) { pertableStatsTdbId_ = id; }
Float32 getFloatValue(char * v) const
{
Float32 f;
str_cpy_all((char *)&f, v, sizeof(Float32));
return f;
}
Float64 getDoubleValue(char * v) const
{
Float64 f;
str_cpy_all((char *)&f, v, sizeof(Float64));
return f;
}
enum OverflowModeType
{
OFM_DISK = SQLCLI_OFM_DISK_TYPE,
OFM_SSD = SQLCLI_OFM_SSD_TYPE,
OFM_MMAP = SQLCLI_OFM_MMAP_TYPE
};
OverflowModeType getOverFlowMode()
{
return (OverflowModeType)overflowMode_;
}
void setOverflowMode(OverflowModeType ofm)
{
overflowMode_ = (Int16)ofm;
}
ex_cri_desc *getCriDescUp() { return criDescUp_; };
void setCriDescUp(ex_cri_desc *cri) { criDescUp_ = cri; };
virtual Float32 getEstimatedMemoryUsage() { return 0; }
enum Type
{
TABLE_INFO,
COLUMN_INFO,
KEY_INFO,
INDEX_INFO,
REF_CONSTRAINTS_INFO,
CONSTRAINTS_INFO,
VIEW_INFO,
ROUTINE_INFO,
SEQUENCE_INFO
};
private:
enum FlagsType
{
COLLECT_STATS = 0x0001,
DENSE_BUFFERS = 0x0002,
DO_OLT_QUERY_OPT = 0x0004,
// this bit, if set, indicates that the fields defined as 'Float'
// in TDBs are to be interpreted as IEEE floats.
// It is to distinguish them from that field containing tandem
// float values for pre R2 plans.
// Starting R2 and beyond, this flag bit will always be set to 1
// since all floats are now IEEE floats.
FLOAT_FIELDS_ARE_IEEE = 0x0008,
// olt query opt part 2 (leaner olt opt).
DO_OLT_QUERY_OPT_LEAN = 0x0010,
COLLECT_RTS_STATS = 0x0020,
// flag to teach operators to ignore NF(NAR) errors
TOLERATE_NONFATAL_ERROR = 0x0040,
//flag for CIF
CIFON = 0x0080,
// if this tdb tree need to process lobs at runtime.
// This flag is set at the 'root' operators only during
// code generation:
// master root(ComTdbRoot), esp root(ComTdbSplitBottom),
// eid root (ComTdbEidRoot)
PROCESS_LOB = 0x0100,
//
USE_LIBHDFS = 0x0200
};
protected:
// ---------------------------------------------------------------------
// Identification information
// ---------------------------------------------------------------------
Int32 objectId_; // 00-03
ex_eye_catcher eyeCatcher_; // 04-07
// ---------------------------------------------------------------------
// Queue sizes for parent down and up queues
// ---------------------------------------------------------------------
UInt32 queueSizeDown_; // 08-11
UInt32 queueSizeUp_; // 12-15
// ---------------------------------------------------------------------
// Number and size of buffers to be allocated
// ---------------------------------------------------------------------
Int32 numBuffers_; // 16-19
UInt32 bufferSize_; // 20-23
// ---------------------------------------------------------------------
// CRI descriptors of requests down from and up to parent
// ---------------------------------------------------------------------
ExCriDescPtr criDescDown_; // 24-31
ExCriDescPtr criDescUp_; // 32-39
// ---------------------------------------------------------------------
// Parent TDB of this TDB.
// ---------------------------------------------------------------------
ComTdbPtr parentTdb_; // 40-47
Float32 estRowsAccessed_; // 48-51
char filler_[4]; // 52-55
private:
// ---------------------------------------------------------------------
// Compiler estimate of number of rows
// ---------------------------------------------------------------------
Float32 estRowsUsed_; // 56-59
protected:
// ---------------------------------------------------------------------
// Signals the expression mode to be applied at fixup time for PCODE
// generation.
// ---------------------------------------------------------------------
UInt16 expressionMode_; // 60-61
UInt16 flags_; // 62-63
// Maximum number of rows to be returned.
// A GET_N request is sent to child at runtime.
// Executor stops processing (cancel) after
// returning these many rows. If set to -1,
// then all rows are to be returned.
Int32 firstNRows_; // 64-67
// id of this TDB for statistics display
Int32 tdbId_; // 68-71
// ---------------------------------------------------------------------
// Initial values for dynamically resized queues and buffer pools
// the other set of values is either the max size (for dynamic
// resizing) or the fixed size (without dynamic resizing). These
// values give the initial size, the number of empty/full plus
// full/empty transitions until a resize happens, and the factor
// by which the queue is resized.
// ---------------------------------------------------------------------
UInt32 initialQueueSizeDown_; // 72-75
UInt32 initialQueueSizeUp_; // 76-79
Int16 queueResizeLimit_; // 80-81
Int16 queueResizeFactor_; // 82-83
// ---------------------------------------------------------------------
// if COLLECT_STATS is set, this fields contains details about what
// kind of statistics are to be collected.
// ---------------------------------------------------------------------
UInt16 collectStatsType_; // 84-85
// ---------------------------------------------------------------------
// This tdb id is used to consolidate information on a per table basis
// similar to the way it is done in sqlmp. Valid when PERTABLE_STATS are
// being collected. All tdbs that are working for the same table
// (like, PA, DP2 oper) get the same tdb id at code generation time.
// ---------------------------------------------------------------------
UInt16 pertableStatsTdbId_; // 86-87
// link to the EXPLAIN node id of the corresponding node in
// the EXPLAIN stored procedure (note that multiple TDBs can
// map to one EXPLAIN node, like in PA or ESP exchange nodes).
Int32 explainNodeId_; // 88-91
Int16 overflowMode_; // 92-93
// ---------------------------------------------------------------------
// Fillers for potential future extensions without changing class size.
// When a new member is added, size of this filler should be reduced so
// that the size of the object remains the same.
// ---------------------------------------------------------------------
char fillersComTdb_[34]; // 94-127
};
class ComTdbVirtTableBase
{
public:
ComTdbVirtTableBase()
{
}
virtual void init()
{
// skip virtual table pointer stored as first eight bytes (64 bit pointer)
char * vtblPtr = (char*)this;
char * dataMem = vtblPtr + sizeof(vtblPtr);
memset(dataMem, '\0', (size() - sizeof(vtblPtr)));
}
virtual Int32 size() { return 0;}
};
class ComTdbVirtTableTableInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableTableInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size(){ return sizeof(ComTdbVirtTableTableInfo); };
const char * tableName;
Int64 createTime;
Int64 redefTime;
Int64 objUID;
Lng32 isAudited;
Lng32 validDef; // 0, invalid. 1, valid. 2, disabled.
Int32 objOwnerID;
Int32 schemaOwnerID;
const char * hbaseCreateOptions;
Lng32 numSaltPartns; // num of salted partitions this table was created with.
ComRowFormat rowFormat;
const char * defaultColFam;
const char * allColFams;
Int64 objectFlags; // flags from OBJECTS table
Int64 tablesFlags; // flags from TABLES table
};
class ComTdbVirtTableColumnInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableColumnInfo(const char * cName, Lng32 cNum, ComColumnClass cc,
Lng32 dt, Lng32 l, Lng32 n, SQLCHARSET_CODE cs,
Lng32 p, Lng32 s, Lng32 dtS, Lng32 dtE, Lng32 u,
const char * ch, ULng32 flags, ComColumnDefaultClass dc,
const char * defVal, const char * hcf, const char * hcq,
const char * pd, Lng32 io)
: ComTdbVirtTableBase(),
colName(cName), colNumber(cNum), columnClass(cc),
datatype(dt), length(l), nullable(n), charset(cs), precision(p), scale(s),
dtStart(dtS), dtEnd(dtE), upshifted(u), colHeading(ch), hbaseColFlags(flags),
defaultClass(dc), hbaseColFam(hcf), hbaseColQual(hcq), isOptional(io), colFlags(0)
{
strcpy(paramDirection, pd);
};
ComTdbVirtTableColumnInfo()
: ComTdbVirtTableBase()
{
init();
}
Int32 size() { return sizeof(ComTdbVirtTableColumnInfo);}
const char * colName;
Lng32 colNumber;
ComColumnClass columnClass;
Lng32 datatype;
Lng32 length;
Lng32 nullable;
SQLCHARSET_CODE charset;
Lng32 precision; // if interval, this is leading precision
Lng32 scale; // if dt/int, this is fractional precision
Lng32 dtStart; // 1:year, 2:month, 3:day, 4:hour, 5:min, 6:sec, 0:n/a
Lng32 dtEnd; // 1:year, 2:month, 3:day, 4:hour, 5:min, 6:sec, 0:n/a
Lng32 upshifted; // 0, regular. 1, UPSHIFT char datatype
const char * colHeading;
ULng32 hbaseColFlags;
ComColumnDefaultClass defaultClass;
const char * defVal;
const char * hbaseColFam;
const char * hbaseColQual;
char paramDirection[4];
Lng32 isOptional; // 0, regular (does not apply OR FALSE). 1, Param is optional
Int64 colFlags;
};
class ComTdbVirtTableKeyInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableKeyInfo(const char * cn, Lng32 ksn, Lng32 tcn,
Lng32 o, Lng32 nkc, const char * hcf, const char * hcq)
: ComTdbVirtTableBase(),
colName(cn), keySeqNum(ksn), tableColNum(tcn), ordering(o), nonKeyCol(nkc),
hbaseColFam(hcf), hbaseColQual(hcq)
{
}
ComTdbVirtTableKeyInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTableKeyInfo);}
const char * colName;
Lng32 keySeqNum;
Lng32 tableColNum;
enum { ASCENDING_ORDERING = 0, DESCENDING_ORDERING = 1 };
Lng32 ordering; // 0 means ascending, 1 means descending
// (see, for example, CmpSeabaseDDL::buildKeyInfoArray)
Lng32 nonKeyCol; // if 1, this is a base table pkey col for unique indexes
const char * hbaseColFam;
const char * hbaseColQual;
};
class ComTdbVirtTableIndexInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableIndexInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTableIndexInfo);}
const char * baseTableName;
const char * indexName;
Int64 indexUID;
Lng32 keytag;
Lng32 isUnique;
Lng32 isExplicit;
Lng32 keyColCount;
Lng32 nonKeyColCount;
const char * hbaseCreateOptions;
Lng32 numSaltPartns; // num of salted partitions this index was created with.
ComRowFormat rowFormat;
const ComTdbVirtTableKeyInfo * keyInfoArray;
const ComTdbVirtTableKeyInfo * nonKeyInfoArray;
};
// referencing and referenced constraints
class ComTdbVirtTableRefConstraints : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableRefConstraints()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTableRefConstraints);}
char * constrName;
char * baseTableName;
};
class ComTdbVirtTableConstraintInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableConstraintInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTableConstraintInfo);}
char * baseTableName;
char * constrName;
Lng32 constrType; // unique constr = 0, ref constr = 1, check constr = 2, pkey constr = 3
Lng32 colCount;
Lng32 isEnforced;
ComTdbVirtTableKeyInfo * keyInfoArray;
// referencing constraints
Lng32 numRingConstr;
ComTdbVirtTableRefConstraints * ringConstrArray;
// referenced constraints
Lng32 numRefdConstr;
ComTdbVirtTableRefConstraints * refdConstrArray;
// if constrType == 2
Lng32 checkConstrLen;
char * checkConstrText;
Lng32 notSerialized;
};
class ComTdbVirtTableViewInfo : ComTdbVirtTableBase
{
public:
ComTdbVirtTableViewInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTableViewInfo);}
char * viewName;
char * viewText;
char * viewCheckText;
char * viewColUsages;
Lng32 isUpdatable;
Lng32 isInsertable;
};
class ComTdbVirtTableRoutineInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableRoutineInfo(const char * rn, const char * ut, const char * lt,
Int16 d, const char * sa, Int16 con, Int16 i, const char * ps,
const char * ta, Int32 mr, Int32 sas, const char * en,
const char * p, const char * uv, const char * es, const char * em,
const char * lf, Int32 lv, const char * s, const char *ls)
: ComTdbVirtTableBase(),
routine_name(rn), deterministic(d), call_on_null(con), isolate(i), max_results(mr),
state_area_size(sas), external_name(en), library_filename(lf), library_version(lv),
signature(s), library_sqlname(ls)
{
strcpy(UDR_type, ut);
strcpy(language_type, lt);
strcpy(sql_access, sa);
strcpy(param_style, ps);
strcpy(transaction_attributes, ta);
strcpy(parallelism, p);
strcpy(user_version, uv);
strcpy(external_security, es);
strcpy(execution_mode, em);
}
ComTdbVirtTableRoutineInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTableRoutineInfo);}
const char *routine_name;
char UDR_type[3];
char language_type[3];
Int16 deterministic;
char sql_access[3];
Int16 call_on_null;
Int16 isolate;
char param_style[3];
char transaction_attributes[3];
Int32 max_results;
Int32 state_area_size;
const char *external_name;
char parallelism[3];
char user_version[32];
char external_security[3];
char execution_mode[3];
const char *library_filename;
Int32 library_version;
const char * signature;
const char * library_sqlname;
Int64 object_uid;
Int32 object_owner_id;
Int32 schema_owner_id;
};
class ComTdbVirtTableSequenceInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableSequenceInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTableSequenceInfo);}
Lng32 seqType; // ComSequenceGeneratorType
Lng32 datatype;
Int64 startValue;
Int64 increment;
Int64 maxValue;
Int64 minValue;
Lng32 cycleOption;
Int64 cache;
Int64 seqUID;
Int64 nextValue;
Int64 redefTime;
};
// This class describes object and column privileges and if they are grantable
// (WGO) for an object. Privileges are stored as a vector of PrivMgrDesc's, one
// per distinct grantee.
//
// PrivMgrDesc:
// grantee - Int32
// objectPrivs - PrivMgrCoreDesc
// columnPrivs - list of PrivMgrCoreDesc
// PrivMgrCoreDesc:
// bitmap of granted privileges
// bitmap of associated WGO (with grant option)
// column ordinal (number) set to -1 for object privs
class ComTdbVirtTablePrivInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTablePrivInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTablePrivInfo);}
NAList<PrivMgrDesc> *privmgr_desc_list;
};
class ComTdbVirtTableLibraryInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtTableLibraryInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtTableLibraryInfo);}
const char *library_name;
Int64 library_UID;
Int32 library_version;
const char *library_filename;
Int32 object_owner_id;
Int32 schema_owner_id;
};
class ComTdbVirtIndexCommentInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtIndexCommentInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtIndexCommentInfo);}
const char *indexFullName;
const char *indexComment;
};
class ComTdbVirtColumnCommentInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtColumnCommentInfo()
: ComTdbVirtTableBase()
{
init();
}
virtual Int32 size() { return sizeof(ComTdbVirtColumnCommentInfo);}
const char *columnName;
const char *columnComment;
};
class ComTdbVirtObjCommentInfo : public ComTdbVirtTableBase
{
public:
ComTdbVirtObjCommentInfo()
: ComTdbVirtTableBase()
{
init();
objectUid = 0;
objectComment = NULL;
numColumnComment = 0;
columnCommentArray = NULL;
numIndexComment = 0;
indexCommentArray = NULL;
}
virtual Int32 size() { return sizeof(ComTdbVirtObjCommentInfo);}
Int64 objectUid;
const char *objectComment;
Int32 numColumnComment;
ComTdbVirtColumnCommentInfo * columnCommentArray;
Int32 numIndexComment;
ComTdbVirtIndexCommentInfo * indexCommentArray;
};
#endif /* COMTDB_H */