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

taosdata / TDengine / #4473

08 Jul 2025 09:38AM UTC coverage: 62.922% (+0.7%) from 62.22%
#4473

push

travis-ci

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

merge: from main to 3.0 branch

158525 of 321496 branches covered (49.31%)

Branch coverage included in aggregate %.

56 of 60 new or added lines in 13 files covered. (93.33%)

1333 existing lines in 67 files now uncovered.

245526 of 320647 relevant lines covered (76.57%)

17689640.25 hits per line

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

82.15
/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 "nodes.h"
19
#include "nodesUtil.h"
20
#include "plannodes.h"
21
#include "querynodes.h"
22
#include "taos.h"
23
#include "taoserror.h"
24
#include "tdatablock.h"
25
#include "thash.h"
26
#include "tref.h"
27

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

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

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

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

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

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

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

95
      return code;
×
96
    }
97
  }
98

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

119
static int32_t callocNodeChunk(SNodeAllocator* pAllocator, SNodeMemChunk** pOutChunk) {
7,571,352✔
120
  SNodeMemChunk* pNewChunk = taosMemoryCalloc(1, sizeof(SNodeMemChunk) + pAllocator->chunkSize);
7,571,352!
121
  if (NULL == pNewChunk) {
7,571,462!
122
    if (pOutChunk) *pOutChunk = NULL;
×
123
    return terrno;
×
124
  }
125
  pNewChunk->pBuf = (char*)(pNewChunk + 1);
7,571,462✔
126
  pNewChunk->availableSize = pAllocator->chunkSize;
7,571,462✔
127
  pNewChunk->usedSize = 0;
7,571,462✔
128
  pNewChunk->pNext = NULL;
7,571,462✔
129
  if (NULL != pAllocator->pCurrChunk) {
7,571,462✔
130
    pAllocator->pCurrChunk->pNext = pNewChunk;
6,189,502✔
131
  }
132
  pAllocator->pCurrChunk = pNewChunk;
7,571,462✔
133
  if (NULL == pAllocator->pChunks) {
7,571,462✔
134
    pAllocator->pChunks = pNewChunk;
1,382,026✔
135
  }
136
  ++(pAllocator->chunkNum);
7,571,462✔
137
  if (pOutChunk) *pOutChunk = pNewChunk;
7,571,462!
138
  return TSDB_CODE_SUCCESS;
7,571,462✔
139
}
140

141
static int32_t nodesCallocImpl(int32_t size, void** pOut) {
2,147,483,647✔
142
  if (NULL == g_pNodeAllocator) {
2,147,483,647✔
143
    *pOut = taosMemoryCalloc(1, size);
1,936,907,565!
144
    if (!*pOut) return terrno;
1,964,931,284!
145
    return TSDB_CODE_SUCCESS;
1,964,931,284✔
146
  }
147

148
  int32_t alignedSize = size;
604,677,088✔
149
#ifdef NO_UNALIGNED_ACCESS
150
  alignedSize = (size + 3) & (~3);
151
#endif
152
  if (g_pNodeAllocator->pCurrChunk->usedSize + alignedSize > g_pNodeAllocator->pCurrChunk->availableSize) {
604,677,088✔
153
    int32_t code = callocNodeChunk(g_pNodeAllocator, NULL);
6,189,527✔
154
    if (TSDB_CODE_SUCCESS != code) {
6,189,495!
155
      *pOut = NULL;
×
156
      return code;
×
157
    }
158
  }
159
  void* p = g_pNodeAllocator->pCurrChunk->pBuf + g_pNodeAllocator->pCurrChunk->usedSize;
604,677,056✔
160
  g_pNodeAllocator->pCurrChunk->usedSize += alignedSize;
604,677,056✔
161
  *pOut = p;
604,677,056✔
162
  return TSDB_CODE_SUCCESS;
604,677,056✔
163
  ;
164
}
165

166
#ifdef NO_UNALIGNED_ACCESS
167
#define NODE_ALLOCATOR_HEAD_LEN 4
168
#else
169
#define NODE_ALLOCATOR_HEAD_LEN 1
170
#endif
171

172
static int32_t nodesCalloc(int32_t num, int32_t size, void** pOut) {
2,147,483,647✔
173
  void*   p = NULL;
2,147,483,647✔
174
  int32_t code = nodesCallocImpl(num * size + NODE_ALLOCATOR_HEAD_LEN, &p);
2,147,483,647✔
175
  if (TSDB_CODE_SUCCESS != code) {
2,147,483,647!
176
    return code;
×
177
  }
178
  *(char*)p = (NULL != g_pNodeAllocator) ? 1 : 0;
2,147,483,647✔
179
  *pOut = (char*)p + NODE_ALLOCATOR_HEAD_LEN;
2,147,483,647✔
180
  return TSDB_CODE_SUCCESS;
2,147,483,647✔
181
}
182

183
void nodesFree(void* p) {
2,147,483,647✔
184
  char* ptr = (char*)p - NODE_ALLOCATOR_HEAD_LEN;
2,147,483,647✔
185
  if (0 == *ptr) {
2,147,483,647✔
186
    taosMemoryFree(ptr);
2,002,873,093!
187
  }
188
  return;
2,147,483,647✔
189
}
190

191
static int32_t createNodeAllocator(int32_t chunkSize, SNodeAllocator** pAllocator) {
1,381,926✔
192
  *pAllocator = taosMemoryCalloc(1, sizeof(SNodeAllocator));
1,381,926!
193
  if (NULL == *pAllocator) {
1,381,986!
194
    return terrno;
×
195
  }
196
  (*pAllocator)->chunkSize = chunkSize;
1,381,986✔
197
  int32_t code = callocNodeChunk(*pAllocator, NULL);
1,381,986✔
198
  if (TSDB_CODE_SUCCESS != code) {
1,382,032!
199
    taosMemoryFreeClear(*pAllocator);
×
200
    return code;
×
201
  }
202
  if (0 != taosThreadMutexInit(&(*pAllocator)->mutex, NULL)) {
1,382,032!
203
    return TAOS_SYSTEM_ERROR(ERRNO);
×
204
  }
205
  return TSDB_CODE_SUCCESS;
1,382,013✔
206
}
207

208
static void destroyNodeAllocator(void* p) {
1,381,975✔
209
  if (NULL == p) {
1,381,975!
210
    return;
×
211
  }
212

213
  SNodeAllocator* pAllocator = p;
1,381,975✔
214

215
  nodesDebug("QID:0x%" PRIx64 ", destroy allocatorId:0x%" PRIx64 ", chunkNum:%d, chunkTotakSize:%d",
1,381,975✔
216
             pAllocator->queryId, pAllocator->self, pAllocator->chunkNum, pAllocator->chunkNum * pAllocator->chunkSize);
217

218
  SNodeMemChunk* pChunk = pAllocator->pChunks;
1,382,031✔
219
  while (NULL != pChunk) {
8,953,702✔
220
    SNodeMemChunk* pTemp = pChunk->pNext;
7,571,658✔
221
    taosMemoryFree(pChunk);
7,571,658!
222
    pChunk = pTemp;
7,571,671✔
223
  }
224
  (void)taosThreadMutexDestroy(&pAllocator->mutex);
1,382,044✔
225
  taosMemoryFree(pAllocator);
1,381,983!
226
}
227

228
int32_t nodesInitAllocatorSet() {
18,112✔
229
  if (g_allocatorReqRefPool >= 0) {
18,112!
230
    nodesWarn("nodes already initialized");
×
231
    return TSDB_CODE_SUCCESS;
×
232
  }
233

234
  g_allocatorReqRefPool = taosOpenRef(1024, destroyNodeAllocator);
18,112✔
235
  if (g_allocatorReqRefPool < 0) {
18,112!
236
    nodesError("init nodes failed");
×
237
    return TSDB_CODE_OUT_OF_MEMORY;
×
238
  }
239

240
  return TSDB_CODE_SUCCESS;
18,112✔
241
}
242

243
void nodesDestroyAllocatorSet() {
18,112✔
244
  if (g_allocatorReqRefPool >= 0) {
18,112!
245
    SNodeAllocator* pAllocator = taosIterateRef(g_allocatorReqRefPool, 0);
18,112✔
246
    int64_t         refId = 0;
18,112✔
247
    while (NULL != pAllocator) {
18,402✔
248
      refId = pAllocator->self;
290✔
249
      int32_t code = taosRemoveRef(g_allocatorReqRefPool, refId);
290✔
250
      if (TSDB_CODE_SUCCESS != code) {
290!
251
        nodesError("failed to remove ref at %s:%d, rsetId:%d, refId:%" PRId64, __func__, __LINE__,
×
252
                   g_allocatorReqRefPool, refId);
253
      }
254
      pAllocator = taosIterateRef(g_allocatorReqRefPool, refId);
290✔
255
    }
256
    taosCloseRef(g_allocatorReqRefPool);
18,112✔
257
  }
258
}
18,112✔
259

260
int32_t nodesCreateAllocator(int64_t queryId, int32_t chunkSize, int64_t* pAllocatorId) {
1,381,920✔
261
  SNodeAllocator* pAllocator = NULL;
1,381,920✔
262
  int32_t         code = createNodeAllocator(chunkSize, &pAllocator);
1,381,920✔
263
  if (TSDB_CODE_SUCCESS == code) {
1,382,017✔
264
    pAllocator->self = taosAddRef(g_allocatorReqRefPool, pAllocator);
1,382,015✔
265
    if (pAllocator->self <= 0) {
1,382,040✔
266
      return terrno;
1✔
267
    }
268
    pAllocator->queryId = queryId;
1,382,039✔
269
    *pAllocatorId = pAllocator->self;
1,382,039✔
270
  }
271
  return code;
1,382,041✔
272
}
273

274
int32_t nodesSimAcquireAllocator(int64_t allocatorId) {
11,149,540✔
275
  if (allocatorId <= 0) {
11,149,540✔
276
    return TSDB_CODE_SUCCESS;
9,771,831✔
277
  }
278

279
  SNodeAllocator* pAllocator = taosAcquireRef(g_allocatorReqRefPool, allocatorId);
1,377,709✔
280
  if (NULL == pAllocator) {
1,381,754!
281
    return terrno;
×
282
  }
283
  return TSDB_CODE_SUCCESS;
1,381,754✔
284
}
285

286
int32_t nodesSimReleaseAllocator(int64_t allocatorId) {
11,158,395✔
287
  if (allocatorId <= 0) {
11,158,395✔
288
    return TSDB_CODE_SUCCESS;
9,779,354✔
289
  }
290

291
  return taosReleaseRef(g_allocatorReqRefPool, allocatorId);
1,379,041✔
292
}
293

294
int32_t nodesAcquireAllocator(int64_t allocatorId) {
23,223,264✔
295
  if (allocatorId <= 0) {
23,223,264✔
296
    return TSDB_CODE_SUCCESS;
19,419,223✔
297
  }
298

299
  SNodeAllocator* pAllocator = taosAcquireRef(g_allocatorReqRefPool, allocatorId);
3,804,041✔
300
  if (NULL == pAllocator) {
3,832,248!
301
    return terrno;
×
302
  }
303
  (void)taosThreadMutexLock(&pAllocator->mutex);
3,832,248✔
304
  g_pNodeAllocator = pAllocator;
3,832,221✔
305
  return TSDB_CODE_SUCCESS;
3,832,221✔
306
}
307

308
int32_t nodesReleaseAllocator(int64_t allocatorId) {
23,056,723✔
309
  if (allocatorId <= 0) {
23,056,723✔
310
    return TSDB_CODE_SUCCESS;
19,244,999✔
311
  }
312

313
  if (NULL == g_pNodeAllocator) {
3,811,724!
314
    nodesError("allocatorId:0x%" PRIx64
×
315
               ", release failed, The nodesReleaseAllocator function needs to be called after the "
316
               "nodesAcquireAllocator function is called!",
317
               allocatorId);
318
    return TSDB_CODE_FAILED;
×
319
  }
320
  SNodeAllocator* pAllocator = g_pNodeAllocator;
3,811,724✔
321
  g_pNodeAllocator = NULL;
3,811,724✔
322
  (void)taosThreadMutexUnlock(&pAllocator->mutex);
3,811,724✔
323
  return taosReleaseRef(g_allocatorReqRefPool, allocatorId);
3,831,843✔
324
}
325

326
int64_t nodesMakeAllocatorWeakRef(int64_t allocatorId) {
1,083,578✔
327
  if (allocatorId <= 0) {
1,083,578!
328
    return 0;
×
329
  }
330

331
  SNodeAllocator* pAllocator = taosAcquireRef(g_allocatorReqRefPool, allocatorId);
1,083,578✔
332
  if (NULL == pAllocator) {
1,083,620!
UNCOV
333
    nodesError("allocatorId:0x%" PRIx64 ", weak reference failed", allocatorId);
×
334
    return -1;
×
335
  }
336
  return pAllocator->self;
1,083,633✔
337
}
338

339
int64_t nodesReleaseAllocatorWeakRef(int64_t allocatorId) { return taosReleaseRef(g_allocatorReqRefPool, allocatorId); }
10,819,690✔
340

341
void nodesDestroyAllocator(int64_t allocatorId) {
11,165,160✔
342
  if (allocatorId <= 0) {
11,165,160✔
343
    return;
9,784,017✔
344
  }
345

346
  int32_t code = taosRemoveRef(g_allocatorReqRefPool, allocatorId);
1,381,143✔
347
  if (TSDB_CODE_SUCCESS != code) {
1,381,751!
348
    nodesError("failed to remove ref at %s:%d, rsetId:%d, refId:%" PRId64, __func__, __LINE__, g_allocatorReqRefPool,
×
349
               allocatorId);
350
  }
351
}
352

353
static int32_t makeNode(ENodeType type, int32_t size, SNode** ppNode) {
1,349,021,098✔
354
  SNode*  p = NULL;
1,349,021,098✔
355
  int32_t code = nodesCalloc(1, size, (void**)&p);
1,349,021,098✔
356
  if (TSDB_CODE_SUCCESS == code) {
1,341,519,591!
357
    setNodeType(p, type);
1,341,789,919✔
358
    *ppNode = p;
1,341,789,919✔
359
  }
360
  return code;
1,341,519,591✔
361
}
362

