• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

taosdata / TDengine / #3543

29 Nov 2024 02:58AM UTC coverage: 60.842% (+0.02%) from 60.819%
#3543

push

travis-ci

web-flow
Merge pull request #28973 from taosdata/merge/mainto3.0

merge: from main to 3.0

120460 of 253224 branches covered (47.57%)

Branch coverage included in aggregate %.

706 of 908 new or added lines in 18 files covered. (77.75%)

2401 existing lines in 137 files now uncovered.

201633 of 276172 relevant lines covered (73.01%)

19045673.23 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

83.75
/source/libs/nodes/src/nodesUtilFuncs.c
1
/*
2
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
3
 *
4
 * This program is free software: you can use, redistribute, and/or modify
5
 * it under the terms of the GNU Affero General Public License, version 3
6
 * or later ("AGPL"), as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope that it will be useful, but WITHOUT
9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
 * FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * You should have received a copy of the GNU Affero General Public License
13
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14
 */
15

16
#include "cmdnodes.h"
17
#include "functionMgt.h"
18
#include "nodesUtil.h"
19
#include "plannodes.h"
20
#include "querynodes.h"
21
#include "taos.h"
22
#include "taoserror.h"
23
#include "tdatablock.h"
24
#include "thash.h"
25
#include "tref.h"
26

27
typedef struct SNodeMemChunk {
28
  int32_t               availableSize;
29
  int32_t               usedSize;
30
  char*                 pBuf;
31
  struct SNodeMemChunk* pNext;
32
} SNodeMemChunk;
33

34
struct SNodeAllocator {
35
  int64_t        self;
36
  int64_t        queryId;
37
  int32_t        chunkSize;
38
  int32_t        chunkNum;
39
  SNodeMemChunk* pCurrChunk;
40
  SNodeMemChunk* pChunks;
41
  TdThreadMutex  mutex;
42
};
43

44
static threadlocal SNodeAllocator* g_pNodeAllocator;
45
static int32_t                     g_allocatorReqRefPool = -1;
46

47
char* getJoinTypeString(EJoinType type) {
×
48
  static char* joinType[] = {"", "INNER", "LEFT", "RIGHT", "FULL"};
49
  return joinType[type];
×
50
}
51

52
char* getJoinSTypeString(EJoinSubType type) {
×
53
  static char* joinSType[] = {"", "", "OUTER", "SEMI", "ANTI", "ANY", "ASOF", "WINDOW"};
54
  return joinSType[type];
×
55
}
56

57
char* getFullJoinTypeString(EJoinType type, EJoinSubType stype) {
34✔
58
  static char* joinFullType[][8] = {
59
      {"INNER", "INNER", "INNER", "INNER", "INNER", "INNER ANY", "INNER", "INNER"},
60
      {"LEFT", "LEFT", "LEFT OUTER", "LEFT SEMI", "LEFT ANTI", "LEFT ANY", "LEFT ASOF", "LEFT WINDOW"},
61
      {"RIGHT", "RIGHT", "RIGHT OUTER", "RIGHT SEMI", "RIGHT ANTI", "RIGHT ANY", "RIGHT ASOF", "RIGHT WINDOW"},
62
      {"FULL", "FULL", "FULL OUTER", "FULL", "FULL", "FULL ANY", "FULL", "FULL"}};
63
  return joinFullType[type][stype];
34✔
64
}
65

66
int32_t mergeJoinConds(SNode** ppDst, SNode** ppSrc) {
57,364✔
67
  if (NULL == *ppSrc) {
57,364✔
68
    return TSDB_CODE_SUCCESS;
57,148✔
69
  }
70
  if (NULL == *ppDst) {
216✔
71
    *ppDst = *ppSrc;
194✔
72
    *ppSrc = NULL;
194✔
73
    return TSDB_CODE_SUCCESS;
194✔
74
  }
75
  if (QUERY_NODE_LOGIC_CONDITION == nodeType(*ppSrc) &&
22!
NEW
76
      ((SLogicConditionNode*)(*ppSrc))->condType == LOGIC_COND_TYPE_AND) {
×
UNCOV
77
    TSWAP(*ppDst, *ppSrc);
×
78
  }
79
  int32_t code = 0;
22✔
80
  if (QUERY_NODE_LOGIC_CONDITION == nodeType(*ppDst)) {
22!
81
    SLogicConditionNode* pDst = (SLogicConditionNode*)*ppDst;
×
82
    if (pDst->condType == LOGIC_COND_TYPE_AND) {
×
NEW
83
      if (QUERY_NODE_LOGIC_CONDITION == nodeType(*ppSrc) &&
×
NEW
84
          ((SLogicConditionNode*)(*ppSrc))->condType == LOGIC_COND_TYPE_AND) {
×
85
        code = nodesListStrictAppendList(pDst->pParameterList, ((SLogicConditionNode*)(*ppSrc))->pParameterList);
×
86
        ((SLogicConditionNode*)(*ppSrc))->pParameterList = NULL;
×
87
      } else {
88
        code = nodesListStrictAppend(pDst->pParameterList, *ppSrc);
×
89
        *ppSrc = NULL;
×
90
      }
91
      nodesDestroyNode(*ppSrc);
×
92
      *ppSrc = NULL;
×
93

94
      return code;
×
95
    }
96
  }
97

98
  SLogicConditionNode* pLogicCond = NULL;
22✔
99
  code = nodesMakeNode(QUERY_NODE_LOGIC_CONDITION, (SNode**)&pLogicCond);
22✔
100
  if (TSDB_CODE_SUCCESS != code) {
22!
101
    return code;
×
102
  }
103
  pLogicCond->node.resType.type = TSDB_DATA_TYPE_BOOL;
22✔
104
  pLogicCond->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes;
22✔
105
  pLogicCond->condType = LOGIC_COND_TYPE_AND;
22✔
106
  pLogicCond->pParameterList = NULL;
22✔
107
  code = nodesListMakeStrictAppend(&pLogicCond->pParameterList, *ppSrc);
22✔
108
  if (TSDB_CODE_SUCCESS == code) {
22!
109
    *ppSrc = NULL;
22✔
110
    code = nodesListMakeStrictAppend(&pLogicCond->pParameterList, *ppDst);
22✔
111
  }
112
  if (TSDB_CODE_SUCCESS == code) {
22!
113
    *ppDst = (SNode*)pLogicCond;
22✔
114
  }
115
  return code;
22✔
116
}
117

118
static int32_t callocNodeChunk(SNodeAllocator* pAllocator, SNodeMemChunk** pOutChunk) {
4,892,196✔
119
  SNodeMemChunk* pNewChunk = taosMemoryCalloc(1, sizeof(SNodeMemChunk) + pAllocator->chunkSize);
4,892,196✔
120
  if (NULL == pNewChunk) {
4,892,183!
121
    if (pOutChunk) *pOutChunk = NULL;
×
122
    return terrno;
×
123
  }
124
  pNewChunk->pBuf = (char*)(pNewChunk + 1);
4,892,195✔
125
  pNewChunk->availableSize = pAllocator->chunkSize;
4,892,195✔
126
  pNewChunk->usedSize = 0;
4,892,195✔
127
  pNewChunk->pNext = NULL;
4,892,195✔
128
  if (NULL != pAllocator->pCurrChunk) {
4,892,195✔
129
    pAllocator->pCurrChunk->pNext = pNewChunk;
3,637,266✔
130
  }
131
  pAllocator->pCurrChunk = pNewChunk;
4,892,195✔
132
  if (NULL == pAllocator->pChunks) {
4,892,195✔
133
    pAllocator->pChunks = pNewChunk;
1,254,954✔
134
  }
135
  ++(pAllocator->chunkNum);
4,892,195✔
136
  if (pOutChunk) *pOutChunk = pNewChunk;
4,892,195!
137
  return TSDB_CODE_SUCCESS;
4,892,195✔
138
}
139

140
static int32_t nodesCallocImpl(int32_t size, void** pOut) {
1,932,233,396✔
141
  if (NULL == g_pNodeAllocator) {
1,932,233,396✔
142
    *pOut = taosMemoryCalloc(1, size);
1,304,656,451✔
143
    if (!*pOut) return terrno;
1,322,765,343!
144
    return TSDB_CODE_SUCCESS;
1,323,342,649✔
145
  }
146

147
  if (g_pNodeAllocator->pCurrChunk->usedSize + size > g_pNodeAllocator->pCurrChunk->availableSize) {
627,576,945✔
148
    int32_t code = callocNodeChunk(g_pNodeAllocator, NULL);
3,637,275✔
149
    if (TSDB_CODE_SUCCESS != code) {
3,637,262!
150
      *pOut = NULL;
×
151
      return code;
×
152
    }
153
  }
154
  void* p = g_pNodeAllocator->pCurrChunk->pBuf + g_pNodeAllocator->pCurrChunk->usedSize;
627,576,932✔
155
  g_pNodeAllocator->pCurrChunk->usedSize += size;
627,576,932✔
156
  *pOut = p;
627,576,932✔
157
  return TSDB_CODE_SUCCESS;
627,576,932✔
158
  ;
159
}
160

161
static int32_t nodesCalloc(int32_t num, int32_t size, void** pOut) {
1,928,817,605✔
162
  void*   p = NULL;
1,928,817,605✔
163
  int32_t code = nodesCallocImpl(num * size + 1, &p);
1,928,817,605✔
164
  if (TSDB_CODE_SUCCESS != code) {
1,948,509,760!
165
    return code;
×
166
  }
167
  *(char*)p = (NULL != g_pNodeAllocator) ? 1 : 0;
1,948,509,760✔
168
  *pOut = (char*)p + 1;
1,948,509,760✔
169
  return TSDB_CODE_SUCCESS;
1,948,509,760✔
170
}
171

172
void nodesFree(void* p) {
1,943,551,136✔
173
  char* ptr = (char*)p - 1;
1,943,551,136✔
174
  if (0 == *ptr) {
1,943,551,136✔
175
    taosMemoryFree(ptr);
1,315,455,199✔
176
  }
177
  return;
1,958,895,202✔
178
}
179

180
static int32_t createNodeAllocator(int32_t chunkSize, SNodeAllocator** pAllocator) {
1,254,939✔
181
  *pAllocator = taosMemoryCalloc(1, sizeof(SNodeAllocator));
1,254,939✔
182
  if (NULL == *pAllocator) {
1,254,950!
183
    return terrno;
×
184
  }
185
  (*pAllocator)->chunkSize = chunkSize;
1,254,950✔
186
  int32_t code = callocNodeChunk(*pAllocator, NULL);
1,254,950✔
187
  if (TSDB_CODE_SUCCESS != code) {
1,254,954!
188
    taosMemoryFreeClear(*pAllocator);
×
189
    return code;
×
190
  }
191
  if (0 != taosThreadMutexInit(&(*pAllocator)->mutex, NULL)) {
1,254,954!
192
    return TAOS_SYSTEM_ERROR(errno);
×
193
  }
194
  return TSDB_CODE_SUCCESS;
1,254,950✔
195
}
196

197
static void destroyNodeAllocator(void* p) {
1,254,955✔
198
  if (NULL == p) {
1,254,955!
199
    return;
×
200
  }
201

202
  SNodeAllocator* pAllocator = p;
1,254,955✔
203

204
  nodesDebug("query id %" PRIx64 " allocator id %" PRIx64 " alloc chunkNum: %d, chunkTotakSize: %d",
1,254,955✔
205
             pAllocator->queryId, pAllocator->self, pAllocator->chunkNum, pAllocator->chunkNum * pAllocator->chunkSize);
206

207
  SNodeMemChunk* pChunk = pAllocator->pChunks;
1,254,962✔
208
  while (NULL != pChunk) {
6,147,246✔
209
    SNodeMemChunk* pTemp = pChunk->pNext;
4,892,283✔
210
    taosMemoryFree(pChunk);
4,892,283✔
211
    pChunk = pTemp;
4,892,284✔
212
  }
213
  (void)taosThreadMutexDestroy(&pAllocator->mutex);
1,254,963✔
214
  taosMemoryFree(pAllocator);
1,254,955✔
215
}
216

217
int32_t nodesInitAllocatorSet() {
4,109✔
218
  if (g_allocatorReqRefPool >= 0) {
4,109!
219
    nodesWarn("nodes already initialized");
×
220
    return TSDB_CODE_SUCCESS;
×
221
  }
222

223
  g_allocatorReqRefPool = taosOpenRef(1024, destroyNodeAllocator);
4,109✔
224
  if (g_allocatorReqRefPool < 0) {
4,109!
225
    nodesError("init nodes failed");
×
226
    return TSDB_CODE_OUT_OF_MEMORY;
×
227
  }
228

229
  return TSDB_CODE_SUCCESS;
4,109✔
230
}
231

232
void nodesDestroyAllocatorSet() {
4,109✔
233
  if (g_allocatorReqRefPool >= 0) {
4,109!
234
    SNodeAllocator* pAllocator = taosIterateRef(g_allocatorReqRefPool, 0);
4,109✔
235
    int64_t         refId = 0;
4,109✔
236
    while (NULL != pAllocator) {
4,206✔
237
      refId = pAllocator->self;
97✔
238
      int32_t code = taosRemoveRef(g_allocatorReqRefPool, refId);
97✔
239
      if (TSDB_CODE_SUCCESS != code) {
97!
NEW
240
        nodesError("failed to remove ref at: %s:%d, rsetId:%d, refId:%" PRId64, __func__, __LINE__,
×
241
                   g_allocatorReqRefPool, refId);
242
      }
243
      pAllocator = taosIterateRef(g_allocatorReqRefPool, refId);
97✔
244
    }
245
    taosCloseRef(g_allocatorReqRefPool);
4,109✔
246
  }
247
}
4,109✔
248

249
int32_t nodesCreateAllocator(int64_t queryId, int32_t chunkSize, int64_t* pAllocatorId) {
1,254,941✔
250
  SNodeAllocator* pAllocator = NULL;
1,254,941✔
251
  int32_t         code = createNodeAllocator(chunkSize, &pAllocator);
1,254,941✔
252
  if (TSDB_CODE_SUCCESS == code) {
1,254,953!
253
    pAllocator->self = taosAddRef(g_allocatorReqRefPool, pAllocator);
1,254,953✔
254
    if (pAllocator->self <= 0) {
1,254,958!
UNCOV
255
      return terrno;
×
256
    }
257
    pAllocator->queryId = queryId;
1,254,959✔
258
    *pAllocatorId = pAllocator->self;
1,254,959✔
259
  }
260
  return code;
1,254,959✔
261
}
262

263
int32_t nodesSimAcquireAllocator(int64_t allocatorId) {
10,896,152✔
264
  if (allocatorId <= 0) {
10,896,152✔
265
    return TSDB_CODE_SUCCESS;
9,642,438✔
266
  }
267

268
  SNodeAllocator* pAllocator = taosAcquireRef(g_allocatorReqRefPool, allocatorId);
1,253,714✔
269
  if (NULL == pAllocator) {
1,254,865!
UNCOV
270
    return terrno;
×
271
  }
272
  return TSDB_CODE_SUCCESS;
1,254,865✔
273
}
274

275
int32_t nodesSimReleaseAllocator(int64_t allocatorId) {
10,897,852✔
276
  if (allocatorId <= 0) {
10,897,852✔
277
    return TSDB_CODE_SUCCESS;
9,643,656✔
278
  }
279

280
  return taosReleaseRef(g_allocatorReqRefPool, allocatorId);
1,254,196✔
281
}
282

283
int32_t nodesAcquireAllocator(int64_t allocatorId) {
22,662,035✔
284
  if (allocatorId <= 0) {
22,662,035✔
285
    return TSDB_CODE_SUCCESS;
19,184,587✔
286
  }
287

288
  SNodeAllocator* pAllocator = taosAcquireRef(g_allocatorReqRefPool, allocatorId);
3,477,448✔
289
  if (NULL == pAllocator) {
3,486,378!
290
    return terrno;
×
291
  }
292
  (void)taosThreadMutexLock(&pAllocator->mutex);
3,486,378✔
293
  g_pNodeAllocator = pAllocator;
3,486,371✔
294
  return TSDB_CODE_SUCCESS;
3,486,371✔
295
}
296

297
int32_t nodesReleaseAllocator(int64_t allocatorId) {
22,486,702✔
298
  if (allocatorId <= 0) {
22,486,702✔
299
    return TSDB_CODE_SUCCESS;
19,012,505✔
300
  }
301

302
  if (NULL == g_pNodeAllocator) {
3,474,197!
303
    nodesError("allocator id %" PRIx64
×
304
               " release failed: The nodesReleaseAllocator function needs to be called after the nodesAcquireAllocator "
305
               "function is called!",
306
               allocatorId);
307
    return TSDB_CODE_FAILED;
×
308
  }
309
  SNodeAllocator* pAllocator = g_pNodeAllocator;
3,474,197✔
310
  g_pNodeAllocator = NULL;
3,474,197✔
311
  (void)taosThreadMutexUnlock(&pAllocator->mutex);
3,474,197✔
312
  return taosReleaseRef(g_allocatorReqRefPool, allocatorId);
3,486,293✔
313
}
314

315
int64_t nodesMakeAllocatorWeakRef(int64_t allocatorId) {
989,803✔
316
  if (allocatorId <= 0) {
989,803!
317
    return 0;
×
318
  }
319

320
  SNodeAllocator* pAllocator = taosAcquireRef(g_allocatorReqRefPool, allocatorId);
989,803✔
321
  if (NULL == pAllocator) {
989,857!
322
    nodesError("allocator id %" PRIx64 " weak reference failed", allocatorId);
×
323
    return -1;
×
324
  }
325
  return pAllocator->self;
989,862✔
326
}
327

328
int64_t nodesReleaseAllocatorWeakRef(int64_t allocatorId) { return taosReleaseRef(g_allocatorReqRefPool, allocatorId); }
10,587,322✔
329

330
void nodesDestroyAllocator(int64_t allocatorId) {
10,895,948✔
331
  if (allocatorId <= 0) {
10,895,948✔
332
    return;
9,641,637✔
333
  }
334

335
  int32_t code = taosRemoveRef(g_allocatorReqRefPool, allocatorId);
1,254,311✔
336
  if (TSDB_CODE_SUCCESS != code) {
1,254,864!
NEW
337
    nodesError("failed to remove ref at: %s:%d, rsetId:%d, refId:%" PRId64, __func__, __LINE__, g_allocatorReqRefPool,
×
338
               allocatorId);
339
  }
340
}
341

342
static int32_t makeNode(ENodeType type, int32_t size, SNode** ppNode) {
1,031,844,572✔
343
  SNode*  p = NULL;
1,031,844,572✔
344
  int32_t code = nodesCalloc(1, size, (void**)&p);
1,031,844,572✔
345
  if (TSDB_CODE_SUCCESS == code) {
1,029,370,236✔
346
    setNodeType(p, type);
1,028,665,477✔
347
    *ppNode = p;
1,028,665,477✔
348
  }
349
  return code;
1,029,370,236✔
350
}
351

