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

taosdata / TDengine / #3559

18 Dec 2024 12:59AM UTC coverage: 59.805% (+0.03%) from 59.778%
#3559

push

travis-ci

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

merge: main to 3.0 branch

132705 of 287544 branches covered (46.15%)

Branch coverage included in aggregate %.

87 of 95 new or added lines in 19 files covered. (91.58%)

1132 existing lines in 133 files now uncovered.

209591 of 284807 relevant lines covered (73.59%)

8125235.78 hits per line

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

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

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

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

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

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

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

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

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

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

94
      return code;
×
95
    }
96
  }
97

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

118
static int32_t callocNodeChunk(SNodeAllocator* pAllocator, SNodeMemChunk** pOutChunk) {
3,590,506✔
119
  SNodeMemChunk* pNewChunk = taosMemoryCalloc(1, sizeof(SNodeMemChunk) + pAllocator->chunkSize);
3,590,506!
120
  if (NULL == pNewChunk) {
3,590,489!
121
    if (pOutChunk) *pOutChunk = NULL;
×
122
    return terrno;
×
123
  }
124
  pNewChunk->pBuf = (char*)(pNewChunk + 1);
3,590,489✔
125
  pNewChunk->availableSize = pAllocator->chunkSize;
3,590,489✔
126
  pNewChunk->usedSize = 0;
3,590,489✔
127
  pNewChunk->pNext = NULL;
3,590,489✔
128
  if (NULL != pAllocator->pCurrChunk) {
3,590,489✔
129
    pAllocator->pCurrChunk->pNext = pNewChunk;
2,661,131✔
130
  }
131
  pAllocator->pCurrChunk = pNewChunk;
3,590,489✔
132
  if (NULL == pAllocator->pChunks) {
3,590,489✔
133
    pAllocator->pChunks = pNewChunk;
929,380✔
134
  }
135
  ++(pAllocator->chunkNum);
3,590,489✔
136
  if (pOutChunk) *pOutChunk = pNewChunk;
3,590,489!
137
  return TSDB_CODE_SUCCESS;
3,590,489✔
138
}
139

140
static int32_t nodesCallocImpl(int32_t size, void** pOut) {
784,092,227✔
141
  if (NULL == g_pNodeAllocator) {
784,092,227✔
142
    *pOut = taosMemoryCalloc(1, size);
310,218,848!
143
    if (!*pOut) return terrno;
313,695,088!
144
    return TSDB_CODE_SUCCESS;
313,695,088✔
145
  }
146

147
  if (g_pNodeAllocator->pCurrChunk->usedSize + size > g_pNodeAllocator->pCurrChunk->availableSize) {
473,873,379✔
148
    int32_t code = callocNodeChunk(g_pNodeAllocator, NULL);
2,661,155✔
149
    if (TSDB_CODE_SUCCESS != code) {
2,661,130!
150
      *pOut = NULL;
×
151
      return code;
×
152
    }
153
  }
154
  void* p = g_pNodeAllocator->pCurrChunk->pBuf + g_pNodeAllocator->pCurrChunk->usedSize;
473,873,354✔
155
  g_pNodeAllocator->pCurrChunk->usedSize += size;
473,873,354✔
156
  *pOut = p;
473,873,354✔
157
  return TSDB_CODE_SUCCESS;
473,873,354✔
158
  ;
159
}
160

161
static int32_t nodesCalloc(int32_t num, int32_t size, void** pOut) {
783,773,113✔
162
  void*   p = NULL;
783,773,113✔
163
  int32_t code = nodesCallocImpl(num * size + 1, &p);
783,773,113✔
164
  if (TSDB_CODE_SUCCESS != code) {
787,115,597!
165
    return code;
×
166
  }
167
  *(char*)p = (NULL != g_pNodeAllocator) ? 1 : 0;
787,115,597✔
168
  *pOut = (char*)p + 1;
787,115,597✔
169
  return TSDB_CODE_SUCCESS;
787,115,597✔
170
}
171

172
void nodesFree(void* p) {
787,675,758✔
173
  char* ptr = (char*)p - 1;
787,675,758✔
174
  if (0 == *ptr) {
787,675,758✔
175
    taosMemoryFree(ptr);
313,660,823!
176
  }
177
  return;
789,472,304✔
178
}
179

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

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

202
  SNodeAllocator* pAllocator = p;
929,379✔
203

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

207
  SNodeMemChunk* pChunk = pAllocator->pChunks;
929,380✔
208
  while (NULL != pChunk) {
4,519,918✔
209
    SNodeMemChunk* pTemp = pChunk->pNext;
3,590,537✔
210
    taosMemoryFree(pChunk);
3,590,537!
211
    pChunk = pTemp;
3,590,538✔
212
  }
213
  (void)taosThreadMutexDestroy(&pAllocator->mutex);
929,381✔
214
  taosMemoryFree(pAllocator);
929,380!
215
}
216

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

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

229
  return TSDB_CODE_SUCCESS;
2,015✔
230
}
231

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

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

263
int32_t nodesSimAcquireAllocator(int64_t allocatorId) {
10,317,330✔
264
  if (allocatorId <= 0) {
10,317,330✔
265
    return TSDB_CODE_SUCCESS;
9,391,833✔
266
  }
267

268
  SNodeAllocator* pAllocator = taosAcquireRef(g_allocatorReqRefPool, allocatorId);
925,497✔
269
  if (NULL == pAllocator) {
929,304!
UNCOV
270
    return terrno;
×
271
  }
272
  return TSDB_CODE_SUCCESS;
929,304✔
273
}
274

275
int32_t nodesSimReleaseAllocator(int64_t allocatorId) {
10,328,335✔
276
  if (allocatorId <= 0) {
10,328,335✔
277
    return TSDB_CODE_SUCCESS;
9,400,998✔
278
  }
279

280
  return taosReleaseRef(g_allocatorReqRefPool, allocatorId);
927,337✔
281
}
282

283
int32_t nodesAcquireAllocator(int64_t allocatorId) {
21,294,766✔
284
  if (allocatorId <= 0) {
21,294,766✔
285
    return TSDB_CODE_SUCCESS;
18,744,679✔
286
  }
287

288
  SNodeAllocator* pAllocator = taosAcquireRef(g_allocatorReqRefPool, allocatorId);
2,550,087✔
289
  if (NULL == pAllocator) {
2,555,557!
290
    return terrno;
×
291
  }
292
  (void)taosThreadMutexLock(&pAllocator->mutex);
2,555,557✔
293
  g_pNodeAllocator = pAllocator;
2,555,559✔
294
  return TSDB_CODE_SUCCESS;
2,555,559✔
295
}
296