363
int32_t nodesMakeNode(ENodeType type, SNode** ppNodeOut) {
1,346,746,669✔
364
  SNode*  pNode = NULL;
1,346,746,669✔
365
  int32_t code = 0;
1,346,746,669✔
366
  switch (type) {
1,346,746,669!
367
    case QUERY_NODE_COLUMN:
215,027,543✔
368
      code = makeNode(type, sizeof(SColumnNode), &pNode);
215,027,543✔
369
      break;
214,481,111✔
370
    case QUERY_NODE_VALUE:
582,559,737✔
371
      code = makeNode(type, sizeof(SValueNode), &pNode);
582,559,737✔
372
      break;
576,998,839✔
373
    case QUERY_NODE_OPERATOR:
28,929,561✔
374
      code = makeNode(type, sizeof(SOperatorNode), &pNode);
28,929,561✔
375
      break;
28,899,600✔
376
    case QUERY_NODE_LOGIC_CONDITION:
9,023,983✔
377
      code = makeNode(type, sizeof(SLogicConditionNode), &pNode);
9,023,983✔
378
      break;
9,020,166✔
379
    case QUERY_NODE_FUNCTION:
36,763,498✔
380
      code = makeNode(type, sizeof(SFunctionNode), &pNode);
36,763,498✔
381
      break;
36,746,743✔
382
    case QUERY_NODE_REAL_TABLE:
1,713,139✔
383
      code = makeNode(type, sizeof(SRealTableNode), &pNode);
1,713,139✔
384
      break;
1,713,160✔
385
    case QUERY_NODE_VIRTUAL_TABLE:
9,650✔
386
      code = makeNode(type, sizeof(SVirtualTableNode), &pNode);
9,650✔
387
      break;
9,650✔
388
    case QUERY_NODE_TEMP_TABLE:
311,086✔
389
      code = makeNode(type, sizeof(STempTableNode), &pNode);
311,086✔
390
      break;
311,087✔
391
    case QUERY_NODE_JOIN_TABLE:
140,227✔
392
      code = makeNode(type, sizeof(SJoinTableNode), &pNode);
140,227✔
393
      break;
140,227✔
394
    case QUERY_NODE_GROUPING_SET:
901,414✔
395
      code = makeNode(type, sizeof(SGroupingSetNode), &pNode);
901,414✔
396
      break;
901,415✔
397
    case QUERY_NODE_ORDER_BY_EXPR:
4,682,786✔
398
      code = makeNode(type, sizeof(SOrderByExprNode), &pNode);
4,682,786✔
399
      break;
4,682,876✔
400
    case QUERY_NODE_LIMIT:
1,364,073✔
401
      code = makeNode(type, sizeof(SLimitNode), &pNode);
1,364,073✔
402
      break;
1,364,197✔
403
    case QUERY_NODE_STATE_WINDOW:
7,013✔
404
      code = makeNode(type, sizeof(SStateWindowNode), &pNode);
7,013✔
405
      break;
7,013✔
406
    case QUERY_NODE_SESSION_WINDOW:
7,151✔
407
      code = makeNode(type, sizeof(SSessionWindowNode), &pNode);
7,151✔
408
      break;
7,151✔
409
    case QUERY_NODE_INTERVAL_WINDOW:
31,343✔
410
      code = makeNode(type, sizeof(SIntervalWindowNode), &pNode);
31,343✔
411
      break;
31,344✔
412
    case QUERY_NODE_NODE_LIST:
15,007,041✔
413
      code = makeNode(type, sizeof(SNodeListNode), &pNode);
15,007,041✔
414
      break;
15,039,177✔
415
    case QUERY_NODE_FILL:
25,437✔
416
      code = makeNode(type, sizeof(SFillNode), &pNode);
25,437✔
417
      break;
25,443✔
418
    case QUERY_NODE_RAW_EXPR:
14,356,297✔
419
      code = makeNode(type, sizeof(SRawExprNode), &pNode);
14,356,297✔
420
      break;
14,356,335✔
421
    case QUERY_NODE_TARGET:
83,964,692✔
422
      code = makeNode(type, sizeof(STargetNode), &pNode);
83,964,692✔
423
      break;
84,080,842✔
424
    case QUERY_NODE_DATABLOCK_DESC:
36,312,863✔
425
      code = makeNode(type, sizeof(SDataBlockDescNode), &pNode);
36,312,863✔
426
      break;
36,324,044✔
427
    case QUERY_NODE_SLOT_DESC:
152,479,112✔
428
      code = makeNode(type, sizeof(SSlotDescNode), &pNode);
152,479,112✔
429
      break;
152,219,997✔
430
    case QUERY_NODE_COLUMN_DEF:
647,402✔
431
      code = makeNode(type, sizeof(SColumnDefNode), &pNode);
647,402✔
432
      break;
647,402✔
433
    case QUERY_NODE_DOWNSTREAM_SOURCE:
6,470,027✔
434
      code = makeNode(type, sizeof(SDownstreamSourceNode), &pNode);
6,470,027✔
435
      break;
6,468,545✔
436
    case QUERY_NODE_DATABASE_OPTIONS:
6,568✔
437
      code = makeNode(type, sizeof(SDatabaseOptions), &pNode);
6,568✔
438
      break;
6,569✔
439
    case QUERY_NODE_TABLE_OPTIONS:
157,535✔
440
      code = makeNode(type, sizeof(STableOptions), &pNode);
157,535✔
441
      break;
157,572✔
442
    case QUERY_NODE_COLUMN_OPTIONS:
609,269✔
443
      code = makeNode(type, sizeof(SColumnOptions), &pNode);
609,269✔
444
      break;
609,269✔
445
    case QUERY_NODE_INDEX_OPTIONS:
28✔
446
      code = makeNode(type, sizeof(SIndexOptions), &pNode);
28✔
447
      break;
28✔
448
    case QUERY_NODE_EXPLAIN_OPTIONS:
127,177✔
449
      code = makeNode(type, sizeof(SExplainOptions), &pNode);
127,177✔
450
      break;
127,177✔
451
    case QUERY_NODE_STREAM_OPTIONS:
1,409✔
452
      code = makeNode(type, sizeof(SStreamOptions), &pNode);
1,409✔
453
      break;
1,409✔
454
    case QUERY_NODE_LEFT_VALUE:
328,144✔
455
      code = makeNode(type, sizeof(SLeftValueNode), &pNode);
328,144✔
456
      break;
328,242✔
457
    case QUERY_NODE_COLUMN_REF:
2,736✔
458
      code = makeNode(type, sizeof(SColumnRefNode), &pNode);
2,736✔
459
      break;
2,736✔
460
    case QUERY_NODE_WHEN_THEN:
53,236✔
461
      code = makeNode(type, sizeof(SWhenThenNode), &pNode);
53,236✔
462
      break;
53,237✔
463
    case QUERY_NODE_CASE_WHEN:
41,775✔
464
      code = makeNode(type, sizeof(SCaseWhenNode), &pNode);
41,775✔
465
      break;
41,779✔
466
    case QUERY_NODE_EVENT_WINDOW:
1,184✔
467
      code = makeNode(type, sizeof(SEventWindowNode), &pNode);
1,184✔
468
      break;
1,184✔
469
    case QUERY_NODE_COUNT_WINDOW:
1,072✔
470
      code = makeNode(type, sizeof(SCountWindowNode), &pNode);
1,072✔
471
      break;
1,072✔
472
    case QUERY_NODE_ANOMALY_WINDOW:
13✔
473
      code = makeNode(type, sizeof(SAnomalyWindowNode), &pNode);
13✔
474
      break;
13✔
475
    case QUERY_NODE_HINT:
62,825✔
476
      code = makeNode(type, sizeof(SHintNode), &pNode);
62,825✔
477
      break;
62,825✔
478
    case QUERY_NODE_VIEW:
481✔
479
      code = makeNode(type, sizeof(SViewNode), &pNode);
481✔
480
      break;
481✔
481
    case QUERY_NODE_WINDOW_OFFSET:
5,125✔
482
      code = makeNode(type, sizeof(SWindowOffsetNode), &pNode);
5,125✔
483
      break;
5,125✔
484
    case QUERY_NODE_STREAM_NOTIFY_OPTIONS:
23✔
485
      code = makeNode(type, sizeof(SStreamNotifyOptions), &pNode);
23✔
486
      break;
23✔
487
    case QUERY_NODE_SET_OPERATOR:
85,047✔
488
      code = makeNode(type, sizeof(SSetOperator), &pNode);
85,047✔
489
      break;
85,047✔
490
    case QUERY_NODE_RANGE_AROUND:
5,280✔
491
      code = makeNode(type, sizeof(SRangeAroundNode), &pNode);
5,280✔
492
      break;
5,280✔
493
    case QUERY_NODE_SELECT_STMT:
1,511,454✔
494
      code = makeNode(type, sizeof(SSelectStmt), &pNode);
1,511,454✔
495
      break;
1,511,475✔
496
    case QUERY_NODE_VNODE_MODIFY_STMT:
9,858,240✔
497
      code = makeNode(type, sizeof(SVnodeModifyOpStmt), &pNode);
9,858,240✔
498
      break;
9,865,874✔
499
    case QUERY_NODE_CREATE_DATABASE_STMT:
5,752✔
500
      code = makeNode(type, sizeof(SCreateDatabaseStmt), &pNode);
5,752✔
501
      break;
5,752✔
502
    case QUERY_NODE_DROP_DATABASE_STMT:
4,011✔
503
      code = makeNode(type, sizeof(SDropDatabaseStmt), &pNode);
4,011✔
504
      break;
4,011✔
505
    case QUERY_NODE_ALTER_DATABASE_STMT:
779✔
506
      code = makeNode(type, sizeof(SAlterDatabaseStmt), &pNode);
779✔
507
      break;
779✔
508
    case QUERY_NODE_FLUSH_DATABASE_STMT:
9,789✔
509
      code = makeNode(type, sizeof(SFlushDatabaseStmt), &pNode);
9,789✔
510
      break;
9,789✔
511
    case QUERY_NODE_TRIM_DATABASE_STMT:
32✔
512
      code = makeNode(type, sizeof(STrimDatabaseStmt), &pNode);
32✔
513
      break;
32✔
514
    case QUERY_NODE_S3MIGRATE_DATABASE_STMT:
6✔
515
      code = makeNode(type, sizeof(SS3MigrateDatabaseStmt), &pNode);
6✔
516
      break;
6✔
517
    case QUERY_NODE_CREATE_TABLE_STMT:
21,177✔
518
      code = makeNode(type, sizeof(SCreateTableStmt), &pNode);
21,177✔
519
      break;
21,177✔
520
    case QUERY_NODE_CREATE_SUBTABLE_CLAUSE:
136,222✔
521
      code = makeNode(type, sizeof(SCreateSubTableClause), &pNode);
136,222✔
522
      break;
136,256✔
523
    case QUERY_NODE_CREATE_VIRTUAL_TABLE_STMT:
204✔
524
      code = makeNode(type, sizeof(SCreateVTableStmt), &pNode);
204✔
525
      break;
204✔
526
    case QUERY_NODE_CREATE_VIRTUAL_SUBTABLE_STMT:
228✔
527
      code = makeNode(type, sizeof(SCreateVSubTableStmt), &pNode);
228✔
528
      break;
228✔
529
    case QUERY_NODE_CREATE_SUBTABLE_FROM_FILE_CLAUSE:
2✔
530
      code = makeNode(type, sizeof(SCreateSubTableFromFileClause), &pNode);
2✔
531
      break;
2✔
532
    case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
101,184✔
533
      code = makeNode(type, sizeof(SCreateMultiTablesStmt), &pNode);
101,184✔
534
      break;
101,233✔
535
    case QUERY_NODE_DROP_TABLE_CLAUSE:
17,987✔
536
      code = makeNode(type, sizeof(SDropTableClause), &pNode);
17,987✔
537
      break;
17,987✔
538
    case QUERY_NODE_DROP_TABLE_STMT:
17,052✔
539
      code = makeNode(type, sizeof(SDropTableStmt), &pNode);
17,052✔
540
      break;
17,052✔
541
    case QUERY_NODE_DROP_SUPER_TABLE_STMT:
605✔
542
      code = makeNode(type, sizeof(SDropSuperTableStmt), &pNode);
605✔
543
      break;
605✔
544
    case QUERY_NODE_DROP_VIRTUAL_TABLE_STMT:
110✔
545
      code = makeNode(type, sizeof(SDropVirtualTableStmt), &pNode);
110✔
546
      break;
110✔
547
    case QUERY_NODE_ALTER_TABLE_STMT:
25,473✔
548
    case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
549
    case QUERY_NODE_ALTER_VIRTUAL_TABLE_STMT:
550
      code = makeNode(type, sizeof(SAlterTableStmt), &pNode);
25,473✔
551
      break;
25,473✔
552
    case QUERY_NODE_CREATE_USER_STMT:
311✔
553
      code = makeNode(type, sizeof(SCreateUserStmt), &pNode);
311✔
554
      break;
311✔
555
    case QUERY_NODE_ALTER_USER_STMT:
220✔
556
      code = makeNode(type, sizeof(SAlterUserStmt), &pNode);
220✔
557
      break;
220✔
558
    case QUERY_NODE_DROP_USER_STMT:
181✔
559
      code = makeNode(type, sizeof(SDropUserStmt), &pNode);
181✔
560
      break;
181✔
561
    case QUERY_NODE_USE_DATABASE_STMT:
8,651✔
562
      code = makeNode(type, sizeof(SUseDatabaseStmt), &pNode);
8,651✔
563
      break;
8,647✔
564
    case QUERY_NODE_CREATE_DNODE_STMT:
610✔
565
      code = makeNode(type, sizeof(SCreateDnodeStmt), &pNode);
610✔
566
      break;
610✔
567
    case QUERY_NODE_DROP_DNODE_STMT:
152✔
568
      code = makeNode(type, sizeof(SDropDnodeStmt), &pNode);
152✔
569
      break;
152✔
570
    case QUERY_NODE_ALTER_DNODE_STMT:
344✔
571
      code = makeNode(type, sizeof(SAlterDnodeStmt), &pNode);
344✔
572
      break;
344✔
573
    case QUERY_NODE_CREATE_ANODE_STMT:
2✔
574
      code = makeNode(type, sizeof(SCreateAnodeStmt), &pNode);
2✔
575
      break;
2✔
576
    case QUERY_NODE_DROP_ANODE_STMT:
2✔
577
      code = makeNode(type, sizeof(SDropAnodeStmt), &pNode);
2✔
578
      break;
2✔
579
    case QUERY_NODE_UPDATE_ANODE_STMT:
×
580
      code = makeNode(type, sizeof(SUpdateAnodeStmt), &pNode);
×
581
      break;
×
582
    case QUERY_NODE_CREATE_BNODE_STMT:
×
583
      code = makeNode(type, sizeof(SCreateBnodeStmt), &pNode);
×
584
      break;
×
585
    case QUERY_NODE_DROP_BNODE_STMT:
×
586
      code = makeNode(type, sizeof(SDropBnodeStmt), &pNode);
×
587
      break;
×
588
    case QUERY_NODE_BNODE_OPTIONS:
×
589
      code = makeNode(type, sizeof(SBnodeOptions), &pNode);
×
590
      break;
×
591
    case QUERY_NODE_CREATE_INDEX_STMT:
50✔
592
      code = makeNode(type, sizeof(SCreateIndexStmt), &pNode);
50✔
593
      break;
50✔
594
    case QUERY_NODE_DROP_INDEX_STMT:
33✔
595
      code = makeNode(type, sizeof(SDropIndexStmt), &pNode);
33✔
596
      break;
33✔
597
    case QUERY_NODE_CREATE_QNODE_STMT:
800✔
598
    case QUERY_NODE_CREATE_BACKUP_NODE_STMT:
599
    case QUERY_NODE_CREATE_SNODE_STMT:
600
    case QUERY_NODE_CREATE_MNODE_STMT:
601
      code = makeNode(type, sizeof(SCreateComponentNodeStmt), &pNode);
800✔
602
      break;
800✔
603
    case QUERY_NODE_DROP_QNODE_STMT:
75✔
604
    case QUERY_NODE_DROP_BACKUP_NODE_STMT:
605
    case QUERY_NODE_DROP_SNODE_STMT:
606
    case QUERY_NODE_DROP_MNODE_STMT:
607
      code = makeNode(type, sizeof(SDropComponentNodeStmt), &pNode);
75✔
608
      break;
75✔
609
    case QUERY_NODE_CREATE_TOPIC_STMT:
728✔
610
      code = makeNode(type, sizeof(SCreateTopicStmt), &pNode);
728✔
611
      break;
728✔
612
    case QUERY_NODE_DROP_TOPIC_STMT:
362✔
613
      code = makeNode(type, sizeof(SDropTopicStmt), &pNode);
362✔
614
      break;
362✔
615
    case QUERY_NODE_DROP_CGROUP_STMT:
32✔
616
      code = makeNode(type, sizeof(SDropCGroupStmt), &pNode);
32✔
617
      break;
32✔
618
    case QUERY_NODE_ALTER_LOCAL_STMT:
2,448✔
619
      code = makeNode(type, sizeof(SAlterLocalStmt), &pNode);
2,448✔
620
      break;
2,448✔
621
    case QUERY_NODE_EXPLAIN_STMT:
126,265✔
622
      code = makeNode(type, sizeof(SExplainStmt), &pNode);
126,265✔
623
      break;
126,265✔
624
    case QUERY_NODE_DESCRIBE_STMT:
4,584✔
625
      code = makeNode(type, sizeof(SDescribeStmt), &pNode);
4,584✔
626
      break;
4,584✔
627
    case QUERY_NODE_RESET_QUERY_CACHE_STMT:
8,020✔
628
      code = makeNode(type, sizeof(SNode), &pNode);
8,020✔
629
      break;
8,020✔
630
    case QUERY_NODE_COMPACT_DATABASE_STMT:
90✔
631
      code = makeNode(type, sizeof(SCompactDatabaseStmt), &pNode);
90✔
632
      break;
90✔
633
    case QUERY_NODE_COMPACT_VGROUPS_STMT:
×
634
      code = makeNode(type, sizeof(SCompactVgroupsStmt), &pNode);
×
635
      break;
×
636
    case QUERY_NODE_CREATE_FUNCTION_STMT:
39✔
637
      code = makeNode(type, sizeof(SCreateFunctionStmt), &pNode);
39✔
638
      break;
39✔
639
    case QUERY_NODE_DROP_FUNCTION_STMT:
3✔
640
      code = makeNode(type, sizeof(SDropFunctionStmt), &pNode);
3✔
641
      break;
3✔
642
    case QUERY_NODE_CREATE_STREAM_STMT:
1,360✔
643
      code = makeNode(type, sizeof(SCreateStreamStmt), &pNode);
1,360✔
644
      break;
1,360✔
645
    case QUERY_NODE_DROP_STREAM_STMT:
685✔
646
      code = makeNode(type, sizeof(SDropStreamStmt), &pNode);
685✔
647
      break;
685✔
648
    case QUERY_NODE_PAUSE_STREAM_STMT:
56✔
649
      code = makeNode(type, sizeof(SPauseStreamStmt), &pNode);
56✔
650
      break;
56✔
651
    case QUERY_NODE_RESUME_STREAM_STMT:
55✔
652
      code = makeNode(type, sizeof(SResumeStreamStmt), &pNode);
55✔
653
      break;
55✔
654
    case QUERY_NODE_RESET_STREAM_STMT:
×
655
      code = makeNode(type, sizeof(SResetStreamStmt), &pNode);
×
656
      break;
×
657
    case QUERY_NODE_BALANCE_VGROUP_STMT:
31✔
658
      code = makeNode(type, sizeof(SBalanceVgroupStmt), &pNode);
31✔
659
      break;
31✔
660
    case QUERY_NODE_ASSIGN_LEADER_STMT:
1✔
661
      code = makeNode(type, sizeof(SAssignLeaderStmt), &pNode);
1✔
662
      break;
1✔
663
    case QUERY_NODE_BALANCE_VGROUP_LEADER_STMT:
19✔
664
      code = makeNode(type, sizeof(SBalanceVgroupLeaderStmt), &pNode);
19✔
665
      break;
19✔
666
    case QUERY_NODE_BALANCE_VGROUP_LEADER_DATABASE_STMT:
1✔
667
      code = makeNode(type, sizeof(SBalanceVgroupLeaderStmt), &pNode);
1✔
668
      break;
1✔
669
    case QUERY_NODE_MERGE_VGROUP_STMT:
13✔
670
      code = makeNode(type, sizeof(SMergeVgroupStmt), &pNode);
13✔
671
      break;
13✔
672
    case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
105✔
673
      code = makeNode(type, sizeof(SRedistributeVgroupStmt), &pNode);
105✔
674
      break;
105✔
675
    case QUERY_NODE_SPLIT_VGROUP_STMT:
42✔
676
      code = makeNode(type, sizeof(SSplitVgroupStmt), &pNode);
42✔
677
      break;
42✔
678
    case QUERY_NODE_SYNCDB_STMT:
×
679
      break;
×
680
    case QUERY_NODE_GRANT_STMT:
771✔
681
      code = makeNode(type, sizeof(SGrantStmt), &pNode);
771✔
682
      break;
771✔
683
    case QUERY_NODE_REVOKE_STMT:
675✔
684
      code = makeNode(type, sizeof(SRevokeStmt), &pNode);
675✔
685
      break;
675✔
686
    case QUERY_NODE_ALTER_CLUSTER_STMT:
32✔
687
      code = makeNode(type, sizeof(SAlterClusterStmt), &pNode);
32✔
688
      break;
32✔
689
    case QUERY_NODE_SHOW_DNODES_STMT:
6,235✔
690
    case QUERY_NODE_SHOW_MNODES_STMT:
691
    case QUERY_NODE_SHOW_MODULES_STMT:
692
    case QUERY_NODE_SHOW_QNODES_STMT:
693
    case QUERY_NODE_SHOW_ANODES_STMT:
694
    case QUERY_NODE_SHOW_ANODES_FULL_STMT:
695
    case QUERY_NODE_SHOW_BNODES_STMT:
696
    case QUERY_NODE_SHOW_SNODES_STMT:
697
    case QUERY_NODE_SHOW_BACKUP_NODES_STMT:
698
    case QUERY_NODE_SHOW_ARBGROUPS_STMT:
699
    case QUERY_NODE_SHOW_CLUSTER_STMT:
700
    case QUERY_NODE_SHOW_DATABASES_STMT:
701
    case QUERY_NODE_SHOW_FUNCTIONS_STMT:
702
    case QUERY_NODE_SHOW_INDEXES_STMT:
703
    case QUERY_NODE_SHOW_STABLES_STMT:
704
    case QUERY_NODE_SHOW_STREAMS_STMT:
705
    case QUERY_NODE_SHOW_TABLES_STMT:
706
    case QUERY_NODE_SHOW_VTABLES_STMT:
707
    case QUERY_NODE_SHOW_USERS_STMT:
708
    case QUERY_NODE_SHOW_USERS_FULL_STMT:
709
    case QUERY_NODE_SHOW_LICENCES_STMT:
710
    case QUERY_NODE_SHOW_VGROUPS_STMT:
711
    case QUERY_NODE_SHOW_TOPICS_STMT:
712
    case QUERY_NODE_SHOW_CONSUMERS_STMT:
713
    case QUERY_NODE_SHOW_CONNECTIONS_STMT:
714
    case QUERY_NODE_SHOW_QUERIES_STMT:
715
    case QUERY_NODE_SHOW_VNODES_STMT:
716
    case QUERY_NODE_SHOW_APPS_STMT:
717
    case QUERY_NODE_SHOW_VARIABLES_STMT:
718
    case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
719
    case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
720
    case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
721
    case QUERY_NODE_SHOW_TAGS_STMT:
722
    case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
723
    case QUERY_NODE_SHOW_VIEWS_STMT:
724
    case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
725
    case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
726
    case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
727
    case QUERY_NODE_SHOW_ENCRYPTIONS_STMT:
728
    case QUERY_NODE_SHOW_TSMAS_STMT:
729
    case QUERY_NODE_SHOW_USAGE_STMT:
730
      code = makeNode(type, sizeof(SShowStmt), &pNode);
6,235✔
731
      break;
6,235✔
732
    case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
52✔
733
      code = makeNode(type, sizeof(SShowTableTagsStmt), &pNode);
52✔
734
      break;
52✔
735
    case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
365✔
736
      code = makeNode(type, sizeof(SShowDnodeVariablesStmt), &pNode);
365✔
737
      break;
365✔
738
    case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
41✔
739
      code = makeNode(type, sizeof(SShowCreateDatabaseStmt), &pNode);
41✔
740
      break;
41✔
741
    case QUERY_NODE_SHOW_DB_ALIVE_STMT:
25✔
742
    case QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT:
743
      code = makeNode(type, sizeof(SShowAliveStmt), &pNode);
25✔
744
      break;
25✔
745
    case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
391✔
746
    case QUERY_NODE_SHOW_CREATE_VTABLE_STMT:
747
    case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
748
      code = makeNode(type, sizeof(SShowCreateTableStmt), &pNode);
391✔
749
      break;
391✔
750
    case QUERY_NODE_SHOW_CREATE_VIEW_STMT:
18✔
751
      code = makeNode(type, sizeof(SShowCreateViewStmt), &pNode);
18✔
752
      break;
18✔
753
    case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
19✔
754
      code = makeNode(type, sizeof(SShowTableDistributedStmt), &pNode);
19✔
755
      break;
19✔
756
    case QUERY_NODE_SHOW_COMPACTS_STMT:
307✔
757
      code = makeNode(type, sizeof(SShowCompactsStmt), &pNode);
307✔
758
      break;
307✔
759
    case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT:
1✔
760
      code = makeNode(type, sizeof(SShowCompactDetailsStmt), &pNode);
1✔
761
      break;      
1✔
762
    case QUERY_NODE_SHOW_TRANSACTION_DETAILS_STMT:
×
763
      code = makeNode(type, sizeof(SShowTransactionDetailsStmt), &pNode); 
×
764
      break;
×
765
    case QUERY_NODE_KILL_QUERY_STMT:
×
766
      code = makeNode(type, sizeof(SKillQueryStmt), &pNode);
×
767
      break;
×
768
    case QUERY_NODE_KILL_TRANSACTION_STMT:
2✔
769
    case QUERY_NODE_KILL_CONNECTION_STMT:
770
    case QUERY_NODE_KILL_COMPACT_STMT:
771
      code = makeNode(type, sizeof(SKillStmt), &pNode);
2✔
772
      break;
2✔
773
    case QUERY_NODE_DELETE_STMT:
55,685✔
774
      code = makeNode(type, sizeof(SDeleteStmt), &pNode);
55,685✔
775
      break;
55,691✔
776
    case QUERY_NODE_INSERT_STMT:
159✔
777
      code = makeNode(type, sizeof(SInsertStmt), &pNode);
159✔
778
      break;
159✔
779
    case QUERY_NODE_QUERY:
11,080,490✔
780
      code = makeNode(type, sizeof(SQuery), &pNode);
11,080,490✔
781
      break;
11,080,163✔
782
    case QUERY_NODE_RESTORE_DNODE_STMT:
62✔
783
    case QUERY_NODE_RESTORE_QNODE_STMT:
784
    case QUERY_NODE_RESTORE_MNODE_STMT:
785
    case QUERY_NODE_RESTORE_VNODE_STMT:
786
      code = makeNode(type, sizeof(SRestoreComponentNodeStmt), &pNode);
62✔
787
      break;
62✔
788
    case QUERY_NODE_CREATE_VIEW_STMT:
284✔
789
      code = makeNode(type, sizeof(SCreateViewStmt), &pNode);
284✔
790
      break;
284✔
791
    case QUERY_NODE_DROP_VIEW_STMT:
188✔
792
      code = makeNode(type, sizeof(SDropViewStmt), &pNode);
188✔
793
      break;
188✔
794
    case QUERY_NODE_CREATE_TSMA_STMT:
323✔
795
      code = makeNode(type, sizeof(SCreateTSMAStmt), &pNode);
323✔
796
      break;
323✔
797
    case QUERY_NODE_DROP_TSMA_STMT:
144✔
798
      code = makeNode(type, sizeof(SDropTSMAStmt), &pNode);
144✔
799
      break;
144✔
800
    case QUERY_NODE_TSMA_OPTIONS:
343✔
801
      code = makeNode(type, sizeof(STSMAOptions), &pNode);
343✔
802
      break;
343✔
803
    case QUERY_NODE_LOGIC_PLAN_SCAN:
3,239,615✔
804
      code = makeNode(type, sizeof(SScanLogicNode), &pNode);
3,239,615✔
805
      break;
3,239,662✔
806
    case QUERY_NODE_LOGIC_PLAN_JOIN:
309,999✔
807
      code = makeNode(type, sizeof(SJoinLogicNode), &pNode);
309,999✔
808
      break;
309,999✔
809
    case QUERY_NODE_LOGIC_PLAN_AGG:
1,694,495✔
810
      code = makeNode(type, sizeof(SAggLogicNode), &pNode);
1,694,495✔
811
      break;
1,694,562✔
812
    case QUERY_NODE_LOGIC_PLAN_PROJECT:
2,103,430✔
813
      code = makeNode(type, sizeof(SProjectLogicNode), &pNode);
2,103,430✔
814
      break;
2,103,484✔
815
    case QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY:
19,798,378✔
816
      code = makeNode(type, sizeof(SVnodeModifyLogicNode), &pNode);
19,798,378✔
817
      break;
19,836,599✔
818
    case QUERY_NODE_LOGIC_PLAN_EXCHANGE:
1,317,383✔
819
      code = makeNode(type, sizeof(SExchangeLogicNode), &pNode);
1,317,383✔
820
      break;
1,317,383✔
821
    case QUERY_NODE_LOGIC_PLAN_MERGE:
282,895✔
822
      code = makeNode(type, sizeof(SMergeLogicNode), &pNode);
282,895✔
823
      break;
282,895✔
824
    case QUERY_NODE_LOGIC_PLAN_WINDOW:
179,220✔
825
      code = makeNode(type, sizeof(SWindowLogicNode), &pNode);
179,220✔
826
      break;
179,219✔
827
    case QUERY_NODE_LOGIC_PLAN_FILL:
27,171✔
828
      code = makeNode(type, sizeof(SFillLogicNode), &pNode);
27,171✔
829
      break;
27,171✔
830
    case QUERY_NODE_LOGIC_PLAN_SORT:
604,174✔
831
      code = makeNode(type, sizeof(SSortLogicNode), &pNode);
604,174✔
832
      break;
604,174✔
833
    case QUERY_NODE_LOGIC_PLAN_PARTITION:
119,658✔
834
      code = makeNode(type, sizeof(SPartitionLogicNode), &pNode);
119,658✔
835
      break;
119,658✔
836
    case QUERY_NODE_LOGIC_PLAN_INDEF_ROWS_FUNC:
94,544✔
837
      code = makeNode(type, sizeof(SIndefRowsFuncLogicNode), &pNode);
94,544✔
838
      break;
94,544✔
839
    case QUERY_NODE_LOGIC_PLAN_INTERP_FUNC:
28,978✔
840
      code = makeNode(type, sizeof(SInterpFuncLogicNode), &pNode);
28,978✔
841
      break;
28,985✔
842
    case QUERY_NODE_LOGIC_PLAN_FORECAST_FUNC:
82✔
843
      code = makeNode(type, sizeof(SForecastFuncLogicNode), &pNode);
82✔
844
      break;
82✔
845
    case QUERY_NODE_LOGIC_PLAN_GROUP_CACHE:
37,928✔
846
      code = makeNode(type, sizeof(SGroupCacheLogicNode), &pNode);
37,928✔
847
      break;
37,928✔
848
    case QUERY_NODE_LOGIC_PLAN_DYN_QUERY_CTRL:
44,654✔
849
      code = makeNode(type, sizeof(SDynQueryCtrlLogicNode), &pNode);
44,654✔
850
      break;
44,654✔
851
    case QUERY_NODE_LOGIC_PLAN_VIRTUAL_TABLE_SCAN:
20,875✔
852
      code = makeNode(type, sizeof(SVirtualScanLogicNode), &pNode);
20,875✔
853
      break;
20,875✔
854
    case QUERY_NODE_LOGIC_SUBPLAN:
23,987,513✔
855
      code = makeNode(type, sizeof(SLogicSubplan), &pNode);
23,987,513✔
856
      break;
24,044,425✔
857
    case QUERY_NODE_LOGIC_PLAN:
10,752,206✔
858
      code = makeNode(type, sizeof(SQueryLogicPlan), &pNode);
10,752,206✔
859
      break;
10,810,763✔
860
    case QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN:
125,145✔
861
      code = makeNode(type, sizeof(STagScanPhysiNode), &pNode);
125,145✔
862
      break;
125,213✔
863
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN:
4,473,775✔
864
      code = makeNode(type, sizeof(STableScanPhysiNode), &pNode);
4,473,775✔
865
      break;
4,473,528✔
866
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN:
×
867
      code = makeNode(type, sizeof(STableSeqScanPhysiNode), &pNode);
×
868
      break;
×
869
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN:
2,250,193✔
870
      code = makeNode(type, sizeof(STableMergeScanPhysiNode), &pNode);
2,250,193✔
871
      break;
2,251,105✔
872
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN:
13,992✔
873
      code = makeNode(type, sizeof(SStreamScanPhysiNode), &pNode);
13,992✔
874
      break;
13,990✔
875
    case QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN:
1,339,263✔
876
      code = makeNode(type, sizeof(SSystemTableScanPhysiNode), &pNode);
1,339,263✔
877
      break;
1,338,295✔
878
    case QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN:
3,281✔
879
      code = makeNode(type, sizeof(SBlockDistScanPhysiNode), &pNode);
3,281✔
880
      break;
3,274✔
881
    case QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN:
35,851✔
882
      code = makeNode(type, sizeof(SLastRowScanPhysiNode), &pNode);
35,851✔
883
      break;
35,851✔
884
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN:
×
885
      code = makeNode(type, sizeof(STableCountScanPhysiNode), &pNode);
×
886
      break;
×
887
    case QUERY_NODE_PHYSICAL_PLAN_PROJECT:
2,619,617✔
888
      code = makeNode(type, sizeof(SProjectPhysiNode), &pNode);
2,619,617✔
889
      break;
2,620,598✔
890
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN:
225,422✔
891
      code = makeNode(type, sizeof(SSortMergeJoinPhysiNode), &pNode);
225,422✔
892
      break;
225,415✔
893
    case QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN:
28,242✔
894
      code = makeNode(type, sizeof(SHashJoinPhysiNode), &pNode);
28,242✔
895
      break;
28,242✔
896
    case QUERY_NODE_PHYSICAL_PLAN_HASH_AGG:
3,488,215✔
897
      code = makeNode(type, sizeof(SAggPhysiNode), &pNode);
3,488,215✔
898
      break;
3,489,072✔
899
    case QUERY_NODE_PHYSICAL_PLAN_EXCHANGE:
4,634,630✔
900
      code = makeNode(type, sizeof(SExchangePhysiNode), &pNode);
4,634,630✔
901
      break;
4,634,672✔
902
    case QUERY_NODE_PHYSICAL_PLAN_MERGE:
1,480,095✔
903
      code = makeNode(type, sizeof(SMergePhysiNode), &pNode);
1,480,095✔
904
      break;
1,480,118✔
905
    case QUERY_NODE_PHYSICAL_PLAN_SORT:
1,095,979✔
906
      code = makeNode(type, sizeof(SSortPhysiNode), &pNode);
1,095,979✔
907
      break;
1,096,107✔
908
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT:
526✔
909
      code = makeNode(type, sizeof(SGroupSortPhysiNode), &pNode);
526✔
910
      break;
526✔
911
    case QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL:
1,562,622✔
912
      code = makeNode(type, sizeof(SIntervalPhysiNode), &pNode);
1,562,622✔
913
      break;
1,562,648✔
914
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL:
×
915
      code = makeNode(type, sizeof(SMergeIntervalPhysiNode), &pNode);
×
916
      break;
×
917
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL:
549,603✔
918
      code = makeNode(type, sizeof(SMergeAlignedIntervalPhysiNode), &pNode);
549,603✔
919
      break;
549,602✔
920
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL:
3,186✔
921
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_INTERVAL:
922
      code = makeNode(type, sizeof(SStreamIntervalPhysiNode), &pNode);
3,186✔
923
      break;
3,186✔
924
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL:
727✔
925
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_FINAL_INTERVAL:
926
      code = makeNode(type, sizeof(SStreamFinalIntervalPhysiNode), &pNode);
727✔
927
      break;
727✔
928
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL:
1,519✔
929
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_SEMI_INTERVAL:
930
      code = makeNode(type, sizeof(SStreamSemiIntervalPhysiNode), &pNode);
1,519✔
931
      break;
1,519✔
932
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL:
361✔
933
      code = makeNode(type, sizeof(SStreamMidIntervalPhysiNode), &pNode);
361✔
934
      break;
361✔
935
    case QUERY_NODE_PHYSICAL_PLAN_FILL:
506,759✔
936
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FILL:
937
      code = makeNode(type, sizeof(SFillPhysiNode), &pNode);
506,759✔
938
      break;
506,761✔
939
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION:
110,816✔
940
      code = makeNode(type, sizeof(SSessionWinodwPhysiNode), &pNode);
110,816✔
941
      break;
110,819✔
942
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION:
964✔
943
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_SESSION:
944
      code = makeNode(type, sizeof(SStreamSessionWinodwPhysiNode), &pNode);
964✔
945
      break;
964✔
946
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION:
182✔
947
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_SEMI_SESSION:
948
      code = makeNode(type, sizeof(SStreamSemiSessionWinodwPhysiNode), &pNode);
182✔
949
      break;
182✔
950
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION:
100✔
951
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_FINAL_SESSION:
952
      code = makeNode(type, sizeof(SStreamFinalSessionWinodwPhysiNode), &pNode);
100✔
953
      break;
100✔
954
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE:
81,223✔
955
      code = makeNode(type, sizeof(SStateWinodwPhysiNode), &pNode);
81,223✔
956
      break;
81,223✔
957
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE:
549✔
958
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_STATE:
959
      code = makeNode(type, sizeof(SStreamStateWinodwPhysiNode), &pNode);
549✔
960
      break;
549✔
961
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_EVENT:
278,233✔
962
      code = makeNode(type, sizeof(SEventWinodwPhysiNode), &pNode);
278,233✔
963
      break;
278,236✔
964
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT:
157✔
965
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_EVENT:
966
      code = makeNode(type, sizeof(SStreamEventWinodwPhysiNode), &pNode);
157✔
967
      break;
157✔
968
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_COUNT:
4,337✔
969
      code = makeNode(type, sizeof(SCountWinodwPhysiNode), &pNode);
4,337✔
970
      break;
4,341✔
971
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ANOMALY:
24✔
972
      code = makeNode(type, sizeof(SAnomalyWindowPhysiNode), &pNode);
24✔
973
      break;
24✔
974
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_COUNT:
328✔
975
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_COUNT:
976
      code = makeNode(type, sizeof(SStreamCountWinodwPhysiNode), &pNode);
328✔
977
      break;
328✔
978
    case QUERY_NODE_PHYSICAL_PLAN_PARTITION:
46,397✔
979
      code = makeNode(type, sizeof(SPartitionPhysiNode), &pNode);
46,397✔
980
      break;
46,407✔
981
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION:
1,631✔
982
      code = makeNode(type, sizeof(SStreamPartitionPhysiNode), &pNode);
1,631✔
983
      break;
1,631✔
984
    case QUERY_NODE_PHYSICAL_PLAN_INDEF_ROWS_FUNC:
156,901✔
985
      code = makeNode(type, sizeof(SIndefRowsFuncPhysiNode), &pNode);
156,901✔
986
      break;
156,903✔
987
    case QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC:
92,387✔
988
      code = makeNode(type, sizeof(SInterpFuncLogicNode), &pNode);
92,387✔
989
      break;
92,393✔
990
    case QUERY_NODE_PHYSICAL_PLAN_FORECAST_FUNC:
82✔
991
      code = makeNode(type, sizeof(SForecastFuncLogicNode), &pNode);
82✔
992
      break;
82✔
993
    case QUERY_NODE_PHYSICAL_PLAN_DISPATCH:
10,922,581✔
994
      code = makeNode(type, sizeof(SDataDispatcherNode), &pNode);
10,922,581✔
995
      break;
10,928,391✔
996
    case QUERY_NODE_PHYSICAL_PLAN_INSERT:
9,874,370✔
997
      code = makeNode(type, sizeof(SDataInserterNode), &pNode);
9,874,370✔
998
      break;
9,884,325✔
999
    case QUERY_NODE_PHYSICAL_PLAN_QUERY_INSERT:
273✔
1000
      code = makeNode(type, sizeof(SQueryInserterNode), &pNode);
273✔
1001
      break;
273✔
1002
    case QUERY_NODE_PHYSICAL_PLAN_DELETE:
113,480✔
1003
      code = makeNode(type, sizeof(SDataDeleterNode), &pNode);
113,480✔
1004
      break;
113,497✔
1005
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE:
28,242✔
1006
      code = makeNode(type, sizeof(SGroupCachePhysiNode), &pNode);
28,242✔
1007
      break;
28,242✔
1008
    case QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL:
32,738✔
1009
      code = makeNode(type, sizeof(SDynQueryCtrlPhysiNode), &pNode);
32,738✔
1010
      break;
32,738✔
1011
    case QUERY_NODE_PHYSICAL_SUBPLAN:
20,854,737✔
1012
      code = makeNode(type, sizeof(SSubplan), &pNode);
20,854,737✔
1013
      break;
20,882,776✔
1014
    case QUERY_NODE_PHYSICAL_PLAN:
10,784,752✔
1015
      code = makeNode(type, sizeof(SQueryPlan), &pNode);
10,784,752✔
1016
      break;
10,785,175✔
1017
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERP_FUNC:
510✔
1018
      code = makeNode(type, sizeof(SStreamInterpFuncPhysiNode), &pNode);
510✔
1019
      break;
510✔
1020
    case QUERY_NODE_PHYSICAL_PLAN_VIRTUAL_TABLE_SCAN:
11,338✔
1021
      code = makeNode(type, sizeof(SVirtualScanPhysiNode), &pNode);
11,338✔
1022
      break;
11,338✔
1023
    case QUERY_NODE_SHOW_SCORES_STMT:
×
1024
      code = TSDB_CODE_OPS_NOT_SUPPORT;
×
1025
      break;
×
1026
    default:
×
1027
      break;
×
1028
  }
1029
  if (TSDB_CODE_SUCCESS != code) {
1,340,695,455!
1030
    nodesError("nodesMakeNode unknown node = %s", nodesNodeName(type));
×
1031
  }
1032
  else
1033
    *ppNodeOut = pNode;
1,340,695,455✔
1034
  return code;
1,338,186,554✔
1035
}
1036

