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

taosdata / TDengine / #5039

29 Apr 2026 11:44AM UTC coverage: 73.153% (+0.002%) from 73.151%
#5039

push

travis-ci

web-flow
feat(statewindow): support multi columns (#35136)

1566 of 1828 new or added lines in 18 files covered. (85.67%)

7270 existing lines in 141 files now uncovered.

277497 of 379338 relevant lines covered (73.15%)

133293066.15 hits per line

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

79.37
/source/common/src/msg/streamMsg.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 "streamMsg.h"
17
#include "taos.h"
18
#include "tarray.h"
19
#include "tdatablock.h"
20
#include "thash.h"
21
#include "tlist.h"
22
#include "tmsg.h"
23
#include "os.h"
24
#include "tcommon.h"
25
#include "tsimplehash.h"
26

27
int32_t tEncodeSStreamMgmtReq(SEncoder* pEncoder, const SStreamMgmtReq* pReq) {
134,836✔
28
  int32_t code = 0;
134,836✔
29
  int32_t lino = 0;
134,836✔
30
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->reqId));
269,672✔
31
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->type));
269,672✔
32
  switch (pReq->type) {
134,836✔
33
    case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER: {
129,732✔
34
      if (pReq->cont.pReqs) {
129,732✔
35
        int32_t num = taosArrayGetSize(pReq->cont.pReqs);
129,732✔
36
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, num));
129,732✔
37
        for (int32_t i = 0; i < num; ++i) {
512,380✔
38
          SStreamDbTableName* pName = taosArrayGet(pReq->cont.pReqs, i);
382,648✔
39
          TAOS_CHECK_EXIT(tEncodeCStrWithLen(pEncoder, pName->dbFName, strlen(pName->dbFName) + 1));
765,296✔
40
          TAOS_CHECK_EXIT(tEncodeCStrWithLen(pEncoder, pName->tbName, strlen(pName->tbName) + 1));
765,296✔
41
        }
42
      } else {
43
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
×
44
      }
45
      break;
129,732✔
46
    }
47
    case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER: {
5,104✔
48
      if (pReq->cont.pReqs) {
5,104✔
49
        int32_t num = taosArrayGetSize(pReq->cont.pReqs);
5,104✔
50
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, num));
5,104✔
51
        for (int32_t i = 0; i < num; ++i) {
10,208✔
52
          SStreamOReaderDeployReq* pDeploy = taosArrayGet(pReq->cont.pReqs, i);
5,104✔
53
          int32_t vgIdNum = taosArrayGetSize(pDeploy->vgIds);
5,104✔
54
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pDeploy->execId));
10,208✔
55
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pDeploy->uid));
10,208✔
56
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgIdNum));
5,104✔
57
          for (int32_t n = 0; n < vgIdNum; ++n) {
10,208✔
58
            TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *(int32_t*)taosArrayGet(pDeploy->vgIds, n)));
10,208✔
59
          }
60
        }
61
      } else {
62
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
×
63
      }
64
      break;
5,104✔
65
    }
66
    default:
×
67
      code = TSDB_CODE_STREAM_INVALID_TASK_TYPE;
×
68
      break;
×
69
  }
70

71
_exit:
134,836✔
72

73
  return code;
134,836✔
74
}
75

76
void tFreeRunnerOReaderDeployReq(void* param) {
7,656✔
77
  SStreamOReaderDeployReq* pReq = (SStreamOReaderDeployReq*)param;
7,656✔
78
  if (pReq) {
7,656✔
79
    taosArrayDestroy(pReq->vgIds);
7,656✔
80
  }
81
}
7,656✔
82

83
void tFreeSStreamMgmtReq(SStreamMgmtReq* pReq) {
269,672✔
84
  if (NULL == pReq) {
269,672✔
85
    return;
67,418✔
86
  }
87

88
  switch (pReq->type) {
202,254✔
89
    case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER:
194,598✔
90
      taosArrayDestroy(pReq->cont.pReqs);
194,598✔
91
      break;
194,598✔
92
    case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER:
7,656✔
93
      taosArrayDestroyEx(pReq->cont.pReqs, tFreeRunnerOReaderDeployReq);
7,656✔
94
      break;
7,656✔
95
    default:
×
96
      break;
×
97
  }
98
}
99

100

101
int32_t tCloneSStreamMgmtReq(SStreamMgmtReq* pSrc, SStreamMgmtReq** ppDst) {
67,418✔
102
  *ppDst = NULL;
67,418✔
103
  
104
  if (NULL == pSrc) {
67,418✔
105
    return TSDB_CODE_SUCCESS;
×
106
  }
107

108
  int32_t code = 0, lino = 0;
67,418✔
109
  *ppDst = taosMemoryCalloc(1, sizeof(SStreamMgmtReq));
67,418✔
110
  TSDB_CHECK_NULL(*ppDst, code, lino, _exit, terrno);
67,418✔
111

112
  memcpy(*ppDst, pSrc, sizeof(*pSrc));
67,418✔
113
  if (pSrc->cont.pReqs) {
67,418✔
114
    switch (pSrc->type) {
67,418✔
115
      case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER:
64,866✔
116
        (*ppDst)->cont.pReqs = taosArrayDup(pSrc->cont.pReqs, NULL);
64,866✔
117
        TSDB_CHECK_NULL((*ppDst)->cont.pReqs, code, lino, _exit, terrno);
64,866✔
118
        break;
64,866✔
119
      case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER: {
2,552✔
120
        int32_t reqNum = taosArrayGetSize(pSrc->cont.pReqs);
2,552✔
121
        (*ppDst)->cont.pReqs = taosArrayInit_s(sizeof(SStreamOReaderDeployReq), reqNum);
2,552✔
122
        TSDB_CHECK_NULL((*ppDst)->cont.pReqs, code, lino, _exit, terrno);
2,552✔
123
        for (int32_t i = 0; i < reqNum; ++i) {
5,104✔
124
          SStreamOReaderDeployReq* pNew = taosArrayGet((*ppDst)->cont.pReqs, i);
2,552✔
125
          SStreamOReaderDeployReq* pReq = taosArrayGet(pSrc->cont.pReqs, i);
2,552✔
126
          pNew->vgIds = taosArrayDup(pReq->vgIds, NULL);
2,552✔
127
          TSDB_CHECK_NULL(pNew->vgIds, code, lino, _exit, terrno);
2,552✔
128
          pNew->execId = pReq->execId;
2,552✔
129
          pNew->uid = pReq->uid;
2,552✔
130
        }
131
        break;
2,552✔
132
      }  
133
      default:
×
134
        break;
×
135
    }
136
  }
137
  
138
_exit:
×
139

140
  if (code) {
67,418✔
141
    tFreeSStreamMgmtReq(*ppDst);
×
142
    taosMemoryFreeClear(*ppDst);
×
143
    uError("%s failed at line %d since %s", __FUNCTION__, lino, tstrerror(code));
×
144
  }
145
  
146
  return code;
67,418✔
147
}
148

149

150
int32_t tDecodeSStreamMgmtReq(SDecoder* pDecoder, SStreamMgmtReq* pReq) {
67,418✔
151
  int32_t code = 0;
67,418✔
152
  int32_t lino = 0;
67,418✔
153

154
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->reqId));
134,836✔
155
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t*)&pReq->type));
134,836✔
156
  switch (pReq->type) {
67,418✔
157
    case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER: {
64,866✔
158
      int32_t num = 0;
64,866✔
159
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &num));
64,866✔
160
      if (num > 0) {
64,866✔
161
        pReq->cont.pReqs = taosArrayInit(num, sizeof(SStreamDbTableName));
64,866✔
162
        TSDB_CHECK_NULL(pReq->cont.pReqs, code, lino, _exit, terrno);
64,866✔
163
        for (int32_t i = 0; i < num; ++i) {
256,190✔
164
          SStreamDbTableName* p = taosArrayReserve(pReq->cont.pReqs, 1);
191,324✔
165
          TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, p->dbFName));
191,324✔
166
          TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, p->tbName));
191,324✔
167
        }
168
      }
169
      break;
64,866✔
170
    }
171
    case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER: {
2,552✔
172
      int32_t num = 0, vgIdNum = 0;
2,552✔
173
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &num));
2,552✔
174
      if (num > 0) {
2,552✔
175
        pReq->cont.pReqs = taosArrayInit_s(sizeof(SStreamOReaderDeployReq), num);
2,552✔
176
        TSDB_CHECK_NULL(pReq->cont.pReqs, code, lino, _exit, terrno);
2,552✔
177
        for (int32_t i = 0; i < num; ++i) {
5,104✔
178
          SStreamOReaderDeployReq* p = taosArrayGet(pReq->cont.pReqs, i);
2,552✔
179
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &p->execId));
5,104✔
180
          TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &p->uid));
5,104✔
181
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgIdNum));
2,552✔
182
          if (vgIdNum > 0) {
2,552✔
183
            p->vgIds = taosArrayInit_s(sizeof(int32_t), vgIdNum);
2,552✔
184
            TSDB_CHECK_NULL(p->vgIds, code, lino, _exit, terrno);
2,552✔
185
          }
186
          for (int32_t n = 0; n < vgIdNum; ++n) {
5,104✔
187
            int32_t* vgId = taosArrayGet(p->vgIds, n);
2,552✔
188
            TAOS_CHECK_EXIT(tDecodeI32(pDecoder, vgId));
2,552✔
189
          }
190
        }
191
      }
192
      break;
2,552✔
193
    }
194
    default:
×
195
      code = TSDB_CODE_STREAM_INVALID_TASK_TYPE;
×
196
      break;
×
197
  }
198

199
_exit:
67,418✔
200

201
  return code;  
67,418✔
202
}
203

204
int32_t tEncodeStreamTask(SEncoder* pEncoder, const SStreamTask* pTask) {
111,611,124✔
205
  int32_t code = 0;
111,611,124✔
206
  int32_t lino;
207

208
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->type));
223,222,248✔
209
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->streamId));
223,222,248✔
210
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->taskId));
223,222,248✔
211

212
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->flags));
223,222,248✔
213
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->seriousId));
223,222,248✔
214
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->deployId));
223,222,248✔
215
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->nodeId));
223,222,248✔
216
  // SKIP SESSIONID
217
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->taskIdx));
223,222,248✔
218
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->status));
223,222,248✔
219
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->detailStatus));
223,222,248✔
220
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->errorCode));
223,222,248✔
221
  if (pTask->pMgmtReq) {
111,611,124✔
222
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 1));
134,836✔
223
    TAOS_CHECK_EXIT(tEncodeSStreamMgmtReq(pEncoder, pTask->pMgmtReq));
134,836✔
224
  } else {
225
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
111,476,288✔
226
  }
227

228
_exit:
111,476,288✔
229

230
  return code;
111,611,124✔
231
}
232

233

234
int32_t tDecodeStreamTask(SDecoder* pDecoder, SStreamTask* pTask) {
53,959,873✔
235
  int32_t code = 0;
53,959,873✔
236
  int32_t lino;
237

238
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t*)&pTask->type));
107,919,746✔
239
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pTask->streamId));
107,919,746✔
240
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pTask->taskId));
107,919,746✔
241
  
242
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pTask->flags));
107,919,746✔
243
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pTask->seriousId));
107,919,746✔
244
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->deployId));
107,919,746✔
245
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->nodeId));
107,919,746✔
246
  // SKIP SESSIONID
247
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->taskIdx));
107,919,746✔
248
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t*)&pTask->status));
107,919,746✔
249
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->detailStatus));
107,919,746✔
250
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->errorCode));
107,919,746✔
251
  int32_t req = 0;
53,959,873✔
252
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &req));
53,959,873✔
253
  if (req) {
53,959,873✔
254
    pTask->pMgmtReq = taosMemoryCalloc(1, sizeof(SStreamMgmtReq));
67,418✔
255
    TSDB_CHECK_NULL(pTask->pMgmtReq, code, lino, _exit, terrno);
67,418✔
256
    TAOS_CHECK_EXIT(tDecodeSStreamMgmtReq(pDecoder, pTask->pMgmtReq));
67,418✔
257
  }
258

259
_exit:
53,959,873✔
260

261
  return code;
53,959,873✔
262
}
263

264
int32_t tEncodeSSTriggerRecalcProgress(SEncoder* pEncoder, const SSTriggerRecalcProgress* pProgress) {
×
265
  int32_t code = 0;
×
266
  int32_t lino;
267

268
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pProgress->recalcId));
×
269
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pProgress->progress));
×
270
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pProgress->start));
×
271
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pProgress->end));
×
272

273
_exit:
×
274

275
  return code;
×
276
}
277

278
int32_t tDecodeSSTriggerRecalcProgress(SDecoder* pDecoder, SSTriggerRecalcProgress* pProgress) {
×
279
  int32_t code = 0;
×
280
  int32_t lino;
281

282
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pProgress->recalcId));
×
283
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pProgress->progress));
×
284
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pProgress->start));
×
285
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pProgress->end));
×
286

287
_exit:
×
288

289
  return code;
×
290
}
291

292

293
int32_t tEncodeSSTriggerRuntimeStatus(SEncoder* pEncoder, const SSTriggerRuntimeStatus* pStatus) {
6,719,814✔
294
  int32_t code = 0;
6,719,814✔
295
  int32_t lino;
296

297
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->autoRecalcNum));
13,439,628✔
298
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->realtimeSessionNum));
13,439,628✔
299
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->historySessionNum));
13,439,628✔
300
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->recalcSessionNum));
13,439,628✔
301
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->histroyProgress));
13,439,628✔
302

303
  int32_t recalcNum = (int32_t)taosArrayGetSize(pStatus->userRecalcs);
6,719,814✔
304
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, recalcNum));
6,719,814✔
305
  for (int32_t i = 0; i < recalcNum; ++i) {
6,719,814✔
306
    SSTriggerRecalcProgress* pProgress = taosArrayGet(pStatus->userRecalcs, i);
×
307
    TAOS_CHECK_EXIT(tEncodeSSTriggerRecalcProgress(pEncoder, pProgress));
×
308
  }
309

310
_exit:
6,719,814✔
311

312
  return code;
6,719,814✔
313
}
314

315
int32_t tDecodeSSTriggerRuntimeStatus(SDecoder* pDecoder, SSTriggerRuntimeStatus* pStatus) {
3,219,571✔
316
  int32_t code = 0;
3,219,571✔
317
  int32_t lino;
318

319
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->autoRecalcNum));
6,439,142✔
320
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->realtimeSessionNum));
6,439,142✔
321
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->historySessionNum));
6,439,142✔
322
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->realtimeSessionNum));
6,439,142✔
323
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->histroyProgress));
6,439,142✔
324

325
  int32_t recalcNum = 0;
3,219,571✔
326
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &recalcNum));
3,219,571✔
327
  if (recalcNum > 0) {
3,219,571✔
328
    pStatus->userRecalcs = taosArrayInit_s(sizeof(SSTriggerRecalcProgress), recalcNum);
×
329
    if (NULL == pStatus->userRecalcs) {
×
330
      code = terrno;
×
331
      goto _exit;
×
332
    }
333
  }
334

335
  for (int32_t i = 0; i < recalcNum; ++i) {
3,219,571✔
336
    SSTriggerRecalcProgress* pProgress = taosArrayGet(pStatus->userRecalcs, i);
×
337
    TAOS_CHECK_EXIT(tDecodeSSTriggerRecalcProgress(pDecoder, pProgress));
×
338
  }
339

340
_exit:
3,219,571✔
341

342
  return code;
3,219,571✔
343
}
344

345

346
int32_t tEncodeStreamHbMsg(SEncoder* pEncoder, const SStreamHbMsg* pReq) {
41,636,356✔
347
  int32_t code = 0;
41,636,356✔
348
  int32_t lino;
349

350
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
41,636,356✔
351
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->dnodeId));
83,272,712✔
352
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->streamGId));
83,272,712✔
353
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->snodeId));
83,272,712✔
354
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->runnerThreadNum));
83,272,712✔
355

356
  int32_t vgLeaderNum = taosArrayGetSize(pReq->pVgLeaders);
41,636,356✔
357
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgLeaderNum));
41,636,356✔
358
  for (int32_t i = 0; i < vgLeaderNum; ++i) {
167,259,282✔
359
    int32_t* vgId = taosArrayGet(pReq->pVgLeaders, i);
125,622,926✔
360
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *vgId));
251,245,852✔
361
  }
362
  
363
  int32_t statusNum = taosArrayGetSize(pReq->pStreamStatus);
41,636,356✔
364
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, statusNum));
41,636,356✔
365
  for (int32_t i = 0; i < statusNum; ++i) {
148,616,130✔
366
    SStmTaskStatusMsg* pStatus = taosArrayGet(pReq->pStreamStatus, i);
106,979,774✔
367
    TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)pStatus));
106,979,774✔
368
  }
369

370
  int32_t reqNum = taosArrayGetSize(pReq->pStreamReq);
41,636,356✔
371
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, reqNum));
41,636,356✔
372
  for (int32_t i = 0; i < reqNum; ++i) {
41,771,192✔
373
    int32_t* idx = taosArrayGet(pReq->pStreamReq, i);
134,836✔
374
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *idx));
269,672✔
375
  }
376

377
  int32_t triggerNum = taosArrayGetSize(pReq->pTriggerStatus);
41,636,356✔
378
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, triggerNum));
41,636,356✔
379
  for (int32_t i = 0; i < triggerNum; ++i) {
48,356,170✔
380
    SSTriggerRuntimeStatus* pTrigger = taosArrayGet(pReq->pTriggerStatus, i);
6,719,814✔
381
    TAOS_CHECK_EXIT(tEncodeSSTriggerRuntimeStatus(pEncoder, pTrigger));
6,719,814✔
382
  }
383
  
384
  tEndEncode(pEncoder);
41,636,356✔
385

386
_exit:
41,636,356✔
387
  if (code) {
41,636,356✔
388
    return code;
×
389
  } else {
390
    return pEncoder->pos;
41,636,356✔
391
  }
392
}
393

394
int32_t tDecodeStreamHbMsg(SDecoder* pDecoder, SStreamHbMsg* pReq) {
20,017,237✔
395
  int32_t code = 0;
20,017,237✔
396
  int32_t lino;
397

398
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
20,017,237✔
399
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->dnodeId));
40,034,474✔
400
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->streamGId));
40,034,474✔
401
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->snodeId));
40,034,474✔
402
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->runnerThreadNum));
40,034,474✔
403

404
  int32_t vgLearderNum = 0;
20,017,237✔
405
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgLearderNum));
20,017,237✔
406
  if (vgLearderNum > 0) {
20,017,237✔
407
    pReq->pVgLeaders = taosArrayInit(vgLearderNum, sizeof(int32_t));
15,608,576✔
408
    if (NULL == pReq->pVgLeaders) {
15,608,576✔
409
      code = terrno;
×
410
      goto _exit;
×
411
    }
412
  }
413
  for (int32_t i = 0; i < vgLearderNum; ++i) {
81,352,712✔
414
    int32_t vgId = 0;
61,335,475✔
415
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgId));
61,335,475✔
416
    if (NULL == taosArrayPush(pReq->pVgLeaders, &vgId)) {
122,670,950✔
417
      code = terrno;
×
418
      goto _exit;
×
419
    }
420
  }
421

422

423
  int32_t statusNum = 0;
20,017,237✔
424
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &statusNum));
20,017,237✔
425
  if (statusNum > 0) {
20,017,237✔
426
    pReq->pStreamStatus = taosArrayInit_s(sizeof(SStmTaskStatusMsg), statusNum);
1,590,612✔
427
    if (NULL == pReq->pStreamStatus) {
1,590,612✔
428
      code = terrno;
×
429
      goto _exit;
×
430
    }
431
  }
432
  for (int32_t i = 0; i < statusNum; ++i) {
71,690,403✔
433
    SStmTaskStatusMsg* pTask = taosArrayGet(pReq->pStreamStatus, i);
51,673,166✔
434
    if (NULL == pTask) {
51,673,166✔
435
      code = terrno;
×
436
      goto _exit;
×
437
    }
438
    TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)pTask));
51,673,166✔
439
  }
440

441

442
  int32_t reqNum = 0;
20,017,237✔
443
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &reqNum));
20,017,237✔
444
  if (reqNum > 0) {
20,017,237✔
445
    pReq->pStreamReq = taosArrayInit_s(sizeof(int32_t), reqNum);
18,185✔
446
    if (NULL == pReq->pStreamReq) {
18,185✔
447
      code = terrno;
×
448
      goto _exit;
×
449
    }
450
  }
451
  for (int32_t i = 0; i < reqNum; ++i) {
20,084,655✔
452
    int32_t* pIdx = taosArrayGet(pReq->pStreamReq, i);
67,418✔
453
    if (NULL == pIdx) {
67,418✔
454
      code = terrno;
×
455
      goto _exit;
×
456
    }
457
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, pIdx));
67,418✔
458
  }
459

460

461
  int32_t triggerNum = 0;
20,017,237✔
462
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &triggerNum));
20,017,237✔
463
  if (triggerNum > 0) {
20,017,237✔
464
    pReq->pTriggerStatus = taosArrayInit_s(sizeof(SSTriggerRuntimeStatus), triggerNum);
744,624✔
465
    if (NULL == pReq->pTriggerStatus) {
744,624✔
466
      code = terrno;
×
467
      goto _exit;
×
468
    }
469
  }
470
  for (int32_t i = 0; i < triggerNum; ++i) {
23,236,808✔
471
    SSTriggerRuntimeStatus* pStatus = taosArrayGet(pReq->pTriggerStatus, i);
3,219,571✔
472
    if (NULL == pStatus) {
3,219,571✔
473
      code = terrno;
×
474
      goto _exit;
×
475
    }
476
    TAOS_CHECK_EXIT(tDecodeSSTriggerRuntimeStatus(pDecoder, pStatus));
3,219,571✔
477
  }
478

479
  
480
  tEndDecode(pDecoder);
20,017,237✔
481

482
_exit:
20,017,237✔
483
  return code;
20,017,237✔
484
}
485

486
void tFreeSSTriggerRuntimeStatus(void* param) {
6,579,478✔
487
  SSTriggerRuntimeStatus* pStatus = (SSTriggerRuntimeStatus*)param;
6,579,478✔
488
  if (NULL == pStatus) {
6,579,478✔
489
    return;
×
490
  }
491
  taosArrayDestroy(pStatus->userRecalcs);
6,579,478✔
492
}
493

494
void tCleanupStreamHbMsg(SStreamHbMsg* pMsg, bool deepClean) {
120,020,829✔
495
  if (pMsg == NULL) {
120,020,829✔
496
    return;
×
497
  }
498

499
  taosArrayDestroy(pMsg->pVgLeaders);
120,020,829✔
500
  if (deepClean) {
120,020,829✔
501
    int32_t reqNum = taosArrayGetSize(pMsg->pStreamReq);
120,020,829✔
502
    for (int32_t i = 0; i < reqNum; ++i) {
120,155,665✔
503
      int32_t* idx = taosArrayGet(pMsg->pStreamReq, i);
134,836✔
504
      SStmTaskStatusMsg* pTask = taosArrayGet(pMsg->pStreamStatus, *idx);
134,836✔
505
      if (NULL == pTask) {
134,836✔
506
        continue;
×
507
      }
508

509
      tFreeSStreamMgmtReq(pTask->pMgmtReq);
134,836✔
510
      taosMemoryFree(pTask->pMgmtReq);
134,836✔
511
    }
512
  }
513
  taosArrayDestroy(pMsg->pStreamReq);
120,020,829✔
514
  taosArrayDestroy(pMsg->pStreamStatus);
120,020,829✔
515
  taosArrayDestroyEx(pMsg->pTriggerStatus, tFreeSSTriggerRuntimeStatus);
120,020,829✔
516
}
517

518
int32_t tEncodeSStreamReaderDeployFromTrigger(SEncoder* pEncoder, const SStreamReaderDeployFromTrigger* pMsg) {
682,228✔
519
  int32_t code = 0;
682,228✔
520
  int32_t lino;
521

522
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, (const uint8_t*)pMsg->triggerTblName, pMsg->triggerTblName == NULL ? 0 : (int32_t)strlen(pMsg->triggerTblName) + 1));
1,364,456✔
523
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->triggerTblUid));
1,364,456✔
524
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->triggerTblSuid));
1,364,456✔
525
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerTblType));
1,364,456✔
526
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->isTriggerTblVirt));
1,364,456✔
527
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->deleteReCalc));
1,364,456✔
528
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->deleteOutTbl));
1,364,456✔
529
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->partitionCols, pMsg->partitionCols == NULL ? 0 : (int32_t)strlen(pMsg->partitionCols) + 1));
1,364,456✔
530
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerCols, pMsg->triggerCols == NULL ? 0 : (int32_t)strlen(pMsg->triggerCols) + 1));
1,364,456✔
531
  //TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerPrevFilter, pMsg->triggerPrevFilter == NULL ? 0 : (int32_t)strlen(pMsg->triggerPrevFilter) + 1));
532
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerScanPlan, pMsg->triggerScanPlan == NULL ? 0 : (int32_t)strlen(pMsg->triggerScanPlan) + 1));
1,364,456✔
533
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->calcCacheScanPlan, pMsg->calcCacheScanPlan == NULL ? 0 : (int32_t)strlen(pMsg->calcCacheScanPlan) + 1));
1,364,456✔
534

535
_exit:
682,228✔
536

537
  return code;
682,228✔
538
}
539

540
int32_t tEncodeSStreamReaderDeployFromCalc(SEncoder* pEncoder, const SStreamReaderDeployFromCalc* pMsg) {
806,464✔
541
  int32_t code = 0;
806,464✔
542
  int32_t lino;
543

544
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->execReplica));
1,612,928✔
545
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->calcScanPlan, pMsg->calcScanPlan == NULL ? 0 : (int32_t)strlen(pMsg->calcScanPlan) + 1));
1,612,928✔
546

547
_exit:
806,464✔
548

549
  return code;
806,464✔
550
}
551

552

553
int32_t tEncodeSStreamReaderDeployMsg(SEncoder* pEncoder, const SStreamReaderDeployMsg* pMsg) {
1,488,692✔
554
  int32_t code = 0;
1,488,692✔
555
  int32_t lino;
556

557
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerReader));
2,977,384✔
558
  if (pMsg->triggerReader) {
1,488,692✔
559
    TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployFromTrigger(pEncoder, &pMsg->msg.trigger));
682,228✔
560
  } else {
561
    TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployFromCalc(pEncoder, &pMsg->msg.calc));
806,464✔
562
  }
563
  
564
_exit:
806,464✔
565

566
  return code;
1,488,692✔
567
}
568

569
int32_t tEncodeSStreamTaskAddr(SEncoder* pEncoder, const SStreamTaskAddr* pMsg) {
2,059,866✔
570
  int32_t code = 0;
2,059,866✔
571
  int32_t lino;
572

573
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->taskId));
4,119,732✔
574
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->nodeId));
4,119,732✔
575
  TAOS_CHECK_EXIT(tEncodeSEpSet(pEncoder, &pMsg->epset));
2,059,866✔
576

577
_exit:
2,059,866✔
578

579
  return code;
2,059,866✔
580
}
581

582
int32_t tEncodeSStreamRunnerTarget(SEncoder* pEncoder, const SStreamRunnerTarget* pMsg) {
1,352,184✔
583
  int32_t code = 0;
1,352,184✔
584
  int32_t lino;
585

586
  TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, &pMsg->addr));
1,352,184✔
587
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->execReplica));
2,704,368✔
588

589
_exit:
1,352,184✔
590

591
  return code;
1,352,184✔
592
}
593

594

595
int32_t tEncodeSStreamTriggerDeployMsg(SEncoder* pEncoder, const SStreamTriggerDeployMsg* pMsg) {
457,566✔
596
  int32_t code = 0;
457,566✔
597
  int32_t lino;
598

599
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerType));
915,132✔
600
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->igDisorder));
915,132✔
601
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->fillHistory));
915,132✔
602
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->fillHistoryFirst));
915,132✔
603
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->lowLatencyCalc));
915,132✔
604
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->igNoDataTrigger));
915,132✔
605
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->enableMultiGroupCalc));
915,132✔
606
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->isTriggerTblVirt));
915,132✔
607
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerHasPF));
915,132✔
608
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->isTriggerTblStb));
915,132✔
609
  int32_t partitionColsLen = pMsg->partitionCols == NULL ? 0 : (int32_t)strlen((char*)pMsg->partitionCols) + 1;
457,566✔
610
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->partitionCols, partitionColsLen));
915,132✔
611

612
  int32_t addrSize = (int32_t)taosArrayGetSize(pMsg->pNotifyAddrUrls);
457,566✔
613
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, addrSize));
457,566✔
614
  for (int32_t i = 0; i < addrSize; ++i) {
571,590✔
615
    const char *url = taosArrayGetP(pMsg->pNotifyAddrUrls, i);
114,024✔
616
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, url, NULL == url ? 0 : (int32_t)strlen(url) + 1));
228,048✔
617
  }
618
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->notifyEventTypes));
915,132✔
619
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->addOptions));
915,132✔
620
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->notifyHistory));
915,132✔
621

622
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->maxDelay));
915,132✔
623
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->fillHistoryStartTime));
915,132✔
624
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->watermark));
915,132✔
625
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->expiredTime));
915,132✔
626
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->idleTimeoutMs));
915,132✔
627

628
  switch (pMsg->triggerType) {
457,566✔
629
    case WINDOW_TYPE_SESSION: {
17,336✔
630
      // session trigger
631
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->trigger.session.slotId));
34,672✔
632
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.session.sessionVal));
34,672✔
633
      break;
17,336✔
634
    }
635
    case WINDOW_TYPE_STATE: {
167,964✔
636
      /*
637
       * state trigger – always v2 format:
638
       * I16(STATE_WIN_SLOT_SENTINEL_V2) + I32(slotNum)
639
       *   + N*I16(slotId) + ...
640
       */
641
      int32_t slotNum = pMsg->trigger.stateWin.pSlotIds == NULL ?
335,928✔
642
        0 : taosArrayGetSize(pMsg->trigger.stateWin.pSlotIds);
167,964✔
643
      TAOS_CHECK_EXIT(
167,964✔
644
        tEncodeI16(pEncoder, STATE_WIN_SLOT_SENTINEL_V2));
645
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, slotNum));
167,964✔
646
      for (int32_t i = 0; i < slotNum; ++i) {
358,926✔
647
        TAOS_CHECK_EXIT(tEncodeI16(
381,924✔
648
          pEncoder,
649
          *(int16_t*)taosArrayGet(
650
            pMsg->trigger.stateWin.pSlotIds, i)));
651
      }
652
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->trigger.stateWin.extend));
335,928✔
653
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->trigger.stateWin.trueForType));
335,928✔
654
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->trigger.stateWin.trueForCount));
335,928✔
655
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.stateWin.trueForDuration));
335,928✔
656
      int32_t stateWindowZerothLen =
167,964✔
657
          pMsg->trigger.stateWin.zeroth == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.stateWin.zeroth) + 1;
167,964✔
658
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.stateWin.zeroth, stateWindowZerothLen));
335,928✔
659
      int32_t stateWindowExprLen =
