plannodes.h 15.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

29 30 31
typedef enum EDataOrderLevel {
  DATA_ORDER_LEVEL_NONE = 1,
  DATA_ORDER_LEVEL_IN_BLOCK,
32 33
  DATA_ORDER_LEVEL_IN_GROUP,
  DATA_ORDER_LEVEL_GLOBAL
34 35
} EDataOrderLevel;

36 37 38 39 40 41 42
typedef enum EGroupAction {
  GROUP_ACTION_NONE = 1,
  GROUP_ACTION_SET,
  GROUP_ACTION_KEEP,
  GROUP_ACTION_CLEAR
} EGroupAction;

X
Xiaoyu Wang 已提交
43
typedef struct SLogicNode {
44 45 46 47
  ENodeType          type;
  SNodeList*         pTargets;  // SColumnNode
  SNode*             pConditions;
  SNodeList*         pChildren;
X
Xiaoyu Wang 已提交
48
  struct SLogicNode* pParent;
49
  int32_t            optimizedFlag;
X
Xiaoyu Wang 已提交
50
  uint8_t            precision;
51 52
  SNode*             pLimit;
  SNode*             pSlimit;
53 54
  EDataOrderLevel    requireDataOrder;  // requirements for input data
  EDataOrderLevel    resultDataOrder;   // properties of the output data
55
  EGroupAction       groupAction;
X
Xiaoyu Wang 已提交
56 57
} SLogicNode;

X
Xiaoyu Wang 已提交
58 59 60 61 62
typedef enum EScanType {
  SCAN_TYPE_TAG = 1,
  SCAN_TYPE_TABLE,
  SCAN_TYPE_SYSTEM_TABLE,
  SCAN_TYPE_STREAM,
63
  SCAN_TYPE_TABLE_MERGE,
X
Xiaoyu Wang 已提交
64 65
  SCAN_TYPE_BLOCK_INFO,
  SCAN_TYPE_LAST_ROW
X
Xiaoyu Wang 已提交
66
} EScanType;
X
Xiaoyu Wang 已提交
67

X
Xiaoyu Wang 已提交
68
typedef struct SScanLogicNode {
X
Xiaoyu Wang 已提交
69 70 71 72 73
  SLogicNode    node;
  SNodeList*    pScanCols;
  SNodeList*    pScanPseudoCols;
  int8_t        tableType;
  uint64_t      tableId;
X
Xiaoyu Wang 已提交
74
  uint64_t      stableId;
X
Xiaoyu Wang 已提交
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
  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 已提交
90
  SNode*        pTagIndexCond;
X
Xiaoyu Wang 已提交
91 92
  int8_t        triggerType;
  int64_t       watermark;
93
  int8_t        igExpired;
X
Xiaoyu Wang 已提交
94
  SArray*       pSmaIndexes;
95 96
  SNodeList*    pGroupTags;
  bool          groupSort;
97
  int8_t        cacheLastMode;
98
  bool          hasNormalCols;  // neither tag column nor primary key tag column
X
Xiaoyu Wang 已提交
99
  bool          sortPrimaryKey;
X
Xiaoyu Wang 已提交
100 101 102 103
} SScanLogicNode;

typedef struct SJoinLogicNode {
  SLogicNode node;
104
  EJoinType  joinType;
105
  SNode*     pMergeCondition;
106
  SNode*     pOnConditions;
X
Xiaoyu Wang 已提交
107
  bool       isSingleTableJoin;
108
  EOrder     inputTsOrder;
X
Xiaoyu Wang 已提交
109 110 111 112 113 114
} SJoinLogicNode;

typedef struct SAggLogicNode {
  SLogicNode node;
  SNodeList* pGroupKeys;
  SNodeList* pAggFuncs;
115
  bool       hasLastRow;
116
  bool       hasTimeLineFunc;
H
Haojun Liao 已提交
117
  bool       onlyHasKeepOrderFunc;
X
Xiaoyu Wang 已提交
118 119 120 121 122
} SAggLogicNode;

typedef struct SProjectLogicNode {
  SLogicNode node;
  SNodeList* pProjections;
123
  char       stmtName[TSDB_TABLE_NAME_LEN];
124
  bool       ignoreGroupId;
X
Xiaoyu Wang 已提交
125 126
} SProjectLogicNode;