1037
static void destroyVgDataBlockArray(SArray* pArray) {
29,643,330✔
1038
  size_t size = taosArrayGetSize(pArray);
29,643,330✔
1039
  for (size_t i = 0; i < size; ++i) {
39,544,204✔
1040
    SVgDataBlocks* pVg = taosArrayGetP(pArray, i);
9,870,009✔
1041
    taosMemoryFreeClear(pVg->pData);
9,887,046!
1042
    taosMemoryFreeClear(pVg);
9,864,920!
1043
  }
1044
  taosArrayDestroy(pArray);
29,674,195✔
1045
}
29,680,823✔
1046

1047
static void destroyLogicNode(SLogicNode* pNode) {
29,901,429✔
1048
  nodesDestroyList(pNode->pTargets);
29,901,429✔
1049
  nodesDestroyNode(pNode->pConditions);
29,904,111✔
1050
  nodesDestroyList(pNode->pChildren);
29,917,999✔
1051
  nodesDestroyNode(pNode->pLimit);
29,916,853✔
1052
  nodesDestroyNode(pNode->pSlimit);
29,919,167✔
1053
  nodesDestroyList(pNode->pHint);
29,925,865✔
1054
}
29,923,256✔
1055

1056
static void destroyPhysiNode(SPhysiNode* pNode) {
25,294,954✔
1057
  nodesDestroyList(pNode->pChildren);
25,294,954✔
1058
  nodesDestroyNode(pNode->pConditions);
25,298,699✔
1059
  nodesDestroyNode((SNode*)pNode->pOutputDataBlockDesc);
25,299,762✔
1060
  nodesDestroyNode(pNode->pLimit);
25,302,890✔
1061
  nodesDestroyNode(pNode->pSlimit);
25,302,401✔
1062
}
25,301,275✔
1063

1064
static void destroyWinodwPhysiNode(SWindowPhysiNode* pNode) {
2,596,691✔
1065
  destroyPhysiNode((SPhysiNode*)pNode);
2,596,691✔
1066
  nodesDestroyList(pNode->pExprs);
2,597,451✔
1067
  nodesDestroyList(pNode->pFuncs);
2,597,451✔
1068
  nodesDestroyNode(pNode->pTspk);
2,597,496✔
1069
  nodesDestroyNode(pNode->pTsEnd);
2,597,491✔
1070
}
2,597,487✔
1071

1072
static void destroyPartitionPhysiNode(SPartitionPhysiNode* pNode) {
48,050✔
1073
  destroyPhysiNode((SPhysiNode*)pNode);
48,050✔
1074
  nodesDestroyList(pNode->pExprs);
48,052✔
1075
  nodesDestroyList(pNode->pPartitionKeys);
48,052✔
1076
  nodesDestroyList(pNode->pTargets);
48,052✔
1077
}
48,051✔
1078

1079
static void destroyScanPhysiNode(SScanPhysiNode* pNode) {
8,260,520✔
1080
  destroyPhysiNode((SPhysiNode*)pNode);
8,260,520✔
1081
  nodesDestroyList(pNode->pScanCols);
8,263,721✔
1082
  nodesDestroyList(pNode->pScanPseudoCols);
8,264,093✔
1083
}
8,264,063✔
1084

1085
static void destroyDataSinkNode(SDataSinkNode* pNode) { nodesDestroyNode((SNode*)pNode->pInputDataBlockDesc); }
20,965,564✔
1086

1087
static void destroyExprNode(SExprNode* pExpr) { taosArrayDestroy(pExpr->pAssociation); }
880,709,238✔
1088

1089
static void destroyTableCfg(STableCfg* pCfg) {
391✔
1090
  if (NULL == pCfg) {
391✔
1091
    return;
48✔
1092
  }
1093
  taosArrayDestroy(pCfg->pFuncs);
343✔
1094
  taosMemoryFree(pCfg->pComment);
343!
1095
  taosMemoryFree(pCfg->pSchemas);
343!
1096
  taosMemoryFree(pCfg->pSchemaExt);
343!
1097
  taosMemoryFree(pCfg->pColRefs);
343!
1098
  taosMemoryFree(pCfg->pTags);
343!
1099
  taosMemoryFree(pCfg);
343!
1100
}
1101

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

1104
void destroyFuncParam(void* pValue) { taosMemoryFree(((SFunctParam*)pValue)->pCol); }
14,530!
1105

1106
static void destroyHintValue(EHintOption option, void* value) {
62,825✔
1107
  switch (option) {
1108
    default:
1109
      break;
62,825✔
1110
  }
1111

1112
  taosMemoryFree(value);
62,825!
1113
}
62,825✔
1114