352
int32_t nodesMakeNode(ENodeType type, SNode** ppNodeOut) {
1,031,717,947✔
353
  SNode*  pNode = NULL;
1,031,717,947✔
354
  int32_t code = 0;
1,031,717,947✔
355
  switch (type) {
1,031,717,947!
356
    case QUERY_NODE_COLUMN:
214,904,803✔
357
      code = makeNode(type, sizeof(SColumnNode), &pNode);
214,904,803✔
358
      break;
214,467,564✔
359
    case QUERY_NODE_VALUE:
258,641,691✔
360
      code = makeNode(type, sizeof(SValueNode), &pNode);
258,641,691✔
361
      break;
256,537,071✔
362
    case QUERY_NODE_OPERATOR:
29,462,682✔
363
      code = makeNode(type, sizeof(SOperatorNode), &pNode);
29,462,682✔
364
      break;
29,435,558✔
365
    case QUERY_NODE_LOGIC_CONDITION:
9,213,307✔
366
      code = makeNode(type, sizeof(SLogicConditionNode), &pNode);
9,213,307✔
367
      break;
9,210,564✔
368
    case QUERY_NODE_FUNCTION:
37,585,196✔
369
      code = makeNode(type, sizeof(SFunctionNode), &pNode);
37,585,196✔
370
      break;
37,575,883✔
371
    case QUERY_NODE_REAL_TABLE:
1,452,775✔
372
      code = makeNode(type, sizeof(SRealTableNode), &pNode);
1,452,775✔
373
      break;
1,452,805✔
374
    case QUERY_NODE_TEMP_TABLE:
307,559✔
375
      code = makeNode(type, sizeof(STempTableNode), &pNode);
307,559✔
376
      break;
307,558✔
377
    case QUERY_NODE_JOIN_TABLE:
129,218✔
378
      code = makeNode(type, sizeof(SJoinTableNode), &pNode);
129,218✔
379
      break;
129,218✔
380
    case QUERY_NODE_GROUPING_SET:
878,246✔
381
      code = makeNode(type, sizeof(SGroupingSetNode), &pNode);
878,246✔
382
      break;
878,247✔
383
    case QUERY_NODE_ORDER_BY_EXPR:
4,704,293✔
384
      code = makeNode(type, sizeof(SOrderByExprNode), &pNode);
4,704,293✔
385
      break;
4,704,359✔
386
    case QUERY_NODE_LIMIT:
1,432,015✔
387
      code = makeNode(type, sizeof(SLimitNode), &pNode);
1,432,015✔
388
      break;
1,432,082✔
389
    case QUERY_NODE_STATE_WINDOW:
8,520✔
390
      code = makeNode(type, sizeof(SStateWindowNode), &pNode);
8,520✔
391
      break;
8,520✔
392
    case QUERY_NODE_SESSION_WINDOW:
6,303✔
393
      code = makeNode(type, sizeof(SSessionWindowNode), &pNode);
6,303✔
394
      break;
6,303✔
395
    case QUERY_NODE_INTERVAL_WINDOW:
38,420✔
396
      code = makeNode(type, sizeof(SIntervalWindowNode), &pNode);
38,420✔
397
      break;
38,420✔
398
    case QUERY_NODE_NODE_LIST:
14,329,114✔
399
      code = makeNode(type, sizeof(SNodeListNode), &pNode);
14,329,114✔
400
      break;
14,338,157✔
401
    case QUERY_NODE_FILL:
12,589✔
402
      code = makeNode(type, sizeof(SFillNode), &pNode);
12,589✔
403
      break;
12,589✔
404
    case QUERY_NODE_RAW_EXPR:
13,773,582✔
405
      code = makeNode(type, sizeof(SRawExprNode), &pNode);
13,773,582✔
406
      break;
13,773,637✔
407
    case QUERY_NODE_TARGET:
87,138,723✔
408
      code = makeNode(type, sizeof(STargetNode), &pNode);
87,138,723✔
409
      break;
87,277,884✔
410
    case QUERY_NODE_DATABLOCK_DESC:
35,211,906✔
411
      code = makeNode(type, sizeof(SDataBlockDescNode), &pNode);
35,211,906✔
412
      break;
35,225,138✔
413
    case QUERY_NODE_SLOT_DESC:
158,153,872✔
414
      code = makeNode(type, sizeof(SSlotDescNode), &pNode);
158,153,872✔
415
      break;
157,843,495✔
416
    case QUERY_NODE_COLUMN_DEF:
599,911✔
417
      code = makeNode(type, sizeof(SColumnDefNode), &pNode);
599,911✔
418
      break;
599,911✔
419
    case QUERY_NODE_DOWNSTREAM_SOURCE:
6,311,426✔
420
      code = makeNode(type, sizeof(SDownstreamSourceNode), &pNode);
6,311,426✔
421
      break;
6,309,102✔
422
    case QUERY_NODE_DATABASE_OPTIONS:
5,296✔
423
      code = makeNode(type, sizeof(SDatabaseOptions), &pNode);
5,296✔
424
      break;
5,296✔
425
    case QUERY_NODE_TABLE_OPTIONS:
102,989✔
426
      code = makeNode(type, sizeof(STableOptions), &pNode);
102,989✔
427
      break;
102,985✔
428
    case QUERY_NODE_COLUMN_OPTIONS:
563,611✔
429
      code = makeNode(type, sizeof(SColumnOptions), &pNode);
563,611✔
430
      break;
563,611✔
431
    case QUERY_NODE_INDEX_OPTIONS:
41✔
432
      code = makeNode(type, sizeof(SIndexOptions), &pNode);
41✔
433
      break;
41✔
434
    case QUERY_NODE_EXPLAIN_OPTIONS:
133,846✔
435
      code = makeNode(type, sizeof(SExplainOptions), &pNode);
133,846✔
436
      break;
133,846✔
437
    case QUERY_NODE_STREAM_OPTIONS:
966✔
438
      code = makeNode(type, sizeof(SStreamOptions), &pNode);
966✔
439
      break;
966✔
440
    case QUERY_NODE_LEFT_VALUE:
319,747✔
441
      code = makeNode(type, sizeof(SLeftValueNode), &pNode);
319,747✔
442
      break;
319,841✔
443
    case QUERY_NODE_COLUMN_REF:
×
NEW
444
      code = makeNode(type, sizeof(SColumnRefNode), &pNode);
×
NEW
445
      break;
×
446
    case QUERY_NODE_WHEN_THEN:
52,112✔
447
      code = makeNode(type, sizeof(SWhenThenNode), &pNode);
52,112✔
448
      break;
52,115✔
449
    case QUERY_NODE_CASE_WHEN:
39,292✔
450
      code = makeNode(type, sizeof(SCaseWhenNode), &pNode);
39,292✔
451
      break;
39,294✔
452
    case QUERY_NODE_EVENT_WINDOW:
775✔
453
      code = makeNode(type, sizeof(SEventWindowNode), &pNode);
775✔
454
      break;
775✔
455
    case QUERY_NODE_COUNT_WINDOW:
696✔
456
      code = makeNode(type, sizeof(SCountWindowNode), &pNode);
696✔
457
      break;
696✔
458
    case QUERY_NODE_ANOMALY_WINDOW:
×
NEW
459
      code = makeNode(type, sizeof(SAnomalyWindowNode), &pNode);
×
NEW
460
      break;
×
461
    case QUERY_NODE_HINT:
62,853✔
462
      code = makeNode(type, sizeof(SHintNode), &pNode);
62,853✔
463
      break;
62,853✔
464
    case QUERY_NODE_VIEW:
376✔
465
      code = makeNode(type, sizeof(SViewNode), &pNode);
376✔
466
      break;
376✔
467
    case QUERY_NODE_WINDOW_OFFSET:
4,834✔
468
      code = makeNode(type, sizeof(SWindowOffsetNode), &pNode);
4,834✔
469
      break;
4,834✔
470
    case QUERY_NODE_SET_OPERATOR:
81,455✔
471
      code = makeNode(type, sizeof(SSetOperator), &pNode);
81,455✔
472
      break;
81,455✔
473
    case QUERY_NODE_SELECT_STMT:
1,426,275✔
474
      code = makeNode(type, sizeof(SSelectStmt), &pNode);
1,426,275✔
475
      break;
1,426,278✔
476
    case QUERY_NODE_VNODE_MODIFY_STMT:
9,703,112✔
477
      code = makeNode(type, sizeof(SVnodeModifyOpStmt), &pNode);
9,703,112✔
478
      break;
9,707,617✔
479
    case QUERY_NODE_CREATE_DATABASE_STMT:
5,020✔
480
      code = makeNode(type, sizeof(SCreateDatabaseStmt), &pNode);
5,020✔
481
      break;
5,020✔
482
    case QUERY_NODE_DROP_DATABASE_STMT:
3,553✔
483
      code = makeNode(type, sizeof(SDropDatabaseStmt), &pNode);
3,553✔
484
      break;
3,553✔
485
    case QUERY_NODE_ALTER_DATABASE_STMT:
224✔
486
      code = makeNode(type, sizeof(SAlterDatabaseStmt), &pNode);
224✔
487
      break;
224✔
488
    case QUERY_NODE_FLUSH_DATABASE_STMT:
9,838✔
489
      code = makeNode(type, sizeof(SFlushDatabaseStmt), &pNode);
9,838✔
490
      break;
9,838✔
491
    case QUERY_NODE_TRIM_DATABASE_STMT:
6✔
492
      code = makeNode(type, sizeof(STrimDatabaseStmt), &pNode);
6✔
493
      break;
6✔
494
    case QUERY_NODE_S3MIGRATE_DATABASE_STMT:
3✔
495
      code = makeNode(type, sizeof(SS3MigrateDatabaseStmt), &pNode);
3✔
496
      break;
3✔
497
    case QUERY_NODE_CREATE_TABLE_STMT:
20,195✔
498
      code = makeNode(type, sizeof(SCreateTableStmt), &pNode);
20,195✔
499
      break;
20,195✔
500
    case QUERY_NODE_CREATE_SUBTABLE_CLAUSE:
82,762✔
501
      code = makeNode(type, sizeof(SCreateSubTableClause), &pNode);
82,762✔
502
      break;
82,762✔
503
    case QUERY_NODE_CREATE_SUBTABLE_FROM_FILE_CLAUSE:
×
NEW
504
      code = makeNode(type, sizeof(SCreateSubTableFromFileClause), &pNode);
×
NEW
505
      break;
×
506
    case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
48,865✔
507
      code = makeNode(type, sizeof(SCreateMultiTablesStmt), &pNode);
48,865✔
508
      break;
48,868✔
509
    case QUERY_NODE_DROP_TABLE_CLAUSE:
18,531✔
510
      code = makeNode(type, sizeof(SDropTableClause), &pNode);
18,531✔
511
      break;
18,531✔
512
    case QUERY_NODE_DROP_TABLE_STMT:
17,612✔
513
      code = makeNode(type, sizeof(SDropTableStmt), &pNode);
17,612✔
514
      break;
17,612✔
515
    case QUERY_NODE_DROP_SUPER_TABLE_STMT:
339✔
516
      code = makeNode(type, sizeof(SDropSuperTableStmt), &pNode);
339✔
517
      break;
339✔
518
    case QUERY_NODE_ALTER_TABLE_STMT:
21,533✔
519
    case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
520
      code = makeNode(type, sizeof(SAlterTableStmt), &pNode);
21,533✔
521
      break;
21,533✔
522
    case QUERY_NODE_CREATE_USER_STMT:
147✔
523
      code = makeNode(type, sizeof(SCreateUserStmt), &pNode);
147✔
524
      break;
147✔
525
    case QUERY_NODE_ALTER_USER_STMT:
90✔
526
      code = makeNode(type, sizeof(SAlterUserStmt), &pNode);
90✔
527
      break;
90✔
528
    case QUERY_NODE_DROP_USER_STMT:
51✔
529
      code = makeNode(type, sizeof(SDropUserStmt), &pNode);
51✔
530
      break;
51✔
531
    case QUERY_NODE_USE_DATABASE_STMT:
9,853✔
532
      code = makeNode(type, sizeof(SUseDatabaseStmt), &pNode);
9,853✔
533
      break;
9,853✔
534
    case QUERY_NODE_CREATE_DNODE_STMT:
512✔
535
      code = makeNode(type, sizeof(SCreateDnodeStmt), &pNode);
512✔
536
      break;
512✔
537
    case QUERY_NODE_DROP_DNODE_STMT:
30✔
538
      code = makeNode(type, sizeof(SDropDnodeStmt), &pNode);
30✔
539
      break;
30✔
540
    case QUERY_NODE_ALTER_DNODE_STMT:
204✔
541
      code = makeNode(type, sizeof(SAlterDnodeStmt), &pNode);
204✔
542
      break;
204✔
543
    case QUERY_NODE_CREATE_ANODE_STMT:
×
NEW
544
      code = makeNode(type, sizeof(SCreateAnodeStmt), &pNode);
×
NEW
545
      break;
×
546
    case QUERY_NODE_DROP_ANODE_STMT:
×
NEW
547
      code = makeNode(type, sizeof(SDropAnodeStmt), &pNode);
×
NEW
548
      break;
×
549
    case QUERY_NODE_UPDATE_ANODE_STMT:
×
NEW
550
      code = makeNode(type, sizeof(SUpdateAnodeStmt), &pNode);
×
NEW
551
      break;
×
552
    case QUERY_NODE_CREATE_INDEX_STMT:
86✔
553
      code = makeNode(type, sizeof(SCreateIndexStmt), &pNode);
86✔
554
      break;
86✔
555
    case QUERY_NODE_DROP_INDEX_STMT:
37✔
556
      code = makeNode(type, sizeof(SDropIndexStmt), &pNode);
37✔
557
      break;
37✔
558
    case QUERY_NODE_CREATE_QNODE_STMT:
699✔
559
    case QUERY_NODE_CREATE_BNODE_STMT:
560
    case QUERY_NODE_CREATE_SNODE_STMT:
561
    case QUERY_NODE_CREATE_MNODE_STMT:
562
      code = makeNode(type, sizeof(SCreateComponentNodeStmt), &pNode);
699✔
563
      break;
699✔
564
    case QUERY_NODE_DROP_QNODE_STMT:
36✔
565
    case QUERY_NODE_DROP_BNODE_STMT:
566
    case QUERY_NODE_DROP_SNODE_STMT:
567
    case QUERY_NODE_DROP_MNODE_STMT:
568
      code = makeNode(type, sizeof(SDropComponentNodeStmt), &pNode);
36✔
569
      break;
36✔
570
    case QUERY_NODE_CREATE_TOPIC_STMT:
622✔
571
      code = makeNode(type, sizeof(SCreateTopicStmt), &pNode);
622✔
572
      break;
622✔
573
    case QUERY_NODE_DROP_TOPIC_STMT:
348✔
574
      code = makeNode(type, sizeof(SDropTopicStmt), &pNode);
348✔
575
      break;
348✔
576
    case QUERY_NODE_DROP_CGROUP_STMT:
5✔
577
      code = makeNode(type, sizeof(SDropCGroupStmt), &pNode);
5✔
578
      break;
5✔
579
    case QUERY_NODE_ALTER_LOCAL_STMT:
15,781✔
580
      code = makeNode(type, sizeof(SAlterLocalStmt), &pNode);
15,781✔
581
      break;
15,781✔
582
    case QUERY_NODE_EXPLAIN_STMT:
133,182✔
583
      code = makeNode(type, sizeof(SExplainStmt), &pNode);
133,182✔
584
      break;
133,182✔
585
    case QUERY_NODE_DESCRIBE_STMT:
3,448✔
586
      code = makeNode(type, sizeof(SDescribeStmt), &pNode);
3,448✔
587
      break;
3,448✔
588
    case QUERY_NODE_RESET_QUERY_CACHE_STMT:
7,736✔
589
      code = makeNode(type, sizeof(SNode), &pNode);
7,736✔
590
      break;
7,736✔
591
    case QUERY_NODE_COMPACT_DATABASE_STMT:
19✔
592
      code = makeNode(type, sizeof(SCompactDatabaseStmt), &pNode);
19✔
593
      break;
19✔
594
    case QUERY_NODE_CREATE_FUNCTION_STMT:
150✔
595
      code = makeNode(type, sizeof(SCreateFunctionStmt), &pNode);
150✔
596
      break;
150✔
597
    case QUERY_NODE_DROP_FUNCTION_STMT:
71✔
598
      code = makeNode(type, sizeof(SDropFunctionStmt), &pNode);
71✔
599
      break;
71✔
600
    case QUERY_NODE_CREATE_STREAM_STMT:
920✔
601
      code = makeNode(type, sizeof(SCreateStreamStmt), &pNode);
920✔
602
      break;
920✔
603
    case QUERY_NODE_DROP_STREAM_STMT:
606✔
604
      code = makeNode(type, sizeof(SDropStreamStmt), &pNode);
606✔
605
      break;
606✔
606
    case QUERY_NODE_PAUSE_STREAM_STMT:
499✔
607
      code = makeNode(type, sizeof(SPauseStreamStmt), &pNode);
499✔
608
      break;
499✔
609
    case QUERY_NODE_RESUME_STREAM_STMT:
567✔
610
      code = makeNode(type, sizeof(SResumeStreamStmt), &pNode);
567✔
611
      break;
567✔
612
    case QUERY_NODE_BALANCE_VGROUP_STMT:
19✔
613
      code = makeNode(type, sizeof(SBalanceVgroupStmt), &pNode);
19✔
614
      break;
19✔
615
    case QUERY_NODE_BALANCE_VGROUP_LEADER_STMT:
6✔
616
      code = makeNode(type, sizeof(SBalanceVgroupLeaderStmt), &pNode);
6✔
617
      break;
6✔
618
    case QUERY_NODE_BALANCE_VGROUP_LEADER_DATABASE_STMT:
×
NEW
619
      code = makeNode(type, sizeof(SBalanceVgroupLeaderStmt), &pNode);
×
NEW
620
      break;
×
621
    case QUERY_NODE_MERGE_VGROUP_STMT:
×
NEW
622
      code = makeNode(type, sizeof(SMergeVgroupStmt), &pNode);
×
NEW
623
      break;
×
624
    case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
78✔
625
      code = makeNode(type, sizeof(SRedistributeVgroupStmt), &pNode);
78✔
626
      break;
78✔
627
    case QUERY_NODE_SPLIT_VGROUP_STMT:
55✔
628
      code = makeNode(type, sizeof(SSplitVgroupStmt), &pNode);
55✔
629
      break;
55✔
630
    case QUERY_NODE_SYNCDB_STMT:
×
631
      break;
×
632
    case QUERY_NODE_GRANT_STMT:
1,001✔
633
      code = makeNode(type, sizeof(SGrantStmt), &pNode);
1,001✔
634
      break;
1,001✔
635
    case QUERY_NODE_REVOKE_STMT:
108✔
636
      code = makeNode(type, sizeof(SRevokeStmt), &pNode);
108✔
637
      break;
108✔
638
    case QUERY_NODE_ALTER_CLUSTER_STMT:
6✔
639
      code = makeNode(type, sizeof(SAlterClusterStmt), &pNode);
6✔
640
      break;
6✔
641
    case QUERY_NODE_SHOW_DNODES_STMT:
6,425✔
642
    case QUERY_NODE_SHOW_MNODES_STMT:
643
    case QUERY_NODE_SHOW_MODULES_STMT:
644
    case QUERY_NODE_SHOW_QNODES_STMT:
645
    case QUERY_NODE_SHOW_ANODES_STMT:
646
    case QUERY_NODE_SHOW_ANODES_FULL_STMT:
647
    case QUERY_NODE_SHOW_SNODES_STMT:
648
    case QUERY_NODE_SHOW_BNODES_STMT:
649
    case QUERY_NODE_SHOW_ARBGROUPS_STMT:
650
    case QUERY_NODE_SHOW_CLUSTER_STMT:
651
    case QUERY_NODE_SHOW_DATABASES_STMT:
652
    case QUERY_NODE_SHOW_FUNCTIONS_STMT:
653
    case QUERY_NODE_SHOW_INDEXES_STMT:
654
    case QUERY_NODE_SHOW_STABLES_STMT:
655
    case QUERY_NODE_SHOW_STREAMS_STMT:
656
    case QUERY_NODE_SHOW_TABLES_STMT:
657
    case QUERY_NODE_SHOW_USERS_STMT:
658
    case QUERY_NODE_SHOW_USERS_FULL_STMT:
659
    case QUERY_NODE_SHOW_LICENCES_STMT:
660
    case QUERY_NODE_SHOW_VGROUPS_STMT:
661
    case QUERY_NODE_SHOW_TOPICS_STMT:
662
    case QUERY_NODE_SHOW_CONSUMERS_STMT:
663
    case QUERY_NODE_SHOW_CONNECTIONS_STMT:
664
    case QUERY_NODE_SHOW_QUERIES_STMT:
665
    case QUERY_NODE_SHOW_VNODES_STMT:
666
    case QUERY_NODE_SHOW_APPS_STMT:
667
    case QUERY_NODE_SHOW_SCORES_STMT:
668
    case QUERY_NODE_SHOW_VARIABLES_STMT:
669
    case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
670
    case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
671
    case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
672
    case QUERY_NODE_SHOW_TAGS_STMT:
673
    case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
674
    case QUERY_NODE_SHOW_VIEWS_STMT:
675
    case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
676
    case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
677
    case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
678
    case QUERY_NODE_SHOW_ENCRYPTIONS_STMT:
679
    case QUERY_NODE_SHOW_TSMAS_STMT:
680
      code = makeNode(type, sizeof(SShowStmt), &pNode);
6,425✔
681
      break;
6,425✔
682
    case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
30✔
683
      code = makeNode(type, sizeof(SShowTableTagsStmt), &pNode);
30✔
684
      break;
30✔
685
    case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
74✔
686
      code = makeNode(type, sizeof(SShowDnodeVariablesStmt), &pNode);
74✔
687
      break;
74✔
688
    case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
25✔
689
      code = makeNode(type, sizeof(SShowCreateDatabaseStmt), &pNode);
25✔
690
      break;
25✔
691
    case QUERY_NODE_SHOW_DB_ALIVE_STMT:
31✔
692
    case QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT:
693
      code = makeNode(type, sizeof(SShowAliveStmt), &pNode);
31✔
694
      break;
31✔
695
    case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
143✔
696
    case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
697
      code = makeNode(type, sizeof(SShowCreateTableStmt), &pNode);
143✔
698
      break;
143✔
699
    case QUERY_NODE_SHOW_CREATE_VIEW_STMT:
14✔
700
      code = makeNode(type, sizeof(SShowCreateViewStmt), &pNode);
14✔
701
      break;
14✔
702
    case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
9✔
703
      code = makeNode(type, sizeof(SShowTableDistributedStmt), &pNode);
9✔
704
      break;
9✔
705
    case QUERY_NODE_SHOW_COMPACTS_STMT:
162✔
706
      code = makeNode(type, sizeof(SShowCompactsStmt), &pNode);
162✔
707
      break;
162✔
708
    case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT:
1✔
709
      code = makeNode(type, sizeof(SShowCompactDetailsStmt), &pNode);
1✔
710
      break;
1✔
711
    case QUERY_NODE_KILL_QUERY_STMT:
×
NEW
712
      code = makeNode(type, sizeof(SKillQueryStmt), &pNode);
×
NEW
713
      break;
×
714
    case QUERY_NODE_KILL_TRANSACTION_STMT:
2✔
715
    case QUERY_NODE_KILL_CONNECTION_STMT:
716
    case QUERY_NODE_KILL_COMPACT_STMT:
717
      code = makeNode(type, sizeof(SKillStmt), &pNode);
2✔
718
      break;
2✔
719
    case QUERY_NODE_DELETE_STMT:
56,484✔
720
      code = makeNode(type, sizeof(SDeleteStmt), &pNode);
56,484✔
721
      break;
56,483✔
722
    case QUERY_NODE_INSERT_STMT:
195✔
723
      code = makeNode(type, sizeof(SInsertStmt), &pNode);
195✔
724
      break;
195✔
725
    case QUERY_NODE_QUERY:
10,850,567✔
726
      code = makeNode(type, sizeof(SQuery), &pNode);
10,850,567✔
727
      break;
10,848,445✔
728
    case QUERY_NODE_RESTORE_DNODE_STMT:
4✔
729
    case QUERY_NODE_RESTORE_QNODE_STMT:
730
    case QUERY_NODE_RESTORE_MNODE_STMT:
731
    case QUERY_NODE_RESTORE_VNODE_STMT:
732
      code = makeNode(type, sizeof(SRestoreComponentNodeStmt), &pNode);
4✔
733
      break;
4✔
734
    case QUERY_NODE_CREATE_VIEW_STMT:
226✔
735
      code = makeNode(type, sizeof(SCreateViewStmt), &pNode);
226✔
736
      break;
226✔
737
    case QUERY_NODE_DROP_VIEW_STMT:
143✔
738
      code = makeNode(type, sizeof(SDropViewStmt), &pNode);
143✔
739
      break;
143✔
740
    case QUERY_NODE_CREATE_TSMA_STMT:
361✔
741
      code = makeNode(type, sizeof(SCreateTSMAStmt), &pNode);
361✔
742
      break;
361✔
743
    case QUERY_NODE_DROP_TSMA_STMT:
176✔
744
      code = makeNode(type, sizeof(SDropTSMAStmt), &pNode);
176✔
745
      break;
176✔
746
    case QUERY_NODE_TSMA_OPTIONS:
389✔
747
      code = makeNode(type, sizeof(STSMAOptions), &pNode);
389✔
748
      break;
389✔
749
    case QUERY_NODE_LOGIC_PLAN_SCAN:
3,112,551✔
750
      code = makeNode(type, sizeof(SScanLogicNode), &pNode);
3,112,551✔
751
      break;
3,112,550✔
752
    case QUERY_NODE_LOGIC_PLAN_JOIN:
287,101✔
753
      code = makeNode(type, sizeof(SJoinLogicNode), &pNode);
287,101✔
754
      break;
287,101✔
755
    case QUERY_NODE_LOGIC_PLAN_AGG:
1,702,782✔
756
      code = makeNode(type, sizeof(SAggLogicNode), &pNode);
1,702,782✔
757
      break;
1,702,822✔
758
    case QUERY_NODE_LOGIC_PLAN_PROJECT:
2,017,554✔
759
      code = makeNode(type, sizeof(SProjectLogicNode), &pNode);
2,017,554✔
760
      break;
2,017,586✔
761
    case QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY:
19,433,710✔
762
      code = makeNode(type, sizeof(SVnodeModifyLogicNode), &pNode);
19,433,710✔
763
      break;
19,469,933✔
764
    case QUERY_NODE_LOGIC_PLAN_EXCHANGE:
1,225,237✔
765
      code = makeNode(type, sizeof(SExchangeLogicNode), &pNode);
1,225,237✔
766
      break;
1,225,239✔
767
    case QUERY_NODE_LOGIC_PLAN_MERGE:
288,198✔
768
      code = makeNode(type, sizeof(SMergeLogicNode), &pNode);
288,198✔
769
      break;
288,198✔
770
    case QUERY_NODE_LOGIC_PLAN_WINDOW:
193,494✔
771
      code = makeNode(type, sizeof(SWindowLogicNode), &pNode);
193,494✔
772
      break;
193,493✔
773
    case QUERY_NODE_LOGIC_PLAN_FILL:
23,194✔
774
      code = makeNode(type, sizeof(SFillLogicNode), &pNode);
23,194✔
775
      break;
23,194✔
776
    case QUERY_NODE_LOGIC_PLAN_SORT:
593,269✔
777
      code = makeNode(type, sizeof(SSortLogicNode), &pNode);
593,269✔
778
      break;
593,269✔
779
    case QUERY_NODE_LOGIC_PLAN_PARTITION:
117,779✔
780
      code = makeNode(type, sizeof(SPartitionLogicNode), &pNode);
117,779✔
781
      break;
117,779✔
782
    case QUERY_NODE_LOGIC_PLAN_INDEF_ROWS_FUNC:
93,546✔
783
      code = makeNode(type, sizeof(SIndefRowsFuncLogicNode), &pNode);
93,546✔
784
      break;
93,546✔
785
    case QUERY_NODE_LOGIC_PLAN_INTERP_FUNC:
7,440✔
786
      code = makeNode(type, sizeof(SInterpFuncLogicNode), &pNode);
7,440✔
787
      break;
7,440✔
788
    case QUERY_NODE_LOGIC_PLAN_FORECAST_FUNC:
×
NEW
789
      code = makeNode(type, sizeof(SForecastFuncLogicNode), &pNode);
×
NEW
790
      break;
×
791
    case QUERY_NODE_LOGIC_PLAN_GROUP_CACHE:
37,806✔
792
      code = makeNode(type, sizeof(SGroupCacheLogicNode), &pNode);
37,806✔
793
      break;
37,806✔
794
    case QUERY_NODE_LOGIC_PLAN_DYN_QUERY_CTRL:
37,806✔
795
      code = makeNode(type, sizeof(SDynQueryCtrlLogicNode), &pNode);
37,806✔
796
      break;
37,806✔
797
    case QUERY_NODE_LOGIC_SUBPLAN:
23,462,955✔
798
      code = makeNode(type, sizeof(SLogicSubplan), &pNode);
23,462,955✔
799
      break;
23,513,560✔
800
    case QUERY_NODE_LOGIC_PLAN:
10,527,612✔
801
      code = makeNode(type, sizeof(SQueryLogicPlan), &pNode);
10,527,612✔
802
      break;
10,578,313✔
803
    case QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN:
124,491✔
804
      code = makeNode(type, sizeof(STagScanPhysiNode), &pNode);
124,491✔
805
      break;
124,507✔
806
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN:
4,375,828✔
807
      code = makeNode(type, sizeof(STableScanPhysiNode), &pNode);
4,375,828✔
808
      break;
4,374,982✔
809
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN:
×
NEW
810
      code = makeNode(type, sizeof(STableSeqScanPhysiNode), &pNode);
×
NEW
811
      break;
×
812
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN:
2,277,967✔
813
      code = makeNode(type, sizeof(STableMergeScanPhysiNode), &pNode);
2,277,967✔
814
      break;
2,277,845✔
815
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN:
15,419✔
816
      code = makeNode(type, sizeof(SStreamScanPhysiNode), &pNode);
15,419✔
817
      break;
15,417✔
818
    case QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN:
886,926✔
819
      code = makeNode(type, sizeof(SSystemTableScanPhysiNode), &pNode);
886,926✔
820
      break;
886,649✔
821
    case QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN:
3,260✔
822
      code = makeNode(type, sizeof(SBlockDistScanPhysiNode), &pNode);
3,260✔
823
      break;
3,261✔
824
    case QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN:
37,360✔
825
      code = makeNode(type, sizeof(SLastRowScanPhysiNode), &pNode);
37,360✔
826
      break;
37,360✔
827
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN:
291,623✔
828
      code = makeNode(type, sizeof(STableCountScanPhysiNode), &pNode);
291,623✔
829
      break;
291,103✔
830
    case QUERY_NODE_PHYSICAL_PLAN_PROJECT:
2,570,118✔
831
      code = makeNode(type, sizeof(SProjectPhysiNode), &pNode);
2,570,118✔
832
      break;
2,570,942✔
833
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN:
204,516✔
834
      code = makeNode(type, sizeof(SSortMergeJoinPhysiNode), &pNode);
204,516✔
835
      break;
204,521✔
836
    case QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN:
28,052✔
837
      code = makeNode(type, sizeof(SHashJoinPhysiNode), &pNode);
28,052✔
838
      break;
28,052✔
839
    case QUERY_NODE_PHYSICAL_PLAN_HASH_AGG:
3,044,465✔
840
      code = makeNode(type, sizeof(SAggPhysiNode), &pNode);
3,044,465✔
841
      break;
3,044,441✔
842
    case QUERY_NODE_PHYSICAL_PLAN_EXCHANGE:
4,610,944✔
843
      code = makeNode(type, sizeof(SExchangePhysiNode), &pNode);
4,610,944✔
844
      break;
4,610,951✔
845
    case QUERY_NODE_PHYSICAL_PLAN_MERGE:
1,490,714✔
846
      code = makeNode(type, sizeof(SMergePhysiNode), &pNode);
1,490,714✔
847
      break;
1,490,707✔
848
    case QUERY_NODE_PHYSICAL_PLAN_SORT:
1,119,522✔
849
      code = makeNode(type, sizeof(SSortPhysiNode), &pNode);
1,119,522✔
850
      break;
1,119,570✔
851
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT:
520✔
852
      code = makeNode(type, sizeof(SGroupSortPhysiNode), &pNode);
520✔
853
      break;
520✔
854
    case QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL:
1,567,125✔
855
      code = makeNode(type, sizeof(SIntervalPhysiNode), &pNode);
1,567,125✔
856
      break;
1,566,974✔
857
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL:
×
NEW
858
      code = makeNode(type, sizeof(SMergeIntervalPhysiNode), &pNode);
×
NEW
859
      break;
×
860
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL:
545,038✔
861
      code = makeNode(type, sizeof(SMergeAlignedIntervalPhysiNode), &pNode);
545,038✔
862
      break;
545,037✔
863
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL:
4,581✔
864
      code = makeNode(type, sizeof(SStreamIntervalPhysiNode), &pNode);
4,581✔
865
      break;
4,580✔
866
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL:
853✔
867
      code = makeNode(type, sizeof(SStreamFinalIntervalPhysiNode), &pNode);
853✔
868
      break;
853✔
869
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL:
1,767✔
870
      code = makeNode(type, sizeof(SStreamSemiIntervalPhysiNode), &pNode);
1,767✔
871
      break;
1,767✔
872
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL:
397✔
873
      code = makeNode(type, sizeof(SStreamMidIntervalPhysiNode), &pNode);
397✔
874
      break;
397✔
875
    case QUERY_NODE_PHYSICAL_PLAN_FILL:
507,627✔
876
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FILL:
877
      code = makeNode(type, sizeof(SFillPhysiNode), &pNode);
507,627✔
878
      break;
507,627✔
879
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION:
104,439✔
880
      code = makeNode(type, sizeof(SSessionWinodwPhysiNode), &pNode);
104,439✔
881
      break;
104,441✔
882
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION:
934✔
883
      code = makeNode(type, sizeof(SStreamSessionWinodwPhysiNode), &pNode);
934✔
884
      break;
934✔
885
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION:
167✔
886
      code = makeNode(type, sizeof(SStreamSemiSessionWinodwPhysiNode), &pNode);
167✔
887
      break;
167✔
888
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION:
92✔
889
      code = makeNode(type, sizeof(SStreamFinalSessionWinodwPhysiNode), &pNode);
92✔
890
      break;
92✔
891
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE:
78,276✔
892
      code = makeNode(type, sizeof(SStateWinodwPhysiNode), &pNode);
78,276✔
893
      break;
78,277✔
894
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE:
526✔
895
      code = makeNode(type, sizeof(SStreamStateWinodwPhysiNode), &pNode);
526✔
896
      break;
526✔
897
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_EVENT:
281,455✔
898
      code = makeNode(type, sizeof(SEventWinodwPhysiNode), &pNode);
281,455✔
899
      break;
281,455✔
900
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT:
311✔
901
      code = makeNode(type, sizeof(SStreamEventWinodwPhysiNode), &pNode);
311✔
902
      break;
311✔
903
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_COUNT:
7,462✔
904
      code = makeNode(type, sizeof(SCountWinodwPhysiNode), &pNode);
7,462✔
905
      break;
7,465✔
906
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ANOMALY:
×
NEW
907
      code = makeNode(type, sizeof(SAnomalyWindowPhysiNode), &pNode);
×
NEW
908
      break;
×
909
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_COUNT:
460✔
910
      code = makeNode(type, sizeof(SStreamCountWinodwPhysiNode), &pNode);
460✔
911
      break;
460✔
912
    case QUERY_NODE_PHYSICAL_PLAN_PARTITION:
45,969✔
913
      code = makeNode(type, sizeof(SPartitionPhysiNode), &pNode);
45,969✔
914
      break;
45,971✔
915
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION:
1,760✔
916
      code = makeNode(type, sizeof(SStreamPartitionPhysiNode), &pNode);
1,760✔
917
      break;
1,760✔
918
    case QUERY_NODE_PHYSICAL_PLAN_INDEF_ROWS_FUNC:
156,654✔
919
      code = makeNode(type, sizeof(SIndefRowsFuncPhysiNode), &pNode);
156,654✔
920
      break;
156,655✔
921
    case QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC:
70,040✔
922
      code = makeNode(type, sizeof(SInterpFuncLogicNode), &pNode);
70,040✔
923
      break;
70,040✔
924
    case QUERY_NODE_PHYSICAL_PLAN_FORECAST_FUNC:
×
NEW
925
      code = makeNode(type, sizeof(SForecastFuncLogicNode), &pNode);
×
NEW
926
      break;
×
927
    case QUERY_NODE_PHYSICAL_PLAN_DISPATCH:
10,591,179✔
928
      code = makeNode(type, sizeof(SDataDispatcherNode), &pNode);
10,591,179✔
929
      break;
10,595,390✔
930
    case QUERY_NODE_PHYSICAL_PLAN_INSERT:
9,693,251✔
931
      code = makeNode(type, sizeof(SDataInserterNode), &pNode);
9,693,251✔
932
      break;
9,699,974✔
933
    case QUERY_NODE_PHYSICAL_PLAN_QUERY_INSERT:
341✔
934
      code = makeNode(type, sizeof(SQueryInserterNode), &pNode);
341✔
935
      break;
341✔
936
    case QUERY_NODE_PHYSICAL_PLAN_DELETE:
115,975✔
937
      code = makeNode(type, sizeof(SDataDeleterNode), &pNode);
115,975✔
938
      break;
115,980✔
939
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE:
28,052✔
940
      code = makeNode(type, sizeof(SGroupCachePhysiNode), &pNode);
28,052✔
941
      break;
28,052✔
942
    case QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL:
28,052✔
943
      code = makeNode(type, sizeof(SDynQueryCtrlPhysiNode), &pNode);
28,052✔
944
      break;
28,052✔
945
    case QUERY_NODE_PHYSICAL_SUBPLAN:
20,418,637✔
946
      code = makeNode(type, sizeof(SSubplan), &pNode);
20,418,637✔
947
      break;
20,440,923✔
948
    case QUERY_NODE_PHYSICAL_PLAN:
10,565,470✔
949
      code = makeNode(type, sizeof(SQueryPlan), &pNode);
10,565,470✔
950
      break;
10,565,813✔
951
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERP_FUNC:
47✔
952
      code = makeNode(type, sizeof(SStreamInterpFuncPhysiNode), &pNode);
47✔
953
      break;
47✔
954
    default:
×
955
      break;
×
956
  }
957
  if (TSDB_CODE_SUCCESS != code)
1,029,158,472!
958
    nodesError("nodesMakeNode unknown node = %s", nodesNodeName(type));
×
959
  else
960
    *ppNodeOut = pNode;
1,029,158,472✔
961
  return code;
1,026,172,326✔
962
}
963

