| /********************************************************************** |
| // @@@ 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 */ |
| |
| |