167,964✔
660
          pMsg->trigger.stateWin.expr == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.stateWin.expr) + 1;
167,964✔
661
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.stateWin.expr, stateWindowExprLen));
335,928✔
662
      break;
167,964✔
663
    }
664
    case WINDOW_TYPE_INTERVAL: {
154,988✔
665
      // slide trigger
666
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.intervalUnit));
309,976✔
667
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.slidingUnit));
309,976✔
668
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.offsetUnit));
309,976✔
669
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.soffsetUnit));
309,976✔
670
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.precision));
309,976✔
671
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.interval));
309,976✔
672
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.offset));
309,976✔
673
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.sliding));
309,976✔
674
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.soffset));
309,976✔
675
      break;
154,988✔
676
    }
677
    case WINDOW_TYPE_EVENT: {
49,592✔
678
      // event trigger
679
      int32_t eventWindowStartCondLen = pMsg->trigger.event.startCond == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.event.startCond) + 1;
49,592✔
680
      int32_t eventWindowEndCondLen = pMsg->trigger.event.endCond == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.event.endCond) + 1;
49,592✔
681

682
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.event.startCond, eventWindowStartCondLen));
99,184✔
683
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.event.endCond, eventWindowEndCondLen));
99,184✔
684
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->trigger.event.trueForType));
99,184✔
685
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->trigger.event.trueForCount));
99,184✔
686
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.event.trueForDuration));
99,184✔
687
      break;
49,592✔
688
    }
689
    case WINDOW_TYPE_COUNT: {
46,144✔
690
      // count trigger
691
      int32_t countWindowCondColsLen = pMsg->trigger.count.condCols == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.count.condCols) + 1;
46,144✔
692
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.count.condCols, countWindowCondColsLen));
92,288✔
693

694
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.count.countVal));
92,288✔
695
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.count.sliding));
92,288✔
696
      break;
46,144✔
697
    }
698
    case WINDOW_TYPE_PERIOD: {
21,542✔
699
      // period trigger
700
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.period.periodUnit));
43,084✔
701
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.period.offsetUnit));
43,084✔
702
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.period.precision));
43,084✔
703
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.period.period));
43,084✔
704
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.period.offset));
43,084✔
705
      break;
21,542✔
706
    }
UNCOV
707
    default:
×
UNCOV
708
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
709
      break;
×
710
  }
711

712
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->eventTypes));
915,132✔
713
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->placeHolderBitmap));
915,132✔
714
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->calcTsSlotId));
915,132✔
715
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->triTsSlotId));
915,132✔
716
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->calcPkSlotId));
915,132✔
717
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->triPkSlotId));
915,132✔
718
  int32_t triggerPrevFilterLen = (pMsg->triggerPrevFilter == NULL) ? 0 : ((int32_t)strlen(pMsg->triggerPrevFilter) + 1);
457,566✔
719
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerPrevFilter, triggerPrevFilterLen));
915,132✔
720
  int32_t triggerScanPlanLen = (pMsg->triggerScanPlan == NULL) ? 0 : ((int32_t)strlen(pMsg->triggerScanPlan) + 1);
457,566✔
721
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerScanPlan, triggerScanPlanLen));
915,132✔
722
  int32_t calcCacheScanPlanLen = (pMsg->calcCacheScanPlan == NULL) ? 0 : ((int32_t)strlen(pMsg->calcCacheScanPlan) + 1);
457,566✔
723
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->calcCacheScanPlan, calcCacheScanPlanLen));
915,132✔
724

725
  int32_t readerNum = taosArrayGetSize(pMsg->readerList);
457,566✔
726
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
457,566✔
727
  for (int32_t i = 0; i < readerNum; ++i) {
1,011,480✔
728
    SStreamTaskAddr* pAddr = (SStreamTaskAddr*)taosArrayGet(pMsg->readerList, i);
553,914✔
729
    TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, pAddr));
553,914✔
730
  }
731

732
  int32_t runnerNum = taosArrayGetSize(pMsg->runnerList);
457,566✔
733
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
457,566✔
734
  for (int32_t i = 0; i < runnerNum; ++i) {
1,809,750✔
735
    SStreamRunnerTarget* pTarget = (SStreamRunnerTarget*)taosArrayGet(pMsg->runnerList, i);
1,352,184✔
736
    TAOS_CHECK_EXIT(tEncodeSStreamRunnerTarget(pEncoder, pTarget));
1,352,184✔
737
  }
738

739
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->leaderSnodeId));
915,132✔
740
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->streamName, (int32_t)strlen(pMsg->streamName) + 1));
915,132✔
741
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->precision));
915,132✔
742
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->nodelayCreateSubtable));
915,132✔
743

744
_exit:
457,566✔
745

746
  return code;
457,566✔
747
}
748

749

750
int32_t tSerializeSFieldWithOptions(SEncoder* pEncoder, const SFieldWithOptions *pField) {
7,584,424✔
751
  int32_t code = 0;
7,584,424✔
752
  int32_t lino;
753

754
  TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, pField->name));
15,168,848✔
755
  TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pField->type));
15,168,848✔
756
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pField->flags));
15,168,848✔
757
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pField->bytes));
15,168,848✔
758
  TAOS_CHECK_EXIT(tEncodeU32(pEncoder, pField->compress));
15,168,848✔
759
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pField->typeMod));
15,168,848✔
760

761
_exit:
7,584,424✔
762

763
  return code;
7,584,424✔
764
}
765

766

767
int32_t tEncodeSStreamRunnerDeployMsg(SEncoder* pEncoder, const SStreamRunnerDeployMsg* pMsg) {
1,572,146✔
768
  int32_t code = 0;
1,572,146✔
769
  int32_t lino;
770

771
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->execReplica));
3,144,292✔
772
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->streamName, (int32_t)strlen(pMsg->streamName) + 1));
3,144,292✔
773
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->pPlan, NULL == pMsg->pPlan ? 0 : (int32_t)strlen(pMsg->pPlan) + 1));
3,144,292✔
774
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->outDBFName, NULL == pMsg->outDBFName ? 0 : (int32_t)strlen(pMsg->outDBFName) + 1));
3,144,292✔
775
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->outTblName, NULL == pMsg->outTblName ? 0 : (int32_t)strlen(pMsg->outTblName) + 1));
3,144,292✔
776
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->outTblType));
3,144,292✔
777
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->calcNotifyOnly));
3,144,292✔
778
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->topPlan));
3,144,292✔
779

780
  int32_t addrSize = (int32_t)taosArrayGetSize(pMsg->pNotifyAddrUrls);
1,572,146✔
781
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, addrSize));
1,572,146✔
782
  for (int32_t i = 0; i < addrSize; ++i) {
1,893,704✔
783
    const char *url = taosArrayGetP(pMsg->pNotifyAddrUrls, i);
321,558✔
784
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, url, NULL == url ? 0 : (int32_t)strlen(url) + 1));
643,116✔
785
  }
786
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->addOptions));
3,144,292✔
787

788
  int32_t outColNum = (int32_t)taosArrayGetSize(pMsg->outCols);
1,572,146✔
789
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, outColNum));
1,572,146✔
790
  for (int32_t i = 0; i < outColNum; ++i) {
7,980,498✔
791
    SFieldWithOptions *pCol = taosArrayGet(pMsg->outCols, i);
6,408,352✔
792
    TAOS_CHECK_EXIT(tSerializeSFieldWithOptions(pEncoder, pCol));
6,408,352✔
793
  }
794

795
  int32_t outTagNum = (int32_t)taosArrayGetSize(pMsg->outTags);
1,572,146✔
796
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, outTagNum));
1,572,146✔
797
  for (int32_t i = 0; i < outTagNum; ++i) {
2,748,218✔
798
    SFieldWithOptions *pTag = taosArrayGet(pMsg->outTags, i);
1,176,072✔
799
    TAOS_CHECK_EXIT(tSerializeSFieldWithOptions(pEncoder, pTag));
1,176,072✔
800
  }
801

802
  TAOS_CHECK_EXIT(tEncodeU64(pEncoder, pMsg->outStbUid));
3,144,292✔
803
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->outStbSversion));
3,144,292✔
804

805
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->subTblNameExpr, NULL == pMsg->subTblNameExpr ? 0 : (int32_t)strlen(pMsg->subTblNameExpr) + 1));
3,144,292✔
806
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->tagValueExpr, NULL == pMsg->tagValueExpr ? 0 : (int32_t)strlen(pMsg->tagValueExpr) + 1));
3,144,292✔
807

808
  int32_t forceOutColsSize = (int32_t)taosArrayGetSize(pMsg->forceOutCols);
1,572,146✔
809
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, forceOutColsSize));
1,572,146✔
810
  for (int32_t i = 0; i < forceOutColsSize; ++i) {
1,709,300✔
811
    SStreamOutCol *pCoutCol = (SStreamOutCol*)taosArrayGet(pMsg->forceOutCols, i);
137,154✔
812
    int32_t        exprLen = pCoutCol->expr == NULL ? 0 : (int32_t)strlen((char*)pCoutCol->expr) + 1;
137,154✔
813

814
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pCoutCol->expr, exprLen));
274,308✔
815
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.type));
274,308✔
816
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.precision));
274,308✔
817
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.scale));
274,308✔
818
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pCoutCol->type.bytes));
274,308✔
819
  }
820

821
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->lowLatencyCalc));
3,144,292✔
822

823
  // colCids and tagCids - always encode size (0 if NULL) for compatibility
824
  int32_t colCidsSize = (int32_t)taosArrayGetSize(pMsg->colCids);
1,572,146✔
825
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, colCidsSize));
1,572,146✔
826
  if (colCidsSize > 0) {
1,572,146✔
827
    for (int32_t i = 0; i < colCidsSize; ++i) {
100,608✔
828
      int16_t* pCid = (int16_t*)taosArrayGet(pMsg->colCids, i);
74,370✔
829
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, *pCid));
148,740✔
830
    }
831
  }
832

833
  int32_t tagCidsSize = (int32_t)taosArrayGetSize(pMsg->tagCids);
1,572,146✔
834
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, tagCidsSize));
1,572,146✔
835
  if (tagCidsSize > 0) {
1,572,146✔
836
    for (int32_t i = 0; i < tagCidsSize; ++i) {
51,276✔
837
      int16_t* pCid = (int16_t*)taosArrayGet(pMsg->tagCids, i);
30,126✔
838
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, *pCid));
60,252✔
839
    }
840
  }
841

842
_exit:
1,572,146✔
843

844
  return code;
1,572,146✔
845
}
846

847
int32_t tEncodeSStmTaskDeploy(SEncoder* pEncoder, const SStmTaskDeploy* pTask) {
3,518,404✔
848
  int32_t code = 0;
3,518,404✔
849
  int32_t lino;
850

851
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
3,518,404✔
852
  switch (pTask->task.type) {
3,518,404✔
853
    case STREAM_READER_TASK:
1,488,692✔
854
      TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployMsg(pEncoder, &pTask->msg.reader));
1,488,692✔
855
      break;
1,488,692✔
856
    case STREAM_TRIGGER_TASK:
457,566✔
857
      TAOS_CHECK_EXIT(tEncodeSStreamTriggerDeployMsg(pEncoder, &pTask->msg.trigger));
457,566✔
858
      break;
457,566✔
859
    case STREAM_RUNNER_TASK:
1,572,146✔
860
      TAOS_CHECK_EXIT(tEncodeSStreamRunnerDeployMsg(pEncoder, &pTask->msg.runner));
1,572,146✔
861
      break;
1,572,146✔
UNCOV
862
    default:
×
UNCOV
863
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
864
      break;
×
865
  }
866
  
867
_exit:
3,518,404✔
868

869
  return code;
3,518,404✔
870
}
871

872

873
int32_t tEncodeSStmStreamDeploy(SEncoder* pEncoder, const SStmStreamDeploy* pStream) {
604,034✔
874
  int32_t code = 0;
604,034✔
875
  int32_t lino;
876

877
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pStream->streamId));
1,208,068✔
878

879
  int32_t readerNum = taosArrayGetSize(pStream->readerTasks);
604,034✔
880
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
604,034✔
881
  for (int32_t i = 0; i < readerNum; ++i) {
2,092,726✔
882
    SStmTaskDeploy* pDeploy = taosArrayGet(pStream->readerTasks, i);
1,488,692✔
883
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pDeploy));
1,488,692✔
884
  }
885

886
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStream->triggerTask ? 1 : 0));
1,208,068✔
887
  if (pStream->triggerTask) {
604,034✔
888
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pStream->triggerTask));
457,566✔
889
  }
890
  
891
  int32_t runnerNum = taosArrayGetSize(pStream->runnerTasks);
604,034✔
892
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
604,034✔
893
  for (int32_t i = 0; i < runnerNum; ++i) {
2,176,180✔
894
    SStmTaskDeploy* pDeploy = taosArrayGet(pStream->runnerTasks, i);
1,572,146✔
895
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pDeploy));
1,572,146✔
896
  }
897

898
_exit:
604,034✔
899

900
  return code;
604,034✔
901
}
902

903
int32_t tEncodeSStreamMsg(SEncoder* pEncoder, const SStreamMsg* pMsg) {
1,112,946✔
904
  int32_t code = 0;
1,112,946✔
905
  int32_t lino = 0;
1,112,946✔
906

907
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->msgType));
2,225,892✔
908

909
_exit:
1,112,946✔
910
  return code;
1,112,946✔
911
}
912

913
int32_t tDecodeSStreamMsg(SDecoder* pDecoder, SStreamMsg* pMsg) {
556,586✔
914
  int32_t code = 0;
556,586✔
915
  int32_t lino;
916

917
  int32_t type = 0;
556,586✔
918
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &type));
556,586✔
919
  pMsg->msgType = type;
556,586✔
920

921
_exit:
556,586✔
922
  return code;
556,586✔
923
}
924

925
int32_t tEncodeSStreamStartTaskMsg(SEncoder* pEncoder, const SStreamStartTaskMsg* pStart) {
442,948✔
926
  int32_t code = 0;
442,948✔
927
  int32_t lino;
928

929
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pStart->header));
442,948✔
930

931
_exit:
442,948✔
932

933
  return code;
442,948✔
934
}
935

936
int32_t tEncodeSStreamTaskStart(SEncoder* pEncoder, const SStreamTaskStart* pTask) {
442,948✔
937
  int32_t code = 0;
442,948✔
938
  int32_t lino;
939

940
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
442,948✔
941
  TAOS_CHECK_EXIT(tEncodeSStreamStartTaskMsg(pEncoder, (SStreamStartTaskMsg*)&pTask->startMsg));
442,948✔
942

943
_exit:
442,948✔
944

945
  return code;
442,948✔
946
}
947

948
int32_t tEncodeSStreamUndeployTaskMsg(SEncoder* pEncoder, const SStreamUndeployTaskMsg* pUndeploy) {
528,386✔
949
  int32_t code = 0;
528,386✔
950
  int32_t lino;
951

952
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pUndeploy->header));
528,386✔
953
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pUndeploy->doCheckpoint));
1,056,772✔
954
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pUndeploy->doCleanup));
1,056,772✔
955

956
_exit:
528,386✔
957

958
  return code;
528,386✔
959
}
960

961
int32_t tEncodeSStreamTaskUndeploy(SEncoder* pEncoder, const SStreamTaskUndeploy* pTask) {
528,386✔
962
  int32_t code = 0;
528,386✔
963
  int32_t lino;
964

965
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
528,386✔
966
  TAOS_CHECK_EXIT(tEncodeSStreamUndeployTaskMsg(pEncoder, (SStreamUndeployTaskMsg*)&pTask->undeployMsg));
528,386✔
967

968
_exit:
528,386✔
969

970
  return code;
528,386✔
971
}
972

973

974
int32_t tEncodeSStreamRecalcReq(SEncoder* pEncoder, const SStreamRecalcReq* recalc) {
6,776✔
975
  int32_t code = 0;
6,776✔
976
  int32_t lino;
977

978
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->recalcId));
13,552✔
979
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->start));
13,552✔
980
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->end));
13,552✔
981

982
_exit:
6,776✔
983

984
  return code;
6,776✔
985
}
986

987
int32_t tEncodeSStreamMgmtRspCont(SEncoder* pEncoder, SStreamMsgType msgType, const SStreamMgmtRspCont* pRsp) {
141,612✔
988
  int32_t code = 0;
141,612✔
989
  int32_t lino;
990

991
  switch (msgType) {
141,612✔
992
    case STREAM_MSG_ORIGTBL_READER_INFO: {
129,732✔
993
      int32_t vgNum = taosArrayGetSize(pRsp->vgIds);
129,732✔
994
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgNum));
129,732✔
995

996
      for (int32_t i = 0; i < vgNum; ++i) {
512,380✔
997
        int32_t* vgId = taosArrayGet(pRsp->vgIds, i);
382,648✔
998
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *vgId));
765,296✔
999
      }
1000

1001
      int32_t readerNum = taosArrayGetSize(pRsp->readerList);
129,732✔
1002
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
129,732✔
1003
      
1004
      for (int32_t i = 0; i < readerNum; ++i) {
256,146✔
1005
        SStreamTaskAddr* addr = taosArrayGet(pRsp->readerList, i);
126,414✔
1006
        TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, addr));
126,414✔
1007
      }
1008
      break;
129,732✔
1009
    }
UNCOV
1010
    case STREAM_MSG_UPDATE_RUNNER: {
×
UNCOV
1011
      int32_t runnerNum = taosArrayGetSize(pRsp->runnerList);
×
UNCOV
1012
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
×
1013
      
UNCOV
1014
      for (int32_t i = 0; i < runnerNum; ++i) {
×
UNCOV
1015
        SStreamRunnerTarget* target = taosArrayGet(pRsp->runnerList, i);
×
UNCOV
1016
        TAOS_CHECK_EXIT(tEncodeSStreamRunnerTarget(pEncoder, target));
×
1017
      }
UNCOV
1018
      break;
×
1019
    }
1020
    case STREAM_MSG_USER_RECALC: {
6,776✔
1021
      int32_t recalcNum = taosArrayGetSize(pRsp->recalcList);
6,776✔
1022
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, recalcNum));
6,776✔
1023
      
1024
      for (int32_t i = 0; i < recalcNum; ++i) {
13,552✔
1025
        SStreamRecalcReq* recalc = taosArrayGet(pRsp->recalcList, i);
6,776✔
1026
        TAOS_CHECK_EXIT(tEncodeSStreamRecalcReq(pEncoder, recalc));
6,776✔
1027
      }
1028
      break;
6,776✔
1029
    }
1030
    case STREAM_MSG_RUNNER_ORIGTBL_READER: {
5,104✔
1031
      int32_t rspNum = taosArrayGetSize(pRsp->execRspList);
5,104✔
1032
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, rspNum));
5,104✔
1033
      
1034
      for (int32_t i = 0; i < rspNum; ++i) {
10,208✔
1035
        SStreamOReaderDeployRsp* pDeployRsp = taosArrayGet(pRsp->execRspList, i);
5,104✔
1036
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pDeployRsp->execId));
10,208✔
1037
        int32_t vgNum = taosArrayGetSize(pDeployRsp->vgList);
5,104✔
1038
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgNum));
5,104✔
1039
        for (int32_t n = 0; n < vgNum; ++n) {
10,208✔
1040
          TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, taosArrayGet(pDeployRsp->vgList, n)));
5,104✔
1041
        }
1042
      }
1043
      break;
5,104✔
1044
    }
UNCOV
1045
    default:
×
UNCOV
1046
      break;
×
1047
  }
1048

1049
_exit:
141,612✔
1050

1051
  return code;
141,612✔
1052
}
1053

1054
int32_t tEncodeSStreamMgmtRsp(SEncoder* pEncoder, const SStreamMgmtRsp* pRsp) {
141,612✔
1055
  int32_t code = 0;
141,612✔
1056
  int32_t lino;
1057

1058
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pRsp->header));
141,612✔
1059
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->reqId));
283,224✔
1060
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->code));
283,224✔
1061
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, &pRsp->task));
141,612✔
1062
  TAOS_CHECK_EXIT(tEncodeSStreamMgmtRspCont(pEncoder, pRsp->header.msgType, (SStreamMgmtRspCont*)&pRsp->cont));
141,612✔
1063

1064
_exit:
141,612✔
1065

1066
  return code;
141,612✔
1067
}
1068

1069

1070
int32_t tEncodeStreamHbRsp(SEncoder* pEncoder, const SMStreamHbRspMsg* pRsp) {
39,541,574✔
1071
  int32_t code = 0;
39,541,574✔
1072
  int32_t lino;
1073

1074
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
39,541,574✔
1075
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->streamGId));
79,083,148✔
1076
  int32_t deployNum = taosArrayGetSize(pRsp->deploy.streamList);
39,541,574✔
1077
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, deployNum));
39,541,574✔
1078
  for (int32_t i = 0; i < deployNum; ++i) {
40,145,608✔
1079
    SStmStreamDeploy* pStream = (SStmStreamDeploy*)taosArrayGet(pRsp->deploy.streamList, i);
604,034✔
1080
    TAOS_CHECK_EXIT(tEncodeSStmStreamDeploy(pEncoder, pStream));
604,034✔
1081
  }
1082

1083
  int32_t startNum = taosArrayGetSize(pRsp->start.taskList);
39,541,574✔
1084
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, startNum));
39,541,574✔
1085
  for (int32_t i = 0; i < startNum; ++i) {
39,984,522✔
1086
    SStreamTaskStart* pTask = (SStreamTaskStart*)taosArrayGet(pRsp->start.taskList, i);
442,948✔
1087
    TAOS_CHECK_EXIT(tEncodeSStreamTaskStart(pEncoder, pTask));
442,948✔
1088
  }
1089

1090
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pRsp->undeploy.undeployAll));
79,083,148✔
1091
  if (!pRsp->undeploy.undeployAll) {
39,541,574✔
1092
    int32_t undeployNum = taosArrayGetSize(pRsp->undeploy.taskList);
39,541,574✔
1093
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, undeployNum));
39,541,574✔
1094
    for (int32_t i = 0; i < undeployNum; ++i) {
40,069,960✔
1095
      SStreamTaskUndeploy* pTask = (SStreamTaskUndeploy*)taosArrayGet(pRsp->undeploy.taskList, i);
528,386✔
1096
      TAOS_CHECK_EXIT(tEncodeSStreamTaskUndeploy(pEncoder, pTask));
528,386✔
1097
    }
1098
  }
1099

1100
  int32_t rspNum = taosArrayGetSize(pRsp->rsps.rspList);
39,541,574✔
1101
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, rspNum));
39,541,574✔
1102
  for (int32_t i = 0; i < rspNum; ++i) {
39,683,186✔
1103
    SStreamMgmtRsp* pMgmtRsp = (SStreamMgmtRsp*)taosArrayGet(pRsp->rsps.rspList, i);
141,612✔
1104
    TAOS_CHECK_EXIT(tEncodeSStreamMgmtRsp(pEncoder, pMgmtRsp));
141,612✔
1105
  }
1106
  
1107
_exit:
39,541,574✔
1108

1109
  tEndEncode(pEncoder);
39,541,574✔
1110

1111
  return code;
39,541,574✔
1112
}
1113

1114
int32_t tDecodeSStreamReaderDeployFromTrigger(SDecoder* pDecoder, SStreamReaderDeployFromTrigger* pMsg) {
337,877✔
1115
  int32_t code = 0;
337,877✔
1116
  int32_t lino;
1117

1118
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerTblName, NULL));
675,754✔
1119
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->triggerTblUid));
675,754✔
1120
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->triggerTblSuid));
675,754✔
1121
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerTblType));
675,754✔
1122
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->isTriggerTblVirt));
675,754✔
1123
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->deleteReCalc));
675,754✔
1124
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->deleteOutTbl));
675,754✔
1125
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->partitionCols, NULL));
675,754✔
1126
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerCols, NULL));
675,754✔
1127
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerScanPlan, NULL));
675,754✔
1128
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcCacheScanPlan, NULL));
675,754✔
1129

1130
_exit:
337,877✔
1131

1132
  return code;
337,877✔
1133
}
1134

1135

1136
int32_t tDecodeSStreamReaderDeployFromCalc(SDecoder* pDecoder, SStreamReaderDeployFromCalc* pMsg) {
396,706✔
1137
  int32_t code = 0;
396,706✔
1138
  int32_t lino;
1139

1140
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
793,412✔
1141
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcScanPlan, NULL));
793,412✔
1142

1143
_exit:
396,706✔
1144

1145
  return code;
396,706✔
1146
}
1147

1148

1149
int32_t tDecodeSStreamReaderDeployMsg(SDecoder* pDecoder, SStreamReaderDeployMsg* pMsg) {
734,583✔
1150
  int32_t code = 0;
734,583✔
1151
  int32_t lino;
1152

1153
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerReader));
1,469,166✔
1154
  if (pMsg->triggerReader) {
734,583✔
1155
    TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployFromTrigger(pDecoder, &pMsg->msg.trigger));
337,877✔
1156
  } else {
1157
    TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployFromCalc(pDecoder, &pMsg->msg.calc));
396,706✔
1158
  }
1159
  
1160
_exit:
396,706✔
1161

1162
  return code;
734,583✔
1163
}
1164

1165

1166
int32_t tDecodeSStreamTaskAddr(SDecoder* pDecoder, SStreamTaskAddr* pMsg) {
1,012,590✔
1167
  int32_t code = 0;
1,012,590✔
1168
  int32_t lino;
1169

1170
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->taskId));
2,025,180✔
1171
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->nodeId));
2,025,180✔
1172
  TAOS_CHECK_EXIT(tDecodeSEpSet(pDecoder, &pMsg->epset));
1,012,590✔
1173

1174
_exit:
1,012,590✔
1175

1176
  return code;
1,012,590✔
1177
}
1178

1179

1180
int32_t tDecodeSStreamRunnerTarget(SDecoder* pDecoder, SStreamRunnerTarget* pMsg) {
661,674✔
1181
  int32_t code = 0;
661,674✔
1182
  int32_t lino;
1183

1184
  TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, &pMsg->addr));
661,674✔
1185
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
1,323,348✔
1186

1187
_exit:
661,674✔
1188

1189
  return code;
661,674✔
1190
}
1191

1192

1193
int32_t tDecodeSStreamTriggerDeployMsg(SDecoder* pDecoder, SStreamTriggerDeployMsg* pMsg) {
223,977✔
1194
  int32_t code = 0;
223,977✔
1195
  int32_t lino;
1196

1197
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerType));
447,954✔
1198
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->igDisorder));
447,954✔
1199
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->fillHistory));
447,954✔
1200
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->fillHistoryFirst));
447,954✔
1201
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->lowLatencyCalc));
447,954✔
1202
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->igNoDataTrigger));
447,954✔
1203
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->enableMultiGroupCalc));
447,954✔
1204
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->isTriggerTblVirt));
447,954✔
1205
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerHasPF));
447,954✔
1206
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->isTriggerTblStb));
447,954✔
1207
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->partitionCols, NULL));
447,954✔
1208

1209
  int32_t addrSize = 0;
223,977✔
1210
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
223,977✔
1211
  if (addrSize > 0) {
223,977✔
1212
    pMsg->pNotifyAddrUrls = taosArrayInit_s(POINTER_BYTES, addrSize);
57,012✔
1213
    TSDB_CHECK_NULL(pMsg->pNotifyAddrUrls, code, lino, _exit, terrno);
57,012✔
1214
  }
1215
  for (int32_t i = 0; i < addrSize; ++i) {
280,989✔
1216
    const char **url = taosArrayGet(pMsg->pNotifyAddrUrls, i);
57,012✔
1217
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)url, NULL));
57,012✔
1218
  }
1219
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->notifyEventTypes));
447,954✔
1220
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->addOptions));
447,954✔
1221
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->notifyHistory));
447,954✔
1222

1223
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->maxDelay));
447,954✔
1224
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->fillHistoryStartTime));
447,954✔
1225
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->watermark));
447,954✔
1226
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->expiredTime));
447,954✔
1227
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->idleTimeoutMs));
447,954✔
1228

1229
  switch (pMsg->triggerType) {
223,977✔
1230
    case WINDOW_TYPE_SESSION:
8,668✔
1231
      // session trigger
1232
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->trigger.session.slotId));
17,336✔
1233
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.session.sessionVal));
17,336✔
1234
      break;
8,668✔
1235
    case WINDOW_TYPE_STATE: {
82,362✔
1236
      /*
1237
        state trigger
1238
        v1 format: single slotId as int16 (may be -1 for expression key)
1239
        v2 format: first int16 is STATE_WIN_SLOT_SENTINEL_V2 (-2), then slotIds array
1240
        decoder is compatible with v1/v2 (to support reading legacy or old-end data).
1241
      */
1242
      int16_t firstI16 = 0;
82,362✔
1243
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &firstI16));
82,362✔
1244
      if (firstI16 == STATE_WIN_SLOT_SENTINEL_V2) {
82,362✔
1245
        // v2 format: sentinel + I32(slotNum) + N*I16(slotId)
1246
        int32_t slotNum = 0;
82,362✔
1247
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &slotNum));
82,362✔
1248
        if (slotNum > 0) {
82,362✔
1249
          pMsg->trigger.stateWin.pSlotIds = taosArrayInit(slotNum, sizeof(int16_t));
82,362✔
1250
          TSDB_CHECK_NULL(pMsg->trigger.stateWin.pSlotIds, code, lino, _exit, terrno);
82,362✔
1251
        }
1252
        for (int32_t i = 0; i < slotNum; ++i) {
176,223✔
1253
          int16_t slotId = -1;
93,861✔
1254
          TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &slotId));
93,861✔
1255
          TSDB_CHECK_NULL(taosArrayPush(pMsg->trigger.stateWin.pSlotIds, &slotId), code, lino, _exit, terrno);
187,722✔
1256
        }
1257
      } else {
1258
        // v1 format: firstI16 is the single slotId (>= 0 for column, -1 for expr)
NEW
1259
        pMsg->trigger.stateWin.pSlotIds = taosArrayInit(1, sizeof(int16_t));
×
NEW
1260
        TSDB_CHECK_NULL(pMsg->trigger.stateWin.pSlotIds, code, lino, _exit, terrno);
×
NEW
1261
        TSDB_CHECK_NULL(taosArrayPush(pMsg->trigger.stateWin.pSlotIds, &firstI16), code, lino, _exit, terrno);
×
1262
      }
1263
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->trigger.stateWin.extend));
164,724✔
1264
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->trigger.stateWin.trueForType));
164,724✔
1265
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->trigger.stateWin.trueForCount));
164,724✔
1266
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.stateWin.trueForDuration));
164,724✔
1267
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.stateWin.zeroth, NULL));
164,724✔
1268
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.stateWin.expr, NULL));
164,724✔
1269
      break;
82,362✔
1270
    }
1271
    
1272
    case WINDOW_TYPE_INTERVAL:
77,597✔
1273
      // slide trigger
1274
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.intervalUnit));
155,194✔
1275
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.slidingUnit));
155,194✔
1276
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.offsetUnit));
155,194✔
1277
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.soffsetUnit));
155,194✔
1278
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.precision));
155,194✔
1279
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.interval));
155,194✔
1280
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.offset));
155,194✔
1281
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.sliding));
155,194✔
1282
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.soffset));
155,194✔
1283
      break;