964
static void destroyVgDataBlockArray(SArray* pArray) {
29,080,984✔
965
  size_t size = taosArrayGetSize(pArray);
29,080,984✔
966
  for (size_t i = 0; i < size; ++i) {
38,781,227✔
967
    SVgDataBlocks* pVg = taosArrayGetP(pArray, i);
9,681,925✔
968
    taosMemoryFreeClear(pVg->pData);
9,691,557!
969
    taosMemoryFreeClear(pVg);
9,694,203✔
970
  }
971
  taosArrayDestroy(pArray);
29,099,302✔
972
}
29,130,618✔
973

974
static void destroyLogicNode(SLogicNode* pNode) {
29,141,993✔
975
  nodesDestroyList(pNode->pTargets);
29,141,993✔
976
  nodesDestroyNode(pNode->pConditions);
29,141,056✔
977
  nodesDestroyList(pNode->pChildren);
29,151,050✔
978
  nodesDestroyNode(pNode->pLimit);
29,153,546✔
979
  nodesDestroyNode(pNode->pSlimit);
29,151,164✔
980
  nodesDestroyList(pNode->pHint);
29,153,623✔
981
}
29,145,779✔
982

983
static void destroyPhysiNode(SPhysiNode* pNode) {
24,513,117✔
984
  nodesDestroyList(pNode->pChildren);
24,513,117✔
985
  nodesDestroyNode(pNode->pConditions);
24,515,342✔
986
  nodesDestroyNode((SNode*)pNode->pOutputDataBlockDesc);
24,513,833✔
987
  nodesDestroyNode(pNode->pLimit);
24,522,885✔
988
  nodesDestroyNode(pNode->pSlimit);
24,521,410✔
989
}
24,518,910✔
990

991
static void destroyWinodwPhysiNode(SWindowPhysiNode* pNode) {
2,595,721✔
992
  destroyPhysiNode((SPhysiNode*)pNode);
2,595,721✔
993
  nodesDestroyList(pNode->pExprs);
2,595,961✔
994
  nodesDestroyList(pNode->pFuncs);
2,595,941✔
995
  nodesDestroyNode(pNode->pTspk);
2,595,976✔
996
  nodesDestroyNode(pNode->pTsEnd);
2,595,998✔
997
}
2,595,985✔
998

999
static void destroyPartitionPhysiNode(SPartitionPhysiNode* pNode) {
47,751✔
1000
  destroyPhysiNode((SPhysiNode*)pNode);
47,751✔
1001
  nodesDestroyList(pNode->pExprs);
47,749✔
1002
  nodesDestroyList(pNode->pPartitionKeys);
47,750✔
1003
  nodesDestroyList(pNode->pTargets);
47,750✔
1004
}
47,751✔
1005

1006
static void destroyScanPhysiNode(SScanPhysiNode* pNode) {
8,017,529✔
1007
  destroyPhysiNode((SPhysiNode*)pNode);
8,017,529✔
1008
  nodesDestroyList(pNode->pScanCols);
8,019,820✔
1009
  nodesDestroyList(pNode->pScanPseudoCols);
8,020,564✔
1010
}
8,020,925✔
1011

1012
static void destroyDataSinkNode(SDataSinkNode* pNode) { nodesDestroyNode((SNode*)pNode->pInputDataBlockDesc); }
20,450,045✔
1013

1014
static void destroyExprNode(SExprNode* pExpr) { taosArrayDestroy(pExpr->pAssociation); }
545,605,637✔
1015

1016
static void destroyTableCfg(STableCfg* pCfg) {
143✔
1017
  if (NULL == pCfg) {
143✔
1018
    return;
27✔
1019
  }
1020
  taosArrayDestroy(pCfg->pFuncs);
116✔
1021
  taosMemoryFree(pCfg->pComment);
116✔
1022
  taosMemoryFree(pCfg->pSchemas);
116✔
1023
  taosMemoryFree(pCfg->pSchemaExt);
116✔
1024
  taosMemoryFree(pCfg->pTags);
116✔
1025
  taosMemoryFree(pCfg);
116✔
1026
}
1027

1028
static void destroySmaIndex(void* pIndex) { taosMemoryFree(((STableIndexInfo*)pIndex)->expr); }
×
1029

1030
void destroyFuncParam(void* pValue) { taosMemoryFree(((SFunctParam*)pValue)->pCol); }
14,530✔
1031

1032
static void destroyHintValue(EHintOption option, void* value) {
62,853✔
1033
  switch (option) {
1034
    default:
1035
      break;
62,853✔
1036
  }
1037

1038
  taosMemoryFree(value);
62,853✔
1039
}
62,853✔
1040