297
int32_t nodesReleaseAllocator(int64_t allocatorId) {
21,111,677✔
298
  if (allocatorId <= 0) {
21,111,677✔
299
    return TSDB_CODE_SUCCESS;
18,575,014✔
300
  }
301

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

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

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

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

330
void nodesDestroyAllocator(int64_t allocatorId) {
10,335,228✔
331
  if (allocatorId <= 0) {
10,335,228✔
332
    return;
9,406,409✔
333
  }
334

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

342
static int32_t makeNode(ENodeType type, int32_t size, SNode** ppNode) {
409,302,777✔
343
  SNode*  p = NULL;
409,302,777✔
344
  int32_t code = nodesCalloc(1, size, (void**)&p);
409,302,777✔
345
  if (TSDB_CODE_SUCCESS == code) {
409,572,928!
346
    setNodeType(p, type);
409,607,485✔
347
    *ppNode = p;
409,607,485✔
348
  }
349
  return code;
409,572,928✔
350
}
351

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

971
static void destroyVgDataBlockArray(SArray* pArray) {
28,214,471✔
972
  size_t size = taosArrayGetSize(pArray);
28,214,471✔
973
  for (size_t i = 0; i < size; ++i) {
37,667,221✔
974
    SVgDataBlocks* pVg = taosArrayGetP(pArray, i);
9,417,293✔
975
    taosMemoryFreeClear(pVg->pData);
9,412,063!
976
    taosMemoryFreeClear(pVg);
9,402,061!
977
  }
978
  taosArrayDestroy(pArray);
28,249,928✔
979
}
28,261,543✔
980

981
static void destroyLogicNode(SLogicNode* pNode) {
26,770,793✔
982
  nodesDestroyList(pNode->pTargets);
26,770,793✔
983
  nodesDestroyNode(pNode->pConditions);
26,766,242✔
984
  nodesDestroyList(pNode->pChildren);
26,775,602✔
985
  nodesDestroyNode(pNode->pLimit);
26,772,270✔
986
  nodesDestroyNode(pNode->pSlimit);
26,769,275✔
987
  nodesDestroyList(pNode->pHint);
26,774,223✔
988
}
26,768,500✔
989

990
static void destroyPhysiNode(SPhysiNode* pNode) {
7,610,394✔
991
  nodesDestroyList(pNode->pChildren);
7,610,394✔
992
  nodesDestroyNode(pNode->pConditions);
7,610,800✔
993
  nodesDestroyNode((SNode*)pNode->pOutputDataBlockDesc);
7,610,869✔
994
  nodesDestroyNode(pNode->pLimit);
7,611,206✔
995
  nodesDestroyNode(pNode->pSlimit);
7,611,026✔
996
}
7,611,067✔
997

998
static void destroyWinodwPhysiNode(SWindowPhysiNode* pNode) {
197,636✔
999
  destroyPhysiNode((SPhysiNode*)pNode);
197,636✔
1000
  nodesDestroyList(pNode->pExprs);
197,641✔
1001
  nodesDestroyList(pNode->pFuncs);
197,641✔
1002
  nodesDestroyNode(pNode->pTspk);
197,643✔
1003
  nodesDestroyNode(pNode->pTsEnd);
197,644✔
1004
}
197,644✔
1005

1006
static void destroyPartitionPhysiNode(SPartitionPhysiNode* pNode) {
43,782✔
1007
  destroyPhysiNode((SPhysiNode*)pNode);
43,782✔
1008
  nodesDestroyList(pNode->pExprs);
43,786✔
1009
  nodesDestroyList(pNode->pPartitionKeys);
43,785✔
1010
  nodesDestroyList(pNode->pTargets);
43,786✔
1011
}
43,786✔
1012

1013
static void destroyScanPhysiNode(SScanPhysiNode* pNode) {
2,535,104✔
1014
  destroyPhysiNode((SPhysiNode*)pNode);
2,535,104✔
1015
  nodesDestroyList(pNode->pScanCols);
2,535,454✔
1016
  nodesDestroyList(pNode->pScanPseudoCols);
2,535,527✔
1017
}
2,535,529✔
1018

1019
static void destroyDataSinkNode(SDataSinkNode* pNode) { nodesDestroyNode((SNode*)pNode->pInputDataBlockDesc); }
13,039,538✔
1020

1021
static void destroyExprNode(SExprNode* pExpr) { taosArrayDestroy(pExpr->pAssociation); }
182,462,332✔
1022

1023
static void destroyTableCfg(STableCfg* pCfg) {
123✔
1024
  if (NULL == pCfg) {
123✔
1025
    return;
45✔
1026
  }
1027
  taosArrayDestroy(pCfg->pFuncs);
78✔
1028
  taosMemoryFree(pCfg->pComment);
78!
1029
  taosMemoryFree(pCfg->pSchemas);
78!
1030
  taosMemoryFree(pCfg->pSchemaExt);
78!
1031
  taosMemoryFree(pCfg->pTags);
78!
1032
  taosMemoryFree(pCfg);
78!
1033
}
1034

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

1037
void destroyFuncParam(void* pValue) { taosMemoryFree(((SFunctParam*)pValue)->pCol); }
1,615!
1038

1039
static void destroyHintValue(EHintOption option, void* value) {
62,853✔
1040
  switch (option) {
1041
    default:
1042
      break;
62,853✔
1043
  }
1044

1045
  taosMemoryFree(value);
62,853!
1046
}
62,853✔
1047

1048
void nodesDestroyNode(SNode* pNode) {
710,196,807✔
1049
  if (NULL == pNode) {
710,196,807✔
1050
    return;
302,058,980✔
1051
  }
1052

1053
  switch (nodeType(pNode)) {
408,137,827!
1054
    case QUERY_NODE_COLUMN:
99,228,635✔
1055
      destroyExprNode((SExprNode*)pNode);
99,228,635✔
1056
      break;
99,227,089✔
1057
    case QUERY_NODE_VALUE: {
45,415,180✔
1058
      SValueNode* pValue = (SValueNode*)pNode;
45,415,180✔
1059
      destroyExprNode((SExprNode*)pNode);
45,415,180✔
1060
      taosMemoryFreeClear(pValue->literal);
45,409,922!
1061
      if (IS_VAR_DATA_TYPE(pValue->node.resType.type)) {
45,469,593!
1062
        taosMemoryFreeClear(pValue->datum.p);
2,883,246!
1063
      }
1064
      break;
45,469,597✔
1065
    }
1066
    case QUERY_NODE_OPERATOR: {
11,920,270✔
1067
      SOperatorNode* pOp = (SOperatorNode*)pNode;
11,920,270✔
1068
      destroyExprNode((SExprNode*)pNode);
11,920,270✔
1069
      nodesDestroyNode(pOp->pLeft);
11,920,219✔
1070
      nodesDestroyNode(pOp->pRight);
11,920,359✔
1071
      break;
11,920,429✔
1072
    }
1073
    case QUERY_NODE_LOGIC_CONDITION:
3,796,483✔
1074
      destroyExprNode((SExprNode*)pNode);
3,796,483✔
1075
      nodesDestroyList(((SLogicConditionNode*)pNode)->pParameterList);
3,796,497✔
1076
      break;
3,796,516✔
1077
    case QUERY_NODE_FUNCTION:
22,046,926✔
1078
      destroyExprNode((SExprNode*)pNode);
22,046,926✔
1079
      nodesDestroyList(((SFunctionNode*)pNode)->pParameterList);
22,046,873✔
1080
      break;
22,052,880✔
1081
    case QUERY_NODE_REAL_TABLE: {
1,083,560✔
1082
      SRealTableNode* pReal = (SRealTableNode*)pNode;
1,083,560✔
1083
      taosMemoryFreeClear(pReal->pMeta);
1,083,560!
1084
      taosMemoryFreeClear(pReal->pVgroupList);
1,083,569!
1085
      taosArrayDestroyEx(pReal->pSmaIndexes, destroySmaIndex);
1,083,569✔
1086
      taosArrayDestroyP(pReal->tsmaTargetTbVgInfo, NULL);
1,083,561✔
1087
      taosArrayDestroy(pReal->tsmaTargetTbInfo);
1,083,553✔
1088
      break;
1,083,550✔
1089
    }
1090
    case QUERY_NODE_TEMP_TABLE:
292,703✔
1091
      nodesDestroyNode(((STempTableNode*)pNode)->pSubquery);
292,703✔
1092
      break;
292,702✔
1093
    case QUERY_NODE_JOIN_TABLE: {
119,186✔
1094
      SJoinTableNode* pJoin = (SJoinTableNode*)pNode;
119,186✔
1095
      nodesDestroyNode(pJoin->pWindowOffset);
119,186✔
1096
      nodesDestroyNode(pJoin->pJLimit);
119,186✔
1097
      nodesDestroyNode(pJoin->addPrimCond);
119,186✔
1098
      nodesDestroyNode(pJoin->pLeft);
119,186✔
1099
      nodesDestroyNode(pJoin->pRight);
119,186✔
1100
      nodesDestroyNode(pJoin->pOnCond);
119,186✔
1101
      break;
119,186✔
1102
    }
1103
    case QUERY_NODE_GROUPING_SET:
597,878✔
1104
      nodesDestroyList(((SGroupingSetNode*)pNode)->pParameterList);
597,878✔
1105
      break;
597,879✔
1106
    case QUERY_NODE_ORDER_BY_EXPR:
2,307,642✔
1107
      nodesDestroyNode(((SOrderByExprNode*)pNode)->pExpr);
2,307,642✔
1108
      break;
2,307,641✔
1109
    case QUERY_NODE_LIMIT:  // no pointer field
767,959✔
1110
      break;
767,959✔
1111
    case QUERY_NODE_STATE_WINDOW: {
5,292✔
1112
      SStateWindowNode* pState = (SStateWindowNode*)pNode;
5,292✔
1113
      nodesDestroyNode(pState->pCol);
5,292✔
1114
      nodesDestroyNode(pState->pExpr);
5,292✔
1115
      break;
5,292✔
1116
    }
1117
    case QUERY_NODE_SESSION_WINDOW: {
5,613✔
1118
      SSessionWindowNode* pSession = (SSessionWindowNode*)pNode;
5,613✔
1119
      nodesDestroyNode((SNode*)pSession->pCol);
5,613✔
1120
      nodesDestroyNode((SNode*)pSession->pGap);
5,613✔
1121
      break;
5,613✔
1122
    }
1123
    case QUERY_NODE_INTERVAL_WINDOW: {
30,235✔
1124
      SIntervalWindowNode* pJoin = (SIntervalWindowNode*)pNode;
30,235✔
1125
      nodesDestroyNode(pJoin->pCol);
30,235✔
1126
      nodesDestroyNode(pJoin->pInterval);
30,235✔
1127
      nodesDestroyNode(pJoin->pOffset);
30,235✔
1128
      nodesDestroyNode(pJoin->pSliding);
30,235✔
1129
      nodesDestroyNode(pJoin->pFill);
30,235✔
1130
      break;
30,235✔
1131
    }
1132
    case QUERY_NODE_NODE_LIST:
11,030,870✔
1133
      nodesDestroyList(((SNodeListNode*)pNode)->pNodeList);
11,030,870✔
1134
      break;
11,039,003✔
1135
    case QUERY_NODE_FILL: {
18,972✔
1136
      SFillNode* pFill = (SFillNode*)pNode;
18,972✔
1137
      nodesDestroyNode(pFill->pValues);
18,972✔
1138
      nodesDestroyNode(pFill->pWStartTs);
18,972✔
1139
      break;
18,972✔
1140
    }
1141
    case QUERY_NODE_RAW_EXPR:
11,633,062✔
1142
      nodesDestroyNode(((SRawExprNode*)pNode)->pNode);
11,633,062✔
1143
      break;
11,633,071✔
1144
    case QUERY_NODE_TARGET:
22,793,023✔
1145
      nodesDestroyNode(((STargetNode*)pNode)->pExpr);
22,793,023✔
1146
      break;
22,806,060✔
1147
    case QUERY_NODE_DATABLOCK_DESC:
11,177,462✔
1148
      nodesDestroyList(((SDataBlockDescNode*)pNode)->pSlots);
11,177,462✔
1149
      break;
11,179,098✔
1150
    case QUERY_NODE_SLOT_DESC:  // no pointer field
40,145,401✔
1151
      break;
40,145,401✔
1152
    case QUERY_NODE_COLUMN_DEF:
261,254✔
1153
      nodesDestroyNode(((SColumnDefNode*)pNode)->pOptions);
261,254✔
1154
      break;
261,254✔
1155
    case QUERY_NODE_DOWNSTREAM_SOURCE:  // no pointer field
1,893,870✔
1156
      break;
1,893,870✔
1157
    case QUERY_NODE_DATABASE_OPTIONS: {
4,685✔
1158
      SDatabaseOptions* pOptions = (SDatabaseOptions*)pNode;
4,685✔
1159
      nodesDestroyNode((SNode*)pOptions->pDaysPerFile);
4,685✔
1160
      nodesDestroyNode((SNode*)pOptions->s3KeepLocalStr);
4,685✔
1161
      nodesDestroyList(pOptions->pKeep);
4,685✔
1162
      nodesDestroyList(pOptions->pRetentions);
4,685✔
1163
      nodesDestroyNode((SNode*)pOptions->pCompactIntervalNode);
4,685✔
1164
      nodesDestroyList(pOptions->pCompactTimeRangeList);
4,685✔
1165
      nodesDestroyNode((SNode*)pOptions->pCompactTimeOffsetNode);
4,685✔
1166
      break;
4,685✔
1167
    }
1168
    case QUERY_NODE_TABLE_OPTIONS: {
75,464✔
1169
      STableOptions* pOptions = (STableOptions*)pNode;
75,464✔
1170
      nodesDestroyList(pOptions->pMaxDelay);
75,464✔
1171
      nodesDestroyList(pOptions->pWatermark);
75,466✔
1172
      nodesDestroyList(pOptions->pRollupFuncs);
75,463✔
1173
      nodesDestroyList(pOptions->pSma);
75,464✔
1174
      nodesDestroyList(pOptions->pDeleteMark);
75,464✔
1175
      break;
75,464✔
1176
    }
1177
    case QUERY_NODE_COLUMN_OPTIONS: {
236,030✔
1178
      SColumnOptions* pOptions = (SColumnOptions*)pNode;
236,030✔
1179
      break;
236,030✔
1180
    }
1181
    case QUERY_NODE_INDEX_OPTIONS: {
63✔
1182
      SIndexOptions* pOptions = (SIndexOptions*)pNode;
63✔
1183
      nodesDestroyList(pOptions->pFuncs);
63✔
1184
      nodesDestroyNode(pOptions->pInterval);
63✔
1185
      nodesDestroyNode(pOptions->pOffset);
63✔
1186
      nodesDestroyNode(pOptions->pSliding);
63✔
1187
      nodesDestroyNode(pOptions->pStreamOptions);
63✔
1188
      break;
63✔
1189
    }
1190
    case QUERY_NODE_EXPLAIN_OPTIONS:  // no pointer field
106,913✔
1191
      break;
106,913✔
1192
    case QUERY_NODE_STREAM_OPTIONS: {
1,128✔
1193
      SStreamOptions* pOptions = (SStreamOptions*)pNode;
1,128✔
1194
      nodesDestroyNode(pOptions->pDelay);
1,128✔
1195
      nodesDestroyNode(pOptions->pWatermark);
1,128✔
1196
      nodesDestroyNode(pOptions->pDeleteMark);
1,128✔
1197
      break;
1,128✔
1198
    }
1199
    case QUERY_NODE_TSMA_OPTIONS: {
384✔
1200
      STSMAOptions* pOptions = (STSMAOptions*)pNode;
384✔
1201
      nodesDestroyList(pOptions->pFuncs);
384✔
1202
      nodesDestroyNode(pOptions->pInterval);
384✔
1203
      break;
384✔
1204
    }
1205
    case QUERY_NODE_LEFT_VALUE:  // no pointer field
233,821✔
1206
    case QUERY_NODE_COLUMN_REF:  // no pointer field
1207
      break;
233,821✔
1208
    case QUERY_NODE_WHEN_THEN: {
41,984✔
1209
      SWhenThenNode* pWhenThen = (SWhenThenNode*)pNode;
41,984✔
1210
      destroyExprNode((SExprNode*)pNode);
41,984✔
1211
      nodesDestroyNode(pWhenThen->pWhen);
41,984✔
1212
      nodesDestroyNode(pWhenThen->pThen);
41,984✔
1213
      break;
41,984✔
1214
    }
1215
    case QUERY_NODE_CASE_WHEN: {
32,263✔
1216
      SCaseWhenNode* pCaseWhen = (SCaseWhenNode*)pNode;
32,263✔
1217
      destroyExprNode((SExprNode*)pNode);
32,263✔
1218
      nodesDestroyNode(pCaseWhen->pCase);
32,263✔
1219
      nodesDestroyNode(pCaseWhen->pElse);
32,263✔
1220
      nodesDestroyList(pCaseWhen->pWhenThenList);
32,263✔
1221
      break;
32,263✔
1222
    }
1223
    case QUERY_NODE_EVENT_WINDOW: {
106✔
1224
      SEventWindowNode* pEvent = (SEventWindowNode*)pNode;
106✔
1225
      nodesDestroyNode(pEvent->pCol);
106✔
1226
      nodesDestroyNode(pEvent->pStartCond);
106✔
1227
      nodesDestroyNode(pEvent->pEndCond);
106✔
1228
      break;
106✔
1229
    }
1230
    case QUERY_NODE_COUNT_WINDOW: {
120✔
1231
      SCountWindowNode* pEvent = (SCountWindowNode*)pNode;
120✔
1232
      nodesDestroyNode(pEvent->pCol);
120✔
1233
      break;
120✔
1234
    }
1235
    case QUERY_NODE_ANOMALY_WINDOW: {
×
1236
      SAnomalyWindowNode* pAnomaly = (SAnomalyWindowNode*)pNode;
×
1237
      nodesDestroyNode(pAnomaly->pCol);
×
1238
      break;
×
1239
    }
1240
    case QUERY_NODE_HINT: {
62,853✔
1241
      SHintNode* pHint = (SHintNode*)pNode;
62,853✔
1242
      destroyHintValue(pHint->option, pHint->value);
62,853✔
1243
      break;
62,853✔
1244
    }
1245
    case QUERY_NODE_VIEW: {
301✔
1246
      SViewNode* pView = (SViewNode*)pNode;
301✔
1247
      taosMemoryFreeClear(pView->pMeta);
301!
1248
      taosMemoryFreeClear(pView->pVgroupList);
301!
1249
      taosArrayDestroyEx(pView->pSmaIndexes, destroySmaIndex);
301✔
1250
      break;
301✔
1251
    }
1252
    case QUERY_NODE_WINDOW_OFFSET: {
4,834✔
1253
      SWindowOffsetNode* pWin = (SWindowOffsetNode*)pNode;
4,834✔
1254
      nodesDestroyNode(pWin->pStartOffset);
4,834✔
1255
      nodesDestroyNode(pWin->pEndOffset);
4,834✔
1256
      break;
4,834✔
1257
    }
1258
    case QUERY_NODE_RANGE_AROUND: {
5,072✔
1259
      SRangeAroundNode* pAround = (SRangeAroundNode*)pNode;
5,072✔
1260
      nodesDestroyNode(pAround->pInterval);
5,072✔
1261
      nodesDestroyNode(pAround->pTimepoint);
5,072✔
1262
      break;
5,072✔
1263
    }
1264
    case QUERY_NODE_SET_OPERATOR: {
78,647✔
1265
      SSetOperator* pStmt = (SSetOperator*)pNode;
78,647✔
1266
      nodesDestroyList(pStmt->pProjectionList);
78,647✔
1267
      nodesDestroyNode(pStmt->pLeft);
78,647✔
1268
      nodesDestroyNode(pStmt->pRight);
78,647✔
1269
      nodesDestroyList(pStmt->pOrderByList);
78,647✔
1270
      nodesDestroyNode(pStmt->pLimit);
78,647✔
1271
      break;
78,647✔
1272
    }
1273
    case QUERY_NODE_SELECT_STMT: {
1,194,739✔
1274
      SSelectStmt* pStmt = (SSelectStmt*)pNode;
1,194,739✔
1275
      nodesDestroyList(pStmt->pProjectionList);
1,194,739✔
1276
      nodesDestroyNode(pStmt->pFromTable);
1,194,734✔
1277
      nodesDestroyNode(pStmt->pWhere);
1,194,741✔
1278
      nodesDestroyList(pStmt->pPartitionByList);
1,194,741✔
1279
      nodesDestroyList(pStmt->pTags);
1,194,741✔
1280
      nodesDestroyNode(pStmt->pSubtable);
1,194,740✔
1281
      nodesDestroyNode(pStmt->pWindow);
1,194,741✔
1282
      nodesDestroyList(pStmt->pGroupByList);
1,194,741✔
1283
      nodesDestroyNode(pStmt->pHaving);
1,194,741✔
1284
      nodesDestroyNode(pStmt->pRange);
1,194,740✔
1285
      nodesDestroyNode(pStmt->pRangeAround);
1,194,739✔
1286
      nodesDestroyNode(pStmt->pEvery);
1,194,740✔
1287
      nodesDestroyNode(pStmt->pFill);
1,194,740✔
1288
      nodesDestroyList(pStmt->pOrderByList);
1,194,739✔
1289
      nodesDestroyNode((SNode*)pStmt->pLimit);
1,194,740✔
1290
      nodesDestroyNode((SNode*)pStmt->pSlimit);
1,194,739✔
1291
      nodesDestroyList(pStmt->pHint);
1,194,737✔
1292
      break;
1,194,738✔
1293
    }
1294
    case QUERY_NODE_VNODE_MODIFY_STMT: {
9,450,896✔
1295
      SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)pNode;
9,450,896✔
1296
      destroyVgDataBlockArray(pStmt->pDataBlocks);
9,450,896✔
1297
      taosMemoryFreeClear(pStmt->pTableMeta);
9,450,939!
1298
      nodesDestroyNode(pStmt->pTagCond);
9,450,654✔
1299
      taosArrayDestroy(pStmt->pTableTag);
9,450,599✔
1300
      taosHashCleanup(pStmt->pVgroupsHashObj);
9,450,418✔
1301
      taosHashCleanup(pStmt->pSubTableHashObj);
9,449,820✔
1302
      taosHashCleanup(pStmt->pTableNameHashObj);
9,449,512✔
1303
      taosHashCleanup(pStmt->pDbFNameHashObj);
9,449,120✔
1304
      taosHashCleanup(pStmt->pTableCxtHashObj);
9,449,063✔
1305
      if (pStmt->freeHashFunc) {
9,448,290✔
1306
        pStmt->freeHashFunc(pStmt->pTableBlockHashObj);
9,402,045✔
1307
      }
1308
      if (pStmt->freeArrayFunc) {
9,447,281✔
1309
        pStmt->freeArrayFunc(pStmt->pVgDataBlocks);
9,401,127✔
1310
      }
1311
      tdDestroySVCreateTbReq(pStmt->pCreateTblReq);
9,448,140✔
1312
      taosMemoryFreeClear(pStmt->pCreateTblReq);
9,448,140!
1313
      if (pStmt->freeStbRowsCxtFunc) {
9,448,140✔
1314
        pStmt->freeStbRowsCxtFunc(pStmt->pStbRowsCxt);
9,400,523✔
1315
      }
1316
      taosMemoryFreeClear(pStmt->pStbRowsCxt);
9,446,556!
1317

1318
      taosMemoryFreeClear(pStmt->pCreateTbInfo);
9,446,556!
1319

1320
      if (pStmt->destroyParseFileCxt) {
9,446,556!
1321
        pStmt->destroyParseFileCxt(&pStmt->pParFileCxt);
×
1322
      }
1323

1324
      int32_t code = taosCloseFile(&pStmt->fp);
9,446,556✔
1325
      if (TSDB_CODE_SUCCESS != code) {
9,444,140!
1326
        nodesError("failed to close file: %s:%d", __func__, __LINE__);
×
1327
      }
1328
      break;
9,443,909✔
1329
    }
1330
    case QUERY_NODE_CREATE_DATABASE_STMT: {
3,939✔
1331
      SDatabaseOptions* pOptions = ((SCreateDatabaseStmt*)pNode)->pOptions;
3,939✔
1332
      taosMemoryFreeClear(pOptions->pDbCfg);
3,939!
1333
      nodesDestroyNode((SNode*)pOptions);
3,939✔
1334
      break;
3,939✔
1335
    }
1336
    case QUERY_NODE_DROP_DATABASE_STMT:  // no pointer field
2,639✔
1337
      break;
2,639✔
1338
    case QUERY_NODE_ALTER_DATABASE_STMT: {
713✔
1339
      SDatabaseOptions* pOptions = ((SAlterDatabaseStmt*)pNode)->pOptions;
713✔
1340
      taosMemoryFreeClear(pOptions->pDbCfg);
713!
1341
      nodesDestroyNode((SNode*)pOptions);
713✔
1342
      break;
713✔
1343
    }
1344
    case QUERY_NODE_FLUSH_DATABASE_STMT:  // no pointer field
5,225✔
1345
    case QUERY_NODE_TRIM_DATABASE_STMT:   // no pointer field
1346
      break;
5,225✔
1347
    case QUERY_NODE_S3MIGRATE_DATABASE_STMT:  // no pointer field
3✔
1348
      break;
3✔
1349
    case QUERY_NODE_CREATE_TABLE_STMT: {
17,404✔
1350
      SCreateTableStmt* pStmt = (SCreateTableStmt*)pNode;
17,404✔
1351
      nodesDestroyList(pStmt->pCols);
17,404✔
1352
      nodesDestroyList(pStmt->pTags);
17,404✔
1353
      nodesDestroyNode((SNode*)pStmt->pOptions);
17,404✔
1354
      break;
17,404✔
1355
    }
1356
    case QUERY_NODE_CREATE_SUBTABLE_CLAUSE: {
58,050✔
1357
      SCreateSubTableClause* pStmt = (SCreateSubTableClause*)pNode;
58,050✔
1358
      nodesDestroyList(pStmt->pSpecificTags);
58,050✔
1359
      nodesDestroyList(pStmt->pValsOfTags);
58,060✔
1360
      nodesDestroyNode((SNode*)pStmt->pOptions);
58,063✔
1361
      break;
58,062✔
1362
    }
1363
    case QUERY_NODE_CREATE_SUBTABLE_FROM_FILE_CLAUSE: {
×
1364
      SCreateSubTableFromFileClause* pStmt = (SCreateSubTableFromFileClause*)pNode;
×
1365
      nodesDestroyList(pStmt->pSpecificTags);
×
1366
      break;
×
1367
    }
1368
    case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
26,005✔
1369
      nodesDestroyList(((SCreateMultiTablesStmt*)pNode)->pSubTables);
26,005✔
1370
      break;
26,010✔
1371
    case QUERY_NODE_DROP_TABLE_CLAUSE:  // no pointer field
3,041✔
1372
      break;
3,041✔
1373
    case QUERY_NODE_DROP_TABLE_STMT:
2,210✔
1374
      nodesDestroyList(((SDropTableStmt*)pNode)->pTables);
2,210✔
1375
      break;
2,210✔
1376
    case QUERY_NODE_DROP_SUPER_TABLE_STMT:  // no pointer field
249✔
1377
      break;
249✔
1378
    case QUERY_NODE_ALTER_TABLE_STMT:
5,190✔
1379
    case QUERY_NODE_ALTER_SUPER_TABLE_STMT: {
1380
      SAlterTableStmt* pStmt = (SAlterTableStmt*)pNode;
5,190✔
1381
      nodesDestroyNode((SNode*)pStmt->pOptions);
5,190✔
1382
      nodesDestroyNode((SNode*)pStmt->pVal);
5,190✔
1383
      if (pStmt->pNodeListTagValue != NULL) {
5,190✔
1384
        SNodeList* pNodeList = pStmt->pNodeListTagValue;
765✔
1385
        SNode*     pSubNode = NULL;
765✔
1386
        FOREACH(pSubNode, pNodeList) {
1,581!
1387
          SAlterTableStmt* pSubAlterTable = (SAlterTableStmt*)pSubNode;
816✔
1388
          nodesDestroyNode((SNode*)pSubAlterTable->pOptions);
816✔
1389
          nodesDestroyNode((SNode*)pSubAlterTable->pVal);
816✔
1390
        }
1391
      }
1392
      break;
5,190✔
1393
    }
1394
    case QUERY_NODE_CREATE_USER_STMT: {
282✔
1395
      SCreateUserStmt* pStmt = (SCreateUserStmt*)pNode;
282✔
1396
      taosMemoryFree(pStmt->pIpRanges);
282!
1397
      nodesDestroyList(pStmt->pNodeListIpRanges);
282✔
1398
      break;
282✔
1399
    }
1400
    case QUERY_NODE_ALTER_USER_STMT: {
176✔
1401
      SAlterUserStmt* pStmt = (SAlterUserStmt*)pNode;
176✔
1402
      taosMemoryFree(pStmt->pIpRanges);
176!
1403
      nodesDestroyList(pStmt->pNodeListIpRanges);
176✔
1404
    }
1405
    case QUERY_NODE_DROP_USER_STMT:     // no pointer field
6,623✔
1406
    case QUERY_NODE_USE_DATABASE_STMT:  // no pointer field
1407
    case QUERY_NODE_CREATE_DNODE_STMT:  // no pointer field
1408
    case QUERY_NODE_DROP_DNODE_STMT:    // no pointer field
1409
    case QUERY_NODE_ALTER_DNODE_STMT:   // no pointer field
1410
    case QUERY_NODE_CREATE_ANODE_STMT:  // no pointer field
1411
    case QUERY_NODE_UPDATE_ANODE_STMT:  // no pointer field
1412
    case QUERY_NODE_DROP_ANODE_STMT:    // no pointer field
1413
      break;
6,623✔
1414
    case QUERY_NODE_CREATE_INDEX_STMT: {
83✔
1415
      SCreateIndexStmt* pStmt = (SCreateIndexStmt*)pNode;
83✔
1416
      nodesDestroyNode((SNode*)pStmt->pOptions);
83✔
1417
      nodesDestroyList(pStmt->pCols);
83✔
1418
      if (pStmt->pReq) {
83✔
1419
        tFreeSMCreateSmaReq(pStmt->pReq);
19✔
1420
        taosMemoryFreeClear(pStmt->pReq);
19!
1421
      }
1422
      break;
83✔
1423
    }
1424
    case QUERY_NODE_DROP_INDEX_STMT:    // no pointer field
767✔
1425
    case QUERY_NODE_CREATE_QNODE_STMT:  // no pointer field
1426
    case QUERY_NODE_DROP_QNODE_STMT:    // no pointer field
1427
    case QUERY_NODE_CREATE_BNODE_STMT:  // no pointer field
1428
    case QUERY_NODE_DROP_BNODE_STMT:    // no pointer field
1429
    case QUERY_NODE_CREATE_SNODE_STMT:  // no pointer field
1430
    case QUERY_NODE_DROP_SNODE_STMT:    // no pointer field
1431
    case QUERY_NODE_CREATE_MNODE_STMT:  // no pointer field
1432
    case QUERY_NODE_DROP_MNODE_STMT:    // no pointer field
1433
      break;
767✔
1434
    case QUERY_NODE_CREATE_TOPIC_STMT:
690✔
1435
      nodesDestroyNode(((SCreateTopicStmt*)pNode)->pQuery);
690✔
1436
      nodesDestroyNode(((SCreateTopicStmt*)pNode)->pWhere);
690✔
1437
      break;
690✔
1438
    case QUERY_NODE_DROP_TOPIC_STMT:   // no pointer field
16,386✔
1439
    case QUERY_NODE_DROP_CGROUP_STMT:  // no pointer field
1440
    case QUERY_NODE_ALTER_LOCAL_STMT:  // no pointer field
1441
      break;
16,386✔
1442
    case QUERY_NODE_EXPLAIN_STMT: {
106,393✔
1443
      SExplainStmt* pStmt = (SExplainStmt*)pNode;
106,393✔
1444
      nodesDestroyNode((SNode*)pStmt->pOptions);
106,393✔
1445
      nodesDestroyNode(pStmt->pQuery);
106,393✔
1446
      break;
106,393✔
1447
    }
1448
    case QUERY_NODE_DESCRIBE_STMT:
1,222✔
1449
      taosMemoryFree(((SDescribeStmt*)pNode)->pMeta);
1,222!
1450
      break;
1,222✔
1451
    case QUERY_NODE_RESET_QUERY_CACHE_STMT:  // no pointer field
3,073✔
1452
      break;
3,073✔
1453
    case QUERY_NODE_COMPACT_DATABASE_STMT: {
64✔
1454
      SCompactDatabaseStmt* pStmt = (SCompactDatabaseStmt*)pNode;
64✔
1455
      nodesDestroyNode(pStmt->pStart);
64✔
1456
      nodesDestroyNode(pStmt->pEnd);
64✔
1457
      break;
64✔
1458
    }
1459
    case QUERY_NODE_COMPACT_VGROUPS_STMT: {
×
1460
      SCompactVgroupsStmt* pStmt = (SCompactVgroupsStmt*)pNode;
×
1461
      nodesDestroyNode(pStmt->pDbName);
×
1462
      nodesDestroyList(pStmt->vgidList);
×
1463
      nodesDestroyNode(pStmt->pStart);
×
1464
      nodesDestroyNode(pStmt->pEnd);
×
1465
      break;
×
1466
    }
1467
    case QUERY_NODE_CREATE_FUNCTION_STMT:  // no pointer field
42✔
1468
    case QUERY_NODE_DROP_FUNCTION_STMT:    // no pointer field
1469
      break;
42✔
1470
    case QUERY_NODE_CREATE_STREAM_STMT: {
1,064✔
1471
      SCreateStreamStmt* pStmt = (SCreateStreamStmt*)pNode;
1,064✔
1472
      nodesDestroyNode((SNode*)pStmt->pOptions);
1,064✔
1473
      nodesDestroyNode(pStmt->pQuery);
1,064✔
1474
      nodesDestroyList(pStmt->pTags);
1,064✔
1475
      nodesDestroyNode(pStmt->pSubtable);
1,064✔
1476
      tFreeSCMCreateStreamReq(pStmt->pReq);
1,064✔
1477
      taosMemoryFreeClear(pStmt->pReq);
1,064!
1478
      break;
1,064✔
1479
    }
1480
    case QUERY_NODE_DROP_STREAM_STMT:                     // no pointer field
1,689✔
1481
    case QUERY_NODE_PAUSE_STREAM_STMT:                    // no pointer field
1482
    case QUERY_NODE_RESUME_STREAM_STMT:                   // no pointer field
1483
    case QUERY_NODE_BALANCE_VGROUP_STMT:                  // no pointer field
1484
    case QUERY_NODE_BALANCE_VGROUP_LEADER_STMT:           // no pointer field
1485
    case QUERY_NODE_BALANCE_VGROUP_LEADER_DATABASE_STMT:  // no pointer field
1486
    case QUERY_NODE_MERGE_VGROUP_STMT:                    // no pointer field
1487
      break;
1,689✔
1488
    case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
104✔
1489
      nodesDestroyList(((SRedistributeVgroupStmt*)pNode)->pDnodes);
104✔
1490
      break;
104✔
1491
    case QUERY_NODE_SPLIT_VGROUP_STMT:  // no pointer field
40✔
1492
    case QUERY_NODE_SYNCDB_STMT:        // no pointer field
1493
      break;
40✔
1494
    case QUERY_NODE_GRANT_STMT:
213✔
1495
      nodesDestroyNode(((SGrantStmt*)pNode)->pTagCond);
213✔
1496
      break;
213✔
1497
    case QUERY_NODE_REVOKE_STMT:
147✔
1498
      nodesDestroyNode(((SRevokeStmt*)pNode)->pTagCond);
147✔
1499
      break;
147✔
1500
    case QUERY_NODE_ALTER_CLUSTER_STMT:  // no pointer field
×
1501
      break;
×
1502
    case QUERY_NODE_SHOW_DNODES_STMT:
4,655✔
1503
    case QUERY_NODE_SHOW_MNODES_STMT:
1504
    case QUERY_NODE_SHOW_MODULES_STMT:
1505
    case QUERY_NODE_SHOW_QNODES_STMT:
1506
    case QUERY_NODE_SHOW_ANODES_STMT:
1507
    case QUERY_NODE_SHOW_ANODES_FULL_STMT:
1508
    case QUERY_NODE_SHOW_SNODES_STMT:
1509
    case QUERY_NODE_SHOW_BNODES_STMT:
1510
    case QUERY_NODE_SHOW_ARBGROUPS_STMT:
1511
    case QUERY_NODE_SHOW_CLUSTER_STMT:
1512
    case QUERY_NODE_SHOW_DATABASES_STMT:
1513
    case QUERY_NODE_SHOW_FUNCTIONS_STMT:
1514
    case QUERY_NODE_SHOW_INDEXES_STMT:
1515
    case QUERY_NODE_SHOW_STABLES_STMT:
1516
    case QUERY_NODE_SHOW_STREAMS_STMT:
1517
    case QUERY_NODE_SHOW_TABLES_STMT:
1518
    case QUERY_NODE_SHOW_USERS_STMT:
1519
    case QUERY_NODE_SHOW_USERS_FULL_STMT:
1520
    case QUERY_NODE_SHOW_LICENCES_STMT:
1521
    case QUERY_NODE_SHOW_VGROUPS_STMT:
1522
    case QUERY_NODE_SHOW_TOPICS_STMT:
1523
    case QUERY_NODE_SHOW_CONSUMERS_STMT:
1524
    case QUERY_NODE_SHOW_CONNECTIONS_STMT:
1525
    case QUERY_NODE_SHOW_QUERIES_STMT:
1526
    case QUERY_NODE_SHOW_VNODES_STMT:
1527
    case QUERY_NODE_SHOW_APPS_STMT:
1528
    case QUERY_NODE_SHOW_SCORES_STMT:
1529
    case QUERY_NODE_SHOW_VARIABLES_STMT:
1530
    case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
1531
    case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
1532
    case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
1533
    case QUERY_NODE_SHOW_TAGS_STMT:
1534
    case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
1535
    case QUERY_NODE_SHOW_VIEWS_STMT:
1536
    case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
1537
    case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
1538
    case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
1539
    case QUERY_NODE_SHOW_ENCRYPTIONS_STMT:
1540
    case QUERY_NODE_SHOW_TSMAS_STMT:
1541
    case QUERY_NODE_SHOW_USAGE_STMT: {
1542
      SShowStmt* pStmt = (SShowStmt*)pNode;
4,655✔
1543
      nodesDestroyNode(pStmt->pDbName);
4,655✔
1544
      nodesDestroyNode(pStmt->pTbName);
4,655✔
1545
      break;
4,655✔
1546
    }
1547
    case QUERY_NODE_SHOW_TABLE_TAGS_STMT: {
26✔
1548
      SShowTableTagsStmt* pStmt = (SShowTableTagsStmt*)pNode;
26✔
1549
      nodesDestroyNode(pStmt->pDbName);
26✔
1550
      nodesDestroyNode(pStmt->pTbName);
26✔
1551
      nodesDestroyList(pStmt->pTags);
26✔
1552
      break;
26✔
1553
    }
1554
    case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
356✔
1555
      nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pDnodeId);
356✔
1556
      nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pLikePattern);
356✔
1557
      break;
356✔
1558
    case QUERY_NODE_SHOW_COMPACTS_STMT:
103✔
1559
      break;
103✔
1560
    case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT: {
1✔
1561
      SShowCompactDetailsStmt* pStmt = (SShowCompactDetailsStmt*)pNode;
1✔
1562
      nodesDestroyNode(pStmt->pCompactId);
1✔
1563
      break;
1✔
1564
    }
1565
    case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
35✔
1566
      taosMemoryFreeClear(((SShowCreateDatabaseStmt*)pNode)->pCfg);
35!
1567
      break;
35✔
1568
    case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
123✔
1569
    case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
1570
      taosMemoryFreeClear(((SShowCreateTableStmt*)pNode)->pDbCfg);
123!
1571
      destroyTableCfg((STableCfg*)(((SShowCreateTableStmt*)pNode)->pTableCfg));
123✔
1572
      break;
123✔
1573
    case QUERY_NODE_SHOW_CREATE_VIEW_STMT:        // no pointer field
30✔
1574
    case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:  // no pointer field
1575
    case QUERY_NODE_KILL_CONNECTION_STMT:         // no pointer field
1576
    case QUERY_NODE_KILL_QUERY_STMT:              // no pointer field
1577
    case QUERY_NODE_KILL_TRANSACTION_STMT:        // no pointer field
1578
    case QUERY_NODE_KILL_COMPACT_STMT:            // no pointer field
1579
      break;
30✔
1580
    case QUERY_NODE_DELETE_STMT: {
17,839✔
1581
      SDeleteStmt* pStmt = (SDeleteStmt*)pNode;
17,839✔
1582
      nodesDestroyNode(pStmt->pFromTable);
17,839✔
1583
      nodesDestroyNode(pStmt->pWhere);
17,839✔
1584
      nodesDestroyNode(pStmt->pCountFunc);
17,839✔
1585
      nodesDestroyNode(pStmt->pFirstFunc);
17,839✔
1586
      nodesDestroyNode(pStmt->pLastFunc);
17,839✔
1587
      nodesDestroyNode(pStmt->pTagCond);
17,839✔
1588
      break;
17,839✔
1589
    }
1590
    case QUERY_NODE_INSERT_STMT: {
134✔
1591
      SInsertStmt* pStmt = (SInsertStmt*)pNode;
134✔
1592
      nodesDestroyNode(pStmt->pTable);
134✔
1593
      nodesDestroyList(pStmt->pCols);
134✔
1594
      nodesDestroyNode(pStmt->pQuery);
134✔
1595
      break;
134✔
1596
    }
1597
    case QUERY_NODE_QUERY: {
10,322,192✔
1598
      SQuery* pQuery = (SQuery*)pNode;
10,322,192✔
1599
      nodesDestroyNode(pQuery->pPrevRoot);
10,322,192✔
1600
      nodesDestroyNode(pQuery->pRoot);
10,322,225✔
1601
      nodesDestroyNode(pQuery->pPostRoot);
10,316,427✔
1602
      taosMemoryFreeClear(pQuery->pResSchema);
10,314,751!
1603
      if (NULL != pQuery->pCmdMsg) {
10,314,754✔
1604
        taosMemoryFreeClear(pQuery->pCmdMsg->pMsg);
27,647!
1605
        taosMemoryFreeClear(pQuery->pCmdMsg);
27,647!
1606
      }
1607
      taosArrayDestroy(pQuery->pDbList);
10,314,754✔
1608
      taosArrayDestroy(pQuery->pTableList);
10,312,930✔
1609
      taosArrayDestroy(pQuery->pTargetTableList);
10,311,998✔
1610
      taosArrayDestroy(pQuery->pPlaceholderValues);
10,311,741✔
1611
      nodesDestroyNode(pQuery->pPrepareRoot);
10,312,977✔
1612
      break;
10,311,617✔
1613
    }
1614
    case QUERY_NODE_RESTORE_DNODE_STMT:  // no pointer field
58✔
1615
    case QUERY_NODE_RESTORE_QNODE_STMT:  // no pointer field
1616
    case QUERY_NODE_RESTORE_MNODE_STMT:  // no pointer field
1617
    case QUERY_NODE_RESTORE_VNODE_STMT:  // no pointer field
1618
      break;
58✔
1619
    case QUERY_NODE_CREATE_VIEW_STMT: {
177✔
1620
      SCreateViewStmt* pStmt = (SCreateViewStmt*)pNode;
177✔
1621
      taosMemoryFree(pStmt->pQuerySql);
177!
1622
      tFreeSCMCreateViewReq(&pStmt->createReq);
177✔
1623
      nodesDestroyNode(pStmt->pQuery);
177✔
1624
      break;
177✔
1625
    }
1626
    case QUERY_NODE_DROP_VIEW_STMT:
118✔
1627
      break;
118✔
1628
    case QUERY_NODE_CREATE_TSMA_STMT: {
356✔
1629
      SCreateTSMAStmt* pStmt = (SCreateTSMAStmt*)pNode;
356✔
1630
      nodesDestroyNode((SNode*)pStmt->pOptions);
356✔
1631
      if (pStmt->pReq) {
356✔
1632
        tFreeSMCreateSmaReq(pStmt->pReq);
140✔
1633
        taosMemoryFreeClear(pStmt->pReq);
140!
1634
      }
1635
      break;
356✔
1636
    }
1637
    case QUERY_NODE_LOGIC_PLAN_SCAN: {
2,417,362✔
1638
      SScanLogicNode* pLogicNode = (SScanLogicNode*)pNode;
2,417,362✔
1639
      destroyLogicNode((SLogicNode*)pLogicNode);
2,417,362✔
1640
      nodesDestroyList(pLogicNode->pScanCols);
2,417,363✔
1641
      nodesDestroyList(pLogicNode->pScanPseudoCols);
2,417,371✔
1642
      taosMemoryFreeClear(pLogicNode->pVgroupList);
2,417,371!
1643
      nodesDestroyList(pLogicNode->pDynamicScanFuncs);
2,417,378✔
1644
      nodesDestroyNode(pLogicNode->pTagCond);
2,417,386✔
1645
      nodesDestroyNode(pLogicNode->pTagIndexCond);
2,417,379✔
1646
      taosArrayDestroyEx(pLogicNode->pSmaIndexes, destroySmaIndex);
2,417,378✔
1647
      nodesDestroyList(pLogicNode->pGroupTags);
2,417,377✔
1648
      nodesDestroyList(pLogicNode->pTags);
2,417,379✔
1649
      nodesDestroyNode(pLogicNode->pSubtable);
2,417,377✔
1650
      taosArrayDestroyEx(pLogicNode->pFuncTypes, destroyFuncParam);
2,417,377✔
1651
      taosArrayDestroyP(pLogicNode->pTsmaTargetTbVgInfo, NULL);
2,417,375✔
1652
      taosArrayDestroy(pLogicNode->pTsmaTargetTbInfo);
2,417,360✔
1653
      break;
2,417,358✔
1654
    }
1655
    case QUERY_NODE_LOGIC_PLAN_JOIN: {
268,244✔
1656
      SJoinLogicNode* pLogicNode = (SJoinLogicNode*)pNode;
268,244✔
1657
      destroyLogicNode((SLogicNode*)pLogicNode);
268,244✔
1658
      nodesDestroyNode(pLogicNode->pWindowOffset);
268,244✔
1659
      nodesDestroyNode(pLogicNode->pJLimit);
268,244✔
1660
      nodesDestroyNode(pLogicNode->addPrimEqCond);
268,244✔
1661
      nodesDestroyNode(pLogicNode->pPrimKeyEqCond);
268,244✔
1662
      nodesDestroyNode(pLogicNode->pColEqCond);
268,244✔
1663
      nodesDestroyNode(pLogicNode->pColOnCond);
268,244✔
1664
      nodesDestroyNode(pLogicNode->pTagEqCond);
268,244✔
1665
      nodesDestroyNode(pLogicNode->pTagOnCond);
268,244✔
1666
      nodesDestroyNode(pLogicNode->pFullOnCond);
268,244✔
1667
      nodesDestroyList(pLogicNode->pLeftEqNodes);
268,244✔
1668
      nodesDestroyList(pLogicNode->pRightEqNodes);
268,244✔
1669
      nodesDestroyNode(pLogicNode->pLeftOnCond);
268,244✔
1670
      nodesDestroyNode(pLogicNode->pRightOnCond);
268,244✔
1671
      break;
268,244✔
1672
    }
1673
    case QUERY_NODE_LOGIC_PLAN_AGG: {
1,246,874✔
1674
      SAggLogicNode* pLogicNode = (SAggLogicNode*)pNode;
1,246,874✔
1675
      destroyLogicNode((SLogicNode*)pLogicNode);
1,246,874✔
1676
      nodesDestroyList(pLogicNode->pAggFuncs);
1,246,890✔
1677
      nodesDestroyList(pLogicNode->pGroupKeys);
1,246,898✔
1678
      break;
1,246,894✔
1679
    }
1680
    case QUERY_NODE_LOGIC_PLAN_PROJECT: {
1,687,179✔
1681
      SProjectLogicNode* pLogicNode = (SProjectLogicNode*)pNode;
1,687,179✔
1682
      destroyLogicNode((SLogicNode*)pLogicNode);
1,687,179✔
1683
      nodesDestroyList(pLogicNode->pProjections);
1,687,195✔
1684
      break;
1,687,207✔
1685
    }
1686
    case QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY: {
18,821,532✔
1687
      SVnodeModifyLogicNode* pLogicNode = (SVnodeModifyLogicNode*)pNode;
18,821,532✔
1688
      destroyLogicNode((SLogicNode*)pLogicNode);
18,821,532✔
1689
      destroyVgDataBlockArray(pLogicNode->pDataBlocks);
18,789,176✔
1690
      // pVgDataBlocks is weak reference
1691
      nodesDestroyNode(pLogicNode->pAffectedRows);
18,854,656✔
1692
      nodesDestroyNode(pLogicNode->pStartTs);
18,858,442✔
1693
      nodesDestroyNode(pLogicNode->pEndTs);
18,855,894✔
1694
      taosMemoryFreeClear(pLogicNode->pVgroupList);
18,832,604!
1695
      nodesDestroyList(pLogicNode->pInsertCols);
18,832,604✔
1696
      break;
18,848,593✔
1697
    }
1698
    case QUERY_NODE_LOGIC_PLAN_EXCHANGE:
1,095,246✔
1699
      destroyLogicNode((SLogicNode*)pNode);
1,095,246✔
1700
      break;
1,095,246✔
1701
    case QUERY_NODE_LOGIC_PLAN_MERGE: {
259,821✔
1702
      SMergeLogicNode* pLogicNode = (SMergeLogicNode*)pNode;
259,821✔
1703
      destroyLogicNode((SLogicNode*)pLogicNode);
259,821✔
1704
      nodesDestroyList(pLogicNode->pMergeKeys);
259,821✔
1705
      nodesDestroyList(pLogicNode->pInputs);
259,821✔
1706
      break;
259,821✔
1707
    }
1708
    case QUERY_NODE_LOGIC_PLAN_WINDOW: {
150,929✔
1709
      SWindowLogicNode* pLogicNode = (SWindowLogicNode*)pNode;
150,929✔
1710
      destroyLogicNode((SLogicNode*)pLogicNode);
150,929✔
1711
      nodesDestroyList(pLogicNode->pFuncs);
150,930✔
1712
      nodesDestroyNode(pLogicNode->pTspk);
150,926✔
1713
      nodesDestroyNode(pLogicNode->pTsEnd);
150,925✔
1714
      nodesDestroyNode(pLogicNode->pStateExpr);
150,925✔
1715
      nodesDestroyNode(pLogicNode->pStartCond);
150,925✔
1716
      nodesDestroyNode(pLogicNode->pEndCond);
150,925✔
1717
      break;
150,925✔
1718
    }
1719
    case QUERY_NODE_LOGIC_PLAN_FILL: {
18,045✔
1720
      SFillLogicNode* pLogicNode = (SFillLogicNode*)pNode;
18,045✔
1721
      destroyLogicNode((SLogicNode*)pLogicNode);
18,045✔
1722
      nodesDestroyNode(pLogicNode->pWStartTs);
18,045✔
1723
      nodesDestroyNode(pLogicNode->pValues);
18,045✔
1724
      nodesDestroyList(pLogicNode->pFillExprs);
18,045✔
1725
      nodesDestroyList(pLogicNode->pNotFillExprs);
18,045✔
1726
      nodesDestroyList(pLogicNode->pFillNullExprs);
18,043✔
1727
      break;
18,043✔
1728
    }
1729
    case QUERY_NODE_LOGIC_PLAN_SORT: {
526,018✔
1730
      SSortLogicNode* pLogicNode = (SSortLogicNode*)pNode;
526,018✔
1731
      destroyLogicNode((SLogicNode*)pLogicNode);
526,018✔
1732
      nodesDestroyList(pLogicNode->pSortKeys);
526,018✔
1733
      break;
526,018✔
1734
    }
1735
    case QUERY_NODE_LOGIC_PLAN_PARTITION: {
105,992✔
1736
      SPartitionLogicNode* pLogicNode = (SPartitionLogicNode*)pNode;
105,992✔
1737
      destroyLogicNode((SLogicNode*)pLogicNode);
105,992✔
1738
      nodesDestroyList(pLogicNode->pPartitionKeys);
105,992✔
1739
      nodesDestroyList(pLogicNode->pTags);
105,992✔
1740
      nodesDestroyNode(pLogicNode->pSubtable);
105,992✔
1741
      nodesDestroyList(pLogicNode->pAggFuncs);
105,992✔
1742
      break;
105,992✔
1743
    }
1744
    case QUERY_NODE_LOGIC_PLAN_INDEF_ROWS_FUNC: {
79,379✔
1745
      SIndefRowsFuncLogicNode* pLogicNode = (SIndefRowsFuncLogicNode*)pNode;
79,379✔
1746
      destroyLogicNode((SLogicNode*)pLogicNode);
79,379✔
1747
      nodesDestroyList(pLogicNode->pFuncs);
79,379✔
1748
      break;
79,379✔
1749
    }
1750
    case QUERY_NODE_LOGIC_PLAN_INTERP_FUNC: {
23,434✔
1751
      SInterpFuncLogicNode* pLogicNode = (SInterpFuncLogicNode*)pNode;
23,434✔
1752
      destroyLogicNode((SLogicNode*)pLogicNode);
23,434✔
1753
      nodesDestroyList(pLogicNode->pFuncs);
23,434✔
1754
      nodesDestroyNode(pLogicNode->pFillValues);
23,434✔
1755
      nodesDestroyNode(pLogicNode->pTimeSeries);
23,434✔
1756
      break;
23,434✔
1757
    }
1758
    case QUERY_NODE_LOGIC_PLAN_FORECAST_FUNC: {
×
1759
      SForecastFuncLogicNode* pLogicNode = (SForecastFuncLogicNode*)pNode;
×
1760
      destroyLogicNode((SLogicNode*)pLogicNode);
×
1761
      nodesDestroyList(pLogicNode->pFuncs);
×
1762
      break;
×
1763
    }
1764
    case QUERY_NODE_LOGIC_PLAN_GROUP_CACHE: {
35,786✔
1765
      SGroupCacheLogicNode* pLogicNode = (SGroupCacheLogicNode*)pNode;
35,786✔
1766
      destroyLogicNode((SLogicNode*)pLogicNode);
35,786✔
1767
      nodesDestroyList(pLogicNode->pGroupCols);
35,786✔
1768
      break;
35,786✔
1769
    }
1770
    case QUERY_NODE_LOGIC_PLAN_DYN_QUERY_CTRL: {
35,786✔
1771
      SDynQueryCtrlLogicNode* pLogicNode = (SDynQueryCtrlLogicNode*)pNode;
35,786✔
1772
      destroyLogicNode((SLogicNode*)pLogicNode);
35,786✔
1773
      break;
35,786✔
1774
    }
1775
    case QUERY_NODE_LOGIC_SUBPLAN: {
22,111,463✔
1776
      SLogicSubplan* pSubplan = (SLogicSubplan*)pNode;
22,111,463✔
1777
      nodesDestroyList(pSubplan->pChildren);
22,111,463✔
1778
      nodesDestroyNode((SNode*)pSubplan->pNode);
22,115,149✔
1779
      nodesClearList(pSubplan->pParents);
22,180,587✔
1780
      taosMemoryFreeClear(pSubplan->pVgroupList);
22,177,403!
1781
      break;
22,177,403✔
1782
    }
1783
    case QUERY_NODE_LOGIC_PLAN:
10,079,767✔
1784
      nodesDestroyList(((SQueryLogicPlan*)pNode)->pTopSubplans);
10,079,767✔
1785
      break;
10,087,080✔
1786
    case QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN:
191,893✔
1787
    case QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN:
1788
    case QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN:
1789
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
191,893✔
1790
      break;
192,014✔
1791
    case QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN:
5,763✔
1792
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN: {
1793
      SLastRowScanPhysiNode* pPhyNode = (SLastRowScanPhysiNode*)pNode;
5,763✔
1794
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
5,763✔
1795
      nodesDestroyList(pPhyNode->pGroupTags);
5,764✔
1796
      nodesDestroyList(pPhyNode->pTargets);
5,765✔
1797
      taosArrayDestroy(pPhyNode->pFuncTypes);
5,765✔
1798
      break;
5,765✔
1799
    }
1800
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN:
2,337,476✔
1801
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN:
1802
    case QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN:
1803
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN: {
1804
      STableScanPhysiNode* pPhyNode = (STableScanPhysiNode*)pNode;
2,337,476✔
1805
      destroyScanPhysiNode((SScanPhysiNode*)pNode);
2,337,476✔
1806
      nodesDestroyList(pPhyNode->pDynamicScanFuncs);
2,337,639✔
1807
      nodesDestroyList(pPhyNode->pGroupTags);
2,337,685✔
1808
      nodesDestroyList(pPhyNode->pTags);
2,337,695✔
1809
      nodesDestroyNode(pPhyNode->pSubtable);
2,337,693✔
1810
      break;
2,337,689✔
1811
    }
1812
    case QUERY_NODE_PHYSICAL_PLAN_PROJECT: {
1,102,784✔
1813
      SProjectPhysiNode* pPhyNode = (SProjectPhysiNode*)pNode;
1,102,784✔
1814
      destroyPhysiNode((SPhysiNode*)pPhyNode);
1,102,784✔
1815
      nodesDestroyList(pPhyNode->pProjections);
1,102,890✔
1816
      break;
1,102,906✔
1817
    }
1818
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN: {
181,693✔
1819
      SSortMergeJoinPhysiNode* pPhyNode = (SSortMergeJoinPhysiNode*)pNode;
181,693✔
1820
      destroyPhysiNode((SPhysiNode*)pPhyNode);
181,693✔
1821
      nodesDestroyNode(pPhyNode->pWindowOffset);
181,692✔
1822
      nodesDestroyNode(pPhyNode->pJLimit);
181,691✔
1823
      nodesDestroyNode(pPhyNode->leftPrimExpr);
181,692✔
1824
      nodesDestroyNode(pPhyNode->rightPrimExpr);
181,692✔
1825
      nodesDestroyList(pPhyNode->pEqLeft);
181,692✔
1826
      nodesDestroyList(pPhyNode->pEqRight);
181,692✔
1827
      nodesDestroyNode(pPhyNode->pPrimKeyCond);
181,692✔
1828
      nodesDestroyNode(pPhyNode->pFullOnCond);
181,692✔
1829
      nodesDestroyList(pPhyNode->pTargets);
181,692✔
1830
      nodesDestroyNode(pPhyNode->pColEqCond);
181,693✔
1831
      nodesDestroyNode(pPhyNode->pColOnCond);
181,693✔
1832
      break;
181,693✔
1833
    }
1834
    case QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN: {
26,523✔
1835
      SHashJoinPhysiNode* pPhyNode = (SHashJoinPhysiNode*)pNode;
26,523✔
1836
      destroyPhysiNode((SPhysiNode*)pPhyNode);
26,523✔
1837
      nodesDestroyNode(pPhyNode->pWindowOffset);
26,523✔
1838
      nodesDestroyNode(pPhyNode->pJLimit);
26,523✔
1839
      nodesDestroyList(pPhyNode->pOnLeft);
26,523✔
1840
      nodesDestroyList(pPhyNode->pOnRight);
26,523✔
1841
      nodesDestroyNode(pPhyNode->leftPrimExpr);
26,523✔
1842
      nodesDestroyNode(pPhyNode->rightPrimExpr);
26,523✔
1843
      nodesDestroyNode(pPhyNode->pLeftOnCond);
26,523✔
1844
      nodesDestroyNode(pPhyNode->pRightOnCond);
26,523✔
1845
      nodesDestroyNode(pPhyNode->pFullOnCond);
26,523✔
1846
      nodesDestroyList(pPhyNode->pTargets);
26,523✔
1847

1848
      nodesDestroyNode(pPhyNode->pPrimKeyCond);
26,523✔
1849
      nodesDestroyNode(pPhyNode->pColEqCond);
26,523✔
1850
      nodesDestroyNode(pPhyNode->pTagEqCond);
26,523✔
1851

1852
      break;
26,523✔
1853
    }
1854
    case QUERY_NODE_PHYSICAL_PLAN_HASH_AGG: {
1,290,015✔
1855
      SAggPhysiNode* pPhyNode = (SAggPhysiNode*)pNode;
1,290,015✔
1856
      destroyPhysiNode((SPhysiNode*)pPhyNode);
1,290,015✔
1857
      nodesDestroyList(pPhyNode->pExprs);
1,290,116✔
1858
      nodesDestroyList(pPhyNode->pAggFuncs);
1,290,143✔
1859
      nodesDestroyList(pPhyNode->pGroupKeys);
1,290,151✔
1860
      break;
1,290,148✔
1861
    }
1862
    case QUERY_NODE_PHYSICAL_PLAN_EXCHANGE: {
1,506,181✔
1863
      SExchangePhysiNode* pPhyNode = (SExchangePhysiNode*)pNode;
1,506,181✔
1864
      destroyPhysiNode((SPhysiNode*)pPhyNode);
1,506,181✔
1865
      nodesDestroyList(pPhyNode->pSrcEndPoints);
1,506,160✔
1866
      break;
1,506,189✔
1867
    }
1868
    case QUERY_NODE_PHYSICAL_PLAN_MERGE: {
206,919✔
1869
      SMergePhysiNode* pPhyNode = (SMergePhysiNode*)pNode;
206,919✔
1870
      destroyPhysiNode((SPhysiNode*)pPhyNode);
206,919✔
1871
      nodesDestroyList(pPhyNode->pMergeKeys);
206,920✔
1872
      nodesDestroyList(pPhyNode->pTargets);
206,919✔
1873
      break;
206,921✔
1874
    }
1875
    case QUERY_NODE_PHYSICAL_PLAN_SORT:
370,937✔
1876
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT: {
1877
      SSortPhysiNode* pPhyNode = (SSortPhysiNode*)pNode;
370,937✔
1878
      destroyPhysiNode((SPhysiNode*)pPhyNode);
370,937✔
1879
      nodesDestroyList(pPhyNode->pExprs);
370,975✔
1880
      nodesDestroyList(pPhyNode->pSortKeys);
370,975✔
1881
      nodesDestroyList(pPhyNode->pTargets);
370,979✔
1882
      break;
370,978✔
1883
    }
1884
    case QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL:
166,214✔
1885
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL:
1886
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL:
1887
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL:
1888
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL:
1889
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL:
1890
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL:
1891
      destroyWinodwPhysiNode((SWindowPhysiNode*)pNode);
166,214✔
1892
      break;
166,219✔
1893
    case QUERY_NODE_PHYSICAL_PLAN_FILL:
23,370✔
1894
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FILL: {
1895
      SFillPhysiNode* pPhyNode = (SFillPhysiNode*)pNode;
23,370✔
1896
      destroyPhysiNode((SPhysiNode*)pPhyNode);
23,370✔
1897
      nodesDestroyList(pPhyNode->pFillExprs);
23,371✔
1898
      nodesDestroyList(pPhyNode->pNotFillExprs);
23,370✔
1899
      nodesDestroyNode(pPhyNode->pWStartTs);
23,371✔
1900
      nodesDestroyNode(pPhyNode->pValues);
23,371✔
1901
      nodesDestroyList(pPhyNode->pFillNullExprs);
23,371✔
1902
      break;
23,371✔
1903
    }
1904
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION:
13,970✔
1905
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION:
1906
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION:
1907
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION:
1908
      destroyWinodwPhysiNode((SWindowPhysiNode*)pNode);
13,970✔
1909
      break;
13,971✔
1910
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE:
10,404✔
1911
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE: {
1912
      SStateWinodwPhysiNode* pPhyNode = (SStateWinodwPhysiNode*)pNode;
10,404✔
1913
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
10,404✔
1914
      nodesDestroyNode(pPhyNode->pStateKey);
10,404✔
1915
      break;
10,404✔
1916
    }
1917
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_EVENT:
679✔
1918
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT: {
1919
      SEventWinodwPhysiNode* pPhyNode = (SEventWinodwPhysiNode*)pNode;
679✔
1920
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
679✔
1921
      nodesDestroyNode(pPhyNode->pStartCond);
679✔
1922
      nodesDestroyNode(pPhyNode->pEndCond);
679✔
1923
      break;
679✔
1924
    }
1925
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_COUNT:
6,368✔
1926
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_COUNT: {
1927
      SCountWinodwPhysiNode* pPhyNode = (SCountWinodwPhysiNode*)pNode;
6,368✔
1928
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
6,368✔
1929
      break;
6,369✔
1930
    }
1931
    case QUERY_NODE_PHYSICAL_PLAN_MERGE_ANOMALY: {
×
1932
      SAnomalyWindowPhysiNode* pPhyNode = (SAnomalyWindowPhysiNode*)pNode;
×
1933
      destroyWinodwPhysiNode((SWindowPhysiNode*)pPhyNode);
×
1934
      break;
×
1935
    }
1936
    case QUERY_NODE_PHYSICAL_PLAN_PARTITION: {
42,019✔
1937
      destroyPartitionPhysiNode((SPartitionPhysiNode*)pNode);
42,019✔
1938
      break;
42,023✔
1939
    }
1940
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION: {
1,763✔
1941
      SStreamPartitionPhysiNode* pPhyNode = (SStreamPartitionPhysiNode*)pNode;
1,763✔
1942
      destroyPartitionPhysiNode((SPartitionPhysiNode*)pPhyNode);
1,763✔
1943
      nodesDestroyList(pPhyNode->pTags);
1,763✔
1944
      nodesDestroyNode(pPhyNode->pSubtable);
1,763✔
1945
      break;
1,763✔
1946
    }
1947
    case QUERY_NODE_PHYSICAL_PLAN_INDEF_ROWS_FUNC: {
49,358✔
1948
      SIndefRowsFuncPhysiNode* pPhyNode = (SIndefRowsFuncPhysiNode*)pNode;
49,358✔
1949
      destroyPhysiNode((SPhysiNode*)pPhyNode);
49,358✔
1950
      nodesDestroyList(pPhyNode->pExprs);
49,358✔
1951
      nodesDestroyList(pPhyNode->pFuncs);
49,358✔
1952
      break;
49,358✔
1953
    }
1954
    case QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC:
23,163✔
1955
    case QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERP_FUNC: {
1956
      SInterpFuncPhysiNode* pPhyNode = (SInterpFuncPhysiNode*)pNode;
23,163✔
1957
      destroyPhysiNode((SPhysiNode*)pPhyNode);
23,163✔
1958
      nodesDestroyList(pPhyNode->pExprs);
23,162✔
1959
      nodesDestroyList(pPhyNode->pFuncs);
23,162✔
1960
      nodesDestroyNode(pPhyNode->pFillValues);
23,163✔
1961
      nodesDestroyNode(pPhyNode->pTimeSeries);
23,162✔
1962
      break;
23,163✔
1963
    }
1964
    case QUERY_NODE_PHYSICAL_PLAN_FORECAST_FUNC: {
×
1965
      SForecastFuncPhysiNode* pPhyNode = (SForecastFuncPhysiNode*)pNode;
×
1966
      destroyPhysiNode((SPhysiNode*)pPhyNode);
×
1967
      nodesDestroyList(pPhyNode->pExprs);
×
1968
      nodesDestroyList(pPhyNode->pFuncs);
×
1969
      break;
×
1970
    }
1971
    case QUERY_NODE_PHYSICAL_PLAN_DISPATCH:
3,530,590✔
1972
      destroyDataSinkNode((SDataSinkNode*)pNode);
3,530,590✔
1973
      break;
3,531,583✔
1974
    case QUERY_NODE_PHYSICAL_PLAN_INSERT: {
9,473,943✔
1975
      SDataInserterNode* pSink = (SDataInserterNode*)pNode;
9,473,943✔
1976
      destroyDataSinkNode((SDataSinkNode*)pSink);
9,473,943✔
1977
      taosMemoryFreeClear(pSink->pData);
9,467,115!
1978
      break;
9,467,116✔
1979
    }
1980
    case QUERY_NODE_PHYSICAL_PLAN_QUERY_INSERT: {
218✔
1981
      SQueryInserterNode* pSink = (SQueryInserterNode*)pNode;
218✔
1982
      destroyDataSinkNode((SDataSinkNode*)pSink);
218✔
1983
      nodesDestroyList(pSink->pCols);
218✔
1984
      break;
218✔
1985
    }
1986
    case QUERY_NODE_PHYSICAL_PLAN_DELETE: {
36,263✔
1987
      SDataDeleterNode* pSink = (SDataDeleterNode*)pNode;
36,263✔
1988
      destroyDataSinkNode((SDataSinkNode*)pSink);
36,263✔
1989
      nodesDestroyNode(pSink->pAffectedRows);
36,261✔
1990
      nodesDestroyNode(pSink->pStartTs);
36,262✔
1991
      nodesDestroyNode(pSink->pEndTs);
36,262✔
1992
      break;
36,262✔
1993
    }
1994
    case QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE: {
26,523✔
1995
      SGroupCachePhysiNode* pPhyNode = (SGroupCachePhysiNode*)pNode;
26,523✔
1996
      destroyPhysiNode((SPhysiNode*)pPhyNode);
26,523✔
1997
      nodesDestroyList(pPhyNode->pGroupCols);
26,523✔
1998
      break;
26,523✔
1999
    }
2000
    case QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL: {
26,523✔
2001
      SDynQueryCtrlPhysiNode* pPhyNode = (SDynQueryCtrlPhysiNode*)pNode;
26,523✔
2002
      destroyPhysiNode((SPhysiNode*)pPhyNode);
26,523✔
2003
      break;
26,523✔
2004
    }
2005
    case QUERY_NODE_PHYSICAL_SUBPLAN: {
12,988,649✔
2006
      SSubplan* pSubplan = (SSubplan*)pNode;
12,988,649✔
2007
      nodesClearList(pSubplan->pChildren);
12,988,649✔
2008
      nodesDestroyNode((SNode*)pSubplan->pNode);
12,985,047✔
2009
      nodesDestroyNode((SNode*)pSubplan->pDataSink);
12,984,021✔
2010
      nodesDestroyNode((SNode*)pSubplan->pTagCond);
12,997,886✔
2011
      nodesDestroyNode((SNode*)pSubplan->pTagIndexCond);
12,996,289✔
2012
      nodesClearList(pSubplan->pParents);
12,993,960✔
2013
      break;
12,993,152✔
2014
    }
2015
    case QUERY_NODE_PHYSICAL_PLAN:
10,091,117✔
2016
      nodesDestroyList(((SQueryPlan*)pNode)->pSubplans);
10,091,117✔
2017
      break;
10,103,692✔
2018
    default:
180✔
2019
      break;
180✔
2020
  }