77,597✔
1284
    
1285
    case WINDOW_TYPE_EVENT:
24,796✔
1286
      // event trigger
1287
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.event.startCond, NULL));
49,592✔
1288
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.event.endCond, NULL));
49,592✔
1289
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->trigger.event.trueForType));
49,592✔
1290
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->trigger.event.trueForCount));
49,592✔
1291
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.event.trueForDuration));
49,592✔
1292
      break;
24,796✔
1293
    
1294
    case WINDOW_TYPE_COUNT:
23,072✔
1295
      // count trigger
1296
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.count.condCols, NULL));
46,144✔
1297
      
1298
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.count.countVal));
46,144✔
1299
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.count.sliding));
46,144✔
1300
      break;
23,072✔
1301
    
1302
    case WINDOW_TYPE_PERIOD:
7,482✔
1303
      // period trigger
1304
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, (int8_t*)&pMsg->trigger.period.periodUnit));
14,964✔
1305
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, (int8_t*)&pMsg->trigger.period.offsetUnit));
14,964✔
1306
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.period.precision));
14,964✔
1307
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.period.period));
14,964✔
1308
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.period.offset));
14,964✔
1309
      break;
7,482✔
UNCOV
1310
    default:
×
UNCOV
1311
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
1312
      break;
×
1313
  }
1314

1315
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->eventTypes));
447,954✔
1316
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->placeHolderBitmap));
447,954✔
1317
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->calcTsSlotId));
447,954✔
1318
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->triTsSlotId));
447,954✔
1319
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->calcPkSlotId));
447,954✔
1320
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->triPkSlotId));
447,954✔
1321
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerPrevFilter, NULL));
447,954✔
1322
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerScanPlan, NULL));
447,954✔
1323
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcCacheScanPlan, NULL));
447,954✔
1324

1325
  int32_t readerNum = 0;
223,977✔
1326
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));
223,977✔
1327
  if (readerNum > 0) {
223,977✔
1328
    pMsg->readerList = taosArrayInit_s(sizeof(SStreamTaskAddr), readerNum);
222,940✔
1329
    TSDB_CHECK_NULL(pMsg->readerList, code, lino, _exit, terrno);
222,940✔
1330
  }
1331
  for (int32_t i = 0; i < readerNum; ++i) {
497,831✔
1332
    SStreamTaskAddr* pAddr = (SStreamTaskAddr*)taosArrayGet(pMsg->readerList, i);
273,854✔
1333
    TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, pAddr));
273,854✔
1334
  }
1335

1336
  int32_t runnerNum = 0;
223,977✔
1337
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));
223,977✔
1338
  if (runnerNum > 0) {
223,977✔
1339
    pMsg->runnerList = taosArrayInit_s(sizeof(SStreamRunnerTarget), runnerNum);
220,558✔
1340
    TSDB_CHECK_NULL(pMsg->runnerList, code, lino, _exit, terrno);
220,558✔
1341
  }
1342
  for (int32_t i = 0; i < runnerNum; ++i) {
885,651✔
1343
    SStreamRunnerTarget* pTarget = (SStreamRunnerTarget*)taosArrayGet(pMsg->runnerList, i);
661,674✔
1344
    TAOS_CHECK_EXIT(tDecodeSStreamRunnerTarget(pDecoder, pTarget));
661,674✔
1345
  }
1346

1347
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->leaderSnodeId));
447,954✔
1348
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->streamName, NULL));
447,954✔
1349
  if (!tDecodeIsEnd(pDecoder)) {
223,977✔
1350
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->precision));
447,954✔
1351
  }
1352
  if (!tDecodeIsEnd(pDecoder)) {
223,977✔
1353
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->nodelayCreateSubtable));
447,954✔
1354
  }
1355

1356
_exit:
223,977✔
1357

1358
  return code;
223,977✔
1359
}
1360

1361

1362

1363
int32_t tDeserializeSFieldWithOptions(SDecoder *pDecoder, SFieldWithOptions *pField) {
3,753,570✔
1364
  int32_t code = 0;
3,753,570✔
1365
  int32_t lino;
1366

1367
  TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, pField->name));
3,753,570✔
1368
  TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pField->type));
7,507,140✔
1369
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pField->flags));
7,507,140✔
1370
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pField->bytes));
7,507,140✔
1371
  TAOS_CHECK_EXIT(tDecodeU32(pDecoder, &pField->compress));
7,507,140✔
1372
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pField->typeMod));
7,507,140✔
1373

1374
_exit:
3,753,570✔
1375

1376
  return code;
3,753,570✔
1377
}
1378

1379
void destroySStreamOutCols(void* p){
68,577✔
1380
  if (p == NULL) return;
68,577✔
1381
  SStreamOutCol* col = (SStreamOutCol*)p;
68,577✔
1382
  taosMemoryFreeClear(col->expr);
68,577✔
1383
}
1384

1385
int32_t tDecodeSStreamRunnerDeployMsg(SDecoder* pDecoder, SStreamRunnerDeployMsg* pMsg) {
771,561✔
1386
  int32_t code = 0;
771,561✔
1387
  int32_t lino;
1388

1389
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
1,543,122✔
1390
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->streamName, NULL));
1,543,122✔
1391
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->pPlan, NULL));
1,543,122✔
1392
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->outDBFName, NULL));
1,543,122✔
1393
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->outTblName, NULL));
1,543,122✔
1394
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->outTblType));
1,543,122✔
1395
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->calcNotifyOnly));
1,543,122✔
1396
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->topPlan));
1,543,122✔
1397

1398
  int32_t addrSize = 0;
771,561✔
1399
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
771,561✔
1400
  if (addrSize > 0) {
771,561✔
1401
    pMsg->pNotifyAddrUrls = taosArrayInit_s(POINTER_BYTES, addrSize);
160,779✔
1402
    TSDB_CHECK_NULL(pMsg->pNotifyAddrUrls, code, lino, _exit, terrno);
160,779✔
1403
  }
1404
  for (int32_t i = 0; i < addrSize; ++i) {
932,340✔
1405
    const char **url = taosArrayGet(pMsg->pNotifyAddrUrls, i);
160,779✔
1406
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)url, NULL));
160,779✔
1407
  }
1408
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->addOptions));
1,543,122✔
1409

1410
  int32_t outColNum = 0;
771,561✔
1411
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outColNum));
771,561✔
1412
  if (outColNum > 0) {
771,561✔
1413
    pMsg->outCols = taosArrayInit_s(sizeof(SFieldWithOptions), outColNum);
771,561✔
1414
    TSDB_CHECK_NULL(pMsg->outCols, code, lino, _exit, terrno);
771,561✔
1415
  }
1416
  for (int32_t i = 0; i < outColNum; ++i) {
3,941,853✔
1417
    SFieldWithOptions *pCol = taosArrayGet(pMsg->outCols, i);
3,170,292✔
1418
    TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pCol));
3,170,292✔
1419
  }
1420

1421
  int32_t outTagNum = 0;
771,561✔
1422
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outTagNum));
771,561✔
1423
  if (outTagNum > 0) {
771,561✔
1424
    pMsg->outTags = taosArrayInit_s(sizeof(SFieldWithOptions), outTagNum);
311,658✔
1425
    TSDB_CHECK_NULL(pMsg->outTags, code, lino, _exit, terrno);
311,658✔
1426
  }
1427
  for (int32_t i = 0; i < outTagNum; ++i) {
1,354,839✔
1428
    SFieldWithOptions *pTag = taosArrayGet(pMsg->outTags, i);
583,278✔
1429
    TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pTag));
583,278✔
1430
  }
1431

1432
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pMsg->outStbUid));
1,543,122✔
1433
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->outStbSversion));
1,543,122✔
1434

1435
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->subTblNameExpr, NULL));
1,543,122✔
1436
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->tagValueExpr, NULL));
1,543,122✔
1437

1438
  int32_t forceOutColsSize = 0;
771,561✔
1439
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &forceOutColsSize));
771,561✔
1440
  if (forceOutColsSize > 0) {
771,561✔
1441
    pMsg->forceOutCols = taosArrayInit_s(sizeof(SStreamOutCol), forceOutColsSize);
12,429✔
1442
    TSDB_CHECK_NULL(pMsg->forceOutCols, code, lino, _exit, terrno);
12,429✔
1443
  }
1444
  for (int32_t i = 0; i < forceOutColsSize; ++i) {
840,138✔
1445
    SStreamOutCol *pCoutCol = (SStreamOutCol*)taosArrayGet(pMsg->forceOutCols, i);
68,577✔
1446

1447
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pCoutCol->expr, NULL));
137,154✔
1448
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.type));
137,154✔
1449
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.precision));
137,154✔
1450
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.scale));
137,154✔
1451
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pCoutCol->type.bytes));
137,154✔
1452
  }
1453

1454
  if (!tDecodeIsEnd(pDecoder)) {
771,561✔
1455
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->lowLatencyCalc));
1,543,122✔
1456
  }
1457

1458
  // colCids and tagCids - always decode size, create array only if size > 0
1459
  // For backward compatibility, check if there's more data before decoding
1460
  if (!tDecodeIsEnd(pDecoder)) {
771,561✔
1461
    int32_t colCidsSize = 0;
771,561✔
1462
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &colCidsSize));
771,561✔
1463
    if (colCidsSize > 0 && colCidsSize <= TSDB_MAX_COLUMNS) {  // Sanity check
771,561✔
1464
      pMsg->colCids = taosArrayInit(colCidsSize, sizeof(int16_t));
9,879✔
1465
      TSDB_CHECK_NULL(pMsg->colCids, code, lino, _exit, terrno);
9,879✔
1466
      for (int32_t i = 0; i < colCidsSize; ++i) {
37,344✔
1467
        int16_t cid = 0;
27,465✔
1468
        TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &cid));
27,465✔
1469
        if (taosArrayPush(pMsg->colCids, &cid) == NULL) {
54,930✔
UNCOV
1470
          TAOS_CHECK_EXIT(terrno);
×
1471
        }
1472
      }
1473
    }
1474
  }
1475
  // Try to decode tagCids if there's more data
1476
  if (!tDecodeIsEnd(pDecoder)) {
771,561✔
1477
    int32_t tagCidsSize = 0;
771,561✔
1478
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &tagCidsSize));
771,561✔
1479
    if (tagCidsSize > 0 && tagCidsSize <= TSDB_MAX_TAGS) {  // Sanity check
771,561✔
1480
      pMsg->tagCids = taosArrayInit(tagCidsSize, sizeof(int16_t));
7,335✔
1481
      TSDB_CHECK_NULL(pMsg->tagCids, code, lino, _exit, terrno);
7,335✔
1482
      for (int32_t i = 0; i < tagCidsSize; ++i) {
19,158✔
1483
        int16_t cid = 0;
11,823✔
1484
        TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &cid));
11,823✔
1485
        if (taosArrayPush(pMsg->tagCids, &cid) == NULL) {
23,646✔
UNCOV
1486
          TAOS_CHECK_EXIT(terrno);
×
1487
        }
1488
      }
1489
    }
1490
  }
1491

1492
_exit:
770,112✔
1493

1494
  return code;
771,561✔
1495
}
1496

1497
int32_t tDecodeSStmTaskDeploy(SDecoder* pDecoder, SStmTaskDeploy* pTask) {
1,730,121✔
1498
  int32_t code = 0;
1,730,121✔
1499
  int32_t lino;
1500

1501
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
1,730,121✔
1502
  switch (pTask->task.type) {
1,730,121✔
1503
    case STREAM_READER_TASK:
734,583✔
1504
      TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployMsg(pDecoder, &pTask->msg.reader));
734,583✔
1505
      break;
734,583✔
1506
    case STREAM_TRIGGER_TASK:
223,977✔
1507
      TAOS_CHECK_EXIT(tDecodeSStreamTriggerDeployMsg(pDecoder, &pTask->msg.trigger));
223,977✔
1508
      break;
223,977✔
1509
    case STREAM_RUNNER_TASK:
771,561✔
1510
      TAOS_CHECK_EXIT(tDecodeSStreamRunnerDeployMsg(pDecoder, &pTask->msg.runner));
771,561✔
1511
      break;
771,561✔
UNCOV
1512
    default:
×
UNCOV
1513
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
1514
      break;
×
1515
  }
1516
  
1517
_exit:
1,730,121✔
1518

1519
  return code;
1,730,121✔
1520
}
1521

1522

1523
int32_t tDecodeSStmStreamDeploy(SDecoder* pDecoder, SStmStreamDeploy* pStream) {
297,241✔
1524
  int32_t code = 0;
297,241✔
1525
  int32_t lino;
1526

1527
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pStream->streamId));
594,482✔
1528

1529
  int32_t readerNum = 0;
297,241✔
1530
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));
297,241✔
1531
  if (readerNum > 0) {
297,241✔
1532
    pStream->readerTasks = taosArrayInit_s(sizeof(SStmTaskDeploy), readerNum);
284,637✔
1533
    TSDB_CHECK_NULL(pStream->readerTasks, code, lino, _exit, terrno);
284,637✔
1534
  }
1535
  for (int32_t i = 0; i < readerNum; ++i) {
1,031,824✔
1536
    SStmTaskDeploy* pTask = taosArrayGet(pStream->readerTasks, i);
734,583✔
1537
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pTask));
734,583✔
1538
  }
1539

1540
  int32_t triggerTask = 0;
297,241✔
1541
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &triggerTask));
297,241✔
1542
  if (triggerTask) {
297,241✔
1543
    pStream->triggerTask = taosMemoryCalloc(1, sizeof(SStmTaskDeploy));
223,977✔
1544
    TSDB_CHECK_NULL(pStream->triggerTask, code, lino, _exit, terrno);
223,977✔
1545
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pStream->triggerTask));
223,977✔
1546
  }
1547
  
1548
  int32_t runnerNum = 0;
297,241✔
1549
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));
297,241✔
1550
  if (runnerNum > 0) {
297,241✔
1551
    pStream->runnerTasks = taosArrayInit_s(sizeof(SStmTaskDeploy), runnerNum);
227,827✔
1552
    TSDB_CHECK_NULL(pStream->runnerTasks, code, lino, _exit, terrno);
227,827✔
1553
  }
1554
  for (int32_t i = 0; i < runnerNum; ++i) {
1,068,802✔
1555
    SStmTaskDeploy* pTask = taosArrayGet(pStream->runnerTasks, i);
771,561✔
1556
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pTask));
771,561✔
1557
  }
1558

1559
_exit:
297,241✔
1560

1561
  return code;
297,241✔
1562
}
1563

1564

1565
int32_t tDecodeSStreamStartTaskMsg(SDecoder* pDecoder, SStreamStartTaskMsg* pStart) {
221,574✔
1566
  int32_t code = 0;
221,574✔
1567
  int32_t lino;
1568

1569
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pStart->header));
221,574✔
1570

1571
_exit:
221,574✔
1572

1573
  return code;
221,574✔
1574
}
1575

1576

1577
int32_t tDecodeSStreamTaskStart(SDecoder* pDecoder, SStreamTaskStart* pTask) {
221,574✔
1578
  int32_t code = 0;
221,574✔
1579
  int32_t lino;
1580

1581
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
221,574✔
1582
  TAOS_CHECK_EXIT(tDecodeSStreamStartTaskMsg(pDecoder, (SStreamStartTaskMsg*)&pTask->startMsg));
221,574✔
1583

1584
_exit:
221,574✔
1585

1586
  return code;
221,574✔
1587
}
1588

1589

1590
int32_t tDecodeSStreamUndeployTaskMsg(SDecoder* pDecoder, SStreamUndeployTaskMsg* pUndeploy) {
264,206✔
1591
  int32_t code = 0;
264,206✔
1592
  int32_t lino;
1593

1594
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pUndeploy->header));
264,206✔
1595
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pUndeploy->doCheckpoint));
528,412✔
1596
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pUndeploy->doCleanup));
528,412✔
1597

1598
_exit:
264,206✔
1599

1600
  return code;
264,206✔
1601
}
1602

1603

1604
int32_t tDecodeSStreamTaskUndeploy(SDecoder* pDecoder, SStreamTaskUndeploy* pTask) {
264,206✔
1605
  int32_t code = 0;
264,206✔
1606
  int32_t lino;
1607

1608
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
264,206✔
1609
  TAOS_CHECK_EXIT(tDecodeSStreamUndeployTaskMsg(pDecoder, (SStreamUndeployTaskMsg*)&pTask->undeployMsg));
264,206✔
1610

1611
_exit:
264,206✔
1612

1613
  return code;
264,206✔
1614
}
1615

1616
int32_t tDecodeSStreamRecalcReq(SDecoder* pDecoder, SStreamRecalcReq* recalc) {
3,388✔
1617
  int32_t code = 0;
3,388✔
1618
  int32_t lino;
1619

1620
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->recalcId));
6,776✔
1621
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->start));
6,776✔
1622
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->end));
6,776✔
1623

1624
_exit:
3,388✔
1625

1626
  return code;
3,388✔
1627
}
1628

1629
int32_t tDecodeSStreamMgmtRspCont(SDecoder* pDecoder, SStreamMsgType msgType, SStreamMgmtRspCont* pCont) {
70,806✔
1630
  int32_t code = 0;
70,806✔
1631
  int32_t lino;
1632

1633
  switch (msgType) {
70,806✔
1634
    case STREAM_MSG_ORIGTBL_READER_INFO: {
64,866✔
1635
      int32_t vgNum = 0;
64,866✔
1636
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgNum));  
64,866✔
1637
      if (vgNum > 0) {
64,866✔
1638
        pCont->vgIds = taosArrayInit_s(sizeof(int32_t), vgNum);
64,866✔
1639
        TSDB_CHECK_NULL(pCont->vgIds, code, lino, _exit, terrno);
64,866✔
1640
      }
1641
      for (int32_t i = 0; i < vgNum; ++i) {
256,190✔
1642
        int32_t *vgId = taosArrayGet(pCont->vgIds, i);
191,324✔
1643
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, vgId));  
191,324✔
1644
      }
1645

1646
      int32_t readerNum = 0;
64,866✔
1647
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));  
64,866✔
1648
      if (readerNum > 0) {
64,866✔
1649
        pCont->readerList = taosArrayInit_s(sizeof(SStreamTaskAddr), readerNum);
54,801✔
1650
        TSDB_CHECK_NULL(pCont->readerList, code, lino, _exit, terrno);
54,801✔
1651
      }
1652
      for (int32_t i = 0; i < readerNum; ++i) {
128,073✔
1653
        SStreamTaskAddr *addr = taosArrayGet(pCont->readerList, i);
63,207✔
1654
        TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, addr));  
63,207✔
1655
      }
1656
      break;
64,866✔
1657
    }
UNCOV
1658
    case STREAM_MSG_UPDATE_RUNNER: {
×
UNCOV
1659
      int32_t runnerNum = 0;
×
UNCOV
1660
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));  
×
UNCOV
1661
      if (runnerNum > 0) {
×
UNCOV
1662
        pCont->runnerList = taosArrayInit_s(sizeof(SStreamRunnerTarget), runnerNum);
×
UNCOV
1663
        TSDB_CHECK_NULL(pCont->runnerList, code, lino, _exit, terrno);
×
1664
      }
UNCOV
1665
      for (int32_t i = 0; i < runnerNum; ++i) {
×
UNCOV
1666
        SStreamRunnerTarget *target = taosArrayGet(pCont->runnerList, i);
×
UNCOV
1667
        TAOS_CHECK_EXIT(tDecodeSStreamRunnerTarget(pDecoder, target));  
×
1668
      }
UNCOV
1669
      break;
×
1670
    }
1671
    case STREAM_MSG_USER_RECALC: {
3,388✔
1672
      int32_t recalcNum = 0;
3,388✔
1673
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &recalcNum));  
3,388✔
1674
      if (recalcNum > 0) {
3,388✔
1675
        pCont->recalcList = taosArrayInit_s(sizeof(SStreamRecalcReq), recalcNum);
3,388✔
1676
        TSDB_CHECK_NULL(pCont->recalcList, code, lino, _exit, terrno);
3,388✔
1677
      }
1678
      for (int32_t i = 0; i < recalcNum; ++i) {
6,776✔
1679
        SStreamRecalcReq *recalc = taosArrayGet(pCont->recalcList, i);
3,388✔
1680
        TAOS_CHECK_EXIT(tDecodeSStreamRecalcReq(pDecoder, recalc));  
3,388✔
1681
      }
1682
      break;
3,388✔
1683
    }
1684
    case STREAM_MSG_RUNNER_ORIGTBL_READER: {
2,552✔
1685
      int32_t rspNum = 0, vgNum = 0;
2,552✔
1686
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &rspNum));  
2,552✔
1687
      if (rspNum > 0) {
2,552✔
1688
        pCont->execRspList = taosArrayInit_s(sizeof(SStreamOReaderDeployRsp), rspNum);
2,552✔
1689
        TSDB_CHECK_NULL(pCont->execRspList, code, lino, _exit, terrno);
2,552✔
1690
      }
1691
      for (int32_t i = 0; i < rspNum; ++i) {
5,104✔
1692
        SStreamOReaderDeployRsp *pDeployRsp = taosArrayGet(pCont->execRspList, i);
2,552✔
1693
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pDeployRsp->execId));  
5,104✔
1694
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgNum));
2,552✔
1695
        if (vgNum > 0) {
2,552✔
1696
          pDeployRsp->vgList = taosArrayInit_s(sizeof(SStreamTaskAddr), vgNum);
2,552✔
1697
          TSDB_CHECK_NULL(pDeployRsp->vgList, code, lino, _exit, terrno);
2,552✔
1698
        }
1699
        for (int32_t n = 0; n < vgNum; ++n) {
5,104✔
1700
          SStreamTaskAddr* pAddr = taosArrayGet(pDeployRsp->vgList, n);
2,552✔
1701
          TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, pAddr));  
2,552✔
1702
        }
1703
      }
1704
      break;
2,552✔
1705
    }
1706
    default:
×
1707
      break;
×
1708
  }
1709

1710
_exit:
70,806✔
1711

1712
  return code;
70,806✔
1713
}
1714

1715

1716
int32_t tDecodeSStreamMgmtRsp(SDecoder* pDecoder, SStreamMgmtRsp* pRsp) {
70,806✔
1717
  int32_t code = 0;
70,806✔
1718
  int32_t lino;
1719

1720
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pRsp->header));
70,806✔
1721
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->reqId));
141,612✔
1722
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->code));
141,612✔
1723
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, &pRsp->task));
70,806✔
1724
  TAOS_CHECK_EXIT(tDecodeSStreamMgmtRspCont(pDecoder, pRsp->header.msgType, &pRsp->cont));
70,806✔
1725

1726
_exit:
70,806✔
1727

1728
  return code;
70,806✔
1729
}
1730

1731
void tFreeSStreamOReaderDeployRsp(void* param) {
5,104✔
1732
  if (NULL == param) {
5,104✔
UNCOV
1733
    return;
×
1734
  }
1735

1736
  SStreamOReaderDeployRsp* pRsp = (SStreamOReaderDeployRsp*)param;
5,104✔
1737
  taosArrayDestroy(pRsp->vgList);
5,104✔
1738
}
1739

1740
void tFreeSStreamMgmtRsp(void* param) {
141,612✔
1741
  if (NULL == param) {
141,612✔
UNCOV
1742
    return;
×
1743
  }
1744
  
1745
  SStreamMgmtRsp* pRsp = (SStreamMgmtRsp*)param;
141,612✔
1746

1747
  taosArrayDestroy(pRsp->cont.vgIds);
141,612✔
1748
  taosArrayDestroy(pRsp->cont.readerList);
141,612✔
1749
  taosArrayDestroy(pRsp->cont.runnerList);
141,612✔
1750
  taosArrayDestroy(pRsp->cont.recalcList);
141,612✔
1751
  taosArrayDestroyEx(pRsp->cont.execRspList, tFreeSStreamOReaderDeployRsp);
141,612✔
1752
}
1753

1754
void tFreeSStreamReaderDeployMsg(SStreamReaderDeployMsg* pReader) {
734,583✔
1755
  if (NULL == pReader) {
734,583✔
UNCOV
1756
    return;
×
1757
  }
1758
  
1759
  if (pReader->triggerReader) {
734,583✔
1760
    SStreamReaderDeployFromTrigger* pMsg = (SStreamReaderDeployFromTrigger*)&pReader->msg.trigger;
337,877✔
1761
    taosMemoryFree(pMsg->triggerTblName);
337,877✔
1762
    taosMemoryFree(pMsg->partitionCols);
337,877✔
1763
    taosMemoryFree(pMsg->triggerCols);
337,877✔
1764
    taosMemoryFree(pMsg->triggerScanPlan);
337,877✔
1765
    taosMemoryFree(pMsg->calcCacheScanPlan);
337,877✔
1766
  } else {
1767
    SStreamReaderDeployFromCalc* pMsg = (SStreamReaderDeployFromCalc*)&pReader->msg.calc;
396,706✔
1768
    taosMemoryFree(pMsg->calcScanPlan);
396,706✔
1769
  }
1770
}
1771

UNCOV
1772
void tFreeStreamNotifyUrl(void* param) {
×
1773
  if (NULL == param) {
×
UNCOV
1774
    return;
×
1775
  }
1776

UNCOV
1777
  taosMemoryFree(*(void**)param);
×
1778
}
1779

1780
void tFreeSStreamTriggerDeployMsg(SStreamTriggerDeployMsg* pTrigger) {
223,977✔
1781
  if (NULL == pTrigger) {
223,977✔
1782
    return;
×
1783
  }
1784
  
1785
  taosArrayDestroyEx(pTrigger->pNotifyAddrUrls, tFreeStreamNotifyUrl);
223,977✔
1786
  switch (pTrigger->triggerType) {
223,977✔
1787
    case WINDOW_TYPE_STATE:
82,362✔
1788
      taosArrayDestroy(pTrigger->trigger.stateWin.pSlotIds);
82,362✔
1789
      taosMemoryFree(pTrigger->trigger.stateWin.zeroth);
82,362✔
1790
      taosMemoryFree(pTrigger->trigger.stateWin.expr);
82,362✔
1791
      break;
82,362✔
1792
    case WINDOW_TYPE_EVENT:
24,796✔
1793
      taosMemoryFree(pTrigger->trigger.event.startCond);
24,796✔
1794
      taosMemoryFree(pTrigger->trigger.event.endCond);
24,796✔
1795
      break;
24,796✔
1796
    case WINDOW_TYPE_COUNT:
23,072✔
1797
      taosMemoryFree(pTrigger->trigger.count.condCols);  
23,072✔
1798
      break;
23,072✔
1799
    default:
93,747✔
1800
      break;
93,747✔
1801
  }
1802

1803
  taosMemoryFree(pTrigger->partitionCols);
223,977✔
1804
  taosMemoryFree(pTrigger->triggerPrevFilter);
223,977✔
1805
  taosMemoryFree(pTrigger->triggerScanPlan);
223,977✔
1806
  taosMemoryFree(pTrigger->calcCacheScanPlan);
223,977✔
1807

1808
  taosArrayDestroy(pTrigger->readerList);
223,977✔
1809
  taosArrayDestroy(pTrigger->runnerList);
223,977✔
1810
  taosMemoryFree(pTrigger->streamName);
223,977✔
1811
}
1812

1813
void tFreeSStreamOutCol(void* param) {
×
1814
  if (NULL == param) {
×
1815
    return;
×
1816
  }
1817

1818
  SStreamOutCol* pOut = (SStreamOutCol*)param;
×
UNCOV
1819
  taosMemoryFree(pOut->expr);
×
1820
}
1821

1822
void tFreeSStreamRunnerDeployMsg(SStreamRunnerDeployMsg* pRunner) {
771,561✔
1823
  if (NULL == pRunner) {
771,561✔
UNCOV
1824
    return;
×
1825
  }
1826

1827
  taosMemoryFree(pRunner->streamName);
771,561✔
1828
  taosMemoryFree(pRunner->pPlan);
771,561✔
1829
  taosMemoryFree(pRunner->outDBFName);
771,561✔
1830
  taosMemoryFree(pRunner->outTblName);
771,561✔
1831

1832
  taosArrayDestroyEx(pRunner->pNotifyAddrUrls, tFreeStreamNotifyUrl);
771,561✔
1833
  taosArrayDestroy(pRunner->outCols);
771,561✔
1834
  taosArrayDestroy(pRunner->outTags);
771,561✔
1835

1836
  taosMemoryFree(pRunner->subTblNameExpr);
771,561✔
1837
  taosMemoryFree(pRunner->tagValueExpr);
771,561✔
1838
  taosArrayDestroyEx(pRunner->forceOutCols, tFreeSStreamOutCol);
771,561✔
1839
}
1840

1841
void tFreeSStmTaskDeploy(void* param) {
2,105,402✔
1842
  if (NULL == param) {
2,105,402✔
1843
    return;
375,281✔
1844
  }
1845

1846
  SStmTaskDeploy* pTask = (SStmTaskDeploy*)param;
1,730,121✔
1847
  switch (pTask->task.type)  {
1,730,121✔
1848
    case STREAM_READER_TASK:
734,583✔
1849
      tFreeSStreamReaderDeployMsg(&pTask->msg.reader);
734,583✔
1850
      break;
734,583✔
1851
    case STREAM_TRIGGER_TASK:
223,977✔
1852
      tFreeSStreamTriggerDeployMsg(&pTask->msg.trigger);
223,977✔
1853
      break;
223,977✔
1854
    case STREAM_RUNNER_TASK:
771,561✔
1855
      tFreeSStreamRunnerDeployMsg(&pTask->msg.runner);
771,561✔
1856
      break;
771,561✔
UNCOV
1857
    default:
×
UNCOV
1858
      break;
×
1859
  }
1860
}
1861

1862

1863
void tFreeSStmStreamDeploy(void* param) {
302,017✔
1864
  if (NULL == param) {
302,017✔
1865
    return;
×
1866
  }
1867
  
1868
  SStmStreamDeploy* pDeploy = (SStmStreamDeploy*)param;
302,017✔
1869
  int32_t readerNum = taosArrayGetSize(pDeploy->readerTasks);
302,017✔
1870
  for (int32_t i = 0; i < readerNum; ++i) {
1,046,363✔
1871
    SStmTaskDeploy* pReader = taosArrayGet(pDeploy->readerTasks, i);
744,346✔
1872
    if (!pReader->msg.reader.triggerReader && pReader->msg.reader.msg.calc.freeScanPlan) {
744,346✔
1873
      taosMemoryFreeClear(pReader->msg.reader.msg.calc.calcScanPlan);
403,232✔
1874
    }
1875
  }
1876
  taosArrayDestroy(pDeploy->readerTasks);
302,017✔
1877

1878
  if (pDeploy->triggerTask) {
302,017✔
1879
    taosArrayDestroy(pDeploy->triggerTask->msg.trigger.readerList);
228,783✔
1880
    taosArrayDestroy(pDeploy->triggerTask->msg.trigger.runnerList);
228,783✔
1881
    taosMemoryFree(pDeploy->triggerTask);
228,783✔
1882
  }
1883

1884
  int32_t runnerNum = taosArrayGetSize(pDeploy->runnerTasks);
302,017✔
1885
  for (int32_t i = 0; i < runnerNum; ++i) {
1,088,090✔
1886
    SStmTaskDeploy* pRunner = taosArrayGet(pDeploy->runnerTasks, i);
786,073✔
1887
    taosMemoryFree(pRunner->msg.runner.pPlan);
786,073✔
1888
  }
1889
  taosArrayDestroy(pDeploy->runnerTasks);
302,017✔
1890
}
1891