1041
void nodesDestroyNode(SNode* pNode) {
1,412,884,292✔
1042
  if (NULL == pNode) {
1,412,884,292✔
1043
    return;
389,023,157✔
1044
  }
1045

1046
  switch (nodeType(pNode)) {
1,023,861,135!
1047
    case QUERY_NODE_COLUMN:
214,713,043✔
1048
      destroyExprNode((SExprNode*)pNode);
214,713,043✔
1049
      break;
214,706,595✔
1050
    case QUERY_NODE_VALUE: {
255,592,082✔
1051
      SValueNode* pValue = (SValueNode*)pNode;
255,592,082✔
1052
      destroyExprNode((SExprNode*)pNode);
255,592,082✔
1053
      taosMemoryFreeClear(pValue->literal);
255,662,519✔
1054
      if (IS_VAR_DATA_TYPE(pValue->node.resType.type)) {
259,870,316!
1055
        taosMemoryFreeClear(pValue->datum.p);
5,760,477!
1056
      }
1057
      break;
259,870,414✔
1058
    }
1059
    case QUERY_NODE_OPERATOR: {
29,471,263✔
1060
      SOperatorNode* pOp = (SOperatorNode*)pNode;
29,471,263✔
1061
      destroyExprNode((SExprNode*)pNode);
29,471,263✔
1062
      nodesDestroyNode(pOp->pLeft);
29,470,640✔
1063
      nodesDestroyNode(pOp->pRight);
29,481,780✔
1064
      break;
29,482,763✔
1065
    }
1066
    case QUERY_NODE_LOGIC_CONDITION:
9,216,737✔
1067
      destroyExprNode((SExprNode*)pNode);
9,216,737✔
1068
      nodesDestroyList(((SLogicConditionNode*)pNode)->pParameterList);
9,216,621✔
1069
      break;
9,217,667✔
1070
    case QUERY_NODE_FUNCTION:
37,536,561✔
1071
      destroyExprNode((SExprNode*)pNode);
37,536,561✔
1072
      nodesDestroyList(((SFunctionNode*)pNode)->pParameterList);
37,536,273✔
1073
      break;
37,542,606✔
1074
    case QUERY_NODE_REAL_TABLE: {
1,452,815✔
1075
      SRealTableNode* pReal = (SRealTableNode*)pNode;
1,452,815✔
1076
      taosMemoryFreeClear(pReal->pMeta);
1,452,815✔
1077
      taosMemoryFreeClear(pReal->pVgroupList);
1,452,819✔
1078
      taosArrayDestroyEx(pReal->pSmaIndexes, destroySmaIndex);
1,452,819✔
1079
      taosArrayDestroyP(pReal->tsmaTargetTbVgInfo, taosMemoryFree);
1,452,805✔
1080
      taosArrayDestroy(pReal->tsmaTargetTbInfo);
1,452,800✔
1081
      break;
1,452,789✔
1082
    }
1083
    case QUERY_NODE_TEMP_TABLE:
307,559✔
1084
      nodesDestroyNode(((STempTableNode*)pNode)->pSubquery);
307,559✔
1085
      break;
307,559✔
1086
    case QUERY_NODE_JOIN_TABLE: {
129,218✔
1087
      SJoinTableNode* pJoin = (SJoinTableNode*)pNode;
129,218✔
1088
      nodesDestroyNode(pJoin->pWindowOffset);
129,218✔
1089
      nodesDestroyNode(pJoin->pJLimit);
129,218✔
1090
      nodesDestroyNode(pJoin->addPrimCond);
129,218✔
1091
      nodesDestroyNode(pJoin->pLeft);
129,218✔
1092
      nodesDestroyNode(pJoin->pRight);
129,218✔
1093
      nodesDestroyNode(pJoin->pOnCond);
129,218✔
1094
      break;
129,218✔
1095
    }
1096
    case QUERY_NODE_GROUPING_SET:
878,247✔
1097
      nodesDestroyList(((SGroupingSetNode*)pNode)->pParameterList);
878,247✔
1098
      break;
878,246✔
1099
    case QUERY_NODE_ORDER_BY_EXPR:
4,704,467✔
1100
      nodesDestroyNode(((SOrderByExprNode*)pNode)->pExpr);
4,704,467✔
1101
      break;
4,704,530✔
1102
    case QUERY_NODE_LIMIT:  // no pointer field
1,432,228✔
1103
      break;
1,432,228✔
1104
    case QUERY_NODE_STATE_WINDOW: {
8,520✔
1105
      SStateWindowNode* pState = (SStateWindowNode*)pNode;
8,520✔
1106
      nodesDestroyNode(pState->pCol);
8,520✔
1107
      nodesDestroyNode(pState->pExpr);
8,520✔
1108
      break;
8,520✔
1109
    }
1110
    case QUERY_NODE_SESSION_WINDOW: {
6,303✔
1111
      SSessionWindowNode* pSession = (SSessionWindowNode*)pNode;
6,303✔
1112
      nodesDestroyNode((SNode*)pSession->pCol);
6,303✔
1113
      nodesDestroyNode((SNode*)pSession->pGap);
6,303✔
1114
      break;
6,303✔
1115
    }
1116
    case QUERY_NODE_INTERVAL_WINDOW: {
38,421✔
1117
      SIntervalWindowNode* pJoin = (SIntervalWindowNode*)pNode;
38,421✔
1118
      nodesDestroyNode(pJoin->pCol);
38,421✔
1119
      nodesDestroyNode(pJoin->pInterval);
38,421✔
1120
      nodesDestroyNode(pJoin->pOffset);
38,421✔
1121
      nodesDestroyNode(pJoin->pSliding);
38,421✔
1122
      nodesDestroyNode(pJoin->pFill);
38,421✔
1123
      break;
38,421✔
1124
    }
1125
    case QUERY_NODE_NODE_LIST:
14,379,889✔
1126
      nodesDestroyList(((SNodeListNode*)pNode)->pNodeList);
14,379,889✔
1127
      break;
14,388,742✔
1128
    case QUERY_NODE_FILL: {
12,590✔
1129
      SFillNode* pFill = (SFillNode*)pNode;
12,590✔
1130
      nodesDestroyNode(pFill->pValues);
12,590✔
1131
      nodesDestroyNode(pFill->pWStartTs);
12,590✔
1132
      break;
12,590✔
1133
    }
1134
    case QUERY_NODE_RAW_EXPR:
13,773,706✔
1135
      nodesDestroyNode(((SRawExprNode*)pNode)->pNode);
13,773,706✔
1136
      break;
13,773,735✔
1137
    case QUERY_NODE_TARGET:
87,133,660✔
1138
      nodesDestroyNode(((STargetNode*)pNode)->pExpr);
87,133,660✔
1139
      break;
87,465,075✔
1140
    case QUERY_NODE_DATABLOCK_DESC:
35,213,767✔
1141
      nodesDestroyList(((SDataBlockDescNode*)pNode)->pSlots);
35,213,767✔
1142
      break;
35,235,580✔
1143
    case QUERY_NODE_SLOT_DESC:  // no pointer field
158,101,779✔
1144
      break;
158,101,779✔
1145
    case QUERY_NODE_COLUMN_DEF:
591,057✔
1146
      nodesDestroyNode(((SColumnDefNode*)pNode)->pOptions);
591,057✔
1147
      break;
591,057✔
1148
    case QUERY_NODE_DOWNSTREAM_SOURCE:  // no pointer field
6,298,620✔
1149
      break;
6,298,620✔
1150
    case QUERY_NODE_DATABASE_OPTIONS: {
5,295✔
1151
      SDatabaseOptions* pOptions = (SDatabaseOptions*)pNode;
5,295✔
1152
      nodesDestroyNode((SNode*)pOptions->pDaysPerFile);
5,295✔
1153
      nodesDestroyNode((SNode*)pOptions->s3KeepLocalStr);
5,295✔
1154
      nodesDestroyList(pOptions->pKeep);
5,295✔
1155
      nodesDestroyList(pOptions->pRetentions);
5,296✔
1156
      break;
5,296✔
1157
    }
1158
    case QUERY_NODE_TABLE_OPTIONS: {
102,974✔
1159
      STableOptions* pOptions = (STableOptions*)pNode;
102,974✔
1160
      nodesDestroyList(pOptions->pMaxDelay);
102,974✔
1161
      nodesDestroyList(pOptions->pWatermark);
102,974✔
1162
      nodesDestroyList(pOptions->pRollupFuncs);
102,975✔
1163
      nodesDestroyList(pOptions->pSma);
102,978✔
1164
      nodesDestroyList(pOptions->pDeleteMark);
102,979✔
1165
      break;
102,980✔
1166
    }
1167
    case QUERY_NODE_COLUMN_OPTIONS: {
560,134✔
1168
      SColumnOptions* pOptions = (SColumnOptions*)pNode;
560,134✔
1169
      break;
560,134✔
1170
    }
1171
    case QUERY_NODE_INDEX_OPTIONS: {
41✔
1172
      SIndexOptions* pOptions = (SIndexOptions*)pNode;
41✔
1173
      nodesDestroyList(pOptions->pFuncs);
41✔
1174
      nodesDestroyNode(pOptions->pInterval);
41✔
1175
      nodesDestroyNode(pOptions->pOffset);
41✔
1176
      nodesDestroyNode(pOptions->pSliding);
41✔
1177
      nodesDestroyNode(pOptions->pStreamOptions);
41✔
1178
      break;
41✔
1179
    }
1180
    case QUERY_NODE_EXPLAIN_OPTIONS:  // no pointer field
133,846✔
1181
      break;
133,846✔
1182
    case QUERY_NODE_STREAM_OPTIONS: {
966✔
1183
      SStreamOptions* pOptions = (SStreamOptions*)pNode;
966✔
1184
      nodesDestroyNode(pOptions->pDelay);
966✔
1185
      nodesDestroyNode(pOptions->pWatermark);
966✔
1186
      nodesDestroyNode(pOptions->pDeleteMark);
966✔
1187
      break;
966✔
1188
    }
1189
    case QUERY_NODE_TSMA_OPTIONS: {
389✔
1190
      STSMAOptions* pOptions = (STSMAOptions*)pNode;
389✔
1191
      nodesDestroyList(pOptions->pFuncs);
389✔
1192
      nodesDestroyNode(pOptions->pInterval);
389✔
1193
      break;
389✔
1194
    }
1195
    case QUERY_NODE_LEFT_VALUE:  // no pointer field
319,862✔
1196
    case QUERY_NODE_COLUMN_REF:  // no pointer field
1197
      break;
319,862✔
1198
    case QUERY_NODE_WHEN_THEN: {
52,115✔
1199
      SWhenThenNode* pWhenThen = (SWhenThenNode*)pNode;
52,115✔
1200
      destroyExprNode((SExprNode*)pNode);
52,115✔
1201
      nodesDestroyNode(pWhenThen->pWhen);
52,115✔
1202
      nodesDestroyNode(pWhenThen->pThen);
52,114✔
1203
      break;
52,115✔
1204
    }
1205
    case QUERY_NODE_CASE_WHEN: {
39,292✔
1206
      SCaseWhenNode* pCaseWhen = (SCaseWhenNode*)pNode;
39,292✔
1207
      destroyExprNode((SExprNode*)pNode);
39,292✔
1208
      nodesDestroyNode(pCaseWhen->pCase);
39,292✔
1209
      nodesDestroyNode(pCaseWhen->pElse);
39,292✔
1210
      nodesDestroyList(pCaseWhen->pWhenThenList);
39,294✔
1211
      break;
39,294✔
1212
    }
1213
    case QUERY_NODE_EVENT_WINDOW: {
775✔
1214
      SEventWindowNode* pEvent = (SEventWindowNode*)pNode;
775✔
1215
      nodesDestroyNode(pEvent->pCol);
775✔
1216
      nodesDestroyNode(pEvent->pStartCond);
775✔
1217
      nodesDestroyNode(pEvent->pEndCond);
775✔
1218
      break;
775✔
1219
    }
1220
    case QUERY_NODE_COUNT_WINDOW: {
696✔
1221
      SCountWindowNode* pEvent = (SCountWindowNode*)pNode;
696✔
1222
      nodesDestroyNode(pEvent->pCol);
696✔
1223
      break;
696✔
1224
    }
1225
    case QUERY_NODE_ANOMALY_WINDOW: {
×
1226
      SAnomalyWindowNode* pAnomaly = (SAnomalyWindowNode*)pNode;
×
1227
      nodesDestroyNode(pAnomaly->pCol);
×
1228
      break;
×
1229
    }
1230
    case QUERY_NODE_HINT: {
62,853✔
1231
      SHintNode* pHint = (SHintNode*)pNode;
62,853✔
1232
      destroyHintValue(pHint->option, pHint->value);
62,853✔
1233
      break;
62,853✔
1234
    }
1235
    case QUERY_NODE_VIEW: {
376✔
1236
      SViewNode* pView = (SViewNode*)pNode;
376✔
1237
      taosMemoryFreeClear(pView->pMeta);
376!
1238
      taosMemoryFreeClear(pView->pVgroupList);
376!
1239
      taosArrayDestroyEx(pView->pSmaIndexes, destroySmaIndex);
376✔
1240
      break;
376✔
1241
    }
1242
    case QUERY_NODE_WINDOW_OFFSET: {
4,834✔
1243
      SWindowOffsetNode* pWin = (SWindowOffsetNode*)pNode;
4,834✔
1244
      nodesDestroyNode(pWin->pStartOffset);
4,834✔
1245
      nodesDestroyNode(pWin->pEndOffset);
4,834✔
1246
      break;
4,834✔
1247
    }
1248
    case QUERY_NODE_SET_OPERATOR: {
81,455✔
1249
      SSetOperator* pStmt = (SSetOperator*)pNode;
81,455✔
1250
      nodesDestroyList(pStmt->pProjectionList);
81,455✔
1251
      nodesDestroyNode(pStmt->pLeft);
81,455✔
1252
      nodesDestroyNode(pStmt->pRight);
81,455✔
1253
      nodesDestroyList(pStmt->pOrderByList);
81,455✔
1254
      nodesDestroyNode(pStmt->pLimit);
81,455✔
1255
      break;
81,455✔
1256
    }
1257
    case QUERY_NODE_SELECT_STMT: {
1,426,299✔
1258
      SSelectStmt* pStmt = (SSelectStmt*)pNode;
1,426,299✔
1259
      nodesDestroyList(pStmt->pProjectionList);
1,426,299✔
1260
      nodesDestroyNode(pStmt->pFromTable);
1,426,299✔
1261
      nodesDestroyNode(pStmt->pWhere);
1,426,299✔
1262
      nodesDestroyList(pStmt->pPartitionByList);
1,426,301✔
1263
      nodesDestroyList(pStmt->pTags);
1,426,301✔
1264
      nodesDestroyNode(pStmt->pSubtable);
1,426,301✔
1265
      nodesDestroyNode(pStmt->pWindow);
1,426,300✔
1266
      nodesDestroyList(pStmt->pGroupByList);
1,426,300✔
1267
      nodesDestroyNode(pStmt->pHaving);
1,426,300✔
1268
      nodesDestroyNode(pStmt->pRange);
1,426,301✔
1269
      nodesDestroyNode(pStmt->pEvery);
1,426,301✔
1270
      nodesDestroyNode(pStmt->pFill);
1,426,300✔
1271
      nodesDestroyList(pStmt->pOrderByList);
1,426,300✔
1272
      nodesDestroyNode((SNode*)pStmt->pLimit);
1,426,300✔
1273
      nodesDestroyNode((SNode*)pStmt->pSlimit);
1,426,301✔
1274
      nodesDestroyList(pStmt->pHint);
1,426,301✔
1275
      break;
1,426,301✔
1276
    }
1277
    case QUERY_NODE_VNODE_MODIFY_STMT: {
9,725,801✔
1278
      SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)pNode;
9,725,801✔
1279
      destroyVgDataBlockArray(pStmt->pDataBlocks);
9,725,801✔
1280
      taosMemoryFreeClear(pStmt->pTableMeta);
9,725,905✔
1281
      nodesDestroyNode(pStmt->pTagCond);
9,725,641✔
1282
      taosArrayDestroy(pStmt->pTableTag);
9,725,559✔
1283
      taosHashCleanup(pStmt->pVgroupsHashObj);
9,725,417✔
1284
      taosHashCleanup(pStmt->pSubTableHashObj);
9,724,714✔
1285
      taosHashCleanup(pStmt->pTableNameHashObj);
9,724,429✔
1286
      taosHashCleanup(pStmt->pDbFNameHashObj);
9,723,984✔
1287
      taosHashCleanup(pStmt->pTableCxtHashObj);
9,723,588✔
1288
      if (pStmt->freeHashFunc) {
9,723,191✔
1289
        pStmt->freeHashFunc(pStmt->pTableBlockHashObj);
9,634,696✔
1290
      }
1291
      if (pStmt->freeArrayFunc) {
9,721,973✔
1292
        pStmt->freeArrayFunc(pStmt->pVgDataBlocks);
9,633,732✔
1293
      }
1294
      tdDestroySVCreateTbReq(pStmt->pCreateTblReq);
9,722,401✔
1295
      taosMemoryFreeClear(pStmt->pCreateTblReq);
9,722,401✔
1296
      if (pStmt->freeStbRowsCxtFunc) {
9,722,401✔
1297
        pStmt->freeStbRowsCxtFunc(pStmt->pStbRowsCxt);
9,632,135✔
1298
      }
1299
      taosMemoryFreeClear(pStmt->pStbRowsCxt);
9,721,329✔
1300

1301
      taosMemoryFreeClear(pStmt->pCreateTbInfo);
9,721,329!
1302

1303
      if (pStmt->destroyParseFileCxt) {
9,721,329!
1304
        pStmt->destroyParseFileCxt(&pStmt->pParFileCxt);
×
1305
      }
1306

1307
      int32_t code = taosCloseFile(&pStmt->fp);
9,721,329✔
1308
      if (TSDB_CODE_SUCCESS != code) {
9,720,171!
1309
        nodesError("failed to close file: %s:%d", __func__, __LINE__);
×
1310
      }
1311
      break;
9,720,341✔
1312
    }
1313
    case QUERY_NODE_CREATE_DATABASE_STMT:
5,019✔
1314
      nodesDestroyNode((SNode*)((SCreateDatabaseStmt*)pNode)->pOptions);
5,019✔
1315
      break;
5,020✔
1316
    case QUERY_NODE_DROP_DATABASE_STMT:  // no pointer field
3,553✔
1317
      break;
3,553✔
1318
    case QUERY_NODE_ALTER_DATABASE_STMT:
224✔
1319
      nodesDestroyNode((SNode*)((SAlterDatabaseStmt*)pNode)->pOptions);
224✔
1320
      break;
224✔
1321
    case QUERY_NODE_FLUSH_DATABASE_STMT:  // no pointer field
9,844✔
1322
    case QUERY_NODE_TRIM_DATABASE_STMT:   // no pointer field
1323
      break;
9,844✔
1324
    case QUERY_NODE_S3MIGRATE_DATABASE_STMT:  // no pointer field
3✔
1325
      break;
3✔
1326
    case QUERY_NODE_CREATE_TABLE_STMT: {
20,195✔
1327
      SCreateTableStmt* pStmt = (SCreateTableStmt*)pNode;
20,195✔
1328
      nodesDestroyList(pStmt->pCols);
20,195✔
1329
      nodesDestroyList(pStmt->pTags);
20,195✔
1330
      nodesDestroyNode((SNode*)pStmt->pOptions);
20,195✔
1331
      break;
20,195✔
1332
    }
1333
    case QUERY_NODE_CREATE_SUBTABLE_CLAUSE: {
82,761✔
1334
      SCreateSubTableClause* pStmt = (SCreateSubTableClause*)pNode;
82,761✔
1335
      nodesDestroyList(pStmt->pSpecificTags);
82,761✔
1336
      nodesDestroyList(pStmt->pValsOfTags);
82,756✔
1337
      nodesDestroyNode((SNode*)pStmt->pOptions);
82,770✔
1338
      break;
82,768✔
1339
    }
1340
    case QUERY_NODE_CREATE_SUBTABLE_FROM_FILE_CLAUSE: {
×
1341
      SCreateSubTableFromFileClause* pStmt = (SCreateSubTableFromFileClause*)pNode;
×
1342
      nodesDestroyList(pStmt->pSpecificTags);
×
1343
      break;
×
1344
    }
1345
    case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
48,864✔
1346
      nodesDestroyList(((SCreateMultiTablesStmt*)pNode)->pSubTables);
48,864✔
1347
      break;
48,867✔
1348
    case QUERY_NODE_DROP_TABLE_CLAUSE:  // no pointer field
18,531✔
1349
      break;
18,531✔
1350
    case QUERY_NODE_DROP_TABLE_STMT:
17,612✔
1351
      nodesDestroyList(((SDropTableStmt*)pNode)->pTables);
17,612✔
1352
      break;
17,612✔
1353
    case QUERY_NODE_DROP_SUPER_TABLE_STMT:  // no pointer field
339✔
1354
      break;
339✔
1355
    case QUERY_NODE_ALTER_TABLE_STMT:
14,736✔
1356
    case QUERY_NODE_ALTER_SUPER_TABLE_STMT: {
1357
      SAlterTableStmt* pStmt = (SAlterTableStmt*)pNode;
14,736✔
1358
      nodesDestroyNode((SNode*)pStmt->pOptions);
14,736✔
1359
      nodesDestroyNode((SNode*)pStmt->pVal);
14,736✔
1360
      if (pStmt->pNodeListTagValue != NULL) {
14,736✔
1361
        SNodeList* pNodeList = pStmt->pNodeListTagValue;
6,746✔
1362
        SNode*     pSubNode = NULL;
6,746✔
1363
        FOREACH(pSubNode, pNodeList) {
13,543!
1364
          SAlterTableStmt* pSubAlterTable = (SAlterTableStmt*)pSubNode;
6,797✔
1365
          nodesDestroyNode((SNode*)pSubAlterTable->pOptions);
6,797✔
1366
          nodesDestroyNode((SNode*)pSubAlterTable->pVal);
6,797✔
1367
        }
1368
      }
1369
      break;
14,736✔
1370
    }
1371
    case QUERY_NODE_CREATE_USER_STMT: {
147✔
1372
      SCreateUserStmt* pStmt = (SCreateUserStmt*)pNode;
147✔
1373
      taosMemoryFree(pStmt->pIpRanges);
147✔
1374
      nodesDestroyList(pStmt->pNodeListIpRanges);
147✔
1375
      break;
147✔
1376
    }
1377
    case QUERY_NODE_ALTER_USER_STMT: {
90✔
1378
      SAlterUserStmt* pStmt = (SAlterUserStmt*)pNode;
90✔
1379
      taosMemoryFree(pStmt->pIpRanges);
90✔
1380
      nodesDestroyList(pStmt->pNodeListIpRanges);
90✔
1381
    }
1382
    case QUERY_NODE_DROP_USER_STMT:     // no pointer field
10,744✔
1383
    case QUERY_NODE_USE_DATABASE_STMT:  // no pointer field
1384
    case QUERY_NODE_CREATE_DNODE_STMT:  // no pointer field
1385
    case QUERY_NODE_DROP_DNODE_STMT:    // no pointer field
1386
    case QUERY_NODE_ALTER_DNODE_STMT:   // no pointer field
1387
    case QUERY_NODE_CREATE_ANODE_STMT:  // no pointer field
1388
    case QUERY_NODE_UPDATE_ANODE_STMT:  // no pointer field
1389
    case QUERY_NODE_DROP_ANODE_STMT:    // no pointer field
1390
      break;
10,744✔
1391
    case QUERY_NODE_CREATE_INDEX_STMT: {
86✔
1392
      SCreateIndexStmt* pStmt = (SCreateIndexStmt*)pNode;
86✔
1393
      nodesDestroyNode((SNode*)pStmt->pOptions);
86✔
1394
      nodesDestroyList(pStmt->pCols);
86✔
1395
      if (pStmt->pReq) {
86✔
1396
        tFreeSMCreateSmaReq(pStmt->pReq);
10✔
1397
        taosMemoryFreeClear(pStmt->pReq);
10!
1398
      }
1399
      break;
86✔
1400
    }
1401
    case QUERY_NODE_DROP_INDEX_STMT:    // no pointer field
772✔
1402
    case QUERY_NODE_CREATE_QNODE_STMT:  // no pointer field
1403
    case QUERY_NODE_DROP_QNODE_STMT:    // no pointer field
1404
    case QUERY_NODE_CREATE_BNODE_STMT:  // no pointer field
1405
    case QUERY_NODE_DROP_BNODE_STMT:    // no pointer field
1406
    case QUERY_NODE_CREATE_SNODE_STMT:  // no pointer field
1407
    case QUERY_NODE_DROP_SNODE_STMT:    // no pointer field
1408
    case QUERY_NODE_CREATE_MNODE_STMT:  // no pointer field
1409
    case QUERY_NODE_DROP_MNODE_STMT:    // no pointer field
1410
      break;
772✔
1411
    case QUERY_NODE_CREATE_TOPIC_STMT:
622✔
1412
      nodesDestroyNode(((SCreateTopicStmt*)pNode)->pQuery);
622✔
1413
      nodesDestroyNode(((SCreateTopicStmt*)pNode)->pWhere);
622✔
1414
      break;
622✔
1415
    case QUERY_NODE_DROP_TOPIC_STMT:   // no pointer field
16,134✔
1416
    case QUERY_NODE_DROP_CGROUP_STMT:  // no pointer field
1417
    case QUERY_NODE_ALTER_LOCAL_STMT:  // no pointer field
1418
      break;
16,134✔
1419
    case QUERY_NODE_EXPLAIN_STMT: {
133,182✔
1420
      SExplainStmt* pStmt = (SExplainStmt*)pNode;
133,182✔
1421
      nodesDestroyNode((SNode*)pStmt->pOptions);
133,182✔
1422
      nodesDestroyNode(pStmt->pQuery);
133,182✔
1423
      break;
133,182✔
1424
    }
1425
    case QUERY_NODE_DESCRIBE_STMT:
3,448✔
1426
      taosMemoryFree(((SDescribeStmt*)pNode)->pMeta);
3,448✔
1427
      break;
3,448✔
1428
    case QUERY_NODE_RESET_QUERY_CACHE_STMT:  // no pointer field
7,736✔
1429
      break;
7,736✔
1430
    case QUERY_NODE_COMPACT_DATABASE_STMT: {
19✔
1431
      SCompactDatabaseStmt* pStmt = (SCompactDatabaseStmt*)pNode;
19✔
1432
      nodesDestroyNode(pStmt->pStart);
19✔
1433
      nodesDestroyNode(pStmt->pEnd);
19✔
1434
      break;
19✔
1435
    }
1436
    case QUERY_NODE_CREATE_FUNCTION_STMT:  // no pointer field
221✔
1437
    case QUERY_NODE_DROP_FUNCTION_STMT:    // no pointer field
1438
      break;
221✔
1439
    case QUERY_NODE_CREATE_STREAM_STMT: {
920✔
1440
      SCreateStreamStmt* pStmt = (SCreateStreamStmt*)pNode;
920✔
1441
      nodesDestroyNode((SNode*)pStmt->pOptions);
920✔
1442
      nodesDestroyNode(pStmt->pQuery);
920✔
1443
      nodesDestroyList(pStmt->pTags);
920✔
1444
      nodesDestroyNode(pStmt->pSubtable);
920✔
1445
      tFreeSCMCreateStreamReq(pStmt->pReq);
920✔
1446
      taosMemoryFreeClear(pStmt->pReq);
920!
1447
      break;
920✔
1448
    }
1449
    case QUERY_NODE_DROP_STREAM_STMT:                     // no pointer field
1,697✔
1450
    case QUERY_NODE_PAUSE_STREAM_STMT:                    // no pointer field
1451
    case QUERY_NODE_RESUME_STREAM_STMT:                   // no pointer field
1452
    case QUERY_NODE_BALANCE_VGROUP_STMT:                  // no pointer field
1453
    case QUERY_NODE_BALANCE_VGROUP_LEADER_STMT:           // no pointer field
1454
    case QUERY_NODE_BALANCE_VGROUP_LEADER_DATABASE_STMT:  // no pointer field
1455
    case QUERY_NODE_MERGE_VGROUP_STMT:                    // no pointer field
1456
      break;
1,697✔
1457
    case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
78✔
1458
      nodesDestroyList(((SRedistributeVgroupStmt*)pNode)->pDnodes);
78✔
1459
      break;
78✔
1460
    case QUERY_NODE_SPLIT_VGROUP_STMT:  // no pointer field
55✔
1461
    case QUERY_NODE_SYNCDB_STMT:        // no pointer field
1462
      break;
55✔
1463
    case QUERY_NODE_GRANT_STMT:
1,001✔
1464
      nodesDestroyNode(((SGrantStmt*)pNode)->pTagCond);
1,001✔
1465
      break;
1,001✔
1466
    case QUERY_NODE_REVOKE_STMT:
108✔
1467
      nodesDestroyNode(((SRevokeStmt*)pNode)->pTagCond);
108✔
1468
      break;
108✔
1469
    case QUERY_NODE_ALTER_CLUSTER_STMT:  // no pointer field
6✔
1470
      break;
6✔
1471
    case QUERY_NODE_SHOW_DNODES_STMT:
6,425✔
1472
    case QUERY_NODE_SHOW_MNODES_STMT:
1473
    case QUERY_NODE_SHOW_MODULES_STMT:
1474
    case QUERY_NODE_SHOW_QNODES_STMT:
1475
    case QUERY_NODE_SHOW_ANODES_STMT:
1476
    case QUERY_NODE_SHOW_ANODES_FULL_STMT:
1477
    case QUERY_NODE_SHOW_SNODES_STMT:
1478
    case QUERY_NODE_SHOW_BNODES_STMT:
1479
    case QUERY_NODE_SHOW_ARBGROUPS_STMT:
1480
    case QUERY_NODE_SHOW_CLUSTER_STMT:
1481
    case QUERY_NODE_SHOW_DATABASES_STMT:
1482
    case QUERY_NODE_SHOW_FUNCTIONS_STMT:
1483
    case QUERY_NODE_SHOW_INDEXES_STMT:
1484
    case QUERY_NODE_SHOW_STABLES_STMT:
1485
    case QUERY_NODE_SHOW_STREAMS_STMT:
1486
    case QUERY_NODE_SHOW_TABLES_STMT:
1487
    case QUERY_NODE_SHOW_USERS_STMT:
1488
    case QUERY_NODE_SHOW_USERS_FULL_STMT:
1489
    case QUERY_NODE_SHOW_LICENCES_STMT:
1490
    case QUERY_NODE_SHOW_VGROUPS_STMT:
1491
    case QUERY_NODE_SHOW_TOPICS_STMT:
1492
    case QUERY_NODE_SHOW_CONSUMERS_STMT:
1493
    case QUERY_NODE_SHOW_CONNECTIONS_STMT:
1494
    case QUERY_NODE_SHOW_QUERIES_STMT:
1495
    case QUERY_NODE_SHOW_VNODES_STMT:
1496
    case QUERY_NODE_SHOW_APPS_STMT:
1497
    case QUERY_NODE_SHOW_SCORES_STMT:
1498
    case QUERY_NODE_SHOW_VARIABLES_STMT:
1499
    case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
1500
    case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
1501
    case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
1502
    case QUERY_NODE_SHOW_TAGS_STMT:
1503
    case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
1504
    case QUERY_NODE_SHOW_VIEWS_STMT:
1505
    case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
1506
    case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
1507
    case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
1508
    case QUERY_NODE_SHOW_ENCRYPTIONS_STMT:
1509
    case QUERY_NODE_SHOW_TSMAS_STMT: {
1510
      SShowStmt* pStmt = (SShowStmt*)pNode;
6,425✔
1511
      nodesDestroyNode(pStmt->pDbName);
6,425✔
1512
      nodesDestroyNode(pStmt->pTbName);
6,425✔
1513
      break;
6,425✔
1514
    }
1515
    case QUERY_NODE_SHOW_TABLE_TAGS_STMT: {
30✔
1516
      SShowTableTagsStmt* pStmt = (SShowTableTagsStmt*)pNode;
30✔
1517
      nodesDestroyNode(pStmt->pDbName);
30✔
1518
      nodesDestroyNode(pStmt->pTbName);
30✔
1519
      nodesDestroyList(pStmt->pTags);
30✔
1520
      break;
30✔
1521
    }
1522
    case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
74✔
1523
      nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pDnodeId);