1115
void nodesDestroyNode(SNode* pNode) {
1,770,990,140✔
1116
  if (NULL == pNode) {
1,770,990,140✔
1117
    return;
411,419,751✔
1118
  }
1119

1120
  switch (nodeType(pNode)) {
1,359,570,389!
1121
    case QUERY_NODE_COLUMN:
215,130,207✔
1122
      destroyExprNode((SExprNode*)pNode);
215,130,207✔
1123
      break;
215,119,837✔
1124
    case QUERY_NODE_VALUE: {
592,169,828✔
1125
      SValueNode* pValue = (SValueNode*)pNode;
592,169,828✔
1126
      destroyExprNode((SExprNode*)pNode);
592,169,828✔
1127
      taosMemoryFreeClear(pValue->literal);
591,600,706✔
1128
      if (IS_VAR_DATA_TYPE(pValue->node.resType.type) || pValue->node.resType.type == TSDB_DATA_TYPE_DECIMAL) {
594,969,042!
1129
        taosMemoryFreeClear(pValue->datum.p);
6,128,471!
1130
      }
1131
      break;
594,969,067✔
1132
    }
1133
    case QUERY_NODE_OPERATOR: {
28,957,543✔
1134
      SOperatorNode* pOp = (SOperatorNode*)pNode;
28,957,543✔
1135
      destroyExprNode((SExprNode*)pNode);
28,957,543✔
1136
      nodesDestroyNode(pOp->pLeft);
28,956,987✔
1137
      nodesDestroyNode(pOp->pRight);
28,959,434✔
1138
      break;
28,960,410✔
1139
    }
1140
    case QUERY_NODE_LOGIC_CONDITION:
9,026,647✔
1141
      destroyExprNode((SExprNode*)pNode);
9,026,647✔
1142
      nodesDestroyList(((SLogicConditionNode*)pNode)->pParameterList);
9,026,706✔
1143
      break;
9,027,881✔
1144
    case QUERY_NODE_FUNCTION:
36,739,861✔
1145
      destroyExprNode((SExprNode*)pNode);
36,739,861✔
1146
      nodesDestroyList(((SFunctionNode*)pNode)->pParameterList);
36,739,551✔
1147
      break;
36,740,360✔
1148
    case QUERY_NODE_REAL_TABLE: {
1,713,272✔
1149
      SRealTableNode* pReal = (SRealTableNode*)pNode;
1,713,272✔
1150
      taosMemoryFreeClear(pReal->pMeta);
1,713,272!
1151
      taosMemoryFreeClear(pReal->pVgroupList);
1,713,280!
1152
      taosArrayDestroyEx(pReal->pSmaIndexes, destroySmaIndex);
1,713,280✔
1153
      taosArrayDestroyP(pReal->tsmaTargetTbVgInfo, NULL);
1,713,283✔
1154
      taosArrayDestroy(pReal->tsmaTargetTbInfo);
1,713,267✔
1155
      break;
1,713,235✔
1156
    }
1157
    case QUERY_NODE_VIRTUAL_TABLE: {
9,650✔
1158
      SVirtualTableNode *pVirtual = (SVirtualTableNode*)pNode;
9,650✔
1159
      taosMemoryFreeClear(pVirtual->pMeta);
9,650!
1160
      taosMemoryFreeClear(pVirtual->pVgroupList);
9,650!
1161
      nodesDestroyList(pVirtual->refTables);
9,650✔
1162
      break;
9,650✔
1163
    }
1164
    case QUERY_NODE_TEMP_TABLE:
311,088✔
1165
      nodesDestroyNode(((STempTableNode*)pNode)->pSubquery);
311,088✔
1166
      break;
311,088✔
1167
    case QUERY_NODE_JOIN_TABLE: {
140,227✔
1168
      SJoinTableNode* pJoin = (SJoinTableNode*)pNode;
140,227✔
1169
      nodesDestroyNode(pJoin->pWindowOffset);
140,227✔
1170
      nodesDestroyNode(pJoin->pJLimit);
140,227✔
1171
      nodesDestroyNode(pJoin->addPrimCond);
140,227✔
1172
      nodesDestroyNode(pJoin->pLeft);
140,227✔
1173
      nodesDestroyNode(pJoin->pRight);
140,227✔
1174
      nodesDestroyNode(pJoin->pOnCond);
140,227✔
1175
      break;
140,227✔
1176
    }
1177
    case QUERY_NODE_GROUPING_SET:
901,413✔
1178
      nodesDestroyList(((SGroupingSetNode*)pNode)->pParameterList);
901,413✔
1179
      break;
901,409✔
1180
    case QUERY_NODE_ORDER_BY_EXPR:
4,683,076✔
1181
      nodesDestroyNode(((SOrderByExprNode*)pNode)->pExpr);
4,683,076✔
1182
      break;
4,683,117✔
1183
    case QUERY_NODE_LIMIT: {
1,364,373✔
1184
      SLimitNode* pLimit = (SLimitNode*)pNode;
1,364,373✔
1185
      nodesDestroyNode((SNode*)pLimit->limit);
1,364,373✔
1186
      nodesDestroyNode((SNode*)pLimit->offset);
1,364,408✔
1187
      break;
1,364,409✔
1188
    }
1189
    case QUERY_NODE_STATE_WINDOW: {
7,013✔
1190
      SStateWindowNode* pState = (SStateWindowNode*)pNode;
7,013✔
1191
      nodesDestroyNode(pState->pCol);
7,013✔
1192
      nodesDestroyNode(pState->pExpr);
7,013✔
1193
      nodesDestroyNode(pState->pTrueForLimit);
7,013✔
1194
      break;
7,013✔
1195
    }
1196
    case QUERY_NODE_SESSION_WINDOW: {
7,151✔
1197
      SSessionWindowNode* pSession = (SSessionWindowNode*)pNode;
7,151✔
1198
      nodesDestroyNode((SNode*)pSession->pCol);
7,151✔
1199
      nodesDestroyNode((SNode*)pSession->pGap);
7,151✔
1200
      break;
7,151✔
1201
    }
1202
    case QUERY_NODE_INTERVAL_WINDOW: {
31,344✔
1203
      SIntervalWindowNode* pJoin = (SIntervalWindowNode*)pNode;
31,344✔
1204
      nodesDestroyNode(pJoin->pCol);
31,344✔
1205
      nodesDestroyNode(pJoin->pInterval);
31,344✔
1206
      nodesDestroyNode(pJoin->pOffset);
31,344✔
1207
      nodesDestroyNode(pJoin->pSliding);
31,344✔
1208
      nodesDestroyNode(pJoin->pFill);
31,344✔
1209
      break;
31,344✔
1210
    }
1211
    case QUERY_NODE_NODE_LIST:
15,076,014✔
1212
      nodesDestroyList(((SNodeListNode*)pNode)->pNodeList);
15,076,014✔
1213
      break;
15,088,067✔
1214
    case QUERY_NODE_FILL: {
25,446✔
1215
      SFillNode* pFill = (SFillNode*)pNode;
25,446✔
1216
      nodesDestroyNode(pFill->pValues);
25,446✔
1217
      nodesDestroyNode(pFill->pWStartTs);
25,446✔
1218
      break;
25,446✔
1219
    }
1220
    case QUERY_NODE_RAW_EXPR:
14,353,991✔
1221
      nodesDestroyNode(((SRawExprNode*)pNode)->pNode);
14,353,991✔
1222
      break;
14,354,056✔
1223
    case QUERY_NODE_TARGET:
84,291,781✔
1224
      nodesDestroyNode(((STargetNode*)pNode)->pExpr);
84,291,781✔
1225
      break;
84,332,127✔
1226
    case QUERY_NODE_DATABLOCK_DESC:
36,335,181✔
1227
      nodesDestroyList(((SDataBlockDescNode*)pNode)->pSlots);
36,335,181✔
1228
      break;
36,345,025✔
1229
    case QUERY_NODE_SLOT_DESC:  // no pointer field
152,868,606✔
1230
      break;
152,868,606✔
1231
    case QUERY_NODE_COLUMN_DEF:
637,201✔
1232
      nodesDestroyNode(((SColumnDefNode*)pNode)->pOptions);
637,201✔
1233
      break;
637,201✔
1234
    case QUERY_NODE_DOWNSTREAM_SOURCE:  // no pointer field
6,469,366✔
1235
      break;
6,469,366✔
1236
    case QUERY_NODE_DATABASE_OPTIONS: {
6,570✔
1237
      SDatabaseOptions* pOptions = (SDatabaseOptions*)pNode;
6,570✔
1238
      nodesDestroyNode((SNode*)pOptions->pDaysPerFile);
6,570✔
1239
      nodesDestroyNode((SNode*)pOptions->s3KeepLocalStr);
6,570✔
1240
      nodesDestroyList(pOptions->pKeep);
6,570✔
1241
      nodesDestroyList(pOptions->pRetentions);
6,570✔
1242
      nodesDestroyNode((SNode*)pOptions->pCompactIntervalNode);
6,570✔
1243
      nodesDestroyList(pOptions->pCompactTimeRangeList);
6,570✔
1244
      nodesDestroyNode((SNode*)pOptions->pCompactTimeOffsetNode);
6,570✔
1245
      nodesDestroyNode((SNode*)pOptions->pKeepTimeOffsetNode);
6,570✔
1246
      break;
6,570✔
1247
    }
1248
    case QUERY_NODE_TABLE_OPTIONS: {
157,520✔
1249
      STableOptions* pOptions = (STableOptions*)pNode;
157,520✔
1250
      nodesDestroyList(pOptions->pMaxDelay);
157,520✔
1251
      nodesDestroyList(pOptions->pWatermark);
157,561✔
1252
      nodesDestroyList(pOptions->pRollupFuncs);
157,583✔
1253
      nodesDestroyList(pOptions->pSma);
157,582✔
1254
      nodesDestroyList(pOptions->pDeleteMark);
157,580✔
1255
      nodesDestroyNode((SNode*)pOptions->pKeepNode);
157,576✔
1256
      break;
157,587✔
1257
    }
1258
    case QUERY_NODE_COLUMN_OPTIONS: {
604,139✔
1259
      SColumnOptions* pOptions = (SColumnOptions*)pNode;
604,139✔
1260
      break;
604,139✔
1261
    }
1262
    case QUERY_NODE_INDEX_OPTIONS: {
28✔
1263
      SIndexOptions* pOptions = (SIndexOptions*)pNode;
28✔
1264
      nodesDestroyList(pOptions->pFuncs);
28✔
1265
      nodesDestroyNode(pOptions->pInterval);
28✔
1266
      nodesDestroyNode(pOptions->pOffset);
28✔
1267
      nodesDestroyNode(pOptions->pSliding);
28✔
1268
      nodesDestroyNode(pOptions->pStreamOptions);
28✔
1269
      break;
28✔
1270
    }
1271
    case QUERY_NODE_EXPLAIN_OPTIONS:  // no pointer field
127,177✔
1272
      break;
127,177✔
1273
    case QUERY_NODE_STREAM_OPTIONS: {
1,409✔
1274
      SStreamOptions* pOptions = (SStreamOptions*)pNode;
1,409✔
1275
      nodesDestroyNode(pOptions->pDelay);
1,409✔
1276
      nodesDestroyNode(pOptions->pWatermark);
1,409✔
1277
      nodesDestroyNode(pOptions->pDeleteMark);
1,409✔
1278
      nodesDestroyNode(pOptions->pRecInterval);
1,409✔
1279
      break;
1,409✔
1280
    }
1281
    case QUERY_NODE_TSMA_OPTIONS: {
343✔
1282
      STSMAOptions* pOptions = (STSMAOptions*)pNode;
343✔
1283
      nodesDestroyList(pOptions->pFuncs);
343✔
1284
      nodesDestroyNode(pOptions->pInterval);
343✔
1285
      break;
343✔
1286
    }
1287
    case QUERY_NODE_LEFT_VALUE:  // no pointer field
329,265✔
1288
    case QUERY_NODE_COLUMN_REF:  // no pointer field
1289
      break;
329,265✔
1290
    case QUERY_NODE_WHEN_THEN: {
53,236✔
1291
      SWhenThenNode* pWhenThen = (SWhenThenNode*)pNode;
53,236✔
1292
      destroyExprNode((SExprNode*)pNode);
53,236✔
1293
      nodesDestroyNode(pWhenThen->pWhen);
53,236✔
1294
      nodesDestroyNode(pWhenThen->pThen);
53,237✔
1295
      break;
53,237✔
1296
    }
1297
    case QUERY_NODE_CASE_WHEN: {
41,779✔
1298
      SCaseWhenNode* pCaseWhen = (SCaseWhenNode*)pNode;
41,779✔
1299
      destroyExprNode((SExprNode*)pNode);
41,779✔
1300
      nodesDestroyNode(pCaseWhen->pCase);
41,779✔
1301
      nodesDestroyNode(pCaseWhen->pElse);
41,779✔
1302
      nodesDestroyList(pCaseWhen->pWhenThenList);
41,779✔
1303
      break;
41,779✔
1304
    }
1305
    case QUERY_NODE_EVENT_WINDOW: {
1,184✔
1306
      SEventWindowNode* pEvent = (SEventWindowNode*)pNode;
1,184✔
1307
      nodesDestroyNode(pEvent->pCol);
1,184✔
1308
      nodesDestroyNode(pEvent->pStartCond);
1,184✔
1309
      nodesDestroyNode(pEvent->pEndCond);
1,184✔
1310
      nodesDestroyNode(pEvent->pTrueForLimit);
1,184✔
1311
      break;
1,184✔
1312
    }
1313
    case QUERY_NODE_COUNT_WINDOW: {
1,072✔
1314
      SCountWindowNode* pEvent = (SCountWindowNode*)pNode;
1,072✔
1315
      nodesDestroyNode(pEvent->pCol);
1,072✔
1316
      break;
1,072✔
1317
    }
1318
    case QUERY_NODE_ANOMALY_WINDOW: {
13✔
1319
      SAnomalyWindowNode* pAnomaly = (SAnomalyWindowNode*)pNode;
13✔
1320
      nodesDestroyNode(pAnomaly->pCol);
13✔
1321
      nodesDestroyNode(pAnomaly->pExpr);
13✔
1322
      break;
13✔
1323
    }
1324
    case QUERY_NODE_HINT: {
62,825✔
1325
      SHintNode* pHint = (SHintNode*)pNode;
62,825✔
1326
      destroyHintValue(pHint->option, pHint->value);
62,825✔
1327
      break;
62,825✔
1328
    }
1329
    case QUERY_NODE_VIEW: {
481✔
1330
      SViewNode* pView = (SViewNode*)pNode;
481✔
1331
      taosMemoryFreeClear(pView->pMeta);
481!
1332
      taosMemoryFreeClear(pView->pVgroupList);
481!
1333
      taosArrayDestroyEx(pView->pSmaIndexes, destroySmaIndex);
481✔
1334
      break;
481✔
1335
    }
1336
    case QUERY_NODE_WINDOW_OFFSET: {
5,125✔
1337
      SWindowOffsetNode* pWin = (SWindowOffsetNode*)pNode;
5,125✔
1338
      nodesDestroyNode(pWin->pStartOffset);
5,125✔
1339
      nodesDestroyNode(pWin->pEndOffset);
5,125✔
1340
      break;
5,125✔
1341
    }
1342
    case QUERY_NODE_RANGE_AROUND: {
5,282✔
1343
      SRangeAroundNode* pAround = (SRangeAroundNode*)pNode;
5,282✔
1344
      nodesDestroyNode(pAround->pInterval);
5,282✔
1345
      nodesDestroyNode(pAround->pRange);
5,282✔
1346
      break;
5,282✔
1347
    }
1348
    case QUERY_NODE_STREAM_NOTIFY_OPTIONS: {
23✔
1349
      SStreamNotifyOptions* pNotifyOptions = (SStreamNotifyOptions*)pNode;
23✔
1350
      nodesDestroyList(pNotifyOptions->pAddrUrls);
23✔
1351
      break;
23✔
1352
    }
1353
    case QUERY_NODE_SET_OPERATOR: {
85,047✔
1354
      SSetOperator* pStmt = (SSetOperator*)pNode;
85,047✔
1355
      nodesDestroyList(pStmt->pProjectionList);
85,047✔
1356
      nodesDestroyNode(pStmt->pLeft);
85,047✔
1357
      nodesDestroyNode(pStmt->pRight);
85,047✔
1358
      nodesDestroyList(pStmt->pOrderByList);
85,047✔
1359
      nodesDestroyNode(pStmt->pLimit);
85,047✔
1360
      break;
85,047✔
1361
    }
1362
    case QUERY_NODE_SELECT_STMT: {
1,511,504✔
1363
      SSelectStmt* pStmt = (SSelectStmt*)pNode;
1,511,504✔
1364
      nodesDestroyList(pStmt->pProjectionList);
1,511,504✔
1365
      nodesDestroyList(pStmt->pProjectionBindList);
1,511,506✔
1366
      nodesDestroyNode(pStmt->pFromTable);
1,511,509✔
1367
      nodesDestroyNode(pStmt->pWhere);
1,511,516✔
1368
      nodesDestroyList(pStmt->pPartitionByList);
1,511,512✔
1369
      nodesDestroyList(pStmt->pTags);
1,511,513✔
1370
      nodesDestroyNode(pStmt->pSubtable);
1,511,510✔
1371
      nodesDestroyNode(pStmt->pWindow);
1,511,511✔
1372
      nodesDestroyList(pStmt->pGroupByList);
1,511,513✔
1373
      nodesDestroyNode(pStmt->pHaving);
1,511,513✔
1374
      nodesDestroyNode(pStmt->pRange);
1,511,511✔
1375
      nodesDestroyNode(pStmt->pRangeAround);
1,511,512✔
1376
      nodesDestroyNode(pStmt->pEvery);
1,511,512✔
1377
      nodesDestroyNode(pStmt->pFill);
1,511,511✔
1378
      nodesDestroyList(pStmt->pOrderByList);
1,511,512✔
1379
      nodesDestroyNode((SNode*)pStmt->pLimit);
1,511,512✔
1380
      nodesDestroyNode((SNode*)pStmt->pSlimit);
1,511,513✔
1381
      nodesDestroyList(pStmt->pHint);
1,511,514✔
1382
      break;
1,511,514✔
1383
    }
1384
    case QUERY_NODE_VNODE_MODIFY_STMT: {
9,882,910✔
1385
      SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)pNode;
9,882,910✔
1386
      destroyVgDataBlockArray(pStmt->pDataBlocks);
9,882,910✔
1387
      taosMemoryFreeClear(pStmt->pTableMeta);
9,883,032!
1388
      nodesDestroyNode(pStmt->pTagCond);
9,882,445✔
1389
      taosArrayDestroy(pStmt->pTableTag);
9,882,365✔
1390
      taosHashCleanup(pStmt->pVgroupsHashObj);
9,882,134✔
1391
      taosHashCleanup(pStmt->pSubTableHashObj);
9,881,190✔
1392
      taosHashCleanup(pStmt->pSuperTableHashObj);
9,880,752✔
1393
      taosHashCleanup(pStmt->pTableNameHashObj);
9,880,185✔
1394
      taosHashCleanup(pStmt->pDbFNameHashObj);
9,879,626✔
1395
      taosHashCleanup(pStmt->pTableCxtHashObj);
9,880,075✔
1396
      if (pStmt->freeHashFunc) {
9,879,118✔
1397
        pStmt->freeHashFunc(pStmt->pTableBlockHashObj);
9,737,294✔
1398
      }
1399
      if (pStmt->freeArrayFunc) {
9,878,376✔
1400
        pStmt->freeArrayFunc(pStmt->pVgDataBlocks);
9,736,749✔
1401
      }
1402
      tdDestroySVCreateTbReq(pStmt->pCreateTblReq);
9,878,654✔
1403
      taosMemoryFreeClear(pStmt->pCreateTblReq);
9,878,654!
1404
      if (pStmt->freeStbRowsCxtFunc) {
9,878,654✔
1405
        pStmt->freeStbRowsCxtFunc(pStmt->pStbRowsCxt);
9,734,085✔
1406
      }
1407
      taosMemoryFreeClear(pStmt->pStbRowsCxt);
9,876,911!
1408

1409
      taosMemoryFreeClear(pStmt->pCreateTbInfo);
9,876,911!
1410

1411
      if (pStmt->destroyParseFileCxt) {
9,876,911✔
1412
        pStmt->destroyParseFileCxt(&pStmt->pParFileCxt);
2✔
1413
      }
1414

1415
      int32_t code = taosCloseFile(&pStmt->fp);
9,876,911✔
1416
      if (TSDB_CODE_SUCCESS != code) {
9,875,208!
1417
        nodesError("failed to close file %s:%d", __func__, __LINE__);
×
1418
      }
1419
      break;
9,875,132✔
1420
    }
1421
    case QUERY_NODE_CREATE_DATABASE_STMT: {
5,753✔
1422
      SDatabaseOptions* pOptions = ((SCreateDatabaseStmt*)pNode)->pOptions;
5,753✔
1423
      taosMemoryFreeClear(pOptions->pDbCfg);
5,753!
1424
      nodesDestroyNode((SNode*)pOptions);
5,753✔
1425
      break;
5,753✔
1426
    }
1427
    case QUERY_NODE_DROP_DATABASE_STMT:  // no pointer field
4,011✔
1428
      break;
4,011✔
1429
    case QUERY_NODE_ALTER_DATABASE_STMT: {
779✔
1430
      SDatabaseOptions* pOptions = ((SAlterDatabaseStmt*)pNode)->pOptions;
779✔
1431
      taosMemoryFreeClear(pOptions->pDbCfg);
779!
1432
      nodesDestroyNode((SNode*)pOptions);
779✔
1433
      break;
779✔
1434
    }
1435
    case QUERY_NODE_FLUSH_DATABASE_STMT:  // no pointer field
9,821✔
1436
    case QUERY_NODE_TRIM_DATABASE_STMT:   // no pointer field
1437
      break;
9,821✔
1438
    case QUERY_NODE_S3MIGRATE_DATABASE_STMT:  // no pointer field
6✔
1439
      break;
6✔
1440
    case QUERY_NODE_CREATE_TABLE_STMT: {
21,176✔
1441
      SCreateTableStmt* pStmt = (SCreateTableStmt*)pNode;
21,176✔
1442
      nodesDestroyList(pStmt->pCols);
21,176✔
1443
      nodesDestroyList(pStmt->pTags);
21,177✔
1444
      nodesDestroyNode((SNode*)pStmt->pOptions);
21,177✔
1445
      break;
21,176✔
1446
    }
1447
    case QUERY_NODE_CREATE_SUBTABLE_CLAUSE: {
136,278✔
1448
      SCreateSubTableClause* pStmt = (SCreateSubTableClause*)pNode;
136,278✔
1449
      nodesDestroyList(pStmt->pSpecificTags);
136,278✔
1450
      nodesDestroyList(pStmt->pValsOfTags);
136,213✔
1451
      nodesDestroyNode((SNode*)pStmt->pOptions);
136,321✔
1452
      break;
136,295✔
1453
    }
1454
    case QUERY_NODE_CREATE_VIRTUAL_TABLE_STMT: {
204✔
1455
      SCreateVTableStmt* pStmt = (SCreateVTableStmt*)pNode;
204✔
1456
      nodesDestroyList(pStmt->pCols);
204✔
1457
      break;
204✔
1458
    }
1459
    case QUERY_NODE_CREATE_VIRTUAL_SUBTABLE_STMT: {
228✔
1460
      SCreateVSubTableStmt* pStmt = (SCreateVSubTableStmt*)pNode;
228✔
1461
      nodesDestroyList(pStmt->pSpecificColRefs);
228✔
1462
      nodesDestroyList(pStmt->pColRefs);
228✔
1463
      nodesDestroyList(pStmt->pSpecificTags);
228✔
1464
      nodesDestroyList(pStmt->pValsOfTags);
228✔
1465
      break;
228✔
1466
    }
1467
    case QUERY_NODE_CREATE_SUBTABLE_FROM_FILE_CLAUSE: {
2✔
1468
      SCreateSubTableFromFileClause* pStmt = (SCreateSubTableFromFileClause*)pNode;
2✔
1469
      nodesDestroyList(pStmt->pSpecificTags);
2✔
1470
      break;
2✔
1471
    }
1472
    case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
101,144✔
1473
      nodesDestroyList(((SCreateMultiTablesStmt*)pNode)->pSubTables);
101,144✔
1474
      break;
101,210✔
1475
    case QUERY_NODE_DROP_TABLE_CLAUSE:  // no pointer field
17,987✔
1476
      break;
17,987✔
1477
    case QUERY_NODE_DROP_TABLE_STMT:
17,052✔
1478
      nodesDestroyList(((SDropTableStmt*)pNode)->pTables);
17,052✔
1479
      break;
17,052✔
1480
    case QUERY_NODE_DROP_SUPER_TABLE_STMT:
715✔
1481
    case QUERY_NODE_DROP_VIRTUAL_TABLE_STMT: // no pointer field
1482
      break;
715✔
1483
    case QUERY_NODE_ALTER_TABLE_STMT:
18,606✔
1484
    case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
1485
    case QUERY_NODE_ALTER_VIRTUAL_TABLE_STMT: {
1486
      SAlterTableStmt* pStmt = (SAlterTableStmt*)pNode;
18,606✔
1487
      nodesDestroyNode((SNode*)pStmt->pOptions);
18,606✔
1488
      nodesDestroyNode((SNode*)pStmt->pVal);
18,606✔
1489
      if (pStmt->pNodeListTagValue != NULL) {
18,606✔
1490
        SNodeList* pNodeList = pStmt->pNodeListTagValue;
6,816✔
1491
        SNode*     pSubNode = NULL;
6,816✔
1492
        FOREACH(pSubNode, pNodeList) {
13,683!
1493
          SAlterTableStmt* pSubAlterTable = (SAlterTableStmt*)pSubNode;
6,867✔
1494
          nodesDestroyNode((SNode*)pSubAlterTable->pOptions);
6,867✔
1495
          nodesDestroyNode((SNode*)pSubAlterTable->pVal);
6,867✔
1496
        }
1497
      }
1498
      break;
18,606✔
1499
    }
1500
    case QUERY_NODE_CREATE_USER_STMT: {
311✔
1501
      SCreateUserStmt* pStmt = (SCreateUserStmt*)pNode;
311✔
1502
      taosMemoryFree(pStmt->pIpRanges);
311!
1503
      nodesDestroyList(pStmt->pNodeListIpRanges);
311✔
1504
      break;
311✔
1505
    }
1506
    case QUERY_NODE_ALTER_USER_STMT: {
220✔
1507
      SAlterUserStmt* pStmt = (SAlterUserStmt*)pNode;
220✔
1508
      taosMemoryFree(pStmt->pIpRanges);
220!
1509
      nodesDestroyList(pStmt->pNodeListIpRanges);
220✔
1510
    }
1511
    case QUERY_NODE_DROP_USER_STMT:     // no pointer field
10,179✔
1512
    case QUERY_NODE_USE_DATABASE_STMT:  // no pointer field
1513
    case QUERY_NODE_CREATE_DNODE_STMT:  // no pointer field
1514
    case QUERY_NODE_DROP_DNODE_STMT:    // no pointer field
1515
    case QUERY_NODE_ALTER_DNODE_STMT:   // no pointer field
1516
    case QUERY_NODE_CREATE_ANODE_STMT:  // no pointer field
1517
    case QUERY_NODE_UPDATE_ANODE_STMT:  // no pointer field
1518
    case QUERY_NODE_DROP_ANODE_STMT:    // no pointer field
1519
    case QUERY_NODE_DROP_BNODE_STMT:    // no pointer field
1520
      break;
10,179✔
1521
    case QUERY_NODE_CREATE_BNODE_STMT: {
×
1522
      SBnodeOptions* pOptions = ((SCreateBnodeStmt*)pNode)->pOptions;
×
1523
      nodesDestroyNode((SNode*)pOptions);
×
1524
      break;
×
1525
    }
1526
    case QUERY_NODE_BNODE_OPTIONS: {
×
1527
      SBnodeOptions* pOptions = (SBnodeOptions*)pNode;
×
1528
      // nodesDestroyList(pOptions->pProtocol);
1529
      break;
×
1530
    }
1531
    case QUERY_NODE_CREATE_INDEX_STMT: {
50✔
1532
      SCreateIndexStmt* pStmt = (SCreateIndexStmt*)pNode;
50✔
1533
      nodesDestroyNode((SNode*)pStmt->pOptions);
50✔
1534
      nodesDestroyList(pStmt->pCols);
50✔
1535
      if (pStmt->pReq) {
50✔
1536
        tFreeSMCreateSmaReq(pStmt->pReq);
9✔
1537
        taosMemoryFreeClear(pStmt->pReq);
9!
1538
      }
1539
      break;
50✔
1540
    }
1541
    case QUERY_NODE_DROP_INDEX_STMT:    // no pointer field
908✔
1542
    case QUERY_NODE_CREATE_QNODE_STMT:  // no pointer field
1543
    case QUERY_NODE_DROP_QNODE_STMT:    // no pointer field
1544
    case QUERY_NODE_CREATE_BACKUP_NODE_STMT:  // no pointer field
1545
    case QUERY_NODE_DROP_BACKUP_NODE_STMT:    // no pointer field
1546
    case QUERY_NODE_CREATE_SNODE_STMT:  // no pointer field
1547
    case QUERY_NODE_DROP_SNODE_STMT:    // no pointer field
1548
    case QUERY_NODE_CREATE_MNODE_STMT:  // no pointer field
1549
    case QUERY_NODE_DROP_MNODE_STMT:    // no pointer field
1550
      break;
908✔
1551
    case QUERY_NODE_CREATE_TOPIC_STMT:
728✔
1552
      nodesDestroyNode(((SCreateTopicStmt*)pNode)->pQuery);
728✔
1553
      nodesDestroyNode(((SCreateTopicStmt*)pNode)->pWhere);
728✔
1554
      break;
728✔
1555
    case QUERY_NODE_DROP_TOPIC_STMT:   // no pointer field
2,842✔
1556
    case QUERY_NODE_DROP_CGROUP_STMT:  // no pointer field
1557
    case QUERY_NODE_ALTER_LOCAL_STMT:  // no pointer field
1558
      break;
2,842✔
1559
    case QUERY_NODE_EXPLAIN_STMT: {
126,265✔
1560
      SExplainStmt* pStmt = (SExplainStmt*)pNode;
126,265✔
1561
      nodesDestroyNode((SNode*)pStmt->pOptions);
126,265✔
1562
      nodesDestroyNode(pStmt->pQuery);
126,265✔
1563
      break;
126,265✔
1564
    }
1565
    case QUERY_NODE_DESCRIBE_STMT:
4,585✔
1566
      taosMemoryFree(((SDescribeStmt*)pNode)->pMeta);
4,585!
1567
      break;
4,585✔
1568
    case QUERY_NODE_RESET_QUERY_CACHE_STMT:  // no pointer field
8,020✔
1569
      break;
8,020✔
1570
    case QUERY_NODE_COMPACT_DATABASE_STMT: {
90✔
1571
      SCompactDatabaseStmt* pStmt = (SCompactDatabaseStmt*)pNode;
90✔
1572
      nodesDestroyNode(pStmt->pStart);
90✔
1573
      nodesDestroyNode(pStmt->pEnd);
90✔
1574
      break;
90✔
1575
    }
1576
    case QUERY_NODE_COMPACT_VGROUPS_STMT: {
×
1577
      SCompactVgroupsStmt* pStmt = (SCompactVgroupsStmt*)pNode;
×
1578
      nodesDestroyNode(pStmt->pDbName);
×
1579
      nodesDestroyList(pStmt->vgidList);
×
1580
      nodesDestroyNode(pStmt->pStart);
×
1581
      nodesDestroyNode(pStmt->pEnd);
×
1582
      break;
×
1583
    }
1584
    case QUERY_NODE_CREATE_FUNCTION_STMT:  // no pointer field
42✔
1585
    case QUERY_NODE_DROP_FUNCTION_STMT:    // no pointer field
1586
      break;
42✔
1587
    case QUERY_NODE_CREATE_STREAM_STMT: {
1,360✔
1588
      SCreateStreamStmt* pStmt = (SCreateStreamStmt*)pNode;
1,360✔
1589
      nodesDestroyNode((SNode*)pStmt->pOptions);
1,360✔
1590
      nodesDestroyNode(pStmt->pQuery);
1,360✔
1591
      nodesDestroyList(pStmt->pTags);
1,360✔
1592
      nodesDestroyNode(pStmt->pSubtable);
1,360✔
1593
      nodesDestroyNode((SNode*)pStmt->pNotifyOptions);
1,360✔
1594
      tFreeSCMCreateStreamReq(pStmt->pReq);
1,360✔
1595
      taosMemoryFreeClear(pStmt->pReq);
1,360!
1596
      break;
1,360✔
1597
    }
1598
    case QUERY_NODE_DROP_STREAM_STMT:                     // no pointer field
861✔
1599
    case QUERY_NODE_PAUSE_STREAM_STMT:                    // no pointer field
1600
    case QUERY_NODE_RESUME_STREAM_STMT:                   // no pointer field
1601
    case QUERY_NODE_RESET_STREAM_STMT:                    // no pointer field
1602
    case QUERY_NODE_BALANCE_VGROUP_STMT:                  // no pointer field
1603
    case QUERY_NODE_ASSIGN_LEADER_STMT: 
1604
    case QUERY_NODE_BALANCE_VGROUP_LEADER_STMT:           // no pointer field
1605
    case QUERY_NODE_BALANCE_VGROUP_LEADER_DATABASE_STMT:  // no pointer field
1606
    case QUERY_NODE_MERGE_VGROUP_STMT:                    // no pointer field
1607
      break;
861✔
1608
    case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
105✔
1609
      nodesDestroyList(((SRedistributeVgroupStmt*)pNode)->pDnodes);
105✔
1610
      break;
105✔
1611
    case QUERY_NODE_SPLIT_VGROUP_STMT:  // no pointer field
42✔
1612
    case QUERY_NODE_SYNCDB_STMT:        // no pointer field
1613
      break;
42✔
1614
    case QUERY_NODE_GRANT_STMT:
771✔
1615
      nodesDestroyNode(((SGrantStmt*)pNode)->pTagCond);
771✔
1616
      break;
771✔
1617
    case QUERY_NODE_REVOKE_STMT:
675✔
1618
      nodesDestroyNode(((SRevokeStmt*)pNode)->pTagCond);
675✔
1619
      break;
675✔
1620
    case QUERY_NODE_ALTER_CLUSTER_STMT:  // no pointer field
32✔
1621
      break;
32✔
1622
    case QUERY_NODE_SHOW_DNODES_STMT:
6,235✔
1623
    case QUERY_NODE_SHOW_MNODES_STMT:
1624
    case QUERY_NODE_SHOW_MODULES_STMT:
1625
    case QUERY_NODE_SHOW_QNODES_STMT:
1626
    case QUERY_NODE_SHOW_ANODES_STMT:
1627
    case QUERY_NODE_SHOW_ANODES_FULL_STMT:
1628
    case QUERY_NODE_SHOW_SNODES_STMT:
1629
    case QUERY_NODE_SHOW_BACKUP_NODES_STMT:
1630
    case QUERY_NODE_SHOW_ARBGROUPS_STMT:
1631
    case QUERY_NODE_SHOW_CLUSTER_STMT:
1632
    case QUERY_NODE_SHOW_DATABASES_STMT:
1633
    case QUERY_NODE_SHOW_FUNCTIONS_STMT:
1634
    case QUERY_NODE_SHOW_INDEXES_STMT:
1635
    case QUERY_NODE_SHOW_STABLES_STMT:
1636
    case QUERY_NODE_SHOW_STREAMS_STMT:
1637
    case QUERY_NODE_SHOW_TABLES_STMT:
1638
    case QUERY_NODE_SHOW_VTABLES_STMT:
1639
    case QUERY_NODE_SHOW_USERS_STMT:
1640
    case QUERY_NODE_SHOW_USERS_FULL_STMT:
1641
    case QUERY_NODE_SHOW_LICENCES_STMT:
1642
    case QUERY_NODE_SHOW_VGROUPS_STMT:
1643
    case QUERY_NODE_SHOW_TOPICS_STMT:
1644
    case QUERY_NODE_SHOW_CONSUMERS_STMT:
1645
    case QUERY_NODE_SHOW_CONNECTIONS_STMT:
1646
    case QUERY_NODE_SHOW_QUERIES_STMT:
1647
    case QUERY_NODE_SHOW_VNODES_STMT:
1648
    case QUERY_NODE_SHOW_APPS_STMT:
1649
    case QUERY_NODE_SHOW_SCORES_STMT:
1650
    case QUERY_NODE_SHOW_VARIABLES_STMT:
1651
    case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
1652
    case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
1653
    case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
1654
    case QUERY_NODE_SHOW_TAGS_STMT:
1655
    case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
1656
    case QUERY_NODE_SHOW_VIEWS_STMT:
1657
    case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
1658
    case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
1659
    case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
1660
    case QUERY_NODE_SHOW_ENCRYPTIONS_STMT:
1661
    case QUERY_NODE_SHOW_TSMAS_STMT:
1662
    case QUERY_NODE_SHOW_USAGE_STMT: {
1663
      SShowStmt* pStmt = (SShowStmt*)pNode;
6,235✔
1664
      nodesDestroyNode(pStmt->pDbName);
6,235✔
1665
      nodesDestroyNode(pStmt->pTbName);
6,235✔
1666
      break;
6,235✔
1667
    }
1668
    case QUERY_NODE_SHOW_TABLE_TAGS_STMT: {
52✔
1669
      SShowTableTagsStmt* pStmt = (SShowTableTagsStmt*)pNode;
52✔
1670
      nodesDestroyNode(pStmt->pDbName);
52✔
1671
      nodesDestroyNode(pStmt->pTbName);
52✔
1672
      nodesDestroyList(pStmt->pTags);
52✔
1673
      break;
52✔
1674
    }
1675
    case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
365✔
1676
      nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pDnodeId);
365✔
1677
      nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pLikePattern);
365✔
1678
      break;
365✔
1679
    case QUERY_NODE_SHOW_COMPACTS_STMT:
307✔
1680
      break;
307✔
1681
    case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT: {
1✔
1682
      SShowCompactDetailsStmt* pStmt = (SShowCompactDetailsStmt*)pNode;
1✔
1683
      nodesDestroyNode(pStmt->pCompactId);
1✔
1684
      break;
1✔
1685
    }
1686
    case QUERY_NODE_SHOW_TRANSACTION_DETAILS_STMT: {
×
1687
      SShowTransactionDetailsStmt* pStmt = (SShowTransactionDetailsStmt*)pNode;
×
1688
      nodesDestroyNode(pStmt->pTransactionId);
×
1689
      break;
×
1690
    }
1691
    case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