1892
void tDeepFreeSStmStreamDeploy(void* param) {
599,258✔
1893
  if (NULL == param) {
599,258✔
UNCOV
1894
    return;
×
1895
  }
1896
  
1897
  SStmStreamDeploy* pDeploy = (SStmStreamDeploy*)param;
599,258✔
1898
  taosArrayDestroyEx(pDeploy->readerTasks, tFreeSStmTaskDeploy);
599,258✔
1899
  tFreeSStmTaskDeploy(pDeploy->triggerTask);
599,258✔
1900
  taosMemoryFree(pDeploy->triggerTask);
599,258✔
1901
  taosArrayDestroyEx(pDeploy->runnerTasks, tFreeSStmTaskDeploy);
599,258✔
1902
}
1903

1904

1905
void tFreeSMStreamHbRspMsg(SMStreamHbRspMsg* pRsp) {
40,034,474✔
1906
  if (NULL == pRsp) {
40,034,474✔
UNCOV
1907
    return;
×
1908
  }
1909
  taosArrayDestroyEx(pRsp->deploy.streamList, tFreeSStmStreamDeploy);
40,034,474✔
1910
  taosArrayDestroy(pRsp->start.taskList);
40,034,474✔
1911
  taosArrayDestroy(pRsp->undeploy.taskList);
40,034,474✔
1912
  taosArrayDestroyEx(pRsp->rsps.rspList, tFreeSStreamMgmtRsp);
40,034,474✔
1913
}
1914

1915
void tDeepFreeSMStreamHbRspMsg(SMStreamHbRspMsg* pRsp) {
19,687,740✔
1916
  if (NULL == pRsp) {
19,687,740✔
UNCOV
1917
    return;
×
1918
  }
1919
  taosArrayDestroyEx(pRsp->deploy.streamList, tDeepFreeSStmStreamDeploy);
19,687,740✔
1920
  taosArrayDestroy(pRsp->start.taskList);
19,687,740✔
1921
  taosArrayDestroy(pRsp->undeploy.taskList);
19,687,740✔
1922
  taosArrayDestroyEx(pRsp->rsps.rspList, tFreeSStreamMgmtRsp);
19,687,740✔
1923
}
1924

1925

1926

1927
int32_t tDecodeStreamHbRsp(SDecoder* pDecoder, SMStreamHbRspMsg* pRsp) {
19,687,740✔
1928
  int32_t code = 0;
19,687,740✔
1929
  int32_t lino;
1930

1931
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
19,687,740✔
1932
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->streamGId));
39,375,480✔
1933
  int32_t deployNum = 0;
19,687,740✔
1934
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &deployNum));
19,687,740✔
1935
  if (deployNum > 0) {
19,687,740✔
1936
    pRsp->deploy.streamList = taosArrayInit_s(sizeof(SStmStreamDeploy), deployNum);
91,975✔
1937
    TSDB_CHECK_NULL(pRsp->deploy.streamList, code, lino, _exit, terrno);
91,975✔
1938
  }
1939
  for (int32_t i = 0; i < deployNum; ++i) {
19,984,981✔
1940
    SStmStreamDeploy* pStream = taosArrayGet(pRsp->deploy.streamList, i);
297,241✔
1941
    TAOS_CHECK_EXIT(tDecodeSStmStreamDeploy(pDecoder, pStream));
297,241✔
1942
  }
1943

1944
  int32_t startNum = 0;
19,687,740✔
1945
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &startNum));
19,687,740✔
1946
  if (startNum > 0) {
19,687,740✔
1947
    pRsp->start.taskList = taosArrayInit_s(sizeof(SStreamTaskStart), startNum);
114,521✔
1948
    TSDB_CHECK_NULL(pRsp->start.taskList, code, lino, _exit, terrno);
114,521✔
1949
  }
1950
  for (int32_t i = 0; i < startNum; ++i) {
19,909,314✔
1951
    SStreamTaskStart* pTask = (SStreamTaskStart*)taosArrayGet(pRsp->start.taskList, i);
221,574✔
1952
    TAOS_CHECK_EXIT(tDecodeSStreamTaskStart(pDecoder, pTask));
221,574✔
1953
  }
1954

1955
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pRsp->undeploy.undeployAll));
39,375,480✔
1956
  if (!pRsp->undeploy.undeployAll) {
19,687,740✔
1957
    int32_t undeployNum = 0;
19,687,740✔
1958
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &undeployNum));
19,687,740✔
1959
    if (undeployNum > 0) {
19,687,740✔
1960
      pRsp->undeploy.taskList = taosArrayInit_s(sizeof(SStreamTaskUndeploy), undeployNum);
34,978✔
1961
      TSDB_CHECK_NULL(pRsp->undeploy.taskList, code, lino, _exit, terrno);
34,978✔
1962
    }
1963
    for (int32_t i = 0; i < undeployNum; ++i) {
19,951,946✔
1964
      SStreamTaskUndeploy* pTask = (SStreamTaskUndeploy*)taosArrayGet(pRsp->undeploy.taskList, i);
264,206✔
1965
      TAOS_CHECK_EXIT(tDecodeSStreamTaskUndeploy(pDecoder, pTask));
264,206✔
1966
    }
1967
  }  
1968

1969
  int32_t rspNum = 0;
19,687,740✔
1970
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &rspNum));
19,687,740✔
1971
  if (rspNum > 0) {
19,687,740✔
1972
    pRsp->rsps.rspList = taosArrayInit_s(sizeof(SStreamMgmtRsp), rspNum);
21,407✔
1973
    TSDB_CHECK_NULL(pRsp->rsps.rspList, code, lino, _exit, terrno);
21,407✔
1974
    for (int32_t i = 0; i < rspNum; ++i) {
92,213✔
1975
      SStreamMgmtRsp* pMgmtRsp = (SStreamMgmtRsp*)taosArrayGet(pRsp->rsps.rspList, i);
70,806✔
1976
      TAOS_CHECK_EXIT(tDecodeSStreamMgmtRsp(pDecoder, pMgmtRsp));
70,806✔
1977
    }
1978
  }
1979

1980
  tEndDecode(pDecoder);
19,687,740✔
1981

1982
_exit:
19,687,740✔
1983
  return code;
19,687,740✔
1984
}
1985

UNCOV
1986
int32_t tEncodeStreamTaskRunReq (SEncoder* pEncoder, const SStreamTaskRunReq* pReq) {
×
UNCOV
1987
  int32_t code = 0;
×
1988
  int32_t lino;
1989

UNCOV
1990
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
UNCOV
1991
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
UNCOV
1992
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->taskId));
×
UNCOV
1993
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->reqType));
×
UNCOV
1994
  tEndEncode(pEncoder);
×
1995

UNCOV
1996
_exit:
×
UNCOV
1997
  return code;
×
1998
}
1999

UNCOV
2000
int32_t tDecodeStreamTaskRunReq(SDecoder* pDecoder, SStreamTaskRunReq* pReq) {
×
UNCOV
2001
  int32_t code = 0;
×
2002
  int32_t lino;
2003

UNCOV
2004
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
UNCOV
2005
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
UNCOV
2006
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->taskId));
×
UNCOV
2007
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->reqType));
×
UNCOV
2008
  tEndDecode(pDecoder);
×
2009

UNCOV
2010
_exit:
×
UNCOV
2011
  return code;
×
2012
}
2013

UNCOV
2014
int32_t tEncodeStreamTaskStopReq(SEncoder* pEncoder, const SStreamTaskStopReq* pReq) {
×
UNCOV
2015
  int32_t code = 0;
×
2016
  int32_t lino;
2017

UNCOV
2018
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
UNCOV
2019
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
UNCOV
2020
  tEndEncode(pEncoder);
×
2021

UNCOV
2022
_exit:
×
UNCOV
2023
  return code;
×
2024
}
2025

UNCOV
2026
int32_t tDecodeStreamTaskStopReq(SDecoder* pDecoder, SStreamTaskStopReq* pReq) {
×
2027
  int32_t code = 0;
×
2028
  int32_t lino;
2029

UNCOV
2030
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
2031
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
2032
  tEndDecode(pDecoder);
×
2033

2034
_exit:
×
2035
  return code;
×
2036

2037
}
2038

2039

2040
int32_t tSerializeSCMCreateStreamReqImpl(SEncoder* pEncoder, const SCMCreateStreamReq *pReq) {
1,699,916✔
2041
  int32_t code = TSDB_CODE_SUCCESS;
1,699,916✔
2042
  int32_t lino = 0;
1,699,916✔
2043

2044
  char*   json = NULL;
1,699,916✔
2045
  int32_t jsonLen = 0;
1,699,916✔
2046
  TAOS_CHECK_EXIT(scmCreateStreamReqToJson(pReq, false, &json, &jsonLen));
1,699,916✔
2047
  TAOS_CHECK_EXIT(tEncodeCStrWithLen(pEncoder, json, jsonLen));
3,399,832✔
2048

2049
_exit:
1,699,916✔
2050
  taosMemoryFreeClear(json);
1,699,916✔
2051
  if (code) {
1,699,916✔
2052
    return code;
×
2053
  }
2054
  
2055
  return 0;
1,699,916✔
2056
}
2057

2058
int32_t tSerializeSCMCreateStreamReq(void *buf, int32_t bufLen, const SCMCreateStreamReq *pReq) {
789,168✔
2059
  SEncoder encoder = {0};
789,168✔
2060
  tEncoderInit(&encoder, buf, bufLen);
789,168✔
2061
  int32_t code = 0;
789,168✔
2062
  int32_t lino;
2063

2064
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
789,168✔
2065

2066
  TAOS_CHECK_EXIT(tSerializeSCMCreateStreamReqImpl(&encoder, pReq));
789,168✔
2067

2068
  tEndEncode(&encoder);
789,168✔
2069

2070
_exit:
789,168✔
2071
  if (code) {
789,168✔
2072
    tEncoderClear(&encoder);
×
2073
    return code;
×
2074
  } else {
2075
    int32_t tlen = encoder.pos;
789,168✔
2076
    tEncoderClear(&encoder);
789,168✔
2077
    return tlen;
789,168✔
2078
  }
2079
  return 0;
2080
}
2081

2082
// Old version deserialization for backward compatibility,
2083
// especially for stream version number 7
UNCOV
2084
int32_t tDeserializeSCMCreateStreamReqImplOld(SDecoder *pDecoder, SCMCreateStreamReq *pReq, int32_t leftBytes) {
×
UNCOV
2085
  int32_t code = 0;
×
2086
  int32_t lino;
UNCOV
2087
  pReq->calcPkSlotId = -1;
×
UNCOV
2088
  pReq->triPkSlotId = -1;
×
2089

UNCOV
2090
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
2091

UNCOV
2092
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->name, NULL));
×
2093
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->sql, NULL));
×
UNCOV
2094
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->outDB, NULL));
×
UNCOV
2095
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->streamDB, NULL));
×
UNCOV
2096
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerDB, NULL));
×
UNCOV
2097
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerTblName, NULL));
×
UNCOV
2098
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->outTblName, NULL));
×
2099

UNCOV
2100
  int32_t calcDbSize = 0;
×
UNCOV
2101
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &calcDbSize));
×
UNCOV
2102
  pReq->calcDB = taosArrayInit(calcDbSize, POINTER_BYTES);
×
UNCOV
2103
  if (pReq->calcDB == NULL) {
×
UNCOV
2104
    TAOS_CHECK_EXIT(terrno);
×
2105
  }
UNCOV
2106
  for (int32_t i = 0; i < calcDbSize; ++i) {
×
UNCOV
2107
    char *calcDb = NULL;
×
UNCOV
2108
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &calcDb));
×
UNCOV
2109
    calcDb = taosStrndup(calcDb, TSDB_DB_FNAME_LEN);
×
UNCOV
2110
    if (calcDb == NULL) {
×
UNCOV
2111
      TAOS_CHECK_EXIT(terrno);
×
2112
    }
2113
    if (taosArrayPush(pReq->calcDB, &calcDb) == NULL) {
×
2114
      taosMemoryFree(calcDb);
×
UNCOV
2115
      TAOS_CHECK_EXIT(terrno);
×
2116
    }
2117
  }
2118

UNCOV
2119
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igExists));
×
UNCOV
2120
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerType));
×
UNCOV
2121
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igDisorder));
×
UNCOV
2122
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->deleteReCalc));
×
UNCOV
2123
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->deleteOutTbl));
×
UNCOV
2124
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->fillHistory));
×
2125
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->fillHistoryFirst));
×
2126
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->calcNotifyOnly));
×
UNCOV
2127
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->lowLatencyCalc));
×
2128
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igNoDataTrigger));
×
2129

UNCOV
2130
  int32_t addrSize = 0;
×
2131
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
×
UNCOV
2132
  if (addrSize > 0) {
×
2133
    pReq->pNotifyAddrUrls = taosArrayInit(addrSize, POINTER_BYTES);
×
2134
    if (pReq->pNotifyAddrUrls == NULL) {
×
2135
      TAOS_CHECK_EXIT(terrno);
×
2136
    }
2137
  }
2138
  for (int32_t i = 0; i < addrSize; ++i) {
×
2139
    char *url = NULL;
×
UNCOV
2140
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &url));
×
2141
    url = taosStrndup(url, TSDB_STREAM_NOTIFY_URL_LEN);
×
2142
    if (url == NULL) {
×
2143
      TAOS_CHECK_EXIT(terrno);
×
2144
    }
2145
    if (taosArrayPush(pReq->pNotifyAddrUrls, &url) == NULL) {
×
UNCOV
2146
      taosMemoryFree(url);
×
2147
      TAOS_CHECK_EXIT(terrno);
×
2148
    }
2149
  }
2150
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->notifyEventTypes));
×
2151
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->addOptions));
×
2152
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->notifyHistory));
×
2153

2154
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerFilterCols, NULL));
×
2155
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerCols, NULL));
×
2156
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->partitionCols, NULL));
×
2157

UNCOV
2158
  int32_t outColSize = 0;
×
UNCOV
2159
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outColSize));
×
2160
  if (outColSize > 0) {
×
2161
    pReq->outCols = taosArrayInit_s(sizeof(SFieldWithOptions), outColSize);
×
2162
    if (pReq->outCols == NULL) {
×
2163
      TAOS_CHECK_EXIT(terrno);
×
2164
    }
2165

2166
    for (int32_t i = 0; i < outColSize; ++i) {
×
2167
      SFieldWithOptions* pField = taosArrayGet(pReq->outCols, i);
×
2168
      TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pField));
×
2169
    }
2170
  }
2171

2172
  int32_t outTagSize = 0;
×
2173
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outTagSize));
×
2174
  if (outTagSize > 0) {
×
2175
    pReq->outTags = taosArrayInit(outTagSize, sizeof(SFieldWithOptions));
×
2176
    if (pReq->outTags == NULL) {
×
UNCOV
2177
      TAOS_CHECK_EXIT(terrno);
×
2178
    }
2179

2180
    for (int32_t i = 0; i < outTagSize; ++i) {
×
2181
      SFieldWithOptions field = {0};
×
2182
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &field.type));
×
2183
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &field.flags));
×
2184
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &field.bytes));
×
UNCOV
2185
      TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, field.name));
×
2186
      if (taosArrayPush(pReq->outTags, &field) == NULL) {
×
2187
        TAOS_CHECK_EXIT(terrno);
×
2188
      }
2189
    }
2190
  }
2191

2192
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->maxDelay));
×
2193
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->fillHistoryStartTime));
×
UNCOV
2194
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->watermark));
×
2195
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->expiredTime));
×
2196

2197
  switch (pReq->triggerType) {
×
UNCOV
2198
    case WINDOW_TYPE_SESSION: {
×
2199
      // session trigger
2200
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->trigger.session.slotId));
×
2201
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.session.sessionVal));
×
2202
      break;
×
2203
    }
2204
      case WINDOW_TYPE_STATE: {
×
2205
        // state trigger
NEW
2206
        int16_t slotId = -1;
×
NEW
2207
        TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &slotId));
×
NEW
2208
        pReq->trigger.stateWin.pSlotIds = taosArrayInit(1, sizeof(int16_t));
×
NEW
2209
        TSDB_CHECK_NULL(pReq->trigger.stateWin.pSlotIds, code, lino, _exit, terrno);
×
NEW
2210
        TSDB_CHECK_NULL(taosArrayPush(pReq->trigger.stateWin.pSlotIds, &slotId), code, lino, _exit, terrno);
×
2211
        pReq->trigger.stateWin.extend = 0;
×
2212
        pReq->trigger.stateWin.trueForType = 0;
×
2213
        pReq->trigger.stateWin.trueForCount = 0;
×
UNCOV
2214
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.stateWin.trueForDuration));
×
UNCOV
2215
        break;
×
2216
      }
2217
      case WINDOW_TYPE_INTERVAL: {
×
2218
        // slide trigger
2219
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.intervalUnit));
×
2220
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.slidingUnit));
×
2221
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.offsetUnit));
×
2222
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.soffsetUnit));
×
UNCOV
2223
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.precision));
×
UNCOV
2224
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.interval));
×
2225
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.offset));
×
2226
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.sliding));
×
2227
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.soffset));
×
2228
        break;
×
2229
      }
2230
      case WINDOW_TYPE_EVENT: {
×
2231
        // event trigger
2232
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.event.startCond, NULL));
×
UNCOV
2233
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.event.endCond, NULL));
×
UNCOV
2234
        pReq->trigger.event.trueForType = 0;
×
UNCOV
2235
        pReq->trigger.event.trueForCount = 0;
×
UNCOV
2236
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.event.trueForDuration));
×
2237
        break;
×
2238
      }
2239
      case WINDOW_TYPE_COUNT: {
×
2240
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.count.condCols, NULL));
×
2241

2242
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.count.countVal));
×
2243
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.count.sliding));
×
UNCOV
2244
        break;
×
2245
      }
2246
      case WINDOW_TYPE_PERIOD: {
×
2247
        // period trigger
UNCOV
2248
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.precision));
×
2249
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.periodUnit));
×
UNCOV
2250
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.offsetUnit));
×
2251
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.period.period));
×
2252
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.period.offset));
×
2253
        break;
×
2254
      }
2255
      default:
×
2256
        TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
×
2257
  }
2258

2259
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerTblType));
×
2260
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->triggerTblUid));
×
UNCOV
2261
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->triggerTblSuid));
×
2262
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->vtableCalc));
×
UNCOV
2263
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->outTblType));
×
2264
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->outStbExists));
×
2265
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->outStbUid));
×
2266
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->outStbSversion));
×
2267
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->eventTypes));
×
2268
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->flags));
×
2269
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->tsmaId));
×
2270
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->placeHolderBitmap));
×
2271
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->calcTsSlotId));
×
2272
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->triTsSlotId));
×
2273

UNCOV
2274
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->triggerTblVgId));
×
2275
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->outTblVgId));
×
2276

2277
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerScanPlan, NULL));
×
2278

2279
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerHasPF));
×
2280
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerPrevFilter, NULL));
×
2281

2282
  int32_t calcScanPlanListSize = 0;
×
UNCOV
2283
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &calcScanPlanListSize));
×
2284
  if (calcScanPlanListSize > 0) {
×
2285
    pReq->calcScanPlanList = taosArrayInit(calcScanPlanListSize, sizeof(SStreamCalcScan));
×
UNCOV
2286
    if (pReq->calcScanPlanList == NULL) {
×
2287
      TAOS_CHECK_EXIT(terrno);
×
2288
    }
2289
    for (int32_t i = 0; i < calcScanPlanListSize; ++i) {
×
UNCOV
2290
      SStreamCalcScan calcScan = {0};
×
2291
      int32_t         vgListSize = 0;
×
UNCOV
2292
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgListSize));
×
2293
      if (vgListSize > 0) {
×
2294
        calcScan.vgList = taosArrayInit(vgListSize, sizeof(int32_t));
×
2295
        if (calcScan.vgList == NULL) {
×
2296
          TAOS_CHECK_EXIT(terrno);
×
2297
        }
2298
        for (int32_t j = 0; j < vgListSize; ++j) {
×
UNCOV
2299
          int32_t vgId = 0;
×
2300
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgId));
×
2301
          if (taosArrayPush(calcScan.vgList, &vgId) == NULL) {
×
UNCOV
2302
            TAOS_CHECK_EXIT(terrno);
×
2303
          }
2304
        }
2305
      }
2306
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &calcScan.readFromCache));
×
2307
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&calcScan.scanPlan, NULL));
×
2308
      if (taosArrayPush(pReq->calcScanPlanList, &calcScan) == NULL) {
×
2309
        TAOS_CHECK_EXIT(terrno);
×
2310
      }
2311
    }
2312
  }
2313

2314
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->numOfCalcSubplan));
×
2315
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->calcPlan, NULL));
×
2316
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->subTblNameExpr, NULL));
×
2317
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->tagValueExpr, NULL));
×
2318

2319
  int32_t forceOutColsSize = 0;
×
2320
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &forceOutColsSize));
×
UNCOV
2321
  if (forceOutColsSize > 0) {
×
2322
    pReq->forceOutCols = taosArrayInit(forceOutColsSize, sizeof(SStreamOutCol));
×
UNCOV
2323
    if (pReq->forceOutCols == NULL) {
×
2324
      TAOS_CHECK_EXIT(terrno);
×
2325
    }
UNCOV
2326
    for (int32_t i = 0; i < forceOutColsSize; ++i) {
×
2327
      SStreamOutCol outCol = {0};
×
2328
      int64_t       exprLen = 0;
×
2329
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&outCol.expr, &exprLen));
×
2330
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.type));
×
2331
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.precision));
×
2332
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.scale));
×
UNCOV
2333
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outCol.type.bytes));
×
2334
      if (taosArrayPush(pReq->forceOutCols, &outCol) == NULL) {
×
2335
        TAOS_CHECK_EXIT(terrno);
×
2336
      }
2337
    }
2338
  }
2339

2340
  // LeftBytes is the size of all fields at the tail of SStreamObj.
2341
  // If there are more data in the buffer, then it means
2342
  // the new fields are added in SStreamObj, need to decode them.
2343
  if (pDecoder->size - pDecoder->pos > leftBytes) {
×
2344
    switch (pReq->triggerType) {
×
2345
      case WINDOW_TYPE_STATE: {
×
2346
        // state trigger
2347
        if (!tDecodeIsEnd(pDecoder)) {
×
UNCOV
2348
          TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.stateWin.expr, NULL));
×
2349
        }
UNCOV
2350
        if (!tDecodeIsEnd(pDecoder)) {
×
2351
          TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->trigger.stateWin.extend));
×
2352
        }
2353
        break;
×
2354
      }
UNCOV
2355
      case WINDOW_TYPE_INTERVAL: {
×
UNCOV
2356
        if (!tDecodeIsEnd(pDecoder)) {
×
UNCOV
2357
          TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.overlap));
×
2358
        }
2359
        break;
×
2360
      }
2361
      default:
×
2362
        break;
×
2363
    }
2364
  }
2365

2366
  if (pDecoder->size - pDecoder->pos > leftBytes) {
×
2367
    if (!tDecodeIsEnd(pDecoder)) {
×
2368
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pReq->triggerPrec));
×
2369
    }
2370
  }
2371

2372
_exit:
×
2373

2374
  return code;
×
2375
}
2376

2377
// New deserialization using JSON
2378
// start from taosd ver-3.3.8.6, stream version number 8
2379
int32_t tDeserializeSCMCreateStreamReqImpl(SDecoder *pDecoder, SCMCreateStreamReq *pReq) {
525,905✔
2380
  int32_t code = 0;
525,905✔
2381
  int32_t lino;
2382

2383
  char* json = NULL;
525,905✔
2384
  SJson* pJson = NULL;
525,905✔
2385
  TAOS_CHECK_EXIT(tDecodeCStrAlloc(pDecoder, &json));
525,905✔
2386
  pJson = tjsonParse(json);
525,905✔
2387
  if (pJson == NULL) {
525,905✔
2388
    TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INVALID_JSON);
×
2389
  }
2390
  TAOS_CHECK_EXIT(jsonToSCMCreateStreamReq(pJson, pReq));
525,905✔
2391

2392
_exit:
525,905✔
2393
  taosMemoryFreeClear(json);
525,905✔
2394
  if (NULL != pJson) {
525,905✔
2395
    tjsonDelete(pJson);
525,905✔
2396
  }
2397

2398
  return code;
525,905✔
2399
}
2400

2401

2402
int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStreamReq *pReq) {
259,632✔
2403
  SDecoder decoder = {0};
259,632✔
2404
  tDecoderInit(&decoder, buf, bufLen);
259,632✔
2405
  int32_t code = 0;
259,632✔
2406
  int32_t lino;
2407

2408
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
259,632✔
2409
  
2410
  code = tDeserializeSCMCreateStreamReqImpl(&decoder, pReq);
259,632✔
2411
  if (TSDB_CODE_MND_STREAM_INVALID_JSON == code) {
259,632✔
2412
    uError("invalid json for stream create request, try old deserialization");
×
2413
    // try old deserialization for backward compatibility
UNCOV
2414
    tDecoderClear(&decoder);
×
UNCOV
2415
    tDecoderInit(&decoder, buf, bufLen);
×
UNCOV
2416
    TAOS_CHECK_EXIT(tStartDecode(&decoder));
×
2417
    TAOS_CHECK_EXIT(tDeserializeSCMCreateStreamReqImplOld(&decoder, pReq, 0));
×
2418
  }
2419

2420
  tEndDecode(&decoder);
259,632✔
2421

2422
_exit:
259,632✔
2423

2424
  tDecoderClear(&decoder);
259,632✔
2425
  return code;
259,632✔
2426
}
2427

2428

2429
int32_t tSerializeSMDropStreamReq(void *buf, int32_t bufLen, const SMDropStreamReq *pReq) {
53,578✔
2430
  int32_t  code = 0;
53,578✔
2431
  int32_t  lino;
2432
  int32_t  tlen;
2433
  SEncoder encoder = {0};
53,578✔
2434
  tEncoderInit(&encoder, buf, bufLen);
53,578✔
2435

2436
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
53,578✔
2437

2438
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->count));
107,156✔
2439
  for (int32_t i = 0; i < pReq->count; i++) {
113,660✔
2440
    int32_t nameLen = pReq->name[i] == NULL ? 0 : (int32_t)strlen(pReq->name[i]) + 1;
60,082✔
2441
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name[i], nameLen));
120,164✔
2442
  }
2443
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
107,156✔
2444

2445
  tEndEncode(&encoder);
53,578✔
2446

2447
_exit:
53,578✔
2448
  if (code) {
53,578✔
UNCOV
2449
    tlen = code;
×
2450
  } else {
2451
    tlen = encoder.pos;
53,578✔
2452
  }
2453
  tEncoderClear(&encoder);
53,578✔
2454
  return tlen;
53,578✔
2455
}
2456

2457
int32_t tDeserializeSMDropStreamReq(void *buf, int32_t bufLen, SMDropStreamReq *pReq) {
21,001✔
2458
  SDecoder decoder = {0};
21,001✔
2459
  int32_t  code = 0;
21,001✔
2460
  int32_t  lino;
2461
  tDecoderInit(&decoder, buf, bufLen);
21,001✔
2462

2463
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
21,001✔
2464
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->count));
42,002✔
2465
  if (pReq->count > 0) {
21,001✔
2466
    pReq->name = taosMemoryCalloc(pReq->count, sizeof(char*));
21,001✔
2467
    if (pReq->name == NULL) {
21,001✔
UNCOV
2468
      code = terrno;
×
UNCOV
2469
      goto _exit;
×
2470
    }
2471
    for (int32_t i = 0; i < pReq->count; i++) {
45,242✔
2472
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name[i], NULL));
48,482✔
2473
    }
2474
  }
2475
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
42,002✔
2476

2477
  tEndDecode(&decoder);
21,001✔
2478

2479
_exit:
21,001✔
2480
  tDecoderClear(&decoder);
21,001✔
2481
  return code;
21,001✔
2482
}
2483

2484
void tFreeMDropStreamReq(SMDropStreamReq *pReq) {
48,552✔
2485
  if (NULL == pReq) {
48,552✔
UNCOV
2486
    return;
×
2487
  }
2488
  if (pReq->name) {
48,552✔
2489
    for (int32_t i = 0; i < pReq->count; i++) {
103,596✔
2490
      taosMemoryFreeClear(pReq->name[i]);
55,044✔
2491
    }
2492
    taosMemoryFreeClear(pReq->name);
48,552✔
2493
  }
2494
}
2495

2496
static FORCE_INLINE void tFreeStreamCalcScan(void* pScan) {
2,404,711✔
2497
  if (pScan == NULL) {
2,404,711✔
UNCOV
2498
    return;
×
2499
  }
2500
  SStreamCalcScan *pCalcScan = (SStreamCalcScan *)pScan;
2,404,711✔
2501
  taosArrayDestroy(pCalcScan->vgList);
2,404,711✔
2502
  taosMemoryFreeClear(pCalcScan->scanPlan);
2,404,711✔
2503
}
2504

2505
void tFreeStreamOutCol(void* pCol) {
78,541✔
2506
  if (pCol == NULL) {
78,541✔
UNCOV
2507
    return;
×
2508
  }
2509
  SStreamOutCol *pOutCol = (SStreamOutCol *)pCol;
78,541✔
2510
  taosMemoryFreeClear(pOutCol->expr);
78,541✔
2511
}
2512

2513

2514