2021
  nodesFree(pNode);
411,582,411✔
2022
  return;
410,985,885✔
2023
}
2024

2025
int32_t nodesMakeList(SNodeList** ppListOut) {
127,157,541✔
2026
  SNodeList* p = NULL;
127,157,541✔
2027
  int32_t    code = nodesCalloc(1, sizeof(SNodeList), (void**)&p);
127,157,541✔
2028
  if (TSDB_CODE_SUCCESS == code) {
127,356,229!
2029
    *ppListOut = p;
127,361,521✔
2030
  }
2031
  return code;
127,356,229✔
2032
}
2033

2034
int32_t nodesListAppend(SNodeList* pList, SNode* pNode) {
251,902,497✔
2035
  if (NULL == pList || NULL == pNode) {
251,902,497!
2036
    return TSDB_CODE_INVALID_PARA;
×
2037
  }
2038
  SListCell* p = NULL;
251,952,386✔
2039
  int32_t    code = nodesCalloc(1, sizeof(SListCell), (void**)&p);
251,952,386✔
2040
  if (TSDB_CODE_SUCCESS != code) {
252,405,039!
2041
    return code;
×
2042
  }
2043
  p->pNode = pNode;
252,405,039✔
2044
  if (NULL == pList->pHead) {
252,405,039✔
2045
    pList->pHead = p;
121,282,330✔
2046
  }
2047
  if (NULL != pList->pTail) {
252,405,039✔
2048
    pList->pTail->pNext = p;
131,154,036✔
2049
  }
2050
  p->pPrev = pList->pTail;
252,405,039✔
2051
  pList->pTail = p;
252,405,039✔
2052
  ++(pList->length);
252,405,039✔
2053
  return TSDB_CODE_SUCCESS;
252,405,039✔
2054
}
2055

2056
int32_t nodesListStrictAppend(SNodeList* pList, SNode* pNode) {
160,469,166✔
2057
  if (NULL == pNode) {
160,469,166!
2058
    return TSDB_CODE_INVALID_PARA;
×
2059
  }
2060
  int32_t code = nodesListAppend(pList, pNode);
160,469,166✔
2061
  if (TSDB_CODE_SUCCESS != code) {
160,467,756!
2062
    nodesDestroyNode(pNode);
×
2063
  }
2064
  return code;
160,454,420✔
2065
}
2066

2067
int32_t nodesListMakeAppend(SNodeList** pList, SNode* pNode) {
8,435,768✔
2068
  if (NULL == *pList) {
8,435,768✔
2069
    int32_t code = nodesMakeList(pList);
5,744,859✔
2070
    if (NULL == *pList) {
5,744,866!
2071
      return code;
×
2072
    }
2073
  }
2074
  return nodesListAppend(*pList, pNode);
8,435,775✔
2075
}
2076

2077
int32_t nodesListMakeStrictAppend(SNodeList** pList, SNode* pNode) {
108,524,978✔
2078
  if (NULL == *pList) {
108,524,978✔
2079
    int32_t code = nodesMakeList(pList);
39,242,141✔
2080
    if (NULL == *pList) {
39,241,776!
2081
      return code;
×
2082
    }
2083
  }
2084
  return nodesListStrictAppend(*pList, pNode);
108,524,613✔
2085
}
2086

2087
int32_t nodesListAppendList(SNodeList* pTarget, SNodeList* pSrc) {
236,413✔
2088
  if (NULL == pTarget || NULL == pSrc) {
236,413!
2089
    return TSDB_CODE_FAILED;
×
2090
  }
2091

2092
  if (NULL == pTarget->pHead) {
236,413✔
2093
    pTarget->pHead = pSrc->pHead;
209,583✔
2094
  } else {
2095
    pTarget->pTail->pNext = pSrc->pHead;
26,830✔
2096
    if (NULL != pSrc->pHead) {
26,830!
2097
      pSrc->pHead->pPrev = pTarget->pTail;
26,830✔
2098
    }
2099
  }
2100
  pTarget->pTail = pSrc->pTail;
236,413✔
2101
  pTarget->length += pSrc->length;
236,413✔
2102
  nodesFree(pSrc);
236,413✔
2103

2104
  return TSDB_CODE_SUCCESS;
236,413✔
2105
}
2106

2107
int32_t nodesListStrictAppendList(SNodeList* pTarget, SNodeList* pSrc) {
23,095✔
2108
  if (NULL == pSrc) {
23,095!
2109
    return TSDB_CODE_OUT_OF_MEMORY;
×
2110
  }
2111
  int32_t code = nodesListAppendList(pTarget, pSrc);
23,095✔
2112
  if (TSDB_CODE_SUCCESS != code) {
23,095!
2113
    nodesDestroyList(pSrc);
×
2114
  }
2115
  return code;
23,095✔
2116
}
2117

2118
int32_t nodesListMakeStrictAppendList(SNodeList** pTarget, SNodeList* pSrc) {
5,202✔
2119
  if (NULL == *pTarget) {
5,202✔
2120
    int32_t code = nodesMakeList(pTarget);
5,100✔
2121
    if (NULL == *pTarget) {
5,100!
2122
      return code;
×
2123
    }
2124
  }
2125
  return nodesListStrictAppendList(*pTarget, pSrc);
5,202✔
2126
}
2127

2128
int32_t nodesListMakePushFront(SNodeList** pList, SNode* pNode) {
11,057✔
2129
  if (*pList == NULL) {
11,057✔
2130
    int32_t code = nodesMakeList(pList);
8,932✔
2131
    if (*pList == NULL) {
8,932!
2132
      return code;
×
2133
    }
2134
  }
2135
  return nodesListPushFront(*pList, pNode);
11,057✔
2136
}
2137

2138
int32_t nodesListPushFront(SNodeList* pList, SNode* pNode) {
62,325✔
2139
  if (NULL == pList || NULL == pNode) {
62,325!
UNCOV
2140
    return TSDB_CODE_FAILED;
×
2141
  }
2142
  SListCell* p = NULL;
62,325✔
2143
  int32_t    code = nodesCalloc(1, sizeof(SListCell), (void**)&p);
62,325✔
2144
  if (TSDB_CODE_SUCCESS != code) {
62,325!
2145
    return code;
×
2146
  }
2147
  p->pNode = pNode;
62,325✔
2148
  if (NULL != pList->pHead) {
62,325✔
2149
    pList->pHead->pPrev = p;
2,548✔
2150
    p->pNext = pList->pHead;
2,548✔
2151
  }
2152
  pList->pHead = p;
62,325✔
2153
  pList->pTail = pList->pTail ? pList->pTail : p;
62,325✔
2154
  ++(pList->length);
62,325✔
2155
  return TSDB_CODE_SUCCESS;
62,325✔
2156
}
2157

2158
SListCell* nodesListErase(SNodeList* pList, SListCell* pCell) {
235,787,615✔
2159
  if (NULL == pCell->pPrev) {
235,787,615✔
2160
    pList->pHead = pCell->pNext;
234,451,472✔
2161
  } else {
2162
    pCell->pPrev->pNext = pCell->pNext;
1,336,143✔
2163
  }
2164
  if (NULL == pCell->pNext) {
235,787,615✔
2165
    pList->pTail = pCell->pPrev;
105,982,669✔
2166
  } else {
2167
    pCell->pNext->pPrev = pCell->pPrev;
129,804,946✔
2168
  }
2169
  SListCell* pNext = pCell->pNext;
235,787,615✔
2170
  nodesDestroyNode(pCell->pNode);
235,787,615✔
2171
  nodesFree(pCell);
235,920,025✔
2172
  --(pList->length);
235,908,928✔
2173
  return pNext;
235,908,928✔
2174
}
2175

2176
void nodesListInsertList(SNodeList* pTarget, SListCell* pPos, SNodeList* pSrc) {
154,653✔
2177
  if (NULL == pTarget || NULL == pPos || NULL == pSrc || NULL == pSrc->pHead) {
154,653!
2178
    return;
44✔
2179
  }
2180

2181
  if (NULL == pPos->pPrev) {
154,609✔
2182
    pTarget->pHead = pSrc->pHead;
154,225✔
2183
  } else {
2184
    pPos->pPrev->pNext = pSrc->pHead;
384✔
2185
  }
2186
  pSrc->pHead->pPrev = pPos->pPrev;
154,609✔
2187
  pSrc->pTail->pNext = pPos;
154,609✔
2188
  pPos->pPrev = pSrc->pTail;
154,609✔
2189

2190
  pTarget->length += pSrc->length;
154,609✔
2191
  nodesFree(pSrc);
154,609✔
2192
}
2193

2194
void nodesListInsertListAfterPos(SNodeList* pTarget, SListCell* pPos, SNodeList* pSrc) {
8✔
2195
  if (NULL == pTarget || NULL == pPos || NULL == pSrc || NULL == pSrc->pHead) {
8!
2196
    return;
×
2197
  }
2198

2199
  if (NULL == pPos->pNext) {
8!
2200
    pTarget->pTail = pSrc->pHead;
8✔
2201
  } else {
2202
    pPos->pNext->pPrev = pSrc->pHead;
×
2203
  }
2204

2205
  pSrc->pHead->pPrev = pPos;
8✔
2206
  pSrc->pTail->pNext = pPos->pNext;
8✔
2207

2208
  pPos->pNext = pSrc->pHead;
8✔
2209

2210
  pTarget->length += pSrc->length;
8✔
2211
  nodesFree(pSrc);
8✔
2212
}
2213

2214
SNode* nodesListGetNode(SNodeList* pList, int32_t index) {
123,492,133✔
2215
  SNode* node;
2216
  FOREACH(node, pList) {
2,147,483,647✔
2217
    if (0 == index--) {
2,147,483,647✔
2218
      return node;
122,422,536✔
2219
    }
2220
  }
2221
  return NULL;
1,069,597✔
2222
}
2223

2224
SListCell* nodesListGetCell(SNodeList* pList, int32_t index) {
241,336✔
2225
  SNode* node;
2226
  FOREACH(node, pList) {
526,722!
2227
    if (0 == index--) {
526,722✔
2228
      return cell;
241,336✔
2229
    }
2230
  }
2231
  return NULL;
×
2232
}
2233

2234
void nodesDestroyList(SNodeList* pList) {
258,215,237✔
2235
  if (NULL == pList) {
258,215,237✔
2236
    return;
148,612,099✔
2237
  }
2238

2239
  SListCell* pNext = pList->pHead;
109,603,138✔
2240
  while (NULL != pNext) {
343,701,728✔
2241
    pNext = nodesListErase(pList, pNext);
233,594,806✔
2242
  }
2243
  nodesFree(pList);
110,106,922✔
2244
}
2245

2246
void nodesClearList(SNodeList* pList) {
62,061,801✔
2247
  if (NULL == pList) {
62,061,801✔
2248
    return;
45,420,883✔
2249
  }
2250

2251
  SListCell* pNext = pList->pHead;
16,640,918✔
2252
  while (NULL != pNext) {
33,410,290✔
2253
    SListCell* tmp = pNext;
16,652,097✔
2254
    pNext = pNext->pNext;
16,652,097✔
2255
    nodesFree(tmp);
16,652,097✔
2256
  }
2257
  nodesFree(pList);
16,758,193✔
2258
}
2259

2260
void* nodesGetValueFromNode(SValueNode* pNode) {
78,166,780✔
2261
  switch (pNode->node.resType.type) {
78,166,780!
2262
    case TSDB_DATA_TYPE_BOOL:
77,585,860✔
2263
    case TSDB_DATA_TYPE_TINYINT:
2264
    case TSDB_DATA_TYPE_SMALLINT:
2265
    case TSDB_DATA_TYPE_INT:
2266
    case TSDB_DATA_TYPE_BIGINT:
2267
    case TSDB_DATA_TYPE_TIMESTAMP:
2268
    case TSDB_DATA_TYPE_UTINYINT:
2269
    case TSDB_DATA_TYPE_USMALLINT:
2270
    case TSDB_DATA_TYPE_UINT:
2271
    case TSDB_DATA_TYPE_UBIGINT:
2272
    case TSDB_DATA_TYPE_FLOAT:
2273
    case TSDB_DATA_TYPE_DOUBLE:
2274
      return (void*)&pNode->typeData;
77,585,860✔
2275
    case TSDB_DATA_TYPE_NCHAR:
597,416✔
2276
    case TSDB_DATA_TYPE_VARCHAR:
2277
    case TSDB_DATA_TYPE_VARBINARY:
2278
    case TSDB_DATA_TYPE_JSON:
2279
    case TSDB_DATA_TYPE_GEOMETRY:
2280
      return (void*)pNode->datum.p;
597,416✔
2281
    default:
×
2282
      break;
×
2283
  }
2284

2285
  return NULL;
×
2286
}
2287

2288
int32_t nodesSetValueNodeValue(SValueNode* pNode, void* value) {
338,118✔
2289
  switch (pNode->node.resType.type) {
338,118!
2290
    case TSDB_DATA_TYPE_NULL:
×
2291
      break;
×
2292
    case TSDB_DATA_TYPE_BOOL:
38,299✔
2293
      pNode->datum.b = *(bool*)value;
38,299✔
2294
      *(bool*)&pNode->typeData = pNode->datum.b;
38,299✔
2295
      break;
38,299✔
2296
    case TSDB_DATA_TYPE_TINYINT:
6,911✔
2297
      pNode->datum.i = *(int8_t*)value;
6,911✔
2298
      *(int8_t*)&pNode->typeData = pNode->datum.i;
6,911✔
2299
      break;
6,911✔
2300
    case TSDB_DATA_TYPE_SMALLINT:
6,826✔
2301
      pNode->datum.i = *(int16_t*)value;
6,826✔
2302
      *(int16_t*)&pNode->typeData = pNode->datum.i;
6,826✔
2303
      break;
6,826✔
2304
    case TSDB_DATA_TYPE_INT:
16,545✔
2305
      pNode->datum.i = *(int32_t*)value;
16,545✔
2306
      *(int32_t*)&pNode->typeData = pNode->datum.i;
16,545✔
2307
      break;
16,545✔
2308
    case TSDB_DATA_TYPE_BIGINT:
39,076✔
2309
      pNode->datum.i = *(int64_t*)value;
39,076✔
2310
      *(int64_t*)&pNode->typeData = pNode->datum.i;
39,076✔
2311
      break;
39,076✔
2312
    case TSDB_DATA_TYPE_TIMESTAMP:
177,354✔
2313
      pNode->datum.i = *(int64_t*)value;
177,354✔
2314
      *(int64_t*)&pNode->typeData = pNode->datum.i;
177,354✔
2315
      break;
177,354✔
2316
    case TSDB_DATA_TYPE_UTINYINT:
6,604✔
2317
      pNode->datum.u = *(int8_t*)value;
6,604✔
2318
      *(int8_t*)&pNode->typeData = pNode->datum.u;
6,604✔
2319
      break;
6,604✔
2320
    case TSDB_DATA_TYPE_USMALLINT:
6,514✔
2321
      pNode->datum.u = *(int16_t*)value;
6,514✔
2322
      *(int16_t*)&pNode->typeData = pNode->datum.u;
6,514✔
2323
      break;
6,514✔
2324
    case TSDB_DATA_TYPE_UINT:
6,618✔
2325
      pNode->datum.u = *(int32_t*)value;
6,618✔
2326
      *(int32_t*)&pNode->typeData = pNode->datum.u;
6,618✔
2327
      break;
6,618✔
2328
    case TSDB_DATA_TYPE_UBIGINT:
6,514✔
2329
      pNode->datum.u = *(uint64_t*)value;
6,514✔
2330
      *(uint64_t*)&pNode->typeData = pNode->datum.u;
6,514✔
2331
      break;
6,514✔
2332
    case TSDB_DATA_TYPE_FLOAT:
6,551✔
2333
      pNode->datum.d = *(float*)value;
6,551✔
2334
      *(float*)&pNode->typeData = pNode->datum.d;
6,551✔
2335
      break;
6,551✔
2336
    case TSDB_DATA_TYPE_DOUBLE:
20,306✔
2337
      pNode->datum.d = *(double*)value;
20,306✔
2338
      *(double*)&pNode->typeData = pNode->datum.d;
20,306✔
2339
      break;
20,306✔
2340
    case TSDB_DATA_TYPE_NCHAR:
×
2341
    case TSDB_DATA_TYPE_VARCHAR:
2342
    case TSDB_DATA_TYPE_VARBINARY:
2343
    case TSDB_DATA_TYPE_DECIMAL:
2344
    case TSDB_DATA_TYPE_JSON:
2345
    case TSDB_DATA_TYPE_BLOB:
2346
    case TSDB_DATA_TYPE_MEDIUMBLOB:
2347
    case TSDB_DATA_TYPE_GEOMETRY:
2348
      pNode->datum.p = (char*)value;
×
2349
      break;
×
2350
    default:
×
2351
      return TSDB_CODE_APP_ERROR;
×
2352
  }
2353

2354
  return TSDB_CODE_SUCCESS;
338,118✔
2355
}
2356

2357
char* nodesGetStrValueFromNode(SValueNode* pNode) {
4,142✔
2358
  switch (pNode->node.resType.type) {
4,142!
2359
    case TSDB_DATA_TYPE_BOOL: {
2✔
2360
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
2!
2361
      if (NULL == buf) {
2!
2362
        return NULL;
×
2363
      }
2364

2365
      snprintf(buf, MAX_NUM_STR_SIZE, "%s", pNode->datum.b ? "true" : "false");
2✔
2366
      return buf;
2✔
2367
    }
2368
    case TSDB_DATA_TYPE_TINYINT:
3,150✔
2369
    case TSDB_DATA_TYPE_SMALLINT:
2370
    case TSDB_DATA_TYPE_INT:
2371
    case TSDB_DATA_TYPE_BIGINT:
2372
    case TSDB_DATA_TYPE_TIMESTAMP: {
2373
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
3,150!
2374
      if (NULL == buf) {
3,150!
2375
        return NULL;
×
2376
      }
2377

2378
      snprintf(buf, MAX_NUM_STR_SIZE, "%" PRId64, pNode->datum.i);
3,150✔
2379
      return buf;
3,150✔
2380
    }
2381
    case TSDB_DATA_TYPE_UTINYINT:
×
2382
    case TSDB_DATA_TYPE_USMALLINT:
2383
    case TSDB_DATA_TYPE_UINT:
2384
    case TSDB_DATA_TYPE_UBIGINT: {
2385
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
×
2386
      if (NULL == buf) {
×
2387
        return NULL;
×
2388
      }
2389

2390
      snprintf(buf, MAX_NUM_STR_SIZE, "%" PRIu64, pNode->datum.u);
×
2391
      return buf;
×
2392
    }
2393
    case TSDB_DATA_TYPE_FLOAT:
2✔
2394
    case TSDB_DATA_TYPE_DOUBLE: {
2395
      void* buf = taosMemoryMalloc(MAX_NUM_STR_SIZE);
2!
2396
      if (NULL == buf) {
2!
2397
        return NULL;
×
2398
      }
2399

2400
      snprintf(buf, MAX_NUM_STR_SIZE, "%e", pNode->datum.d);
2✔
2401
      return buf;
2✔
2402
    }
2403
    case TSDB_DATA_TYPE_NCHAR:
988✔
2404
    case TSDB_DATA_TYPE_VARCHAR:
2405
    case TSDB_DATA_TYPE_VARBINARY:
2406
    case TSDB_DATA_TYPE_GEOMETRY: {
2407
      int32_t bufSize = varDataLen(pNode->datum.p) + 2 + 1;
988✔
2408
      void*   buf = taosMemoryMalloc(bufSize);
988!
2409
      if (NULL == buf) {
988!
2410
        return NULL;
×
2411
      }
2412

2413
      snprintf(buf, bufSize, "'%s'", varDataVal(pNode->datum.p));
988✔
2414
      return buf;
988✔
2415
    }
2416
    default:
×
2417
      break;
×
2418
  }
2419

2420
  return NULL;
×
2421
}
2422

2423
bool nodesIsExprNode(const SNode* pNode) {
20,138,612✔
2424
  ENodeType type = nodeType(pNode);
20,138,612✔
2425
  return (QUERY_NODE_COLUMN == type || QUERY_NODE_VALUE == type || QUERY_NODE_OPERATOR == type ||
11,097,128✔
2426
          QUERY_NODE_FUNCTION == type || QUERY_NODE_LOGIC_CONDITION == type || QUERY_NODE_CASE_WHEN == type);
31,235,740✔
2427
}
2428

2429
bool nodesIsUnaryOp(const SOperatorNode* pOp) {
×
2430
  switch (pOp->opType) {
×
2431
    case OP_TYPE_MINUS:
×
2432
    case OP_TYPE_IS_NULL:
2433
    case OP_TYPE_IS_NOT_NULL:
2434
    case OP_TYPE_IS_TRUE:
2435
    case OP_TYPE_IS_FALSE:
2436
    case OP_TYPE_IS_UNKNOWN:
2437
    case OP_TYPE_IS_NOT_TRUE:
2438
    case OP_TYPE_IS_NOT_FALSE:
2439
    case OP_TYPE_IS_NOT_UNKNOWN:
2440
      return true;
×
2441
    default:
×
2442
      break;
×
2443
  }
2444
  return false;
×
2445
}
2446

2447
bool nodesIsArithmeticOp(const SOperatorNode* pOp) {
×
2448
  switch (pOp->opType) {
×
2449
    case OP_TYPE_ADD:
×
2450
    case OP_TYPE_SUB:
2451
    case OP_TYPE_MULTI:
2452
    case OP_TYPE_DIV:
2453
    case OP_TYPE_REM:
2454
      return true;
×
2455
    default:
×
2456
      break;
×
2457
  }
2458
  return false;
×
2459
}
2460

2461
bool nodesIsComparisonOp(const SOperatorNode* pOp) {
1,115,839✔
2462
  switch (pOp->opType) {
1,115,839✔
2463
    case OP_TYPE_GREATER_THAN:
1,115,114✔
2464
    case OP_TYPE_GREATER_EQUAL:
2465
    case OP_TYPE_LOWER_THAN:
2466
    case OP_TYPE_LOWER_EQUAL:
2467
    case OP_TYPE_EQUAL:
2468
    case OP_TYPE_NOT_EQUAL:
2469
    case OP_TYPE_IN:
2470
    case OP_TYPE_NOT_IN:
2471
    case OP_TYPE_LIKE:
2472
    case OP_TYPE_NOT_LIKE:
2473
    case OP_TYPE_MATCH:
2474
    case OP_TYPE_NMATCH:
2475
    case OP_TYPE_JSON_CONTAINS:
2476
    case OP_TYPE_IS_NULL:
2477
    case OP_TYPE_IS_NOT_NULL:
2478
    case OP_TYPE_IS_TRUE:
2479
    case OP_TYPE_IS_FALSE:
2480
    case OP_TYPE_IS_UNKNOWN:
2481
    case OP_TYPE_IS_NOT_TRUE:
2482
    case OP_TYPE_IS_NOT_FALSE:
2483
    case OP_TYPE_IS_NOT_UNKNOWN:
2484
      return true;
1,115,114✔
2485
    default:
725✔
2486
      break;
725✔
2487
  }
2488
  return false;
725✔
2489
}
2490

2491
bool nodesIsJsonOp(const SOperatorNode* pOp) {
×
2492
  switch (pOp->opType) {
×
2493
    case OP_TYPE_JSON_GET_VALUE:
×
2494
    case OP_TYPE_JSON_CONTAINS:
2495
      return true;
×
2496
    default:
×
2497
      break;
×
2498
  }
2499
  return false;
×
2500
}
2501

2502
bool nodesIsRegularOp(const SOperatorNode* pOp) {
1,141,714✔
2503
  switch (pOp->opType) {
1,141,714✔
2504
    case OP_TYPE_LIKE:
101,194✔
2505
    case OP_TYPE_NOT_LIKE:
2506
    case OP_TYPE_MATCH:
2507
    case OP_TYPE_NMATCH:
2508
      return true;
101,194✔
2509
    default:
1,040,520✔
2510
      break;
1,040,520✔
2511
  }
2512
  return false;
1,040,520✔
2513
}
2514

2515
bool nodesIsMatchRegularOp(const SOperatorNode* pOp) {
101,102✔
2516
  switch (pOp->opType) {
101,102✔
2517
    case OP_TYPE_MATCH:
46,013✔
2518
    case OP_TYPE_NMATCH:
2519
      return true;
46,013✔
2520
    default:
55,089✔
2521
      break;
55,089✔
2522
  }
2523
  return false;
55,089✔
2524
}
2525

2526
bool nodesIsBitwiseOp(const SOperatorNode* pOp) {
×
2527
  switch (pOp->opType) {
×
2528
    case OP_TYPE_BIT_AND:
×
2529
    case OP_TYPE_BIT_OR:
2530
      return true;
×
2531
    default:
×
2532
      break;
×
2533
  }
2534
  return false;
×
2535
}
2536

2537
typedef struct SCollectColumnsCxt {
2538
  int32_t         errCode;
2539
  const char*     pTableAlias;
2540
  SSHashObj*      pMultiTableAlias;
2541
  ECollectColType collectType;
2542
  SNodeList*      pCols;
2543
  SHashObj*       pColHash;
2544
} SCollectColumnsCxt;
2545

2546
static EDealRes doCollect(SCollectColumnsCxt* pCxt, SColumnNode* pCol, SNode* pNode) {
8,155,789✔
2547
  char    name[TSDB_TABLE_NAME_LEN + TSDB_COL_NAME_LEN];
2548
  int32_t len = 0;
8,155,789✔
2549
  if ('\0' == pCol->tableAlias[0]) {
8,155,789✔
2550
    len = tsnprintf(name, sizeof(name), "%s", pCol->colName);
370,775✔
2551
  } else {
2552
    len = tsnprintf(name, sizeof(name), "%s.%s", pCol->tableAlias, pCol->colName);
7,785,014✔
2553
  }
2554
  if (pCol->projRefIdx > 0) {
8,155,820✔
2555
    len = taosHashBinary(name, strlen(name));
32,142✔
2556
    len += tsnprintf(name + len, TSDB_TABLE_NAME_LEN + TSDB_COL_NAME_LEN - len, "_%d", pCol->projRefIdx);
32,142✔
2557
  }
2558
  SNode** pNodeFound = taosHashGet(pCxt->pColHash, name, len);
8,155,820✔
2559
  if (pNodeFound == NULL) {
8,155,761✔
2560
    pCxt->errCode = taosHashPut(pCxt->pColHash, name, len, &pNode, POINTER_BYTES);
5,834,334✔
2561
    if (TSDB_CODE_SUCCESS == pCxt->errCode) {
5,834,382✔
2562
      SNode* pNew = NULL;
5,834,379✔
2563
      pCxt->errCode = nodesCloneNode(pNode, &pNew);
5,834,379✔
2564
      if (TSDB_CODE_SUCCESS == pCxt->errCode) {
5,834,335!
2565
        pCxt->errCode = nodesListStrictAppend(pCxt->pCols, pNew);
5,834,338✔
2566
      }
2567
    }
2568
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
5,834,361!
2569
  }
2570
  return DEAL_RES_CONTINUE;
2,321,427✔
2571
}
2572

2573
static bool isCollectType(ECollectColType collectType, EColumnType colType) {
14,539,297✔
2574
  return COLLECT_COL_TYPE_ALL == collectType
2575
             ? true
2576
             : (COLLECT_COL_TYPE_TAG == collectType ? COLUMN_TYPE_TAG == colType
19,859,951✔
2577
                                                    : (COLUMN_TYPE_TAG != colType && COLUMN_TYPE_TBNAME != colType));
5,320,654✔
2578
}
2579

2580
static EDealRes collectColumns(SNode* pNode, void* pContext) {
50,714,474✔
2581
  SCollectColumnsCxt* pCxt = (SCollectColumnsCxt*)pContext;
50,714,474✔
2582
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
50,714,474✔
2583
    SColumnNode* pCol = (SColumnNode*)pNode;
14,131,705✔
2584
    if (isCollectType(pCxt->collectType, pCol->colType) && 0 != strcmp(pCol->colName, "*") &&
14,131,705✔
2585
        (NULL == pCxt->pTableAlias || 0 == strcmp(pCxt->pTableAlias, pCol->tableAlias))) {
8,810,850✔
2586
      return doCollect(pCxt, pCol, pNode);
7,748,416✔
2587
    }
2588
  }
2589
  return DEAL_RES_CONTINUE;
42,966,062✔
2590
}
2591

2592
static EDealRes collectColumnsExt(SNode* pNode, void* pContext) {
782,760✔
2593
  SCollectColumnsCxt* pCxt = (SCollectColumnsCxt*)pContext;
782,760✔
2594
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
782,760✔
2595
    SColumnNode* pCol = (SColumnNode*)pNode;
407,600✔
2596
    if (isCollectType(pCxt->collectType, pCol->colType) && 0 != strcmp(pCol->colName, "*") &&
407,600!
2597
        (NULL == pCxt->pMultiTableAlias ||
407,600!
2598
         NULL != (pCxt->pTableAlias =
407,600✔
2599
                      tSimpleHashGet(pCxt->pMultiTableAlias, pCol->tableAlias, strlen(pCol->tableAlias))))) {
407,600✔
2600
      return doCollect(pCxt, pCol, pNode);
406,196✔
2601
    }
2602
  }
2603
  return DEAL_RES_CONTINUE;
376,564✔
2604
}
2605

2606
int32_t nodesCollectColumns(SSelectStmt* pSelect, ESqlClause clause, const char* pTableAlias, ECollectColType type,
1,993,215✔
2607
                            SNodeList** pCols) {
2608
  if (NULL == pSelect || NULL == pCols) {
1,993,215!
2609
    return TSDB_CODE_FAILED;
×
2610
  }
2611
  SNodeList* pList = NULL;
1,993,227✔
2612
  if (!*pCols) {
1,993,227!
2613
    int32_t code = nodesMakeList(&pList);
1,993,231✔
2614
    if (TSDB_CODE_SUCCESS != code) {
1,993,232!
2615
      return code;
×
2616
    }
2617
  }
2618
  SCollectColumnsCxt cxt = {
5,979,690✔
2619
      .errCode = TSDB_CODE_SUCCESS,
2620
      .pTableAlias = pTableAlias,
2621
      .collectType = type,
2622
      .pCols = (NULL == *pCols ? pList : *pCols),
1,993,228!
2623
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
1,993,228✔
2624
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
1,993,234!
2625
    return TSDB_CODE_OUT_OF_MEMORY;
×
2626
  }
2627
  *pCols = NULL;
1,993,234✔
2628
  nodesWalkSelectStmt(pSelect, clause, collectColumns, &cxt);
1,993,234✔
2629
  taosHashCleanup(cxt.pColHash);
1,993,239✔
2630
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
1,993,237!
2631
    nodesDestroyList(cxt.pCols);
×
2632
    return cxt.errCode;
×
2633
  }
2634
  if (LIST_LENGTH(cxt.pCols) > 0) {
1,993,237!
2635
    *pCols = cxt.pCols;
1,277,880✔
2636
  } else {
2637
    nodesDestroyList(cxt.pCols);
715,357✔
2638
  }
2639

2640
  return TSDB_CODE_SUCCESS;
1,993,227✔
2641
}
2642

2643
int32_t nodesCollectColumnsExt(SSelectStmt* pSelect, ESqlClause clause, SSHashObj* pMultiTableAlias,
107,712✔
2644
                               ECollectColType type, SNodeList** pCols) {
2645
  if (NULL == pSelect || NULL == pCols) {
107,712!
2646
    return TSDB_CODE_FAILED;
×
2647
  }
2648

2649
  SNodeList* pList = NULL;
107,712✔
2650
  if (!*pCols) {
107,712!
2651
    int32_t code = nodesMakeList(&pList);
107,712✔
2652
    if (TSDB_CODE_SUCCESS != code) {
107,712!
2653
      return code;
×
2654
    }
2655
  }
2656

2657
  SCollectColumnsCxt cxt = {
323,136✔
2658
      .errCode = TSDB_CODE_SUCCESS,
2659
      .pTableAlias = NULL,
2660
      .pMultiTableAlias = pMultiTableAlias,
2661
      .collectType = type,
2662
      .pCols = (NULL == *pCols ? pList : *pCols),
107,712!
2663
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
107,712✔
2664
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
107,712!
2665
    return TSDB_CODE_OUT_OF_MEMORY;
×
2666
  }
2667
  *pCols = NULL;
107,712✔
2668
  nodesWalkSelectStmtImpl(pSelect, clause, collectColumnsExt, &cxt);
107,712✔
2669
  taosHashCleanup(cxt.pColHash);
107,712✔
2670
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
107,712!
2671
    nodesDestroyList(cxt.pCols);
×
2672
    return cxt.errCode;
×
2673
  }
2674
  if (LIST_LENGTH(cxt.pCols) > 0) {
107,712!
2675
    *pCols = cxt.pCols;
104,776✔
2676
  } else {
2677
    nodesDestroyList(cxt.pCols);
2,936✔
2678
  }
2679

2680
  return TSDB_CODE_SUCCESS;
107,712✔
2681
}
2682

2683
int32_t nodesCollectColumnsFromNode(SNode* node, const char* pTableAlias, ECollectColType type, SNodeList** pCols) {
1,545,688✔
2684
  if (NULL == pCols) {
1,545,688!
2685
    return TSDB_CODE_FAILED;
×
2686
  }
2687
  SNodeList* pList = NULL;
1,545,688✔
2688
  if (!*pCols) {
1,545,688✔
2689
    int32_t code = nodesMakeList(&pList);
18,073✔
2690
    if (TSDB_CODE_SUCCESS != code) {
18,073!
2691
      return code;
×
2692
    }
2693
  }
2694

2695
  SCollectColumnsCxt cxt = {
4,637,089✔
2696
      .errCode = TSDB_CODE_SUCCESS,
2697
      .pTableAlias = pTableAlias,
2698
      .collectType = type,
2699
      .pCols = (NULL == *pCols ? pList : *pCols),
1,545,688✔
2700
      .pColHash = taosHashInit(128, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK)};
1,545,688✔
2701
  if (NULL == cxt.pCols || NULL == cxt.pColHash) {
1,545,713!
2702
    return TSDB_CODE_OUT_OF_MEMORY;
×
2703
  }
2704
  *pCols = NULL;
1,545,713✔
2705

2706
  nodesWalkExpr(node, collectColumns, &cxt);
1,545,713✔
2707

2708
  taosHashCleanup(cxt.pColHash);
1,545,716✔
2709
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
1,545,727!
2710
    nodesDestroyList(cxt.pCols);
×
2711
    return cxt.errCode;
×
2712
  }
2713
  if (LIST_LENGTH(cxt.pCols) > 0) {
1,545,727!
2714
    *pCols = cxt.pCols;
1,507,314✔
2715
  } else {
2716
    nodesDestroyList(cxt.pCols);
38,413✔
2717
  }
2718

2719
  return TSDB_CODE_SUCCESS;
1,545,721✔
2720
}
2721

2722
typedef struct SCollectFuncsCxt {
2723
  int32_t         errCode;
2724
  char*           tableAlias;
2725
  FFuncClassifier classifier;
2726
  SNodeList*      pFuncs;
2727
} SCollectFuncsCxt;
2728

2729
static EDealRes collectFuncs(SNode* pNode, void* pContext) {
21,917,732✔
2730
  SCollectFuncsCxt* pCxt = (SCollectFuncsCxt*)pContext;
21,917,732✔
2731
  if (QUERY_NODE_FUNCTION == nodeType(pNode) && pCxt->classifier(((SFunctionNode*)pNode)->funcId)) {
21,917,732✔
2732
    SFunctionNode* pFunc = (SFunctionNode*)pNode;
1,995,845✔
2733
    if (FUNCTION_TYPE_TBNAME == pFunc->funcType && pCxt->tableAlias) {
1,995,845!
2734
      SValueNode* pVal = (SValueNode*)nodesListGetNode(pFunc->pParameterList, 0);
283,723✔
2735
      if (pVal && strcmp(pVal->literal, pCxt->tableAlias)) {
283,723✔
2736
        return DEAL_RES_CONTINUE;
242✔
2737
      }
2738
    }
2739

2740
    bool   bFound = false;
1,995,603✔
2741
    SNode* pn = NULL;
1,995,603✔
2742
    FOREACH(pn, pCxt->pFuncs) {
641,837,915!
2743
      if (nodesEqualNode(pn, pNode)) {
640,216,416✔
2744
        bFound = true;
374,105✔
2745
        break;
374,105✔
2746
      }
2747
    }
2748
    if (!bFound) {
1,995,604✔
2749
      SNode* pNew = NULL;
1,621,497✔
2750
      pCxt->errCode = nodesCloneNode(pNode, &pNew);
1,621,497✔
2751
      if (TSDB_CODE_SUCCESS == pCxt->errCode) {
1,621,509!
2752
        pCxt->errCode = nodesListStrictAppend(pCxt->pFuncs, pNew);
1,621,509✔
2753
      }
2754
    }
2755
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
1,995,618✔
2756
  }
2757
  return DEAL_RES_CONTINUE;
19,921,878✔
2758
}
2759

2760
static uint32_t funcNodeHash(const char* pKey, uint32_t len) {
×
2761
  SExprNode* pExpr = *(SExprNode**)pKey;
×
2762
  return MurmurHash3_32(pExpr->aliasName, strlen(pExpr->aliasName));
×
2763
}
2764

2765
static int32_t funcNodeEqual(const void* pLeft, const void* pRight, size_t len) {
×
2766
  // if (0 != strcmp((*(const SExprNode**)pLeft)->aliasName, (*(const SExprNode**)pRight)->aliasName)) {
2767
  //   return 1;
2768
  // }
2769
  return nodesEqualNode(*(const SNode**)pLeft, *(const SNode**)pRight) ? 0 : 1;
×
2770
}
2771

2772
int32_t nodesCollectSelectFuncs(SSelectStmt* pSelect, ESqlClause clause, char* tableAlias, FFuncClassifier classifier,
21,563✔
2773
                                SNodeList* pFuncs) {
2774
  if (NULL == pSelect || NULL == pFuncs) {
21,563!
2775
    return TSDB_CODE_FAILED;
×
2776
  }
2777

2778
  SCollectFuncsCxt cxt = {
21,563✔
2779
      .errCode = TSDB_CODE_SUCCESS, .classifier = classifier, .tableAlias = tableAlias, .pFuncs = pFuncs};
2780

2781
  nodesWalkSelectStmt(pSelect, clause, collectFuncs, &cxt);
21,563✔
2782
  return cxt.errCode;
21,563✔
2783
}
2784

2785
int32_t nodesCollectFuncs(SSelectStmt* pSelect, ESqlClause clause, char* tableAlias, FFuncClassifier classifier,
1,411,281✔
2786
                          SNodeList** pFuncs) {
2787
  if (NULL == pSelect || NULL == pFuncs) {
1,411,281!
2788
    return TSDB_CODE_FAILED;
×
2789
  }
2790
  SNodeList* pList = NULL;
1,411,294✔
2791
  if (!*pFuncs) {
1,411,294✔
2792
    int32_t code = nodesMakeList(&pList);
1,244,881✔
2793
    if (TSDB_CODE_SUCCESS != code) {
1,244,887!
2794
      return code;
×
2795
    }
2796
  }
2797
  SCollectFuncsCxt cxt = {.errCode = TSDB_CODE_SUCCESS,
2,822,600✔
2798
                          .classifier = classifier,
2799
                          .tableAlias = tableAlias,
2800
                          .pFuncs = (NULL == *pFuncs ? pList : *pFuncs)};
1,411,300✔
2801
  if (NULL == cxt.pFuncs) {
1,411,300!
2802
    return TSDB_CODE_OUT_OF_MEMORY;
×
2803
  }
2804
  *pFuncs = NULL;
1,411,300✔
2805
  nodesWalkSelectStmt(pSelect, clause, collectFuncs, &cxt);
1,411,300✔
2806
  if (TSDB_CODE_SUCCESS == cxt.errCode) {
1,411,307!
2807
    if (LIST_LENGTH(cxt.pFuncs) > 0) {
1,411,307!
2808
      *pFuncs = cxt.pFuncs;
726,190✔
2809
    } else {
2810
      nodesDestroyList(cxt.pFuncs);
685,117✔
2811
    }
2812
  } else {
UNCOV
2813
    nodesDestroyList(cxt.pFuncs);
×
2814
  }
2815

2816
  return cxt.errCode;
1,411,300✔
2817
}
2818

2819
typedef struct SCollectSpecialNodesCxt {
2820
  int32_t    errCode;
2821
  ENodeType  type;
2822
  SNodeList* pNodes;
2823
} SCollectSpecialNodesCxt;
2824

2825
static EDealRes collectSpecialNodes(SNode* pNode, void* pContext) {
×
2826
  SCollectSpecialNodesCxt* pCxt = (SCollectSpecialNodesCxt*)pContext;
×
2827
  if (pCxt->type == nodeType(pNode)) {
×
2828
    SNode* pNew = NULL;
×
2829
    pCxt->errCode = nodesCloneNode(pNode, &pNew);
×
2830
    if (TSDB_CODE_SUCCESS == pCxt->errCode) {
×
2831
      pCxt->errCode = nodesListStrictAppend(pCxt->pNodes, pNew);
×
2832
    }
2833
    return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
×
2834
  }
2835
  return DEAL_RES_CONTINUE;
×
2836
}
2837

2838
int32_t nodesCollectSpecialNodes(SSelectStmt* pSelect, ESqlClause clause, ENodeType type, SNodeList** ppNodes) {
×
2839
  if (NULL == pSelect || NULL == ppNodes) {
×
2840
    return TSDB_CODE_FAILED;
×
2841
  }
2842
  SCollectSpecialNodesCxt cxt = {.errCode = TSDB_CODE_SUCCESS, .type = type, .pNodes = NULL};
×
2843
  if (!*ppNodes) {
×
2844
    cxt.errCode = nodesMakeList(&cxt.pNodes);
×
2845
  } else {
2846
    cxt.pNodes = *ppNodes;
×
2847
  }
2848
  if (NULL == cxt.pNodes) {
×
2849
    return cxt.errCode;
×
2850
  }
2851
  *ppNodes = NULL;
×
2852
  nodesWalkSelectStmt(pSelect, SQL_CLAUSE_GROUP_BY, collectSpecialNodes, &cxt);
×
2853
  if (TSDB_CODE_SUCCESS != cxt.errCode) {
×
2854
    nodesDestroyList(cxt.pNodes);
×
2855
    return cxt.errCode;
×
2856
  }
2857
  if (LIST_LENGTH(cxt.pNodes) > 0) {
×
2858
    *ppNodes = cxt.pNodes;
×
2859
  } else {
2860
    nodesDestroyList(cxt.pNodes);
×
2861
  }
2862

2863
  return TSDB_CODE_SUCCESS;
×
2864
}
2865

2866
static EDealRes hasColumn(SNode* pNode, void* pContext) {
17,086✔
2867
  if (QUERY_NODE_COLUMN == nodeType(pNode)) {
17,086✔
2868
    *(bool*)pContext = true;
17,056✔
2869
    return DEAL_RES_END;
17,056✔
2870
  }
2871
  return DEAL_RES_CONTINUE;
30✔
2872
}
2873

2874
bool nodesExprHasColumn(SNode* pNode) {
17,086✔
2875
  bool hasCol = false;
17,086✔
2876
  nodesWalkExprPostOrder(pNode, hasColumn, &hasCol);
17,086✔
2877
  return hasCol;
17,086✔
2878
}
2879

2880
bool nodesExprsHasColumn(SNodeList* pList) {
×
2881
  bool hasCol = false;
×
2882
  nodesWalkExprsPostOrder(pList, hasColumn, &hasCol);
×
2883
  return hasCol;
×
2884
}
2885

2886
char* nodesGetFillModeString(EFillMode mode) {
10✔
2887
  switch (mode) {
10!
2888
    case FILL_MODE_NONE:
×
2889
      return "none";
×
2890
    case FILL_MODE_VALUE:
×
2891
      return "value";
×
2892
    case FILL_MODE_VALUE_F:
×
2893
      return "value_f";
×
2894
    case FILL_MODE_PREV:
2✔
2895
      return "prev";
2✔
2896
    case FILL_MODE_NULL:
4✔
2897
      return "null";
4✔
2898
    case FILL_MODE_NULL_F:
×
2899
      return "null_f";
×
2900
    case FILL_MODE_LINEAR:
4✔
2901
      return "linear";
4✔
2902
    case FILL_MODE_NEXT:
×
2903
      return "next";
×
2904
    default:
×
2905
      return "unknown";
×
2906
  }
2907
}
2908

2909
char* nodesGetNameFromColumnNode(SNode* pNode) {
32,298✔
2910
  if (NULL == pNode || QUERY_NODE_COLUMN != pNode->type) {
32,298!
2911
    return "NULL";
×
2912
  }
2913

2914
  return ((SColumnNode*)pNode)->node.userAlias;
32,298✔
2915
}
2916

2917
int32_t nodesGetOutputNumFromSlotList(SNodeList* pSlots) {
171,803✔
2918
  if (NULL == pSlots || pSlots->length <= 0) {
171,803!
2919
    return 0;
×
2920
  }
2921

2922
  SNode*  pNode = NULL;
171,803✔
2923
  int32_t num = 0;
171,803✔
2924
  FOREACH(pNode, pSlots) {
2,472,127!
2925
    if (QUERY_NODE_SLOT_DESC != pNode->type) {
2,300,324!
2926
      continue;
×
2927
    }
2928

2929
    SSlotDescNode* descNode = (SSlotDescNode*)pNode;
2,300,324✔
2930
    if (descNode->output) {
2,300,324✔
2931
      ++num;
2,296,562✔
2932
    }
2933
  }
2934

2935
  return num;
171,803✔
2936
}
2937

2938
int32_t nodesValueNodeToVariant(const SValueNode* pNode, SVariant* pVal) {
895,558✔
2939
  int32_t code = 0;
895,558✔
2940
  if (pNode->isNull) {
895,558✔
2941
    pVal->nType = TSDB_DATA_TYPE_NULL;
7,860✔
2942
    pVal->nLen = tDataTypes[TSDB_DATA_TYPE_NULL].bytes;
7,860✔
2943
    return code;
7,860✔
2944
  }
2945
  pVal->nType = pNode->node.resType.type;
887,698✔
2946
  pVal->nLen = pNode->node.resType.bytes;
887,698✔
2947
  switch (pNode->node.resType.type) {
887,698!
2948
    case TSDB_DATA_TYPE_NULL:
×
2949
      break;
×
2950
    case TSDB_DATA_TYPE_BOOL:
114✔
2951
      pVal->i = pNode->datum.b;
114✔
2952
      break;
114✔
2953
    case TSDB_DATA_TYPE_TINYINT:
723,478✔
2954
    case TSDB_DATA_TYPE_SMALLINT:
2955
    case TSDB_DATA_TYPE_INT:
2956
    case TSDB_DATA_TYPE_BIGINT:
2957
    case TSDB_DATA_TYPE_TIMESTAMP:
2958
      pVal->i = pNode->datum.i;
723,478✔
2959
      break;
723,478✔
2960
    case TSDB_DATA_TYPE_UTINYINT:
287✔
2961
    case TSDB_DATA_TYPE_USMALLINT:
2962
    case TSDB_DATA_TYPE_UINT:
2963
    case TSDB_DATA_TYPE_UBIGINT:
2964
      pVal->u = pNode->datum.u;
287✔
2965
      break;
287✔
2966
    case TSDB_DATA_TYPE_FLOAT:
43✔
2967
      pVal->f = pNode->datum.d;
43✔
2968
      break;
43✔
2969
    case TSDB_DATA_TYPE_DOUBLE:
27,580✔
2970
      pVal->d = pNode->datum.d;
27,580✔
2971
      break;
27,580✔
2972
    case TSDB_DATA_TYPE_NCHAR:
136,233✔
2973
    case TSDB_DATA_TYPE_VARCHAR:
2974
    case TSDB_DATA_TYPE_VARBINARY:
2975
    case TSDB_DATA_TYPE_GEOMETRY:
2976
      pVal->pz = taosMemoryCalloc(1, pVal->nLen + 1);
136,233!
2977
      if (pVal->pz) {
136,288!
2978
        memcpy(pVal->pz, pNode->datum.p, varDataTLen(pNode->datum.p));
136,288✔
2979
      } else {
2980
        code = terrno;
×
2981
      }
2982
      break;
136,288✔
2983
    case TSDB_DATA_TYPE_JSON:
9✔
2984
      pVal->nLen = getJsonValueLen(pNode->datum.p);
9✔
2985
      pVal->pz = taosMemoryCalloc(1, pVal->nLen);
9!
2986
      if (pVal->pz) {
9!
2987
        memcpy(pVal->pz, pNode->datum.p, pVal->nLen);
9✔
2988
      } else {
2989
        code = terrno;
×
2990
      }
2991
      break;
9✔
2992
    case TSDB_DATA_TYPE_DECIMAL:
×
2993
    case TSDB_DATA_TYPE_BLOB:
2994
      // todo
2995
    default:
2996
      break;
×
2997
  }
2998
  return code;
887,753✔
2999
}
3000

3001
int32_t nodesMergeConds(SNode** pDst, SNodeList** pSrc) {
2,266,882✔
3002
  if (NULL == *pSrc) {
2,266,882✔
3003
    return TSDB_CODE_SUCCESS;
1,666,652✔
3004
  }
3005

3006
  if (1 == LIST_LENGTH(*pSrc)) {
600,230!
3007
    *pDst = nodesListGetNode(*pSrc, 0);
129,275✔
3008
    nodesClearList(*pSrc);
129,275✔
3009
  } else {
3010
    SLogicConditionNode* pLogicCond = NULL;
470,955✔
3011
    int32_t              code = nodesMakeNode(QUERY_NODE_LOGIC_CONDITION, (SNode**)&pLogicCond);
470,955✔
3012
    if (TSDB_CODE_SUCCESS != code) {
470,977!
3013
      return code;
×
3014
    }
3015
    pLogicCond->node.resType.type = TSDB_DATA_TYPE_BOOL;
470,977✔
3016
    pLogicCond->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes;
470,977✔
3017
    pLogicCond->condType = LOGIC_COND_TYPE_AND;
470,977✔
3018
    pLogicCond->pParameterList = *pSrc;
470,977✔
3019
    *pDst = (SNode*)pLogicCond;
470,977✔
3020
  }
3021
  *pSrc = NULL;
600,250✔
3022

3023
  return TSDB_CODE_SUCCESS;
600,250✔
3024
}
3025

3026
const char* dataOrderStr(EDataOrderLevel order) {
×
3027
  switch (order) {
×
3028
    case DATA_ORDER_LEVEL_NONE:
×
3029
      return "no order required";
×
3030
    case DATA_ORDER_LEVEL_IN_BLOCK:
×
3031
      return "in-datablock order";
×
3032
    case DATA_ORDER_LEVEL_IN_GROUP:
×
3033
      return "in-group order";
×
3034
    case DATA_ORDER_LEVEL_GLOBAL:
×
3035
      return "global order";
×
3036
    default:
×
3037
      break;
×
3038
  }
3039
  return "unknown";
×
3040
}
3041

3042
int32_t nodesMakeValueNodeFromString(char* literal, SValueNode** ppValNode) {
19✔
3043
  int32_t     lenStr = strlen(literal);
19✔
3044
  SValueNode* pValNode = NULL;
19✔
3045
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
19✔
3046
  if (pValNode) {
19!
3047
    pValNode->node.resType.type = TSDB_DATA_TYPE_VARCHAR;
19✔
3048
    pValNode->node.resType.bytes = lenStr + VARSTR_HEADER_SIZE;
19✔
3049
    char* p = taosMemoryMalloc(lenStr + 1 + VARSTR_HEADER_SIZE);
19!
3050
    if (p == NULL) {
19!
3051
      return terrno;
×
3052
    }
3053
    varDataSetLen(p, lenStr);
19✔
3054
    memcpy(varDataVal(p), literal, lenStr + 1);
19✔
3055
    pValNode->datum.p = p;
19✔
3056
    pValNode->literal = tstrdup(literal);
19✔
3057
    pValNode->translate = true;
19✔
3058
    pValNode->isNull = false;
19✔
3059
    *ppValNode = pValNode;
19✔
3060
  }
3061
  return code;
19✔
3062
}
3063

3064
int32_t nodesMakeValueNodeFromBool(bool b, SValueNode** ppValNode) {
×
3065
  SValueNode* pValNode = NULL;
×
3066
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
×
3067
  if (TSDB_CODE_SUCCESS == code) {
×
3068
    pValNode->node.resType.type = TSDB_DATA_TYPE_BOOL;
×
3069
    pValNode->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes;
×
3070
    code = nodesSetValueNodeValue(pValNode, &b);
×
3071
    if (TSDB_CODE_SUCCESS == code) {
×
3072
      pValNode->translate = true;
×
3073
      pValNode->isNull = false;
×
3074
      *ppValNode = pValNode;
×
3075
    } else {
3076
      nodesDestroyNode((SNode*)pValNode);
×
3077
    }
3078
  }
3079
  return code;
×
3080
}
3081

3082
int32_t nodesMakeValueNodeFromInt32(int32_t value, SNode** ppNode) {
56✔
3083
  SValueNode* pValNode = NULL;
56✔
3084
  int32_t     code = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&pValNode);
56✔
3085
  if (TSDB_CODE_SUCCESS == code) {
56!
3086
    pValNode->node.resType.type = TSDB_DATA_TYPE_INT;
56✔
3087
    pValNode->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_INT].bytes;
56✔
3088
    code = nodesSetValueNodeValue(pValNode, &value);
56✔
3089
    if (TSDB_CODE_SUCCESS == code) {
56!
3090
      pValNode->translate = true;
56✔
3091
      pValNode->isNull = false;
56✔
3092
      *ppNode = (SNode*)pValNode;
56✔
3093
    } else {
3094
      nodesDestroyNode((SNode*)pValNode);
×
3095
    }
3096
  }
3097
  return code;
56✔
3098
}
3099

3100
bool nodesIsStar(SNode* pNode) {
2,778,412✔
3101
  return (QUERY_NODE_COLUMN == nodeType(pNode)) && ('\0' == ((SColumnNode*)pNode)->tableAlias[0]) &&
2,932,831✔
3102
         (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
154,419✔
3103
}
3104

3105
bool nodesIsTableStar(SNode* pNode) {
2,618,713✔
3106
  return (QUERY_NODE_COLUMN == nodeType(pNode)) && ('\0' != ((SColumnNode*)pNode)->tableAlias[0]) &&
3,551,455✔
3107
         (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
932,742✔
3108
}
3109

3110
void nodesSortList(SNodeList** pList, int32_t (*comp)(SNode* pNode1, SNode* pNode2)) {
245✔
3111
  if ((*pList)->length == 1) return;
245✔
3112

3113
  uint32_t   inSize = 1;
229✔
3114
  SListCell* pHead = (*pList)->pHead;
229✔
3115
  while (1) {
382✔
3116
    SListCell* p = pHead;
611✔
3117
    pHead = NULL;
611✔
3118
    SListCell* pTail = NULL;
611✔
3119

3120
    uint32_t nMerges = 0;
611✔
3121
    while (p) {
50,397✔
3122
      ++nMerges;
49,786✔
3123
      SListCell* q = p;
49,786✔
3124
      uint32_t   pSize = 0;
49,786✔
3125
      for (uint32_t i = 0; i < inSize; ++i) {
345,462✔
3126
        ++pSize;
295,846✔
3127
        q = q->pNext;
295,846✔
3128
        if (!q) {
295,846✔
3129
          break;
170✔
3130
        }
3131
      }
3132

3133
      uint32_t qSize = inSize;
49,786✔
3134

3135
      while (pSize > 0 || (qSize > 0 && q)) {
639,281✔
3136
        SListCell* pCell;
3137
        if (pSize == 0) {
589,495✔
3138
          pCell = q;
91,478✔
3139
          q = q->pNext;
91,478✔
3140
          --qSize;
91,478✔
3141
        } else if (qSize == 0 || !q) {
498,017✔
3142
          pCell = p;
18,144✔
3143
          p = p->pNext;
18,144✔
3144
          --pSize;
18,144✔
3145
        } else if (comp(q->pNode, p->pNode) >= 0) {
479,873✔
3146
          pCell = p;
277,702✔
3147
          p = p->pNext;
277,702✔
3148
          --pSize;
277,702✔
3149
        } else {
3150
          pCell = q;
202,171✔
3151
          q = q->pNext;
202,171✔
3152
          --qSize;
202,171✔
3153
        }
3154

3155
        if (pTail) {
589,495✔
3156
          pTail->pNext = pCell;
588,884✔
3157
          pCell->pPrev = pTail;
588,884✔
3158
        } else {
3159
          pHead = pCell;
611✔
3160
          pHead->pPrev = NULL;
611✔
3161
        }
3162
        pTail = pCell;
589,495✔
3163
      }
3164
      p = q;
49,786✔
3165
    }
3166
    pTail->pNext = NULL;
611✔
3167

3168
    if (nMerges <= 1) {
611✔
3169
      (*pList)->pHead = pHead;
229✔
3170
      (*pList)->pTail = pTail;
229✔
3171
      return;
229✔
3172
    }
3173
    inSize *= 2;
382✔
3174
  }
3175
}
3176

3177
static SNode* nodesListFindNode(SNodeList* pList, SNode* pNode) {
3,857✔
3178
  SNode* pFound = NULL;
3,857✔
3179
  FOREACH(pFound, pList) {
8,700!
3180
    if (nodesEqualNode(pFound, pNode)) {
5,337✔
3181
      break;
494✔
3182
    }
3183
  }
3184
  return pFound;
3,857✔
3185
}
3186

3187
int32_t nodesListDeduplicate(SNodeList** ppList) {
149,680✔
3188
  if (!ppList || LIST_LENGTH(*ppList) <= 1) return TSDB_CODE_SUCCESS;
149,680!
3189
  if (LIST_LENGTH(*ppList) == 2) {
2,472!
3190
    SNode* pNode1 = nodesListGetNode(*ppList, 0);
1,512✔
3191
    SNode* pNode2 = nodesListGetNode(*ppList, 1);
1,512✔
3192
    if (nodesEqualNode(pNode1, pNode2)) {
1,512✔
3193
      SListCell* pCell = nodesListGetCell(*ppList, 1);
9✔
3194
      (void)nodesListErase(*ppList, pCell);
9✔
3195
    }
3196
    return TSDB_CODE_SUCCESS;
1,512✔
3197
  }
3198
  SNodeList* pTmp = NULL;
960✔
3199
  int32_t    code = nodesMakeList(&pTmp);
960✔
3200
  if (TSDB_CODE_SUCCESS == code) {
960!
3201
    SNode* pNode = NULL;
960✔
3202
    FOREACH(pNode, *ppList) {
4,817!
3203
      SNode* pFound = nodesListFindNode(pTmp, pNode);
3,857✔
3204
      if (NULL == pFound) {
3,857✔
3205
        code = nodesCloneNode(pNode, &pFound);
3,363✔
3206
        if (TSDB_CODE_SUCCESS == code) code = nodesListStrictAppend(pTmp, pFound);
3,363!
3207
        if (TSDB_CODE_SUCCESS != code) break;
3,363!
3208
      }
3209
    }
3210
  }
3211
  if (TSDB_CODE_SUCCESS == code) {
960!
3212
    nodesDestroyList(*ppList);
960✔
3213
    *ppList = pTmp;
960✔
3214
  } else {
3215
    nodesDestroyList(pTmp);
×
3216
  }
3217
  return code;
960✔
3218
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc