2021-11-02 05:37:31 +00:00
/*
* Copyright ( c ) 2019 TAOS Data , Inc . < jhtao @ taosdata . com >
*
* This program is free software : you can use , redistribute , and / or modify
* it under the terms of the GNU Affero General Public License , version 3
* or later ( " AGPL " ) , as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
2022-04-24 06:19:12 +00:00
// clang-format off
2021-11-02 05:37:31 +00:00
# ifndef TDENGINE_EXECUTORIMPL_H
# define TDENGINE_EXECUTORIMPL_H
2022-02-08 02:21:00 +00:00
# ifdef __cplusplus
extern " C " {
# endif
2021-11-02 05:37:31 +00:00
# include "os.h"
2022-02-28 09:55:07 +00:00
# include "tcommon.h"
2022-02-08 02:21:00 +00:00
# include "tlosertree.h"
2022-04-14 14:32:49 +00:00
# include "tsort.h"
2021-11-02 05:37:31 +00:00
# include "ttszip.h"
# include "tvariant.h"
2022-01-11 02:51:23 +00:00
# include "dataSinkMgt.h"
2021-11-02 05:37:31 +00:00
# include "executil.h"
2022-02-10 05:55:53 +00:00
# include "executor.h"
2022-01-11 02:51:23 +00:00
# include "planner.h"
2022-02-17 11:30:43 +00:00
# include "scalar.h"
2021-11-02 05:37:31 +00:00
# include "taosdef.h"
# include "tarray.h"
2022-01-11 02:51:23 +00:00
# include "thash.h"
2021-11-02 05:37:31 +00:00
# include "tlockfree.h"
2022-04-02 11:31:52 +00:00
# include "tmsg.h"
2022-04-14 14:32:49 +00:00
# include "tpagedbuf.h"
2022-01-08 15:19:46 +00:00
2022-04-24 06:19:12 +00:00
# include "vnode.h"
2022-05-02 15:52:32 +00:00
# include "executorInt.h"
2022-04-24 06:19:12 +00:00
2021-11-02 05:37:31 +00:00
typedef int32_t ( * __block_search_fn_t ) ( char * data , int32_t num , int64_t key , int32_t order ) ;
2022-04-14 14:32:49 +00:00
# define IS_QUERY_KILLED(_q) ((_q)->code == TSDB_CODE_TSC_QUERY_CANCELLED)
# define Q_STATUS_EQUAL(p, s) (((p) & (s)) != 0u)
2021-11-02 05:37:31 +00:00
# define QUERY_IS_ASC_QUERY(q) (GET_FORWARD_DIRECTION_FACTOR((q)->order.order) == QUERY_ASC_FORWARD_STEP)
2022-02-08 02:21:00 +00:00
# define GET_TABLEGROUP(q, _index) ((SArray*)taosArrayGetP((q)->tableqinfoGroupInfo.pGroupList, (_index)))
2021-11-02 05:37:31 +00:00
2022-02-08 02:21:00 +00:00
# define NEEDTO_COMPRESS_QUERY(size) ((size) > tsCompressColData ? 1 : 0)
2021-11-02 05:37:31 +00:00
enum {
2022-01-10 11:48:21 +00:00
// when this task starts to execute, this status will set
TASK_NOT_COMPLETED = 0x1u ,
2021-11-02 05:37:31 +00:00
2022-01-10 11:48:21 +00:00
/* Task is over
2021-11-02 05:37:31 +00:00
* 1. this status is used in one row result query process , e . g . , count / sum / first / last / avg . . . etc .
* 2. when all data within queried time window , it is also denoted as query_completed
*/
2022-01-10 11:48:21 +00:00
TASK_COMPLETED = 0x2u ,
2021-11-02 05:37:31 +00:00
/* when the result is not completed return to client, this status will be
* usually used in case of interval query with interpolation option
*/
2022-01-10 11:48:21 +00:00
TASK_OVER = 0x4u ,
2021-11-02 05:37:31 +00:00
} ;
typedef struct SResultRowCell {
2022-04-14 14:32:49 +00:00
uint64_t groupId ;
2022-03-31 08:10:32 +00:00
SResultRowPosition pos ;
2021-11-02 05:37:31 +00:00
} SResultRowCell ;
/**
* If the number of generated results is greater than this value ,
* query query will be halt and return results to client immediate .
*/
2022-04-14 14:32:49 +00:00
typedef struct SResultInfo { // TODO refactor
int64_t totalRows ; // total generated result size in rows
int64_t totalBytes ; // total results in bytes.
int32_t capacity ; // capacity of current result output buffer
int32_t threshold ; // result size threshold in rows.
2022-03-24 03:15:05 +00:00
} SResultInfo ;
2021-11-02 05:37:31 +00:00
typedef struct STableQueryInfo {
2022-04-16 07:15:28 +00:00
TSKEY lastKey ; // last check ts, todo remove it later
SResultRowPosition pos ; // current active time window
2022-02-14 02:58:58 +00:00
// SVariant tag;
2021-11-02 05:37:31 +00:00
} STableQueryInfo ;
typedef enum {
QUERY_PROF_BEFORE_OPERATOR_EXEC = 0 ,
QUERY_PROF_AFTER_OPERATOR_EXEC ,
QUERY_PROF_QUERY_ABORT
} EQueryProfEventType ;
typedef struct {
EQueryProfEventType eventType ;
2022-02-08 02:21:00 +00:00
int64_t eventTime ;
2021-11-02 05:37:31 +00:00
union {
2022-02-08 02:21:00 +00:00
uint8_t operatorType ; // for operator event
int32_t abortCode ; // for query abort event
2021-11-02 05:37:31 +00:00
} ;
} SQueryProfEvent ;
typedef struct {
uint8_t operatorType ;
int64_t sumSelfTime ;
int64_t sumRunTimes ;
} SOperatorProfResult ;
2022-04-02 07:08:48 +00:00
typedef struct SLimit {
int64_t limit ;
int64_t offset ;
} SLimit ;
2022-05-03 15:52:17 +00:00
typedef struct SFileBlockLoadRecorder {
uint64_t totalRows ;
uint64_t totalCheckedRows ;
uint32_t totalBlocks ;
uint32_t loadBlocks ;
uint32_t loadBlockStatis ;
uint32_t skipBlocks ;
uint32_t filterOutBlocks ;
uint64_t elapsedTime ;
} SFileBlockLoadRecorder ;
2022-01-08 14:59:24 +00:00
typedef struct STaskCostInfo {
2022-02-08 02:21:00 +00:00
int64_t created ;
int64_t start ;
int64_t end ;
uint64_t loadStatisTime ;
uint64_t loadFileBlockTime ;
uint64_t loadDataInCacheTime ;
uint64_t loadStatisSize ;
uint64_t loadFileBlockSize ;
uint64_t loadDataInCacheSize ;
uint64_t loadDataTime ;
2022-05-03 15:52:17 +00:00
SFileBlockLoadRecorder * pRecoder ;
2022-02-08 02:21:00 +00:00
uint64_t elapsedTime ;
2022-05-03 15:52:17 +00:00
2022-02-08 02:21:00 +00:00
uint64_t firstStageMergeTime ;
uint64_t winInfoSize ;
uint64_t tableInfoSize ;
uint64_t hashSize ;
uint64_t numOfTimeWindows ;
SArray * queryProfEvents ; // SArray<SQueryProfEvent>
SHashObj * operatorProfResults ; // map<operator_type, SQueryProfEvent>
2022-01-08 14:59:24 +00:00
} STaskCostInfo ;
2021-11-02 05:37:31 +00:00
2022-03-04 06:31:21 +00:00
typedef struct SOperatorCostInfo {
uint64_t openCost ;
2022-04-02 11:31:52 +00:00
uint64_t totalCost ;
2022-03-04 06:31:21 +00:00
} SOperatorCostInfo ;
2021-11-02 05:37:31 +00:00
// The basic query information extracted from the SQueryInfo tree to support the
// execution of query in a data node.
2022-01-08 08:28:44 +00:00
typedef struct STaskAttr {
2022-04-14 14:32:49 +00:00
SLimit limit ;
SLimit slimit ;
bool stableQuery ; // super table query or not
bool topBotQuery ; // TODO used bitwise flag
bool groupbyColumn ; // denote if this is a groupby normal column query
bool timeWindowInterpo ; // if the time window start/end required interpolation
bool tsCompQuery ; // is tscomp query
bool diffQuery ; // is diff query
bool pointInterpQuery ; // point interpolation query
int32_t havingNum ; // having expr number
int16_t numOfCols ;
int16_t numOfTags ;
STimeWindow window ;
SInterval interval ;
int16_t precision ;
int16_t numOfOutput ;
int16_t fillType ;
int32_t resultRowSize ;
int32_t tagLen ; // tag value length of current query
SExprInfo * pExpr1 ;
2022-04-14 06:34:02 +00:00
SColumnInfo * tagColList ;
int32_t numOfFilterCols ;
int64_t * fillVal ;
2022-02-08 02:21:00 +00:00
void * tsdb ;
STableGroupInfo tableGroupInfo ; // table <tid, last_key> list SArray<STableKeyInfo>
int32_t vgId ;
2022-01-08 08:28:44 +00:00
} STaskAttr ;
2021-11-02 05:37:31 +00:00
struct SOperatorInfo ;
2022-04-11 09:08:13 +00:00
struct SAggSupporter ;
struct SOptrBasicInfo ;
2021-11-02 05:37:31 +00:00
2022-04-14 14:32:49 +00:00
typedef void ( * __optr_encode_fn_t ) ( struct SOperatorInfo * pOperator , struct SAggSupporter * pSup ,
struct SOptrBasicInfo * pInfo , char * * result , int32_t * length ) ;
typedef bool ( * __optr_decode_fn_t ) ( struct SOperatorInfo * pOperator , struct SAggSupporter * pSup ,
struct SOptrBasicInfo * pInfo , char * result , int32_t length ) ;
2022-03-29 12:07:38 +00:00
2022-03-30 06:54:00 +00:00
typedef int32_t ( * __optr_open_fn_t ) ( struct SOperatorInfo * pOptr ) ;
2022-05-03 07:27:13 +00:00
typedef SSDataBlock * ( * __optr_fn_t ) ( struct SOperatorInfo * pOptr ) ;
2022-03-12 10:02:56 +00:00
typedef void ( * __optr_close_fn_t ) ( void * param , int32_t num ) ;
2022-04-14 14:32:49 +00:00
typedef int32_t ( * __optr_get_explain_fn_t ) ( struct SOperatorInfo * pOptr , void * * pOptrExplain ) ;
2022-03-12 10:02:56 +00:00
2022-01-08 14:59:24 +00:00
typedef struct STaskIdInfo {
2022-02-08 02:21:00 +00:00
uint64_t queryId ; // this is also a request id
uint64_t subplanId ;
uint64_t templateId ;
char * str ;
2022-01-08 14:59:24 +00:00
} STaskIdInfo ;
2022-01-10 11:48:21 +00:00
typedef struct SExecTaskInfo {
2022-04-14 14:32:49 +00:00
STaskIdInfo id ;
uint32_t status ;
STimeWindow window ;
STaskCostInfo cost ;
int64_t owner ; // if it is in execution
int32_t code ;
uint64_t totalRows ; // total number of rows
STableGroupInfo tableqinfoGroupInfo ; // this is a group array list, including SArray<STableQueryInfo*> structure
char * sql ; // query sql string
jmp_buf env ; // jump to this position when error happens.
EOPTR_EXEC_MODEL execModel ; // operator execution model [batch model|stream model]
2022-02-08 02:21:00 +00:00
struct SOperatorInfo * pRoot ;
2022-01-10 11:48:21 +00:00
} SExecTaskInfo ;
2022-01-08 14:59:24 +00:00
2022-01-08 08:28:44 +00:00
typedef struct STaskRuntimeEnv {
2022-03-14 08:09:26 +00:00
STaskAttr * pQueryAttr ;
uint32_t status ; // query status
uint8_t scanFlag ; // denotes reversed scan of data or not
SDiskbasedBuf * pResultBuf ; // query result buffer based on blocked-wised disk file
SHashObj * pResultRowHashTable ; // quick locate the window object for each result
SHashObj * pResultRowListSet ; // used to check if current ResultRowInfo has ResultRow object or not
SArray * pResultRowArrayList ; // The array list that contains the Result rows
char * keyBuf ; // window key buffer
2022-02-14 05:20:46 +00:00
// The window result objects pool, all the resultRow Objects are allocated and managed by this object.
2022-04-14 14:32:49 +00:00
char * * prevRow ;
STSBuf * pTsBuf ; // timestamp filter list
STSCursor cur ;
2022-02-08 02:21:00 +00:00
2022-04-14 14:32:49 +00:00
char * tagVal ; // tag value of current data block
2022-02-08 02:21:00 +00:00
STableGroupInfo tableqinfoGroupInfo ; // this is a group array list, including SArray<STableQueryInfo*> structure
struct SOperatorInfo * proot ;
2022-04-14 14:32:49 +00:00
SGroupResInfo groupResInfo ;
int64_t currentOffset ; // dynamic offset value
2021-11-02 05:37:31 +00:00
2022-02-08 02:21:00 +00:00
STableQueryInfo * current ;
2022-04-14 06:34:02 +00:00
SResultInfo resultInfo ;
2022-02-08 02:21:00 +00:00
struct SUdfInfo * pUdfInfo ;
2022-01-08 08:28:44 +00:00
} STaskRuntimeEnv ;
2021-11-02 05:37:31 +00:00
enum {
2022-04-14 14:32:49 +00:00
OP_NOT_OPENED = 0x0 ,
OP_OPENED = 0x1 ,
2022-03-21 10:31:31 +00:00
OP_RES_TO_RETURN = 0x5 ,
2022-04-14 14:32:49 +00:00
OP_EXEC_DONE = 0x9 ,
2021-11-02 05:37:31 +00:00
} ;
2022-04-26 12:26:32 +00:00
typedef struct SOperatorFpSet {
__optr_open_fn_t _openFn ; // DO NOT invoke this function directly
__optr_fn_t getNextFn ;
__optr_fn_t getStreamResFn ; // execute the aggregate in the stream model, todo remove it
__optr_fn_t cleanupFn ; // call this function to release the allocated resources ASAP
__optr_close_fn_t closeFn ;
__optr_encode_fn_t encodeResultRow ;
__optr_decode_fn_t decodeResultRow ;
__optr_get_explain_fn_t getExplainFn ;
} SOperatorFpSet ;
2021-11-02 05:37:31 +00:00
typedef struct SOperatorInfo {
2022-04-06 03:32:21 +00:00
uint8_t operatorType ;
2022-05-03 15:23:49 +00:00
bool blocking ; // block operator or not
2022-04-06 03:32:21 +00:00
uint8_t status ; // denote if current operator is completed
2022-05-05 10:54:19 +00:00
int32_t numOfExprs ; // number of columns of the current operator results
2022-04-06 03:32:21 +00:00
char * name ; // name, used to show the query execution plan
void * info ; // extension attribution
SExprInfo * pExpr ;
SExecTaskInfo * pTaskInfo ;
SOperatorCostInfo cost ;
SResultInfo resultInfo ;
struct SOperatorInfo * * pDownstream ; // downstram pointer list
int32_t numOfDownstream ; // number of downstream. The value is always ONE expect for join operator
2022-04-26 12:26:32 +00:00
SOperatorFpSet fpSet ;
2021-11-02 05:37:31 +00:00
} SOperatorInfo ;
typedef struct {
int32_t numOfTags ;
int32_t numOfCols ;
2022-02-08 02:21:00 +00:00
SColumnInfo * colList ;
2021-11-02 05:37:31 +00:00
} SQueriedTableInfo ;
2022-03-29 12:07:38 +00:00
typedef enum {
EX_SOURCE_DATA_NOT_READY = 0x1 ,
2022-04-18 02:46:07 +00:00
EX_SOURCE_DATA_READY = 0x2 ,
2022-03-29 12:07:38 +00:00
EX_SOURCE_DATA_EXHAUSTED = 0x3 ,
} EX_SOURCE_STATUS ;
2022-02-11 06:33:57 +00:00
typedef struct SSourceDataInfo {
2022-04-14 14:32:49 +00:00
struct SExchangeInfo * pEx ;
2022-03-29 12:07:38 +00:00
int32_t index ;
2022-04-14 14:32:49 +00:00
SRetrieveTableRsp * pRsp ;
2022-03-29 12:07:38 +00:00
uint64_t totalRows ;
2022-04-01 08:09:00 +00:00
int32_t code ;
2022-03-29 12:07:38 +00:00
EX_SOURCE_STATUS status ;
2022-02-11 06:33:57 +00:00
} SSourceDataInfo ;
2022-03-11 11:29:43 +00:00
typedef struct SLoadRemoteDataInfo {
2022-04-14 14:32:49 +00:00
uint64_t totalSize ; // total load bytes from remote
uint64_t totalRows ; // total number of rows
uint64_t totalElapsed ; // total elapsed time
2022-03-11 11:29:43 +00:00
} SLoadRemoteDataInfo ;
2022-01-16 07:56:48 +00:00
typedef struct SExchangeInfo {
2022-04-14 14:32:49 +00:00
SArray * pSources ;
SArray * pSourceDataInfo ;
tsem_t ready ;
void * pTransporter ;
SSDataBlock * pResult ;
bool seqLoadData ; // sequential load data or not, false by default
int32_t current ;
2022-03-11 11:29:43 +00:00
SLoadRemoteDataInfo loadInfo ;
2022-01-16 07:56:48 +00:00
} SExchangeInfo ;
2022-04-04 06:54:39 +00:00
typedef struct SColMatchInfo {
int32_t colId ;
int32_t targetSlotId ;
bool output ;
} SColMatchInfo ;
2022-04-26 05:09:29 +00:00
typedef struct SScanInfo {
int32_t numOfAsc ;
int32_t numOfDesc ;
} SScanInfo ;
2021-11-02 05:37:31 +00:00
typedef struct STableScanInfo {
2022-04-02 07:08:48 +00:00
void * dataReader ;
2022-05-03 15:52:17 +00:00
SFileBlockLoadRecorder readRecorder ;
2022-03-09 06:58:15 +00:00
int64_t numOfRows ;
2022-04-26 05:09:29 +00:00
int64_t elapsedTime ;
2022-05-03 15:52:17 +00:00
// int32_t prevGroupId; // previous table group id
2022-04-26 05:09:29 +00:00
SScanInfo scanInfo ;
2022-05-03 15:23:49 +00:00
int32_t scanTimes ;
SNode * pFilterNode ; // filter info, which is push down by optimizer
SqlFunctionCtx * pCtx ; // which belongs to the direct upstream operator operator query context
2022-02-08 02:21:00 +00:00
SResultRowInfo * pResultRowInfo ;
int32_t * rowCellInfoOffset ;
SExprInfo * pExpr ;
2022-04-12 09:55:17 +00:00
SSDataBlock * pResBlock ;
2022-03-26 07:02:29 +00:00
SArray * pColMatchInfo ;
2021-11-02 05:37:31 +00:00
int32_t numOfOutput ;
2022-04-15 13:42:46 +00:00
2022-04-26 05:09:29 +00:00
SQueryTableDataCond cond ;
2022-04-16 14:50:08 +00:00
int32_t scanFlag ; // table scan flag to denote if it is a repeat/reverse/main scan
2022-04-15 10:06:49 +00:00
int32_t dataBlockLoadFlag ;
2022-04-18 10:47:59 +00:00
double sampleRatio ; // data block sample ratio, 1 by default
2022-04-16 14:50:08 +00:00
SInterval interval ; // if the upstream is an interval operator, the interval info is also kept here to get the time window to check if current data block needs to be loaded.
2021-11-02 05:37:31 +00:00
} STableScanInfo ;
typedef struct STagScanInfo {
2022-05-06 11:31:20 +00:00
SColumnInfo * pCols ;
SSDataBlock * pRes ;
SArray * pColMatchInfo ;
int32_t curPos ;
SReadHandle readHandle ;
STableGroupInfo * pTableGroups ;
2021-11-02 05:37:31 +00:00
} STagScanInfo ;
2022-01-20 09:10:28 +00:00
typedef struct SStreamBlockScanInfo {
2022-04-14 14:32:49 +00:00
SArray * pBlockLists ; // multiple SSDatablock.
SSDataBlock * pRes ; // result SSDataBlock
int32_t blockType ; // current block type
int32_t validBlockIndex ; // Is current data has returned?
SColumnInfo * pCols ; // the output column info
uint64_t numOfRows ; // total scanned rows
uint64_t numOfExec ; // execution times
void * readerHandle ; // stream block reader handle
SArray * pColMatchInfo ; //
2022-04-29 05:42:55 +00:00
SNode * pCondition ;
2022-01-20 09:10:28 +00:00
} SStreamBlockScanInfo ;
2022-03-09 06:58:15 +00:00
typedef struct SSysTableScanInfo {
2022-03-10 03:12:44 +00:00
union {
void * pTransporter ;
2022-04-27 07:17:15 +00:00
SReadHandle readHandle ;
2022-03-10 03:12:44 +00:00
} ;
2022-04-14 14:32:49 +00:00
SRetrieveMetaTableRsp * pRsp ;
SRetrieveTableReq req ;
SEpSet epSet ;
tsem_t ready ;
2022-03-18 03:12:49 +00:00
2022-04-25 01:44:39 +00:00
int32_t accountId ;
bool showRewrite ;
SNode * pCondition ; // db_name filter condition, to discard data that are not in current database
2022-04-26 05:53:18 +00:00
SMTbCursor * pCur ; // cursor for iterate the local table meta store.
2022-04-25 01:44:39 +00:00
SArray * scanCols ; // SArray<int16_t> scan column id list
2022-03-18 03:12:49 +00:00
SName name ;
2022-04-14 14:32:49 +00:00
SSDataBlock * pRes ;
2022-03-11 15:28:43 +00:00
int64_t numOfBlocks ; // extract basic running information.
2022-03-11 11:29:43 +00:00
SLoadRemoteDataInfo loadInfo ;
2022-03-09 06:58:15 +00:00
} SSysTableScanInfo ;
2021-11-02 05:37:31 +00:00
typedef struct SOptrBasicInfo {
2022-04-14 14:32:49 +00:00
SResultRowInfo resultRowInfo ;
int32_t * rowCellInfoOffset ; // offset value for each row result cell info
SqlFunctionCtx * pCtx ;
SSDataBlock * pRes ;
2021-11-02 05:37:31 +00:00
} SOptrBasicInfo ;
2022-04-14 14:32:49 +00:00
// TODO move the resultrowsiz together with SOptrBasicInfo:rowCellInfoOffset
2022-02-22 05:12:03 +00:00
typedef struct SAggSupporter {
2022-04-14 14:32:49 +00:00
SHashObj * pResultRowHashTable ; // quick locate the window object for each result
char * keyBuf ; // window key buffer
SDiskbasedBuf * pResultBuf ; // query result buffer based on blocked-wised disk file
2022-04-19 02:12:30 +00:00
int32_t resultRowSize ; // the result buffer size for each result row, with the meta data size for each row
2022-02-22 05:12:03 +00:00
} SAggSupporter ;
2022-04-19 02:12:30 +00:00
typedef struct STimeWindowSupp {
int8_t calTrigger ;
int64_t waterMark ;
2022-04-14 14:32:49 +00:00
SColumnInfoData timeWindowData ; // query time window info for scalar function execution.
2022-04-19 02:12:30 +00:00
} STimeWindowAggSupp ;
2022-05-03 07:04:34 +00:00
typedef struct SIntervalAggOperatorInfo {
2022-04-19 02:12:30 +00:00
SOptrBasicInfo binfo ; // basic info
SGroupResInfo groupResInfo ; // multiple results build supporter
SInterval interval ; // interval info
int32_t primaryTsIndex ; // primary time stamp slot id from result of downstream operator.
STimeWindow win ; // query time range
bool timeWindowInterpo ; // interpolation needed or not
char * * pRow ; // previous row/tuple of already processed datablock
SAggSupporter aggSup ; // aggregate supporter
STableQueryInfo * pCurrent ; // current tableQueryInfo struct
int32_t order ; // current SSDataBlock scan order
EOPTR_EXEC_MODEL execModel ; // operator execution model [batch model|stream model]
SArray * pUpdatedWindow ; // updated time window due to the input data block from the downstream operator.
STimeWindowAggSupp twAggSup ;
2022-04-20 06:59:06 +00:00
struct SFillInfo * pFillInfo ; // fill info
2022-05-03 07:04:34 +00:00
} SIntervalAggOperatorInfo ;
2022-02-22 05:12:03 +00:00
typedef struct SAggOperatorInfo {
2022-03-14 08:09:26 +00:00
SOptrBasicInfo binfo ;
SAggSupporter aggSup ;
STableQueryInfo * current ;
2022-04-16 11:10:21 +00:00
uint64_t groupId ;
2022-03-14 08:09:26 +00:00
SGroupResInfo groupResInfo ;
STableQueryInfo * pTableQueryInfo ;
2022-04-16 02:00:25 +00:00
SExprInfo * pScalarExprInfo ;
int32_t numOfScalarExpr ; // the number of scalar expression before the aggregate function can be applied
SqlFunctionCtx * pScalarCtx ; // scalar function requried sql function struct.
int32_t * rowCellInfoOffset ; // offset value for each row result cell info
2021-11-02 05:37:31 +00:00
} SAggOperatorInfo ;
typedef struct SProjectOperatorInfo {
2022-04-19 02:12:30 +00:00
SOptrBasicInfo binfo ;
SAggSupporter aggSup ;
SSDataBlock * existDataBlock ;
SArray * pPseudoColInfo ;
SLimit limit ;
SLimit slimit ;
uint64_t groupId ;
int64_t curSOffset ;
int64_t curGroupOutput ;
int64_t curOffset ;
int64_t curOutput ;
2021-11-02 05:37:31 +00:00
} SProjectOperatorInfo ;
typedef struct SFillOperatorInfo {
2022-02-08 02:21:00 +00:00
struct SFillInfo * pFillInfo ;
SSDataBlock * pRes ;
int64_t totalInputRows ;
void * * p ;
SSDataBlock * existNewGroupBlock ;
bool multigroupResult ;
2021-11-02 05:37:31 +00:00
} SFillOperatorInfo ;
typedef struct SGroupbyOperatorInfo {
2022-04-14 14:32:49 +00:00
SOptrBasicInfo binfo ;
2022-04-21 05:57:32 +00:00
SArray * pGroupCols ; // group by columns, SArray<SColumn>
2022-04-14 14:32:49 +00:00
SArray * pGroupColVals ; // current group column values, SArray<SGroupKeys>
SNode * pCondition ;
bool isInit ; // denote if current val is initialized or not
char * keyBuf ; // group by keys for hash
int32_t groupKeyLen ; // total group by column width
SGroupResInfo groupResInfo ;
SAggSupporter aggSup ;
SExprInfo * pScalarExprInfo ;
int32_t numOfScalarExpr ; // the number of scalar expression in group operator
SqlFunctionCtx * pScalarFuncCtx ;
2022-04-19 10:45:28 +00:00
int32_t * rowCellInfoOffset ; // offset value for each row result cell info
2021-11-02 05:37:31 +00:00
} SGroupbyOperatorInfo ;
2022-04-08 02:24:35 +00:00
typedef struct SDataGroupInfo {
2022-04-19 02:12:30 +00:00
uint64_t groupId ;
int64_t numOfRows ;
SArray * pPageList ;
2022-04-08 02:24:35 +00:00
} SDataGroupInfo ;
// The sort in partition may be needed later.
typedef struct SPartitionOperatorInfo {
2022-04-14 14:32:49 +00:00
SOptrBasicInfo binfo ;
SArray * pGroupCols ;
SArray * pGroupColVals ; // current group column values, SArray<SGroupKeys>
char * keyBuf ; // group by keys for hash
int32_t groupKeyLen ; // total group by column width
SHashObj * pGroupSet ; // quick locate the window object for each result
SDiskbasedBuf * pBuf ; // query result buffer based on blocked-wised disk file
int32_t rowCapacity ; // maximum number of rows for each buffer page
int32_t * columnOffset ; // start position for each column data
2022-04-19 02:12:30 +00:00
void * pGroupIter ; // group iterator
int32_t pageIndex ; // page index of current group
2022-04-08 02:24:35 +00:00
} SPartitionOperatorInfo ;
2021-11-02 05:37:31 +00:00
2022-04-09 07:01:28 +00:00
typedef struct SWindowRowsSup {
2022-04-14 14:32:49 +00:00
STimeWindow win ;
TSKEY prevTs ;
int32_t startRowIndex ;
int32_t numOfRows ;
2022-04-09 07:01:28 +00:00
} SWindowRowsSup ;
2022-03-12 15:40:04 +00:00
typedef struct SSessionAggOperatorInfo {
2022-04-19 02:12:30 +00:00
SOptrBasicInfo binfo ;
SAggSupporter aggSup ;
SGroupResInfo groupResInfo ;
SWindowRowsSup winSup ;
bool reptScan ; // next round scan
int64_t gap ; // session window gap
2022-05-03 07:04:34 +00:00
int32_t tsSlotId ; // primary timestamp slot id
2022-04-19 02:12:30 +00:00
STimeWindowAggSupp twAggSup ;
2022-03-12 15:40:04 +00:00
} SSessionAggOperatorInfo ;
2021-11-02 05:37:31 +00:00
2022-04-10 07:35:09 +00:00
typedef struct STimeSliceOperatorInfo {
2022-04-14 14:32:49 +00:00
SOptrBasicInfo binfo ;
SInterval interval ;
SGroupResInfo groupResInfo ; // multiple results build supporter
2022-04-10 07:35:09 +00:00
} STimeSliceOperatorInfo ;
2021-11-02 05:37:31 +00:00
typedef struct SStateWindowOperatorInfo {
2022-04-19 02:12:30 +00:00
SOptrBasicInfo binfo ;
SAggSupporter aggSup ;
SGroupResInfo groupResInfo ;
SWindowRowsSup winSup ;
int32_t colIndex ; // start row index
bool hasKey ;
SStateKeys stateKey ;
2022-05-03 07:33:24 +00:00
int32_t tsSlotId ; // primary timestamp column slot id
2022-04-19 02:12:30 +00:00
STimeWindowAggSupp twAggSup ;
2022-04-14 14:32:49 +00:00
// bool reptScan;
2021-11-02 05:37:31 +00:00
} SStateWindowOperatorInfo ;
2022-02-19 08:15:09 +00:00
typedef struct SSortedMergeOperatorInfo {
2022-04-15 13:42:46 +00:00
2022-04-14 07:33:37 +00:00
SOptrBasicInfo binfo ;
SArray * pSortInfo ;
int32_t numOfSources ;
SSortHandle * pSortHandle ;
int32_t bufPageSize ;
uint32_t sortBufSize ; // max buffer size for in-memory sort
int32_t resultRowFactor ;
bool hasGroupVal ;
SDiskbasedBuf * pTupleStore ; // keep the final results
int32_t numOfResPerPage ;
char * * groupVal ;
SArray * groupInfo ;
SAggSupporter aggSup ;
2022-02-19 08:15:09 +00:00
} SSortedMergeOperatorInfo ;
2022-02-08 10:01:21 +00:00
2022-03-28 11:08:07 +00:00
typedef struct SSortOperatorInfo {
2022-05-05 10:54:19 +00:00
SOptrBasicInfo binfo ;
2022-04-14 14:32:49 +00:00
uint32_t sortBufSize ; // max buffer size for in-memory sort
SArray * pSortInfo ;
SSortHandle * pSortHandle ;
2022-05-06 11:31:20 +00:00
SArray * pColMatchInfo ; // for index map from table scan output
2022-04-14 14:32:49 +00:00
int32_t bufPageSize ;
2022-02-08 10:01:21 +00:00
2022-02-17 10:16:50 +00:00
// TODO extact struct
2022-04-14 14:32:49 +00:00
int64_t startTs ; // sort start time
uint64_t sortElapsed ; // sort elapsed time, time to flush to disk not included.
uint64_t totalSize ; // total load bytes from remote
uint64_t totalRows ; // total number of rows
uint64_t totalElapsed ; // total elapsed time
2022-03-28 11:08:07 +00:00
} SSortOperatorInfo ;
2021-11-02 05:37:31 +00:00
2022-04-14 14:32:49 +00:00
typedef struct STagFilterOperatorInfo {
SOptrBasicInfo binfo ;
} STagFilterOperatorInfo ;
2022-04-16 02:07:28 +00:00
2022-04-14 14:12:10 +00:00
typedef struct SJoinOperatorInfo {
SSDataBlock * pRes ;
int32_t joinType ;
SSDataBlock * pLeft ;
int32_t leftPos ;
SColumnInfo leftCol ;
SSDataBlock * pRight ;
int32_t rightPos ;
SColumnInfo rightCol ;
SNode * pOnCondition ;
} SJoinOperatorInfo ;
2022-05-03 06:43:53 +00:00
# define OPTR_IS_OPENED(_optr) (((_optr)->status & OP_OPENED) == OP_OPENED)
# define OPTR_SET_OPENED(_optr) ((_optr)->status |= OP_OPENED)
2022-04-26 12:26:32 +00:00
SOperatorFpSet createOperatorFpSet ( __optr_open_fn_t openFn , __optr_fn_t nextFn , __optr_fn_t streamFn ,
__optr_fn_t cleanup , __optr_close_fn_t closeFn , __optr_encode_fn_t encode ,
__optr_decode_fn_t decode , __optr_get_explain_fn_t explain ) ;
2022-04-04 06:54:39 +00:00
int32_t operatorDummyOpenFn ( SOperatorInfo * pOperator ) ;
2022-04-14 14:32:49 +00:00
void operatorDummyCloseFn ( void * param , int32_t numOfCols ) ;
2022-04-04 06:54:39 +00:00
int32_t appendDownstream ( SOperatorInfo * p , SOperatorInfo * * pDownstream , int32_t num ) ;
int32_t initAggInfo ( SOptrBasicInfo * pBasicInfo , SAggSupporter * pAggSup , SExprInfo * pExprInfo , int32_t numOfCols ,
2022-04-18 10:47:59 +00:00
SSDataBlock * pResultBlock , size_t keyBufSize , const char * pkey ) ;
void initResultSizeInfo ( SOperatorInfo * pOperator , int32_t numOfRows ) ;
2022-05-03 07:04:34 +00:00
void doBuildResultDatablock ( SOptrBasicInfo * pbInfo , SGroupResInfo * pGroupResInfo , SExprInfo * pExprInfo , SDiskbasedBuf * pBuf ) ;
2022-04-14 14:32:49 +00:00
void finalizeMultiTupleQueryResult ( SqlFunctionCtx * pCtx , int32_t numOfOutput , SDiskbasedBuf * pBuf ,
SResultRowInfo * pResultRowInfo , int32_t * rowCellInfoOffset ) ;
void doApplyFunctions ( SqlFunctionCtx * pCtx , STimeWindow * pWin , SColumnInfoData * pTimeWindowData , int32_t offset ,
int32_t forwardStep , TSKEY * tsCol , int32_t numOfTotal , int32_t numOfOutput , int32_t order ) ;
int32_t setGroupResultOutputBuf ( SOptrBasicInfo * binfo , int32_t numOfCols , char * pData , int16_t type , int16_t bytes ,
int32_t groupId , SDiskbasedBuf * pBuf , SExecTaskInfo * pTaskInfo , SAggSupporter * pAggSup ) ;
void doDestroyBasicInfo ( SOptrBasicInfo * pInfo , int32_t numOfOutput ) ;
int32_t setSDataBlockFromFetchRsp ( SSDataBlock * pRes , SLoadRemoteDataInfo * pLoadInfo , int32_t numOfRows , char * pData ,
int32_t compLen , int32_t numOfOutput , int64_t startTs , uint64_t * total ,
SArray * pColList ) ;
2022-04-20 06:59:06 +00:00
void getAlignQueryTimeWindow ( SInterval * pInterval , int32_t precision , int64_t key , STimeWindow * win ) ;
2022-04-26 05:53:11 +00:00
int32_t getTableScanOrder ( SOperatorInfo * pOperator ) ;
2022-04-16 14:50:08 +00:00
2022-04-14 14:32:49 +00:00
void doSetOperatorCompleted ( SOperatorInfo * pOperator ) ;
void doFilter ( const SNode * pFilterNode , SSDataBlock * pBlock ) ;
2022-04-12 09:55:17 +00:00
SqlFunctionCtx * createSqlFunctionCtx ( SExprInfo * pExprInfo , int32_t numOfOutput , int32_t * * rowCellInfoOffset ) ;
2022-04-28 07:30:18 +00:00
void relocateColumnData ( SSDataBlock * pBlock , const SArray * pColMatchInfo , SArray * pCols ) ;
2022-05-03 06:43:53 +00:00
void initExecTimeWindowInfo ( SColumnInfoData * pColData , STimeWindow * pQueryWindow ) ;
void cleanupAggSup ( SAggSupporter * pAggSup ) ;
2022-05-05 10:54:19 +00:00
void destroyBasicOperatorInfo ( void * param , int32_t numOfOutput ) ;
void appendOneRowToDataBlock ( SSDataBlock * pBlock , STupleHandle * pTupleHandle ) ;
2022-05-06 11:31:20 +00:00
SSDataBlock * getSortedBlockData ( SSortHandle * pHandle , SSDataBlock * pDataBlock , int32_t capacity , SArray * pColMatchInfo ) ;
2022-05-05 10:54:19 +00:00
SSDataBlock * loadNextDataBlock ( void * param ) ;
2022-05-03 06:43:53 +00:00
2022-05-05 10:54:19 +00:00
void setResultRowInitCtx ( SResultRow * pResult , SqlFunctionCtx * pCtx , int32_t numOfOutput , int32_t * rowCellInfoOffset ) ;
2022-05-03 06:43:53 +00:00
SResultRow * doSetResultOutBufByKey ( SDiskbasedBuf * pResultBuf , SResultRowInfo * pResultRowInfo ,
char * pData , int16_t bytes , bool masterscan , uint64_t groupId ,
SExecTaskInfo * pTaskInfo , bool isIntervalQuery , SAggSupporter * pSup ) ;
2022-04-04 06:54:39 +00:00
2022-03-10 10:07:07 +00:00
SOperatorInfo * createExchangeOperatorInfo ( const SNodeList * pSources , SSDataBlock * pBlock , SExecTaskInfo * pTaskInfo ) ;
2022-04-15 13:42:46 +00:00
2022-04-26 05:09:29 +00:00
SOperatorInfo * createTableScanOperatorInfo ( void * pDataReader , SQueryTableDataCond * pCond , int32_t numOfOutput , int32_t dataLoadFlag , const uint8_t * scanInfo ,
SArray * pColMatchInfo , SSDataBlock * pResBlock , SNode * pCondition , SInterval * pInterval , double sampleRatio , SExecTaskInfo * pTaskInfo ) ;
2022-04-16 02:00:25 +00:00
SOperatorInfo * createAggregateOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExprInfo , int32_t numOfCols , SSDataBlock * pResultBlock , SExprInfo * pScalarExprInfo ,
int32_t numOfScalarExpr , SExecTaskInfo * pTaskInfo , const STableGroupInfo * pTableGroupInfo ) ;
2022-04-09 02:18:52 +00:00
2022-04-09 02:31:15 +00:00
SOperatorInfo * createProjectOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExprInfo , int32_t num , SSDataBlock * pResBlock , SLimit * pLimit , SLimit * pSlimit , SExecTaskInfo * pTaskInfo ) ;
2022-05-05 10:54:19 +00:00
SOperatorInfo * createSortOperatorInfo ( SOperatorInfo * downstream , SSDataBlock * pResBlock , SArray * pSortInfo , SExprInfo * pExprInfo , int32_t numOfCols ,
SArray * pIndexMap , SExecTaskInfo * pTaskInfo ) ;
2022-04-09 02:18:52 +00:00
2022-03-28 11:08:07 +00:00
SOperatorInfo * createSortedMergeOperatorInfo ( SOperatorInfo * * downstream , int32_t numOfDownstream , SExprInfo * pExprInfo , int32_t num , SArray * pSortInfo , SArray * pGroupInfo , SExecTaskInfo * pTaskInfo ) ;
2022-04-15 13:42:46 +00:00
2022-03-21 06:00:30 +00:00
SOperatorInfo * createSysTableScanOperatorInfo ( void * pSysTableReadHandle , SSDataBlock * pResBlock , const SName * pName ,
2022-04-14 14:32:49 +00:00
SNode * pCondition , SEpSet epset , SArray * colList ,
SExecTaskInfo * pTaskInfo , bool showRewrite , int32_t accountId ) ;
SOperatorInfo * createIntervalOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExprInfo , int32_t numOfCols ,
2022-04-19 02:12:30 +00:00
SSDataBlock * pResBlock , SInterval * pInterval , int32_t primaryTsSlotId ,
2022-04-20 06:59:06 +00:00
STimeWindowAggSupp * pTwAggSupp , const STableGroupInfo * pTableGroupInfo , SExecTaskInfo * pTaskInfo ) ;
2022-04-26 12:26:32 +00:00
SOperatorInfo * createStreamIntervalOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExprInfo , int32_t numOfCols ,
2022-05-03 06:43:53 +00:00
2022-04-26 12:26:32 +00:00
SSDataBlock * pResBlock , SInterval * pInterval , int32_t primaryTsSlotId ,
STimeWindowAggSupp * pTwAggSupp , const STableGroupInfo * pTableGroupInfo , SExecTaskInfo * pTaskInfo ) ;
2022-04-14 14:32:49 +00:00
SOperatorInfo * createSessionAggOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExprInfo , int32_t numOfCols ,
2022-05-03 07:04:34 +00:00
SSDataBlock * pResBlock , int64_t gap , int32_t tsSlotId , STimeWindowAggSupp * pTwAggSupp ,
SExecTaskInfo * pTaskInfo ) ;
2022-04-14 14:32:49 +00:00
SOperatorInfo * createGroupOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExprInfo , int32_t numOfCols ,
SSDataBlock * pResultBlock , SArray * pGroupColList , SNode * pCondition ,
SExprInfo * pScalarExprInfo , int32_t numOfScalarExpr , SExecTaskInfo * pTaskInfo ,
const STableGroupInfo * pTableGroupInfo ) ;
2022-04-02 07:08:48 +00:00
SOperatorInfo * createDataBlockInfoScanOperator ( void * dataReader , SExecTaskInfo * pTaskInfo ) ;
2022-04-14 14:32:49 +00:00
SOperatorInfo * createStreamScanOperatorInfo ( void * streamReadHandle , SSDataBlock * pResBlock , SArray * pColList ,
2022-04-29 05:42:55 +00:00
SArray * pTableIdList , SExecTaskInfo * pTaskInfo , SNode * pConditions ) ;
2022-04-02 07:08:48 +00:00
2022-04-14 14:32:49 +00:00
SOperatorInfo * createFillOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExpr , int32_t numOfCols ,
2022-05-02 15:52:32 +00:00
SInterval * pInterval , STimeWindow * pWindow , SSDataBlock * pResBlock , int32_t fillType , SNodeListNode * fillVal ,
2022-04-14 14:32:49 +00:00
bool multigroupResult , SExecTaskInfo * pTaskInfo ) ;
SOperatorInfo * createStatewindowOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExpr , int32_t numOfCols ,
2022-05-03 07:33:24 +00:00
SSDataBlock * pResBlock , STimeWindowAggSupp * pTwAggSupp , int32_t tsSlotId , SExecTaskInfo * pTaskInfo ) ;
2022-02-24 09:18:56 +00:00
2022-04-14 14:32:49 +00:00
SOperatorInfo * createPartitionOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExprInfo , int32_t numOfCols ,
SSDataBlock * pResultBlock , SArray * pGroupColList , SExecTaskInfo * pTaskInfo ,
const STableGroupInfo * pTableGroupInfo ) ;
2022-05-03 07:27:13 +00:00
2022-04-14 14:32:49 +00:00
SOperatorInfo * createTimeSliceOperatorInfo ( SOperatorInfo * downstream , SExprInfo * pExprInfo , int32_t numOfCols ,
SSDataBlock * pResultBlock , SExecTaskInfo * pTaskInfo ) ;
2022-04-10 07:35:09 +00:00
2022-04-14 14:12:10 +00:00
SOperatorInfo * createJoinOperatorInfo ( SOperatorInfo * * pDownstream , int32_t numOfDownstream , SExprInfo * pExprInfo , int32_t numOfCols , SSDataBlock * pResBlock , SNode * pOnCondition , SExecTaskInfo * pTaskInfo ) ;
2022-05-06 11:31:20 +00:00
SOperatorInfo * createTagScanOperatorInfo ( SReadHandle * pReadHandle , SExprInfo * pExpr , int32_t numOfOutput , SSDataBlock * pResBlock , SArray * pColMatchInfo , STableGroupInfo * pTableGroupInfo , SExecTaskInfo * pTaskInfo ) ;
2022-04-14 14:12:10 +00:00
2022-04-07 05:57:47 +00:00
#if 0
2022-03-12 15:40:04 +00:00
SOperatorInfo * createTableSeqScanOperatorInfo ( void * pTsdbReadHandle , STaskRuntimeEnv * pRuntimeEnv ) ;
2022-02-08 02:21:00 +00:00
SOperatorInfo * createMultiTableTimeIntervalOperatorInfo ( STaskRuntimeEnv * pRuntimeEnv , SOperatorInfo * downstream ,
SExprInfo * pExpr , int32_t numOfOutput ) ;
2022-04-07 05:57:47 +00:00
# endif
2021-11-02 05:37:31 +00:00
2022-04-28 10:08:56 +00:00
int32_t projectApplyFunctions ( SExprInfo * pExpr , SSDataBlock * pResult , SSDataBlock * pSrcBlock , SqlFunctionCtx * pCtx ,
2022-04-14 14:32:49 +00:00
int32_t numOfOutput , SArray * pPseudoList ) ;
2022-04-12 09:55:17 +00:00
2022-04-18 04:07:04 +00:00
void setInputDataBlock ( SOperatorInfo * pOperator , SqlFunctionCtx * pCtx , SSDataBlock * pBlock , int32_t order , bool createDummyCol ) ;
2022-03-21 06:00:30 +00:00
2022-01-28 02:44:02 +00:00
void copyTsColoum ( SSDataBlock * pRes , SqlFunctionCtx * pCtx , int32_t numOfOutput ) ;
2021-11-02 05:37:31 +00:00
2022-05-03 07:27:13 +00:00
STableQueryInfo * createTableQueryInfo ( void * buf , STimeWindow win ) ;
2021-11-02 05:37:31 +00:00
2022-02-08 02:21:00 +00:00
bool isTaskKilled ( SExecTaskInfo * pTaskInfo ) ;
2021-11-02 05:37:31 +00:00
int32_t checkForQueryBuf ( size_t numOfTables ) ;
2022-04-14 14:32:49 +00:00
void setTaskKilled ( SExecTaskInfo * pTaskInfo ) ;
2021-11-02 05:37:31 +00:00
void publishOperatorProfEvent ( SOperatorInfo * operatorInfo , EQueryProfEventType eventType ) ;
2022-02-08 02:21:00 +00:00
void publishQueryAbortEvent ( SExecTaskInfo * pTaskInfo , int32_t code ) ;
2022-01-18 03:21:13 +00:00
2022-02-08 02:21:00 +00:00
void queryCostStatis ( SExecTaskInfo * pTaskInfo ) ;
2021-11-02 05:37:31 +00:00
2022-04-14 14:32:49 +00:00
void doDestroyTask ( SExecTaskInfo * pTaskInfo ) ;
2021-11-02 05:37:31 +00:00
int32_t getMaximumIdleDurationSec ( ) ;
2022-02-08 02:21:00 +00:00
void doInvokeUdf ( struct SUdfInfo * pUdfInfo , SqlFunctionCtx * pCtx , int32_t idx , int32_t type ) ;
void setTaskStatus ( SExecTaskInfo * pTaskInfo , int8_t status ) ;
2022-04-14 14:32:49 +00:00
int32_t createExecTaskInfoImpl ( SSubplan * pPlan , SExecTaskInfo * * pTaskInfo , SReadHandle * pHandle , uint64_t taskId ,
EOPTR_EXEC_MODEL model ) ;
int32_t getOperatorExplainExecInfo ( SOperatorInfo * operatorInfo , SExplainExecInfo * * pRes , int32_t * capacity ,
int32_t * resNum ) ;
bool aggDecodeResultRow ( SOperatorInfo * pOperator , SAggSupporter * pSup , SOptrBasicInfo * pInfo , char * result ,
int32_t length ) ;
void aggEncodeResultRow ( SOperatorInfo * pOperator , SAggSupporter * pSup , SOptrBasicInfo * pInfo , char * * result ,
int32_t * length ) ;
2022-04-11 09:08:13 +00:00
2022-02-08 02:21:00 +00:00
# ifdef __cplusplus
}
# endif
2021-11-02 05:37:31 +00:00
# endif // TDENGINE_EXECUTORIMPL_H