74✔
1524
      nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pLikePattern);
74✔
1525
      break;
74✔
1526
    case QUERY_NODE_SHOW_COMPACTS_STMT:
162✔
1527
      break;
162✔
1528
    case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT: {
1✔
1529
      SShowCompactDetailsStmt* pStmt = (SShowCompactDetailsStmt*)pNode;
1✔
1530
      nodesDestroyNode(pStmt->pCompactId);
1✔
1531
      break;
1✔
1532
    }
1533
    case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
25✔
1534
      taosMemoryFreeClear(((SShowCreateDatabaseStmt*)pNode)->pCfg);
25✔
1535
      break;
25✔
1536
    case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
143✔
1537
    case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
1538
      taosMemoryFreeClear(((SShowCreateTableStmt*)pNode)->pDbCfg);
143✔
1539
      destroyTableCfg((STableCfg*)(((SShowCreateTableStmt*)pNode)->pTableCfg));
143✔
1540
      break;
143✔
1541
    case QUERY_NODE_SHOW_CREATE_VIEW_STMT:        // no pointer field
25✔
1542
    case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:  // no pointer field
1543
    case QUERY_NODE_KILL_CONNECTION_STMT:         // no pointer field
1544
    case QUERY_NODE_KILL_QUERY_STMT:              // no pointer field
1545
    case QUERY_NODE_KILL_TRANSACTION_STMT:        // no pointer field
1546
    case QUERY_NODE_KILL_COMPACT_STMT:            // no pointer field
1547
      break;
25✔
1548
    case QUERY_NODE_DELETE_STMT: {
56,487✔
1549
      SDeleteStmt* pStmt = (SDeleteStmt*)pNode;
56,487✔
1550
      nodesDestroyNode(pStmt->pFromTable);
56,487✔
1551
      nodesDestroyNode(pStmt->pWhere);
56,487✔
1552
      nodesDestroyNode(pStmt->pCountFunc);
56,487✔
1553
      nodesDestroyNode(pStmt->pFirstFunc);
56,487✔
1554
      nodesDestroyNode(pStmt->pLastFunc);
56,487✔
1555
      nodesDestroyNode(pStmt->pTagCond);
56,487✔
1556
      break;
56,487✔
1557
    }
1558
    case QUERY_NODE_INSERT_STMT: {
195✔
1559
      SInsertStmt* pStmt = (SInsertStmt*)pNode;
195✔
1560
      nodesDestroyNode(pStmt->pTable);
195✔
1561
      nodesDestroyList(pStmt->pCols);
195✔
1562
      nodesDestroyNode(pStmt->pQuery);
195✔
1563
      break;
195✔
1564
    }
1565
    case QUERY_NODE_QUERY: {
10,869,044✔
1566
      SQuery* pQuery = (SQuery*)pNode;
10,869,044✔
1567
      nodesDestroyNode(pQuery->pPrevRoot);
10,869,044✔
1568
      nodesDestroyNode(pQuery->pRoot);
10,869,131✔
1569
      nodesDestroyNode(pQuery->pPostRoot);
10,864,399✔
1570
      taosMemoryFreeClear(pQuery->pResSchema);
10,863,365✔
1571
      if (NULL != pQuery->pCmdMsg) {
10,863,366✔
1572
        taosMemoryFreeClear(pQuery->pCmdMsg->pMsg);
37,982!
1573
        taosMemoryFreeClear(pQuery->pCmdMsg);
37,982!
1574
      }
1575
      taosArrayDestroy(pQuery->pDbList);
10,863,365✔
1576
      taosArrayDestroy(pQuery->pTableList);
10,862,210✔
1577
      taosArrayDestroy(pQuery->pTargetTableList);
10,861,409✔
1578
      taosArrayDestroy(pQuery->pPlaceholderValues);
10,860,815✔
1579
      nodesDestroyNode(pQuery->pPrepareRoot);
10,860,176✔
1580
      break;
10,859,240✔
1581
    }
1582
    case QUERY_NODE_RESTORE_DNODE_STMT:  // no pointer field
4✔
1583
    case QUERY_NODE_RESTORE_QNODE_STMT:  // no pointer field
1584
    case QUERY_NODE_RESTORE_MNODE_STMT:  // no pointer field
1585
    case QUERY_NODE_RESTORE_VNODE_STMT:  // no pointer field
1586
      break;
4✔
1587
    case QUERY_NODE_CREATE_VIEW_STMT: {
226✔
1588
      SCreateViewStmt* pStmt = (SCreateViewStmt*)pNode;
226✔
1589
      taosMemoryFree(pStmt->pQuerySql);
226✔
1590
      tFreeSCMCreateViewReq(&pStmt->createReq);
226✔
1591
      nodesDestroyNode(pStmt->pQuery);
226✔
1592
      break;
226✔
1593
    }
1594
    case QUERY_NODE_DROP_VIEW_STMT:
143✔
1595
      break;
143✔
1596
    case QUERY_NODE_CREATE_TSMA_STMT: {
361✔
1597
      SCreateTSMAStmt* pStmt = (SCreateTSMAStmt*)pNode;
361✔
1598
      nodesDestroyNode((SNode*)pStmt->pOptions);
361✔
1599
      if (pStmt->pReq) {
361✔
1600
        tFreeSMCreateSmaReq(pStmt->pReq);
141✔
1601
        taosMemoryFreeClear(pStmt->pReq);
141!
1602
      }
1603
      break;
361✔
1604
    }
1605
    case QUERY_NODE_LOGIC_PLAN_SCAN: {
3,112,573✔
1606
      SScanLogicNode* pLogicNode = (SScanLogicNode*)pNode;
3,112,573✔
1607
      destroyLogicNode((SLogicNode*)pLogicNode);
3,112,573✔
1608
      nodesDestroyList(pLogicNode->pScanCols);
3,112,563✔
1609
      nodesDestroyList(pLogicNode->pScanPseudoCols);
3,112,593✔
1610
      taosMemoryFreeClear(pLogicNode->pVgroupList);
3,112,596✔
1611
      nodesDestroyList(pLogicNode->pDynamicScanFuncs);
3,112,598✔
1612
      nodesDestroyNode(pLogicNode->pTagCond);
3,112,612✔
1613
      nodesDestroyNode(pLogicNode->pTagIndexCond);
3,112,569✔
1614
      taosArrayDestroyEx(pLogicNode->pSmaIndexes, destroySmaIndex);
3,112,571✔
1615
      nodesDestroyList(pLogicNode->pGroupTags);
3,112,583✔
1616
      nodesDestroyList(pLogicNode->pTags);
3,112,599✔
1617
      nodesDestroyNode(pLogicNode->pSubtable);
3,112,598✔
1618
      taosArrayDestroyEx(pLogicNode->pFuncTypes, destroyFuncParam);
3,112,604✔
1619
      taosArrayDestroyP(pLogicNode->pTsmaTargetTbVgInfo, taosMemoryFree);
3,112,598✔
1620
      taosArrayDestroy(pLogicNode->pTsmaTargetTbInfo);
3,112,546✔
1621
      break;
3,112,549✔
1622
    }
1623
    case QUERY_NODE_LOGIC_PLAN_JOIN: {
287,101✔
1624
      SJoinLogicNode* pLogicNode = (SJoinLogicNode*)pNode;
287,101✔
1625
      destroyLogicNode((SLogicNode*)pLogicNode);
287,101✔
1626
      nodesDestroyNode(pLogicNode->pWindowOffset);
287,101✔
1627
      nodesDestroyNode(pLogicNode->pJLimit);
287,101✔
1628
      nodesDestroyNode(pLogicNode->addPrimEqCond);
287,101✔
1629
      nodesDestroyNode(pLogicNode->pPrimKeyEqCond);
287,101✔
1630
      nodesDestroyNode(pLogicNode->pColEqCond);
287,101✔
1631
      nodesDestroyNode(pLogicNode->pColOnCond);
287,101✔
1632
      nodesDestroyNode(pLogicNode->pTagEqCond);
287,101✔
1633
      nodesDestroyNode(pLogicNode->pTagOnCond);
287,101✔
1634
      nodesDestroyNode(pLogicNode->pFullOnCond);
287,101✔
1635
      nodesDestroyList(pLogicNode->pLeftEqNodes);
287,101✔
1636
      nodesDestroyList(pLogicNode->pRightEqNodes);
287,101✔
1637
      nodesDestroyNode(pLogicNode->pLeftOnCond);
287,101✔
1638
      nodesDestroyNode(pLogicNode->pRightOnCond);
287,101✔
1639
      break;
287,101✔
1640
    }
1641
    case QUERY_NODE_LOGIC_PLAN_AGG: {
1,702,789✔
1642
      SAggLogicNode* pLogicNode = (SAggLogicNode*)pNode;
1,702,789✔
1643
      destroyLogicNode((SLogicNode*)pLogicNode);
1,702,789✔
1644
      nodesDestroyList(pLogicNode->pAggFuncs);
1,702,826✔
1645
      nodesDestroyList(pLogicNode->pGroupKeys);
1,702,849✔
1646
      break;
1,702,854✔
1647
    }
1648
    case QUERY_NODE_LOGIC_PLAN_PROJECT: {
2,017,517✔
1649
      SProjectLogicNode* pLogicNode = (SProjectLogicNode*)pNode;
2,017,517✔
1650
      destroyLogicNode((SLogicNode*)pLogicNode);
2,017,517✔
1651
      nodesDestroyList(pLogicNode->pProjections);
2,017,556✔
1652
      break;
2,017,587✔
1653
    }
1654
    case QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY: {
19,411,041✔
1655
      SVnodeModifyLogicNode* pLogicNode = (SVnodeModifyLogicNode*)pNode;
19,411,041✔
1656
      destroyLogicNode((SLogicNode*)pLogicNode);
19,411,041✔
1657
      destroyVgDataBlockArray(pLogicNode->pDataBlocks);
19,379,381✔
1658
      // pVgDataBlocks is weak reference
1659
      nodesDestroyNode(pLogicNode->pAffectedRows);
19,448,100✔
1660
      nodesDestroyNode(pLogicNode->pStartTs);
19,453,914✔
1661
      nodesDestroyNode(pLogicNode->pEndTs);
19,454,445✔
1662
      taosMemoryFreeClear(pLogicNode->pVgroupList);
19,432,472✔
1663
      nodesDestroyList(pLogicNode->pInsertCols);
19,432,472✔
1664
      break;
19,440,371✔
1665
    }
1666
    case QUERY_NODE_LOGIC_PLAN_EXCHANGE:
1,225,238✔
1667
      destroyLogicNode((SLogicNode*)pNode);
1,225,238✔
1668
      break;
1,225,239✔
1669
    case QUERY_NODE_LOGIC_PLAN_MERGE: {
288,198✔
1670
      SMergeLogicNode* pLogicNode = (SMergeLogicNode*)pNode;
288,198✔
1671
      destroyLogicNode((SLogicNode*)pLogicNode);
288,198✔
1672
      nodesDestroyList(pLogicNode->pMergeKeys);
288,198✔
1673
      nodesDestroyList(pLogicNode->pInputs);
288,198✔
1674
      break;
288,198✔
1675
    }
1676
    case QUERY_NODE_LOGIC_PLAN_WINDOW: {
193,492✔
1677
      SWindowLogicNode* pLogicNode = (SWindowLogicNode*)pNode;
193,492✔
1678
      destroyLogicNode((SLogicNode*)pLogicNode);
193,492✔
1679
      nodesDestroyList(pLogicNode->pFuncs);
193,493✔
1680
      nodesDestroyNode(pLogicNode->pTspk);
193,494✔
1681
      nodesDestroyNode(pLogicNode->pTsEnd);
193,494✔
1682
      nodesDestroyNode(pLogicNode->pStateExpr);
193,494✔
1683
      nodesDestroyNode(pLogicNode->pStartCond);
193,494✔
1684
      nodesDestroyNode(pLogicNode->pEndCond);
193,494✔
1685
      break;
193,494✔
1686
    }
1687
    case QUERY_NODE_LOGIC_PLAN_FILL: {
23,194✔
1688
      SFillLogicNode* pLogicNode = (SFillLogicNode*)pNode;
23,194✔
1689
      destroyLogicNode((SLogicNode*)pLogicNode);
23,194✔
1690
      nodesDestroyNode(pLogicNode->pWStartTs);
23,193✔
1691
      nodesDestroyNode(pLogicNode->pValues);
23,193✔
1692
      nodesDestroyList(pLogicNode->pFillExprs);
23,193✔
1693
      nodesDestroyList(pLogicNode->pNotFillExprs);
23,193✔
1694
      nodesDestroyList(pLogicNode->pFillNullExprs);
23,193✔
1695
      break;
23,193✔
1696
    }
1697
    case QUERY_NODE_LOGIC_PLAN_SORT: {
593,269✔
1698
      SSortLogicNode* pLogicNode = (SSortLogicNode*)pNode;
593,269✔
1699
      destroyLogicNode((SLogicNode*)pLogicNode);
593,269✔
1700
      nodesDestroyList(pLogicNode->pSortKeys);
593,269✔
1701
      break;
593,268✔
1702
    }
1703
    case QUERY_NODE_LOGIC_PLAN_PARTITION: {
117,779✔
1704
      SPartitionLogicNode* pLogicNode = (SPartitionLogicNode*)pNode;
117,779✔
1705
      destroyLogicNode((SLogicNode*)pLogicNode);
117,779✔
1706
      nodesDestroyList(pLogicNode->pPartitionKeys);
117,779✔
1707
      nodesDestroyList(pLogicNode->pTags);
117,779✔
1708
      nodesDestroyNode(pLogicNode->pSubtable);
117,779✔
1709
      nodesDestroyList(pLogicNode->pAggFuncs);
117,779✔
1710
      break;
117,779✔
1711
    }
1712
    case QUERY_NODE_LOGIC_PLAN_INDEF_ROWS_FUNC: {
93,546✔
1713
      SIndefRowsFuncLogicNode* pLogicNode = (SIndefRowsFuncLogicNode*)pNode;
93,546✔
1714
      destroyLogicNode((SLogicNode*)pLogicNode);
93,546✔
1715
      nodesDestroyList(pLogicNode->pFuncs);
93,546✔
1716
      break;
93,546✔
1717
    }
1718
    case QUERY_NODE_LOGIC_PLAN_INTERP_FUNC: {
7,440✔
1719
      SInterpFuncLogicNode* pLogicNode = (SInterpFuncLogicNode*)pNode;
7,440✔
1720
      destroyLogicNode((SLogicNode*)pLogicNode);
7,440✔
1721
      nodesDestroyList(pLogicNode->pFuncs);
7,440✔
1722
      nodesDestroyNode(pLogicNode->pFillValues);
7,440✔
1723
      nodesDestroyNode(pLogicNode->pTimeSeries);
7,440✔
1724
      break;
7,440✔
1725
    }
1726
    case QUERY_NODE_LOGIC_PLAN_FORECAST_FUNC: {
×
1727
      SForecastFuncLogicNode* pLogicNode = (SForecastFuncLogicNode*)pNode;
×
1728
      destroyLogicNode((SLogicNode*)pLogicNode);
×
1729
      nodesDestroyList(pLogicNode->pFuncs);
×
1730
      break;
×
1731
    }
1732
    case QUERY_NODE_LOGIC_PLAN_GROUP_CACHE: {
37,806✔
1733
      SGroupCacheLogicNode* pLogicNode = (SGroupCacheLogicNode*)pNode;
37,806✔
1734
      destroyLogicNode((SLogicNode*)pLogicNode);
37,806✔
1735
      nodesDestroyList(pLogicNode->pGroupCols);
37,806✔
1736
      break;
37,806✔
1737
    }
1738
    case QUERY_NODE_LOGIC_PLAN_DYN_QUERY_CTRL: {
37,806✔
1739
      SDynQueryCtrlLogicNode* pLogicNode = (SDynQueryCtrlLogicNode*)pNode;
37,806✔
1740
      destroyLogicNode((SLogicNode*)pLogicNode);
37,806✔
1741
      break;
37,806✔
1742
    }
1743
    case QUERY_NODE_LOGIC_SUBPLAN: {
23,451,488✔
1744
      SLogicSubplan* pSubplan = (SLogicSubplan*)pNode;
23,451,488✔
1745
      nodesDestroyList(pSubplan->pChildren);
23,451,488✔
1746
      nodesDestroyNode((SNode*)pSubplan->pNode);
23,450,753✔
1747
      nodesClearList(pSubplan->pParents);
23,511,887✔
1748
      taosMemoryFreeClear(pSubplan->pVgroupList);
23,517,065✔
1749
      break;
23,517,069✔
1750
    }
1751
    case QUERY_NODE_LOGIC_PLAN:
10,549,816✔
1752
      nodesDestroyList(((SQueryLogicPlan*)pNode)->pTopSubplans);
10,549,816✔
1753
      break;
10,578,701✔
1754
    case QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN:
1,013,904✔
1755
    case QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN:
1756
    case QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN:
1757
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
1,013,904✔
1758
      break;
1,015,011✔
1759
    case QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN:
328,665✔
1760
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN: {
1761
      SLastRowScanPhysiNode* pPhyNode = (SLastRowScanPhysiNode*)pNode;
328,665✔
1762
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
328,665✔
1763
      nodesDestroyList(pPhyNode->pGroupTags);
329,143✔
1764
      nodesDestroyList(pPhyNode->pTargets);
329,069✔
1765
      taosArrayDestroy(pPhyNode->pFuncTypes);
328,843✔
1766
      break;
328,711✔
1767
    }
1768
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN:
6,676,057✔
1769
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN:
1770
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN:
1771
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN: {
1772
      STableScanPhysiNode* pPhyNode = (STableScanPhysiNode*)pNode;
6,676,057✔
1773
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
6,676,057✔
1774
      nodesDestroyList(pPhyNode->pDynamicScanFuncs);
6,676,462✔
1775
      nodesDestroyList(pPhyNode->pGroupTags);
6,676,407✔
1776
      nodesDestroyList(pPhyNode->pTags);
6,676,286✔
1777
      nodesDestroyNode(pPhyNode->pSubtable);
6,676,194✔
1778
      break;
6,676,189✔
1779
    }
1780
    case QUERY_NODE_PHYSICAL_PLAN_PROJECT: {
2,571,579✔
1781
      SProjectPhysiNode* pPhyNode = (SProjectPhysiNode*)pNode;
2,571,579✔
1782
      destroyPhysiNode((SPhysiNode*)pPhyNode);
2,571,579✔
1783
      nodesDestroyList(pPhyNode->pProjections);
2,571,672✔
1784
      break;
2,571,711✔
1785
    }
1786
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN: {
204,527✔
1787
      SSortMergeJoinPhysiNode* pPhyNode = (SSortMergeJoinPhysiNode*)pNode;
204,527✔
1788
      destroyPhysiNode((SPhysiNode*)pPhyNode);
204,527✔
1789
      nodesDestroyNode(pPhyNode->pWindowOffset);
204,527✔
1790
      nodesDestroyNode(pPhyNode->pJLimit);
204,527✔
1791
      nodesDestroyNode(pPhyNode->leftPrimExpr);
204,526✔
1792
      nodesDestroyNode(pPhyNode->rightPrimExpr);
204,526✔
1793
      nodesDestroyList(pPhyNode->pEqLeft);
204,526✔
1794
      nodesDestroyList(pPhyNode->pEqRight);
204,526✔
1795
      nodesDestroyNode(pPhyNode->pPrimKeyCond);
204,526✔
1796
      nodesDestroyNode(pPhyNode->pFullOnCond);
204,525✔
1797
      nodesDestroyList(pPhyNode->pTargets);
204,525✔
1798
      nodesDestroyNode(pPhyNode->pColEqCond);
204,526✔
1799
      nodesDestroyNode(pPhyNode->pColOnCond);
204,526✔
1800
      break;
204,525✔
1801
    }
1802
    case QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN: {
28,052✔
1803
      SHashJoinPhysiNode* pPhyNode = (SHashJoinPhysiNode*)pNode;
28,052✔
1804
      destroyPhysiNode((SPhysiNode*)pPhyNode);
28,052✔
1805
      nodesDestroyNode(pPhyNode->pWindowOffset);
28,052✔
1806
      nodesDestroyNode(pPhyNode->pJLimit);
28,052✔
1807
      nodesDestroyList(pPhyNode->pOnLeft);
28,052✔
1808
      nodesDestroyList(pPhyNode->pOnRight);
28,052✔
1809
      nodesDestroyNode(pPhyNode->leftPrimExpr);
28,052✔
1810
      nodesDestroyNode(pPhyNode->rightPrimExpr);
28,052✔
1811
      nodesDestroyNode(pPhyNode->pLeftOnCond);
28,052✔
1812
      nodesDestroyNode(pPhyNode->pRightOnCond);
28,052✔
1813
      nodesDestroyNode(pPhyNode->pFullOnCond);
28,052✔
1814
      nodesDestroyList(pPhyNode->pTargets);
28,052✔
1815

1816
      nodesDestroyNode(pPhyNode->pPrimKeyCond);
28,052✔
1817
      nodesDestroyNode(pPhyNode->pColEqCond);
28,052✔
1818
      nodesDestroyNode(pPhyNode->pTagEqCond);
28,052✔
1819

1820
      break;
28,052✔
1821
    }
