plannodes.h 13.7 KB
Newer Older
X
Xiaoyu Wang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
 * 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/>.
 */

#ifndef _TD_PLANN_NODES_H_
#define _TD_PLANN_NODES_H_

#ifdef __cplusplus
extern "C" {
#endif

X
Xiaoyu Wang 已提交
23
#include "query.h"
24
#include "querynodes.h"
X
Xiaoyu Wang 已提交
25
#include "tname.h"
X
Xiaoyu Wang 已提交
26

27 28
#define SLOT_NAME_LEN TSDB_TABLE_NAME_LEN + TSDB_COL_NAME_LEN

X
Xiaoyu Wang 已提交
29
typedef struct SLogicNode {
30 31 32 33
  ENodeType          type;
  SNodeList*         pTargets;  // SColumnNode
  SNode*             pConditions;
  SNodeList*         pChildren;
X
Xiaoyu Wang 已提交
34
  struct SLogicNode* pParent;
35
  int32_t            optimizedFlag;
X
Xiaoyu Wang 已提交
36
  uint8_t            precision;
37 38
  SNode*             pLimit;
  SNode*             pSlimit;
X
Xiaoyu Wang 已提交
39 40
} SLogicNode;

X
Xiaoyu Wang 已提交
41 42 43 44 45
typedef enum EScanType {
  SCAN_TYPE_TAG = 1,
  SCAN_TYPE_TABLE,
  SCAN_TYPE_SYSTEM_TABLE,
  SCAN_TYPE_STREAM,
46
  SCAN_TYPE_TABLE_MERGE,
X
Xiaoyu Wang 已提交
47 48
  SCAN_TYPE_BLOCK_INFO,
  SCAN_TYPE_LAST_ROW
X
Xiaoyu Wang 已提交
49
} EScanType;
X
Xiaoyu Wang 已提交
50

X
Xiaoyu Wang 已提交
51
typedef struct SScanLogicNode {
X
Xiaoyu Wang 已提交
52 53 54 55 56
  SLogicNode    node;
  SNodeList*    pScanCols;
  SNodeList*    pScanPseudoCols;
  int8_t        tableType;
  uint64_t      tableId;
X
Xiaoyu Wang 已提交
57
  uint64_t      stableId;
X
Xiaoyu Wang 已提交
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
  SVgroupsInfo* pVgroupList;
  EScanType     scanType;
  uint8_t       scanSeq[2];  // first is scan count, and second is reverse scan count
  STimeWindow   scanRange;
  SName         tableName;
  bool          showRewrite;
  double        ratio;
  SNodeList*    pDynamicScanFuncs;
  int32_t       dataRequired;
  int64_t       interval;
  int64_t       offset;
  int64_t       sliding;
  int8_t        intervalUnit;
  int8_t        slidingUnit;
  SNode*        pTagCond;
X
Xiaoyu Wang 已提交
73
  SNode*        pTagIndexCond;
X
Xiaoyu Wang 已提交
74 75 76 77
  int8_t        triggerType;
  int64_t       watermark;
  int16_t       tsColId;
  double        filesFactor;
X
Xiaoyu Wang 已提交
78
  SArray*       pSmaIndexes;
79 80
  SNodeList*    pGroupTags;
  bool          groupSort;
X
Xiaoyu Wang 已提交
81 82 83 84
} SScanLogicNode;

typedef struct SJoinLogicNode {
  SLogicNode node;
85 86
  EJoinType  joinType;
  SNode*     pOnConditions;
X
Xiaoyu Wang 已提交
87
  bool       isSingleTableJoin;
X
Xiaoyu Wang 已提交
88 89 90 91 92 93 94 95 96 97 98
} SJoinLogicNode;

typedef struct SAggLogicNode {
  SLogicNode node;
  SNodeList* pGroupKeys;
  SNodeList* pAggFuncs;
} SAggLogicNode;

typedef struct SProjectLogicNode {
  SLogicNode node;
  SNodeList* pProjections;
99
  char       stmtName[TSDB_TABLE_NAME_LEN];
X
Xiaoyu Wang 已提交
100 101
} SProjectLogicNode;

102 103
typedef struct SIndefRowsFuncLogicNode {
  SLogicNode node;
X
Xiaoyu Wang 已提交
104
  SNodeList* pFuncs;
105
  bool       isTailFunc;
106
  bool       isUniqueFunc;
107 108
} SIndefRowsFuncLogicNode;

X
Xiaoyu Wang 已提交
109 110 111 112 113
typedef struct SInterpFuncLogicNode {
  SLogicNode  node;
  SNodeList*  pFuncs;
  STimeWindow timeRange;
  int64_t     interval;
X
Xiaoyu Wang 已提交
114 115 116
  EFillMode   fillMode;
  SNode*      pFillValues;  // SNodeListNode
  SNode*      pTimeSeries;  // SColumnNode
X
Xiaoyu Wang 已提交
117 118
} SInterpFuncLogicNode;

X
Xiaoyu Wang 已提交
119 120 121 122 123 124 125 126
typedef enum EModifyTableType { MODIFY_TABLE_TYPE_INSERT = 1, MODIFY_TABLE_TYPE_DELETE } EModifyTableType;

typedef struct SVnodeModifyLogicNode {
  SLogicNode       node;
  EModifyTableType modifyType;
  int32_t          msgType;
  SArray*          pDataBlocks;
  SVgDataBlocks*   pVgDataBlocks;
X
Xiaoyu Wang 已提交
127
  SNode*           pAffectedRows;  // SColumnNode
X
Xiaoyu Wang 已提交
128 129 130 131 132
  uint64_t         tableId;
  int8_t           tableType;  // table type
  char             tableFName[TSDB_TABLE_FNAME_LEN];
  STimeWindow      deleteTimeRange;
} SVnodeModifyLogicNode;
133

X
Xiaoyu Wang 已提交
134 135
typedef struct SExchangeLogicNode {
  SLogicNode node;
136
  int32_t    srcGroupId;
X
Xiaoyu Wang 已提交
137 138
} SExchangeLogicNode;

X
Xiaoyu Wang 已提交
139 140 141
typedef struct SMergeLogicNode {
  SLogicNode node;
  SNodeList* pMergeKeys;
X
Xiaoyu Wang 已提交
142
  SNodeList* pInputs;
X
Xiaoyu Wang 已提交
143 144
  int32_t    numOfChannels;
  int32_t    srcGroupId;
145
  bool       groupSort;
X
Xiaoyu Wang 已提交
146 147
} SMergeLogicNode;

148
typedef enum EWindowType { WINDOW_TYPE_INTERVAL = 1, WINDOW_TYPE_SESSION, WINDOW_TYPE_STATE } EWindowType;
X
Xiaoyu Wang 已提交
149

150
typedef enum EWindowAlgorithm {
X
Xiaoyu Wang 已提交
151
  INTERVAL_ALGO_HASH = 1,
X
Xiaoyu Wang 已提交
152
  INTERVAL_ALGO_MERGE,
X
Xiaoyu Wang 已提交
153 154 155
  INTERVAL_ALGO_STREAM_FINAL,
  INTERVAL_ALGO_STREAM_SEMI,
  INTERVAL_ALGO_STREAM_SINGLE,
156 157 158 159 160
  SESSION_ALGO_STREAM_SEMI,
  SESSION_ALGO_STREAM_FINAL,
  SESSION_ALGO_STREAM_SINGLE,
  SESSION_ALGO_MERGE,
} EWindowAlgorithm;
161

X
Xiaoyu Wang 已提交
162
typedef struct SWindowLogicNode {
163 164 165 166 167 168 169 170 171 172
  SLogicNode       node;
  EWindowType      winType;
  SNodeList*       pFuncs;
  int64_t          interval;
  int64_t          offset;
  int64_t          sliding;
  int8_t           intervalUnit;
  int8_t           slidingUnit;
  int64_t          sessionGap;
  SNode*           pTspk;
X
Xiaoyu Wang 已提交
173
  SNode*           pTsEnd;
174 175 176 177 178
  SNode*           pStateExpr;
  int8_t           triggerType;
  int64_t          watermark;
  double           filesFactor;
  EWindowAlgorithm windowAlgo;
X
Xiaoyu Wang 已提交
179 180
} SWindowLogicNode;

X
Xiaoyu Wang 已提交
181
typedef struct SFillLogicNode {
X
Xiaoyu Wang 已提交
182 183 184 185 186
  SLogicNode  node;
  EFillMode   mode;
  SNode*      pWStartTs;
  SNode*      pValues;  // SNodeListNode
  STimeWindow timeRange;
X
Xiaoyu Wang 已提交
187 188
} SFillLogicNode;

X
Xiaoyu Wang 已提交
189 190 191
typedef struct SSortLogicNode {
  SLogicNode node;
  SNodeList* pSortKeys;
192
  bool       groupSort;
X
Xiaoyu Wang 已提交
193 194
} SSortLogicNode;

195 196 197 198 199
typedef struct SPartitionLogicNode {
  SLogicNode node;
  SNodeList* pPartitionKeys;
} SPartitionLogicNode;

200 201 202 203
typedef enum ESubplanType {
  SUBPLAN_TYPE_MERGE = 1,
  SUBPLAN_TYPE_PARTIAL,
  SUBPLAN_TYPE_SCAN,
204 205
  SUBPLAN_TYPE_MODIFY,
  SUBPLAN_TYPE_COMPUTE
206 207
} ESubplanType;

X
Xiaoyu Wang 已提交
208 209
typedef struct SSubplanId {
  uint64_t queryId;
210 211
  int32_t  groupId;
  int32_t  subplanId;
X
Xiaoyu Wang 已提交
212 213
} SSubplanId;

X
Xiaoyu Wang 已提交
214
typedef struct SLogicSubplan {
215 216 217 218 219 220
  ENodeType     type;
  SSubplanId    id;
  SNodeList*    pChildren;
  SNodeList*    pParents;
  SLogicNode*   pNode;
  ESubplanType  subplanType;
X
Xiaoyu Wang 已提交
221
  SVgroupsInfo* pVgroupList;
222 223
  int32_t       level;
  int32_t       splitFlag;
224
  int32_t       numOfComputeNodes;
X
Xiaoyu Wang 已提交
225
} SLogicSubplan;
X
Xiaoyu Wang 已提交
226 227

typedef struct SQueryLogicPlan {
228
  ENodeType  type;
X
Xiaoyu Wang 已提交
229
  SNodeList* pTopSubplans;
X
Xiaoyu Wang 已提交
230 231
} SQueryLogicPlan;

X
Xiaoyu Wang 已提交
232 233
typedef struct SSlotDescNode {
  ENodeType type;
234
  int16_t   slotId;
X
Xiaoyu Wang 已提交
235
  SDataType dataType;
236 237 238
  bool      reserve;
  bool      output;
  bool      tag;
239
  char      name[SLOT_NAME_LEN];
X
Xiaoyu Wang 已提交
240 241
} SSlotDescNode;

X
Xiaoyu Wang 已提交
242
typedef struct SDataBlockDescNode {
243 244
  ENodeType  type;
  int16_t    dataBlockId;
X
Xiaoyu Wang 已提交
245
  SNodeList* pSlots;
246 247 248
  int32_t    totalRowSize;
  int32_t    outputRowSize;
  uint8_t    precision;
X
Xiaoyu Wang 已提交
249
} SDataBlockDescNode;
X
Xiaoyu Wang 已提交
250 251

typedef struct SPhysiNode {
252
  ENodeType           type;
X
Xiaoyu Wang 已提交
253
  SDataBlockDescNode* pOutputDataBlockDesc;
254 255 256
  SNode*              pConditions;
  SNodeList*          pChildren;
  struct SPhysiNode*  pParent;
257 258
  SNode*              pLimit;
  SNode*              pSlimit;
X
Xiaoyu Wang 已提交
259 260 261
} SPhysiNode;

typedef struct SScanPhysiNode {
X
Xiaoyu Wang 已提交
262
  SPhysiNode node;
X
Xiaoyu Wang 已提交
263
  SNodeList* pScanCols;
264 265
  SNodeList* pScanPseudoCols;
  uint64_t   uid;  // unique id of the table
X
Xiaoyu Wang 已提交
266
  uint64_t   suid;
267 268
  int8_t     tableType;
  SName      tableName;
X
Xiaoyu Wang 已提交
269 270 271
} SScanPhysiNode;

typedef SScanPhysiNode STagScanPhysiNode;
272
typedef SScanPhysiNode SBlockDistScanPhysiNode;
X
Xiaoyu Wang 已提交
273
typedef SScanPhysiNode SLastRowScanPhysiNode;
X
Xiaoyu Wang 已提交
274

X
Xiaoyu Wang 已提交
275 276
typedef struct SSystemTableScanPhysiNode {
  SScanPhysiNode scan;
277 278 279
  SEpSet         mgmtEpSet;
  bool           showRewrite;
  int32_t        accountId;
X
Xiaoyu Wang 已提交
280 281
} SSystemTableScanPhysiNode;

X
Xiaoyu Wang 已提交
282 283
typedef struct STableScanPhysiNode {
  SScanPhysiNode scan;
284 285 286 287 288
  uint8_t        scanSeq[2];  // first is scan count, and second is reverse scan count
  STimeWindow    scanRange;
  double         ratio;
  int32_t        dataRequired;
  SNodeList*     pDynamicScanFuncs;
289 290
  SNodeList*     pGroupTags;
  bool           groupSort;
291 292 293 294 295
  int64_t        interval;
  int64_t        offset;
  int64_t        sliding;
  int8_t         intervalUnit;
  int8_t         slidingUnit;
5
54liuyao 已提交
296 297 298
  int8_t         triggerType;
  int64_t        watermark;
  int16_t        tsColId;
5
54liuyao 已提交
299
  double         filesFactor;
X
Xiaoyu Wang 已提交
300 301 302
} STableScanPhysiNode;

typedef STableScanPhysiNode STableSeqScanPhysiNode;
X
Xiaoyu Wang 已提交
303
typedef STableScanPhysiNode STableMergeScanPhysiNode;
5
54liuyao 已提交
304
typedef STableScanPhysiNode SStreamScanPhysiNode;
X
Xiaoyu Wang 已提交
305 306 307 308 309 310

typedef struct SProjectPhysiNode {
  SPhysiNode node;
  SNodeList* pProjections;
} SProjectPhysiNode;

311 312 313
typedef struct SIndefRowsFuncPhysiNode {
  SPhysiNode node;
  SNodeList* pExprs;
X
Xiaoyu Wang 已提交
314
  SNodeList* pFuncs;
315 316
} SIndefRowsFuncPhysiNode;

X
Xiaoyu Wang 已提交
317 318 319 320 321 322
typedef struct SInterpFuncPhysiNode {
  SPhysiNode  node;
  SNodeList*  pExprs;
  SNodeList*  pFuncs;
  STimeWindow timeRange;
  int64_t     interval;
X
Xiaoyu Wang 已提交
323 324 325
  EFillMode   fillMode;
  SNode*      pFillValues;  // SNodeListNode
  SNode*      pTimeSeries;  // SColumnNode
X
Xiaoyu Wang 已提交
326 327
} SInterpFuncPhysiNode;

X
Xiaoyu Wang 已提交
328 329
typedef struct SJoinPhysiNode {
  SPhysiNode node;
330
  EJoinType  joinType;
X
Xiaoyu Wang 已提交
331
  SNode*     pOnConditions;
X
Xiaoyu Wang 已提交
332 333 334
  SNodeList* pTargets;
} SJoinPhysiNode;

X
Xiaoyu Wang 已提交
335 336
typedef SJoinPhysiNode SSortMergeJoinPhysiNode;

X
Xiaoyu Wang 已提交
337 338
typedef struct SAggPhysiNode {
  SPhysiNode node;
339
  SNodeList* pExprs;  // these are expression list of group_by_clause and parameter expression of aggregate function
X
Xiaoyu Wang 已提交
340
  SNodeList* pGroupKeys;
X
Xiaoyu Wang 已提交
341 342 343
  SNodeList* pAggFuncs;
} SAggPhysiNode;

X
Xiaoyu Wang 已提交
344
typedef struct SDownstreamSourceNode {
345
  ENodeType      type;
X
Xiaoyu Wang 已提交
346
  SQueryNodeAddr addr;
347 348
  uint64_t       taskId;
  uint64_t       schedId;
X
Xiaoyu Wang 已提交
349
} SDownstreamSourceNode;
X
Xiaoyu Wang 已提交
350 351

typedef struct SExchangePhysiNode {
X
Xiaoyu Wang 已提交
352
  SPhysiNode node;
X
Xiaoyu Wang 已提交
353
  int32_t    srcGroupId;  // group id of datasource suplans
D
dapan1121 已提交
354
  bool       singleChannel;
X
Xiaoyu Wang 已提交
355
  SNodeList* pSrcEndPoints;  // element is SDownstreamSource, scheduler fill by calling qSetSuplanExecutionNode
X
Xiaoyu Wang 已提交
356 357
} SExchangePhysiNode;

X
Xiaoyu Wang 已提交
358 359 360
typedef struct SMergePhysiNode {
  SPhysiNode node;
  SNodeList* pMergeKeys;
X
Xiaoyu Wang 已提交
361
  SNodeList* pTargets;
X
Xiaoyu Wang 已提交
362 363
  int32_t    numOfChannels;
  int32_t    srcGroupId;
364
  bool       groupSort;
X
Xiaoyu Wang 已提交
365 366
} SMergePhysiNode;

X
Xiaoyu Wang 已提交
367
typedef struct SWinodwPhysiNode {
X
Xiaoyu Wang 已提交
368
  SPhysiNode node;
369
  SNodeList* pExprs;  // these are expression list of parameter expression of function
X
Xiaoyu Wang 已提交
370
  SNodeList* pFuncs;
X
Xiaoyu Wang 已提交
371 372
  SNode*     pTspk;   // timestamp primary key
  SNode*     pTsEnd;  // window end timestamp
373 374
  int8_t     triggerType;
  int64_t    watermark;
5
54liuyao 已提交
375
  double     filesFactor;
X
Xiaoyu Wang 已提交
376 377 378 379
} SWinodwPhysiNode;

typedef struct SIntervalPhysiNode {
  SWinodwPhysiNode window;
380 381 382 383 384
  int64_t          interval;
  int64_t          offset;
  int64_t          sliding;
  int8_t           intervalUnit;
  int8_t           slidingUnit;
X
Xiaoyu Wang 已提交
385 386
} SIntervalPhysiNode;

387
typedef SIntervalPhysiNode SMergeIntervalPhysiNode;
388
typedef SIntervalPhysiNode SMergeAlignedIntervalPhysiNode;
X
Xiaoyu Wang 已提交
389
typedef SIntervalPhysiNode SStreamIntervalPhysiNode;
390 391
typedef SIntervalPhysiNode SStreamFinalIntervalPhysiNode;
typedef SIntervalPhysiNode SStreamSemiIntervalPhysiNode;
X
Xiaoyu Wang 已提交
392

X
Xiaoyu Wang 已提交
393
typedef struct SFillPhysiNode {
X
Xiaoyu Wang 已提交
394 395 396 397 398 399
  SPhysiNode  node;
  EFillMode   mode;
  SNode*      pWStartTs;  // SColumnNode
  SNode*      pValues;    // SNodeListNode
  SNodeList*  pTargets;
  STimeWindow timeRange;
X
Xiaoyu Wang 已提交
400 401
} SFillPhysiNode;

402 403
typedef struct SMultiTableIntervalPhysiNode {
  SIntervalPhysiNode interval;
404
  SNodeList*         pPartitionKeys;
405 406
} SMultiTableIntervalPhysiNode;

X
Xiaoyu Wang 已提交
407 408
typedef struct SSessionWinodwPhysiNode {
  SWinodwPhysiNode window;
409
  int64_t          gap;
X
Xiaoyu Wang 已提交
410 411
} SSessionWinodwPhysiNode;

5
54liuyao 已提交
412
typedef SSessionWinodwPhysiNode SStreamSessionWinodwPhysiNode;
413 414
typedef SSessionWinodwPhysiNode SStreamSemiSessionWinodwPhysiNode;
typedef SSessionWinodwPhysiNode SStreamFinalSessionWinodwPhysiNode;
5
54liuyao 已提交
415

416 417
typedef struct SStateWinodwPhysiNode {
  SWinodwPhysiNode window;
418
  SNode*           pStateKey;
419 420
} SStateWinodwPhysiNode;

5
54liuyao 已提交
421 422
typedef SStateWinodwPhysiNode SStreamStateWinodwPhysiNode;

X
Xiaoyu Wang 已提交
423 424
typedef struct SSortPhysiNode {
  SPhysiNode node;
425 426
  SNodeList* pExprs;     // these are expression list of order_by_clause and parameter expression of aggregate function
  SNodeList* pSortKeys;  // element is SOrderByExprNode, and SOrderByExprNode::pExpr is SColumnNode
X
Xiaoyu Wang 已提交
427
  SNodeList* pTargets;
X
Xiaoyu Wang 已提交
428 429
} SSortPhysiNode;

S
shenglian zhou 已提交
430 431
typedef SSortPhysiNode SGroupSortPhysiNode;

432 433
typedef struct SPartitionPhysiNode {
  SPhysiNode node;
434
  SNodeList* pExprs;  // these are expression list of partition_by_clause
435
  SNodeList* pPartitionKeys;
X
Xiaoyu Wang 已提交
436
  SNodeList* pTargets;
437 438
} SPartitionPhysiNode;

X
Xiaoyu Wang 已提交
439
typedef struct SDataSinkNode {
440
  ENodeType           type;
X
Xiaoyu Wang 已提交
441
  SDataBlockDescNode* pInputDataBlockDesc;
X
Xiaoyu Wang 已提交
442 443 444 445 446 447 448 449
} SDataSinkNode;

typedef struct SDataDispatcherNode {
  SDataSinkNode sink;
} SDataDispatcherNode;

typedef struct SDataInserterNode {
  SDataSinkNode sink;
450 451 452
  int32_t       numOfTables;
  uint32_t      size;
  char*         pData;
X
Xiaoyu Wang 已提交
453 454
} SDataInserterNode;

X
Xiaoyu Wang 已提交
455 456 457 458 459 460
typedef struct SDataDeleterNode {
  SDataSinkNode sink;
  uint64_t      tableId;
  int8_t        tableType;  // table type
  char          tableFName[TSDB_TABLE_FNAME_LEN];
  STimeWindow   deleteTimeRange;
X
Xiaoyu Wang 已提交
461
  SNode*        pAffectedRows;
X
Xiaoyu Wang 已提交
462 463
} SDataDeleterNode;

X
Xiaoyu Wang 已提交
464
typedef struct SSubplan {
465 466 467 468 469 470
  ENodeType      type;
  SSubplanId     id;  // unique id of the subplan
  ESubplanType   subplanType;
  int32_t        msgType;  // message type for subplan, used to denote the send message type to vnode.
  int32_t        level;    // the execution level of current subplan, starting from 0 in a top-down manner.
  char           dbFName[TSDB_DB_FNAME_LEN];
X
Xiaoyu Wang 已提交
471
  char           user[TSDB_USER_LEN];
472 473 474 475 476 477
  SQueryNodeAddr execNode;      // for the scan/modify subplan, the optional execution node
  SQueryNodeStat execNodeStat;  // only for scan subplan
  SNodeList*     pChildren;     // the datasource subplan,from which to fetch the result
  SNodeList*     pParents;      // the data destination subplan, get data from current subplan
  SPhysiNode*    pNode;         // physical plan of current subplan
  SDataSinkNode* pDataSink;     // data of the subplan flow into the datasink
X
Xiaoyu Wang 已提交
478
  SNode*         pTagCond;
X
Xiaoyu Wang 已提交
479
  SNode*         pTagIndexCond;
X
Xiaoyu Wang 已提交
480 481
} SSubplan;

482
typedef enum EExplainMode { EXPLAIN_MODE_DISABLE = 1, EXPLAIN_MODE_STATIC, EXPLAIN_MODE_ANALYZE } EExplainMode;
483 484 485

typedef struct SExplainInfo {
  EExplainMode mode;
486 487
  bool         verbose;
  double       ratio;
488
} SExplainInfo;
489

X
Xiaoyu Wang 已提交
490
typedef struct SQueryPlan {
491 492 493 494
  ENodeType    type;
  uint64_t     queryId;
  int32_t      numOfSubplans;
  SNodeList*   pSubplans;  // Element is SNodeListNode. The execution level of subplan, starting from 0.
495
  SExplainInfo explainInfo;
X
Xiaoyu Wang 已提交
496 497
} SQueryPlan;

498 499
void nodesWalkPhysiPlan(SNode* pNode, FNodeWalker walker, void* pContext);

X
Xiaoyu Wang 已提交
500 501 502 503 504
#ifdef __cplusplus
}
#endif

#endif /*_TD_PLANN_NODES_H_*/