127 128
typedef struct SIndefRowsFuncLogicNode {
  SLogicNode node;
X
Xiaoyu Wang 已提交
129
  SNodeList* pFuncs;
130
  bool       isTailFunc;
131
  bool       isUniqueFunc;
132
  bool       isTimeLineFunc;
133 134
} SIndefRowsFuncLogicNode;

X
Xiaoyu Wang 已提交
135 136 137 138 139
typedef struct SInterpFuncLogicNode {
  SLogicNode  node;
  SNodeList*  pFuncs;
  STimeWindow timeRange;
  int64_t     interval;
X
Xiaoyu Wang 已提交
140 141 142
  EFillMode   fillMode;
  SNode*      pFillValues;  // SNodeListNode
  SNode*      pTimeSeries;  // SColumnNode
X
Xiaoyu Wang 已提交
143 144
} SInterpFuncLogicNode;

X
Xiaoyu Wang 已提交
145 146 147 148 149 150 151 152
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 已提交
153
  SNode*           pAffectedRows;  // SColumnNode
X
Xiaoyu Wang 已提交
154
  uint64_t         tableId;
155
  uint64_t         stableId;
X
Xiaoyu Wang 已提交
156
  int8_t           tableType;  // table type
157
  char             tableName[TSDB_TABLE_NAME_LEN];
158
  char             tsColName[TSDB_COL_NAME_LEN];
X
Xiaoyu Wang 已提交
159
  STimeWindow      deleteTimeRange;
160
  SVgroupsInfo*    pVgroupList;
161
  SNodeList*       pInsertCols;
X
Xiaoyu Wang 已提交
162
} SVnodeModifyLogicNode;
163

X
Xiaoyu Wang 已提交
164 165
typedef struct SExchangeLogicNode {
  SLogicNode node;
166
  int32_t    srcGroupId;
X
Xiaoyu Wang 已提交
167 168
} SExchangeLogicNode;

X
Xiaoyu Wang 已提交
169 170 171
typedef struct SMergeLogicNode {
  SLogicNode node;
  SNodeList* pMergeKeys;
X
Xiaoyu Wang 已提交
172
  SNodeList* pInputs;
X
Xiaoyu Wang 已提交
173 174
  int32_t    numOfChannels;
  int32_t    srcGroupId;
175
  bool       groupSort;
X
Xiaoyu Wang 已提交
176 177
} SMergeLogicNode;

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

180
typedef enum EWindowAlgorithm {
X
Xiaoyu Wang 已提交
181
  INTERVAL_ALGO_HASH = 1,
X
Xiaoyu Wang 已提交
182
  INTERVAL_ALGO_MERGE,
X
Xiaoyu Wang 已提交
183 184 185
  INTERVAL_ALGO_STREAM_FINAL,
  INTERVAL_ALGO_STREAM_SEMI,
  INTERVAL_ALGO_STREAM_SINGLE,
186 187 188 189 190
  SESSION_ALGO_STREAM_SEMI,
  SESSION_ALGO_STREAM_FINAL,
  SESSION_ALGO_STREAM_SINGLE,
  SESSION_ALGO_MERGE,
} EWindowAlgorithm;
191

X
Xiaoyu Wang 已提交
192
typedef struct SWindowLogicNode {
193 194 195 196 197 198 199 200 201 202
  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 已提交
203
  SNode*           pTsEnd;
204 205 206
  SNode*           pStateExpr;
  int8_t           triggerType;
  int64_t          watermark;
207
  int8_t           igExpired;
208
  EWindowAlgorithm windowAlgo;
209
  EOrder           inputTsOrder;
X
Xiaoyu Wang 已提交
210
  EOrder           outputTsOrder;
X
Xiaoyu Wang 已提交
211 212
} SWindowLogicNode;

X
Xiaoyu Wang 已提交
213
typedef struct SFillLogicNode {
X
Xiaoyu Wang 已提交
214 215
  SLogicNode  node;
  EFillMode   mode;
216 217
  SNodeList*  pFillExprs;
  SNodeList*  pNotFillExprs;
X
Xiaoyu Wang 已提交
218 219 220
  SNode*      pWStartTs;
  SNode*      pValues;  // SNodeListNode
  STimeWindow timeRange;
X
Xiaoyu Wang 已提交
221
  EOrder      inputTsOrder;
X
Xiaoyu Wang 已提交
222 223
} SFillLogicNode;

X
Xiaoyu Wang 已提交
224 225 226
typedef struct SSortLogicNode {
  SLogicNode node;
  SNodeList* pSortKeys;
227
  bool       groupSort;
X
Xiaoyu Wang 已提交
228 229
} SSortLogicNode;

230 231 232 233 234
typedef struct SPartitionLogicNode {
  SLogicNode node;
  SNodeList* pPartitionKeys;
} SPartitionLogicNode;

235 236 237 238
typedef enum ESubplanType {
  SUBPLAN_TYPE_MERGE = 1,
  SUBPLAN_TYPE_PARTIAL,
  SUBPLAN_TYPE_SCAN,
239 240
  SUBPLAN_TYPE_MODIFY,
  SUBPLAN_TYPE_COMPUTE
241 242
} ESubplanType;

X
Xiaoyu Wang 已提交
243 244
typedef struct SSubplanId {
  uint64_t queryId;
245 246
  int32_t  groupId;
  int32_t  subplanId;
X
Xiaoyu Wang 已提交
247 248
} SSubplanId;

X
Xiaoyu Wang 已提交
249
typedef struct SLogicSubplan {
250 251 252 253 254 255
  ENodeType     type;
  SSubplanId    id;
  SNodeList*    pChildren;
  SNodeList*    pParents;
  SLogicNode*   pNode;
  ESubplanType  subplanType;
X
Xiaoyu Wang 已提交
256
  SVgroupsInfo* pVgroupList;
257 258
  int32_t       level;
  int32_t       splitFlag;
259
  int32_t       numOfComputeNodes;
X
Xiaoyu Wang 已提交
260
} SLogicSubplan;
X
Xiaoyu Wang 已提交
261 262

typedef struct SQueryLogicPlan {
263
  ENodeType  type;
X
Xiaoyu Wang 已提交
264
  SNodeList* pTopSubplans;
X
Xiaoyu Wang 已提交
265 266
} SQueryLogicPlan;

X
Xiaoyu Wang 已提交
267 268
typedef struct SSlotDescNode {
  ENodeType type;
269
  int16_t   slotId;
X
Xiaoyu Wang 已提交
270
  SDataType dataType;
271 272 273
  bool      reserve;
  bool      output;
  bool      tag;
274
  char      name[SLOT_NAME_LEN];
X
Xiaoyu Wang 已提交
275 276
} SSlotDescNode;

X
Xiaoyu Wang 已提交
277
typedef struct SDataBlockDescNode {
278 279
  ENodeType  type;
  int16_t    dataBlockId;
X
Xiaoyu Wang 已提交
280
  SNodeList* pSlots;
281 282 283
  int32_t    totalRowSize;
  int32_t    outputRowSize;
  uint8_t    precision;
X
Xiaoyu Wang 已提交
284
} SDataBlockDescNode;
X
Xiaoyu Wang 已提交
285 286

typedef struct SPhysiNode {
287
  ENodeType           type;
X
Xiaoyu Wang 已提交
288
  SDataBlockDescNode* pOutputDataBlockDesc;
289 290 291
  SNode*              pConditions;
  SNodeList*          pChildren;
  struct SPhysiNode*  pParent;
292 293
  SNode*              pLimit;
  SNode*              pSlimit;
X
Xiaoyu Wang 已提交
294 295 296
} SPhysiNode;

typedef struct SScanPhysiNode {
X
Xiaoyu Wang 已提交
297
  SPhysiNode node;
X
Xiaoyu Wang 已提交
298
  SNodeList* pScanCols;
299 300
  SNodeList* pScanPseudoCols;
  uint64_t   uid;  // unique id of the table
X
Xiaoyu Wang 已提交
301
  uint64_t   suid;
302 303
  int8_t     tableType;
  SName      tableName;
X
Xiaoyu Wang 已提交
304 305 306
} SScanPhysiNode;

typedef SScanPhysiNode STagScanPhysiNode;
307
typedef SScanPhysiNode SBlockDistScanPhysiNode;
X
Xiaoyu Wang 已提交
308 309 310 311 312 313

typedef struct SLastRowScanPhysiNode {
  SScanPhysiNode scan;
  SNodeList*     pGroupTags;
  bool           groupSort;
} SLastRowScanPhysiNode;
X
Xiaoyu Wang 已提交
314

X
Xiaoyu Wang 已提交
315 316
typedef struct SSystemTableScanPhysiNode {
  SScanPhysiNode scan;
317 318 319
  SEpSet         mgmtEpSet;
  bool           showRewrite;
  int32_t        accountId;
320
  bool           sysInfo;
X
Xiaoyu Wang 已提交
321 322
} SSystemTableScanPhysiNode;

X
Xiaoyu Wang 已提交
323 324
typedef struct STableScanPhysiNode {
  SScanPhysiNode scan;
325 326 327 328 329
  uint8_t        scanSeq[2];  // first is scan count, and second is reverse scan count
  STimeWindow    scanRange;
  double         ratio;
  int32_t        dataRequired;
  SNodeList*     pDynamicScanFuncs;
330 331
  SNodeList*     pGroupTags;
  bool           groupSort;
332 333 334 335 336
  int64_t        interval;
  int64_t        offset;
  int64_t        sliding;
  int8_t         intervalUnit;
  int8_t         slidingUnit;
5
54liuyao 已提交
337 338
  int8_t         triggerType;
  int64_t        watermark;
339
  int8_t         igExpired;
X
Xiaoyu Wang 已提交
340
  bool           assignBlockUid;
X
Xiaoyu Wang 已提交
341 342 343
} STableScanPhysiNode;

typedef STableScanPhysiNode STableSeqScanPhysiNode;
X
Xiaoyu Wang 已提交
344
typedef STableScanPhysiNode STableMergeScanPhysiNode;
5
54liuyao 已提交
345
typedef STableScanPhysiNode SStreamScanPhysiNode;
X
Xiaoyu Wang 已提交
346 347 348 349

typedef struct SProjectPhysiNode {
  SPhysiNode node;
  SNodeList* pProjections;
350
  bool       mergeDataBlock;
351
  bool       ignoreGroupId;
X
Xiaoyu Wang 已提交
352 353
} SProjectPhysiNode;

354 355 356
typedef struct SIndefRowsFuncPhysiNode {
  SPhysiNode node;
  SNodeList* pExprs;
X
Xiaoyu Wang 已提交
357
  SNodeList* pFuncs;
358 359
} SIndefRowsFuncPhysiNode;

X
Xiaoyu Wang 已提交
360 361 362 363 364 365
typedef struct SInterpFuncPhysiNode {
  SPhysiNode  node;
  SNodeList*  pExprs;
  SNodeList*  pFuncs;
  STimeWindow timeRange;
  int64_t     interval;
D
dapan1121 已提交
366
  int8_t      intervalUnit;
X
Xiaoyu Wang 已提交
367 368 369
  EFillMode   fillMode;
  SNode*      pFillValues;  // SNodeListNode
  SNode*      pTimeSeries;  // SColumnNode
X
Xiaoyu Wang 已提交
370 371
} SInterpFuncPhysiNode;

372
typedef struct SSortMergeJoinPhysiNode {
X
Xiaoyu Wang 已提交
373
  SPhysiNode node;
374
  EJoinType  joinType;
375
  SNode*     pMergeCondition;
X
Xiaoyu Wang 已提交
376
  SNode*     pOnConditions;
X
Xiaoyu Wang 已提交
377
  SNodeList* pTargets;
378 379
  EOrder     inputTsOrder;
} SSortMergeJoinPhysiNode;
X
Xiaoyu Wang 已提交
380

X
Xiaoyu Wang 已提交
381 382
typedef struct SAggPhysiNode {
  SPhysiNode node;
383
  SNodeList* pExprs;  // these are expression list of group_by_clause and parameter expression of aggregate function
X
Xiaoyu Wang 已提交
384
  SNodeList* pGroupKeys;
X
Xiaoyu Wang 已提交
385
  SNodeList* pAggFuncs;
386
  bool       mergeDataBlock;
X
Xiaoyu Wang 已提交
387 388
} SAggPhysiNode;

X
Xiaoyu Wang 已提交
389
typedef struct SDownstreamSourceNode {
390
  ENodeType      type;
X
Xiaoyu Wang 已提交
391
  SQueryNodeAddr addr;
392 393
  uint64_t       taskId;
  uint64_t       schedId;
D
dapan1121 已提交
394
  int32_t        execId;
D
dapan1121 已提交
395
  int32_t        fetchMsgType;
X
Xiaoyu Wang 已提交
396
} SDownstreamSourceNode;
X
Xiaoyu Wang 已提交
397 398

typedef struct SExchangePhysiNode {
X
Xiaoyu Wang 已提交
399
  SPhysiNode node;
X
Xiaoyu Wang 已提交
400
  int32_t    srcGroupId;  // group id of datasource suplans
D
dapan1121 已提交
401
  bool       singleChannel;
X
Xiaoyu Wang 已提交
402
  SNodeList* pSrcEndPoints;  // element is SDownstreamSource, scheduler fill by calling qSetSuplanExecutionNode
X
Xiaoyu Wang 已提交
403 404
} SExchangePhysiNode;

X
Xiaoyu Wang 已提交
405 406 407
typedef struct SMergePhysiNode {
  SPhysiNode node;
  SNodeList* pMergeKeys;
X
Xiaoyu Wang 已提交
408
  SNodeList* pTargets;
X
Xiaoyu Wang 已提交
409 410
  int32_t    numOfChannels;
  int32_t    srcGroupId;
411
  bool       groupSort;
X
Xiaoyu Wang 已提交
412 413
} SMergePhysiNode;

X
Xiaoyu Wang 已提交
414
typedef struct SWinodwPhysiNode {
X
Xiaoyu Wang 已提交
415
  SPhysiNode node;
416
  SNodeList* pExprs;  // these are expression list of parameter expression of function
X
Xiaoyu Wang 已提交
417
  SNodeList* pFuncs;
X
Xiaoyu Wang 已提交
418 419
  SNode*     pTspk;   // timestamp primary key
  SNode*     pTsEnd;  // window end timestamp
420 421
  int8_t     triggerType;
  int64_t    watermark;
422
  int8_t     igExpired;
X
Xiaoyu Wang 已提交
423 424
  EOrder     inputTsOrder;
  EOrder     outputTsOrder;
425
  bool       mergeDataBlock;
X
Xiaoyu Wang 已提交
426 427 428 429
} SWinodwPhysiNode;

typedef struct SIntervalPhysiNode {
  SWinodwPhysiNode window;
430 431 432 433 434
  int64_t          interval;
  int64_t          offset;
  int64_t          sliding;
  int8_t           intervalUnit;
  int8_t           slidingUnit;
X
Xiaoyu Wang 已提交
435 436
} SIntervalPhysiNode;

437
typedef SIntervalPhysiNode SMergeIntervalPhysiNode;
438
typedef SIntervalPhysiNode SMergeAlignedIntervalPhysiNode;
X
Xiaoyu Wang 已提交
439
typedef SIntervalPhysiNode SStreamIntervalPhysiNode;
440 441
typedef SIntervalPhysiNode SStreamFinalIntervalPhysiNode;
typedef SIntervalPhysiNode SStreamSemiIntervalPhysiNode;
X
Xiaoyu Wang 已提交
442

X
Xiaoyu Wang 已提交
443
typedef struct SFillPhysiNode {
X
Xiaoyu Wang 已提交
444 445
  SPhysiNode  node;
  EFillMode   mode;
446 447
  SNodeList*  pFillExprs;
  SNodeList*  pNotFillExprs;
X
Xiaoyu Wang 已提交
448 449 450
  SNode*      pWStartTs;  // SColumnNode
  SNode*      pValues;    // SNodeListNode
  STimeWindow timeRange;
X
Xiaoyu Wang 已提交
451
  EOrder      inputTsOrder;
X
Xiaoyu Wang 已提交
452 453
} SFillPhysiNode;

454 455
typedef struct SMultiTableIntervalPhysiNode {
  SIntervalPhysiNode interval;
456
  SNodeList*         pPartitionKeys;
457 458
} SMultiTableIntervalPhysiNode;

X
Xiaoyu Wang 已提交
459 460
typedef struct SSessionWinodwPhysiNode {
  SWinodwPhysiNode window;
461
  int64_t          gap;
X
Xiaoyu Wang 已提交
462 463
} SSessionWinodwPhysiNode;

5
54liuyao 已提交
464
typedef SSessionWinodwPhysiNode SStreamSessionWinodwPhysiNode;
465 466
typedef SSessionWinodwPhysiNode SStreamSemiSessionWinodwPhysiNode;
typedef SSessionWinodwPhysiNode SStreamFinalSessionWinodwPhysiNode;
5
54liuyao 已提交
467

468 469
typedef struct SStateWinodwPhysiNode {
  SWinodwPhysiNode window;
470
  SNode*           pStateKey;
471 472
} SStateWinodwPhysiNode;

5
54liuyao 已提交
473 474
typedef SStateWinodwPhysiNode SStreamStateWinodwPhysiNode;

X
Xiaoyu Wang 已提交
475 476
typedef struct SSortPhysiNode {
  SPhysiNode node;
477 478
  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 已提交
479
  SNodeList* pTargets;
X
Xiaoyu Wang 已提交
480 481
} SSortPhysiNode;

S
shenglian zhou 已提交
482 483
typedef SSortPhysiNode SGroupSortPhysiNode;

484 485
typedef struct SPartitionPhysiNode {
  SPhysiNode node;
486
  SNodeList* pExprs;  // these are expression list of partition_by_clause
487
  SNodeList* pPartitionKeys;
X
Xiaoyu Wang 已提交
488
  SNodeList* pTargets;
489 490
} SPartitionPhysiNode;

491 492
typedef SPartitionPhysiNode SStreamPartitionPhysiNode;

X
Xiaoyu Wang 已提交
493
typedef struct SDataSinkNode {
494
  ENodeType           type;
X
Xiaoyu Wang 已提交
495
  SDataBlockDescNode* pInputDataBlockDesc;
X
Xiaoyu Wang 已提交
496 497 498 499 500 501 502 503
} SDataSinkNode;

typedef struct SDataDispatcherNode {
  SDataSinkNode sink;
} SDataDispatcherNode;

typedef struct SDataInserterNode {
  SDataSinkNode sink;
504 505 506
  int32_t       numOfTables;
  uint32_t      size;
  char*         pData;
X
Xiaoyu Wang 已提交
507 508
} SDataInserterNode;

509 510
typedef struct SQueryInserterNode {
  SDataSinkNode sink;
511
  SNodeList*    pCols;
512
  uint64_t      tableId;
513
  uint64_t      stableId;
514
  int8_t        tableType;  // table type
515
  char          tableName[TSDB_TABLE_NAME_LEN];
516 517 518 519
  int32_t       vgId;
  SEpSet        epSet;
} SQueryInserterNode;

X
Xiaoyu Wang 已提交
520 521 522 523
typedef struct SDataDeleterNode {
  SDataSinkNode sink;
  uint64_t      tableId;
  int8_t        tableType;  // table type
524
  char          tableFName[TSDB_TABLE_NAME_LEN];
wmmhello's avatar
wmmhello 已提交
525
  char          tsColName[TSDB_COL_NAME_LEN];
X
Xiaoyu Wang 已提交
526
  STimeWindow   deleteTimeRange;
X
Xiaoyu Wang 已提交
527
  SNode*        pAffectedRows;
X
Xiaoyu Wang 已提交
528 529
} SDataDeleterNode;

X
Xiaoyu Wang 已提交
530
typedef struct SSubplan {
531 532 533 534 535 536
  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 已提交
537
  char           user[TSDB_USER_LEN];
538 539 540 541 542 543
  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 已提交
544
  SNode*         pTagCond;
X
Xiaoyu Wang 已提交
545
  SNode*         pTagIndexCond;
X
Xiaoyu Wang 已提交
546 547
} SSubplan;

548
typedef enum EExplainMode { EXPLAIN_MODE_DISABLE = 1, EXPLAIN_MODE_STATIC, EXPLAIN_MODE_ANALYZE } EExplainMode;
549 550 551

typedef struct SExplainInfo {
  EExplainMode mode;
552 553
  bool         verbose;
  double       ratio;
554
} SExplainInfo;
555

X
Xiaoyu Wang 已提交
556
typedef struct SQueryPlan {
557 558 559 560
  ENodeType    type;
  uint64_t     queryId;
  int32_t      numOfSubplans;
  SNodeList*   pSubplans;  // Element is SNodeListNode. The execution level of subplan, starting from 0.
561
  SExplainInfo explainInfo;
X
Xiaoyu Wang 已提交
562 563
} SQueryPlan;

564 565
void nodesWalkPhysiPlan(SNode* pNode, FNodeWalker walker, void* pContext);

H
Haojun Liao 已提交
566 567
const char* dataOrderStr(EDataOrderLevel order);

X
Xiaoyu Wang 已提交
568 569 570 571 572
#ifdef __cplusplus
}
#endif

#endif /*_TD_PLANN_NODES_H_*/