1822
    case QUERY_NODE_PHYSICAL_PLAN_HASH_AGG: {
3,044,152✔
1823
      SAggPhysiNode* pPhyNode = (SAggPhysiNode*)pNode;
3,044,152✔
1824
      destroyPhysiNode((SPhysiNode*)pPhyNode);
3,044,152✔
1825
      nodesDestroyList(pPhyNode->pExprs);
3,044,791✔
1826
      nodesDestroyList(pPhyNode->pAggFuncs);
3,044,480✔
1827
      nodesDestroyList(pPhyNode->pGroupKeys);
3,045,477✔
1828
      break;
3,045,446✔
1829
    }
1830
    case QUERY_NODE_PHYSICAL_PLAN_EXCHANGE: {
4,610,896✔
1831
      SExchangePhysiNode* pPhyNode = (SExchangePhysiNode*)pNode;
4,610,896✔
1832
      destroyPhysiNode((SPhysiNode*)pPhyNode);
4,610,896✔
1833
      nodesDestroyList(pPhyNode->pSrcEndPoints);
4,610,954✔
1834
      break;
4,611,003✔
1835
    }
1836
    case QUERY_NODE_PHYSICAL_PLAN_MERGE: {
1,490,713✔
1837
      SMergePhysiNode* pPhyNode = (SMergePhysiNode*)pNode;
1,490,713✔
1838
      destroyPhysiNode((SPhysiNode*)pPhyNode);
1,490,713✔
1839
      nodesDestroyList(pPhyNode->pMergeKeys);
1,490,722✔
1840
      nodesDestroyList(pPhyNode->pTargets);
1,490,725✔
1841
      break;
1,490,722✔
1842
    }
1843
    case QUERY_NODE_PHYSICAL_PLAN_SORT:
1,120,152✔
1844
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT: {
1845
      SSortPhysiNode* pPhyNode = (SSortPhysiNode*)pNode;
1,120,152✔
1846
      destroyPhysiNode((SPhysiNode*)pPhyNode);
1,120,152✔
1847
      nodesDestroyList(pPhyNode->pExprs);
1,120,172✔
1848
      nodesDestroyList(pPhyNode->pSortKeys);
1,120,172✔
1849
      nodesDestroyList(pPhyNode->pTargets);
1,120,176✔
1850
      break;
1,120,177✔
1851
    }
1852
    case QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL:
2,121,649✔
1853
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL:
1854
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL:
1855
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL:
1856
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL:
1857
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL:
1858
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL:
1859
      destroyWinodwPhysiNode((SWindowPhysiNode*)pNode);
2,121,649✔
1860
      break;
2,121,857✔
1861
    case QUERY_NODE_PHYSICAL_PLAN_FILL:
507,620✔
1862
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FILL: {
1863
      SFillPhysiNode* pPhyNode = (SFillPhysiNode*)pNode;
507,620✔
1864
      destroyPhysiNode((SPhysiNode*)pPhyNode);
507,620✔
1865
      nodesDestroyList(pPhyNode->pFillExprs);
507,627✔
1866
      nodesDestroyList(pPhyNode->pNotFillExprs);
507,630✔
1867
      nodesDestroyNode(pPhyNode->pWStartTs);
507,628✔
1868
      nodesDestroyNode(pPhyNode->pValues);
507,631✔
1869
      nodesDestroyList(pPhyNode->pFillNullExprs);
507,628✔
1870
      break;
507,629✔
1871
    }
1872
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION:
105,634✔
1873
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION:
1874
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION:
1875
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION:
1876
      destroyWinodwPhysiNode((SWindowPhysiNode*)pNode);
105,634✔
1877
      break;
105,634✔
1878
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE:
78,803✔
1879
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE: {
1880
      SStateWinodwPhysiNode* pPhyNode = (SStateWinodwPhysiNode*)pNode;
78,803✔
1881
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
78,803✔
1882
      nodesDestroyNode(pPhyNode->pStateKey);
78,803✔
1883
      break;
78,803✔
1884
    }
1885
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_EVENT:
281,767✔
1886
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT: {
1887
      SEventWinodwPhysiNode* pPhyNode = (SEventWinodwPhysiNode*)pNode;
281,767✔
1888
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
281,767✔
1889
      nodesDestroyNode(pPhyNode->pStartCond);
281,764✔
1890
      nodesDestroyNode(pPhyNode->pEndCond);
281,768✔
1891
      break;
281,768✔
1892
    }
1893
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_COUNT:
7,916✔
1894
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_COUNT: {
1895
      SCountWinodwPhysiNode* pPhyNode = (SCountWinodwPhysiNode*)pNode;
7,916✔
1896
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
7,916✔
1897
      break;
7,916✔
1898
    }
1899
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ANOMALY: {
×
1900
      SAnomalyWindowPhysiNode* pPhyNode = (SAnomalyWindowPhysiNode*)pNode;
×
1901
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
×
1902
      break;
×
1903
    }
1904
    case QUERY_NODE_PHYSICAL_PLAN_PARTITION: {
45,990✔
1905
      destroyPartitionPhysiNode((SPartitionPhysiNode*)pNode);
45,990✔
1906
      break;
45,991✔
1907
    }
1908
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION: {
1,760✔
1909
      SStreamPartitionPhysiNode* pPhyNode = (SStreamPartitionPhysiNode*)pNode;
1,760✔
1910
      destroyPartitionPhysiNode((SPartitionPhysiNode*)pPhyNode);
1,760✔
1911
      nodesDestroyList(pPhyNode->pTags);
1,760✔
1912
      nodesDestroyNode(pPhyNode->pSubtable);
1,760✔
1913
      break;
1,760✔
1914
    }
1915
    case QUERY_NODE_PHYSICAL_PLAN_INDEF_ROWS_FUNC: {
156,658✔
1916
      SIndefRowsFuncPhysiNode* pPhyNode = (SIndefRowsFuncPhysiNode*)pNode;
156,658✔
1917
      destroyPhysiNode((SPhysiNode*)pPhyNode);
156,658✔
1918
      nodesDestroyList(pPhyNode->pExprs);
156,658✔
1919
      nodesDestroyList(pPhyNode->pFuncs);
156,658✔
1920
      break;
156,658✔
1921
    }
1922
    case QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC:
70,086✔
1923
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERP_FUNC: {
1924
      SInterpFuncPhysiNode* pPhyNode = (SInterpFuncPhysiNode*)pNode;
70,086✔
1925
      destroyPhysiNode((SPhysiNode*)pPhyNode);
70,086✔
1926
      nodesDestroyList(pPhyNode->pExprs);
70,087✔
1927
      nodesDestroyList(pPhyNode->pFuncs);
70,086✔
1928
      nodesDestroyNode(pPhyNode->pFillValues);
70,087✔
1929
      nodesDestroyNode(pPhyNode->pTimeSeries);
70,087✔
1930
      break;
70,085✔
1931
    }
1932
    case QUERY_NODE_PHYSICAL_PLAN_FORECAST_FUNC: {
×
1933
      SForecastFuncPhysiNode* pPhyNode = (SForecastFuncPhysiNode*)pNode;
×
1934
      destroyPhysiNode((SPhysiNode*)pPhyNode);
×
1935
      nodesDestroyList(pPhyNode->pExprs);
×
1936
      nodesDestroyList(pPhyNode->pFuncs);
×
1937
      break;
×
1938
    }
1939
    case QUERY_NODE_PHYSICAL_PLAN_DISPATCH:
10,599,909✔
1940
      destroyDataSinkNode((SDataSinkNode*)pNode);
10,599,909✔
1941
      break;
10,600,600✔
1942
    case QUERY_NODE_PHYSICAL_PLAN_INSERT: {
9,734,468✔
1943
      SDataInserterNode* pSink = (SDataInserterNode*)pNode;
9,734,468✔
1944
      destroyDataSinkNode((SDataSinkNode*)pSink);
9,734,468✔
1945
      taosMemoryFreeClear(pSink->pData);
9,731,323!
1946
      break;
9,731,742✔
1947
    }
1948
    case QUERY_NODE_PHYSICAL_PLAN_QUERY_INSERT: {
341✔
1949
      SQueryInserterNode* pSink = (SQueryInserterNode*)pNode;
341✔
1950
      destroyDataSinkNode((SDataSinkNode*)pSink);
341✔
1951
      nodesDestroyList(pSink->pCols);
341✔
1952
      break;
341✔
1953
    }
1954
    case QUERY_NODE_PHYSICAL_PLAN_DELETE: {
115,992✔
1955
      SDataDeleterNode* pSink = (SDataDeleterNode*)pNode;
115,992✔
1956
      destroyDataSinkNode((SDataSinkNode*)pSink);
115,992✔
1957
      nodesDestroyNode(pSink->pAffectedRows);
115,994✔
1958
      nodesDestroyNode(pSink->pStartTs);
115,994✔
1959
      nodesDestroyNode(pSink->pEndTs);
115,993✔
1960
      break;
115,993✔
1961
    }
1962
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE: {
28,052✔
1963
      SGroupCachePhysiNode* pPhyNode = (SGroupCachePhysiNode*)pNode;
28,052✔
1964
      destroyPhysiNode((SPhysiNode*)pPhyNode);
28,052✔
1965
      nodesDestroyList(pPhyNode->pGroupCols);
28,052✔
1966
      break;
28,052✔
1967
    }
1968
    case QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL: {
28,052✔
1969
      SDynQueryCtrlPhysiNode* pPhyNode = (SDynQueryCtrlPhysiNode*)pNode;
28,052✔
1970
      destroyPhysiNode((SPhysiNode*)pPhyNode);
28,052✔
1971
      break;
28,052✔
1972
    }
1973
    case QUERY_NODE_PHYSICAL_SUBPLAN: {
20,471,854✔
1974
      SSubplan* pSubplan = (SSubplan*)pNode;
20,471,854✔
1975
      nodesClearList(pSubplan->pChildren);
20,471,854✔
1976
      nodesDestroyNode((SNode*)pSubplan->pNode);
20,469,734✔
1977
      nodesDestroyNode((SNode*)pSubplan->pDataSink);
20,470,152✔
1978
      nodesDestroyNode((SNode*)pSubplan->pTagCond);
20,482,737✔
1979
      nodesDestroyNode((SNode*)pSubplan->pTagIndexCond);
20,480,620✔
1980
      nodesClearList(pSubplan->pParents);
20,477,709✔
1981
      break;
20,476,662✔
1982
    }
1983
    case QUERY_NODE_PHYSICAL_PLAN:
10,586,385✔
1984
      nodesDestroyList(((SQueryPlan*)pNode)->pSubplans);
10,586,385✔
1985
      break;
10,599,058✔
1986
    default:
207✔
1987
      break;
207✔
1988
  }
1989
  nodesFree(pNode);
1,038,804,156✔
1990
  return;
1,037,232,334✔
1991
}
1992

1993
int32_t nodesMakeList(SNodeList** ppListOut) {
212,758,366✔
1994
  SNodeList* p = NULL;
212,758,366✔
1995
  int32_t    code = nodesCalloc(1, sizeof(SNodeList), (void**)&p);
212,758,366✔
1996
  if (TSDB_CODE_SUCCESS == code) {
213,048,147!
1997
    *ppListOut = p;
213,055,567✔
1998
  }
1999
  return code;
213,048,147✔
2000
}
2001

2002
int32_t nodesListAppend(SNodeList* pList, SNode* pNode) {
704,046,039✔
2003
  if (NULL == pList || NULL == pNode) {
704,046,039!
2004
    return TSDB_CODE_FAILED;
×
2005
  }
2006
  SListCell* p = NULL;
704,447,877✔
2007
  int32_t    code = nodesCalloc(1, sizeof(SListCell), (void**)&p);
704,447,877✔
2008
  if (TSDB_CODE_SUCCESS != code) {
716,629,484!
2009
    return code;
×
2010
  }
2011
  p->pNode = pNode;
716,629,484✔
2012
  if (NULL == pList->pHead) {
716,629,484✔
2013
    pList->pHead = p;
205,369,639✔
2014
  }
2015
  if (NULL != pList->pTail) {
716,629,484✔
2016
    pList->pTail->pNext = p;
511,669,165✔
2017
  }
2018
  p->pPrev = pList->pTail;
716,629,484✔
2019
  pList->pTail = p;
716,629,484✔
2020
  ++(pList->length);
716,629,484✔
2021
  return TSDB_CODE_SUCCESS;
716,629,484✔
2022
}
2023

2024
int32_t nodesListStrictAppend(SNodeList* pList, SNode* pNode) {
239,681,527✔
2025
  if (NULL == pNode) {
239,681,527!
2026
    return TSDB_CODE_INVALID_PARA;
×
2027
  }
2028
  int32_t code = nodesListAppend(pList, pNode);
239,681,527✔
2029
  if (TSDB_CODE_SUCCESS != code) {
239,647,825!
2030
    nodesDestroyNode(pNode);
×
2031
  }
2032
  return code;
239,635,176✔
2033
}
2034

2035
int32_t nodesListMakeAppend(SNodeList** pList, SNode* pNode) {
10,413,582✔
2036
  if (NULL == *pList) {
10,413,582✔
2037
    int32_t code = nodesMakeList(pList);
6,973,175✔
2038
    if (NULL == *pList) {
6,973,190!
2039
      return code;
×
2040
    }
2041
  }
2042
  return nodesListAppend(*pList, pNode);
10,413,597✔
2043
}
2044

2045
int32_t nodesListMakeStrictAppend(SNodeList** pList, SNode* pNode) {
173,332,096✔
2046
  if (NULL == *pList) {
173,332,096✔
2047
    int32_t code = nodesMakeList(pList);
50,234,477✔
2048
    if (NULL == *pList) {
50,235,220!
2049
      return code;
×
2050
    }
2051
  }
2052
  return nodesListStrictAppend(*pList, pNode);
173,332,839✔
2053
}
2054

2055
int32_t nodesListAppendList(SNodeList* pTarget, SNodeList* pSrc) {
249,678✔
2056
  if (NULL == pTarget || NULL == pSrc) {
249,678!
2057
    return TSDB_CODE_FAILED;
×
2058
  }
2059

2060
  if (NULL == pTarget->pHead) {
249,678✔
2061
    pTarget->pHead = pSrc->pHead;
220,806✔
2062
  } else {
2063
    pTarget->pTail->pNext = pSrc->pHead;
28,872✔
2064
    if (NULL != pSrc->pHead) {
28,872!
2065
      pSrc->pHead->pPrev = pTarget->pTail;
28,872✔
2066
    }
2067
  }
2068
  pTarget->pTail = pSrc->pTail;
249,678✔
2069
  pTarget->length += pSrc->length;
249,678✔
2070
  nodesFree(pSrc);
249,678✔
2071

2072
  return TSDB_CODE_SUCCESS;
249,678✔
2073
}
2074

2075
int32_t nodesListStrictAppendList(SNodeList* pTarget, SNodeList* pSrc) {
24,503✔
2076
  if (NULL == pSrc) {
24,503!
2077
    return TSDB_CODE_OUT_OF_MEMORY;
×
2078
  }
2079
  int32_t code = nodesListAppendList(pTarget, pSrc);
24,503✔
2080
  if (TSDB_CODE_SUCCESS != code) {
24,503!
2081
    nodesDestroyList(pSrc);
×
2082
  }
2083
  return code;
24,503✔
2084
}
2085

2086
int32_t nodesListMakeStrictAppendList(SNodeList** pTarget, SNodeList* pSrc) {
5,600✔
2087
  if (NULL == *pTarget) {
5,600✔
2088
    int32_t code = nodesMakeList(pTarget);
5,254✔
2089
    if (NULL == *pTarget) {
5,254!
2090
      return code;
×
2091
    }
2092
  }
2093
  return nodesListStrictAppendList(*pTarget, pSrc);
5,600✔
2094
}
2095

2096
int32_t nodesListMakePushFront(SNodeList** pList, SNode* pNode) {
12,937✔
2097
  if (*pList == NULL) {
12,937✔
2098
    int32_t code = nodesMakeList(pList);
10,928✔
2099
    if (*pList == NULL) {
10,928!
2100
      return code;
×
2101
    }
2102
  }
2103
  return nodesListPushFront(*pList, pNode);
12,937✔
2104
}
2105

2106
int32_t nodesListPushFront(SNodeList* pList, SNode* pNode) {
63,615✔
2107
  if (NULL == pList || NULL == pNode) {
63,615!
2108
    return TSDB_CODE_FAILED;
×
2109
  }
2110
  SListCell* p = NULL;
63,615✔
2111
  int32_t    code = nodesCalloc(1, sizeof(SListCell), (void**)&p);
63,615✔
2112
  if (TSDB_CODE_SUCCESS != code) {
63,615!
2113
    return code;
×
2114
  }
2115
  p->pNode = pNode;
63,615✔
2116
  if (NULL != pList->pHead) {
63,615✔
2117
    pList->pHead->pPrev = p;
2,398✔
2118
    p->pNext = pList->pHead;
2,398✔
2119
  }
2120
  pList->pHead = p;
63,615✔
2121
  pList->pTail = pList->pTail ? pList->pTail : p;
63,615✔
2122
  ++(pList->length);
63,615✔
2123
  return TSDB_CODE_SUCCESS;
63,615✔
2124
}
2125

2126
SListCell* nodesListErase(SNodeList* pList, SListCell* pCell) {
697,257,040✔
2127
  if (NULL == pCell->pPrev) {
697,257,040✔
2128
    pList->pHead = pCell->pNext;
695,892,042✔
2129
  } else {
2130
    pCell->pPrev->pNext = pCell->pNext;
1,364,998✔
2131
  }
2132
  if (NULL == pCell->pNext) {
697,257,040✔
2133
    pList->pTail = pCell->pPrev;
188,582,891✔
2134
  } else {
2135
    pCell->pNext->pPrev = pCell->pPrev;
508,674,149✔
2136
  }
2137
  SListCell* pNext = pCell->pNext;
697,257,040✔
2138
  nodesDestroyNode(pCell->pNode);
697,257,040✔
2139
  nodesFree(pCell);
698,887,720✔
2140
  --(pList->length);
698,646,382✔
2141
  return pNext;
698,646,382✔
2142
}
2143

2144
void nodesListInsertList(SNodeList* pTarget, SListCell* pPos, SNodeList* pSrc) {
187,409✔
2145
  if (NULL == pTarget || NULL == pPos || NULL == pSrc || NULL == pSrc->pHead) {
187,409!
2146
    return;
43✔
2147
  }
2148

2149
  if (NULL == pPos->pPrev) {
187,366✔
2150
    pTarget->pHead = pSrc->pHead;
185,881✔
2151
  } else {
2152
    pPos->pPrev->pNext = pSrc->pHead;
1,485✔
2153
  }
2154
  pSrc->pHead->pPrev = pPos->pPrev;
187,366✔
2155
  pSrc->pTail->pNext = pPos;
187,366✔
2156
  pPos->pPrev = pSrc->pTail;
187,366✔
2157

2158
  pTarget->length += pSrc->length;
187,366✔
2159
  nodesFree(pSrc);
187,366✔
2160
}
2161

2162
void nodesListInsertListAfterPos(SNodeList* pTarget, SListCell* pPos, SNodeList* pSrc) {
8✔
2163
  if (NULL == pTarget || NULL == pPos || NULL == pSrc || NULL == pSrc->pHead) {
8!
2164
    return;
×
2165
  }
2166

2167
  if (NULL == pPos->pNext) {
8!
2168
    pTarget->pTail = pSrc->pHead;
8✔
2169
  } else {
2170
    pPos->pNext->pPrev = pSrc->pHead;
×
2171
  }
2172

2173
  pSrc->pHead->pPrev = pPos;
8✔
2174
  pSrc->pTail->pNext = pPos->pNext;
8✔
2175

2176
  pPos->pNext = pSrc->pHead;
8✔
2177

2178
  pTarget->length += pSrc->length;
8✔
2179
  nodesFree(pSrc);
8✔
2180
}
2181

2182
SNode* nodesListGetNode(SNodeList* pList, int32_t index) {
401,693,351✔
2183
  SNode* node;
2184
  FOREACH(node, pList) {
2,147,483,647!
2185
    if (0 == index--) {
2,147,483,647✔
2186
      return node;
402,122,656✔
2187
    }
2188
  }
UNCOV
2189
  return NULL;
×
2190
}
2191

2192
SListCell* nodesListGetCell(SNodeList* pList, int32_t index) {
254,345✔
2193
  SNode* node;
2194
  FOREACH(node, pList) {
8,941,856!
2195
    if (0 == index--) {
8,941,856✔
2196
      return cell;
254,345✔
2197
    }
2198
  }
2199
  return NULL;
×
2200
}
2201

2202
void nodesDestroyList(SNodeList* pList) {
389,748,059✔
2203
  if (NULL == pList) {
389,748,059✔
2204
    return;
196,689,129✔
2205
  }
2206

2207
  SListCell* pNext = pList->pHead;
193,058,930✔
2208
  while (NULL != pNext) {
889,506,342✔
2209
    pNext = nodesListErase(pList, pNext);
695,605,039✔
2210
  }
2211
  nodesFree(pList);
193,901,303✔
2212
}
2213

2214
void nodesClearList(SNodeList* pList) {
79,715,274✔
2215
  if (NULL == pList) {
79,715,274✔
2216
    return;
61,211,757✔
2217
  }
2218

2219
  SListCell* pNext = pList->pHead;
18,503,517✔
2220
  while (NULL != pNext) {
37,148,585✔
2221
    SListCell* tmp = pNext;
18,516,858✔
2222
    pNext = pNext->pNext;
18,516,858✔
2223
    nodesFree(tmp);
18,516,858✔
2224
  }
2225
  nodesFree(pList);
18,631,727✔
2226
}
2227

2228
void* nodesGetValueFromNode(SValueNode* pNode) {
359,465,841✔
2229
  switch (pNode->node.resType.type) {
359,465,841!
2230
    case TSDB_DATA_TYPE_BOOL:
354,937,966✔
2231
    case TSDB_DATA_TYPE_TINYINT:
2232
    case TSDB_DATA_TYPE_SMALLINT:
2233
    case TSDB_DATA_TYPE_INT:
2234
    case TSDB_DATA_TYPE_BIGINT:
2235
    case TSDB_DATA_TYPE_TIMESTAMP:
2236
    case TSDB_DATA_TYPE_UTINYINT:
2237
    case TSDB_DATA_TYPE_USMALLINT:
2238
    case TSDB_DATA_TYPE_UINT:
2239
    case TSDB_DATA_TYPE_UBIGINT:
2240
    case TSDB_DATA_TYPE_FLOAT:
2241
    case TSDB_DATA_TYPE_DOUBLE:
2242
      return (void*)&pNode->typeData;
354,937,966✔
2243
    case TSDB_DATA_TYPE_NCHAR:
4,559,192✔
2244
    case TSDB_DATA_TYPE_VARCHAR:
2245
    case TSDB_DATA_TYPE_VARBINARY:
2246
    case TSDB_DATA_TYPE_JSON:
2247
    case TSDB_DATA_TYPE_GEOMETRY:
2248
      return (void*)pNode->datum.p;
4,559,192✔
2249
    default:
×
2250
      break;
×
2251
  }
2252

2253
  return NULL;
×
2254
}
2255