41✔
1692
      taosMemoryFreeClear(((SShowCreateDatabaseStmt*)pNode)->pCfg);
41!
1693
      break;
41✔
1694
    case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
391✔
1695
    case QUERY_NODE_SHOW_CREATE_VTABLE_STMT:
1696
    case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
1697
      taosMemoryFreeClear(((SShowCreateTableStmt*)pNode)->pDbCfg);
391!
1698
      destroyTableCfg((STableCfg*)(((SShowCreateTableStmt*)pNode)->pTableCfg));
391✔
1699
      break;
391✔
1700
    case QUERY_NODE_SHOW_CREATE_VIEW_STMT:        // no pointer field
39✔
1701
    case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:  // no pointer field
1702
    case QUERY_NODE_KILL_CONNECTION_STMT:         // no pointer field
1703
    case QUERY_NODE_KILL_QUERY_STMT:              // no pointer field
1704
    case QUERY_NODE_KILL_TRANSACTION_STMT:        // no pointer field
1705
    case QUERY_NODE_KILL_COMPACT_STMT:            // no pointer field
1706
      break;
39✔
1707
    case QUERY_NODE_DELETE_STMT: {
55,696✔
1708
      SDeleteStmt* pStmt = (SDeleteStmt*)pNode;
55,696✔
1709
      nodesDestroyNode(pStmt->pFromTable);
55,696✔
1710
      nodesDestroyNode(pStmt->pWhere);
55,696✔
1711
      nodesDestroyNode(pStmt->pCountFunc);
55,696✔
1712
      nodesDestroyNode(pStmt->pFirstFunc);
55,696✔
1713
      nodesDestroyNode(pStmt->pLastFunc);
55,696✔
1714
      nodesDestroyNode(pStmt->pTagCond);
55,696✔
1715
      break;
55,696✔
1716
    }
1717
    case QUERY_NODE_INSERT_STMT: {
159✔
1718
      SInsertStmt* pStmt = (SInsertStmt*)pNode;
159✔
1719
      nodesDestroyNode(pStmt->pTable);
159✔
1720
      nodesDestroyList(pStmt->pCols);
159✔
1721
      nodesDestroyNode(pStmt->pQuery);
159✔
1722
      break;
159✔
1723
    }
1724
    case QUERY_NODE_QUERY: {
11,100,823✔
1725
      SQuery* pQuery = (SQuery*)pNode;
11,100,823✔
1726
      nodesDestroyNode(pQuery->pPrevRoot);
11,100,823✔
1727
      nodesDestroyNode(pQuery->pRoot);
11,101,112✔
1728
      nodesDestroyNode(pQuery->pPostRoot);
11,095,337✔
1729
      taosMemoryFreeClear(pQuery->pResSchema);
11,093,745!
1730
      if (NULL != pQuery->pCmdMsg) {
11,093,750✔
1731
        taosMemoryFreeClear(pQuery->pCmdMsg->pMsg);
40,694!
1732
        taosMemoryFreeClear(pQuery->pCmdMsg);
40,694!
1733
      }
1734
      taosMemoryFreeClear(pQuery->pResExtSchema);
11,093,748!
1735
      taosArrayDestroy(pQuery->pDbList);
11,093,744✔
1736
      taosArrayDestroy(pQuery->pTableList);
11,091,524✔
1737
      taosArrayDestroy(pQuery->pTargetTableList);
11,091,027✔
1738
      taosArrayDestroy(pQuery->pPlaceholderValues);
11,091,046✔
1739
      nodesDestroyNode(pQuery->pPrepareRoot);
11,092,287✔
1740
      break;
11,090,960✔
1741
    }
1742
    case QUERY_NODE_RESTORE_DNODE_STMT:  // no pointer field
62✔
1743
    case QUERY_NODE_RESTORE_QNODE_STMT:  // no pointer field
1744
    case QUERY_NODE_RESTORE_MNODE_STMT:  // no pointer field
1745
    case QUERY_NODE_RESTORE_VNODE_STMT:  // no pointer field
1746
      break;
62✔
1747
    case QUERY_NODE_CREATE_VIEW_STMT: {
284✔
1748
      SCreateViewStmt* pStmt = (SCreateViewStmt*)pNode;
284✔
1749
      taosMemoryFree(pStmt->pQuerySql);
284!
1750
      tFreeSCMCreateViewReq(&pStmt->createReq);
284✔
1751
      nodesDestroyNode(pStmt->pQuery);
284✔
1752
      break;
284✔
1753
    }
1754
    case QUERY_NODE_DROP_VIEW_STMT:
188✔
1755
      break;
188✔
1756
    case QUERY_NODE_CREATE_TSMA_STMT: {
323✔
1757
      SCreateTSMAStmt* pStmt = (SCreateTSMAStmt*)pNode;
323✔
1758
      nodesDestroyNode((SNode*)pStmt->pOptions);
323✔
1759
      if (pStmt->pReq) {
323✔
1760
        tFreeSMCreateSmaReq(pStmt->pReq);
138✔
1761
        taosMemoryFreeClear(pStmt->pReq);
138!
1762
      }
1763
      break;
323✔
1764
    }
1765
    case QUERY_NODE_LOGIC_PLAN_SCAN: {
3,250,822✔
1766
      SScanLogicNode* pLogicNode = (SScanLogicNode*)pNode;
3,250,822✔
1767
      destroyLogicNode((SLogicNode*)pLogicNode);
3,250,822✔
1768
      nodesDestroyList(pLogicNode->pScanCols);
3,250,867✔
1769
      nodesDestroyList(pLogicNode->pScanPseudoCols);
3,250,907✔
1770
      taosMemoryFreeClear(pLogicNode->pVgroupList);
3,250,915!
1771
      nodesDestroyList(pLogicNode->pDynamicScanFuncs);
3,250,919✔
1772
      nodesDestroyNode(pLogicNode->pTagCond);
3,250,917✔
1773
      nodesDestroyNode(pLogicNode->pTagIndexCond);
3,250,919✔
1774
      taosArrayDestroyEx(pLogicNode->pSmaIndexes, destroySmaIndex);
3,250,916✔
1775
      nodesDestroyList(pLogicNode->pGroupTags);
3,250,918✔
1776
      nodesDestroyList(pLogicNode->pTags);
3,250,869✔
1777
      nodesDestroyNode(pLogicNode->pSubtable);
3,250,890✔
1778
      taosArrayDestroyEx(pLogicNode->pFuncTypes, destroyFuncParam);
3,250,899✔
1779
      taosArrayDestroyP(pLogicNode->pTsmaTargetTbVgInfo, NULL);
3,250,908✔
1780
      taosArrayDestroy(pLogicNode->pTsmaTargetTbInfo);
3,250,851✔
1781
      break;
3,250,871✔
1782
    }
1783
    case QUERY_NODE_LOGIC_PLAN_JOIN: {
309,999✔
1784
      SJoinLogicNode* pLogicNode = (SJoinLogicNode*)pNode;
309,999✔
1785
      destroyLogicNode((SLogicNode*)pLogicNode);
309,999✔
1786
      nodesDestroyNode(pLogicNode->pWindowOffset);
309,999✔
1787
      nodesDestroyNode(pLogicNode->pJLimit);
309,999✔
1788
      nodesDestroyNode(pLogicNode->addPrimEqCond);
309,999✔
1789
      nodesDestroyNode(pLogicNode->pPrimKeyEqCond);
309,999✔
1790
      nodesDestroyNode(pLogicNode->pColEqCond);
309,999✔
1791
      nodesDestroyNode(pLogicNode->pColOnCond);
309,999✔
1792
      nodesDestroyNode(pLogicNode->pTagEqCond);
309,999✔
1793
      nodesDestroyNode(pLogicNode->pTagOnCond);
309,999✔
1794
      nodesDestroyNode(pLogicNode->pFullOnCond);
309,999✔
1795
      nodesDestroyList(pLogicNode->pLeftEqNodes);
309,999✔
1796
      nodesDestroyList(pLogicNode->pRightEqNodes);
309,999✔
1797
      nodesDestroyNode(pLogicNode->pLeftOnCond);
309,999✔
1798
      nodesDestroyNode(pLogicNode->pRightOnCond);
309,999✔
1799
      break;
309,999✔
1800
    }
1801
    case QUERY_NODE_LOGIC_PLAN_VIRTUAL_TABLE_SCAN: {
20,875✔
1802
      SVirtualScanLogicNode * pLogicNode = (SVirtualScanLogicNode*)pNode;
20,875✔
1803
      destroyLogicNode((SLogicNode*)pLogicNode);
20,875✔
1804
      nodesDestroyList(pLogicNode->pScanCols);
20,875✔
1805
      nodesDestroyList(pLogicNode->pScanPseudoCols);
20,875✔
1806
      taosMemoryFreeClear(pLogicNode->pVgroupList);
20,875!
1807
      break;
20,875✔
1808
    }
1809
    case QUERY_NODE_LOGIC_PLAN_AGG: {
1,694,572✔
1810
      SAggLogicNode* pLogicNode = (SAggLogicNode*)pNode;
1,694,572✔
1811
      destroyLogicNode((SLogicNode*)pLogicNode);
1,694,572✔
1812
      nodesDestroyList(pLogicNode->pAggFuncs);
1,694,638✔
1813
      nodesDestroyList(pLogicNode->pGroupKeys);
1,694,642✔
1814
      break;
1,694,633✔
1815
    }
1816
    case QUERY_NODE_LOGIC_PLAN_PROJECT: {
2,103,413✔
1817
      SProjectLogicNode* pLogicNode = (SProjectLogicNode*)pNode;
2,103,413✔
1818
      destroyLogicNode((SLogicNode*)pLogicNode);
2,103,413✔
1819
      nodesDestroyList(pLogicNode->pProjections);
2,103,466✔
1820
      break;
2,103,489✔
1821
    }
1822
    case QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY: {
19,787,479✔
1823
      SVnodeModifyLogicNode* pLogicNode = (SVnodeModifyLogicNode*)pNode;
19,787,479✔
1824
      destroyLogicNode((SLogicNode*)pLogicNode);
19,787,479✔
1825
      destroyVgDataBlockArray(pLogicNode->pDataBlocks);
19,771,995✔
1826
      // pVgDataBlocks is weak reference
1827
      nodesDestroyNode(pLogicNode->pAffectedRows);
19,833,914✔
1828
      nodesDestroyNode(pLogicNode->pStartTs);
19,838,160✔
1829
      nodesDestroyNode(pLogicNode->pEndTs);
19,835,946✔
1830
      taosMemoryFreeClear(pLogicNode->pVgroupList);
19,844,882!
1831
      nodesDestroyList(pLogicNode->pInsertCols);
19,844,882✔
1832
      break;
19,812,979✔
1833
    }
1834
    case QUERY_NODE_LOGIC_PLAN_EXCHANGE:
1,317,388✔
1835
      destroyLogicNode((SLogicNode*)pNode);
1,317,388✔
1836
      break;
1,317,386✔
1837
    case QUERY_NODE_LOGIC_PLAN_MERGE: {
282,893✔
1838
      SMergeLogicNode* pLogicNode = (SMergeLogicNode*)pNode;
282,893✔
1839
      destroyLogicNode((SLogicNode*)pLogicNode);
282,893✔
1840
      nodesDestroyList(pLogicNode->pMergeKeys);
282,894✔
1841
      nodesDestroyList(pLogicNode->pInputs);
282,894✔
1842
      break;
282,895✔
1843
    }
1844
    case QUERY_NODE_LOGIC_PLAN_WINDOW: {
179,217✔
1845
      SWindowLogicNode* pLogicNode = (SWindowLogicNode*)pNode;
179,217✔
1846
      destroyLogicNode((SLogicNode*)pLogicNode);
179,217✔
1847
      nodesDestroyList(pLogicNode->pFuncs);
179,218✔
1848
      nodesDestroyNode(pLogicNode->pTspk);
179,216✔
1849
      nodesDestroyNode(pLogicNode->pTsEnd);
179,213✔
1850
      nodesDestroyNode(pLogicNode->pStateExpr);
179,213✔
1851
      nodesDestroyNode(pLogicNode->pStartCond);
179,215✔
1852
      nodesDestroyNode(pLogicNode->pEndCond);
179,215✔
1853
      break;
179,216✔
1854
    }
1855
    case QUERY_NODE_LOGIC_PLAN_FILL: {
27,169✔
1856
      SFillLogicNode* pLogicNode = (SFillLogicNode*)pNode;
27,169✔
1857
      destroyLogicNode((SLogicNode*)pLogicNode);
27,169✔
1858
      nodesDestroyNode(pLogicNode->pWStartTs);
27,169✔
1859
      nodesDestroyNode(pLogicNode->pValues);
27,169✔
1860
      nodesDestroyList(pLogicNode->pFillExprs);
27,169✔
1861
      nodesDestroyList(pLogicNode->pNotFillExprs);
27,169✔
1862
      nodesDestroyList(pLogicNode->pFillNullExprs);
27,169✔
1863
      break;
27,169✔
1864
    }
1865
    case QUERY_NODE_LOGIC_PLAN_SORT: {
604,174✔
1866
      SSortLogicNode* pLogicNode = (SSortLogicNode*)pNode;
604,174✔
1867
      destroyLogicNode((SLogicNode*)pLogicNode);
604,174✔
1868
      nodesDestroyList(pLogicNode->pSortKeys);
604,174✔
1869
      break;
604,175✔
1870
    }
1871
    case QUERY_NODE_LOGIC_PLAN_PARTITION: {
119,658✔
1872
      SPartitionLogicNode* pLogicNode = (SPartitionLogicNode*)pNode;
119,658✔
1873
      destroyLogicNode((SLogicNode*)pLogicNode);
119,658✔
1874
      nodesDestroyList(pLogicNode->pPartitionKeys);
119,658✔
1875
      nodesDestroyList(pLogicNode->pTags);
119,658✔
1876
      nodesDestroyNode(pLogicNode->pSubtable);
119,658✔
1877
      nodesDestroyList(pLogicNode->pAggFuncs);
119,658✔
1878
      break;
119,658✔
1879
    }
1880
    case QUERY_NODE_LOGIC_PLAN_INDEF_ROWS_FUNC: {
94,544✔
1881
      SIndefRowsFuncLogicNode* pLogicNode = (SIndefRowsFuncLogicNode*)pNode;
94,544✔
1882
      destroyLogicNode((SLogicNode*)pLogicNode);
94,544✔
1883
      nodesDestroyList(pLogicNode->pFuncs);
94,544✔
1884
      break;
94,544✔
1885
    }
1886
    case QUERY_NODE_LOGIC_PLAN_INTERP_FUNC: {
28,986✔
1887
      SInterpFuncLogicNode* pLogicNode = (SInterpFuncLogicNode*)pNode;
28,986✔
1888
      destroyLogicNode((SLogicNode*)pLogicNode);
28,986✔
1889
      nodesDestroyList(pLogicNode->pFuncs);
28,987✔
1890
      nodesDestroyNode(pLogicNode->pFillValues);
28,987✔
1891
      nodesDestroyNode(pLogicNode->pTimeSeries);
28,988✔
1892
      break;
28,988✔
1893
    }
1894
    case QUERY_NODE_LOGIC_PLAN_FORECAST_FUNC: {
82✔
1895
      SForecastFuncLogicNode* pLogicNode = (SForecastFuncLogicNode*)pNode;
82✔
1896
      destroyLogicNode((SLogicNode*)pLogicNode);
82✔
1897
      nodesDestroyList(pLogicNode->pFuncs);
82✔
1898
      break;
82✔
1899
    }
1900
    case QUERY_NODE_LOGIC_PLAN_GROUP_CACHE: {
37,928✔
1901
      SGroupCacheLogicNode* pLogicNode = (SGroupCacheLogicNode*)pNode;
37,928✔
1902
      destroyLogicNode((SLogicNode*)pLogicNode);
37,928✔
1903
      nodesDestroyList(pLogicNode->pGroupCols);
37,928✔
1904
      break;
37,928✔
1905
    }
1906
    case QUERY_NODE_LOGIC_PLAN_DYN_QUERY_CTRL: {
44,654✔
1907
      SDynQueryCtrlLogicNode* pLogicNode = (SDynQueryCtrlLogicNode*)pNode;
44,654✔
1908
      destroyLogicNode((SLogicNode*)pLogicNode);
44,654✔
1909
      if (pLogicNode->qType == DYN_QTYPE_VTB_SCAN) {
44,654✔
1910
        taosMemoryFreeClear(pLogicNode->vtbScan.pVgroupList);
6,726!
1911
      }
1912
      break;
44,654✔
1913
    }
1914
    case QUERY_NODE_LOGIC_SUBPLAN: {
23,993,606✔
1915
      SLogicSubplan* pSubplan = (SLogicSubplan*)pNode;
23,993,606✔
1916
      nodesDestroyList(pSubplan->pChildren);
23,993,606✔
1917
      nodesDestroyNode((SNode*)pSubplan->pNode);
23,996,708✔
1918
      nodesClearList(pSubplan->pParents);
24,035,440✔
1919
      taosMemoryFreeClear(pSubplan->pVgroupList);
24,037,193!
1920
      break;
24,037,201✔
1921
    }
1922
    case QUERY_NODE_LOGIC_PLAN:
10,804,976✔
1923
      nodesDestroyList(((SQueryLogicPlan*)pNode)->pTopSubplans);
10,804,976✔
1924
      break;
10,821,640✔
1925
    case QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN:
1,467,864✔
1926
    case QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN:
1927
    case QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN:
1928
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
1,467,864✔
1929
      break;
1,468,488✔
1930
    case QUERY_NODE_PHYSICAL_PLAN_VIRTUAL_TABLE_SCAN: {
11,338✔
1931
      SVirtualScanPhysiNode* pPhyNode = (SVirtualScanPhysiNode*)pNode;
11,338✔
1932
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
11,338✔
1933
      nodesDestroyList(pPhyNode->pGroupTags);
11,338✔
1934
      nodesDestroyList(pPhyNode->pTargets);
11,338✔
1935
      nodesDestroyList(pPhyNode->pTags);
11,338✔
1936
      nodesDestroyNode(pPhyNode->pSubtable);
11,338✔
1937
      break;
11,338✔
1938
    }
1939
    case QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN:
35,858✔
1940
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN: {
1941
      SLastRowScanPhysiNode* pPhyNode = (SLastRowScanPhysiNode*)pNode;
35,858✔
1942
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
35,858✔
1943
      nodesDestroyList(pPhyNode->pGroupTags);
35,866✔
1944
      nodesDestroyList(pPhyNode->pTargets);
35,865✔
1945
      taosArrayDestroy(pPhyNode->pFuncTypes);
35,868✔
1946
      break;
35,868✔
1947
    }
1948
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN:
6,745,634✔
1949
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN:
1950
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN:
1951
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN: {
1952
      STableScanPhysiNode* pPhyNode = (STableScanPhysiNode*)pNode;
6,745,634✔
1953
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
6,745,634✔
1954
      nodesDestroyList(pPhyNode->pDynamicScanFuncs);
6,747,342✔
1955
      nodesDestroyList(pPhyNode->pGroupTags);
6,747,572✔
1956
      nodesDestroyList(pPhyNode->pTags);
6,747,667✔
1957
      nodesDestroyNode(pPhyNode->pSubtable);
6,747,704✔
1958
      break;
6,747,537✔
1959
    }
1960
    case QUERY_NODE_PHYSICAL_PLAN_PROJECT: {
2,620,743✔
1961
      SProjectPhysiNode* pPhyNode = (SProjectPhysiNode*)pNode;
2,620,743✔
1962
      destroyPhysiNode((SPhysiNode*)pPhyNode);
2,620,743✔
1963
      nodesDestroyList(pPhyNode->pProjections);
2,621,238✔
1964
      break;
2,621,313✔
1965
    }
1966
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN: {
225,426✔
1967
      SSortMergeJoinPhysiNode* pPhyNode = (SSortMergeJoinPhysiNode*)pNode;
225,426✔
1968
      destroyPhysiNode((SPhysiNode*)pPhyNode);
225,426✔
1969
      nodesDestroyNode(pPhyNode->pWindowOffset);
225,428✔
1970
      nodesDestroyNode(pPhyNode->pJLimit);
225,428✔
1971
      nodesDestroyNode(pPhyNode->leftPrimExpr);
225,428✔
1972
      nodesDestroyNode(pPhyNode->rightPrimExpr);
225,427✔
1973
      nodesDestroyList(pPhyNode->pEqLeft);
225,426✔
1974
      nodesDestroyList(pPhyNode->pEqRight);
225,425✔
1975
      nodesDestroyNode(pPhyNode->pPrimKeyCond);
225,425✔
1976
      nodesDestroyNode(pPhyNode->pFullOnCond);
225,426✔
1977
      nodesDestroyList(pPhyNode->pTargets);
225,426✔
1978
      nodesDestroyNode(pPhyNode->pColEqCond);
225,426✔
1979
      nodesDestroyNode(pPhyNode->pColOnCond);
225,426✔
1980
      break;
225,426✔
1981
    }
1982
    case QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN: {
28,242✔
1983
      SHashJoinPhysiNode* pPhyNode = (SHashJoinPhysiNode*)pNode;
28,242✔
1984
      destroyPhysiNode((SPhysiNode*)pPhyNode);
28,242✔
1985
      nodesDestroyNode(pPhyNode->pWindowOffset);
28,242✔
1986
      nodesDestroyNode(pPhyNode->pJLimit);
28,242✔
1987
      nodesDestroyList(pPhyNode->pOnLeft);
28,242✔
1988
      nodesDestroyList(pPhyNode->pOnRight);
28,242✔
1989
      nodesDestroyNode(pPhyNode->leftPrimExpr);
28,242✔
1990
      nodesDestroyNode(pPhyNode->rightPrimExpr);
28,242✔
1991
      nodesDestroyNode(pPhyNode->pLeftOnCond);
28,242✔
1992
      nodesDestroyNode(pPhyNode->pRightOnCond);
28,242✔
1993
      nodesDestroyNode(pPhyNode->pFullOnCond);
28,242✔
1994
      nodesDestroyList(pPhyNode->pTargets);
28,242✔
1995

1996
      nodesDestroyNode(pPhyNode->pPrimKeyCond);
28,242✔
1997
      nodesDestroyNode(pPhyNode->pColEqCond);
28,242✔
1998
      nodesDestroyNode(pPhyNode->pTagEqCond);
28,242✔
1999

2000
      break;
28,242✔
2001
    }
2002
    case QUERY_NODE_PHYSICAL_PLAN_HASH_AGG: {
3,489,505✔
2003
      SAggPhysiNode* pPhyNode = (SAggPhysiNode*)pNode;
3,489,505✔
2004
      destroyPhysiNode((SPhysiNode*)pPhyNode);
3,489,505✔
2005
      nodesDestroyList(pPhyNode->pExprs);
3,490,523✔
2006
      nodesDestroyList(pPhyNode->pAggFuncs);
3,490,744✔
2007
      nodesDestroyList(pPhyNode->pGroupKeys);
3,490,903✔
2008
      break;
3,490,661✔
2009
    }
2010
    case QUERY_NODE_PHYSICAL_PLAN_EXCHANGE: {
4,634,699✔
2011
      SExchangePhysiNode* pPhyNode = (SExchangePhysiNode*)pNode;
4,634,699✔
2012
      destroyPhysiNode((SPhysiNode*)pPhyNode);
4,634,699✔
2013
      nodesDestroyList(pPhyNode->pSrcEndPoints);
4,634,742✔
2014
      break;
4,634,828✔
2015
    }
2016
    case QUERY_NODE_PHYSICAL_PLAN_MERGE: {
1,480,109✔
2017
      SMergePhysiNode* pPhyNode = (SMergePhysiNode*)pNode;
1,480,109✔
2018
      destroyPhysiNode((SPhysiNode*)pPhyNode);
1,480,109✔
2019
      nodesDestroyList(pPhyNode->pMergeKeys);
1,480,123✔
2020
      nodesDestroyList(pPhyNode->pTargets);
1,480,133✔
2021
      break;
1,480,126✔
2022
    }
2023
    case QUERY_NODE_PHYSICAL_PLAN_SORT:
1,096,643✔
2024
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT: {
2025
      SSortPhysiNode* pPhyNode = (SSortPhysiNode*)pNode;
1,096,643✔
2026
      destroyPhysiNode((SPhysiNode*)pPhyNode);
1,096,643✔
2027
      nodesDestroyList(pPhyNode->pExprs);
1,096,702✔
2028
      nodesDestroyList(pPhyNode->pSortKeys);
1,096,705✔
2029
      nodesDestroyList(pPhyNode->pTargets);
1,096,697✔
2030
      break;
1,096,714✔
2031
    }
2032
    case QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL:
2,119,790✔
2033
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL:
2034
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL:
2035
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL:
2036
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL:
2037
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL:
2038
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL:
2039
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_INTERVAL:
2040
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_FINAL_INTERVAL:
2041
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_SEMI_INTERVAL:
2042
      destroyWinodwPhysiNode((SWindowPhysiNode*)pNode);
2,119,790✔
2043
      break;
2,120,420✔
2044
    case QUERY_NODE_PHYSICAL_PLAN_FILL:
506,767✔
2045
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FILL: {
2046
      SFillPhysiNode* pPhyNode = (SFillPhysiNode*)pNode;
506,767✔
2047
      destroyPhysiNode((SPhysiNode*)pPhyNode);
506,767✔
2048
      nodesDestroyList(pPhyNode->pFillExprs);
506,771✔
2049
      nodesDestroyList(pPhyNode->pNotFillExprs);
506,771✔
2050
      nodesDestroyNode(pPhyNode->pWStartTs);
506,774✔
2051
      nodesDestroyNode(pPhyNode->pValues);
506,775✔
2052
      nodesDestroyList(pPhyNode->pFillNullExprs);
506,774✔
2053
      break;
506,775✔
2054
    }
2055
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION:
112,069✔
2056
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION:
2057
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION:
2058
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION:
2059
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_SESSION:
2060
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_FINAL_SESSION:
2061
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_SEMI_SESSION:
2062
      destroyWinodwPhysiNode((SWindowPhysiNode*)pNode);
112,069✔
2063
      break;
112,072✔
2064
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE:
81,773✔
2065
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE:
2066
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_STATE: {
2067
      SStateWinodwPhysiNode* pPhyNode = (SStateWinodwPhysiNode*)pNode;
81,773✔
2068
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
81,773✔
2069
      nodesDestroyNode(pPhyNode->pStateKey);
81,773✔
2070
      break;
81,773✔
2071
    }
2072
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_EVENT:
278,392✔
2073
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT:
2074
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_EVENT: {
2075
      SEventWinodwPhysiNode* pPhyNode = (SEventWinodwPhysiNode*)pNode;
278,392✔
2076
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
278,392✔
2077
      nodesDestroyNode(pPhyNode->pStartCond);
278,394✔
2078
      nodesDestroyNode(pPhyNode->pEndCond);
278,394✔
2079
      break;
278,394✔
2080
    }
2081
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_COUNT:
4,670✔
2082
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_COUNT:
2083
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_CONTINUE_COUNT: {
2084
      SCountWinodwPhysiNode* pPhyNode = (SCountWinodwPhysiNode*)pNode;
4,670✔
2085
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
4,670✔
2086
      break;
4,670✔
2087
    }
2088
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ANOMALY: {
24✔
2089
      SAnomalyWindowPhysiNode* pPhyNode = (SAnomalyWindowPhysiNode*)pNode;
24✔
2090
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
24✔
2091
      nodesDestroyNode(pPhyNode->pAnomalyKey);
24✔
2092
      break;
24✔
2093
    }
2094
    case QUERY_NODE_PHYSICAL_PLAN_PARTITION: {
46,419✔
2095
      destroyPartitionPhysiNode((SPartitionPhysiNode*)pNode);
46,419✔
2096
      break;
46,420✔
2097
    }
2098
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION: {
1,630✔
2099
      SStreamPartitionPhysiNode* pPhyNode = (SStreamPartitionPhysiNode*)pNode;
1,630✔
2100
      destroyPartitionPhysiNode((SPartitionPhysiNode*)pPhyNode);
1,630✔
2101
      nodesDestroyList(pPhyNode->pTags);
1,631✔
2102
      nodesDestroyNode(pPhyNode->pSubtable);
1,631✔
2103
      break;
1,631✔
2104
    }
2105
    case QUERY_NODE_PHYSICAL_PLAN_INDEF_ROWS_FUNC: {
156,909✔
2106
      SIndefRowsFuncPhysiNode* pPhyNode = (SIndefRowsFuncPhysiNode*)pNode;
156,909✔
2107
      destroyPhysiNode((SPhysiNode*)pPhyNode);
156,909✔
2108
      nodesDestroyList(pPhyNode->pExprs);
156,911✔
2109
      nodesDestroyList(pPhyNode->pFuncs);
156,911✔
2110
      break;
156,912✔
2111
    }
2112
    case QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC:
92,904✔
2113
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERP_FUNC: {
2114
      SInterpFuncPhysiNode* pPhyNode = (SInterpFuncPhysiNode*)pNode;
92,904✔
2115
      destroyPhysiNode((SPhysiNode*)pPhyNode);
92,904✔
2116
      nodesDestroyList(pPhyNode->pExprs);
92,904✔
2117
      nodesDestroyList(pPhyNode->pFuncs);
92,904✔
2118
      nodesDestroyNode(pPhyNode->pFillValues);
92,904✔
2119
      nodesDestroyNode(pPhyNode->pTimeSeries);
92,904✔
2120
      break;
92,904✔
2121
    }
2122
    case QUERY_NODE_PHYSICAL_PLAN_FORECAST_FUNC: {
82✔
2123
      SForecastFuncPhysiNode* pPhyNode = (SForecastFuncPhysiNode*)pNode;
82✔
2124
      destroyPhysiNode((SPhysiNode*)pPhyNode);
82✔
2125
      nodesDestroyList(pPhyNode->pExprs);
82✔
2126
      nodesDestroyList(pPhyNode->pFuncs);
82✔
2127
      break;
82✔
2128
    }
2129
    case QUERY_NODE_PHYSICAL_PLAN_DISPATCH:
10,927,811✔
2130
      destroyDataSinkNode((SDataSinkNode*)pNode);
10,927,811✔
2131
      break;
10,930,173✔
2132
    case QUERY_NODE_PHYSICAL_PLAN_INSERT: {
9,927,657✔
2133
      SDataInserterNode* pSink = (SDataInserterNode*)pNode;
9,927,657✔
2134
      destroyDataSinkNode((SDataSinkNode*)pSink);
9,927,657✔
2135
      taosMemFreeClear(pSink->pData);
9,921,390!
2136
      break;
9,922,241✔
2137
    }
2138
    case QUERY_NODE_PHYSICAL_PLAN_QUERY_INSERT: {
273✔
2139
      SQueryInserterNode* pSink = (SQueryInserterNode*)pNode;
273✔
2140
      destroyDataSinkNode((SDataSinkNode*)pSink);
273✔
2141
      nodesDestroyList(pSink->pCols);
273✔
2142
      break;
273✔
2143
    }
2144
    case QUERY_NODE_PHYSICAL_PLAN_DELETE: {
113,497✔
2145
      SDataDeleterNode* pSink = (SDataDeleterNode*)pNode;
113,497✔
2146
      destroyDataSinkNode((SDataSinkNode*)pSink);
113,497✔
2147
      nodesDestroyNode(pSink->pAffectedRows);
113,495✔
2148
      nodesDestroyNode(pSink->pStartTs);
113,500✔
2149
      nodesDestroyNode(pSink->pEndTs);
113,501✔
2150
      break;
113,501✔
2151
    }
2152
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE: {
28,242✔
2153
      SGroupCachePhysiNode* pPhyNode = (SGroupCachePhysiNode*)pNode;
28,242✔
2154
      destroyPhysiNode((SPhysiNode*)pPhyNode);
28,242✔
2155
      nodesDestroyList(pPhyNode->pGroupCols);
28,242✔
2156
      break;
28,242✔
2157
    }
2158
    case QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL: {
32,738✔
2159
      SDynQueryCtrlPhysiNode* pPhyNode = (SDynQueryCtrlPhysiNode*)pNode;
32,738✔
2160
      if (pPhyNode->qType == DYN_QTYPE_VTB_SCAN) {
32,738✔
2161
        nodesDestroyList(pPhyNode->vtbScan.pScanCols);
4,496✔
2162
      }
2163
      destroyPhysiNode((SPhysiNode*)pPhyNode);
32,738✔
2164
      break;
32,738✔
2165
    }
2166
    case QUERY_NODE_PHYSICAL_SUBPLAN: {
20,911,141✔
2167
      SSubplan* pSubplan = (SSubplan*)pNode;
20,911,141✔
2168
      nodesClearList(pSubplan->pChildren);
20,911,141✔
2169
      nodesDestroyNode((SNode*)pSubplan->pNode);
20,911,259✔
2170
      nodesDestroyNode((SNode*)pSubplan->pDataSink);
20,913,743✔
2171
      nodesDestroyNode((SNode*)pSubplan->pTagCond);
20,929,318✔
2172
      nodesDestroyNode((SNode*)pSubplan->pTagIndexCond);
20,927,642✔
2173
      tSimpleHashCleanup(pSubplan->pVTables);
20,923,982✔
2174
      nodesClearList(pSubplan->pParents);
20,914,643✔
2175
      break;
20,914,989✔
2176
    }
2177
    case QUERY_NODE_PHYSICAL_PLAN:
10,818,071✔
2178
      nodesDestroyList(((SQueryPlan*)pNode)->pSubplans);
10,818,071✔
2179
      break;
10,832,117✔
2180
    default:
169✔
2181
      break;
169✔
2182
  }
2183
  nodesFree(pNode);
1,371,427,581✔
2184
  return;
1,368,936,222✔
2185
}
2186

2187
int32_t nodesMakeList(SNodeList** ppListOut) {
217,204,200✔
2188
  SNodeList* p = NULL;
217,204,200✔
2189
  int32_t    code = nodesCalloc(1, sizeof(SNodeList), (void**)&p);
217,204,200✔
2190
  if (TSDB_CODE_SUCCESS == code) {
217,456,554!
2191
    *ppListOut = p;
217,466,311✔
2192
  }
2193
  return code;
217,456,554✔
2194
}
2195

2196
int32_t nodesListAppend(SNodeList* pList, SNode* pNode) {
1,007,922,201✔
2197
  if (NULL == pList || NULL == pNode) {
1,007,922,201!
2198
    return TSDB_CODE_INVALID_PARA;
×
2199
  }
2200
  SListCell* p = NULL;
1,009,575,615✔
2201
  int32_t    code = nodesCalloc(1, sizeof(SListCell), (void**)&p);
1,009,575,615✔
2202
  if (TSDB_CODE_SUCCESS != code) {
1,033,245,753!
2203
    return code;
×
2204
  }
2205
  p->pNode = pNode;
1,033,245,753✔
2206
  if (NULL == pList->pHead) {
1,033,245,753✔
2207
    pList->pHead = p;
209,281,055✔
2208
  }
2209
  if (NULL != pList->pTail) {
1,033,245,753✔
2210
    pList->pTail->pNext = p;
824,560,716✔
2211
  }
2212
  p->pPrev = pList->pTail;
1,033,245,753✔
2213
  pList->pTail = p;
1,033,245,753✔
2214
  ++(pList->length);
1,033,245,753✔
2215
  return TSDB_CODE_SUCCESS;
1,033,245,753✔
2216
}
2217

2218
int32_t nodesListStrictAppend(SNodeList* pList, SNode* pNode) {
300,840,394✔
2219
  if (NULL == pNode) {
300,840,394!
2220
    return TSDB_CODE_INVALID_PARA;
×
2221
  }
2222
  int32_t code = nodesListAppend(pList, pNode);
300,840,394✔
2223
  if (TSDB_CODE_SUCCESS != code) {
300,506,533!
2224
    nodesDestroyNode(pNode);
×
2225
  }
2226
  return code;
300,259,976✔
2227
}
2228

2229
int32_t nodesListMakeAppend(SNodeList** pList, SNode* pNode) {
10,966,646✔
2230
  if (NULL == *pList) {
10,966,646✔
2231
    int32_t code = nodesMakeList(pList);
7,300,934✔
2232
    if (NULL == *pList) {
7,300,977!
2233
      return code;
×
2234
    }
2235
  }
2236
  return nodesListAppend(*pList, pNode);
10,966,689✔
2237
}
2238

2239
int32_t nodesListMakeStrictAppend(SNodeList** pList, SNode* pNode) {
232,167,849✔
2240
  if (NULL == *pList) {
232,167,849✔
2241
    int32_t code = nodesMakeList(pList);
50,510,488✔
2242
    if (NULL == *pList) {
50,509,995!
2243
      return code;
×
2244
    }
2245
  }
2246
  return nodesListStrictAppend(*pList, pNode);
232,167,356✔
2247
}
2248

2249
int32_t nodesListAppendList(SNodeList* pTarget, SNodeList* pSrc) {
252,443✔
2250
  if (NULL == pTarget || NULL == pSrc) {
252,443!
2251
    return TSDB_CODE_FAILED;
×
2252
  }
2253

2254
  if (NULL == pTarget->pHead) {
252,443✔
2255
    pTarget->pHead = pSrc->pHead;
217,815✔
2256
  } else {
2257
    pTarget->pTail->pNext = pSrc->pHead;
34,628✔
2258
    if (NULL != pSrc->pHead) {
34,628!
2259
      pSrc->pHead->pPrev = pTarget->pTail;
34,628✔
2260
    }
2261
  }
2262
  pTarget->pTail = pSrc->pTail;
252,443✔
2263
  pTarget->length += pSrc->length;
252,443✔
2264
  nodesFree(pSrc);
252,443✔
2265

2266
  return TSDB_CODE_SUCCESS;
252,443✔
2267
}
2268

2269
int32_t nodesListStrictAppendList(SNodeList* pTarget, SNodeList* pSrc) {
19,922✔
2270
  if (NULL == pSrc) {
19,922!
2271
    return TSDB_CODE_OUT_OF_MEMORY;
×
2272
  }
2273
  int32_t code = nodesListAppendList(pTarget, pSrc);
19,922✔
2274
  if (TSDB_CODE_SUCCESS != code) {
19,922!
2275
    nodesDestroyList(pSrc);
×
2276
  }
2277
  return code;
19,922✔
2278
}
2279

2280
int32_t nodesListMakeStrictAppendList(SNodeList** pTarget, SNodeList* pSrc) {
958✔
2281
  if (NULL == *pTarget) {
958✔
2282
    int32_t code = nodesMakeList(pTarget);
603✔
2283
    if (NULL == *pTarget) {
603!
2284
      return code;
×
2285
    }
2286
  }
2287
  return nodesListStrictAppendList(*pTarget, pSrc);
958✔
2288
}
2289

2290
int32_t nodesListMakePushFront(SNodeList** pList, SNode* pNode) {
11,860✔
2291
  if (*pList == NULL) {
11,860✔
2292
    int32_t code = nodesMakeList(pList);
11,566✔
2293
    if (*pList == NULL) {
11,566!
2294
      return code;
×
2295
    }
2296
  }
2297
  return nodesListPushFront(*pList, pNode);
11,860✔
2298
}
2299

2300
int32_t nodesListPushFront(SNodeList* pList, SNode* pNode) {
49,210✔
2301
  if (NULL == pList || NULL == pNode) {
49,210!
2302
    return TSDB_CODE_FAILED;
×
2303
  }
2304
  SListCell* p = NULL;
49,210✔
2305
  int32_t    code = nodesCalloc(1, sizeof(SListCell), (void**)&p);
49,210✔
2306
  if (TSDB_CODE_SUCCESS != code) {
49,210!
2307
    return code;
×
2308
  }
2309
  p->pNode = pNode;
49,210✔
2310
  if (NULL != pList->pHead) {
49,210✔
2311
    pList->pHead->pPrev = p;
829✔
2312
    p->pNext = pList->pHead;
829✔
2313
  }
2314
  pList->pHead = p;
49,210✔
2315
  pList->pTail = pList->pTail ? pList->pTail : p;
49,210✔
2316
  ++(pList->length);
49,210✔
2317
  return TSDB_CODE_SUCCESS;
49,210✔
2318
}
2319

2320
SListCell* nodesListErase(SNodeList* pList, SListCell* pCell) {
1,024,732,391✔
2321
  if (NULL == pCell->pPrev) {
1,024,732,391✔
2322
    pList->pHead = pCell->pNext;
1,023,276,919✔
2323
  } else {
2324
    pCell->pPrev->pNext = pCell->pNext;
1,455,472✔
2325
  }
2326
  if (NULL == pCell->pNext) {
1,024,732,391✔
2327
    pList->pTail = pCell->pPrev;
192,295,836✔
2328
  } else {
2329
    pCell->pNext->pPrev = pCell->pPrev;
832,436,555✔
2330
  }
2331
  SListCell* pNext = pCell->pNext;
1,024,732,391✔
2332
  nodesDestroyNode(pCell->pNode);
1,024,732,391✔
2333
  nodesFree(pCell);
1,025,860,306✔
2334
  --(pList->length);
1,026,194,927✔
2335
  return pNext;
1,026,194,927✔
2336
}
2337

2338
void nodesListInsertList(SNodeList* pTarget, SListCell* pPos, SNodeList* pSrc) {
192,532✔
2339
  if (NULL == pTarget || NULL == pPos || NULL == pSrc || NULL == pSrc->pHead) {
192,532!
2340
    return;
38✔
2341
  }
2342

2343
  if (NULL == pPos->pPrev) {
192,494✔
2344
    pTarget->pHead = pSrc->pHead;
190,255✔
2345
  } else {
2346
    pPos->pPrev->pNext = pSrc->pHead;
2,239✔
2347
  }
2348
  pSrc->pHead->pPrev = pPos->pPrev;
192,494✔
2349
  pSrc->pTail->pNext = pPos;
192,494✔
2350
  pPos->pPrev = pSrc->pTail;
192,494✔
2351

2352
  pTarget->length += pSrc->length;
192,494✔
2353
  nodesFree(pSrc);
192,494✔
2354
}
2355

2356
void nodesListInsertListAfterPos(SNodeList* pTarget, SListCell* pPos, SNodeList* pSrc) {
9✔
2357
  if (NULL == pTarget || NULL == pPos || NULL == pSrc || NULL == pSrc->pHead) {
9!
2358
    return;
×
2359
  }
2360

2361
  if (NULL == pPos->pNext) {
9!
2362
    pTarget->pTail = pSrc->pHead;
9✔
2363
  } else {
2364
    pPos->pNext->pPrev = pSrc->pHead;
×
2365
  }
2366

2367
  pSrc->pHead->pPrev = pPos;
9✔
2368
  pSrc->pTail->pNext = pPos->pNext;
9✔
2369

2370
  pPos->pNext = pSrc->pHead;
9✔
2371

2372
  pTarget->length += pSrc->length;
9✔
2373
  nodesFree(pSrc);
9✔
2374
}
2375

2376
SNode* nodesListGetNode(SNodeList* pList, int32_t index) {
393,632,662✔
2377
  SNode* node;
2378
  FOREACH(node, pList) {
2,147,483,647✔
2379
    if (0 == index--) {
2,147,483,647✔
2380
      return node;
393,076,802✔
2381
    }
2382
  }
2383
  return NULL;
555,860✔
2384
}
2385

2386
SListCell* nodesListGetCell(SNodeList* pList, int32_t index) {
270,456✔
2387
  SNode* node;
2388
  FOREACH(node, pList) {
8,977,975!
2389
    if (0 == index--) {
8,977,975✔
2390
      return cell;
270,456✔
2391
    }
2392
  }
2393
  return NULL;
×
2394
}
2395

2396
void nodesDestroyList(SNodeList* pList) {
401,316,466✔
2397
  if (NULL == pList) {
401,316,466✔
2398
    return;
203,984,000✔
2399
  }
2400

2401
  SListCell* pNext = pList->pHead;
197,332,466✔
2402
  while (NULL != pNext) {
1,220,601,259✔
2403
    pNext = nodesListErase(pList, pNext);
1,022,658,492✔
2404
  }
2405
  nodesFree(pList);
197,942,767✔
2406
}
2407

2408
void nodesClearList(SNodeList* pList) {
81,470,287✔
2409
  if (NULL == pList) {
81,470,287✔
2410
    return;
62,458,382✔
2411
  }
2412

2413
  SListCell* pNext = pList->pHead;
19,011,905✔
2414
  while (NULL != pNext) {
38,111,646✔
2415
    SListCell* tmp = pNext;
18,970,113✔
2416
    pNext = pNext->pNext;
18,970,113✔
2417
    nodesFree(tmp);
18,970,113✔
2418
  }
2419
  nodesFree(pList);
19,141,533✔
2420
}
2421

2422
void* nodesGetValueFromNode(SValueNode* pNode) {
581,045,490✔
2423
  switch (pNode->node.resType.type) {
581,045,490!
2424
    case TSDB_DATA_TYPE_BOOL:
576,551,647✔
2425
    case TSDB_DATA_TYPE_TINYINT:
2426
    case TSDB_DATA_TYPE_SMALLINT:
2427
    case TSDB_DATA_TYPE_INT:
2428
    case TSDB_DATA_TYPE_BIGINT:
2429
    case TSDB_DATA_TYPE_TIMESTAMP:
2430
    case TSDB_DATA_TYPE_UTINYINT:
2431
    case TSDB_DATA_TYPE_USMALLINT:
2432
    case TSDB_DATA_TYPE_UINT:
2433
    case TSDB_DATA_TYPE_UBIGINT:
2434
    case TSDB_DATA_TYPE_FLOAT:
2435
    case TSDB_DATA_TYPE_DOUBLE:
2436
    case TSDB_DATA_TYPE_DECIMAL64:
2437
      return (void*)&pNode->typeData;
576,551,647✔
2438
    case TSDB_DATA_TYPE_NCHAR:
4,585,133✔
2439
    case TSDB_DATA_TYPE_VARCHAR:
2440
    case TSDB_DATA_TYPE_VARBINARY:
2441
    case TSDB_DATA_TYPE_JSON:
2442
    case TSDB_DATA_TYPE_GEOMETRY:
2443
    case TSDB_DATA_TYPE_DECIMAL:
2444
      return (void*)pNode->datum.p;
4,585,133✔
2445
    default:
×
2446
      break;
×
2447
  }
2448

2449
  return NULL;
×
2450
}
2451

2452
int32_t nodesSetValueNodeValue(SValueNode* pNode, void* value) {
446,670✔
2453
  switch (pNode->node.resType.type) {
446,670!
2454
    case TSDB_DATA_TYPE_NULL:
×
2455
      break;
×
2456
    case TSDB_DATA_TYPE_BOOL:
56,579✔
2457
      pNode->datum.b = *(bool*)value;
56,579✔
2458
      *(bool*)&pNode->typeData = pNode->datum.b;
56,579✔
2459
      break;
56,579✔
2460
    case TSDB_DATA_TYPE_TINYINT:
8,644✔
2461
      pNode->datum.i = *(int8_t*)value;
8,644✔
2462
      *(int8_t*)&pNode->typeData = pNode->datum.i;
8,644✔
2463
      break;
8,644✔
2464
    case TSDB_DATA_TYPE_SMALLINT:
8,544✔
2465
      pNode->datum.i = *(int16_t*)value;
8,544✔
2466
      *(int16_t*)&pNode->typeData = pNode->datum.i;
8,544✔
2467
      break;
8,544✔
2468
    case TSDB_DATA_TYPE_INT:
19,190✔
2469
      pNode->datum.i = *(int32_t*)value;
19,190✔
2470
      *(int32_t*)&pNode->typeData = pNode->datum.i;
19,190✔
2471
      break;
19,190✔
2472
    case TSDB_DATA_TYPE_BIGINT:
73,055✔
2473
      pNode->datum.i = *(int64_t*)value;
73,055✔
2474
      *(int64_t*)&pNode->typeData = pNode->datum.i;
73,055✔
2475
      break;
73,055✔
2476
    case TSDB_DATA_TYPE_TIMESTAMP:
216,179✔
2477
      pNode->datum.i = *(int64_t*)value;
216,179✔
2478
      *(int64_t*)&pNode->typeData = pNode->datum.i;
216,179✔
2479
      break;
216,179✔
2480
    case TSDB_DATA_TYPE_UTINYINT:
8,225✔
2481
      pNode->datum.u = *(int8_t*)value;
8,225✔
2482
      *(int8_t*)&pNode->typeData = pNode->datum.u;
8,225✔
2483
      break;
8,225✔
2484
    case TSDB_DATA_TYPE_USMALLINT:
8,163✔
2485
      pNode->datum.u = *(int16_t*)value;
8,163✔
2486
      *(int16_t*)&pNode->typeData = pNode->datum.u;
8,163✔
2487
      break;
8,163✔
2488
    case TSDB_DATA_TYPE_UINT:
8,267✔
2489
      pNode->datum.u = *(int32_t*)value;
8,267✔
2490
      *(int32_t*)&pNode->typeData = pNode->datum.u;
8,267✔
2491
      break;
8,267✔
2492
    case TSDB_DATA_TYPE_UBIGINT:
8,164✔
2493
      pNode->datum.u = *(uint64_t*)value;
8,164✔
2494
      *(uint64_t*)&pNode->typeData = pNode->datum.u;
8,164✔
2495
      break;
8,164✔
2496
    case TSDB_DATA_TYPE_FLOAT:
8,216✔
2497
      pNode->datum.d = *(float*)value;
8,216✔
2498
      *(float*)&pNode->typeData = pNode->datum.d;
8,216✔
2499
      break;
8,216✔
2500
    case TSDB_DATA_TYPE_DOUBLE:
23,344✔
2501
      pNode->datum.d = *(double*)value;
23,344✔
2502
      *(double*)&pNode->typeData = pNode->datum.d;
23,344✔
2503
      break;
23,344✔
2504
    case TSDB_DATA_TYPE_NCHAR:
×
2505
    case TSDB_DATA_TYPE_VARCHAR:
2506
    case TSDB_DATA_TYPE_VARBINARY:
2507
    case TSDB_DATA_TYPE_JSON:
2508
    case TSDB_DATA_TYPE_BLOB:
2509
    case TSDB_DATA_TYPE_MEDIUMBLOB:
2510
    case TSDB_DATA_TYPE_GEOMETRY:
2511
      pNode->datum.p = (char*)value;
×
2512
      break;
×
2513
    case TSDB_DATA_TYPE_DECIMAL64:
100✔
2514
      pNode->datum.i = *(int64_t*)value;
100✔
2515
      pNode->typeData = *(int64_t*)value;
100✔
2516
      break;
100✔
2517
    case TSDB_DATA_TYPE_DECIMAL:
×
2518
      pNode->datum.p = (char*)value;
×
2519
      break;
×
2520
    default:
×
2521
      return TSDB_CODE_APP_ERROR;
×
2522
  }
2523

2524
  return TSDB_CODE_SUCCESS;
446,670✔
2525
}
2526

2527
char* nodesGetStrValueFromNode(SValueNode* pNode) {
2,212✔
2528
  switch (pNode->node.resType.type) {
2,212!
2529
    case TSDB_DATA_TYPE_BOOL: {
2✔
2530
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
2!
2531
      if (NULL == buf) {
2!
2532
        return NULL;
×
2533
      }
2534

2535
      snprintf(buf, MAX_NUM_STR_SIZE, "%s", pNode->datum.b ? "true" : "false");
2✔
2536
      return buf;
2✔
2537
    }
2538
    case TSDB_DATA_TYPE_TINYINT:
2,062✔
2539
    case TSDB_DATA_TYPE_SMALLINT:
2540
    case TSDB_DATA_TYPE_INT:
2541
    case TSDB_DATA_TYPE_BIGINT:
2542
    case TSDB_DATA_TYPE_TIMESTAMP: {
2543
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
2,062!
2544
      if (NULL == buf) {
2,062!
2545
        return NULL;
×
2546
      }
2547

2548
      snprintf(buf, MAX_NUM_STR_SIZE, "%" PRId64, pNode->datum.i);
2,062✔
2549
      return buf;
2,062✔
2550
    }
2551
    case TSDB_DATA_TYPE_UTINYINT:
×
2552
    case TSDB_DATA_TYPE_USMALLINT:
2553
    case TSDB_DATA_TYPE_UINT:
2554
    case TSDB_DATA_TYPE_UBIGINT: {
2555
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
×
2556
      if (NULL == buf) {
×
2557
        return NULL;
×
2558
      }
2559

2560
      snprintf(buf, MAX_NUM_STR_SIZE, "%" PRIu64, pNode->datum.u);
×
2561
      return buf;
×
2562
    }
2563
    case TSDB_DATA_TYPE_FLOAT:
3✔
2564
    case TSDB_DATA_TYPE_DOUBLE: {
2565
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
3!
2566
      if (NULL == buf) {
3!
2567
        return NULL;
×
2568
      }
2569

2570
      snprintf(buf, MAX_NUM_STR_SIZE, "%e", pNode->datum.d);
3✔
2571
      return buf;
3✔
2572
    }
2573
    case TSDB_DATA_TYPE_NCHAR:
145✔
2574
    case TSDB_DATA_TYPE_VARCHAR:
2575
    case TSDB_DATA_TYPE_VARBINARY:
2576
    case TSDB_DATA_TYPE_GEOMETRY: {
2577
      int32_t bufSize = varDataLen(pNode->datum.p) + 2 + 1;
145✔
2578
      void*   buf = taosMemoryMalloc(bufSize);
145!
2579
      if (NULL == buf) {
145!
2580
        return NULL;
×
2581
      }
2582

2583
      snprintf(buf, bufSize, "'%s'", varDataVal(pNode->datum.p));
145✔
2584
      return buf;
145✔
2585
    }
2586
    default:
×
2587
      break;
×
2588
  }
2589

2590
  return NULL;
×
2591
}
2592

2593
bool nodesIsExprNode(const SNode* pNode) {
27,017,574✔
2594
  ENodeType type = nodeType(pNode);
27,017,574✔
2595
  return (QUERY_NODE_COLUMN == type || QUERY_NODE_VALUE == type || QUERY_NODE_OPERATOR == type ||
14,530,487✔
2596
          QUERY_NODE_FUNCTION == type || QUERY_NODE_LOGIC_CONDITION == type || QUERY_NODE_CASE_WHEN == type);
41,548,061✔
2597
}
2598

2599
bool nodesIsUnaryOp(const SOperatorNode* pOp) {
×
2600
  switch (pOp->opType) {
×
2601
    case OP_TYPE_MINUS:
×
2602
    case OP_TYPE_IS_NULL:
2603
    case OP_TYPE_IS_NOT_NULL:
2604
    case OP_TYPE_IS_TRUE:
2605
    case OP_TYPE_IS_FALSE:
2606
    case OP_TYPE_IS_UNKNOWN:
2607
    case OP_TYPE_IS_NOT_TRUE:
2608
    case OP_TYPE_IS_NOT_FALSE:
2609
    case OP_TYPE_IS_NOT_UNKNOWN:
2610
      return true;
×
2611
    default:
×
2612
      break;
×
2613
  }
2614
  return false;
×
2615
}
2616

2617
bool nodesIsArithmeticOp(const SOperatorNode* pOp) {
×
2618
  switch (pOp->opType) {
×
2619
    case OP_TYPE_ADD:
×
2620
    case OP_TYPE_SUB:
2621
    case OP_TYPE_MULTI:
2622
    case OP_TYPE_DIV:
2623
    case OP_TYPE_REM:
2624
      return true;
×
2625
    default:
×
2626
      break;
×
2627
  }
2628
  return false;
×
2629
}
2630

2631
bool nodesIsComparisonOp(const SOperatorNode* pOp) {
1,391,585✔
2632
  switch (pOp->opType) {
1,391,585✔
2633
    case OP_TYPE_GREATER_THAN:
1,390,515✔
2634
    case OP_TYPE_GREATER_EQUAL:
2635
    case OP_TYPE_LOWER_THAN:
2636
    case OP_TYPE_LOWER_EQUAL:
2637
    case OP_TYPE_EQUAL:
2638
    case OP_TYPE_NOT_EQUAL:
2639
    case OP_TYPE_IN:
2640
    case OP_TYPE_NOT_IN:
2641
    case OP_TYPE_LIKE:
2642
    case OP_TYPE_NOT_LIKE:
2643
    case OP_TYPE_MATCH:
2644
    case OP_TYPE_NMATCH:
2645
    case OP_TYPE_JSON_CONTAINS:
2646
    case OP_TYPE_IS_NULL:
2647
    case OP_TYPE_IS_NOT_NULL:
2648
    case OP_TYPE_IS_TRUE:
2649
    case OP_TYPE_IS_FALSE:
2650
    case OP_TYPE_IS_UNKNOWN:
2651
    case OP_TYPE_IS_NOT_TRUE:
2652
    case OP_TYPE_IS_NOT_FALSE:
2653
    case OP_TYPE_IS_NOT_UNKNOWN:
2654
      return true;
1,390,515✔
2655
    default:
1,070✔
2656
      break;
1,070✔
2657
  }
2658
  return false;
1,070✔
2659
}
2660

2661
bool nodesIsJsonOp(const SOperatorNode* pOp) {
×
2662
  switch (pOp->opType) {
×
2663
    case OP_TYPE_JSON_GET_VALUE:
×
2664
    case OP_TYPE_JSON_CONTAINS:
2665
      return true;
×
2666
    default:
×
2667
      break;
×
2668
  }
2669
  return false;
×
2670
}
2671

2672
bool nodesIsRegularOp(const SOperatorNode* pOp) {
1,473,256✔
2673
  switch (pOp->opType) {
1,473,256✔
2674
    case OP_TYPE_LIKE:
106,719✔
2675
    case OP_TYPE_NOT_LIKE:
2676
    case OP_TYPE_MATCH:
2677
    case OP_TYPE_NMATCH:
2678
      return true;
106,719✔
2679
    default:
1,366,537✔
2680
      break;
1,366,537✔
2681
  }
2682
  return false;
1,366,537✔
2683
}
2684

2685
bool nodesIsMatchRegularOp(const SOperatorNode* pOp) {
106,614✔
2686
  switch (pOp->opType) {
106,614✔
2687
    case OP_TYPE_MATCH:
49,976✔
2688
    case OP_TYPE_NMATCH:
2689
      return true;
49,976✔
2690
    default:
56,638✔
2691
      break;
56,638✔
2692
  }
2693
  return false;
56,638✔
2694
}
2695

2696
bool nodesIsBitwiseOp(const SOperatorNode* pOp) {
×
2697
  switch (pOp->opType) {
×
2698
    case OP_TYPE_BIT_AND:
×
2699
    case OP_TYPE_BIT_OR:
2700
      return true;
×
2701
    default:
×
2702
      break;
×
2703
  }
2704
  return false;
×
2705
}
2706

2707
typedef struct SCollectColumnsCxt {
2708
  int32_t         errCode;
2709
  const char*     pTableAlias;
2710
  SSHashObj*      pMultiTableAlias;
2711
  ECollectColType collectType;
2712
  SNodeList*      pCols;
2713
  SHashObj*       pColHash;
2714
} SCollectColumnsCxt;
2715

2716
static EDealRes doCollect(SCollectColumnsCxt* pCxt, SColumnNode* pCol, SNode* pNode) {
11,675,853✔
2717
  char    name[TSDB_TABLE_NAME_LEN + TSDB_COL_NAME_LEN];
2718
  int32_t len = 0;
11,675,853✔
2719
  if ('\0' == pCol->tableAlias[0]) {
11,675,853✔
2720
    len = tsnprintf(name, sizeof(name), "%s", pCol->colName);
494,372✔
2721
  } else {
2722
    len = tsnprintf(name, sizeof(name), "%s.%s", pCol->tableAlias, pCol->colName);
11,181,481✔
2723
  }
2724
  if (pCol->projRefIdx > 0) {
11,676,029✔
2725
    len = taosHashBinary(name, strlen(name));
38,170✔
2726
    len += tsnprintf(name + len, TSDB_TABLE_NAME_LEN + TSDB_COL_NAME_LEN - len, "_%d", pCol->projRefIdx);
38,170✔
2727
  }
2728
  SNode** pNodeFound = taosHashGet(pCxt->pColHash, name, len);
11,676,029✔
2729
  if (pNodeFound == NULL) {
11,675,799✔
2730
    pCxt->errCode = taosHashPut(pCxt->pColHash, name, len, &pNode, POINTER_BYTES);
8,334,996✔
2731
    if (TSDB_CODE_SUCCESS == pCxt->errCode) {
8,335,233!
2732
      SNode* pNew = NULL;
8,335,233✔
2733
      pCxt->errCode = nodesCloneNode(pNode, &pNew);
8,335,233✔
2734
      if (TSDB_CODE_SUCCESS == pCxt->errCode) {
8,335,094✔
2735
        pCxt->errCode = nodesListStrictAppend(pCxt->pCols, pNew);
8,335,086✔
2736
      }
2737
    }
2738
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
8,335,176!
2739
  }
2740
  return DEAL_RES_CONTINUE;
3,340,803✔
2741
}
2742

2743
static bool isCollectType(ECollectColType collectType, EColumnType colType) {
21,379,171✔
2744
  return COLLECT_COL_TYPE_ALL == collectType
2745
             ? true
2746
             : (COLLECT_COL_TYPE_TAG == collectType ? COLUMN_TYPE_TAG == colType
29,339,347✔
2747
                                                    : (COLUMN_TYPE_TAG != colType && COLUMN_TYPE_TBNAME != colType));
7,960,176✔
2748
}
2749

2750
static EDealRes collectColumns(SNode* pNode, void* pContext) {
52,349,137✔
2751
  SCollectColumnsCxt* pCxt = (SCollectColumnsCxt*)pContext;
52,349,137✔
2752
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
52,349,137✔
2753
    SColumnNode* pCol = (SColumnNode*)pNode;
20,885,517✔
2754
    if (isCollectType(pCxt->collectType, pCol->colType) && 0 != strcmp(pCol->colName, "*") &&
20,885,517!
2755
        (NULL == pCxt->pTableAlias || 0 == strcmp(pCxt->pTableAlias, pCol->tableAlias))) {
12,397,617✔
2756
      return doCollect(pCxt, pCol, pNode);
11,182,506✔
2757
    }
2758
  }
2759
  return DEAL_RES_CONTINUE;
41,166,661✔
2760
}
2761

2762
static EDealRes collectColumnsExt(SNode* pNode, void* pContext) {
950,708✔
2763
  SCollectColumnsCxt* pCxt = (SCollectColumnsCxt*)pContext;
950,708✔
2764
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
950,708✔
2765
    SColumnNode* pCol = (SColumnNode*)pNode;
493,687✔
2766
    if (isCollectType(pCxt->collectType, pCol->colType) && 0 != strcmp(pCol->colName, "*") &&
493,687!
2767
        (NULL == pCxt->pMultiTableAlias ||
493,687!
2768
         NULL != (pCxt->pTableAlias =
493,687✔
2769
                      tSimpleHashGet(pCxt->pMultiTableAlias, pCol->tableAlias, strlen(pCol->tableAlias))))) {
493,687✔
2770
      return doCollect(pCxt, pCol, pNode);
492,163✔
2771
    }
2772
  }
2773
  return DEAL_RES_CONTINUE;
458,545✔
2774
}
2775

2776
int32_t nodesCollectColumns(SSelectStmt* pSelect, ESqlClause clause, const char* pTableAlias, ECollectColType type,
2,759,821✔
2777
                            SNodeList** pCols) {
2778
  if (NULL == pSelect || NULL == pCols) {
2,759,821!
2779
    return TSDB_CODE_FAILED;
×
2780
  }
2781
  SNodeList* pList = NULL;
2,759,878✔
2782
  if (!*pCols) {
2,759,878!
2783
    int32_t code = nodesMakeList(&pList);
2,759,886✔
2784
    if (TSDB_CODE_SUCCESS != code) {
2,759,874!
2785
      return code;
×
2786
    }
2787
  }
2788
  SCollectColumnsCxt cxt = {
8,279,632✔
2789
      .errCode = TSDB_CODE_SUCCESS,
2790
      .pTableAlias = pTableAlias,
2791
      .collectType = type,
2792
      .pCols = (NULL == *pCols ? pList : *pCols),
2,759,866!
2793
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
2,759,866✔
2794
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
2,759,900!
2795
    return TSDB_CODE_OUT_OF_MEMORY;
×
2796
  }
2797
  *pCols = NULL;
2,759,900✔
2798
  nodesWalkSelectStmt(pSelect, clause, collectColumns, &cxt);
2,759,900✔
2799
  taosHashCleanup(cxt.pColHash);
2,759,914✔
2800
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
2,759,922!
2801
    nodesDestroyList(cxt.pCols);
×
2802
    return cxt.errCode;
×
2803
  }
2804
  if (LIST_LENGTH(cxt.pCols) > 0) {
2,759,922!
2805
    *pCols = cxt.pCols;
1,686,407✔
2806
  } else {
2807
    nodesDestroyList(cxt.pCols);
1,073,515✔
2808
  }
2809

2810
  return TSDB_CODE_SUCCESS;
2,759,874✔
2811
}
2812

2813
int32_t nodesCollectColumnsExt(SSelectStmt* pSelect, ESqlClause clause, SSHashObj* pMultiTableAlias,
126,891✔
2814
                               ECollectColType type, SNodeList** pCols) {
2815
  if (NULL == pSelect || NULL == pCols) {
126,891!
2816
    return TSDB_CODE_FAILED;
×
2817
  }
2818

2819
  SNodeList* pList = NULL;
126,891✔
2820
  if (!*pCols) {
126,891!
2821
    int32_t code = nodesMakeList(&pList);
126,891✔
2822
    if (TSDB_CODE_SUCCESS != code) {
126,891!
2823
      return code;
×
2824
    }
2825
  }
2826

2827
  SCollectColumnsCxt cxt = {
380,673✔
2828
      .errCode = TSDB_CODE_SUCCESS,
2829
      .pTableAlias = NULL,
2830
      .pMultiTableAlias = pMultiTableAlias,
2831
      .collectType = type,
2832
      .pCols = (NULL == *pCols ? pList : *pCols),
126,891!
2833
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
126,891✔
2834
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
126,891!
2835
    return TSDB_CODE_OUT_OF_MEMORY;
×
2836
  }
2837
  *pCols = NULL;
126,891✔
2838
  nodesWalkSelectStmtImpl(pSelect, clause, collectColumnsExt, &cxt);
126,891✔
2839
  taosHashCleanup(cxt.pColHash);
126,891✔
2840
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
126,891!
2841
    nodesDestroyList(cxt.pCols);
×
2842
    return cxt.errCode;
×
2843
  }
2844
  if (LIST_LENGTH(cxt.pCols) > 0) {
126,891!
2845
    *pCols = cxt.pCols;
123,085✔
2846
  } else {
2847
    nodesDestroyList(cxt.pCols);
3,806✔
2848
  }
2849

2850
  return TSDB_CODE_SUCCESS;
126,891✔
2851
}
2852

2853
int32_t nodesCollectColumnsFromNode(SNode* node, const char* pTableAlias, ECollectColType type, SNodeList** pCols) {
1,949,387✔
2854
  if (NULL == pCols) {
1,949,387!
2855
    return TSDB_CODE_FAILED;
×
2856
  }
2857
  SNodeList* pList = NULL;
1,949,387✔
2858
  if (!*pCols) {
1,949,387✔
2859
    int32_t code = nodesMakeList(&pList);
19,836✔
2860
    if (TSDB_CODE_SUCCESS != code) {
19,836!
2861
      return code;
×
2862
    }
2863
  }
2864

2865
  SCollectColumnsCxt cxt = {
5,848,261✔
2866
      .errCode = TSDB_CODE_SUCCESS,
2867
      .pTableAlias = pTableAlias,
2868
      .collectType = type,
2869
      .pCols = (NULL == *pCols ? pList : *pCols),
1,949,387✔
2870
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
1,949,387✔
2871
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
1,949,487!
2872
    return TSDB_CODE_OUT_OF_MEMORY;
×
2873
  }
2874
  *pCols = NULL;
1,949,487✔
2875

2876
  nodesWalkExpr(node, collectColumns, &cxt);
1,949,487✔
2877

2878
  taosHashCleanup(cxt.pColHash);
1,949,500✔
2879
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
1,949,513!
2880
    nodesDestroyList(cxt.pCols);
×
2881
    return cxt.errCode;
×
2882
  }
2883
  if (LIST_LENGTH(cxt.pCols) > 0) {
1,949,513!
2884
    *pCols = cxt.pCols;
1,905,362✔
2885
  } else {
2886
    nodesDestroyList(cxt.pCols);
44,151✔
2887
  }
2888

2889
  return TSDB_CODE_SUCCESS;
1,949,487✔
2890
}
2891

2892
typedef struct SCollectFuncsCxt {
2893
  int32_t         errCode;
2894
  char*           tableAlias;
2895
  FFuncClassifier classifier;
2896
  SNodeList*      pFuncs;
2897
} SCollectFuncsCxt;
2898

2899
static EDealRes collectFuncs(SNode* pNode, void* pContext) {
27,314,649✔
2900
  SCollectFuncsCxt* pCxt = (SCollectFuncsCxt*)pContext;
27,314,649✔
2901
  if (QUERY_NODE_FUNCTION == nodeType(pNode) && pCxt->classifier(((SFunctionNode*)pNode)->funcId)) {
27,314,649✔
2902
    SFunctionNode* pFunc = (SFunctionNode*)pNode;
2,730,291✔
2903
    if (FUNCTION_TYPE_TBNAME == pFunc->funcType && pCxt->tableAlias) {
2,730,291!
2904
      SValueNode* pVal = (SValueNode*)nodesListGetNode(pFunc->pParameterList, 0);
483,817✔
2905
      if (pVal && strcmp(pVal->literal, pCxt->tableAlias)) {
483,817✔
2906
        return DEAL_RES_CONTINUE;
432✔
2907
      }
2908
    }
2909

2910
    bool   bFound = false;
2,729,859✔
2911
    SNode* pn = NULL;
2,729,859✔
2912
    FOREACH(pn, pCxt->pFuncs) {
358,890,995!
2913
      if (nodesEqualNode(pn, pNode)) {
356,707,852✔
2914
        bFound = true;
546,720✔
2915
        break;
546,720✔
2916
      }
2917
    }
2918
    if (!bFound) {
2,729,863✔
2919
      SNode* pNew = NULL;
2,183,118✔
2920
      pCxt->errCode = nodesCloneNode(pNode, &pNew);
2,183,118✔
2921
      if (TSDB_CODE_SUCCESS == pCxt->errCode) {
2,183,148!
2922
        pCxt->errCode = nodesListStrictAppend(pCxt->pFuncs, pNew);
2,183,148✔
2923
      }
2924
    }
2925
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
2,729,900✔
2926
  }
2927
  return DEAL_RES_CONTINUE;
24,584,354✔
2928
}
2929

2930
static uint32_t funcNodeHash(const char* pKey, uint32_t len) {
×
2931
  SExprNode* pExpr = *(SExprNode**)pKey;
×
2932
  return MurmurHash3_32(pExpr->aliasName, strlen(pExpr->aliasName));
×
2933
}
2934

2935
static int32_t funcNodeEqual(const void* pLeft, const void* pRight, size_t len) {
×
2936
  // if (0 != strcmp((*(const SExprNode**)pLeft)->aliasName, (*(const SExprNode**)pRight)->aliasName)) {
2937
  //   return 1;
2938
  // }
2939
  return nodesEqualNode(*(const SNode**)pLeft, *(const SNode**)pRight) ? 0 : 1;
×
2940
}
2941

2942
int32_t nodesCollectSelectFuncs(SSelectStmt* pSelect, ESqlClause clause, char* tableAlias, FFuncClassifier classifier,
40,163✔
2943
                                SNodeList* pFuncs) {
2944
  if (NULL == pSelect || NULL == pFuncs) {
40,163!
2945
    return TSDB_CODE_FAILED;
×
2946
  }
2947

2948
  SCollectFuncsCxt cxt = {
40,165✔
2949
      .errCode = TSDB_CODE_SUCCESS, .classifier = classifier, .tableAlias = tableAlias, .pFuncs = pFuncs};
2950

2951
  nodesWalkSelectStmt(pSelect, clause, collectFuncs, &cxt);
40,165✔
2952
  return cxt.errCode;
40,165✔
2953
}
2954

2955
int32_t nodesCollectFuncs(SSelectStmt* pSelect, ESqlClause clause, char* tableAlias, FFuncClassifier classifier,
2,026,137✔
2956
                          SNodeList** pFuncs) {
2957
  if (NULL == pSelect || NULL == pFuncs) {
2,026,137!
2958
    return TSDB_CODE_FAILED;
×
2959
  }
2960
  SNodeList* pList = NULL;
2,026,196✔
2961
  if (!*pFuncs) {
2,026,196✔
2962
    int32_t code = nodesMakeList(&pList);
1,758,401✔
2963
    if (TSDB_CODE_SUCCESS != code) {
1,758,406!
2964
      return code;
×
2965
    }
2966
  }
2967
  SCollectFuncsCxt cxt = {.errCode = TSDB_CODE_SUCCESS,
4,052,402✔
2968
                          .classifier = classifier,
2969
                          .tableAlias = tableAlias,
2970
                          .pFuncs = (NULL == *pFuncs ? pList : *pFuncs)};
2,026,201✔
2971
  if (NULL == cxt.pFuncs) {
2,026,201!
2972
    return TSDB_CODE_OUT_OF_MEMORY;
×
2973
  }
2974
  *pFuncs = NULL;
2,026,201✔
2975
  nodesWalkSelectStmt(pSelect, clause, collectFuncs, &cxt);
2,026,201✔
2976
  if (TSDB_CODE_SUCCESS == cxt.errCode) {
2,026,234!
2977
    if (LIST_LENGTH(cxt.pFuncs) > 0) {
2,026,234✔
2978
      *pFuncs = cxt.pFuncs;
1,021,559✔
2979
    } else {
2980
      nodesDestroyList(cxt.pFuncs);
1,004,675✔
2981
    }
2982
  } else {
2983
    nodesDestroyList(cxt.pFuncs);
×
2984
  }
2985

2986
  return cxt.errCode;
2,026,215✔
2987
}
2988

2989
typedef struct SCollectSpecialNodesCxt {
2990
  int32_t    errCode;
2991
  ENodeType  type;
2992
  SNodeList* pNodes;
2993
} SCollectSpecialNodesCxt;
2994

2995
static EDealRes collectSpecialNodes(SNode* pNode, void* pContext) {
×
2996
  SCollectSpecialNodesCxt* pCxt = (SCollectSpecialNodesCxt*)pContext;
×
2997
  if (pCxt->type == nodeType(pNode)) {
×
2998
    SNode* pNew = NULL;
×
2999
    pCxt->errCode = nodesCloneNode(pNode, &pNew);
×
3000
    if (TSDB_CODE_SUCCESS == pCxt->errCode) {
×
3001
      pCxt->errCode = nodesListStrictAppend(pCxt->pNodes, pNew);
×
3002
    }
3003
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
×
3004
  }
3005
  return DEAL_RES_CONTINUE;
×
3006
}
3007

3008
int32_t nodesCollectSpecialNodes(SSelectStmt* pSelect, ESqlClause clause, ENodeType type, SNodeList** ppNodes) {
×
3009
  if (NULL == pSelect || NULL == ppNodes) {
×
3010
    return TSDB_CODE_FAILED;
×
3011
  }
3012
  SCollectSpecialNodesCxt cxt = {.errCode = TSDB_CODE_SUCCESS, .type = type, .pNodes = NULL};
×
3013
  if (!*ppNodes) {
×
3014
    cxt.errCode = nodesMakeList(&cxt.pNodes);
×
3015
  } else {
3016
    cxt.pNodes = *ppNodes;
×
3017
  }
3018
  if (NULL == cxt.pNodes) {
×
3019
    return cxt.errCode;
×
3020
  }
3021
  *ppNodes = NULL;
×
3022
  nodesWalkSelectStmt(pSelect, SQL_CLAUSE_GROUP_BY, collectSpecialNodes, &cxt);
×
3023
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
×
3024
    nodesDestroyList(cxt.pNodes);
×
3025
    return cxt.errCode;
×
3026
  }
3027
  if (LIST_LENGTH(cxt.pNodes) > 0) {
×
3028
    *ppNodes = cxt.pNodes;
×
3029
  } else {
3030
    nodesDestroyList(cxt.pNodes);
×
3031
  }
3032

3033
  return TSDB_CODE_SUCCESS;
×
3034
}
3035

3036
static EDealRes hasColumn(SNode* pNode, void* pContext) {
20,248✔
3037
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
20,248✔
3038
    *(bool*)pContext = true;
20,208✔
3039
    return DEAL_RES_END;
20,208✔
3040
  }
3041
  return DEAL_RES_CONTINUE;
40✔
3042
}
3043

3044
bool nodesExprHasColumn(SNode* pNode) {
20,248✔
3045
  bool hasCol = false;
20,248✔
3046
  nodesWalkExprPostOrder(pNode, hasColumn, &hasCol);
20,248✔
3047
  return hasCol;
20,248✔
3048
}
3049

3050
bool nodesExprsHasColumn(SNodeList* pList) {
×
3051
  bool hasCol = false;
×
3052
  nodesWalkExprsPostOrder(pList, hasColumn, &hasCol);
×
3053
  return hasCol;
×
3054
}
3055

3056
char* nodesGetFillModeString(EFillMode mode) {
1,026✔
3057
  switch (mode) {
1,026!
3058
    case FILL_MODE_NONE:
×
3059
      return "none";
×
3060
    case FILL_MODE_VALUE:
146✔
3061
      return "value";
146✔
3062
    case FILL_MODE_VALUE_F:
96✔
3063
      return "value_f";
96✔
3064
    case FILL_MODE_PREV:
242✔
3065
      return "prev";
242✔
3066
    case FILL_MODE_NULL:
104✔
3067
      return "null";
104✔
3068
    case FILL_MODE_NULL_F:
×
3069
      return "null_f";
×
3070
    case FILL_MODE_LINEAR:
246✔
3071
      return "linear";
246✔
3072
    case FILL_MODE_NEXT:
192✔
3073
      return "next";
192✔
3074
    default:
×
3075
      return "unknown";
×
3076
  }
3077
}
3078

3079
char* nodesGetNameFromColumnNode(SNode* pNode) {
38,029✔
3080
  if (NULL == pNode || QUERY_NODE_COLUMN != pNode->type) {
38,029!
3081
    return "NULL";
×
3082
  }
3083

3084
  return ((SColumnNode*)pNode)->node.userAlias;
38,030✔
3085
}
3086

3087
int32_t nodesGetOutputNumFromSlotList(SNodeList* pSlots) {
234,150✔
3088
  if (NULL == pSlots || pSlots->length <= 0) {
234,150!
3089
    return 0;
×
3090
  }
3091

3092
  SNode*  pNode = NULL;
234,150✔
3093
  int32_t num = 0;
234,150✔
3094
  FOREACH(pNode, pSlots) {
2,187,290!
3095
    if (QUERY_NODE_SLOT_DESC != pNode->type) {
1,953,140!
3096
      continue;
×
3097
    }
3098

3099
    SSlotDescNode* descNode = (SSlotDescNode*)pNode;
1,953,140✔
3100
    if (descNode->output) {
1,953,140✔
3101
      ++num;
1,947,797✔
3102
    }
3103
  }
3104

3105
  return num;
234,150✔
3106
}
3107

3108
int32_t nodesValueNodeToVariant(const SValueNode* pNode, SVariant* pVal) {
3,064,582✔
3109
  int32_t code = 0;
3,064,582✔
3110
  if (pNode->isNull) {
3,064,582✔
3111
    pVal->nType = TSDB_DATA_TYPE_NULL;
8,507✔
3112
    pVal->nLen = tDataTypes[TSDB_DATA_TYPE_NULL].bytes;
8,507✔
3113
    return code;
8,507✔
3114
  }
3115
  pVal->nType = pNode->node.resType.type;
3,056,075✔
3116
  pVal->nLen = pNode->node.resType.bytes;
3,056,075✔
3117
  switch (pNode->node.resType.type) {
3,056,075!
3118
    case TSDB_DATA_TYPE_NULL:
×
3119
      break;
×
3120
    case TSDB_DATA_TYPE_BOOL:
285✔
3121
      pVal->i = pNode->datum.b;
285✔
3122
      break;
285✔
3123
    case TSDB_DATA_TYPE_TINYINT:
2,309,510✔
3124
    case TSDB_DATA_TYPE_SMALLINT:
3125
    case TSDB_DATA_TYPE_INT:
3126
    case TSDB_DATA_TYPE_BIGINT:
3127
    case TSDB_DATA_TYPE_TIMESTAMP:
3128
      pVal->i = pNode->datum.i;
2,309,510✔
3129
      break;
2,309,510✔
3130
    case TSDB_DATA_TYPE_UTINYINT:
343✔
3131
    case TSDB_DATA_TYPE_USMALLINT:
3132
    case TSDB_DATA_TYPE_UINT:
3133
    case TSDB_DATA_TYPE_UBIGINT:
3134
      pVal->u = pNode->datum.u;
343✔
3135
      break;
343✔
3136
    case TSDB_DATA_TYPE_FLOAT:
26,101✔
3137
      pVal->f = pNode->datum.d;
26,101✔
3138
      break;
26,101✔
3139
    case TSDB_DATA_TYPE_DOUBLE:
224,464✔
3140
      pVal->d = pNode->datum.d;
224,464✔
3141
      break;
224,464✔
3142
    case TSDB_DATA_TYPE_NCHAR:
495,484✔
3143
    case TSDB_DATA_TYPE_VARCHAR:
3144
    case TSDB_DATA_TYPE_VARBINARY:
3145
    case TSDB_DATA_TYPE_GEOMETRY:
3146
      pVal->pz = taosMemoryCalloc(1, pVal->nLen + 1);
495,484!
3147
      if (pVal->pz) {
495,697!
3148
        memcpy(pVal->pz, pNode->datum.p, varDataTLen(pNode->datum.p));
495,697✔
3149
      } else {
3150
        code = terrno;
×
3151
      }
3152
      break;
495,697✔
3153
    case TSDB_DATA_TYPE_JSON:
12✔
3154
      pVal->nLen = getJsonValueLen(pNode->datum.p);
12✔
3155
      pVal->pz = taosMemoryCalloc(1, pVal->nLen);
12!
3156
      if (pVal->pz) {
12!
3157
        memcpy(pVal->pz, pNode->datum.p, pVal->nLen);
12✔
3158
      } else {
3159
        code = terrno;
×
3160
      }
3161
      break;
12✔
3162
    case TSDB_DATA_TYPE_DECIMAL64:
×
3163
      pVal->d = pNode->datum.d;
×
3164
      break;
×
3165
    case TSDB_DATA_TYPE_DECIMAL:
15✔
3166
      pVal->pz = taosMemoryCalloc(1, pVal->nLen);
15!
3167
      if (!pVal->pz) {
15!
3168
        code = terrno;
×
3169
        break;
×
3170
      }
3171
      memcpy(pVal->pz, pNode->datum.p, pVal->nLen);
15✔
3172
      break;
15✔
3173
    case TSDB_DATA_TYPE_BLOB:
×
3174
      // todo
3175
    default:
3176
      break;
×
3177
  }
3178
  return code;
3,056,288✔
3179
}
3180

3181
int32_t nodesMergeConds(SNode** pDst, SNodeList** pSrc) {
3,114,976✔
3182
  if (NULL == *pSrc) {
3,114,976✔
3183
    return TSDB_CODE_SUCCESS;
2,307,366✔
3184
  }
3185

3186
  if (1 == LIST_LENGTH(*pSrc)) {
807,610!
3187
    *pDst = nodesListGetNode(*pSrc, 0);
185,232✔
3188
    nodesClearList(*pSrc);
185,232✔
3189
  } else {
3190
    SLogicConditionNode* pLogicCond = NULL;
622,378✔
3191
    int32_t              code = nodesMakeNode(QUERY_NODE_LOGIC_CONDITION, (SNode**)&pLogicCond);
622,378✔
3192
    if (TSDB_CODE_SUCCESS != code) {
622,475!
3193
      return code;
×
3194
    }
3195
    pLogicCond->node.resType.type = TSDB_DATA_TYPE_BOOL;
622,475✔
3196
    pLogicCond->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes;
622,475✔
3197
    pLogicCond->condType = LOGIC_COND_TYPE_AND;
622,475✔
3198
    pLogicCond->pParameterList = *pSrc;
622,475✔
3199
    *pDst = (SNode*)pLogicCond;
622,475✔
3200
  }
3201
  *pSrc = NULL;
807,677✔
3202

3203
  return TSDB_CODE_SUCCESS;
807,677✔
3204
}
3205

3206
const char* dataOrderStr(EDataOrderLevel order) {
×
3207
  switch (order) {
×
3208
    case DATA_ORDER_LEVEL_NONE:
×
3209
      return "no order required";
×
3210
    case DATA_ORDER_LEVEL_IN_BLOCK:
×
3211
      return "in-datablock order";
×
3212
    case DATA_ORDER_LEVEL_IN_GROUP:
×
3213
      return "in-group order";
×
3214
    case DATA_ORDER_LEVEL_GLOBAL:
×
3215
      return "global order";
×
3216
    default:
×
3217
      break;
×
3218
  }
3219
  return "unknown";
×
3220
}
3221

3222
int32_t nodesMakeValueNodeFromString(char* literal, SValueNode** ppValNode) {
2,878✔
3223
  int32_t     lenStr = strlen(literal);
2,878✔
3224
  SValueNode* pValNode = NULL;
2,878✔
3225
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
2,878✔
3226
  if (pValNode) {
2,878!
3227
    pValNode->node.resType.type = TSDB_DATA_TYPE_VARCHAR;
2,878✔
3228
    pValNode->node.resType.bytes = lenStr + VARSTR_HEADER_SIZE;
2,878✔
3229
    char* p = taosMemoryMalloc(lenStr + 1 + VARSTR_HEADER_SIZE);
2,878!
3230
    if (p == NULL) {
2,878!
3231
      return terrno;
×
3232
    }
3233
    varDataSetLen(p, lenStr);
2,878✔
3234
    memcpy(varDataVal(p), literal, lenStr + 1);
2,878✔
3235
    pValNode->datum.p = p;
2,878✔
3236
    pValNode->literal = tstrdup(literal);
2,878✔
3237
    pValNode->translate = true;
2,878✔
3238
    pValNode->isNull = false;
2,878✔
3239
    *ppValNode = pValNode;
2,878✔
3240
  }
3241
  return code;
2,878✔
3242
}
3243

3244
int32_t nodesMakeValueNodeFromBool(bool b, SValueNode** ppValNode) {
4✔
3245
  SValueNode* pValNode = NULL;
4✔
3246
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
4✔
3247
  if (TSDB_CODE_SUCCESS == code) {
4!
3248
    pValNode->node.resType.type = TSDB_DATA_TYPE_BOOL;
4✔
3249
    pValNode->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes;
4✔
3250
    code = nodesSetValueNodeValue(pValNode, &b);
4✔
3251
    if (TSDB_CODE_SUCCESS == code) {
4!
3252
      pValNode->translate = true;
4✔
3253
      pValNode->isNull = false;
4✔
3254
      *ppValNode = pValNode;
4✔
3255
    } else {
3256
      nodesDestroyNode((SNode*)pValNode);
×
3257
    }
3258
  }
3259
  return code;
4✔
3260
}
3261

3262
int32_t nodesMakeValueNodeFromInt32(int32_t value, SNode** ppNode) {
175✔
3263
  SValueNode* pValNode = NULL;
175✔
3264
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
175✔
3265
  if (TSDB_CODE_SUCCESS == code) {
175!
3266
    pValNode->node.resType.type = TSDB_DATA_TYPE_INT;
175✔
3267
    pValNode->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_INT].bytes;
175✔
3268
    code = nodesSetValueNodeValue(pValNode, &value);
175✔
3269
    if (TSDB_CODE_SUCCESS == code) {
175!
3270
      pValNode->translate = true;
175✔
3271
      pValNode->isNull = false;
175✔
3272
      *ppNode = (SNode*)pValNode;
175✔
3273
    } else {
3274
      nodesDestroyNode((SNode*)pValNode);
×
3275
    }
3276
  }
3277
  return code;
175✔
3278
}
3279

3280
int32_t nodesMakeValueNodeFromInt64(int64_t value, SNode** ppNode) {
22,586✔
3281
  SValueNode* pValNode = NULL;
22,586✔
3282
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
22,586✔
3283
  if (TSDB_CODE_SUCCESS == code) {
22,586!
3284
    pValNode->node.resType.type = TSDB_DATA_TYPE_BIGINT;
22,586✔
3285
    pValNode->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
22,586✔
3286
    code = nodesSetValueNodeValue(pValNode, &value);
22,586✔
3287
    if (TSDB_CODE_SUCCESS == code) {
22,586!
3288
      pValNode->translate = true;
22,586✔
3289
      pValNode->isNull = false;
22,586✔
3290
      *ppNode = (SNode*)pValNode;
22,586✔
3291
    } else {
3292
      nodesDestroyNode((SNode*)pValNode);
×
3293
    }
3294
  }
3295
  return code;
22,586✔
3296
}
3297

3298

3299
bool nodesIsStar(SNode* pNode) {
3,402,571✔
3300
  return (QUERY_NODE_COLUMN == nodeType(pNode)) && ('\0' == ((SColumnNode*)pNode)->tableAlias[0]) &&
3,595,958✔
3301
         (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
193,387✔
3302
}
3303

3304
bool nodesIsTableStar(SNode* pNode) {
3,196,189✔
3305
  return (QUERY_NODE_COLUMN == nodeType(pNode)) && ('\0' != ((SColumnNode*)pNode)->tableAlias[0]) &&
4,383,088✔
3306
         (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
1,186,899✔
3307
}
3308

3309
void nodesSortList(SNodeList** pList, int32_t (*comp)(SNode* pNode1, SNode* pNode2)) {
212✔
3310
  if ((*pList)->length == 1) return;
212✔
3311

3312
  uint32_t   inSize = 1;
196✔
3313
  SListCell* pHead = (*pList)->pHead;
196✔
3314
  while (1) {
343✔
3315
    SListCell* p = pHead;
539✔
3316
    pHead = NULL;
539✔
3317
    SListCell* pTail = NULL;
539✔
3318

3319
    uint32_t nMerges = 0;
539✔
3320
    while (p) {
50,192✔
3321
      ++nMerges;
49,653✔
3322
      SListCell* q = p;
49,653✔
3323
      uint32_t   pSize = 0;
49,653✔
3324
      for (uint32_t i = 0; i < inSize; ++i) {
345,133✔
3325
        ++pSize;
295,616✔
3326
        q = q->pNext;
295,616✔
3327
        if (!q) {
295,616✔
3328
          break;
136✔
3329
        }
3330
      }
3331

3332
      uint32_t qSize = inSize;
49,653✔
3333

3334
      while (pSize > 0 || (qSize > 0 && q)) {
638,784✔
3335
        SListCell* pCell;
3336
        if (pSize == 0) {
589,131✔
3337
          pCell = q;
90,847✔
3338
          q = q->pNext;
90,847✔
3339
          --qSize;
90,847✔
3340
        } else if (qSize == 0 || !q) {
498,284✔
3341
          pCell = p;
18,041✔
3342
          p = p->pNext;
18,041✔
3343
          --pSize;
18,041✔
3344
        } else if (comp(q->pNode, p->pNode) >= 0) {
480,243✔
3345
          pCell = p;
277,575✔
3346
          p = p->pNext;
277,575✔
3347
          --pSize;
277,575✔
3348
        } else {
3349
          pCell = q;
202,668✔
3350
          q = q->pNext;
202,668✔
3351
          --qSize;
202,668✔
3352
        }
3353

3354
        if (pTail) {
589,131✔
3355
          pTail->pNext = pCell;
588,592✔
3356
          pCell->pPrev = pTail;
588,592✔
3357
        } else {
3358
          pHead = pCell;
539✔
3359
          pHead->pPrev = NULL;
539✔
3360
        }
3361
        pTail = pCell;
589,131✔
3362
      }
3363
      p = q;
49,653✔
3364
    }
3365
    pTail->pNext = NULL;
539✔
3366

3367
    if (nMerges <= 1) {
539✔
3368
      (*pList)->pHead = pHead;
196✔
3369
      (*pList)->pTail = pTail;
196✔
3370
      return;
196✔
3371
    }
3372
    inSize *= 2;
343✔
3373
  }
3374
}
3375

3376
static SNode* nodesListFindNode(SNodeList* pList, SNode* pNode) {
1,946✔
3377
  SNode* pFound = NULL;
1,946✔
3378
  FOREACH(pFound, pList) {
4,281!
3379
    if (nodesEqualNode(pFound, pNode)) {
2,366✔
3380
      break;
31✔
3381
    }
3382
  }
3383
  return pFound;
1,946✔
3384
}
3385

3386
int32_t nodesListDeduplicate(SNodeList** ppList) {
192,509✔
3387
  if (!ppList || LIST_LENGTH(*ppList) <= 1) return TSDB_CODE_SUCCESS;
192,509!
3388
  if (LIST_LENGTH(*ppList) == 2) {
5,241!
3389
    SNode* pNode1 = nodesListGetNode(*ppList, 0);
4,667✔
3390
    SNode* pNode2 = nodesListGetNode(*ppList, 1);
4,667✔
3391
    if (nodesEqualNode(pNode1, pNode2)) {
4,667✔
3392
      SListCell* pCell = nodesListGetCell(*ppList, 1);
1✔
3393
      (void)nodesListErase(*ppList, pCell);
1✔
3394
    }
3395
    return TSDB_CODE_SUCCESS;
4,667✔
3396
  }
3397
  SNodeList* pTmp = NULL;
574✔
3398
  int32_t    code = nodesMakeList(&pTmp);
574✔
3399
  if (TSDB_CODE_SUCCESS == code) {
574!
3400
    SNode* pNode = NULL;
574✔
3401
    FOREACH(pNode, *ppList) {
2,520!
3402
      SNode* pFound = nodesListFindNode(pTmp, pNode);
1,946✔
3403
      if (NULL == pFound) {
1,946✔
3404
        code = nodesCloneNode(pNode, &pFound);
1,915✔
3405
        if (TSDB_CODE_SUCCESS == code) code = nodesListStrictAppend(pTmp, pFound);
1,915!
3406
        if (TSDB_CODE_SUCCESS != code) break;
1,915!
3407
      }
3408
    }
3409
  }
3410
  if (TSDB_CODE_SUCCESS == code) {
574!
3411
    nodesDestroyList(*ppList);
574✔
3412
    *ppList = pTmp;
574✔
3413
  } else {
3414
    nodesDestroyList(pTmp);
×
3415
  }
3416
  return code;
574✔
3417
}
3418

3419
void rewriteExprAliasName(SExprNode* pNode, int64_t num) {
3,830,938✔
3420
  (void)tsnprintf(pNode->aliasName, TSDB_COL_NAME_LEN, "expr_%x", num);
3,830,938✔
3421
  return;
3,831,027✔
3422
}
3423

3424
bool isRelatedToOtherExpr(SExprNode* pExpr) {
2,108,138✔
3425
  return pExpr->relatedTo != 0;
2,108,138✔
3426
}
3427

3428
typedef struct SContainsColCxt {
3429
  bool       containsCol;
3430
} SContainsColCxt;
3431

3432
static EDealRes nodeContainsCol(SNode* pNode, void* pContext) {
183,049✔
3433
  SContainsColCxt* pCxt = pContext;
183,049✔
3434
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
183,049✔
3435
    pCxt->containsCol = true;
182,895✔
3436
    return DEAL_RES_END;
182,895✔
3437
  }
3438

3439
  return DEAL_RES_CONTINUE;
154✔
3440
}
3441

3442
bool nodesContainsColumn(SNode* pNode) {
182,978✔
3443
  if (NULL == pNode) {
182,978!
3444
    return false;
×
3445
  }
3446

3447
  SContainsColCxt cxt = {0};
182,978✔
3448
  nodesWalkExpr(pNode, nodeContainsCol, &cxt);
182,978✔
3449
  
3450
  return cxt.containsCol;
182,978✔
3451
}
3452

3453
int32_t mergeNodeToLogic(SNode** pDst, SNode** pSrc) {
96,278✔
3454
  SLogicConditionNode* pLogicCond = NULL;
96,278✔
3455
  int32_t              code = nodesMakeNode(QUERY_NODE_LOGIC_CONDITION, (SNode**)&pLogicCond);
96,278✔
3456
  if (NULL == pLogicCond) {
96,278!
3457
    return code;
×
3458
  }
3459
  pLogicCond->node.resType.type = TSDB_DATA_TYPE_BOOL;
96,278✔
3460
  pLogicCond->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes;
96,278✔
3461
  pLogicCond->condType = LOGIC_COND_TYPE_AND;
96,278✔
3462
  code = nodesListMakeAppend(&pLogicCond->pParameterList, *pSrc);
96,278✔
3463
  if (TSDB_CODE_SUCCESS == code) {
96,278!
3464
    *pSrc = NULL;
96,278✔
3465
    code = nodesListMakeAppend(&pLogicCond->pParameterList, *pDst);
96,278✔
3466
  }
3467
  if (TSDB_CODE_SUCCESS == code) {
96,278!
3468
    *pDst = (SNode*)pLogicCond;
96,278✔
3469
  } else {
3470
    nodesDestroyNode((SNode*)pLogicCond);
×
3471
  }
3472
  return code;
96,278✔
3473
}
3474

3475

3476
int32_t nodesMergeNode(SNode** pCond, SNode** pAdditionalCond) {
401,267✔
3477
  if (NULL == *pCond) {
401,267✔
3478
    TSWAP(*pCond, *pAdditionalCond);
288,104✔
3479
    return TSDB_CODE_SUCCESS;
288,104✔
3480
  }
3481

3482
  int32_t code = TSDB_CODE_SUCCESS;
113,163✔
3483
  if (QUERY_NODE_LOGIC_CONDITION == nodeType(*pCond) &&
113,163✔
3484
      LOGIC_COND_TYPE_AND == ((SLogicConditionNode*)*pCond)->condType) {
16,885!
3485
    code = nodesListAppend(((SLogicConditionNode*)*pCond)->pParameterList, *pAdditionalCond);
16,885✔
3486
    if (TSDB_CODE_SUCCESS == code) {
16,885!
3487
      *pAdditionalCond = NULL;
16,885✔
3488
    }
3489
  } else {
3490
    code = mergeNodeToLogic(pCond, pAdditionalCond);
96,278✔
3491
  }
3492
  
3493
  return code;
113,163✔
3494
}
3495

3496
void tFreeStreamVtbColName(void* param) {
×
3497
  if (NULL == param) {
×
3498
    return;
×
3499
  }
3500

3501
  SColIdName* pColId = (SColIdName*)param;
×
3502

3503
  taosMemoryFreeClear(pColId->colName);
×
3504
}
3505

3506
void tFreeStreamVtbOtbInfo(void* param) {
×
3507
  SArray** ppArray = (SArray**)param;
×
3508
  if (NULL == param || NULL == *ppArray) {
×
3509
    return;
×
3510
  }
3511

3512
  taosArrayDestroyEx(*ppArray, tFreeStreamVtbColName);
×
3513
}
3514

3515

3516
void tFreeStreamVtbVtbInfo(void* param) {
×
3517
  SSHashObj** ppHash = (SSHashObj**)param;
×
3518
  if (NULL == param || NULL == *ppHash) {
×
3519
    return;
×
3520
  }
3521

3522
  tSimpleHashCleanup(*ppHash);
×
3523
}
3524

3525

3526
void tFreeStreamVtbDbVgInfo(void* param) {
×
3527
  SSHashObj** ppHash = (SSHashObj**)param;
×
3528
  if (NULL == param || NULL == *ppHash) {
×
3529
    return;
×
3530
  }
3531

3532
  tSimpleHashCleanup(*ppHash);
×
3533
}
3534

3535

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

© 2025 Coveralls, Inc