2515
void tFreeSCMCreateStreamReq(SCMCreateStreamReq *pReq) {
1,480,364✔
2516
  if (NULL == pReq) {
1,480,364✔
2517
    return;
232,110✔
2518
  }
2519
  taosMemoryFreeClear(pReq->name);
1,248,254✔
2520
  taosMemoryFreeClear(pReq->sql);
1,248,254✔
2521
  taosMemoryFreeClear(pReq->streamDB);
1,248,254✔
2522
  taosMemoryFreeClear(pReq->triggerDB);
1,248,254✔
2523
  taosMemoryFreeClear(pReq->outDB);
1,248,254✔
2524
  taosMemoryFreeClear(pReq->triggerTblName);
1,248,254✔
2525
  taosMemoryFreeClear(pReq->outTblName);
1,248,254✔
2526

2527
  taosArrayDestroyP(pReq->calcDB, NULL);
1,248,254✔
2528
  pReq->calcDB = NULL;
1,248,254✔
2529
  taosArrayDestroyP(pReq->pNotifyAddrUrls, NULL);
1,248,254✔
2530
  pReq->pNotifyAddrUrls = NULL;
1,248,254✔
2531

2532
  taosMemoryFreeClear(pReq->triggerFilterCols);
1,248,254✔
2533
  taosMemoryFreeClear(pReq->triggerCols);
1,248,254✔
2534
  taosMemoryFreeClear(pReq->partitionCols);
1,248,254✔
2535

2536
  taosArrayDestroy(pReq->outTags);
1,248,254✔
2537
  pReq->outTags = NULL;
1,248,254✔
2538
  taosArrayDestroy(pReq->outCols);
1,248,254✔
2539
  pReq->outCols = NULL;
1,248,254✔
2540

2541
  switch (pReq->triggerType) {
1,248,254✔
2542
    case WINDOW_TYPE_STATE:
386,648✔
2543
      taosArrayDestroy(pReq->trigger.stateWin.pSlotIds);
386,648✔
2544
      pReq->trigger.stateWin.pSlotIds = NULL;
386,648✔
2545
      taosMemoryFreeClear(pReq->trigger.stateWin.zeroth);
386,648✔
2546
      taosMemoryFreeClear(pReq->trigger.stateWin.expr);
386,648✔
2547
      break;
386,648✔
2548
    case WINDOW_TYPE_EVENT:
115,814✔
2549
      taosMemoryFreeClear(pReq->trigger.event.startCond);
115,814✔
2550
      taosMemoryFreeClear(pReq->trigger.event.endCond);
115,814✔
2551
      break;
115,814✔
2552
    default:
745,792✔
2553
      break;
745,792✔
2554
  }
2555

2556
  taosMemoryFreeClear(pReq->triggerScanPlan);
1,248,254✔
2557
  taosArrayDestroyEx(pReq->calcScanPlanList, tFreeStreamCalcScan);
1,248,254✔
2558
  pReq->calcScanPlanList = NULL;
1,248,254✔
2559
  taosMemoryFreeClear(pReq->triggerPrevFilter);
1,248,254✔
2560

2561
  taosMemoryFreeClear(pReq->calcPlan);
1,248,254✔
2562
  taosMemoryFreeClear(pReq->subTblNameExpr);
1,248,254✔
2563
  taosMemoryFreeClear(pReq->tagValueExpr);
1,248,254✔
2564
  taosArrayDestroyEx(pReq->forceOutCols, tFreeStreamOutCol);
1,248,254✔
2565
  pReq->forceOutCols = NULL;
1,248,254✔
2566
  taosArrayDestroy(pReq->colCids);
1,248,254✔
2567
  pReq->colCids = NULL;
1,248,254✔
2568
  taosArrayDestroy(pReq->tagCids);
1,248,254✔
2569
  pReq->tagCids = NULL;
1,248,254✔
2570
}
2571

2572
int32_t tCloneStreamCreateDeployPointers(SCMCreateStreamReq *pSrc, SCMCreateStreamReq** ppDst) {
221,613✔
2573
  int32_t code = 0, lino = 0;
221,613✔
2574
  if (NULL == pSrc) {
221,613✔
UNCOV
2575
    return code;
×
2576
  } 
2577

2578
  void* p = NULL;
221,613✔
2579
  int32_t num = 0;
221,613✔
2580
  *ppDst = taosMemoryCalloc(1, sizeof(SCMCreateStreamReq));
221,613✔
2581
  TSDB_CHECK_NULL(*ppDst, code, lino, _exit, terrno);
221,613✔
2582

2583
  SCMCreateStreamReq* pDst = *ppDst;
221,613✔
2584

2585
  if (pSrc->outDB) {
221,613✔
2586
    pDst->outDB = COPY_STR(pSrc->outDB);
218,194✔
2587
    TSDB_CHECK_NULL(pDst->outDB, code, lino, _exit, terrno);
218,194✔
2588
  }
2589
  
2590
  if (pSrc->triggerTblName) {
221,613✔
2591
    pDst->triggerTblName = COPY_STR(pSrc->triggerTblName);
217,287✔
2592
    TSDB_CHECK_NULL(pDst->triggerTblName, code, lino, _exit, terrno);
217,287✔
2593
  }
2594
  
2595
  if (pSrc->outTblName) {
221,613✔
2596
    pDst->outTblName = COPY_STR(pSrc->outTblName);
218,194✔
2597
    TSDB_CHECK_NULL(pDst->outTblName, code, lino, _exit, terrno);
218,194✔
2598
  }
2599
  
2600
  if (pSrc->pNotifyAddrUrls) {
221,613✔
2601
    num = taosArrayGetSize(pSrc->pNotifyAddrUrls);
57,012✔
2602
    if (num > 0) {
57,012✔
2603
      pDst->pNotifyAddrUrls = taosArrayInit(num, POINTER_BYTES);
57,012✔
2604
      TSDB_CHECK_NULL(pDst->pNotifyAddrUrls, code, lino, _exit, terrno);
57,012✔
2605
    }
2606
    for (int32_t i = 0; i < num; ++i) {
114,024✔
2607
      p = taosStrdup(taosArrayGetP(pSrc->pNotifyAddrUrls, i));
57,012✔
2608
      TSDB_CHECK_NULL(p, code, lino, _exit, terrno);
57,012✔
2609
      TSDB_CHECK_NULL(taosArrayPush(pDst->pNotifyAddrUrls, &p), code, lino, _exit, terrno);
114,024✔
2610
    }
2611
  }
2612
  
2613
  if (pSrc->triggerFilterCols) {
221,613✔
2614
    pDst->triggerFilterCols = COPY_STR(pSrc->triggerFilterCols);
18,017✔
2615
    TSDB_CHECK_NULL(pDst->triggerFilterCols, code, lino, _exit, terrno);
18,017✔
2616
  }
2617
  
2618
  if (pSrc->triggerCols) {
221,613✔
2619
    pDst->triggerCols = COPY_STR(pSrc->triggerCols);
211,008✔
2620
    TSDB_CHECK_NULL(pDst->triggerCols, code, lino, _exit, terrno);
211,008✔
2621
  }
2622
  
2623
  if (pSrc->partitionCols) {
221,613✔
2624
    pDst->partitionCols = COPY_STR(pSrc->partitionCols);
77,696✔
2625
    TSDB_CHECK_NULL(pDst->partitionCols, code, lino, _exit, terrno);
77,696✔
2626
  }
2627
  
2628
  if (pSrc->outCols) {
221,613✔
2629
    pDst->outCols = taosArrayDup(pSrc->outCols, NULL);
218,194✔
2630
    TSDB_CHECK_NULL(pDst->outCols, code, lino, _exit, terrno);
218,194✔
2631
  }
2632
  
2633
  if (pSrc->outTags) {
221,613✔
2634
    pDst->outTags = taosArrayDup(pSrc->outTags, NULL);
77,696✔
2635
    TSDB_CHECK_NULL(pDst->outTags, code, lino, _exit, terrno);
77,696✔
2636
  }
2637

2638
  pDst->triggerType = pSrc->triggerType;
221,613✔
2639
  
2640
  switch (pSrc->triggerType) {
221,613✔
2641
    case WINDOW_TYPE_STATE:
83,496✔
2642
      if (pSrc->trigger.stateWin.pSlotIds) {
83,496✔
2643
        pDst->trigger.stateWin.pSlotIds = taosArrayDup(pSrc->trigger.stateWin.pSlotIds, NULL);
83,496✔
2644
        TSDB_CHECK_NULL(pDst->trigger.stateWin.pSlotIds, code, lino, _exit, terrno);
83,496✔
2645
      }
2646
      pDst->trigger.stateWin.extend = pSrc->trigger.stateWin.extend;
83,496✔
2647
      pDst->trigger.stateWin.trueForType = pSrc->trigger.stateWin.trueForType;
83,496✔
2648
      pDst->trigger.stateWin.trueForCount = pSrc->trigger.stateWin.trueForCount;
83,496✔
2649
      pDst->trigger.stateWin.trueForDuration = pSrc->trigger.stateWin.trueForDuration;
83,496✔
2650
      if (pSrc->trigger.stateWin.zeroth) {
83,496✔
2651
        pDst->trigger.stateWin.zeroth = COPY_STR(pSrc->trigger.stateWin.zeroth);
4,938✔
2652
        TSDB_CHECK_NULL(pDst->trigger.stateWin.zeroth, code, lino, _exit, terrno);
4,938✔
2653
      }
2654
      if (pSrc->trigger.stateWin.expr) {
83,496✔
2655
        pDst->trigger.stateWin.expr = COPY_STR(pSrc->trigger.stateWin.expr);
83,496✔
2656
        TSDB_CHECK_NULL(pDst->trigger.stateWin.expr, code, lino, _exit, terrno);
83,496✔
2657
      }
2658
      break;
83,496✔
2659
    case WINDOW_TYPE_EVENT:
24,025✔
2660
      if (pSrc->trigger.event.startCond) {
24,025✔
2661
        pDst->trigger.event.startCond = COPY_STR(pSrc->trigger.event.startCond);
24,025✔
2662
        TSDB_CHECK_NULL(pDst->trigger.event.startCond, code, lino, _exit, terrno);
24,025✔
2663
      }
2664
      
2665
      if (pSrc->trigger.event.endCond) {
24,025✔
2666
        pDst->trigger.event.endCond = COPY_STR(pSrc->trigger.event.endCond);
21,945✔
2667
        TSDB_CHECK_NULL(pDst->trigger.event.endCond, code, lino, _exit, terrno);
21,945✔
2668
      }
2669
      pDst->trigger.event.trueForType = pSrc->trigger.event.trueForType;
24,025✔
2670
      pDst->trigger.event.trueForCount = pSrc->trigger.event.trueForCount;
24,025✔
2671
      pDst->trigger.event.trueForDuration = pSrc->trigger.event.trueForDuration;
24,025✔
2672
      break;
24,025✔
2673
    case WINDOW_TYPE_COUNT:
23,072✔
2674
      pDst->trigger.count.countVal = pSrc->trigger.count.countVal;
23,072✔
2675
      pDst->trigger.count.sliding = pSrc->trigger.count.sliding;
23,072✔
2676
      if (pSrc->trigger.count.condCols) {
23,072✔
UNCOV
2677
        pDst->trigger.count.condCols = COPY_STR(pSrc->trigger.count.condCols);
×
UNCOV
2678
        TSDB_CHECK_NULL(pDst->trigger.count.condCols, code, lino, _exit, terrno);
×
2679
      }
2680
      break;
23,072✔
2681
    default:
91,020✔
2682
      pDst->trigger = pSrc->trigger;
91,020✔
2683
      break;
91,020✔
2684
  }
2685

2686

2687
  if (pSrc->triggerScanPlan) {
221,613✔
2688
    pDst->triggerScanPlan = COPY_STR(pSrc->triggerScanPlan);
217,287✔
2689
    TSDB_CHECK_NULL(pDst->triggerScanPlan, code, lino, _exit, terrno);
217,287✔
2690
  }
2691
  
2692
  if (pSrc->calcScanPlanList) {
221,613✔
2693
    num = taosArrayGetSize(pSrc->calcScanPlanList);
218,194✔
2694
    if (num > 0) {
218,194✔
2695
      pDst->calcScanPlanList = taosArrayInit(num, sizeof(SStreamCalcScan));
218,194✔
2696
      TSDB_CHECK_NULL(pDst->calcScanPlanList, code, lino, _exit, terrno);
218,194✔
2697
    }
2698
    for (int32_t i = 0; i < num; ++i) {
705,035✔
2699
      SStreamCalcScan* sscan = taosArrayGet(pSrc->calcScanPlanList, i);
486,841✔
2700
      SStreamCalcScan  dscan = {.readFromCache = sscan->readFromCache};
486,841✔
2701

2702
      dscan.vgList = taosArrayDup(sscan->vgList, NULL);
486,841✔
2703
      TSDB_CHECK_NULL(dscan.vgList, code, lino, _exit, terrno);
486,841✔
2704

2705
      dscan.scanPlan = COPY_STR(sscan->scanPlan);
486,841✔
2706
      TSDB_CHECK_NULL(dscan.scanPlan, code, lino, _exit, terrno);
486,841✔
2707
      
2708
      TSDB_CHECK_NULL(taosArrayPush(pDst->calcScanPlanList, &dscan), code, lino, _exit, terrno);
973,682✔
2709
    }
2710
  }
2711
  
2712
  if (pSrc->triggerPrevFilter) {
221,613✔
2713
    pDst->triggerPrevFilter = COPY_STR(pSrc->triggerPrevFilter);
7,940✔
2714
    TSDB_CHECK_NULL(pDst->triggerPrevFilter, code, lino, _exit, terrno);
7,940✔
2715
  }
2716
  
2717
  if (pSrc->calcPlan) {
221,613✔
2718
    pDst->calcPlan = COPY_STR(pSrc->calcPlan);
218,194✔
2719
    TSDB_CHECK_NULL(pDst->calcPlan, code, lino, _exit, terrno);
218,194✔
2720
  }
2721
  
2722
  if (pSrc->subTblNameExpr) {
221,613✔
2723
    pDst->subTblNameExpr = COPY_STR(pSrc->subTblNameExpr);
77,696✔
2724
    TSDB_CHECK_NULL(pDst->subTblNameExpr, code, lino, _exit, terrno);
77,696✔
2725
  }
2726
  
2727
  if (pSrc->tagValueExpr) {
221,613✔
2728
    pDst->tagValueExpr = COPY_STR(pSrc->tagValueExpr);
77,696✔
2729
    TSDB_CHECK_NULL(pDst->tagValueExpr, code, lino, _exit, terrno);
77,696✔
2730
  }
2731
  
2732
  if (pSrc->forceOutCols) {
221,613✔
2733
    num = taosArrayGetSize(pSrc->forceOutCols);
3,432✔
2734
    if (num > 0) {
3,432✔
2735
      pDst->forceOutCols = taosArrayInit(num, sizeof(SStreamOutCol));
3,432✔
2736
      TSDB_CHECK_NULL(pDst->forceOutCols, code, lino, _exit, terrno);
3,432✔
2737
    }
2738
    for (int32_t i = 0; i < num; ++i) {
22,736✔
2739
      SStreamOutCol* scol = taosArrayGet(pSrc->forceOutCols, i);
19,304✔
2740
      SStreamOutCol  dcol = {.type = scol->type};
19,304✔
2741

2742
      dcol.expr = COPY_STR(scol->expr);
19,304✔
2743
      TSDB_CHECK_NULL(dcol.expr, code, lino, _exit, terrno);
19,304✔
2744
      
2745
      TSDB_CHECK_NULL(taosArrayPush(pDst->forceOutCols, &dcol), code, lino, _exit, terrno);
38,608✔
2746
    }
2747
  }
2748

2749
  if (pSrc->colCids) {
221,613✔
2750
    pDst->colCids = taosArrayDup(pSrc->colCids, NULL);
4,373✔
2751
    TSDB_CHECK_NULL(pDst->colCids, code, lino, _exit, terrno);
4,373✔
2752
  }
2753

2754
  if (pSrc->tagCids) {
221,613✔
2755
    pDst->tagCids = taosArrayDup(pSrc->tagCids, NULL);
3,525✔
2756
    TSDB_CHECK_NULL(pDst->tagCids, code, lino, _exit, terrno);
3,525✔
2757
  }
2758

2759
  pDst->triggerTblUid = pSrc->triggerTblUid;
221,613✔
2760
  pDst->triggerTblSuid = pSrc->triggerTblSuid;
221,613✔
2761
  pDst->triggerTblType = pSrc->triggerTblType;
221,613✔
2762
  pDst->triggerPrec = pSrc->triggerPrec;
221,613✔
2763
  pDst->deleteReCalc = pSrc->deleteReCalc;
221,613✔
2764
  pDst->deleteOutTbl = pSrc->deleteOutTbl;
221,613✔
2765
  pDst->flags = pSrc->flags;
221,613✔
2766
  
2767
_exit:
221,613✔
2768

2769
  if (code) {
221,613✔
UNCOV
2770
    tFreeSCMCreateStreamReq(pDst);
×
UNCOV
2771
    uError("%s failed at line %d since %s", __FUNCTION__, lino, tstrerror(code));
×
2772
  }
2773

2774
  return code;
221,613✔
2775
}
2776

2777

2778
int32_t tSerializeSMPauseStreamReq(void *buf, int32_t bufLen, const SMPauseStreamReq *pReq) {
6,572✔
2779
  int32_t  code = 0;
6,572✔
2780
  int32_t  lino;
2781
  int32_t  tlen;
2782
  SEncoder encoder = {0};
6,572✔
2783
  tEncoderInit(&encoder, buf, bufLen);
6,572✔
2784
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
6,572✔
2785

2786
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
6,572✔
2787
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
13,144✔
2788
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
13,144✔
2789
  tEndEncode(&encoder);
6,572✔
2790

2791
_exit:
6,572✔
2792
  if (code) {
6,572✔
UNCOV
2793
    tlen = code;
×
2794
  } else {
2795
    tlen = encoder.pos;
6,572✔
2796
  }
2797
  tEncoderClear(&encoder);
6,572✔
2798
  return tlen;
6,572✔
2799
}
2800

2801
int32_t tDeserializeSMPauseStreamReq(void *buf, int32_t bufLen, SMPauseStreamReq *pReq) {
2,919✔
2802
  SDecoder decoder = {0};
2,919✔
2803
  int32_t  code = 0;
2,919✔
2804
  int32_t  lino;
2805

2806
  tDecoderInit(&decoder, buf, bufLen);
2,919✔
2807
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
2,919✔
2808
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
5,838✔
2809
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
5,838✔
2810
  tEndDecode(&decoder);
2,919✔
2811

2812
_exit:
2,919✔
2813
  tDecoderClear(&decoder);
2,919✔
2814
  return code;
2,919✔
2815
}
2816

2817
void tFreeMPauseStreamReq(SMPauseStreamReq *pReq) {
3,286✔
2818
  taosMemoryFreeClear(pReq->name);
3,286✔
2819
}
3,286✔
2820

2821
int32_t tSerializeSMResumeStreamReq(void *buf, int32_t bufLen, const SMResumeStreamReq *pReq) {
5,820✔
2822
  SEncoder encoder = {0};
5,820✔
2823
  int32_t  code = 0;
5,820✔
2824
  int32_t  lino;
2825
  int32_t  tlen;
2826
  tEncoderInit(&encoder, buf, bufLen);
5,820✔
2827
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
5,820✔
2828
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
5,820✔
2829
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
11,640✔
2830
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
11,640✔
2831
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igUntreated));
11,640✔
2832
  tEndEncode(&encoder);
5,820✔
2833

2834
_exit:
5,820✔
2835
  if (code) {
5,820✔
UNCOV
2836
    tlen = code;
×
2837
  } else {
2838
    tlen = encoder.pos;
5,820✔
2839
  }
2840
  tEncoderClear(&encoder);
5,820✔
2841
  return tlen;
5,820✔
2842
}
2843

2844
int32_t tDeserializeSMResumeStreamReq(void *buf, int32_t bufLen, SMResumeStreamReq *pReq) {
2,543✔
2845
  SDecoder decoder = {0};
2,543✔
2846
  int32_t  code = 0;
2,543✔
2847
  int32_t  lino;
2848

2849
  tDecoderInit(&decoder, buf, bufLen);
2,543✔
2850
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
2,543✔
2851
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
5,086✔
2852
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
5,086✔
2853
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igUntreated));
5,086✔
2854
  tEndDecode(&decoder);
2,543✔
2855

2856
_exit:
2,543✔
2857
  tDecoderClear(&decoder);
2,543✔
2858
  return code;
2,543✔
2859
}
2860

2861
void tFreeMResumeStreamReq(SMResumeStreamReq *pReq) {
2,910✔
2862
  taosMemoryFreeClear(pReq->name);
2,910✔
2863
}
2,910✔
2864

2865
int32_t tSerializeSMRecalcStreamReq(void *buf, int32_t bufLen, const SMRecalcStreamReq *pReq) {
26,352✔
2866
  SEncoder encoder = {0};
26,352✔
2867
  int32_t  code = 0;
26,352✔
2868
  int32_t  lino;
2869
  int32_t  tlen;
2870
  tEncoderInit(&encoder, buf, bufLen);
26,352✔
2871
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
26,352✔
2872
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
26,352✔
2873
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
52,704✔
2874
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->calcAll));
52,704✔
2875
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->timeRange.skey));
52,704✔
2876
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->timeRange.ekey));
52,704✔
2877
  tEndEncode(&encoder);
26,352✔
2878

2879
_exit:
26,352✔
2880
  if (code) {
26,352✔
UNCOV
2881
    tlen = code;
×
2882
  } else {
2883
    tlen = encoder.pos;
26,352✔
2884
  }
2885
  tEncoderClear(&encoder);
26,352✔
2886
  return tlen;
26,352✔
2887
}
2888

2889
int32_t tDeserializeSMRecalcStreamReq(void *buf, int32_t bufLen, SMRecalcStreamReq *pReq) {
12,176✔
2890
  SDecoder decoder = {0};
12,176✔
2891
  int32_t  code = 0;
12,176✔
2892
  int32_t  lino;
2893

2894
  tDecoderInit(&decoder, buf, bufLen);
12,176✔
2895
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
12,176✔
2896

2897
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
24,352✔
2898
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->calcAll));
24,352✔
2899
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->timeRange.skey));
24,352✔
2900
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->timeRange.ekey));
24,352✔
2901
  tEndDecode(&decoder);
12,176✔
2902

2903
_exit:
12,176✔
2904
  tDecoderClear(&decoder);
12,176✔
2905
  return code;
12,176✔
2906
}
2907

2908
void tFreeMRecalcStreamReq(SMRecalcStreamReq *pReq) {
25,352✔
2909
  taosMemoryFreeClear(pReq->name);
25,352✔
2910
}
25,352✔
2911

2912
static int32_t tEncodeStreamProgressReq(SEncoder *pEncoder, const SStreamProgressReq *pReq) {
11,938✔
2913
  int32_t code = 0;
11,938✔
2914
  int32_t lino;
2915

2916
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
23,876✔
2917
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->taskId));
23,876✔
2918
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->fetchIdx));
23,876✔
2919

2920
_exit:
11,938✔
2921
  return code;
11,938✔
2922
}
2923

2924
int32_t tSerializeStreamProgressReq(void *buf, int32_t bufLen, const SStreamProgressReq *pReq) {
11,938✔
2925
  SEncoder encoder = {0};
11,938✔
2926
  int32_t  code = 0;
11,938✔
2927
  int32_t  lino;
2928
  int32_t  tlen;
2929
  tEncoderInit(&encoder, buf, bufLen);
11,938✔
2930

2931
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
11,938✔
2932
  TAOS_CHECK_EXIT(tEncodeStreamProgressReq(&encoder, pReq));
11,938✔
2933

2934
  tEndEncode(&encoder);
11,938✔
2935

2936
_exit:
11,938✔
2937
  if (code) {
11,938✔
UNCOV
2938
    tlen = code;
×
2939
  } else {
2940
    tlen = encoder.pos;
11,938✔
2941
  }
2942
  tEncoderClear(&encoder);
11,938✔
2943
  return tlen;
11,938✔
2944
}
2945

2946
static int32_t tDecodeStreamProgressReq(SDecoder *pDecoder, SStreamProgressReq *pReq) {
9,750✔
2947
  int32_t code = 0;
9,750✔
2948
  int32_t lino;
2949

2950
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
19,500✔
2951
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->taskId));
19,500✔
2952
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->fetchIdx));
19,500✔
2953

2954
_exit:
9,750✔
2955
  return code;
9,750✔
2956
}
2957

2958
int32_t tDeserializeStreamProgressReq(void *buf, int32_t bufLen, SStreamProgressReq *pReq) {
9,750✔
2959
  SDecoder decoder = {0};
9,750✔
2960
  int32_t  code = 0;
9,750✔
2961
  int32_t  lino;
2962

2963
  tDecoderInit(&decoder, (char *)buf, bufLen);
9,750✔
2964

2965
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
9,750✔
2966
  TAOS_CHECK_EXIT(tDecodeStreamProgressReq(&decoder, pReq));
9,750✔
2967

2968
  tEndDecode(&decoder);
9,750✔
2969

2970
_exit:
9,750✔
2971
  tDecoderClear(&decoder);
9,750✔
2972
  return code;
9,750✔
2973
}
2974

2975
static int32_t tEncodeStreamProgressRsp(SEncoder *pEncoder, const SStreamProgressRsp *pRsp) {
11,750✔
2976
  int32_t code = 0;
11,750✔
2977
  int32_t lino;
2978

2979
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->streamId));
23,500✔
2980
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pRsp->fillHisFinished));
23,500✔
2981
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->progressDelay));
23,500✔
2982
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->fetchIdx));
23,500✔
2983

2984
_exit:
11,750✔
2985
  return code;
11,750✔
2986
}
2987

2988
int32_t tSerializeStreamProgressRsp(void *buf, int32_t bufLen, const SStreamProgressRsp *pRsp) {
11,750✔
2989
  SEncoder encoder = {0};
11,750✔
2990
  int32_t  code = 0;
11,750✔
2991
  int32_t  lino;
2992
  int32_t  tlen;
2993
  tEncoderInit(&encoder, buf, bufLen);
11,750✔
2994

2995
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
11,750✔
2996
  TAOS_CHECK_EXIT(tEncodeStreamProgressRsp(&encoder, pRsp));
11,750✔
2997

2998
  tEndEncode(&encoder);
11,750✔
2999

3000
_exit:
11,750✔
3001
  if (code) {
11,750✔
UNCOV
3002
    tlen = code;
×
3003
  } else {
3004
    tlen = encoder.pos;
11,750✔
3005
  }
3006
  tEncoderClear(&encoder);
11,750✔
3007
  return tlen;
11,750✔
3008
}
3009

3010
static int32_t tDecodeStreamProgressRsp(SDecoder *pDecoder, SStreamProgressRsp *pRsp) {
5,969✔
3011
  int32_t code = 0;
5,969✔
3012
  int32_t lino;
3013

3014
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->streamId));
11,938✔
3015
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, (int8_t *)&pRsp->fillHisFinished));
11,938✔
3016
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->progressDelay));
11,938✔
3017
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->fetchIdx));
11,938✔
3018

3019
_exit:
5,969✔
3020
  return code;
5,969✔
3021
}
3022

3023
int32_t tDeserializeSStreamProgressRsp(void *buf, int32_t bufLen, SStreamProgressRsp *pRsp) {
5,969✔
3024
  SDecoder decoder = {0};
5,969✔
3025
  int32_t  code = 0;
5,969✔
3026
  int32_t  lino;
3027

3028
  tDecoderInit(&decoder, buf, bufLen);
5,969✔
3029

3030
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
5,969✔
3031
  TAOS_CHECK_EXIT(tDecodeStreamProgressRsp(&decoder, pRsp));
5,969✔
3032

3033
  tEndDecode(&decoder);
5,969✔
3034

3035
_exit:
5,969✔
3036
  tDecoderClear(&decoder);
5,969✔
3037
  return code;
5,969✔
3038
}
3039

3040
int32_t tSerializeSTriggerOrigTableInfoRsp(void* buf, int32_t bufLen, const SSTriggerOrigTableInfoRsp* pRsp){
273,954✔
3041
  SEncoder encoder = {0};
273,954✔
3042
  int32_t  code = TSDB_CODE_SUCCESS;
273,954✔
3043
  int32_t  lino = 0;
273,954✔
3044
  int32_t  tlen = 0;
273,954✔
3045

3046
  tEncoderInit(&encoder, buf, bufLen);
273,954✔
3047
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
273,954✔
3048

3049
  int32_t size = taosArrayGetSize(pRsp->cols);
273,954✔
3050
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
273,954✔
3051
  for (int32_t i = 0; i < size; ++i) {
1,013,760✔
3052
    OTableInfoRsp* oInfo = taosArrayGet(pRsp->cols, i);
739,806✔
3053
    if (oInfo == NULL) {
739,806✔
UNCOV
3054
      uError("col id is NULL at index %d", i);
×
UNCOV
3055
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3056
      goto _exit;
×
3057
    }
3058
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, oInfo->suid));
1,479,612✔
3059
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, oInfo->uid));
1,479,612✔
3060
    TAOS_CHECK_EXIT(tEncodeI16(&encoder, oInfo->cid));
1,479,612✔
3061
  }
3062

3063
  tEndEncode(&encoder);
273,954✔
3064

3065
_exit:
273,954✔
3066
  if (code != TSDB_CODE_SUCCESS) {
273,954✔
UNCOV
3067
    tlen = code;
×
3068
  } else {
3069
    tlen = encoder.pos;
273,954✔
3070
  }
3071
  tEncoderClear(&encoder);
273,954✔
3072
  return tlen;
273,954✔
3073
}
3074

3075
int32_t tDserializeSTriggerOrigTableInfoRsp(void* buf, int32_t bufLen, SSTriggerOrigTableInfoRsp* pRsp){
136,977✔
3076
  SDecoder decoder = {0};
136,977✔
3077
  int32_t  code = TSDB_CODE_SUCCESS;
136,977✔
3078
  int32_t  lino = 0;
136,977✔
3079

3080
  tDecoderInit(&decoder, buf, bufLen);
136,977✔
3081
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
136,977✔
3082

3083
  int32_t size = 0;
136,977✔
3084
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
136,977✔
3085
  pRsp->cols = taosArrayInit(size, sizeof(OTableInfoRsp));
136,977✔
3086
  if (pRsp->cols == NULL) {
136,977✔
UNCOV
3087
    code = terrno;
×
UNCOV
3088
    uError("failed to allocate memory for cids, size: %d, errno: %d", size, code);
×
UNCOV
3089
    goto _exit;
×
3090
  }
3091
  for (int32_t i = 0; i < size; ++i) {
506,880✔
3092
    OTableInfoRsp* oInfo = taosArrayReserve(pRsp->cols, 1);
369,903✔
3093
    if (oInfo == NULL) {
369,903✔
UNCOV
3094
      code = terrno;
×
UNCOV
3095
      uError("failed to reserve memory for OTableInfo, size: %d, errno: %d", size, code);
×
UNCOV
3096
      goto _exit;
×
3097
    }
3098
    TAOS_CHECK_RETURN(tDecodeI64(&decoder, &oInfo->suid));
739,806✔
3099
    TAOS_CHECK_RETURN(tDecodeI64(&decoder, &oInfo->uid));
739,806✔
3100
    TAOS_CHECK_RETURN(tDecodeI16(&decoder, &oInfo->cid));
739,806✔
3101
  }
3102

3103
  tEndDecode(&decoder);
136,977✔
3104

3105
_exit:
136,977✔
3106
  tDecoderClear(&decoder);
136,977✔
3107
  return code;
136,977✔
3108
}
3109

3110
void    tDestroySTriggerOrigTableInfoRsp(SSTriggerOrigTableInfoRsp* pRsp){
40,178,625✔
3111
  taosArrayDestroy(pRsp->cols);
40,178,625✔
3112
}
40,177,037✔
3113

3114
void tDestroySTriggerPullRequest(SSTriggerPullRequestUnion* pReq) {
48,807,226✔
3115
  if (pReq == NULL) return;
48,807,226✔
3116
  if (pReq->base.type == STRIGGER_PULL_WAL_DATA_NEW || pReq->base.type == STRIGGER_PULL_WAL_CALC_DATA_NEW) {
62,957,134✔
3117
    SSTriggerWalDataNewRequest* pRequest = (SSTriggerWalDataNewRequest*)pReq;
14,149,753✔
3118
    taosArrayDestroy(pRequest->versions);
14,149,753✔
3119
    tSimpleHashCleanup(pRequest->ranges);
14,147,283✔
3120
  } else if (pReq->base.type == STRIGGER_PULL_TSDB_DATA) {
34,660,316✔
3121
    SSTriggerTsdbDataRequest* pRequest = (SSTriggerTsdbDataRequest*)pReq;
384,145✔
3122
    if (pRequest->cids != NULL) {
384,145✔
3123
      taosArrayDestroy(pRequest->cids);
384,145✔
3124
      pRequest->cids = NULL;
384,145✔
3125
    }
3126
  } else if (pReq->base.type == STRIGGER_PULL_VTABLE_INFO) {
34,275,024✔
3127
    SSTriggerVirTableInfoRequest* pRequest = (SSTriggerVirTableInfoRequest*)pReq;
77,605✔
3128
    if (pRequest->cids != NULL) {
77,605✔
3129
      taosArrayDestroy(pRequest->cids);
77,605✔
3130
      pRequest->cids = NULL;
77,605✔
3131
    }
3132
    if (pRequest->uids != NULL) {
77,605✔
UNCOV
3133
      taosArrayDestroy(pRequest->uids);
×
UNCOV
3134
      pRequest->uids = NULL;
×
3135
    }
3136
  } else if (pReq->base.type == STRIGGER_PULL_VTABLE_PSEUDO_COL) {
34,196,389✔
3137
    SSTriggerVirTablePseudoColRequest *pRequest = (SSTriggerVirTablePseudoColRequest*)pReq;
832,775✔
3138
    if (pRequest->cids != NULL) {
832,775✔
3139
      taosArrayDestroy(pRequest->cids);
832,775✔
3140
      pRequest->cids = NULL;
832,775✔
3141
    }
3142
  } else if (pReq->base.type == STRIGGER_PULL_OTABLE_INFO) {
33,363,780✔
3143
    SSTriggerOrigTableInfoRequest* pRequest = (SSTriggerOrigTableInfoRequest*)pReq;
136,977✔
3144
    if (pRequest->cols != NULL) {
136,977✔
3145
      taosArrayDestroy(pRequest->cols);
136,977✔
3146
      pRequest->cols = NULL;
136,977✔
3147
    }
3148
  } else if (pReq->base.type == STRIGGER_PULL_SET_TABLE) {
33,225,766✔
3149
    SSTriggerSetTableRequest* pRequest = (SSTriggerSetTableRequest*)pReq;
136,977✔
3150
    tSimpleHashCleanup(pRequest->uidInfoTrigger);
136,977✔
3151
    tSimpleHashCleanup(pRequest->uidInfoCalc);
136,977✔
3152
  }
3153
}
3154

3155
int32_t encodePlainArray(SEncoder *encoder, SArray *pArr) {
2,750,660✔
3156
  int32_t  code = TSDB_CODE_SUCCESS;
2,750,660✔
3157
  int32_t  lino = 0;
2,750,660✔
3158
  int32_t  nEle = taosArrayGetSize(pArr);
2,750,660✔
3159
  uint8_t* buf = (nEle > 0) ? TARRAY_DATA(pArr) : NULL;
2,750,660✔
3160
  int32_t  len = (nEle > 0) ? (nEle * pArr->elemSize) : 0;
2,750,660✔
3161
  TAOS_CHECK_EXIT(tEncodeBinary(encoder, buf, len));
5,501,320✔
3162

3163
_exit:
2,750,660✔
3164
  return code;
2,750,660✔
3165
}
3166

3167
int32_t decodePlainArray(SDecoder* decoder, SArray** ppArr, uint32_t elemSize) {
1,372,130✔
3168
  int32_t  code = TSDB_CODE_SUCCESS;
1,372,130✔
3169
  int32_t  lino = 0;
1,372,130✔
3170
  void*    buf = NULL;
1,372,130✔
3171
  uint64_t len = 0;
1,372,130✔
3172
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(decoder, &buf, &len));
1,372,130✔
3173

3174
  if (len > 0) {
1,372,130✔
3175
    *ppArr = taosArrayInit(0, elemSize);
1,294,525✔
3176
    TSDB_CHECK_NULL(*ppArr, code, lino, _exit, terrno);
1,294,525✔
3177
    TSWAP((*ppArr)->pData, buf);
1,294,525✔
3178
    (*ppArr)->size = (*ppArr)->capacity = len / elemSize;
1,294,525✔
3179
  }
3180

3181
_exit:
1,372,130✔
3182
  if (buf != NULL) {
1,372,130✔
3183
    taosMemoryFree(buf);
1,294,525✔
3184
  }
3185
  return code;
1,372,130✔
3186
}
3187

3188
static int32_t encodeSetTableMapInfo(SEncoder* encoder, SSHashObj* pInfo) {
547,908✔
3189
  int32_t  code = TSDB_CODE_SUCCESS;
547,908✔
3190
  int32_t  lino = 0;
547,908✔
3191
  int32_t size = tSimpleHashGetSize(pInfo);
547,908✔
3192
  TAOS_CHECK_EXIT(tEncodeI32(encoder, size));
547,908✔
3193
  int32_t iter = 0;
547,908✔
3194
  void*   px = tSimpleHashIterate(pInfo, NULL, &iter);
547,908✔
3195
  while (px != NULL) {
1,228,979✔
3196
    int64_t* uid = tSimpleHashGetKey(px, NULL);
681,314✔
3197
    TAOS_CHECK_EXIT(tEncodeI64(encoder, *uid));
1,362,628✔
3198
    TAOS_CHECK_EXIT(tEncodeI64(encoder, *(uid + 1)));
1,362,628✔
3199
    SSHashObj* info = *(SSHashObj**)px;
681,314✔
3200
    int32_t len = tSimpleHashGetSize(info);
681,314✔
3201
    TAOS_CHECK_EXIT(tEncodeI32(encoder, len));
681,314✔
3202
    int32_t iter1 = 0;
681,314✔
3203
    void*   px1 = tSimpleHashIterate(info, NULL, &iter1);
681,314✔
3204
    while (px1 != NULL) {
2,573,440✔
3205
      int16_t* slot = tSimpleHashGetKey(px1, NULL);
1,892,126✔
3206
      int16_t* cid = (int16_t*)px1;
1,892,126✔
3207
      TAOS_CHECK_EXIT(tEncodeI16(encoder, *slot));
3,784,252✔
3208
      TAOS_CHECK_EXIT(tEncodeI16(encoder, *cid));
3,784,252✔
3209

3210
      px1 = tSimpleHashIterate(info, px1, &iter1);
1,892,126✔
3211
    }
3212

3213
    px = tSimpleHashIterate(pInfo, px, &iter);
681,314✔
3214
  }
3215
  
3216
_exit:
547,665✔
3217
  return code;
547,665✔
3218
}
3219

3220
int32_t tSerializeSTriggerPullRequest(void* buf, int32_t bufLen, const SSTriggerPullRequest* pReq) {
98,034,074✔
3221
  SEncoder encoder = {0};
98,034,074✔
3222
  int32_t  code = TSDB_CODE_SUCCESS;
98,035,198✔
3223
  int32_t  lino = 0;
98,035,198✔
3224
  int32_t  tlen = 0;
98,035,198✔
3225

3226
  tEncoderInit(&encoder, buf, bufLen);
98,035,198✔
3227
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
98,037,292✔
3228

3229
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->type));
196,071,810✔
3230
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
196,063,390✔
3231
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->readerTaskId));
196,065,562✔
3232
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
196,069,112✔
3233

3234
  switch (pReq->type) {
98,033,249✔
3235
    case STRIGGER_PULL_SET_TABLE: {
273,954✔
3236
      SSTriggerSetTableRequest* pRequest = (SSTriggerSetTableRequest*)pReq;
273,954✔
3237
      TAOS_CHECK_EXIT(encodeSetTableMapInfo(&encoder, pRequest->uidInfoTrigger));
273,954✔
3238
      TAOS_CHECK_EXIT(encodeSetTableMapInfo(&encoder, pRequest->uidInfoCalc));
273,954✔
3239
      break;
273,711✔
3240
    }
3241
    case STRIGGER_PULL_LAST_TS: {
647,582✔
3242
      break;
647,582✔
3243
    }
3244
    case STRIGGER_PULL_FIRST_TS: {
617,036✔
3245
      SSTriggerFirstTsRequest* pRequest = (SSTriggerFirstTsRequest*)pReq;
617,036✔
3246
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
1,234,072✔
3247
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
1,234,072✔
3248
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
1,234,072✔
3249
      break;
617,036✔
3250
    }
3251
    case STRIGGER_PULL_TSDB_META: {
1,044,924✔
3252
      SSTriggerTsdbMetaRequest* pRequest = (SSTriggerTsdbMetaRequest*)pReq;
1,044,924✔
3253
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
2,089,848✔
3254
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->endTime));
2,089,848✔
3255
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
2,089,848✔
3256
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
2,089,848✔
3257
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
2,089,848✔
3258
      break;
1,044,924✔
3259
    }
UNCOV
3260
    case STRIGGER_PULL_TSDB_META_NEXT: {
×
UNCOV
3261
      break;
×
3262
    }
3263
    case STRIGGER_PULL_TSDB_TS_DATA: {
133,818✔
3264
      SSTriggerTsdbTsDataRequest* pRequest = (SSTriggerTsdbTsDataRequest*)pReq;
133,818✔
3265
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->suid));
267,636✔
3266
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
267,636✔
3267
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
267,636✔
3268
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
267,636✔
3269
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
267,636✔
3270
      break;
133,818✔
3271
    }
3272
    case STRIGGER_PULL_TSDB_TRIGGER_DATA: {
180,108✔
3273
      SSTriggerTsdbTriggerDataRequest* pRequest = (SSTriggerTsdbTriggerDataRequest*)pReq;
180,108✔
3274
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
360,216✔
3275
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
360,216✔
3276
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
360,216✔
3277
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
360,216✔
3278
      break;
180,108✔
3279
    }
3280
    case STRIGGER_PULL_TSDB_TRIGGER_DATA_NEXT: {
328,958✔
3281
      break;
328,958✔
3282
    }
3283
    case STRIGGER_PULL_TSDB_CALC_DATA: {
13,165,864✔
3284
      SSTriggerTsdbCalcDataRequest* pRequest = (SSTriggerTsdbCalcDataRequest*)pReq;
13,165,864✔
3285
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
26,331,728✔
3286
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
26,331,728✔
3287
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
26,331,728✔
3288
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
26,331,728✔
3289
      break;
13,165,864✔
3290
    }
UNCOV
3291
    case STRIGGER_PULL_TSDB_CALC_DATA_NEXT: {
×
UNCOV
3292
      break;
×
3293
    }
3294
    case STRIGGER_PULL_TSDB_DATA: {
773,054✔
3295
      SSTriggerTsdbDataRequest* pRequest = (SSTriggerTsdbDataRequest*)pReq;
773,054✔
3296
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->suid));
1,546,108✔
3297
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
1,546,108✔
3298
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
1,546,108✔
3299
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
1,546,108✔
3300
      TAOS_CHECK_EXIT(encodePlainArray(&encoder, pRequest->cids));
773,054✔
3301
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
1,546,108✔
3302
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
1,546,108✔
3303
      break;
773,054✔
3304
    }
UNCOV
3305
    case STRIGGER_PULL_TSDB_DATA_NEXT: {
×
UNCOV
3306
      break;
×
3307
    }
3308
    case STRIGGER_PULL_WAL_META_NEW: {
38,221,198✔
3309
      SSTriggerWalMetaNewRequest* pRequest = (SSTriggerWalMetaNewRequest*)pReq;
38,221,198✔
3310
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->lastVer));
76,445,084✔
3311
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ctime));
76,446,652✔
3312
      break;
38,222,766✔
3313
    }
3314
    case STRIGGER_PULL_WAL_DATA_NEW:
28,299,602✔
3315
    case STRIGGER_PULL_WAL_CALC_DATA_NEW: {
3316
      SSTriggerWalDataNewRequest* pRequest = (SSTriggerWalDataNewRequest*)pReq;
28,299,602✔
3317
      int32_t                     nVersion = taosArrayGetSize(pRequest->versions);
28,299,602✔
3318
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, nVersion));
28,298,322✔
3319
      for (int32_t i = 0; i < nVersion; i++) {
46,243,948✔
3320
        int64_t ver = *(int64_t*)TARRAY_GET_ELEM(pRequest->versions, i);
17,945,626✔
3321
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, ver));
17,945,626✔
3322
      }
3323
      int32_t nRanges = tSimpleHashGetSize(pRequest->ranges);
28,298,322✔
3324
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, nRanges));
28,299,359✔
3325
      int32_t iter = 0;
28,299,359✔
3326
      void*   px = tSimpleHashIterate(pRequest->ranges, NULL, &iter);
28,299,359✔
3327
      while (px != NULL) {
35,175,466✔
3328
        uint64_t* gid = tSimpleHashGetKey(px, NULL);
6,876,172✔
3329
        TAOS_CHECK_EXIT(tEncodeU64(&encoder, *gid));
13,752,344✔
3330
        int64_t* key = (int64_t*)px;
6,876,172✔
3331
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, key[0]));
13,752,344✔
3332
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, key[1]));
13,752,344✔
3333

3334
        px = tSimpleHashIterate(pRequest->ranges, px, &iter);
6,876,172✔
3335
      }
3336
      break;
28,299,294✔
3337
    }
3338
    case STRIGGER_PULL_WAL_META_DATA_NEW: {
11,608,417✔
3339
      SSTriggerWalMetaDataNewRequest* pRequest = (SSTriggerWalMetaDataNewRequest*)pReq;
11,608,417✔
3340
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->lastVer));
23,217,358✔
3341
      break;
11,608,941✔
3342
    }
3343
    case STRIGGER_PULL_GROUP_COL_VALUE: {
643,700✔
3344
      SSTriggerGroupColValueRequest* pRequest = (SSTriggerGroupColValueRequest*)pReq;
643,700✔
3345
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
1,287,400✔
3346
      break;
643,700✔
3347
    }
3348
    case STRIGGER_PULL_VTABLE_INFO: {
156,028✔
3349
      SSTriggerVirTableInfoRequest* pRequest = (SSTriggerVirTableInfoRequest*)pReq;
156,028✔
3350
      TAOS_CHECK_EXIT(encodePlainArray(&encoder, pRequest->cids));
156,028✔
3351
      TAOS_CHECK_EXIT(encodePlainArray(&encoder, pRequest->uids));
156,028✔
3352
      TAOS_CHECK_EXIT(tEncodeBool(&encoder, pRequest->fetchAllTable));
156,028✔
3353
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
312,056✔
3354
      break;
156,028✔
3355
    }
3356
    case STRIGGER_PULL_VTABLE_PSEUDO_COL: {
1,665,550✔
3357
      SSTriggerVirTablePseudoColRequest* pRequest = (SSTriggerVirTablePseudoColRequest*)pReq;
1,665,550✔
3358
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
3,331,100✔
3359
      TAOS_CHECK_EXIT(encodePlainArray(&encoder, pRequest->cids));
1,665,550✔
3360
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
3,331,100✔
3361
      break;
1,665,550✔
3362
    }
3363
    case STRIGGER_PULL_OTABLE_INFO: {
273,954✔
3364
      SSTriggerOrigTableInfoRequest* pRequest = (SSTriggerOrigTableInfoRequest*)pReq;
273,954✔
3365
      int32_t size = taosArrayGetSize(pRequest->cols);
273,954✔
3366
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
273,954✔
3367
      for (int32_t i = 0; i < size; ++i) {
1,013,760✔
3368
        OTableInfo* oInfo = taosArrayGet(pRequest->cols, i);
739,563✔
3369
        if (oInfo == NULL) {
739,563✔
UNCOV
3370
          uError("col id is NULL at index %d", i);
×
UNCOV
3371
          code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3372
          goto _exit;
×
3373
        }
3374
        TAOS_CHECK_EXIT(tEncodeCStr(&encoder, oInfo->refTableName));
1,479,126✔
3375
        TAOS_CHECK_EXIT(tEncodeCStr(&encoder, oInfo->refColName));
1,479,369✔
3376
      }
3377
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
548,151✔
3378
      break; 
273,954✔
3379
    }
UNCOV
3380
    default: {
×
UNCOV
3381
      uError("unknown pull type %d", pReq->type);
×
UNCOV
3382
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3383
      break;
×
3384
    }
3385
  }
3386

3387
  tEndEncode(&encoder);
98,035,288✔
3388

3389
_exit:
98,026,939✔
3390
  if (code != TSDB_CODE_SUCCESS) {
98,029,808✔
UNCOV
3391
    tlen = code;
×
3392
  } else {
3393
    tlen = encoder.pos;
98,029,808✔
3394
  }
3395
  tEncoderClear(&encoder);
98,029,808✔
3396
  return tlen;
98,031,533✔
3397
}
3398

3399
static void destroyHash(void* data){
340,657✔
3400
  if (data){
340,657✔
3401
    SSHashObj* tmp = *(SSHashObj**)data;
340,657✔
3402
    tSimpleHashCleanup(tmp);
340,657✔
3403
  }
3404
}
340,657✔
3405

3406
static int32_t decodeSetTableMapInfo(SDecoder* decoder, SSHashObj** ppInfo) {
273,954✔
3407
  int32_t  code = TSDB_CODE_SUCCESS;
273,954✔
3408
  int32_t  lino = 0;
273,954✔
3409
  int32_t size = 0;
273,954✔
3410
  TAOS_CHECK_EXIT(tDecodeI32(decoder, &size));
273,954✔
3411
  *ppInfo = tSimpleHashInit(size, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY));
273,954✔
3412
  if (*ppInfo == NULL) {
273,954✔
UNCOV
3413
    TAOS_CHECK_EXIT(terrno);
×
3414
  }
3415
  tSimpleHashSetFreeFp(*ppInfo, destroyHash);
273,954✔
3416
  
3417
  for (int32_t i = 0; i < size; ++i) {
614,611✔
3418
    int64_t id[2] = {0};
340,657✔
3419
    TAOS_CHECK_EXIT(tDecodeI64(decoder, id));
340,657✔
3420
    TAOS_CHECK_EXIT(tDecodeI64(decoder, id+1));
681,071✔
3421
    int32_t len = 0;
340,414✔
3422
    TAOS_CHECK_EXIT(tDecodeI32(decoder, &len));
340,657✔
3423
    SSHashObj* tmp = tSimpleHashInit(len, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT));
340,657✔
3424
    if (tmp == NULL) {
340,657✔
UNCOV
3425
      TAOS_CHECK_EXIT(terrno);
×
3426
    }
3427
    TAOS_CHECK_EXIT(tSimpleHashPut(*ppInfo, id, sizeof(id), &tmp, POINTER_BYTES));
340,657✔
3428

3429
    for (int32_t j = 0; j < len; ++j) {
1,286,720✔
3430
      int16_t slotId = 0;
946,063✔
3431
      int16_t cid = 0;
946,063✔
3432
      TAOS_CHECK_EXIT(tDecodeI16(decoder, &slotId));
946,063✔
3433
      TAOS_CHECK_EXIT(tDecodeI16(decoder, &cid));
946,063✔
3434
      TAOS_CHECK_EXIT(tSimpleHashPut(tmp, &slotId, sizeof(slotId), &cid, sizeof(cid)));
946,063✔
3435
    }
3436
  }
3437
_exit:
273,954✔
3438
  if (code != TSDB_CODE_SUCCESS) {
273,954✔
UNCOV
3439
    tSimpleHashCleanup(*ppInfo);
×
UNCOV
3440
    *ppInfo = NULL;
×
3441
  }
3442
  return code;
273,954✔
3443
}
3444

3445
int32_t tDeserializeSTriggerPullRequest(void* buf, int32_t bufLen, SSTriggerPullRequestUnion* pReq) {
48,810,368✔
3446
  SDecoder decoder = {0};
48,810,368✔
3447
  int32_t  code = TSDB_CODE_SUCCESS;
48,810,584✔
3448
  int32_t  lino = 0;
48,810,584✔
3449

3450
  tDecoderInit(&decoder, buf, bufLen);
48,810,584✔
3451
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
48,811,152✔
3452

3453
  int32_t type = 0;
48,811,065✔
3454
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &type));
48,809,084✔
3455
  SSTriggerPullRequest* pBase = &(pReq->base);
48,809,084✔
3456
  pBase->type = type;
48,807,329✔
3457
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->streamId));
97,620,117✔
3458
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->readerTaskId));
97,617,996✔
3459
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->sessionId));
97,617,192✔
3460

3461
  switch (type) {
48,810,229✔
3462
    case STRIGGER_PULL_SET_TABLE: {
136,977✔
3463
      SSTriggerSetTableRequest* pRequest = &(pReq->setTableReq);
136,977✔
3464
      TAOS_CHECK_EXIT(decodeSetTableMapInfo(&decoder, &pRequest->uidInfoTrigger));
136,977✔
3465
      TAOS_CHECK_EXIT(decodeSetTableMapInfo(&decoder, &pRequest->uidInfoCalc));
136,977✔
3466
      break;
136,977✔
3467
    }
3468
    case STRIGGER_PULL_LAST_TS: {
323,444✔
3469
      break;
323,444✔
3470
    }
3471
    case STRIGGER_PULL_FIRST_TS: {
305,464✔
3472
      SSTriggerFirstTsRequest* pRequest = &(pReq->firstTsReq);
305,464✔
3473
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
610,442✔
3474
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
610,685✔
3475
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
610,685✔
3476
      break;
305,221✔
3477
    }
3478
    case STRIGGER_PULL_TSDB_META: {
522,394✔
3479
      SSTriggerTsdbMetaRequest* pRequest = &(pReq->tsdbMetaReq);
522,394✔
3480
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
1,044,788✔
3481
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->endTime));
1,044,788✔
3482
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
1,044,788✔
3483
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
1,044,788✔
3484
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
1,044,788✔
3485
      break;
522,394✔
3486
    }
UNCOV
3487
    case STRIGGER_PULL_TSDB_META_NEXT: {
×
UNCOV
3488
      break;
×
3489
    }
3490
    case STRIGGER_PULL_TSDB_TS_DATA: {
66,909✔
3491
      SSTriggerTsdbTsDataRequest* pRequest = &(pReq->tsdbTsDataReq);
66,909✔
3492
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->suid));
133,818✔
3493
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
133,818✔
3494
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
133,818✔
3495
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
133,818✔
3496
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
133,818✔
3497
      break;
66,909✔
3498
    }
3499
    case STRIGGER_PULL_TSDB_TRIGGER_DATA: {
90,054✔
3500
      SSTriggerTsdbTriggerDataRequest* pRequest = &(pReq->tsdbTriggerDataReq);
90,054✔
3501
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
180,108✔
3502
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
180,108✔
3503
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
180,108✔
3504
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
180,108✔
3505
      break;
90,054✔
3506
    }
3507
    case STRIGGER_PULL_TSDB_TRIGGER_DATA_NEXT: {
164,479✔
3508
      break;
164,479✔
3509
    }
3510
    case STRIGGER_PULL_TSDB_CALC_DATA: {
6,582,036✔
3511
      SSTriggerTsdbCalcDataRequest* pRequest = &(pReq->tsdbCalcDataReq);
6,582,036✔
3512
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
13,164,045✔
3513
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
13,163,802✔
3514
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
13,163,802✔
3515
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
13,164,018✔
3516
      break;
6,582,009✔
3517
    }
UNCOV
3518
    case STRIGGER_PULL_TSDB_CALC_DATA_NEXT: {
×
UNCOV
3519
      break;
×
3520
    }
3521
    case STRIGGER_PULL_TSDB_DATA: {
384,145✔
3522
      SSTriggerTsdbDataRequest* pRequest = &(pReq->tsdbDataReq);
384,145✔
3523
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->suid));
768,290✔
3524
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
768,290✔
3525
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
768,290✔
3526
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
768,290✔
3527
      TAOS_CHECK_EXIT(decodePlainArray(&decoder, &pRequest->cids, sizeof(col_id_t)));
384,145✔
3528
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
768,290✔
3529
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
768,290✔
3530
      break;
384,145✔
3531
    }
UNCOV
3532
    case STRIGGER_PULL_TSDB_DATA_NEXT: {
×
UNCOV
3533
      break;
×
3534
    }
3535
    case STRIGGER_PULL_WAL_META_NEW: {
19,005,091✔
3536
      SSTriggerWalMetaNewRequest* pRequest = &(pReq->walMetaNewReq);
19,005,091✔
3537
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->lastVer));
38,010,710✔
3538
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ctime));
38,012,211✔
3539
      break;
19,006,592✔
3540
    }
3541
    case STRIGGER_PULL_WAL_DATA_NEW:
14,148,891✔
3542
    case STRIGGER_PULL_WAL_CALC_DATA_NEW: {
3543
      SSTriggerWalDataNewRequest* pRequest = &(pReq->walDataNewReq);
14,148,891✔
3544
      int32_t                     nVersion = 0;
14,148,891✔
3545
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nVersion));
14,149,908✔
3546
      pRequest->versions = taosArrayInit_s(sizeof(int64_t), nVersion);
14,149,908✔
3547
      for (int32_t i = 0; i < nVersion; i++) {
23,121,655✔
3548
        int64_t* pVer = TARRAY_GET_ELEM(pRequest->versions, i);
8,972,541✔
3549
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, pVer));
8,972,541✔
3550
      }
3551
      int32_t nRanges = 0;
14,149,114✔
3552
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nRanges));
14,149,908✔
3553
      pRequest->ranges = tSimpleHashInit(nRanges, taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT));
14,149,908✔
3554
      if (pRequest->ranges == NULL) {
14,149,908✔
UNCOV
3555
        TAOS_CHECK_EXIT(terrno);
×
3556
      }
3557
      for (int32_t i = 0; i < nRanges; i++) {
17,587,858✔
3558
        uint64_t gid = 0;
3,437,950✔
3559
        int64_t pRange[2] = {0};
3,437,950✔
3560
        TAOS_CHECK_EXIT(tDecodeU64(&decoder, &gid));
3,437,950✔
3561
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRange[0]));
3,437,950✔
3562
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRange[1]));
3,437,950✔
3563
        TAOS_CHECK_EXIT(tSimpleHashPut(pRequest->ranges, &gid, sizeof(gid), pRange, sizeof(pRange)));
3,437,950✔
3564
      }
3565
      break;
14,149,908✔
3566
    }
3567
    case STRIGGER_PULL_WAL_META_DATA_NEW: {
5,708,043✔
3568
      SSTriggerWalMetaDataNewRequest* pRequest = &(pReq->walMetaDataNewReq);
5,708,043✔
3569
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->lastVer));
11,417,427✔
3570
      break;
5,708,781✔
3571
    }
3572
    case STRIGGER_PULL_GROUP_COL_VALUE: {
321,714✔
3573
      SSTriggerGroupColValueRequest* pRequest = &(pReq->groupColValueReq);
321,714✔
3574
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
643,428✔
3575
      break;
321,714✔
3576
    }
3577
    case STRIGGER_PULL_VTABLE_INFO: {
77,605✔
3578
      SSTriggerVirTableInfoRequest* pRequest = &(pReq->virTableInfoReq);
77,605✔
3579
      TAOS_CHECK_EXIT(decodePlainArray(&decoder, &pRequest->cids, sizeof(col_id_t)));
77,605✔
3580
      TAOS_CHECK_EXIT(decodePlainArray(&decoder, &pRequest->uids, sizeof(int64_t)));
77,605✔
3581
      TAOS_CHECK_EXIT(tDecodeBool(&decoder, &pRequest->fetchAllTable));
77,605✔
3582
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
155,210✔
3583
      break;
77,605✔
3584
    }
3585
    case STRIGGER_PULL_VTABLE_PSEUDO_COL: {
832,775✔
3586
      SSTriggerVirTablePseudoColRequest* pRequest = &(pReq->virTablePseudoColReq);
832,775✔
3587
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
1,665,550✔
3588
      TAOS_CHECK_EXIT(decodePlainArray(&decoder, &pRequest->cids, sizeof(col_id_t)));
832,775✔
3589
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
1,665,550✔
3590
      break;
832,775✔
3591
    }
3592
    case STRIGGER_PULL_OTABLE_INFO: {
136,977✔
3593
      SSTriggerOrigTableInfoRequest* pRequest = &(pReq->origTableInfoReq);
136,977✔
3594
      int32_t size = 0;
136,977✔
3595
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
136,977✔
3596
      pRequest->cols = taosArrayInit(size, sizeof(OTableInfo));
136,977✔
3597
      if (pRequest->cols == NULL) {
136,183✔
UNCOV
3598
        code = terrno;
×
UNCOV
3599
        uError("failed to allocate memory for cids, size: %d, errno: %d", size, code);
×
UNCOV
3600
        goto _exit;
×
3601
      }
3602
      for (int32_t i = 0; i < size; ++i) {
506,086✔
3603
        OTableInfo* oInfo = taosArrayReserve(pRequest->cols, 1);
369,903✔
3604
        if (oInfo == NULL) {
369,903✔
3605
          code = terrno;
×
UNCOV
3606
          uError("failed to reserve memory for OTableInfo, size: %d, errno: %d", size, code);
×
UNCOV
3607
          goto _exit;
×
3608
        }
3609
        TAOS_CHECK_RETURN(tDecodeCStrTo(&decoder, oInfo->refTableName));
369,903✔
3610
        TAOS_CHECK_RETURN(tDecodeCStrTo(&decoder, oInfo->refColName));
369,903✔
3611
      }
3612
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
273,160✔
3613

3614
      break;
136,977✔
3615
    }
3616
    default: {
3,231✔
3617
      uError("unknown pull type %d", type);
3,231✔
UNCOV
3618
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3619
      break;
×
3620
    }
3621
  }
3622

3623
  tEndDecode(&decoder);
48,809,984✔
3624

3625
_exit:
48,807,640✔
3626
  tDecoderClear(&decoder);
48,809,667✔
3627
  return code;
48,807,262✔
3628
}
3629

3630
static int32_t tSerializeSTriggerCalcParam(SEncoder* pEncoder, SArray* pParams, bool ignoreNotificationInfo, bool full) {
37,622,541✔
3631
  int32_t size = full ? taosArrayGetSize(pParams) : 0;
37,622,541✔
3632
  int32_t code = 0;
37,624,285✔
3633
  int32_t lino = 0;
37,624,285✔
3634
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, size));
37,624,252✔
3635
  for (int32_t i = 0; i < size; ++i) {
2,147,483,647✔
3636
    SSTriggerCalcParam* param = taosArrayGet(pParams, i);
2,147,483,647✔
3637
    if (param == NULL) {
2,147,483,647✔
UNCOV
3638
      TAOS_CHECK_EXIT(terrno);
×
3639
    }
3640
    int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
2,147,483,647✔
3641
    if (pEncoder->data) {
2,147,483,647✔
3642
      TAOS_MEMCPY(pEncoder->data + pEncoder->pos, param, plainFieldSize);
2,147,483,647✔
3643
    }
3644
    pEncoder->pos += plainFieldSize;
2,147,483,647✔
3645

3646
    if (!ignoreNotificationInfo) {
2,147,483,647✔
3647
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, param->notifyType));
1,299,204,788✔
3648
      uint64_t len = (param->extraNotifyContent != NULL) ? strlen(param->extraNotifyContent) + 1 : 0;
649,602,394✔
3649
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, (uint8_t*)param->extraNotifyContent, len));
1,313,530,429✔
3650
    }
3651
  }
3652
_exit:
7,143,364✔
3653
  return code;
7,143,364✔
3654
}
3655

3656
void tDestroySSTriggerCalcParam(void* ptr) {
2,147,483,647✔
3657
  SSTriggerCalcParam* pParam = ptr;
2,147,483,647✔
3658
  if (pParam && pParam->extraNotifyContent != NULL) {
2,147,483,647✔
3659
    taosMemoryFreeClear(pParam->extraNotifyContent);
278,024✔
3660
  }
3661
  if (pParam && pParam->resultNotifyContent != NULL) {
2,147,483,647✔
UNCOV
3662
    taosMemoryFreeClear(pParam->resultNotifyContent);
×
3663
  }
3664
  if (pParam && pParam->pExternalWindowData != NULL) {
2,147,483,647✔
3665
    taosArrayDestroyEx(pParam->pExternalWindowData, tDestroySStreamGroupValue);
55,794,948✔
3666
    pParam->pExternalWindowData = NULL;
55,763,686✔
3667
  }
3668
}
2,147,483,647✔
3669

3670
void tDestroySSTriggerGroupCalcInfo(void* ptr) {
151,438✔
3671
  SSTriggerGroupCalcInfo* pCalcInfo = ptr;
151,438✔
3672
  if (pCalcInfo && pCalcInfo->pParams != NULL) {
151,438✔
3673
    taosArrayDestroyEx(pCalcInfo->pParams, tDestroySSTriggerCalcParam);
151,438✔
3674
    pCalcInfo->pParams = NULL;
151,438✔
3675
  }
3676
  if (pCalcInfo && pCalcInfo->pGroupColVals != NULL) {
151,438✔
UNCOV
3677
    taosArrayDestroyEx(pCalcInfo->pGroupColVals, tDestroySStreamGroupValue);
×
UNCOV
3678
    pCalcInfo->pGroupColVals = NULL;
×
3679
  }
3680
}
151,438✔
3681

UNCOV
3682
void tDestroySSTriggerGroupReadInfo(void* ptr) {
×
UNCOV
3683
  SSTriggerGroupReadInfo* pReadInfo = ptr;
×
UNCOV
3684
  if (pReadInfo && pReadInfo->pTables) {
×
UNCOV
3685
    taosArrayDestroy(pReadInfo->pTables);
×
UNCOV
3686
    pReadInfo->pTables = NULL;
×
3687
  }
3688
}
×
3689

UNCOV
3690
void tDestroySSTriggerGroupReadInfoArray(void* ptr) {
×
UNCOV
3691
  if (ptr != NULL && *(SArray**)ptr != NULL) {
×
UNCOV
3692
    SArray* pArray = *(SArray**)ptr;
×
UNCOV
3693
    taosArrayDestroyEx(pArray, tDestroySSTriggerGroupReadInfo);
×
UNCOV
3694
    *(SArray**)ptr = NULL;
×
3695
  }
UNCOV
3696
}
×
3697

3698
void tDestroySStreamGroupValue(void* ptr) {
80,042,356✔
3699
  SStreamGroupValue* pValue = ptr;
80,042,356✔
3700
  if ((pValue != NULL) && (IS_VAR_DATA_TYPE(pValue->data.type) || pValue->data.type == TSDB_DATA_TYPE_DECIMAL)) {
80,042,356✔
3701
    taosMemoryFreeClear(pValue->data.pData);
17,242,244✔
3702
    pValue->data.nData = 0;
17,279,502✔
3703
  }
3704
}
80,091,076✔
3705

3706
static int32_t tDeserializeSTriggerCalcParam(SDecoder* pDecoder, SArray**ppParams, bool ignoreNotificationInfo) {
18,792,422✔
3707
  int32_t size = 0, code = 0, lino = 0;
18,792,422✔
3708
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &size));
18,792,936✔
3709
  if (size <= 0) {
18,792,936✔
3710
    return code;
4,930,294✔
3711
  }
3712
  
3713
  *ppParams = taosArrayInit(size, sizeof(SSTriggerCalcParam));
13,862,642✔
3714
  if (*ppParams == NULL) {
13,862,642✔
UNCOV
3715
    TAOS_CHECK_EXIT(terrno);
×
3716
  }
3717
  for (int32_t i = 0; i < size; ++i) {
2,147,483,647✔
3718
    SSTriggerCalcParam* param = taosArrayReserve(*ppParams, 1);
2,147,483,647✔
3719
    if (param == NULL) {
2,147,483,647✔
UNCOV
3720
      TAOS_CHECK_EXIT(terrno);
×
3721
    }
3722
    int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
2,147,483,647✔
3723
    TAOS_MEMCPY(param, pDecoder->data + pDecoder->pos, plainFieldSize);
2,147,483,647✔
3724
    pDecoder->pos += plainFieldSize;
2,147,483,647✔
3725

3726
    if (!ignoreNotificationInfo) {
2,147,483,647✔
3727
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &param->notifyType));
649,454,522✔
3728
      uint64_t len = 0;
324,727,261✔
3729
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&param->extraNotifyContent, &len));
649,454,522✔
3730
    }
3731
  }
3732

3733
_exit:
29,201,307✔
3734
  return code;
13,862,642✔
3735
}
3736

3737
static int32_t tSerializeStriggerGroupColVals(SEncoder* pEncoder, SArray* pGroupColVals, int32_t vgId) {
38,269,810✔
3738
  int32_t code = TSDB_CODE_SUCCESS;
38,269,810✔
3739
  int32_t lino = 0;
38,269,810✔
3740

3741
  int32_t size = taosArrayGetSize(pGroupColVals);
38,269,810✔
3742
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, size));
38,270,021✔
3743
  for (int32_t i = 0; i < size; ++i) {
86,113,784✔
3744
    SStreamGroupValue* pValue = taosArrayGet(pGroupColVals, i);
47,844,313✔
3745
    if (pValue == NULL) {
47,843,241✔
3746
      TAOS_CHECK_EXIT(terrno);
×
3747
    }
3748
    TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pValue->isNull));
47,843,241✔
3749
    if (pValue->isNull) {
47,843,432✔
3750
      continue;
21,480✔
3751
    }
3752
    TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pValue->isTbname));
47,821,921✔
3753
    if (pValue->isTbname) {
47,822,548✔
3754
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pValue->uid));
45,061,003✔
3755
      if (vgId != -1) { pValue->vgId = vgId; }
22,529,743✔
3756
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pValue->vgId));
45,060,540✔
3757
    }
3758
    TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pValue->data.type));
95,642,668✔
3759
    if (IS_VAR_DATA_TYPE(pValue->data.type)) {
47,820,583✔
3760
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pValue->data.pData, pValue->data.nData));
65,308,615✔
3761
    } else {
3762
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pValue->data.val));
30,334,533✔
3763
    }
3764
  }
3765

3766
_exit:
38,269,471✔
3767
  return code;
38,269,471✔
3768
}
3769

3770
static int32_t tDeserializeStriggerGroupColVals(SDecoder* pDecoder, SArray** ppGroupColVals) {
19,114,786✔
3771
  int32_t code = TSDB_CODE_SUCCESS;
19,114,786✔
3772
  int32_t lino = 0;
19,114,786✔
3773
  int32_t size = 0;
19,114,786✔
3774

3775
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &size));
19,114,543✔
3776
  taosArrayClearEx(*ppGroupColVals, tDestroySStreamGroupValue);
19,114,543✔
3777
  if (size > 0) {
19,114,782✔
3778
    if (*ppGroupColVals == NULL) {
12,390,197✔
3779
      *ppGroupColVals = taosArrayInit(size, sizeof(SStreamGroupValue));
12,389,939✔
3780
      if (*ppGroupColVals == NULL) {
12,389,941✔
3781
        TAOS_CHECK_EXIT(terrno);
30✔
3782
      }
3783
    } else {
3784
      TAOS_CHECK_EXIT(taosArrayEnsureCap(*ppGroupColVals, size));
258✔
3785
    }
3786
  }
3787
  for (int32_t i = 0; i < size; ++i) {
43,037,285✔
3788
    SStreamGroupValue* pValue = taosArrayReserve(*ppGroupColVals, 1);
23,921,327✔
3789
    if (pValue == NULL) {
23,921,210✔
UNCOV
3790
      TAOS_CHECK_EXIT(terrno);
×
3791
    }
3792
    TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pValue->isNull));
23,921,210✔
3793
    if (pValue->isNull) {
23,921,210✔
3794
      continue;
10,740✔
3795
    }
3796
    TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pValue->isTbname));
23,911,264✔
3797
    if (pValue->isTbname) {
23,911,632✔
3798
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pValue->uid));
22,530,088✔
3799
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pValue->vgId));
22,530,088✔
3800
    }
3801
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pValue->data.type));
47,823,264✔
3802
    if (IS_VAR_DATA_TYPE(pValue->data.type)) {
40,239,212✔
3803
      uint64_t len = 0;
16,327,455✔
3804
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pValue->data.pData, &len));
32,653,033✔
3805
      pValue->data.nData = len;
16,326,786✔
3806
    } else {
3807
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pValue->data.val));
15,167,721✔
3808
    }
3809
  }
3810
_exit:
19,115,958✔
3811
  return code;
19,115,550✔
3812
}
3813

3814
int32_t tSerializeSStreamGroupInfo(void* buf, int32_t bufLen, const SStreamGroupInfo* gInfo, int32_t vgId) {
643,428✔
3815
  SEncoder encoder = {0};
643,428✔
3816
  int32_t  code = TSDB_CODE_SUCCESS;
643,428✔
3817
  int32_t  lino = 0;
643,428✔
3818
  int32_t  tlen = 0;
643,428✔
3819

3820
  tEncoderInit(&encoder, buf, bufLen);
643,428✔
3821
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
643,428✔
3822

3823
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, gInfo->gInfo, vgId));
642,976✔
3824

3825
  tEndEncode(&encoder);
643,428✔
3826

3827
_exit:
643,428✔
3828
  if (code != TSDB_CODE_SUCCESS) {
643,428✔
UNCOV
3829
    tlen = code;
×
3830
  } else {
3831
    tlen = encoder.pos;
643,428✔
3832
  }
3833
  tEncoderClear(&encoder);
643,428✔
3834
  return tlen;
643,005✔
3835
}
3836

3837
int32_t tDeserializeSStreamGroupInfo(void* buf, int32_t bufLen, SStreamGroupInfo* gInfo) {
321,850✔
3838
  SDecoder decoder = {0};
321,850✔
3839
  int32_t  code = TSDB_CODE_SUCCESS;
321,850✔
3840
  int32_t  lino = 0;
321,850✔
3841
  int32_t  size = 0;
321,850✔
3842

3843
  tDecoderInit(&decoder, buf, bufLen);
321,850✔
3844
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
321,850✔
3845

3846
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &gInfo->gInfo));
321,850✔
3847

3848
  tEndDecode(&decoder);
321,850✔
3849

3850
_exit:
321,850✔
3851
  tDecoderClear(&decoder);
321,850✔
3852
  return code;
321,850✔
3853
}
3854

3855
static int32_t tSerializeSSTriggerGroupCalcInfo(SEncoder* pEncoder, SSTriggerGroupCalcInfo* pInfo) {
22,736✔
3856
  int32_t code = 0;
22,736✔
3857
  int32_t lino = 0;
22,736✔
3858

3859
  TAOS_CHECK_EXIT(tSerializeSTriggerCalcParam(pEncoder, pInfo->pParams, false, true));
22,736✔
3860
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(pEncoder, pInfo->pGroupColVals, -1));
22,736✔
3861
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pInfo->createTable));
45,472✔
3862

3863
_exit:
22,736✔
3864
  return code;
22,736✔
3865
}
3866

UNCOV
3867
static int32_t tSerializeSSTriggerGroupReadInfo(SEncoder* pEncoder, SSTriggerGroupReadInfo* pInfo) {
×
UNCOV
3868
  int32_t code = 0;
×
UNCOV
3869
  int32_t lino = 0;
×
3870

UNCOV
3871
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->gid));
×
UNCOV
3872
  int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
×
UNCOV
3873
  if (pEncoder->data) {
×
UNCOV
3874
    TAOS_MEMCPY(pEncoder->data + pEncoder->pos, &pInfo->firstParam, plainFieldSize);
×
3875
  }
UNCOV
3876
  pEncoder->pos += plainFieldSize;
×
UNCOV
3877
  if (pEncoder->data) {
×
UNCOV
3878
    TAOS_MEMCPY(pEncoder->data + pEncoder->pos, &pInfo->lastParam, plainFieldSize);
×
3879
  }
UNCOV
3880
  pEncoder->pos += plainFieldSize;
×
3881

UNCOV
3882
  int32_t nTables = taosArrayGetSize(pInfo->pTables);
×
UNCOV
3883
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nTables));
×
UNCOV
3884
  if (pEncoder->data && nTables > 0) {
×
UNCOV
3885
    TAOS_MEMCPY(pEncoder->data + pEncoder->pos, pInfo->pTables->pData, nTables * sizeof(int64_t));
×
3886
  }
UNCOV
3887
  pEncoder->pos += nTables * sizeof(int64_t);
×
3888

UNCOV
3889
_exit:
×
UNCOV
3890
  return code;
×
3891
}
3892

3893
int32_t tSerializeSTriggerCalcRequest(void* buf, int32_t bufLen, const SSTriggerCalcRequest* pReq) {
5,980,557✔
3894
  SEncoder encoder = {0};
5,980,557✔
3895
  int32_t  code = TSDB_CODE_SUCCESS;
5,980,800✔
3896
  int32_t  lino = 0;
5,980,800✔
3897
  int32_t  tlen = 0;
5,980,800✔
3898

3899
  tEncoderInit(&encoder, buf, bufLen);
5,980,800✔
3900
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
5,980,568✔
3901

3902
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
11,961,368✔
3903
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->runnerTaskId));
11,961,600✔
3904
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
11,961,600✔
3905
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->triggerType));
11,961,368✔
3906
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->isMultiGroupCalc));
11,961,136✔
3907
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->stbPartByTbname));
11,960,672✔
3908

3909
  if (!pReq->isMultiGroupCalc) {
5,980,104✔
3910
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->gid));
11,961,368✔
3911
    TAOS_CHECK_EXIT(tSerializeSTriggerCalcParam(&encoder, pReq->params, false, true));
5,980,800✔
3912
    TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, pReq->groupColVals, -1));
5,980,800✔
3913
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->createTable));
11,960,208✔
3914
  } else {
UNCOV
3915
    int32_t nGroups = tSimpleHashGetSize(pReq->pGroupCalcInfos);
×
UNCOV
3916
    TAOS_CHECK_EXIT(tEncodeI32(&encoder, nGroups));
×
3917
    int32_t                 iter1 = 0;
×
3918
    SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashIterate(pReq->pGroupCalcInfos, NULL, &iter1);
×
3919
    while (pCalcInfo != NULL) {
×
UNCOV
3920
      int64_t* gid = tSimpleHashGetKey(pCalcInfo, NULL);
×
3921
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, *gid));
×
3922
      TAOS_CHECK_EXIT(tSerializeSSTriggerGroupCalcInfo(&encoder, pCalcInfo));
×
3923
      pCalcInfo = tSimpleHashIterate(pReq->pGroupCalcInfos, pCalcInfo, &iter1);
×
3924
    }
3925

3926
    int32_t nVnodes = tSimpleHashGetSize(pReq->pGroupReadInfos);
×
3927
    TAOS_CHECK_EXIT(tEncodeI32(&encoder, nVnodes));
×
3928
    int32_t iter2 = 0;
×
UNCOV
3929
    void*   px = tSimpleHashIterate(pReq->pGroupReadInfos, NULL, &iter2);
×
3930
    while (px != NULL) {
×
UNCOV
3931
      int32_t* vgId = tSimpleHashGetKey(px, NULL);
×
3932
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, *vgId));
×
3933
      SArray* pInfos = *(SArray**)px;
×
3934
      int32_t nGroups = taosArrayGetSize(pInfos);
×
3935
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, nGroups));
×
UNCOV
3936
      for (int32_t i = 0; i < nGroups; ++i) {
×
3937
        SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfos, i);
×
UNCOV
3938
        TAOS_CHECK_EXIT(tSerializeSSTriggerGroupReadInfo(&encoder, pReadInfo));
×
3939
      }
3940
      px = tSimpleHashIterate(pReq->pGroupReadInfos, px, &iter2);
×
3941
    }
3942
  }
3943

3944
  TAOS_CHECK_EXIT(tEncodeBool(&encoder, pReq->isWindowTrigger));
5,979,640✔
3945
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->precision));
11,961,600✔
3946

3947
  tEndEncode(&encoder);
5,980,800✔
3948

3949
_exit:
5,980,568✔
3950
  if (code != TSDB_CODE_SUCCESS) {
5,980,568✔
UNCOV
3951
    tlen = code;
×
3952
  } else {
3953
    tlen = encoder.pos;
5,980,568✔
3954
  }
3955
  tEncoderClear(&encoder);
5,980,568✔
3956
  return tlen;
5,980,568✔
3957
}
3958

3959
static int32_t tDeserializeSSTriggerGroupCalcInfo(SDecoder* pDecoder, SSTriggerGroupCalcInfo* pInfo) {
11,368✔
3960
  int32_t code = 0;
11,368✔
3961
  int32_t lino = 0;
11,368✔
3962

3963
  TAOS_CHECK_EXIT(tDeserializeSTriggerCalcParam(pDecoder, &pInfo->pParams, false));
11,368✔
3964
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(pDecoder, &pInfo->pGroupColVals));
11,368✔
3965
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pInfo->createTable));
22,736✔
3966

3967
_exit:
11,368✔
3968
  return code;
11,368✔
3969
}
3970

3971
static int32_t tDeserializeSSTriggerGroupReadInfo(SDecoder* pDecoder, SSTriggerGroupReadInfo* pInfo) {
×
3972
  int32_t code = 0;
×
3973
  int32_t lino = 0;
×
3974

UNCOV
3975
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->gid));
×
3976
  int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
×
3977
  TAOS_MEMCPY(&pInfo->firstParam, pDecoder->data + pDecoder->pos, plainFieldSize);
×
3978
  pDecoder->pos += plainFieldSize;
×
3979
  TAOS_MEMCPY(&pInfo->lastParam, pDecoder->data + pDecoder->pos, plainFieldSize);
×
3980
  pDecoder->pos += plainFieldSize;
×
3981

3982
  int32_t nTables = 0;
×
3983
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nTables));
×
3984
  if (nTables > 0) {
×
3985
    pInfo->pTables = taosArrayInit_s(sizeof(int64_t), nTables);
×
3986
    QUERY_CHECK_NULL(pInfo->pTables, code, lino, _exit, terrno);
×
3987
    TAOS_MEMCPY(pInfo->pTables->pData, pDecoder->data + pDecoder->pos, nTables * sizeof(int64_t));
×
3988
  }
UNCOV
3989
  pDecoder->pos += nTables * sizeof(int64_t);
×
3990

UNCOV
3991
_exit:
×
UNCOV
3992
  return code;
×
3993
}
3994

3995
int32_t tDeserializeSTriggerCalcRequest(void* buf, int32_t bufLen, SSTriggerCalcRequest* pReq) {
2,989,094✔
3996
  SDecoder decoder = {0};
2,989,094✔
3997
  int32_t  code = TSDB_CODE_SUCCESS;
2,989,094✔
3998
  int32_t  lino = 0;
2,989,094✔
3999

4000
  tDecoderInit(&decoder, buf, bufLen);
2,989,094✔
4001
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
2,989,094✔
4002

4003
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
5,978,188✔
4004
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->runnerTaskId));
5,978,188✔
4005
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
5,978,188✔
4006
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->triggerType));
5,978,188✔
4007
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->isMultiGroupCalc));
5,978,188✔
4008
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->stbPartByTbname));
5,978,188✔
4009

4010
  if (!pReq->isMultiGroupCalc) {
2,989,094✔
4011
    TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->gid));
5,978,188✔
4012
    TAOS_CHECK_EXIT(tDeserializeSTriggerCalcParam(&decoder, &pReq->params, false));
2,989,094✔
4013
    TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &pReq->groupColVals));
2,989,094✔
4014
    TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->createTable));
5,977,394✔
4015
  } else {
UNCOV
4016
    pReq->pGroupCalcInfos = tSimpleHashInit(256, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT));
×
UNCOV
4017
    QUERY_CHECK_NULL(pReq->pGroupCalcInfos, code, lino, _exit, terrno);
×
UNCOV
4018
    tSimpleHashSetFreeFp(pReq->pGroupCalcInfos, tDestroySSTriggerGroupCalcInfo);
×
UNCOV
4019
    int32_t nGroups = 0;
×
UNCOV
4020
    TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nGroups));
×
4021
    for (int32_t i = 0; i < nGroups; i++) {
×
4022
      int64_t gid = 0;
×
4023
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &gid));
×
UNCOV
4024
      SSTriggerGroupCalcInfo info = {0};
×
4025
      TAOS_CHECK_EXIT(tSimpleHashPut(pReq->pGroupCalcInfos, &gid, sizeof(int64_t), &info, sizeof(info)));
×
4026
      SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashGet(pReq->pGroupCalcInfos, &gid, sizeof(int64_t));
×
4027
      QUERY_CHECK_NULL(pCalcInfo, code, lino, _exit, TSDB_CODE_INTERNAL_ERROR);
×
4028
      TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupCalcInfo(&decoder, pCalcInfo));
×
4029
    }
4030

UNCOV
4031
    int32_t nVnodes = 0;
×
4032
    TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nVnodes));
×
4033
    pReq->pGroupReadInfos = tSimpleHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT));
×
4034
    QUERY_CHECK_NULL(pReq->pGroupReadInfos, code, lino, _exit, terrno);
×
4035
    tSimpleHashSetFreeFp(pReq->pGroupReadInfos, tDestroySSTriggerGroupReadInfoArray);
×
4036
    for (int32_t i = 0; i < nVnodes; i++) {
×
4037
      int32_t vgId = 0;
×
UNCOV
4038
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &vgId));
×
4039
      int32_t nGroups = 0;
×
UNCOV
4040
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nGroups));
×
4041
      SArray* pInfos = taosArrayInit_s(sizeof(SSTriggerGroupReadInfo), nGroups);
×
4042
      QUERY_CHECK_NULL(pInfos, code, lino, _exit, terrno);
×
UNCOV
4043
      code = tSimpleHashPut(pReq->pGroupReadInfos, &vgId, sizeof(int32_t), &pInfos, POINTER_BYTES);
×
UNCOV
4044
      if (code != TSDB_CODE_SUCCESS) {
×
UNCOV
4045
        taosArrayDestroy(pInfos);
×
UNCOV
4046
        TAOS_CHECK_EXIT(code);
×
4047
      }
UNCOV
4048
      for (int32_t j = 0; j < nGroups; ++j) {
×
UNCOV
4049
        SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfos, j);
×
UNCOV
4050
        TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupReadInfo(&decoder, pReadInfo));
×
4051
      }
4052
    }
4053
  }
4054

4055
  if (!tDecodeIsEnd(&decoder)) {
2,989,094✔
4056
    TAOS_CHECK_EXIT(tDecodeBool(&decoder, &pReq->isWindowTrigger));
2,989,064✔
4057
    TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->precision));
5,978,188✔
4058
  }
4059

4060
  tEndDecode(&decoder);
2,989,124✔
4061

4062
_exit:
2,989,064✔
4063
  tDecoderClear(&decoder);
2,989,064✔
4064
  return code;
2,989,094✔
4065
}
4066

4067
void tDestroySTriggerCalcRequest(SSTriggerCalcRequest* pReq) {
8,841,812✔
4068
  if (pReq != NULL) {
8,841,812✔
4069
    if (pReq->params != NULL) {
8,841,580✔
4070
      taosArrayDestroyEx(pReq->params, tDestroySSTriggerCalcParam);
5,574,610✔
4071
      pReq->params = NULL;
5,574,842✔
4072
    }
4073
    if (pReq->groupColVals != NULL) {
8,842,044✔
4074
      taosArrayDestroyEx(pReq->groupColVals, tDestroySStreamGroupValue);
3,051,390✔
4075
      pReq->groupColVals = NULL;
3,051,390✔
4076
    }
4077
    if (pReq->pGroupCalcInfos != NULL) {
8,841,812✔
4078
      tSimpleHashCleanup(pReq->pGroupCalcInfos);
×
UNCOV
4079
      pReq->pGroupCalcInfos = NULL;
×
4080
    }
4081
    if (pReq->pGroupReadInfos != NULL) {
8,841,812✔
4082
      tSimpleHashCleanup(pReq->pGroupReadInfos);
×
4083
      pReq->pGroupReadInfos = NULL;
×
4084
    }
4085
    blockDataDestroy(pReq->pOutBlock);
8,841,812✔
4086
    pReq->pOutBlock = NULL;
8,841,812✔
4087
  }
4088
}
8,842,044✔
4089

4090
int32_t tSerializeSTriggerDropTableRequest(void* buf, int32_t bufLen, const SSTriggerDropRequest* pReq) {
×
4091
  SEncoder encoder = {0};
×
4092
  int32_t  code = TSDB_CODE_SUCCESS;
×
4093
  int32_t  lino = 0;
×
4094
  int32_t  tlen = 0;
×
4095

4096
  tEncoderInit(&encoder, buf, bufLen);
×
UNCOV
4097
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
×
4098

4099
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
×
4100
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->runnerTaskId));
×
UNCOV
4101
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
×
UNCOV
4102
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->gid));
×
4103

UNCOV
4104
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, pReq->groupColVals, -1));
×
4105

UNCOV
4106
  tEndEncode(&encoder);
×
4107

UNCOV
4108
_exit:
×
UNCOV
4109
  if (code != TSDB_CODE_SUCCESS) {
×
UNCOV
4110
    tlen = code;
×
4111
  } else {
UNCOV
4112
    tlen = encoder.pos;
×
4113
  }
UNCOV
4114
  tEncoderClear(&encoder);
×
UNCOV
4115
  return tlen;
×
4116
}
4117

UNCOV
4118
int32_t tDeserializeSTriggerDropTableRequest(void* buf, int32_t bufLen, SSTriggerDropRequest* pReq) {
×
UNCOV
4119
  SDecoder decoder = {0};
×
UNCOV
4120
  int32_t  code = TSDB_CODE_SUCCESS;
×
UNCOV
4121
  int32_t  lino = 0;
×
4122

UNCOV
4123
  tDecoderInit(&decoder, buf, bufLen);
×
UNCOV
4124
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
×
4125

UNCOV
4126
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
×
UNCOV
4127
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->runnerTaskId));
×
4128
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
×
4129
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->gid));
×
4130

UNCOV
4131
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &pReq->groupColVals));
×
4132

4133
  tEndDecode(&decoder);
×
4134

UNCOV
4135
_exit:
×
UNCOV
4136
  tDecoderClear(&decoder);
×
UNCOV
4137
  return code;
×
4138
}
4139

4140
void tDestroySSTriggerDropRequest(SSTriggerDropRequest* pReq) {
×
4141
  if (pReq != NULL) {
×
4142
    if (pReq->groupColVals != NULL) {
×
4143
      taosArrayDestroyEx(pReq->groupColVals, tDestroySStreamGroupValue);
×
4144
      pReq->groupColVals = NULL;
×
4145
    }
4146
  }
4147
}
×
4148

4149
int32_t tSerializeSTriggerCtrlRequest(void* buf, int32_t bufLen, const SSTriggerCtrlRequest* pReq) {
61,556,806✔
4150
  SEncoder encoder = {0};
61,556,806✔
4151
  int32_t  code = TSDB_CODE_SUCCESS;
61,556,806✔
4152
  int32_t  lino = 0;
61,556,806✔
4153
  int32_t  tlen = 0;
61,556,806✔
4154

4155
  tEncoderInit(&encoder, buf, bufLen);
61,556,806✔
4156
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
61,556,806✔
4157

4158
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->type));
123,113,612✔
4159
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
123,113,612✔
4160
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->taskId));
123,113,612✔
4161
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
123,113,612✔
4162

4163
  tEndEncode(&encoder);
61,556,806✔
4164

4165
_exit:
61,556,806✔
4166
  if (code != TSDB_CODE_SUCCESS) {
61,556,806✔
UNCOV
4167
    tlen = code;
×
4168
  } else {
4169
    tlen = encoder.pos;
61,556,806✔
4170
  }
4171
  tEncoderClear(&encoder);
61,556,806✔
4172
  return tlen;
61,556,806✔
4173
}
4174

4175
int32_t tDeserializeSTriggerCtrlRequest(void* buf, int32_t bufLen, SSTriggerCtrlRequest* pReq) {
92,306,673✔
4176
  SDecoder decoder = {0};
92,306,673✔
4177
  int32_t  code = TSDB_CODE_SUCCESS;
92,308,522✔
4178
  int32_t  lino = 0;
92,308,522✔
4179

4180
  tDecoderInit(&decoder, buf, bufLen);
92,308,522✔
4181
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
92,302,353✔
4182

4183
  int32_t type = 0;
92,314,997✔
4184
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &type));
92,316,500✔
4185
  pReq->type = type;
92,316,500✔
4186
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
184,632,391✔
4187
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->taskId));
184,640,884✔
4188
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
184,642,458✔
4189

4190
  tEndDecode(&decoder);
92,320,059✔
4191

4192
_exit:
92,314,363✔
4193
  tDecoderClear(&decoder);
92,314,849✔
4194
  return code;
92,308,612✔
4195
}
4196

4197
int32_t tSerializeStRtFuncInfo(SEncoder* pEncoder, const SStreamRuntimeFuncInfo* pInfo, bool needStreamRtInfo, bool needStreamGrpInfo) {
31,634,989✔
4198
  int32_t code = 0, lino = 0;
31,634,989✔
4199
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pInfo->isMultiGroupCalc));
63,269,278✔
4200
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pInfo->stbPartByTbname));
63,267,557✔
4201
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, needStreamRtInfo));
31,633,268✔
4202
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, needStreamGrpInfo));
31,635,091✔
4203
  if (pInfo->isMultiGroupCalc) {
31,636,108✔
4204
    if (needStreamRtInfo) {
12,992✔
4205
      if (needStreamGrpInfo) {
12,992✔
4206
        int32_t nGroups = taosArrayGetSize(pInfo->curGrpRead);
12,992✔
4207
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nGroups));
12,992✔
4208
        int8_t withGrpCalcInfo = 1;
12,992✔
4209
        for (int32_t i = 0; i < nGroups; ++i) {
12,992✔
UNCOV
4210
          SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfo->curGrpRead, i);
×
UNCOV
4211
          TAOS_CHECK_EXIT(tSerializeSSTriggerGroupReadInfo(pEncoder, pReadInfo));
×
UNCOV
4212
          if (0 == i) {
×
UNCOV
4213
            withGrpCalcInfo = (taosArrayGetSize(pReadInfo->pTables) <= 0);
×
4214
          }
4215
        }
4216
        
4217
        TAOS_CHECK_EXIT(tEncodeI8(pEncoder, withGrpCalcInfo));
25,984✔
4218
        if (withGrpCalcInfo) {
12,992✔
4219
          int32_t nGroups = tSimpleHashGetSize(pInfo->pGroupCalcInfos);
12,992✔
4220
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nGroups));
12,992✔
4221
          int32_t                 iter1 = 0;
12,992✔
4222
          SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashIterate(pInfo->pGroupCalcInfos, NULL, &iter1);
12,992✔
4223
          while (pCalcInfo != NULL) {
35,728✔
4224
            int64_t* gid = tSimpleHashGetKey(pCalcInfo, NULL);
22,736✔
4225
            TAOS_CHECK_EXIT(tEncodeI64(pEncoder, *gid));
45,472✔
4226
            TAOS_CHECK_EXIT(tSerializeSSTriggerGroupCalcInfo(pEncoder, pCalcInfo));
22,736✔
4227
            pCalcInfo = tSimpleHashIterate(pInfo->pGroupCalcInfos, pCalcInfo, &iter1);
22,736✔
4228
          }
4229
        }
4230
      } else {
UNCOV
4231
        int32_t nGroups = tSimpleHashGetSize(pInfo->pGroupCalcInfos);
×
UNCOV
4232
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nGroups));
×
UNCOV
4233
        int32_t                 iter1 = 0;
×
UNCOV
4234
        SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashIterate(pInfo->pGroupCalcInfos, NULL, &iter1);
×
UNCOV
4235
        while (pCalcInfo != NULL) {
×
UNCOV
4236
          int64_t* gid = tSimpleHashGetKey(pCalcInfo, NULL);
×
UNCOV
4237
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, *gid));
×
UNCOV
4238
          TAOS_CHECK_EXIT(tSerializeSSTriggerGroupCalcInfo(pEncoder, pCalcInfo));
×
UNCOV
4239
          pCalcInfo = tSimpleHashIterate(pInfo->pGroupCalcInfos, pCalcInfo, &iter1);
×
4240
        }
4241

UNCOV
4242
        int32_t nVnodes = tSimpleHashGetSize(pInfo->pGroupReadInfos);
×
UNCOV
4243
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nVnodes));
×
UNCOV
4244
        int32_t iter2 = 0;
×
UNCOV
4245
        void*   px = tSimpleHashIterate(pInfo->pGroupReadInfos, NULL, &iter2);
×
UNCOV
4246
        while (px != NULL) {
×
UNCOV
4247
          int32_t* vgId = tSimpleHashGetKey(px, NULL);
×
UNCOV
4248
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *vgId));
×
UNCOV
4249
          SArray* pInfos = *(SArray**)px;
×
UNCOV
4250
          int32_t nGroups = taosArrayGetSize(pInfos);
×
UNCOV
4251
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nGroups));
×
UNCOV
4252
          for (int32_t i = 0; i < nGroups; ++i) {
×
UNCOV
4253
            SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfos, i);
×
UNCOV
4254
            TAOS_CHECK_EXIT(tSerializeSSTriggerGroupReadInfo(pEncoder, pReadInfo));
×
4255
          }
UNCOV
4256
          px = tSimpleHashIterate(pInfo->pGroupReadInfos, px, &iter2);
×
4257
        }
4258
      }
4259
    }
4260
  } else {
4261
    TAOS_CHECK_EXIT(tSerializeSTriggerCalcParam(pEncoder, pInfo->pStreamPesudoFuncVals, true, needStreamRtInfo));
31,622,916✔
4262
    TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(pEncoder, pInfo->pStreamPartColVals, -1));
31,623,048✔
4263
    TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->groupId));
63,244,222✔
4264
  }
4265
  
4266
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->curWindow.skey));
63,268,027✔
4267
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->curWindow.ekey));
63,269,130✔
4268
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pInfo->curIdx));
63,268,722✔
4269
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->sessionId));
63,267,076✔
4270
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pInfo->withExternalWindow));
31,632,665✔
4271
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pInfo->triggerType));
63,268,141✔
4272
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pInfo->isWindowTrigger));
31,634,215✔
4273
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pInfo->precision));
63,267,798✔
4274
_exit:
31,632,405✔
4275
  return code;
31,634,518✔
4276
}
4277

4278
int32_t tDeserializeStRtFuncInfo(SDecoder* pDecoder, SStreamRuntimeFuncInfo* pInfo) {
15,798,471✔
4279
  int32_t code = 0, lino = 0;
15,798,471✔
4280
  int32_t size = 0;
15,798,471✔
4281
  bool needStreamRtInfo = false;
15,798,471✔
4282
  bool needStreamGrpInfo = false;
15,798,469✔
4283
  
4284
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pInfo->isMultiGroupCalc));
31,597,192✔
4285
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pInfo->stbPartByTbname));
31,598,982✔
4286
  TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &needStreamRtInfo));
15,800,016✔
4287
  TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &needStreamGrpInfo));
15,799,530✔
4288
  
4289
  if (pInfo->isMultiGroupCalc) {
15,799,502✔
4290
    if (needStreamRtInfo) {
6,496✔
4291
      if (needStreamGrpInfo) {
6,496✔
4292
        int32_t nGroups = 0;
6,496✔
4293
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nGroups));
6,496✔
4294
        if (nGroups > 0) {
6,496✔
4295
          pInfo->curGrpRead = taosArrayInit_s(sizeof(SSTriggerGroupReadInfo), nGroups);
×
4296
          QUERY_CHECK_NULL(pInfo->curGrpRead, code, lino, _exit, terrno);
×
4297
        }
4298
        for (int32_t j = 0; j < nGroups; ++j) {
6,496✔
4299
          SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfo->curGrpRead, j);
×
4300
          TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupReadInfo(pDecoder, pReadInfo));
×
4301
        }
4302
        int8_t withGrpCalcInfo = 0;
6,496✔
4303
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &withGrpCalcInfo));
6,496✔
4304
        if (withGrpCalcInfo) {
6,496✔
4305
          int32_t nGroups = 0;
6,496✔
4306
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nGroups));
6,496✔
4307
          pInfo->pGroupCalcInfos = tSimpleHashInit(nGroups, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT));
6,496✔
4308
          QUERY_CHECK_NULL(pInfo->pGroupCalcInfos, code, lino, _exit, terrno);
6,496✔
4309
          tSimpleHashSetFreeFp(pInfo->pGroupCalcInfos, tDestroySSTriggerGroupCalcInfo);
6,496✔
4310

4311
          for (int32_t i = 0; i < nGroups; i++) {
17,864✔
4312
            int64_t gid = 0;
11,368✔
4313
            TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &gid));
11,368✔
4314
            SSTriggerGroupCalcInfo info = {0};
11,368✔
4315
            TAOS_CHECK_EXIT(tSimpleHashPut(pInfo->pGroupCalcInfos, &gid, sizeof(int64_t), &info, sizeof(info)));
11,368✔
4316
            SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashGet(pInfo->pGroupCalcInfos, &gid, sizeof(int64_t));
11,368✔
4317
            QUERY_CHECK_NULL(pCalcInfo, code, lino, _exit, TSDB_CODE_INTERNAL_ERROR);
11,368✔
4318
            TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupCalcInfo(pDecoder, pCalcInfo));
11,368✔
4319
          }
4320
        }
4321
      } else {
UNCOV
4322
        int32_t nGroups = 0;
×
UNCOV
4323
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nGroups));
×
UNCOV
4324
        pInfo->pGroupCalcInfos = tSimpleHashInit(nGroups, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT));
×
UNCOV
4325
        QUERY_CHECK_NULL(pInfo->pGroupCalcInfos, code, lino, _exit, terrno);
×
UNCOV
4326
        tSimpleHashSetFreeFp(pInfo->pGroupCalcInfos, tDestroySSTriggerGroupCalcInfo);
×
4327

UNCOV
4328
        for (int32_t i = 0; i < nGroups; i++) {
×
UNCOV
4329
          int64_t gid = 0;
×
UNCOV
4330
          TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &gid));
×
UNCOV
4331
          SSTriggerGroupCalcInfo info = {0};
×
UNCOV
4332
          TAOS_CHECK_EXIT(tSimpleHashPut(pInfo->pGroupCalcInfos, &gid, sizeof(int64_t), &info, sizeof(info)));
×
UNCOV
4333
          SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashGet(pInfo->pGroupCalcInfos, &gid, sizeof(int64_t));
×
UNCOV
4334
          QUERY_CHECK_NULL(pCalcInfo, code, lino, _exit, TSDB_CODE_INTERNAL_ERROR);
×
UNCOV
4335
          TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupCalcInfo(pDecoder, pCalcInfo));
×
4336
        }
4337

UNCOV
4338
        int32_t nVnodes = 0;
×
UNCOV
4339
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nVnodes));
×
UNCOV
4340
        pInfo->pGroupReadInfos = tSimpleHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT));
×
UNCOV
4341
        QUERY_CHECK_NULL(pInfo->pGroupReadInfos, code, lino, _exit, terrno);
×
UNCOV
4342
        tSimpleHashSetFreeFp(pInfo->pGroupReadInfos, tDestroySSTriggerGroupReadInfoArray);
×
UNCOV
4343
        for (int32_t i = 0; i < nVnodes; i++) {
×
UNCOV
4344
          int32_t vgId = 0;
×
4345
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgId));
×
4346
          int32_t nGroups = 0;
×
UNCOV
4347
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nGroups));
×
UNCOV
4348
          SArray* pInfos = taosArrayInit_s(sizeof(SSTriggerGroupReadInfo), nGroups);
×
4349
          QUERY_CHECK_NULL(pInfos, code, lino, _exit, terrno);
×
4350
          code = tSimpleHashPut(pInfo->pGroupReadInfos, &vgId, sizeof(int32_t), &pInfos, POINTER_BYTES);
×
UNCOV
4351
          if (code != TSDB_CODE_SUCCESS) {
×
UNCOV
4352
            taosArrayDestroy(pInfos);
×
UNCOV
4353
            TAOS_CHECK_EXIT(code);
×
4354
          }
UNCOV
4355
          for (int32_t j = 0; j < nGroups; ++j) {
×
UNCOV
4356
            SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfos, j);
×
UNCOV
4357
            TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupReadInfo(pDecoder, pReadInfo));
×
4358
          }
4359
        }
4360
      }
4361
    }
4362
  } else {
4363
    TAOS_CHECK_EXIT(tDeserializeSTriggerCalcParam(pDecoder, &pInfo->pStreamPesudoFuncVals, true));
15,793,262✔
4364
    TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(pDecoder, &pInfo->pStreamPartColVals));
15,792,474✔
4365
    TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->groupId));
31,586,530✔
4366
  }
4367
  
4368
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->curWindow.skey));
31,598,722✔
4369
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->curWindow.ekey));
31,598,722✔
4370
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pInfo->curIdx));
31,599,516✔
4371
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->sessionId));
31,599,774✔
4372
  TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pInfo->withExternalWindow));
15,800,016✔
4373
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pInfo->triggerType));
31,600,032✔
4374
  if (!tDecodeIsEnd(pDecoder)) {
15,799,222✔
4375
    TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pInfo->isWindowTrigger));
15,799,222✔
4376
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pInfo->precision));
31,599,759✔
4377
  }
4378
_exit:
15,800,016✔
4379
  return code;
15,800,016✔
4380
}
4381

4382
void tDestroyStRtFuncInfo(SStreamRuntimeFuncInfo* pInfo){
535,607,261✔
4383
  if (pInfo == NULL) return;
535,607,261✔
4384
  if (pInfo->pStreamPesudoFuncVals != NULL) {
26,100,438✔
4385
    taosArrayDestroyEx(pInfo->pStreamPesudoFuncVals, tDestroySSTriggerCalcParam);
9,266,643✔
4386
    pInfo->pStreamPesudoFuncVals = NULL;
9,265,170✔
4387
  }
4388
  if (pInfo->pStreamPartColVals != NULL) {
26,122,941✔
4389
    taosArrayDestroyEx(pInfo->pStreamPartColVals, tDestroySStreamGroupValue);
9,564,637✔
4390
    pInfo->pStreamPartColVals = NULL;
9,564,920✔
4391
  }
4392
  if (pInfo->pGroupCalcInfos != NULL) {
26,122,024✔
4393
    tSimpleHashCleanup(pInfo->pGroupCalcInfos);
77,140✔
4394
    pInfo->pGroupCalcInfos = NULL;
77,140✔
4395
  }
4396
  if (pInfo->pGroupReadInfos != NULL) {
26,122,024✔
4397
    tSimpleHashCleanup(pInfo->pGroupReadInfos);
×
4398
    pInfo->pGroupReadInfos = NULL;
×
4399
  }  
4400
  if (pInfo->outNormalTable != NULL) {
26,122,553✔
4401
    taosMemoryFreeClear(pInfo->outNormalTable);
×
4402
  }
4403
}
4404

4405
int32_t tSerializeSStreamMsgVTableInfo(void* buf, int32_t bufLen, const SStreamMsgVTableInfo* pRsp){
155,210✔
4406
  SEncoder encoder = {0};
155,210✔
4407
  int32_t  code = TSDB_CODE_SUCCESS;
155,210✔
4408
  int32_t  lino = 0;
155,210✔
4409
  int32_t  tlen = 0;
155,210✔
4410

4411
  tEncoderInit(&encoder, buf, bufLen);
155,210✔
4412
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
155,210✔
4413

4414
  int32_t size = taosArrayGetSize(pRsp->infos);
155,210✔
4415
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
155,210✔
4416
  for (int32_t i = 0; i < size; ++i) {
537,858✔
4417
    VTableInfo* info = taosArrayGet(pRsp->infos, i);
382,648✔
4418
    if (info == NULL) {
382,648✔
UNCOV
4419
      TAOS_CHECK_EXIT(terrno);
×
4420
    }
4421
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, info->gId));
765,296✔
4422
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, info->uid));
765,296✔
4423
    TAOS_CHECK_EXIT(tEncodeSColRefWrapper(&encoder, &info->cols));
382,648✔
4424
  }
4425

4426
  tEndEncode(&encoder);
155,210✔
4427

4428
_exit:
155,210✔
4429
  if (code != TSDB_CODE_SUCCESS) {
155,210✔
UNCOV
4430
    tlen = code;
×
4431
  } else {
4432
    tlen = encoder.pos;
155,210✔
4433
  }
4434
  tEncoderClear(&encoder);
155,210✔
4435
  return tlen;
155,210✔
4436
}
4437

4438
int32_t tDeserializeSStreamMsgVTableInfo(void* buf, int32_t bufLen, SStreamMsgVTableInfo *vTableInfo){
77,605✔
4439
  SDecoder decoder = {0};
77,605✔
4440
  int32_t  code = TSDB_CODE_SUCCESS;
77,605✔
4441
  int32_t  lino = 0;
77,605✔
4442
  int32_t  size = 0;
77,605✔
4443

4444
  tDecoderInit(&decoder, buf, bufLen);
77,605✔
4445
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
77,605✔
4446

4447
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
77,605✔
4448
  vTableInfo->infos = taosArrayInit(size, sizeof(VTableInfo));
77,605✔
4449
  if (vTableInfo->infos == NULL) {
77,605✔
UNCOV
4450
    TAOS_CHECK_EXIT(terrno);
×
4451
  }
4452
  for (int32_t i = 0; i < size; ++i) {
268,929✔
4453
    VTableInfo* info = taosArrayReserve(vTableInfo->infos, 1);
191,324✔
4454
    if (info == NULL) {
191,324✔
UNCOV
4455
      TAOS_CHECK_EXIT(terrno);
×
4456
    }
4457
    TAOS_CHECK_EXIT(tDecodeI64(&decoder, &info->gId));
382,648✔
4458
    TAOS_CHECK_EXIT(tDecodeI64(&decoder, &info->uid));
382,648✔
4459
    TAOS_CHECK_EXIT(tDecodeSColRefWrapperEx(&decoder, &info->cols, false));
191,324✔
4460
  }
4461

4462
  tEndDecode(&decoder);
77,605✔
4463

4464
_exit:
77,605✔
4465
  tDecoderClear(&decoder);
77,605✔
4466
  return code;
77,605✔
4467
}
4468

4469

4470
void tDestroyVTableInfo(void *ptr) {
382,648✔
4471
  if (NULL == ptr) {
382,648✔
UNCOV
4472
    return;
×
4473
  }
4474
  VTableInfo* pTable = (VTableInfo*)ptr;
382,648✔
4475
  taosMemoryFree(pTable->cols.pColRef);
382,648✔
4476
}
4477

4478
void tDestroySStreamMsgVTableInfo(SStreamMsgVTableInfo *ptr) {
40,119,253✔
4479
  if (ptr == NULL) return;
40,119,253✔
4480
  taosArrayDestroyEx(ptr->infos, tDestroyVTableInfo);
40,119,253✔
4481
  ptr->infos = NULL;
40,119,253✔
4482
}
4483

4484
int32_t tSerializeSStreamTsResponse(void* buf, int32_t bufLen, const SStreamTsResponse* pRsp) {
1,257,999✔
4485
  SEncoder encoder = {0};
1,257,999✔
4486
  int32_t  code = TSDB_CODE_SUCCESS;
1,257,999✔
4487
  int32_t  lino = 0;
1,257,999✔
4488
  int32_t  tlen = 0;
1,257,999✔
4489

4490
  tEncoderInit(&encoder, buf, bufLen);
1,257,999✔
4491
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1,257,253✔
4492

4493
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRsp->ver));
2,515,738✔
4494
  int32_t size = taosArrayGetSize(pRsp->tsInfo);
1,257,756✔
4495
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
1,257,010✔
4496
  for (int32_t i = 0; i < size; ++i) {
2,975,375✔
4497
    STsInfo* tsInfo = taosArrayGet(pRsp->tsInfo, i);
1,718,058✔
4498
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, tsInfo->gId));
3,436,406✔
4499
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, tsInfo->ts));
3,436,423✔
4500
  }
4501

4502
  tEndEncode(&encoder);
1,257,317✔
4503

4504
_exit:
1,257,999✔
4505
  if (code != TSDB_CODE_SUCCESS) {
1,257,999✔
UNCOV
4506
    tlen = code;
×
4507
  } else {
4508
    tlen = encoder.pos;
1,257,999✔
4509
  }
4510
  tEncoderClear(&encoder);
1,257,999✔
4511
  return tlen;
1,256,571✔
4512
}
4513

4514
int32_t tDeserializeSStreamTsResponse(void* buf, int32_t bufLen, void *pBlock) {
629,389✔
4515
  SDecoder decoder = {0};
629,389✔
4516
  int32_t  code = TSDB_CODE_SUCCESS;
629,389✔
4517
  int32_t  lino = 0;
629,389✔
4518
  SSDataBlock *pResBlock = pBlock;
629,389✔
4519

4520
  tDecoderInit(&decoder, buf, bufLen);
629,389✔
4521
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
629,389✔
4522

4523
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, (int64_t*)&pResBlock->info.id.groupId));
1,258,778✔
4524
  int32_t numOfCols = 2;
629,389✔
4525
  if (pResBlock->pDataBlock == NULL) {
629,389✔
4526
    pResBlock->pDataBlock = taosArrayInit_s(sizeof(SColumnInfoData), numOfCols);
629,389✔
4527
    if (pResBlock->pDataBlock == NULL) {
629,389✔
UNCOV
4528
      TAOS_CHECK_EXIT(terrno);
×
4529
    }
4530
    for (int32_t i = 0; i< numOfCols; ++i) {
1,888,167✔
4531
      SColumnInfoData *pColInfoData = taosArrayGet(pResBlock->pDataBlock, i);
1,258,778✔
4532
      if (pColInfoData == NULL) {
1,258,778✔
UNCOV
4533
        TAOS_CHECK_EXIT(terrno);
×
4534
      }
4535
      pColInfoData->info.type = TSDB_DATA_TYPE_BIGINT;
1,258,778✔
4536
      pColInfoData->info.bytes = sizeof(int64_t);
1,258,778✔
4537
    }
4538
  }
4539
  int32_t numOfRows = 0;
629,389✔
4540
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &numOfRows));
629,389✔
4541
  TAOS_CHECK_EXIT(blockDataEnsureCapacity(pResBlock, numOfRows));
629,389✔
4542
  for (int32_t i = 0; i < numOfRows; ++i) {
1,489,127✔
4543
    for (int32_t j = 0; j < numOfCols; ++j) {
2,579,214✔
4544
      SColumnInfoData *pColInfoData = taosArrayGet(pResBlock->pDataBlock, j);
1,719,476✔
4545
      if (pColInfoData == NULL) {
1,719,476✔
UNCOV
4546
        TAOS_CHECK_EXIT(terrno);
×
4547
      }
4548
      int64_t value = 0;
1,719,476✔
4549
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &value));
1,719,476✔
4550
      colDataSetInt64(pColInfoData, i, &value);
1,719,476✔
4551
    }
4552
  }
4553

4554
  pResBlock->info.dataLoad = 1;
629,389✔
4555
  pResBlock->info.rows = numOfRows;
629,389✔
4556

4557
  tEndDecode(&decoder);
629,389✔
4558

4559
_exit:
629,389✔
4560
  tDecoderClear(&decoder);
629,389✔
4561
  return code;
629,389✔
4562
}
4563

4564
static int32_t encodeData(SEncoder* encoder, void* pBlock, SSHashObj* indexHash) {
2,257,213✔
4565
  int32_t code = TSDB_CODE_SUCCESS;
2,257,213✔
4566
  int32_t lino = 0;
2,257,213✔
4567
  int32_t len = 0;
2,257,213✔
4568
  if (encoder->data == NULL){
2,257,213✔
4569
    len = blockGetEncodeSize(pBlock);
1,128,728✔
4570
  } else {
4571
    len = blockEncode(pBlock, (char*)(encoder->data + encoder->pos), encoder->size - encoder->pos, blockDataGetNumOfCols(pBlock));
1,128,728✔
4572
    if (len < 0) {
1,128,485✔
UNCOV
4573
      TAOS_CHECK_EXIT(terrno);
×
4574
    }
4575
  }
4576
  encoder->pos += len;
2,257,213✔
4577

4578
  if (indexHash == NULL) {
2,257,213✔
4579
    goto _exit;
1,037,672✔
4580
  } 
4581
  
4582
  uint32_t pos = encoder->pos;
1,219,541✔
4583
  encoder->pos += sizeof(uint32_t); // reserve space for tables
1,219,541✔
4584
  int32_t tables = 0;
1,219,541✔
4585
  
4586
  void*   pe = NULL;
1,219,541✔
4587
  int32_t iter = 0;
1,219,541✔
4588
  while ((pe = tSimpleHashIterate(indexHash, pe, &iter)) != NULL) {
2,681,220✔
4589
    SStreamWalDataSlice* pInfo = (SStreamWalDataSlice*)pe;
1,461,922✔
4590
    if (pInfo->gId == -1){
1,461,922✔
UNCOV
4591
      continue;
×
4592
    }
4593
    int64_t uid = *(int64_t*)(tSimpleHashGetKey(pe, NULL));
1,461,679✔
4594
    TAOS_CHECK_EXIT(tEncodeI64(encoder, uid));
1,461,922✔
4595
    TAOS_CHECK_EXIT(tEncodeU64(encoder, pInfo->gId));
2,923,601✔
4596
    TAOS_CHECK_EXIT(tEncodeI32(encoder, pInfo->startRowIdx));
2,923,601✔
4597
    TAOS_CHECK_EXIT(tEncodeI32(encoder, pInfo->numRows));
2,923,601✔
4598
    tables++;
1,461,679✔
4599
  }
4600
  uint32_t tmpPos = encoder->pos;
1,219,541✔
4601
  encoder->pos = pos;
1,219,784✔
4602
  TAOS_CHECK_EXIT(tEncodeI32(encoder, tables));
1,219,784✔
4603
  encoder->pos = tmpPos;
1,219,784✔
4604
_exit:
2,257,456✔
4605
  return code;
2,257,456✔
4606
}
4607
 
4608
static int32_t encodeBlock(SEncoder* encoder, void* block, SSHashObj* indexHash) {
7,818,888✔
4609
  int32_t  code = TSDB_CODE_SUCCESS;
7,818,888✔
4610
  int32_t  lino = 0;
7,818,888✔
4611
  if (block != NULL && ((SSDataBlock*)block)->info.rows > 0) {
7,818,888✔
4612
    TAOS_CHECK_EXIT(tEncodeI8(encoder, 1));
2,257,213✔
4613
    TAOS_CHECK_EXIT(encodeData(encoder, block, indexHash));
2,257,213✔
4614
  } else {
4615
    TAOS_CHECK_EXIT(tEncodeI8(encoder, 0));
5,562,357✔
4616
  }
4617

4618
_exit:
5,562,357✔
4619
  return code;
7,819,570✔
4620
}
4621

4622
int32_t tSerializeSStreamWalDataResponse(void* buf, int32_t bufLen, SSTriggerWalNewRsp* rsp) {
1,954,528✔
4623
  SEncoder encoder = {0};
1,954,528✔
4624
  int32_t  code = TSDB_CODE_SUCCESS;
1,954,528✔
4625
  int32_t  lino = 0;
1,954,528✔
4626
  int32_t  tlen = 0;
1,954,528✔
4627

4628
  tEncoderInit(&encoder, buf, bufLen);
1,954,528✔
4629
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1,954,771✔
4630

4631
  TAOS_CHECK_EXIT(encodeBlock(&encoder, rsp->dataBlock, rsp->indexHash));
1,955,014✔
4632
  TAOS_CHECK_EXIT(encodeBlock(&encoder, rsp->metaBlock, NULL));
1,954,771✔
4633
  TAOS_CHECK_EXIT(encodeBlock(&encoder, rsp->deleteBlock, NULL));
1,955,014✔
4634
  TAOS_CHECK_EXIT(encodeBlock(&encoder, rsp->tableBlock, NULL));
1,954,771✔
4635

4636
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, rsp->ver));
3,909,785✔
4637
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, rsp->verTime));
3,909,785✔
4638
  tEndEncode(&encoder);
1,955,014✔
4639

4640
_exit:
1,954,519✔
4641
  if (code != TSDB_CODE_SUCCESS) {
1,954,519✔
UNCOV
4642
    tlen = code;
×
4643
  } else {
4644
    tlen = encoder.pos;
1,954,519✔
4645
  }
4646
  tEncoderClear(&encoder);
1,954,519✔
4647
  return tlen;
1,955,014✔
4648
}
4649

4650
static int32_t decodeBlock(SDecoder* decoder, void* pBlock) {
2,931,994✔
4651
  int32_t  code = TSDB_CODE_SUCCESS;
2,931,994✔
4652
  int32_t  lino = 0;
2,931,994✔
4653
  
4654
  int8_t hasData = false;
2,931,994✔
4655
  TAOS_CHECK_EXIT(tDecodeI8(decoder, &hasData));
2,932,788✔
4656
  if (hasData) {
2,932,788✔
4657
    TAOS_CHECK_EXIT(pBlock != NULL ? TSDB_CODE_SUCCESS : TSDB_CODE_INVALID_PARA);
518,904✔
4658
    const char* pEndPos = NULL;
518,904✔
4659
    TAOS_CHECK_EXIT(blockDecode(pBlock, (char*)decoder->data + decoder->pos, &pEndPos));
518,904✔
4660
    decoder->pos = (uint8_t*)pEndPos - decoder->data;
518,904✔
4661
  } else if (pBlock != NULL) {
2,413,884✔
4662
    blockDataEmpty(pBlock);
1,036,125✔
4663
  }
4664

4665
_exit:
2,929,912✔
4666
  return code;
2,931,994✔
4667
}
4668

4669
int32_t tDeserializeSStreamWalDataResponse(void* buf, int32_t bufLen, SSTriggerWalNewRsp* pRsp, SArray* pSlices){
977,677✔
4670
  SDecoder     decoder = {0};
977,677✔
4671
  int32_t      code = TSDB_CODE_SUCCESS;
977,677✔
4672
  int32_t      lino = 0;
977,677✔
4673
  SSDataBlock* pBlock = NULL;
977,677✔
4674

4675
  tDecoderInit(&decoder, buf, bufLen);
977,677✔
4676
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
977,677✔
4677

4678
  // decode data block
4679
  int8_t hasData = false;
977,677✔
4680
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &hasData));
977,677✔
4681
  pBlock = pRsp->dataBlock;
977,677✔
4682
  if (hasData) {
977,677✔
4683
    TAOS_CHECK_EXIT(pBlock != NULL ? TSDB_CODE_SUCCESS : TSDB_CODE_INVALID_PARA);
609,994✔
4684
    const char* pEndPos = NULL;
609,994✔
4685
    TAOS_CHECK_EXIT(blockDecode(pBlock, (char*)decoder.data + decoder.pos, &pEndPos));
609,994✔
4686
    decoder.pos = (uint8_t*)pEndPos - decoder.data;
609,994✔
4687

4688
    int32_t nSlices = 0;
609,994✔
4689
    TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nSlices));
609,994✔
4690
    TAOS_CHECK_EXIT(taosArrayEnsureCap(pSlices, nSlices));
609,994✔
4691
    taosArrayClear(pSlices);
609,994✔
4692
    int64_t  uid = 0;
609,994✔
4693
    uint64_t gid = 0;
609,994✔
4694
    int32_t  startIdx = 0;
609,994✔
4695
    int32_t  numRows = 0;
609,994✔
4696
    for (int32_t i = 0; i < nSlices; i++) {
1,340,848✔
4697
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &uid));
731,097✔
4698
      TAOS_CHECK_EXIT(tDecodeU64(&decoder, &gid));
731,097✔
4699
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &startIdx));
731,097✔
4700
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &numRows));
731,097✔
4701
      int32_t endIdx = startIdx + numRows;
731,097✔
4702
      int64_t value[3] = {gid, uid, (int64_t)startIdx << 32 | endIdx};
731,097✔
4703
      void*   px = taosArrayPush(pSlices, value);
731,097✔
4704
      if (px == NULL) {
731,097✔
UNCOV
4705
        code = terrno;
×
UNCOV
4706
        goto _exit;
×
4707
      }
4708
    }
4709
  } else if (pBlock != NULL) {
367,683✔
4710
    blockDataEmpty(pBlock);
6,611✔
4711
    taosArrayClear(pSlices);
6,611✔
4712
  }
4713

4714
  TAOS_CHECK_EXIT(decodeBlock(&decoder, pRsp->metaBlock));
977,677✔
4715
  TAOS_CHECK_EXIT(decodeBlock(&decoder, pRsp->deleteBlock));
976,640✔
4716
  TAOS_CHECK_EXIT(decodeBlock(&decoder, pRsp->tableBlock));
977,677✔
4717
  
4718
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRsp->ver));
1,955,111✔
4719
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRsp->verTime));
1,954,560✔
4720

4721
  tEndDecode(&decoder);
976,883✔
4722

4723
_exit:
976,883✔
4724
  if (code != TSDB_CODE_SUCCESS) {
976,883✔
UNCOV
4725
    uError("%s failed at line %d since %s", __func__, lino, tstrerror(code));
×
4726
  }
4727
  tDecoderClear(&decoder);
976,883✔
4728
  return code;
977,191✔
4729
}
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