2256
int32_t nodesSetValueNodeValue(SValueNode* pNode, void* value) {
343,518✔
2257
  switch (pNode->node.resType.type) {
343,518!
2258
    case TSDB_DATA_TYPE_NULL:
×
2259
      break;
×
2260
    case TSDB_DATA_TYPE_BOOL:
46,479✔
2261
      pNode->datum.b = *(bool*)value;
46,479✔
2262
      *(bool*)&pNode->typeData = pNode->datum.b;
46,479✔
2263
      break;
46,479✔
2264
    case TSDB_DATA_TYPE_TINYINT:
5,776✔
2265
      pNode->datum.i = *(int8_t*)value;
5,776✔
2266
      *(int8_t*)&pNode->typeData = pNode->datum.i;
5,776✔
2267
      break;
5,776✔
2268
    case TSDB_DATA_TYPE_SMALLINT:
5,663✔
2269
      pNode->datum.i = *(int16_t*)value;
5,663✔
2270
      *(int16_t*)&pNode->typeData = pNode->datum.i;
5,663✔
2271
      break;
5,663✔
2272
    case TSDB_DATA_TYPE_INT:
10,993✔
2273
      pNode->datum.i = *(int32_t*)value;
10,993✔
2274
      *(int32_t*)&pNode->typeData = pNode->datum.i;
10,993✔
2275
      break;
10,993✔
2276
    case TSDB_DATA_TYPE_BIGINT:
45,667✔
2277
      pNode->datum.i = *(int64_t*)value;
45,667✔
2278
      *(int64_t*)&pNode->typeData = pNode->datum.i;
45,667✔
2279
      break;
45,667✔
2280
    case TSDB_DATA_TYPE_TIMESTAMP:
181,691✔
2281
      pNode->datum.i = *(int64_t*)value;
181,691✔
2282
      *(int64_t*)&pNode->typeData = pNode->datum.i;
181,691✔
2283
      break;
181,691✔
2284
    case TSDB_DATA_TYPE_UTINYINT:
5,465✔
2285
      pNode->datum.u = *(int8_t*)value;
5,465✔
2286
      *(int8_t*)&pNode->typeData = pNode->datum.u;
5,465✔
2287
      break;
5,465✔
2288
    case TSDB_DATA_TYPE_USMALLINT:
5,377✔
2289
      pNode->datum.u = *(int16_t*)value;
5,377✔
2290
      *(int16_t*)&pNode->typeData = pNode->datum.u;
5,377✔
2291
      break;
5,377✔
2292
    case TSDB_DATA_TYPE_UINT:
5,481✔
2293
      pNode->datum.u = *(int32_t*)value;
5,481✔
2294
      *(int32_t*)&pNode->typeData = pNode->datum.u;
5,481✔
2295
      break;
5,481✔
2296
    case TSDB_DATA_TYPE_UBIGINT:
5,377✔
2297
      pNode->datum.u = *(uint64_t*)value;
5,377✔
2298
      *(uint64_t*)&pNode->typeData = pNode->datum.u;
5,377✔
2299
      break;
5,377✔
2300
    case TSDB_DATA_TYPE_FLOAT:
5,419✔
2301
      pNode->datum.d = *(float*)value;
5,419✔
2302
      *(float*)&pNode->typeData = pNode->datum.d;
5,419✔
2303
      break;
5,419✔
2304
    case TSDB_DATA_TYPE_DOUBLE:
20,130✔
2305
      pNode->datum.d = *(double*)value;
20,130✔
2306
      *(double*)&pNode->typeData = pNode->datum.d;
20,130✔
2307
      break;
20,130✔
2308
    case TSDB_DATA_TYPE_NCHAR:
×
2309
    case TSDB_DATA_TYPE_VARCHAR:
2310
    case TSDB_DATA_TYPE_VARBINARY:
2311
    case TSDB_DATA_TYPE_DECIMAL:
2312
    case TSDB_DATA_TYPE_JSON:
2313
    case TSDB_DATA_TYPE_BLOB:
2314
    case TSDB_DATA_TYPE_MEDIUMBLOB:
2315
    case TSDB_DATA_TYPE_GEOMETRY:
2316
      pNode->datum.p = (char*)value;
×
2317
      break;
×
2318
    default:
×
2319
      return TSDB_CODE_APP_ERROR;
×
2320
  }
2321

2322
  return TSDB_CODE_SUCCESS;
343,518✔
2323
}
2324

2325
char* nodesGetStrValueFromNode(SValueNode* pNode) {
5,626✔
2326
  switch (pNode->node.resType.type) {
5,626!
2327
    case TSDB_DATA_TYPE_BOOL: {
2✔
2328
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
2✔
2329
      if (NULL == buf) {
2!
2330
        return NULL;
×
2331
      }
2332

2333
      sprintf(buf, "%s", pNode->datum.b ? "true" : "false");
2✔
2334
      return buf;
2✔
2335
    }
2336
    case TSDB_DATA_TYPE_TINYINT:
4,555✔
2337
    case TSDB_DATA_TYPE_SMALLINT:
2338
    case TSDB_DATA_TYPE_INT:
2339
    case TSDB_DATA_TYPE_BIGINT:
2340
    case TSDB_DATA_TYPE_TIMESTAMP: {
2341
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
4,555✔
2342
      if (NULL == buf) {
4,555!
2343
        return NULL;
×
2344
      }
2345

2346
      sprintf(buf, "%" PRId64, pNode->datum.i);
4,555✔
2347
      return buf;
4,555✔
2348
    }
2349
    case TSDB_DATA_TYPE_UTINYINT:
×
2350
    case TSDB_DATA_TYPE_USMALLINT:
2351
    case TSDB_DATA_TYPE_UINT:
2352
    case TSDB_DATA_TYPE_UBIGINT: {
2353
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
×
2354
      if (NULL == buf) {
×
2355
        return NULL;
×
2356
      }
2357

2358
      sprintf(buf, "%" PRIu64, pNode->datum.u);
×
2359
      return buf;
×
2360
    }
2361
    case TSDB_DATA_TYPE_FLOAT:
2✔
2362
    case TSDB_DATA_TYPE_DOUBLE: {
2363
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
2✔
2364
      if (NULL == buf) {
2!
2365
        return NULL;
×
2366
      }
2367

2368
      sprintf(buf, "%e", pNode->datum.d);
2✔
2369
      return buf;
2✔
2370
    }
2371
    case TSDB_DATA_TYPE_NCHAR:
1,067✔
2372
    case TSDB_DATA_TYPE_VARCHAR:
2373
    case TSDB_DATA_TYPE_VARBINARY:
2374
    case TSDB_DATA_TYPE_GEOMETRY: {
2375
      int32_t bufSize = varDataLen(pNode->datum.p) + 2 + 1;
1,067✔
2376
      void*   buf = taosMemoryMalloc(bufSize);
1,067✔
2377
      if (NULL == buf) {
1,067!
2378
        return NULL;
×
2379
      }
2380

2381
      snprintf(buf, bufSize, "'%s'", varDataVal(pNode->datum.p));
1,067✔
2382
      return buf;
1,067✔
2383
    }
2384
    default:
×
2385
      break;
×
2386
  }
2387

2388
  return NULL;
×
2389
}
2390

2391
bool nodesIsExprNode(const SNode* pNode) {
23,777,508✔
2392
  ENodeType type = nodeType(pNode);
23,777,508✔
2393
  return (QUERY_NODE_COLUMN == type || QUERY_NODE_VALUE == type || QUERY_NODE_OPERATOR == type ||
13,303,775✔
2394
          QUERY_NODE_FUNCTION == type || QUERY_NODE_LOGIC_CONDITION == type || QUERY_NODE_CASE_WHEN == type);
37,081,283✔
2395
}
2396

2397
bool nodesIsUnaryOp(const SOperatorNode* pOp) {
×
2398
  switch (pOp->opType) {
×
2399
    case OP_TYPE_MINUS:
×
2400
    case OP_TYPE_IS_NULL:
2401
    case OP_TYPE_IS_NOT_NULL:
2402
    case OP_TYPE_IS_TRUE:
2403
    case OP_TYPE_IS_FALSE:
2404
    case OP_TYPE_IS_UNKNOWN:
2405
    case OP_TYPE_IS_NOT_TRUE:
2406
    case OP_TYPE_IS_NOT_FALSE:
2407
    case OP_TYPE_IS_NOT_UNKNOWN:
2408
      return true;
×
2409
    default:
×
2410
      break;
×
2411
  }
2412
  return false;
×
2413
}
2414

2415
bool nodesIsArithmeticOp(const SOperatorNode* pOp) {
×
2416
  switch (pOp->opType) {
×
2417
    case OP_TYPE_ADD:
×
2418
    case OP_TYPE_SUB:
2419
    case OP_TYPE_MULTI:
2420
    case OP_TYPE_DIV:
2421
    case OP_TYPE_REM:
2422
      return true;
×
2423
    default:
×
2424
      break;
×
2425
  }
2426
  return false;
×
2427
}
2428

2429
bool nodesIsComparisonOp(const SOperatorNode* pOp) {
1,312,209✔
2430
  switch (pOp->opType) {
1,312,209✔
2431
    case OP_TYPE_GREATER_THAN:
1,311,227✔
2432
    case OP_TYPE_GREATER_EQUAL:
2433
    case OP_TYPE_LOWER_THAN:
2434
    case OP_TYPE_LOWER_EQUAL:
2435
    case OP_TYPE_EQUAL:
2436
    case OP_TYPE_NOT_EQUAL:
2437
    case OP_TYPE_IN:
2438
    case OP_TYPE_NOT_IN:
2439
    case OP_TYPE_LIKE:
2440
    case OP_TYPE_NOT_LIKE:
2441
    case OP_TYPE_MATCH:
2442
    case OP_TYPE_NMATCH:
2443
    case OP_TYPE_JSON_CONTAINS:
2444
    case OP_TYPE_IS_NULL:
2445
    case OP_TYPE_IS_NOT_NULL:
2446
    case OP_TYPE_IS_TRUE:
2447
    case OP_TYPE_IS_FALSE:
2448
    case OP_TYPE_IS_UNKNOWN:
2449
    case OP_TYPE_IS_NOT_TRUE:
2450
    case OP_TYPE_IS_NOT_FALSE:
2451
    case OP_TYPE_IS_NOT_UNKNOWN:
2452
      return true;
1,311,227✔
2453
    default:
982✔
2454
      break;
982✔
2455
  }
2456
  return false;
982✔
2457
}
2458

2459
bool nodesIsJsonOp(const SOperatorNode* pOp) {
×
2460
  switch (pOp->opType) {
×
2461
    case OP_TYPE_JSON_GET_VALUE:
×
2462
    case OP_TYPE_JSON_CONTAINS:
2463
      return true;
×
2464
    default:
×
2465
      break;
×
2466
  }
2467
  return false;
×
2468
}
2469

2470
bool nodesIsRegularOp(const SOperatorNode* pOp) {
1,399,033✔
2471
  switch (pOp->opType) {
1,399,033✔
2472
    case OP_TYPE_LIKE:
107,021✔
2473
    case OP_TYPE_NOT_LIKE:
2474
    case OP_TYPE_MATCH:
2475
    case OP_TYPE_NMATCH:
2476
      return true;
107,021✔
2477
    default:
1,292,012✔
2478
      break;
1,292,012✔
2479
  }
2480
  return false;
1,292,012✔
2481
}
2482

2483
bool nodesIsMatchRegularOp(const SOperatorNode* pOp) {
106,916✔
2484
  switch (pOp->opType) {
106,916✔
2485
    case OP_TYPE_MATCH:
49,769✔
2486
    case OP_TYPE_NMATCH:
2487
      return true;
49,769✔
2488
    default:
57,147✔
2489
      break;
57,147✔
2490
  }
2491
  return false;
57,147✔
2492
}
2493

2494
bool nodesIsBitwiseOp(const SOperatorNode* pOp) {
×
2495
  switch (pOp->opType) {
×
2496
    case OP_TYPE_BIT_AND:
×
2497
    case OP_TYPE_BIT_OR:
2498
      return true;
×
2499
    default:
×
2500
      break;
×
2501
  }
2502
  return false;
×
2503
}
2504

2505
typedef struct SCollectColumnsCxt {
2506
  int32_t         errCode;
2507
  const char*     pTableAlias;
2508
  SSHashObj*      pMultiTableAlias;
2509
  ECollectColType collectType;
2510
  SNodeList*      pCols;
2511
  SHashObj*       pColHash;
2512
} SCollectColumnsCxt;
2513

2514
static EDealRes doCollect(SCollectColumnsCxt* pCxt, SColumnNode* pCol, SNode* pNode) {
11,172,666✔
2515
  char    name[TSDB_TABLE_NAME_LEN + TSDB_COL_NAME_LEN];
2516
  int32_t len = 0;
11,172,666✔
2517
  if ('\0' == pCol->tableAlias[0]) {
11,172,666✔
2518
    len = tsnprintf(name, sizeof(name), "%s", pCol->colName);
475,979✔
2519
  } else {
2520
    len = tsnprintf(name, sizeof(name), "%s.%s", pCol->tableAlias, pCol->colName);
10,696,687✔
2521
  }
2522
  if (pCol->projRefIdx > 0) {
11,172,771✔
2523
    len = taosHashBinary(name, strlen(name));
36,677✔
2524
    len += sprintf(name + len, "_%d", pCol->projRefIdx);
36,677✔
2525
  }
2526
  SNode** pNodeFound = taosHashGet(pCxt->pColHash, name, len);
11,172,771✔
2527
  if (pNodeFound == NULL) {
11,172,567✔
2528
    pCxt->errCode = taosHashPut(pCxt->pColHash, name, len, &pNode, POINTER_BYTES);
8,051,875✔
2529
    if (TSDB_CODE_SUCCESS == pCxt->errCode) {
8,052,109✔
2530
      SNode* pNew = NULL;
8,052,105✔
2531
      pCxt->errCode = nodesCloneNode(pNode, &pNew);
8,052,105✔
2532
      if (TSDB_CODE_SUCCESS == pCxt->errCode) {
8,051,801!
2533
        pCxt->errCode = nodesListStrictAppend(pCxt->pCols, pNew);
8,051,805✔
2534
      }
2535
    }
2536
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
8,051,978!
2537
  }
2538
  return DEAL_RES_CONTINUE;
3,120,692✔
2539
}
2540

2541
static bool isCollectType(ECollectColType collectType, EColumnType colType) {
19,819,696✔
2542
  return COLLECT_COL_TYPE_ALL == collectType
2543
             ? true
2544
             : (COLLECT_COL_TYPE_TAG == collectType ? COLUMN_TYPE_TAG == colType
27,329,454✔
2545
                                                    : (COLUMN_TYPE_TAG != colType && COLUMN_TYPE_TBNAME != colType));
7,509,758✔
2546
}
2547

2548
static EDealRes collectColumns(SNode* pNode, void* pContext) {
60,911,200✔
2549
  SCollectColumnsCxt* pCxt = (SCollectColumnsCxt*)pContext;
60,911,200✔
2550
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
60,911,200✔
2551
    SColumnNode* pCol = (SColumnNode*)pNode;
19,377,292✔
2552
    if (isCollectType(pCxt->collectType, pCol->colType) && 0 != strcmp(pCol->colName, "*") &&
19,377,292✔
2553
        (NULL == pCxt->pTableAlias || 0 == strcmp(pCxt->pTableAlias, pCol->tableAlias))) {
11,867,330✔
2554
      return doCollect(pCxt, pCol, pNode);
10,730,140✔
2555
    }
2556
  }
2557
  return DEAL_RES_CONTINUE;
50,181,107✔
2558
}
2559

2560
static EDealRes collectColumnsExt(SNode* pNode, void* pContext) {
847,850✔
2561
  SCollectColumnsCxt* pCxt = (SCollectColumnsCxt*)pContext;
847,850✔
2562
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
847,850✔
2563
    SColumnNode* pCol = (SColumnNode*)pNode;
442,406✔
2564
    if (isCollectType(pCxt->collectType, pCol->colType) && 0 != strcmp(pCol->colName, "*") &&
442,406!
2565
        (NULL == pCxt->pMultiTableAlias ||
442,406!
2566
         NULL != (pCxt->pTableAlias =
442,406✔
2567
                      tSimpleHashGet(pCxt->pMultiTableAlias, pCol->tableAlias, strlen(pCol->tableAlias))))) {
442,406✔
2568
      return doCollect(pCxt, pCol, pNode);
441,002✔
2569
    }
2570
  }
2571
  return DEAL_RES_CONTINUE;
406,848✔
2572
}
2573

2574
int32_t nodesCollectColumns(SSelectStmt* pSelect, ESqlClause clause, const char* pTableAlias, ECollectColType type,
2,473,701✔
2575
                            SNodeList** pCols) {
2576
  if (NULL == pSelect || NULL == pCols) {
2,473,701!
2577
    return TSDB_CODE_FAILED;
×
2578
  }
2579
  SNodeList* pList = NULL;
2,473,731✔
2580
  if (!*pCols) {
2,473,731!
2581
    int32_t code = nodesMakeList(&pList);
2,473,740✔
2582
    if (TSDB_CODE_SUCCESS != code) {
2,473,731!
2583
      return code;
×
2584
    }
2585
  }
2586
  SCollectColumnsCxt cxt = {
7,421,199✔
2587
      .errCode = TSDB_CODE_SUCCESS,
2588
      .pTableAlias = pTableAlias,
2589
      .collectType = type,
2590
      .pCols = (NULL == *pCols ? pList : *pCols),
2,473,722!
2591
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
2,473,722✔
2592
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
2,473,755!
2593
    return TSDB_CODE_OUT_OF_MEMORY;
×
2594
  }
2595
  *pCols = NULL;
2,473,755✔
2596
  nodesWalkSelectStmt(pSelect, clause, collectColumns, &cxt);
2,473,755✔
2597
  taosHashCleanup(cxt.pColHash);
2,473,762✔
2598
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
2,473,767!
2599
    nodesDestroyList(cxt.pCols);
×
2600
    return cxt.errCode;
×
2601
  }
2602
  if (LIST_LENGTH(cxt.pCols) > 0) {
2,473,767!
2603
    *pCols = cxt.pCols;
1,562,824✔
2604
  } else {
2605
    nodesDestroyList(cxt.pCols);
910,943✔
2606
  }
2607

2608
  return TSDB_CODE_SUCCESS;
2,473,747✔
2609
}
2610

2611
int32_t nodesCollectColumnsExt(SSelectStmt* pSelect, ESqlClause clause, SSHashObj* pMultiTableAlias,
115,651✔
2612
                               ECollectColType type, SNodeList** pCols) {
2613
  if (NULL == pSelect || NULL == pCols) {
115,651!
2614
    return TSDB_CODE_FAILED;
×
2615
  }
2616

2617
  SNodeList* pList = NULL;
115,651✔
2618
  if (!*pCols) {
115,651!
2619
    int32_t code = nodesMakeList(&pList);
115,651✔
2620
    if (TSDB_CODE_SUCCESS != code) {
115,651!
2621
      return code;
×
2622
    }
2623
  }
2624

2625
  SCollectColumnsCxt cxt = {
346,953✔
2626
      .errCode = TSDB_CODE_SUCCESS,
2627
      .pTableAlias = NULL,
2628
      .pMultiTableAlias = pMultiTableAlias,
2629
      .collectType = type,
2630
      .pCols = (NULL == *pCols ? pList : *pCols),
115,651!
2631
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
115,651✔
2632
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
115,651!
2633
    return TSDB_CODE_OUT_OF_MEMORY;
×
2634
  }
2635
  *pCols = NULL;
115,651✔
2636
  nodesWalkSelectStmtImpl(pSelect, clause, collectColumnsExt, &cxt);
115,651✔
2637
  taosHashCleanup(cxt.pColHash);
115,651✔
2638
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
115,651!
2639
    nodesDestroyList(cxt.pCols);
×
2640
    return cxt.errCode;
×
2641
  }
2642
  if (LIST_LENGTH(cxt.pCols) > 0) {
115,651!
2643
    *pCols = cxt.pCols;
112,497✔
2644
  } else {
2645
    nodesDestroyList(cxt.pCols);
3,154✔
2646
  }
2647

2648
  return TSDB_CODE_SUCCESS;
115,651✔
2649
}
2650

2651
int32_t nodesCollectColumnsFromNode(SNode* node, const char* pTableAlias, ECollectColType type, SNodeList** pCols) {
1,939,958✔
2652
  if (NULL == pCols) {
1,939,958!
2653
    return TSDB_CODE_FAILED;
×
2654
  }
2655
  SNodeList* pList = NULL;
1,939,958✔
2656
  if (!*pCols) {
1,939,958✔
2657
    int32_t code = nodesMakeList(&pList);
19,571✔
2658
    if (TSDB_CODE_SUCCESS != code) {
19,571!
2659
      return code;
×
2660
    }
2661
  }
2662

2663
  SCollectColumnsCxt cxt = {
5,819,931✔
2664
      .errCode = TSDB_CODE_SUCCESS,
2665
      .pTableAlias = pTableAlias,
2666
      .collectType = type,
2667
      .pCols = (NULL == *pCols ? pList : *pCols),
1,939,958✔
2668
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
1,939,958✔
2669
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
1,940,015!
2670
    return TSDB_CODE_OUT_OF_MEMORY;
×
2671
  }
2672
  *pCols = NULL;
1,940,015✔
2673

2674
  nodesWalkExpr(node, collectColumns, &cxt);
1,940,015✔
2675

2676
  taosHashCleanup(cxt.pColHash);
1,939,998✔
2677
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
1,940,029!
2678
    nodesDestroyList(cxt.pCols);
×
2679
    return cxt.errCode;
×
2680
  }
2681
  if (LIST_LENGTH(cxt.pCols) > 0) {
1,940,029!
2682
    *pCols = cxt.pCols;
1,895,176✔
2683
  } else {
2684
    nodesDestroyList(cxt.pCols);
44,853✔
2685
  }
2686

2687
  return TSDB_CODE_SUCCESS;
1,940,032✔
2688
}
2689

2690
typedef struct SCollectFuncsCxt {
2691
  int32_t         errCode;
2692
  char*           tableAlias;
2693
  FFuncClassifier classifier;
2694
  SNodeList*      pFuncs;
2695
} SCollectFuncsCxt;
2696

2697
static EDealRes collectFuncs(SNode* pNode, void* pContext) {
27,102,294✔
2698
  SCollectFuncsCxt* pCxt = (SCollectFuncsCxt*)pContext;
27,102,294✔
2699
  if (QUERY_NODE_FUNCTION == nodeType(pNode) && pCxt->classifier(((SFunctionNode*)pNode)->funcId)) {
27,102,294✔
2700
    SFunctionNode* pFunc = (SFunctionNode*)pNode;
2,551,332✔
2701
    if (FUNCTION_TYPE_TBNAME == pFunc->funcType && pCxt->tableAlias) {
2,551,332!
2702
      SValueNode* pVal = (SValueNode*)nodesListGetNode(pFunc->pParameterList, 0);
319,115✔
2703
      if (pVal && strcmp(pVal->literal, pCxt->tableAlias)) {
319,115✔
2704
        return DEAL_RES_CONTINUE;
242✔
2705
      }
2706
    }
2707

2708
    bool   bFound = false;
2,551,090✔
2709
    SNode* pn = NULL;
2,551,090✔
2710
    FOREACH(pn, pCxt->pFuncs) {
481,653,922!
2711
      if (nodesEqualNode(pn, pNode)) {
479,601,838✔
2712
        bFound = true;
499,001✔
2713
        break;
499,001✔
2714
      }
2715
    }
2716
    if (!bFound) {
2,551,085✔
2717
      SNode* pNew = NULL;
2,052,088✔
2718
      pCxt->errCode = nodesCloneNode(pNode, &pNew);
2,052,088✔
2719
      if (TSDB_CODE_SUCCESS == pCxt->errCode) {
2,052,088!
2720
        pCxt->errCode = nodesListStrictAppend(pCxt->pFuncs, pNew);
2,052,088✔
2721
      }
2722
    }
2723
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
2,551,095!
2724
  }
2725
  return DEAL_RES_CONTINUE;
24,550,951✔
2726
}
2727

2728
static uint32_t funcNodeHash(const char* pKey, uint32_t len) {
×
2729
  SExprNode* pExpr = *(SExprNode**)pKey;
×
2730
  return MurmurHash3_32(pExpr->aliasName, strlen(pExpr->aliasName));
×
2731
}
2732

2733
static int32_t funcNodeEqual(const void* pLeft, const void* pRight, size_t len) {
×
2734
  // if (0 != strcmp((*(const SExprNode**)pLeft)->aliasName, (*(const SExprNode**)pRight)->aliasName)) {
2735
  //   return 1;
2736
  // }
2737
  return nodesEqualNode(*(const SNode**)pLeft, *(const SNode**)pRight) ? 0 : 1;
×
2738
}
2739

2740
int32_t nodesCollectSelectFuncs(SSelectStmt* pSelect, ESqlClause clause, char* tableAlias, FFuncClassifier classifier,
36,076✔
2741
                                SNodeList* pFuncs) {
2742
  if (NULL == pSelect || NULL == pFuncs) {
36,076!
2743
    return TSDB_CODE_FAILED;
×
2744
  }
2745

2746
  SCollectFuncsCxt cxt = {
36,076✔
2747
      .errCode = TSDB_CODE_SUCCESS, .classifier = classifier, .tableAlias = tableAlias, .pFuncs = pFuncs};
2748

2749
  nodesWalkSelectStmt(pSelect, clause, collectFuncs, &cxt);
36,076✔
2750
  return cxt.errCode;
36,076✔
2751
}
2752

2753
int32_t nodesCollectFuncs(SSelectStmt* pSelect, ESqlClause clause, char* tableAlias, FFuncClassifier classifier,
1,782,000✔
2754
                          SNodeList** pFuncs) {
2755
  if (NULL == pSelect || NULL == pFuncs) {
1,782,000!
2756
    return TSDB_CODE_FAILED;
×
2757
  }
2758
  SNodeList* pList = NULL;
1,782,043✔
2759
  if (!*pFuncs) {
1,782,043✔
2760
    int32_t code = nodesMakeList(&pList);
1,580,877✔
2761
    if (TSDB_CODE_SUCCESS != code) {
1,580,875!
2762
      return code;
×
2763
    }
2764
  }
2765
  SCollectFuncsCxt cxt = {.errCode = TSDB_CODE_SUCCESS,
3,564,082✔
2766
                          .classifier = classifier,
2767
                          .tableAlias = tableAlias,
2768
                          .pFuncs = (NULL == *pFuncs ? pList : *pFuncs)};
1,782,041✔
2769
  if (NULL == cxt.pFuncs) {
1,782,041!
2770
    return TSDB_CODE_OUT_OF_MEMORY;
×
2771
  }
2772
  *pFuncs = NULL;
1,782,041✔
2773
  nodesWalkSelectStmt(pSelect, clause, collectFuncs, &cxt);
1,782,041✔
2774
  if (TSDB_CODE_SUCCESS == cxt.errCode) {
1,782,074!
2775
    if (LIST_LENGTH(cxt.pFuncs) > 0) {
1,782,075!
2776
      *pFuncs = cxt.pFuncs;
900,931✔
2777
    } else {
2778
      nodesDestroyList(cxt.pFuncs);
881,144✔
2779
    }
2780
  } else {
2781
    nodesDestroyList(cxt.pFuncs);
×
2782
  }
2783

2784
  return cxt.errCode;
1,782,062✔
2785
}
2786

2787
typedef struct SCollectSpecialNodesCxt {
2788
  int32_t    errCode;
2789
  ENodeType  type;
2790
  SNodeList* pNodes;
2791
} SCollectSpecialNodesCxt;
2792

2793
static EDealRes collectSpecialNodes(SNode* pNode, void* pContext) {
×
2794
  SCollectSpecialNodesCxt* pCxt = (SCollectSpecialNodesCxt*)pContext;
×
2795
  if (pCxt->type == nodeType(pNode)) {
×
2796
    SNode* pNew = NULL;
×
2797
    pCxt->errCode = nodesCloneNode(pNode, &pNew);
×
2798
    if (TSDB_CODE_SUCCESS == pCxt->errCode) {
×
2799
      pCxt->errCode = nodesListStrictAppend(pCxt->pNodes, pNew);
×
2800
    }
2801
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
×
2802
  }
2803
  return DEAL_RES_CONTINUE;
×
2804
}
2805

2806
int32_t nodesCollectSpecialNodes(SSelectStmt* pSelect, ESqlClause clause, ENodeType type, SNodeList** ppNodes) {
×
2807
  if (NULL == pSelect || NULL == ppNodes) {
×
2808
    return TSDB_CODE_FAILED;
×
2809
  }
2810
  SCollectSpecialNodesCxt cxt = {.errCode = TSDB_CODE_SUCCESS, .type = type, .pNodes = NULL};
×
2811
  if (!*ppNodes) {
×
2812
    cxt.errCode = nodesMakeList(&cxt.pNodes);
×
2813
  } else {
2814
    cxt.pNodes = *ppNodes;
×
2815
  }
2816
  if (NULL == cxt.pNodes) {
×
2817
    return cxt.errCode;
×
2818
  }
2819
  *ppNodes = NULL;
×
2820
  nodesWalkSelectStmt(pSelect, SQL_CLAUSE_GROUP_BY, collectSpecialNodes, &cxt);
×
2821
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
×
2822
    nodesDestroyList(cxt.pNodes);
×
2823
    return cxt.errCode;
×
2824
  }
2825
  if (LIST_LENGTH(cxt.pNodes) > 0) {
×
2826
    *ppNodes = cxt.pNodes;
×
2827
  } else {
2828
    nodesDestroyList(cxt.pNodes);
×
2829
  }
2830

2831
  return TSDB_CODE_SUCCESS;
×
2832
}
2833

2834
static EDealRes hasColumn(SNode* pNode, void* pContext) {
19,524✔
2835
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
19,524✔
2836
    *(bool*)pContext = true;
19,484✔
2837
    return DEAL_RES_END;
19,484✔
2838
  }
2839
  return DEAL_RES_CONTINUE;
40✔
2840
}
2841

2842
bool nodesExprHasColumn(SNode* pNode) {
19,524✔
2843
  bool hasCol = false;
19,524✔
2844
  nodesWalkExprPostOrder(pNode, hasColumn, &hasCol);
19,524✔
2845
  return hasCol;
19,524✔
2846
}
2847

2848
bool nodesExprsHasColumn(SNodeList* pList) {
×
2849
  bool hasCol = false;
×
2850
  nodesWalkExprsPostOrder(pList, hasColumn, &hasCol);
×
2851
  return hasCol;
×
2852
}
2853

2854
char* nodesGetFillModeString(EFillMode mode) {
1,018✔
2855
  switch (mode) {
1,018!
2856
    case FILL_MODE_NONE:
×
2857
      return "none";
×
2858
    case FILL_MODE_VALUE:
144✔
2859
      return "value";
144✔
2860
    case FILL_MODE_VALUE_F:
96✔
2861
      return "value_f";
96✔
2862
    case FILL_MODE_PREV:
242✔
2863
      return "prev";
242✔
2864
    case FILL_MODE_NULL:
100✔
2865
      return "null";
100✔
2866
    case FILL_MODE_NULL_F:
×
2867
      return "null_f";
×
2868
    case FILL_MODE_LINEAR:
244✔
2869
      return "linear";
244✔
2870
    case FILL_MODE_NEXT:
192✔
2871
      return "next";
192✔
2872
    default:
×
2873
      return "unknown";
×
2874
  }
2875
}
2876

2877
char* nodesGetNameFromColumnNode(SNode* pNode) {
47,830✔
2878
  if (NULL == pNode || QUERY_NODE_COLUMN != pNode->type) {
47,830!
2879
    return "NULL";
×
2880
  }
2881

2882
  return ((SColumnNode*)pNode)->node.userAlias;
47,833✔
2883
}
2884

2885
int32_t nodesGetOutputNumFromSlotList(SNodeList* pSlots) {
298,596✔
2886
  if (NULL == pSlots || pSlots->length <= 0) {
298,596!
2887
    return 0;
×
2888
  }
2889

2890
  SNode*  pNode = NULL;
298,596✔
2891
  int32_t num = 0;
298,596✔
2892
  FOREACH(pNode, pSlots) {
2,356,153!
2893
    if (QUERY_NODE_SLOT_DESC != pNode->type) {
2,057,557!
2894
      continue;
×
2895
    }
2896

2897
    SSlotDescNode* descNode = (SSlotDescNode*)pNode;
2,057,557✔
2898
    if (descNode->output) {
2,057,557✔
2899
      ++num;
2,049,704✔
2900
    }
2901
  }
2902

2903
  return num;
298,596✔
2904
}
2905

2906
int32_t nodesValueNodeToVariant(const SValueNode* pNode, SVariant* pVal) {
3,013,143✔
2907
  int32_t code = 0;
3,013,143✔
2908
  if (pNode->isNull) {
3,013,143✔
2909
    pVal->nType = TSDB_DATA_TYPE_NULL;
9,760✔
2910
    pVal->nLen = tDataTypes[TSDB_DATA_TYPE_NULL].bytes;
9,760✔
2911
    return code;
9,760✔
2912
  }
2913
  pVal->nType = pNode->node.resType.type;
3,003,383✔
2914
  pVal->nLen = pNode->node.resType.bytes;
3,003,383✔
2915
  switch (pNode->node.resType.type) {
3,003,383!
2916
    case TSDB_DATA_TYPE_NULL:
×
2917
      break;
×
2918
    case TSDB_DATA_TYPE_BOOL:
300✔
2919
      pVal->i = pNode->datum.b;
300✔
2920
      break;
300✔
2921
    case TSDB_DATA_TYPE_TINYINT:
2,417,305✔
2922
    case TSDB_DATA_TYPE_SMALLINT:
2923
    case TSDB_DATA_TYPE_INT:
2924
    case TSDB_DATA_TYPE_BIGINT:
2925
    case TSDB_DATA_TYPE_TIMESTAMP:
2926
      pVal->i = pNode->datum.i;
2,417,305✔
2927
      break;
2,417,305✔
2928
    case TSDB_DATA_TYPE_UTINYINT:
325✔
2929
    case TSDB_DATA_TYPE_USMALLINT:
2930
    case TSDB_DATA_TYPE_UINT:
2931
    case TSDB_DATA_TYPE_UBIGINT:
2932
      pVal->u = pNode->datum.u;
325✔
2933
      break;
325✔
2934
    case TSDB_DATA_TYPE_FLOAT:
31,717✔
2935
      pVal->f = pNode->datum.d;
31,717✔
2936
      break;
31,717✔
2937
    case TSDB_DATA_TYPE_DOUBLE:
188,009✔
2938
      pVal->d = pNode->datum.d;
188,009✔
2939
      break;
188,009✔
2940
    case TSDB_DATA_TYPE_NCHAR:
365,606✔
2941
    case TSDB_DATA_TYPE_VARCHAR:
2942
    case TSDB_DATA_TYPE_VARBINARY:
2943
    case TSDB_DATA_TYPE_GEOMETRY:
2944
      pVal->pz = taosMemoryMalloc(pVal->nLen + 1);
365,606✔
2945
      if (pVal->pz) {
365,679!
2946
        memcpy(pVal->pz, pNode->datum.p, pVal->nLen);
365,686✔
2947
        pVal->pz[pVal->nLen] = 0;
365,686✔
2948
      } else {
2949
        code = terrno;
×
2950
      }
2951
      break;
365,686✔
2952
    case TSDB_DATA_TYPE_JSON:
12✔
2953
      pVal->nLen = getJsonValueLen(pNode->datum.p);
12✔
2954
      pVal->pz = taosMemoryMalloc(pVal->nLen);
12✔
2955
      if (pVal->pz) {
12!
2956
        memcpy(pVal->pz, pNode->datum.p, pVal->nLen);
12✔
2957
      } else {
2958
        code = terrno;
×
2959
      }
2960
      break;
12✔
2961
    case TSDB_DATA_TYPE_DECIMAL:
109✔
2962
    case TSDB_DATA_TYPE_BLOB:
2963
      // todo
2964
    default:
2965
      break;
109✔
2966
  }
2967
  return code;
3,003,463✔
2968
}
2969

2970
int32_t nodesMergeConds(SNode** pDst, SNodeList** pSrc) {
2,967,653✔
2971
  if (NULL == *pSrc) {
2,967,653✔
2972
    return TSDB_CODE_SUCCESS;
2,189,873✔
2973
  }
2974

2975
  if (1 == LIST_LENGTH(*pSrc)) {
777,780!
2976
    *pDst = nodesListGetNode(*pSrc, 0);
137,782✔
2977
    nodesClearList(*pSrc);
137,782✔
2978
  } else {
2979
    SLogicConditionNode* pLogicCond = NULL;
639,998✔
2980
    int32_t              code = nodesMakeNode(QUERY_NODE_LOGIC_CONDITION, (SNode**)&pLogicCond);
639,998✔
2981
    if (TSDB_CODE_SUCCESS != code) {
640,064!
2982
      return code;
×
2983
    }
2984
    pLogicCond->node.resType.type = TSDB_DATA_TYPE_BOOL;
640,064✔
2985
    pLogicCond->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes;
640,064✔
2986
    pLogicCond->condType = LOGIC_COND_TYPE_AND;
640,064✔
2987
    pLogicCond->pParameterList = *pSrc;
640,064✔
2988
    *pDst = (SNode*)pLogicCond;
640,064✔
2989
  }
2990
  *pSrc = NULL;
777,818✔
2991

2992
  return TSDB_CODE_SUCCESS;
777,818✔
2993
}
2994

2995
const char* dataOrderStr(EDataOrderLevel order) {
×
2996
  switch (order) {
×
2997
    case DATA_ORDER_LEVEL_NONE:
×
2998
      return "no order required";
×
2999
    case DATA_ORDER_LEVEL_IN_BLOCK:
×
3000
      return "in-datablock order";
×
3001
    case DATA_ORDER_LEVEL_IN_GROUP:
×
3002
      return "in-group order";
×
3003
    case DATA_ORDER_LEVEL_GLOBAL:
×
3004
      return "global order";
×
3005
    default:
×
3006
      break;
×
3007
  }
3008
  return "unknown";
×
3009
}
3010

3011
int32_t nodesMakeValueNodeFromString(char* literal, SValueNode** ppValNode) {
46✔
3012
  int32_t     lenStr = strlen(literal);
46✔
3013
  SValueNode* pValNode = NULL;
46✔
3014
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
46✔
3015
  if (pValNode) {
46!
3016
    pValNode->node.resType.type = TSDB_DATA_TYPE_VARCHAR;
46✔
3017
    pValNode->node.resType.bytes = lenStr + VARSTR_HEADER_SIZE;
46✔
3018
    char* p = taosMemoryMalloc(lenStr + 1 + VARSTR_HEADER_SIZE);
46✔
3019
    if (p == NULL) {
46!
3020
      return terrno;
×
3021
    }
3022
    varDataSetLen(p, lenStr);
46✔
3023
    memcpy(varDataVal(p), literal, lenStr + 1);
46✔
3024
    pValNode->datum.p = p;
46✔
3025
    pValNode->literal = tstrdup(literal);
46✔
3026
    pValNode->translate = true;
46✔
3027
    pValNode->isNull = false;
46✔
3028
    *ppValNode = pValNode;
46✔
3029
  }
3030
  return code;
46✔
3031
}
3032

3033
int32_t nodesMakeValueNodeFromBool(bool b, SValueNode** ppValNode) {
×
3034
  SValueNode* pValNode = NULL;
×
NEW
3035
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
×
3036
  if (TSDB_CODE_SUCCESS == code) {
×
3037
    pValNode->node.resType.type = TSDB_DATA_TYPE_BOOL;
×
3038
    pValNode->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes;
×
3039
    code = nodesSetValueNodeValue(pValNode, &b);
×
3040
    if (TSDB_CODE_SUCCESS == code) {
×
3041
      pValNode->translate = true;
×
3042
      pValNode->isNull = false;
×
3043
      *ppValNode = pValNode;
×
3044
    } else {
3045
      nodesDestroyNode((SNode*)pValNode);
×
3046
    }
3047
  }
3048
  return code;
×
3049
}
3050

3051
int32_t nodesMakeValueNodeFromInt32(int32_t value, SNode** ppNode) {
217✔
3052
  SValueNode* pValNode = NULL;
217✔
3053
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
217✔
3054
  if (TSDB_CODE_SUCCESS == code) {
217!
3055
    pValNode->node.resType.type = TSDB_DATA_TYPE_INT;
217✔
3056
    pValNode->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_INT].bytes;
217✔
3057
    code = nodesSetValueNodeValue(pValNode, &value);
217✔
3058
    if (TSDB_CODE_SUCCESS == code) {
217!
3059
      pValNode->translate = true;
217✔
3060
      pValNode->isNull = false;
217✔
3061
      *ppNode = (SNode*)pValNode;
217✔
3062
    } else {
3063
      nodesDestroyNode((SNode*)pValNode);
×
3064
    }
3065
  }
3066
  return code;
217✔
3067
}
3068

3069
bool nodesIsStar(SNode* pNode) {
3,196,703✔
3070
  return (QUERY_NODE_COLUMN == nodeType(pNode)) && ('\0' == ((SColumnNode*)pNode)->tableAlias[0]) &&
3,387,454✔
3071
         (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
190,751✔
3072
}
3073

3074
bool nodesIsTableStar(SNode* pNode) {
2,994,947✔
3075
  return (QUERY_NODE_COLUMN == nodeType(pNode)) && ('\0' != ((SColumnNode*)pNode)->tableAlias[0]) &&
4,095,446✔
3076
         (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
1,100,499✔
3077
}
3078

3079
void nodesSortList(SNodeList** pList, int32_t (*comp)(SNode* pNode1, SNode* pNode2)) {
247✔
3080
  if ((*pList)->length == 1) return;
247✔
3081

3082
  uint32_t   inSize = 1;
231✔
3083
  SListCell* pHead = (*pList)->pHead;
231✔
3084
  while (1) {
378✔
3085
    SListCell* p = pHead;
609✔
3086
    pHead = NULL;
609✔
3087
    SListCell* pTail = NULL;
609✔
3088

3089
    uint32_t nMerges = 0;
609✔
3090
    while (p) {
50,387✔
3091
      ++nMerges;
49,778✔
3092
      SListCell* q = p;
49,778✔
3093
      uint32_t   pSize = 0;
49,778✔
3094
      for (uint32_t i = 0; i < inSize; ++i) {
345,440✔
3095
        ++pSize;
295,829✔
3096
        q = q->pNext;
295,829✔
3097
        if (!q) {
295,829✔
3098
          break;
167✔
3099
        }
3100
      }
3101

3102
      uint32_t qSize = inSize;
49,778✔
3103

3104
      while (pSize > 0 || (qSize > 0 && q)) {
639,248✔
3105
        SListCell* pCell;
3106
        if (pSize == 0) {
589,470✔
3107
          pCell = q;
91,456✔
3108
          q = q->pNext;
91,456✔
3109
          --qSize;
91,456✔
3110
        } else if (qSize == 0 || !q) {
498,014✔
3111
          pCell = p;
18,156✔
3112
          p = p->pNext;
18,156✔
3113
          --pSize;
18,156✔
3114
        } else if (comp(q->pNode, p->pNode) >= 0) {
479,858✔
3115
          pCell = p;
277,673✔
3116
          p = p->pNext;
277,673✔
3117
          --pSize;
277,673✔
3118
        } else {
3119
          pCell = q;
202,185✔
3120
          q = q->pNext;
202,185✔
3121
          --qSize;
202,185✔
3122
        }
3123

3124
        if (pTail) {
589,470✔
3125
          pTail->pNext = pCell;
588,861✔
3126
          pCell->pPrev = pTail;
588,861✔
3127
        } else {
3128
          pHead = pCell;
609✔
3129
          pHead->pPrev = NULL;
609✔
3130
        }
3131
        pTail = pCell;
589,470✔
3132
      }
3133
      p = q;
49,778✔
3134
    }
3135
    pTail->pNext = NULL;
609✔
3136

3137
    if (nMerges <= 1) {
609✔
3138
      (*pList)->pHead = pHead;
231✔
3139
      (*pList)->pTail = pTail;
231✔
3140
      return;
231✔
3141
    }
3142
    inSize *= 2;
378✔
3143
  }
3144
}
3145

3146
static SNode* nodesListFindNode(SNodeList* pList, SNode* pNode) {
4,087✔
3147
  SNode* pFound = NULL;
4,087✔
3148
  FOREACH(pFound, pList) {
9,187!
3149
    if (nodesEqualNode(pFound, pNode)) {
5,555✔
3150
      break;
455✔
3151
    }
3152
  }
3153
  return pFound;
4,087✔
3154
}
3155

3156
int32_t nodesListDeduplicate(SNodeList** ppList) {
184,643✔
3157
  if (!ppList || LIST_LENGTH(*ppList) <= 1) return TSDB_CODE_SUCCESS;
184,643!
3158
  if (LIST_LENGTH(*ppList) == 2) {
5,881!
3159
    SNode* pNode1 = nodesListGetNode(*ppList, 0);
4,824✔
3160
    SNode* pNode2 = nodesListGetNode(*ppList, 1);
4,824✔
3161
    if (nodesEqualNode(pNode1, pNode2)) {
4,824✔
3162
      SListCell* pCell = nodesListGetCell(*ppList, 1);
17✔
3163
      (void)nodesListErase(*ppList, pCell);
17✔
3164
    }
3165
    return TSDB_CODE_SUCCESS;
4,824✔
3166
  }
3167
  SNodeList* pTmp = NULL;
1,057✔
3168
  int32_t    code = nodesMakeList(&pTmp);
1,057✔
3169
  if (TSDB_CODE_SUCCESS == code) {
1,057!
3170
    SNode* pNode = NULL;
1,057✔
3171
    FOREACH(pNode, *ppList) {
5,144!
3172
      SNode* pFound = nodesListFindNode(pTmp, pNode);
4,087✔
3173
      if (NULL == pFound) {
4,087✔
3174
        code = nodesCloneNode(pNode, &pFound);
3,632✔
3175
        if (TSDB_CODE_SUCCESS == code) code = nodesListStrictAppend(pTmp, pFound);
3,632!
3176
        if (TSDB_CODE_SUCCESS != code) break;
3,632!
3177
      }
3178
    }
3179
  }
3180
  if (TSDB_CODE_SUCCESS == code) {
1,057!
3181
    nodesDestroyList(*ppList);
1,057✔
3182
    *ppList = pTmp;
1,057✔
3183
  } else {
3184
    nodesDestroyList(pTmp);
×
3185
  }
3186
  return code;
1,057✔
3187
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc