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

taosdata / TDengine / #5013

03 Apr 2026 03:59PM UTC coverage: 72.317% (+0.01%) from 72.305%
#5013

push

travis-ci

web-flow
merge: from main to 3.0 branch #35067

4053 of 5985 new or added lines in 68 files covered. (67.72%)

13131 existing lines in 160 files now uncovered.

257489 of 356056 relevant lines covered (72.32%)

129893134.08 hits per line

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

79.31
/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) {
137,894✔
28
  int32_t code = 0;
137,894✔
29
  int32_t lino = 0;
137,894✔
30
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->reqId));
275,788✔
31
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->type));
275,788✔
32
  switch (pReq->type) {
137,894✔
33
    case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER: {
132,614✔
34
      if (pReq->cont.pReqs) {
132,614✔
35
        int32_t num = taosArrayGetSize(pReq->cont.pReqs);
132,614✔
36
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, num));
132,614✔
37
        for (int32_t i = 0; i < num; ++i) {
521,210✔
38
          SStreamDbTableName* pName = taosArrayGet(pReq->cont.pReqs, i);
388,596✔
39
          TAOS_CHECK_EXIT(tEncodeCStrWithLen(pEncoder, pName->dbFName, strlen(pName->dbFName) + 1));
777,192✔
40
          TAOS_CHECK_EXIT(tEncodeCStrWithLen(pEncoder, pName->tbName, strlen(pName->tbName) + 1));
777,192✔
41
        }
42
      } else {
43
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
×
44
      }
45
      break;
132,614✔
46
    }
47
    case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER: {
5,280✔
48
      if (pReq->cont.pReqs) {
5,280✔
49
        int32_t num = taosArrayGetSize(pReq->cont.pReqs);
5,280✔
50
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, num));
5,280✔
51
        for (int32_t i = 0; i < num; ++i) {
10,560✔
52
          SStreamOReaderDeployReq* pDeploy = taosArrayGet(pReq->cont.pReqs, i);
5,280✔
53
          int32_t vgIdNum = taosArrayGetSize(pDeploy->vgIds);
5,280✔
54
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pDeploy->execId));
10,560✔
55
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pDeploy->uid));
10,560✔
56
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgIdNum));
5,280✔
57
          for (int32_t n = 0; n < vgIdNum; ++n) {
10,560✔
58
            TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *(int32_t*)taosArrayGet(pDeploy->vgIds, n)));
10,560✔
59
          }
60
        }
61
      } else {
62
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
×
63
      }
64
      break;
5,280✔
65
    }
66
    default:
×
67
      code = TSDB_CODE_STREAM_INVALID_TASK_TYPE;
×
68
      break;
×
69
  }
70

71
_exit:
137,894✔
72

73
  return code;
137,894✔
74
}
75

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

83
void tFreeSStreamMgmtReq(SStreamMgmtReq* pReq) {
275,788✔
84
  if (NULL == pReq) {
275,788✔
85
    return;
68,947✔
86
  }
87

88
  switch (pReq->type) {
206,841✔
89
    case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER:
198,921✔
90
      taosArrayDestroy(pReq->cont.pReqs);
198,921✔
91
      break;
198,921✔
92
    case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER:
7,920✔
93
      taosArrayDestroyEx(pReq->cont.pReqs, tFreeRunnerOReaderDeployReq);
7,920✔
94
      break;
7,920✔
95
    default:
×
96
      break;
×
97
  }
98
}
99

100

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

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

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

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

149

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

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

199
_exit:
68,947✔
200

201
  return code;  
68,947✔
202
}
203

204
int32_t tEncodeStreamTask(SEncoder* pEncoder, const SStreamTask* pTask) {
77,861,566✔
205
  int32_t code = 0;
77,861,566✔
206
  int32_t lino;
207

208
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->type));
155,723,132✔
209
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->streamId));
155,723,132✔
210
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->taskId));
155,723,132✔
211

212
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->flags));
155,723,132✔
213
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->seriousId));
155,723,132✔
214
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->deployId));
155,723,132✔
215
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->nodeId));
155,723,132✔
216
  // SKIP SESSIONID
217
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->taskIdx));
155,723,132✔
218
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->status));
155,723,132✔
219
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->detailStatus));
155,723,132✔
220
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->errorCode));
155,723,132✔
221
  if (pTask->pMgmtReq) {
77,861,566✔
222
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 1));
137,894✔
223
    TAOS_CHECK_EXIT(tEncodeSStreamMgmtReq(pEncoder, pTask->pMgmtReq));
137,894✔
224
  } else {
225
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
77,723,672✔
226
  }
227

228
_exit:
77,723,672✔
229

230
  return code;
77,861,566✔
231
}
232

233

234
int32_t tDecodeStreamTask(SDecoder* pDecoder, SStreamTask* pTask) {
37,441,118✔
235
  int32_t code = 0;
37,441,118✔
236
  int32_t lino;
237

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

259
_exit:
37,441,118✔
260

261
  return code;
37,441,118✔
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) {
4,535,560✔
294
  int32_t code = 0;
4,535,560✔
295
  int32_t lino;
296

297
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->autoRecalcNum));
9,071,120✔
298
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->realtimeSessionNum));
9,071,120✔
299
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->historySessionNum));
9,071,120✔
300
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->recalcSessionNum));
9,071,120✔
301
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->histroyProgress));
9,071,120✔
302

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

310
_exit:
4,535,560✔
311

312
  return code;
4,535,560✔
313
}
314

315
int32_t tDecodeSSTriggerRuntimeStatus(SDecoder* pDecoder, SSTriggerRuntimeStatus* pStatus) {
2,166,866✔
316
  int32_t code = 0;
2,166,866✔
317
  int32_t lino;
318

319
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->autoRecalcNum));
4,333,732✔
320
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->realtimeSessionNum));
4,333,732✔
321
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->historySessionNum));
4,333,732✔
322
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->realtimeSessionNum));
4,333,732✔
323
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->histroyProgress));
4,333,732✔
324

325
  int32_t recalcNum = 0;
2,166,866✔
326
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &recalcNum));
2,166,866✔
327
  if (recalcNum > 0) {
2,166,866✔
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) {
2,166,866✔
336
    SSTriggerRecalcProgress* pProgress = taosArrayGet(pStatus->userRecalcs, i);
×
337
    TAOS_CHECK_EXIT(tDecodeSSTriggerRecalcProgress(pDecoder, pProgress));
×
338
  }
339

340
_exit:
2,166,866✔
341

342
  return code;
2,166,866✔
343
}
344

345

346
int32_t tEncodeStreamHbMsg(SEncoder* pEncoder, const SStreamHbMsg* pReq) {
36,382,634✔
347
  int32_t code = 0;
36,382,634✔
348
  int32_t lino;
349

350
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
36,382,634✔
351
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->dnodeId));
72,765,268✔
352
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->streamGId));
72,765,268✔
353
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->snodeId));
72,765,268✔
354
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->runnerThreadNum));
72,765,268✔
355

356
  int32_t vgLeaderNum = taosArrayGetSize(pReq->pVgLeaders);
36,382,634✔
357
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgLeaderNum));
36,382,634✔
358
  for (int32_t i = 0; i < vgLeaderNum; ++i) {
149,565,884✔
359
    int32_t* vgId = taosArrayGet(pReq->pVgLeaders, i);
113,183,250✔
360
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *vgId));
226,366,500✔
361
  }
362
  
363
  int32_t statusNum = taosArrayGetSize(pReq->pStreamStatus);
36,382,634✔
364
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, statusNum));
36,382,634✔
365
  for (int32_t i = 0; i < statusNum; ++i) {
109,822,400✔
366
    SStmTaskStatusMsg* pStatus = taosArrayGet(pReq->pStreamStatus, i);
73,439,766✔
367
    TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)pStatus));
73,439,766✔
368
  }
369

370
  int32_t reqNum = taosArrayGetSize(pReq->pStreamReq);
36,382,634✔
371
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, reqNum));
36,382,634✔
372
  for (int32_t i = 0; i < reqNum; ++i) {
36,520,528✔
373
    int32_t* idx = taosArrayGet(pReq->pStreamReq, i);
137,894✔
374
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *idx));
275,788✔
375
  }
376

377
  int32_t triggerNum = taosArrayGetSize(pReq->pTriggerStatus);
36,382,634✔
378
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, triggerNum));
36,382,634✔
379
  for (int32_t i = 0; i < triggerNum; ++i) {
40,918,194✔
380
    SSTriggerRuntimeStatus* pTrigger = taosArrayGet(pReq->pTriggerStatus, i);
4,535,560✔
381
    TAOS_CHECK_EXIT(tEncodeSSTriggerRuntimeStatus(pEncoder, pTrigger));
4,535,560✔
382
  }
383
  
384
  tEndEncode(pEncoder);
36,382,634✔
385

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

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

398
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
17,472,237✔
399
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->dnodeId));
34,944,474✔
400
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->streamGId));
34,944,474✔
401
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->snodeId));
34,944,474✔
402
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->runnerThreadNum));
34,944,474✔
403

404
  int32_t vgLearderNum = 0;
17,472,237✔
405
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgLearderNum));
17,472,237✔
406
  if (vgLearderNum > 0) {
17,472,237✔
407
    pReq->pVgLeaders = taosArrayInit(vgLearderNum, sizeof(int32_t));
13,968,263✔
408
    if (NULL == pReq->pVgLeaders) {
13,968,263✔
409
      code = terrno;
×
410
      goto _exit;
×
411
    }
412
  }
413
  for (int32_t i = 0; i < vgLearderNum; ++i) {
72,733,463✔
414
    int32_t vgId = 0;
55,261,226✔
415
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgId));
55,261,226✔
416
    if (NULL == taosArrayPush(pReq->pVgLeaders, &vgId)) {
110,522,452✔
417
      code = terrno;
×
418
      goto _exit;
×
419
    }
420
  }
421

422

423
  int32_t statusNum = 0;
17,472,237✔
424
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &statusNum));
17,472,237✔
425
  if (statusNum > 0) {
17,472,237✔
426
    pReq->pStreamStatus = taosArrayInit_s(sizeof(SStmTaskStatusMsg), statusNum);
1,257,387✔
427
    if (NULL == pReq->pStreamStatus) {
1,257,387✔
428
      code = terrno;
×
429
      goto _exit;
×
430
    }
431
  }
432
  for (int32_t i = 0; i < statusNum; ++i) {
52,706,090✔
433
    SStmTaskStatusMsg* pTask = taosArrayGet(pReq->pStreamStatus, i);
35,233,853✔
434
    if (NULL == pTask) {
35,233,853✔
435
      code = terrno;
×
436
      goto _exit;
×
437
    }
438
    TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)pTask));
35,233,853✔
439
  }
440

441

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

460

461
  int32_t triggerNum = 0;
17,472,237✔
462
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &triggerNum));
17,472,237✔
463
  if (triggerNum > 0) {
17,472,237✔
464
    pReq->pTriggerStatus = taosArrayInit_s(sizeof(SSTriggerRuntimeStatus), triggerNum);
575,730✔
465
    if (NULL == pReq->pTriggerStatus) {
575,730✔
466
      code = terrno;
×
467
      goto _exit;
×
468
    }
469
  }
470
  for (int32_t i = 0; i < triggerNum; ++i) {
19,639,103✔
471
    SSTriggerRuntimeStatus* pStatus = taosArrayGet(pReq->pTriggerStatus, i);
2,166,866✔
472
    if (NULL == pStatus) {
2,166,866✔
473
      code = terrno;
×
474
      goto _exit;
×
475
    }
476
    TAOS_CHECK_EXIT(tDecodeSSTriggerRuntimeStatus(pDecoder, pStatus));
2,166,866✔
477
  }
478

479
  
480
  tEndDecode(pDecoder);
17,472,237✔
481

482
_exit:
17,472,237✔
483
  return code;
17,472,237✔
484
}
485

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

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

499
  taosArrayDestroy(pMsg->pVgLeaders);
105,484,882✔
500
  if (deepClean) {
105,484,882✔
501
    int32_t reqNum = taosArrayGetSize(pMsg->pStreamReq);
105,484,882✔
502
    for (int32_t i = 0; i < reqNum; ++i) {
105,622,776✔
503
      int32_t* idx = taosArrayGet(pMsg->pStreamReq, i);
137,894✔
504
      SStmTaskStatusMsg* pTask = taosArrayGet(pMsg->pStreamStatus, *idx);
137,894✔
505
      if (NULL == pTask) {
137,894✔
506
        continue;
×
507
      }
508

509
      tFreeSStreamMgmtReq(pTask->pMgmtReq);
137,894✔
510
      taosMemoryFree(pTask->pMgmtReq);
137,894✔
511
    }
512
  }
513
  taosArrayDestroy(pMsg->pStreamReq);
105,484,882✔
514
  taosArrayDestroy(pMsg->pStreamStatus);
105,484,882✔
515
  taosArrayDestroyEx(pMsg->pTriggerStatus, tFreeSSTriggerRuntimeStatus);
105,484,882✔
516
}
517

518
int32_t tEncodeSStreamReaderDeployFromTrigger(SEncoder* pEncoder, const SStreamReaderDeployFromTrigger* pMsg) {
643,542✔
519
  int32_t code = 0;
643,542✔
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,287,084✔
523
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->triggerTblUid));
1,287,084✔
524
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->triggerTblSuid));
1,287,084✔
525
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerTblType));
1,287,084✔
526
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->isTriggerTblVirt));
1,287,084✔
527
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->deleteReCalc));
1,287,084✔
528
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->deleteOutTbl));
1,287,084✔
529
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->partitionCols, pMsg->partitionCols == NULL ? 0 : (int32_t)strlen(pMsg->partitionCols) + 1));
1,287,084✔
530
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerCols, pMsg->triggerCols == NULL ? 0 : (int32_t)strlen(pMsg->triggerCols) + 1));
1,287,084✔
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,287,084✔
533
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->calcCacheScanPlan, pMsg->calcCacheScanPlan == NULL ? 0 : (int32_t)strlen(pMsg->calcCacheScanPlan) + 1));
1,287,084✔
534

535
_exit:
643,542✔
536

537
  return code;
643,542✔
538
}
539

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

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

547
_exit:
787,858✔
548

549
  return code;
787,858✔
550
}
551

552

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

557
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerReader));
2,862,800✔
558
  if (pMsg->triggerReader) {
1,431,400✔
559
    TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployFromTrigger(pEncoder, &pMsg->msg.trigger));
643,542✔
560
  } else {
561
    TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployFromCalc(pEncoder, &pMsg->msg.calc));
787,858✔
562
  }
563
  
564
_exit:
787,858✔
565

566
  return code;
1,431,400✔
567
}
568

569
int32_t tEncodeSStreamTaskAddr(SEncoder* pEncoder, const SStreamTaskAddr* pMsg) {
1,926,812✔
570
  int32_t code = 0;
1,926,812✔
571
  int32_t lino;
572

573
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->taskId));
3,853,624✔
574
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->nodeId));
3,853,624✔
575
  TAOS_CHECK_EXIT(tEncodeSEpSet(pEncoder, &pMsg->epset));
1,926,812✔
576

577
_exit:
1,926,812✔
578

579
  return code;
1,926,812✔
580
}
581

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

586
  TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, &pMsg->addr));
1,252,764✔
587
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->execReplica));
2,505,528✔
588

589
_exit:
1,252,764✔
590

591
  return code;
1,252,764✔
592
}
593

594

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

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

612
  int32_t addrSize = (int32_t)taosArrayGetSize(pMsg->pNotifyAddrUrls);
424,458✔
613
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, addrSize));
424,458✔
614
  for (int32_t i = 0; i < addrSize; ++i) {
539,302✔
615
    const char *url = taosArrayGetP(pMsg->pNotifyAddrUrls, i);
114,844✔
616
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, url, NULL == url ? 0 : (int32_t)strlen(url) + 1));
229,688✔
617
  }
618
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->notifyEventTypes));
848,916✔
619
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->addOptions));
848,916✔
620
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->notifyHistory));
848,916✔
621

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

628
  switch (pMsg->triggerType) {
424,458✔
629
    case WINDOW_TYPE_SESSION: {
17,496✔
630
      // session trigger
631
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->trigger.session.slotId));
34,992✔
632
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.session.sessionVal));
34,992✔
633
      break;
17,496✔
634
    }
635
    case WINDOW_TYPE_STATE: {
135,972✔
636
      // state trigger
637
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->trigger.stateWin.slotId));
271,944✔
638
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->trigger.stateWin.extend));
271,944✔
639
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->trigger.stateWin.trueForType));
271,944✔
640
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->trigger.stateWin.trueForCount));
271,944✔
641
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.stateWin.trueForDuration));
271,944✔
642
      int32_t stateWindowZerothLen = 
135,972✔
643
          pMsg->trigger.stateWin.zeroth == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.stateWin.zeroth) + 1;
135,972✔
644
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.stateWin.zeroth, stateWindowZerothLen));
271,944✔
645
      int32_t stateWindowExprLen =
135,972✔
646
          pMsg->trigger.stateWin.expr == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.stateWin.expr) + 1;
135,972✔
647
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.stateWin.expr, stateWindowExprLen));
271,944✔
648
      break;
135,972✔
649
    }
650
    case WINDOW_TYPE_INTERVAL: {
159,408✔
651
      // slide trigger
652
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.intervalUnit));
318,816✔
653
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.slidingUnit));
318,816✔
654
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.offsetUnit));
318,816✔
655
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.soffsetUnit));
318,816✔
656
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.precision));
318,816✔
657
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.interval));
318,816✔
658
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.offset));
318,816✔
659
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.sliding));
318,816✔
660
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.soffset));
318,816✔
661
      break;
159,408✔
662
    }
663
    case WINDOW_TYPE_EVENT: {
50,336✔
664
      // event trigger
665
      int32_t eventWindowStartCondLen = pMsg->trigger.event.startCond == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.event.startCond) + 1;
50,336✔
666
      int32_t eventWindowEndCondLen = pMsg->trigger.event.endCond == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.event.endCond) + 1;
50,336✔
667

668
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.event.startCond, eventWindowStartCondLen));
100,672✔
669
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.event.endCond, eventWindowEndCondLen));
100,672✔
670
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->trigger.event.trueForType));
100,672✔
671
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->trigger.event.trueForCount));
100,672✔
672
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.event.trueForDuration));
100,672✔
673
      break;
50,336✔
674
    }
675
    case WINDOW_TYPE_COUNT: {
39,160✔
676
      // count trigger
677
      int32_t countWindowCondColsLen = pMsg->trigger.count.condCols == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.count.condCols) + 1;
39,160✔
678
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.count.condCols, countWindowCondColsLen));
78,320✔
679

680
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.count.countVal));
78,320✔
681
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.count.sliding));
78,320✔
682
      break;
39,160✔
683
    }
684
    case WINDOW_TYPE_PERIOD: {
22,086✔
685
      // period trigger
686
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.period.periodUnit));
44,172✔
687
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.period.offsetUnit));
44,172✔
688
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.period.precision));
44,172✔
689
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.period.period));
44,172✔
690
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.period.offset));
44,172✔
691
      break;
22,086✔
692
    }
UNCOV
693
    default:
×
694
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
695
      break;
×
696
  }
697

698
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->eventTypes));
848,916✔
699
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->placeHolderBitmap));
848,916✔
700
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->calcTsSlotId));
848,916✔
701
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->triTsSlotId));
848,916✔
702
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->calcPkSlotId));
848,916✔
703
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->triPkSlotId));
848,916✔
704
  int32_t triggerPrevFilterLen = (pMsg->triggerPrevFilter == NULL) ? 0 : ((int32_t)strlen(pMsg->triggerPrevFilter) + 1);
424,458✔
705
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerPrevFilter, triggerPrevFilterLen));
848,916✔
706
  int32_t triggerScanPlanLen = (pMsg->triggerScanPlan == NULL) ? 0 : ((int32_t)strlen(pMsg->triggerScanPlan) + 1);
424,458✔
707
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerScanPlan, triggerScanPlanLen));
848,916✔
708
  int32_t calcCacheScanPlanLen = (pMsg->calcCacheScanPlan == NULL) ? 0 : ((int32_t)strlen(pMsg->calcCacheScanPlan) + 1);
424,458✔
709
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->calcCacheScanPlan, calcCacheScanPlanLen));
848,916✔
710

711
  int32_t readerNum = taosArrayGetSize(pMsg->readerList);
424,458✔
712
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
424,458✔
713
  for (int32_t i = 0; i < readerNum; ++i) {
939,180✔
714
    SStreamTaskAddr* pAddr = (SStreamTaskAddr*)taosArrayGet(pMsg->readerList, i);
514,722✔
715
    TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, pAddr));
514,722✔
716
  }
717

718
  int32_t runnerNum = taosArrayGetSize(pMsg->runnerList);
424,458✔
719
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
424,458✔
720
  for (int32_t i = 0; i < runnerNum; ++i) {
1,677,222✔
721
    SStreamRunnerTarget* pTarget = (SStreamRunnerTarget*)taosArrayGet(pMsg->runnerList, i);
1,252,764✔
722
    TAOS_CHECK_EXIT(tEncodeSStreamRunnerTarget(pEncoder, pTarget));
1,252,764✔
723
  }
724

725
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->leaderSnodeId));
848,916✔
726
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->streamName, (int32_t)strlen(pMsg->streamName) + 1));
848,916✔
727
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->precision));
848,916✔
728
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->nodelayCreateSubtable));
848,916✔
729

730
_exit:
424,458✔
731

732
  return code;
424,458✔
733
}
734

735

736
int32_t tSerializeSFieldWithOptions(SEncoder* pEncoder, const SFieldWithOptions *pField) {
7,246,956✔
737
  int32_t code = 0;
7,246,956✔
738
  int32_t lino;
739

740
  TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, pField->name));
14,493,912✔
741
  TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pField->type));
14,493,912✔
742
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pField->flags));
14,493,912✔
743
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pField->bytes));
14,493,912✔
744
  TAOS_CHECK_EXIT(tEncodeU32(pEncoder, pField->compress));
14,493,912✔
745
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pField->typeMod));
14,493,912✔
746

747
_exit:
7,246,956✔
748

749
  return code;
7,246,956✔
750
}
751

752

753
int32_t tEncodeSStreamRunnerDeployMsg(SEncoder* pEncoder, const SStreamRunnerDeployMsg* pMsg) {
1,467,348✔
754
  int32_t code = 0;
1,467,348✔
755
  int32_t lino;
756

757
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->execReplica));
2,934,696✔
758
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->streamName, (int32_t)strlen(pMsg->streamName) + 1));
2,934,696✔
759
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->pPlan, NULL == pMsg->pPlan ? 0 : (int32_t)strlen(pMsg->pPlan) + 1));
2,934,696✔
760
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->outDBFName, NULL == pMsg->outDBFName ? 0 : (int32_t)strlen(pMsg->outDBFName) + 1));
2,934,696✔
761
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->outTblName, NULL == pMsg->outTblName ? 0 : (int32_t)strlen(pMsg->outTblName) + 1));
2,934,696✔
762
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->outTblType));
2,934,696✔
763
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->calcNotifyOnly));
2,934,696✔
764
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->topPlan));
2,934,696✔
765

766
  int32_t addrSize = (int32_t)taosArrayGetSize(pMsg->pNotifyAddrUrls);
1,467,348✔
767
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, addrSize));
1,467,348✔
768
  for (int32_t i = 0; i < addrSize; ++i) {
1,791,270✔
769
    const char *url = taosArrayGetP(pMsg->pNotifyAddrUrls, i);
323,922✔
770
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, url, NULL == url ? 0 : (int32_t)strlen(url) + 1));
647,844✔
771
  }
772
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->addOptions));
2,934,696✔
773

774
  int32_t outColNum = (int32_t)taosArrayGetSize(pMsg->outCols);
1,467,348✔
775
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, outColNum));
1,467,348✔
776
  for (int32_t i = 0; i < outColNum; ++i) {
7,513,200✔
777
    SFieldWithOptions *pCol = taosArrayGet(pMsg->outCols, i);
6,045,852✔
778
    TAOS_CHECK_EXIT(tSerializeSFieldWithOptions(pEncoder, pCol));
6,045,852✔
779
  }
780

781
  int32_t outTagNum = (int32_t)taosArrayGetSize(pMsg->outTags);
1,467,348✔
782
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, outTagNum));
1,467,348✔
783
  for (int32_t i = 0; i < outTagNum; ++i) {
2,668,452✔
784
    SFieldWithOptions *pTag = taosArrayGet(pMsg->outTags, i);
1,201,104✔
785
    TAOS_CHECK_EXIT(tSerializeSFieldWithOptions(pEncoder, pTag));
1,201,104✔
786
  }
787

788
  TAOS_CHECK_EXIT(tEncodeU64(pEncoder, pMsg->outStbUid));
2,934,696✔
789
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->outStbSversion));
2,934,696✔
790

791
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->subTblNameExpr, NULL == pMsg->subTblNameExpr ? 0 : (int32_t)strlen(pMsg->subTblNameExpr) + 1));
2,934,696✔
792
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->tagValueExpr, NULL == pMsg->tagValueExpr ? 0 : (int32_t)strlen(pMsg->tagValueExpr) + 1));
2,934,696✔
793

794
  int32_t forceOutColsSize = (int32_t)taosArrayGetSize(pMsg->forceOutCols);
1,467,348✔
795
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, forceOutColsSize));
1,467,348✔
796
  for (int32_t i = 0; i < forceOutColsSize; ++i) {
1,608,402✔
797
    SStreamOutCol *pCoutCol = (SStreamOutCol*)taosArrayGet(pMsg->forceOutCols, i);
141,054✔
798
    int32_t        exprLen = pCoutCol->expr == NULL ? 0 : (int32_t)strlen((char*)pCoutCol->expr) + 1;
141,054✔
799

800
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pCoutCol->expr, exprLen));
282,108✔
801
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.type));
282,108✔
802
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.precision));
282,108✔
803
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.scale));
282,108✔
804
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pCoutCol->type.bytes));
282,108✔
805
  }
806

807
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->lowLatencyCalc));
2,934,696✔
808

809
  // colCids and tagCids - always encode size (0 if NULL) for compatibility
810
  int32_t colCidsSize = (int32_t)taosArrayGetSize(pMsg->colCids);
1,467,348✔
811
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, colCidsSize));
1,467,348✔
812
  if (colCidsSize > 0) {
1,467,348✔
813
    for (int32_t i = 0; i < colCidsSize; ++i) {
96,036✔
814
      int16_t* pCid = (int16_t*)taosArrayGet(pMsg->colCids, i);
72,492✔
815
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, *pCid));
144,984✔
816
    }
817
  }
818

819
  int32_t tagCidsSize = (int32_t)taosArrayGetSize(pMsg->tagCids);
1,467,348✔
820
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, tagCidsSize));
1,467,348✔
821
  if (tagCidsSize > 0) {
1,467,348✔
822
    for (int32_t i = 0; i < tagCidsSize; ++i) {
42,354✔
823
      int16_t* pCid = (int16_t*)taosArrayGet(pMsg->tagCids, i);
25,674✔
824
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, *pCid));
51,348✔
825
    }
826
  }
827

828
_exit:
1,467,348✔
829

830
  return code;
1,467,348✔
831
}
832

833
int32_t tEncodeSStmTaskDeploy(SEncoder* pEncoder, const SStmTaskDeploy* pTask) {
3,323,206✔
834
  int32_t code = 0;
3,323,206✔
835
  int32_t lino;
836

837
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
3,323,206✔
838
  switch (pTask->task.type) {
3,323,206✔
839
    case STREAM_READER_TASK:
1,431,400✔
840
      TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployMsg(pEncoder, &pTask->msg.reader));
1,431,400✔
841
      break;
1,431,400✔
842
    case STREAM_TRIGGER_TASK:
424,458✔
843
      TAOS_CHECK_EXIT(tEncodeSStreamTriggerDeployMsg(pEncoder, &pTask->msg.trigger));
424,458✔
844
      break;
424,458✔
845
    case STREAM_RUNNER_TASK:
1,467,348✔
846
      TAOS_CHECK_EXIT(tEncodeSStreamRunnerDeployMsg(pEncoder, &pTask->msg.runner));
1,467,348✔
847
      break;
1,467,348✔
UNCOV
848
    default:
×
UNCOV
849
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
850
      break;
×
851
  }
852
  
853
_exit:
3,323,206✔
854

855
  return code;
3,323,206✔
856
}
857

858

859
int32_t tEncodeSStmStreamDeploy(SEncoder* pEncoder, const SStmStreamDeploy* pStream) {
579,142✔
860
  int32_t code = 0;
579,142✔
861
  int32_t lino;
862

863
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pStream->streamId));
1,158,284✔
864

865
  int32_t readerNum = taosArrayGetSize(pStream->readerTasks);
579,142✔
866
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
579,142✔
867
  for (int32_t i = 0; i < readerNum; ++i) {
2,010,542✔
868
    SStmTaskDeploy* pDeploy = taosArrayGet(pStream->readerTasks, i);
1,431,400✔
869
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pDeploy));
1,431,400✔
870
  }
871

872
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStream->triggerTask ? 1 : 0));
1,158,284✔
873
  if (pStream->triggerTask) {
579,142✔
874
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pStream->triggerTask));
424,458✔
875
  }
876
  
877
  int32_t runnerNum = taosArrayGetSize(pStream->runnerTasks);
579,142✔
878
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
579,142✔
879
  for (int32_t i = 0; i < runnerNum; ++i) {
2,046,490✔
880
    SStmTaskDeploy* pDeploy = taosArrayGet(pStream->runnerTasks, i);
1,467,348✔
881
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pDeploy));
1,467,348✔
882
  }
883

884
_exit:
579,142✔
885

886
  return code;
579,142✔
887
}
888

889
int32_t tEncodeSStreamMsg(SEncoder* pEncoder, const SStreamMsg* pMsg) {
1,098,594✔
890
  int32_t code = 0;
1,098,594✔
891
  int32_t lino = 0;
1,098,594✔
892

893
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->msgType));
2,197,188✔
894

895
_exit:
1,098,594✔
896
  return code;
1,098,594✔
897
}
898

899
int32_t tDecodeSStreamMsg(SDecoder* pDecoder, SStreamMsg* pMsg) {
549,374✔
900
  int32_t code = 0;
549,374✔
901
  int32_t lino;
902

903
  int32_t type = 0;
549,374✔
904
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &type));
549,374✔
905
  pMsg->msgType = type;
549,374✔
906

907
_exit:
549,374✔
908
  return code;
549,374✔
909
}
910

911
int32_t tEncodeSStreamStartTaskMsg(SEncoder* pEncoder, const SStreamStartTaskMsg* pStart) {
410,940✔
912
  int32_t code = 0;
410,940✔
913
  int32_t lino;
914

915
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pStart->header));
410,940✔
916

917
_exit:
410,940✔
918

919
  return code;
410,940✔
920
}
921

922
int32_t tEncodeSStreamTaskStart(SEncoder* pEncoder, const SStreamTaskStart* pTask) {
410,940✔
923
  int32_t code = 0;
410,940✔
924
  int32_t lino;
925

926
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
410,940✔
927
  TAOS_CHECK_EXIT(tEncodeSStreamStartTaskMsg(pEncoder, (SStreamStartTaskMsg*)&pTask->startMsg));
410,940✔
928

929
_exit:
410,940✔
930

931
  return code;
410,940✔
932
}
933

934
int32_t tEncodeSStreamUndeployTaskMsg(SEncoder* pEncoder, const SStreamUndeployTaskMsg* pUndeploy) {
542,480✔
935
  int32_t code = 0;
542,480✔
936
  int32_t lino;
937

938
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pUndeploy->header));
542,480✔
939
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pUndeploy->doCheckpoint));
1,084,960✔
940
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pUndeploy->doCleanup));
1,084,960✔
941

942
_exit:
542,480✔
943

944
  return code;
542,480✔
945
}
946

947
int32_t tEncodeSStreamTaskUndeploy(SEncoder* pEncoder, const SStreamTaskUndeploy* pTask) {
542,480✔
948
  int32_t code = 0;
542,480✔
949
  int32_t lino;
950

951
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
542,480✔
952
  TAOS_CHECK_EXIT(tEncodeSStreamUndeployTaskMsg(pEncoder, (SStreamUndeployTaskMsg*)&pTask->undeployMsg));
542,480✔
953

954
_exit:
542,480✔
955

956
  return code;
542,480✔
957
}
958

959

960
int32_t tEncodeSStreamRecalcReq(SEncoder* pEncoder, const SStreamRecalcReq* recalc) {
7,280✔
961
  int32_t code = 0;
7,280✔
962
  int32_t lino;
963

964
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->recalcId));
14,560✔
965
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->start));
14,560✔
966
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->end));
14,560✔
967

968
_exit:
7,280✔
969

970
  return code;
7,280✔
971
}
972

973
int32_t tEncodeSStreamMgmtRspCont(SEncoder* pEncoder, SStreamMsgType msgType, const SStreamMgmtRspCont* pRsp) {
145,174✔
974
  int32_t code = 0;
145,174✔
975
  int32_t lino;
976

977
  switch (msgType) {
145,174✔
978
    case STREAM_MSG_ORIGTBL_READER_INFO: {
132,614✔
979
      int32_t vgNum = taosArrayGetSize(pRsp->vgIds);
132,614✔
980
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgNum));
132,614✔
981

982
      for (int32_t i = 0; i < vgNum; ++i) {
521,210✔
983
        int32_t* vgId = taosArrayGet(pRsp->vgIds, i);
388,596✔
984
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *vgId));
777,192✔
985
      }
986

987
      int32_t readerNum = taosArrayGetSize(pRsp->readerList);
132,614✔
988
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
132,614✔
989
      
990
      for (int32_t i = 0; i < readerNum; ++i) {
260,634✔
991
        SStreamTaskAddr* addr = taosArrayGet(pRsp->readerList, i);
128,020✔
992
        TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, addr));
128,020✔
993
      }
994
      break;
132,614✔
995
    }
UNCOV
996
    case STREAM_MSG_UPDATE_RUNNER: {
×
UNCOV
997
      int32_t runnerNum = taosArrayGetSize(pRsp->runnerList);
×
998
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
×
999
      
1000
      for (int32_t i = 0; i < runnerNum; ++i) {
×
UNCOV
1001
        SStreamRunnerTarget* target = taosArrayGet(pRsp->runnerList, i);
×
1002
        TAOS_CHECK_EXIT(tEncodeSStreamRunnerTarget(pEncoder, target));
×
1003
      }
1004
      break;
×
1005
    }
1006
    case STREAM_MSG_USER_RECALC: {
7,280✔
1007
      int32_t recalcNum = taosArrayGetSize(pRsp->recalcList);
7,280✔
1008
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, recalcNum));
7,280✔
1009
      
1010
      for (int32_t i = 0; i < recalcNum; ++i) {
14,560✔
1011
        SStreamRecalcReq* recalc = taosArrayGet(pRsp->recalcList, i);
7,280✔
1012
        TAOS_CHECK_EXIT(tEncodeSStreamRecalcReq(pEncoder, recalc));
7,280✔
1013
      }
1014
      break;
7,280✔
1015
    }
1016
    case STREAM_MSG_RUNNER_ORIGTBL_READER: {
5,280✔
1017
      int32_t rspNum = taosArrayGetSize(pRsp->execRspList);
5,280✔
1018
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, rspNum));
5,280✔
1019
      
1020
      for (int32_t i = 0; i < rspNum; ++i) {
10,560✔
1021
        SStreamOReaderDeployRsp* pDeployRsp = taosArrayGet(pRsp->execRspList, i);
5,280✔
1022
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pDeployRsp->execId));
10,560✔
1023
        int32_t vgNum = taosArrayGetSize(pDeployRsp->vgList);
5,280✔
1024
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgNum));
5,280✔
1025
        for (int32_t n = 0; n < vgNum; ++n) {
10,560✔
1026
          TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, taosArrayGet(pDeployRsp->vgList, n)));
5,280✔
1027
        }
1028
      }
1029
      break;
5,280✔
1030
    }
UNCOV
1031
    default:
×
UNCOV
1032
      break;
×
1033
  }
1034

1035
_exit:
145,174✔
1036

1037
  return code;
145,174✔
1038
}
1039

1040
int32_t tEncodeSStreamMgmtRsp(SEncoder* pEncoder, const SStreamMgmtRsp* pRsp) {
145,174✔
1041
  int32_t code = 0;
145,174✔
1042
  int32_t lino;
1043

1044
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pRsp->header));
145,174✔
1045
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->reqId));
290,348✔
1046
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->code));
290,348✔
1047
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, &pRsp->task));
145,174✔
1048
  TAOS_CHECK_EXIT(tEncodeSStreamMgmtRspCont(pEncoder, pRsp->header.msgType, (SStreamMgmtRspCont*)&pRsp->cont));
145,174✔
1049

1050
_exit:
145,174✔
1051

1052
  return code;
145,174✔
1053
}
1054

1055

1056
int32_t tEncodeStreamHbRsp(SEncoder* pEncoder, const SMStreamHbRspMsg* pRsp) {
34,604,316✔
1057
  int32_t code = 0;
34,604,316✔
1058
  int32_t lino;
1059

1060
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
34,604,316✔
1061
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->streamGId));
69,208,632✔
1062
  int32_t deployNum = taosArrayGetSize(pRsp->deploy.streamList);
34,604,316✔
1063
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, deployNum));
34,604,316✔
1064
  for (int32_t i = 0; i < deployNum; ++i) {
35,183,458✔
1065
    SStmStreamDeploy* pStream = (SStmStreamDeploy*)taosArrayGet(pRsp->deploy.streamList, i);
579,142✔
1066
    TAOS_CHECK_EXIT(tEncodeSStmStreamDeploy(pEncoder, pStream));
579,142✔
1067
  }
1068

1069
  int32_t startNum = taosArrayGetSize(pRsp->start.taskList);
34,604,316✔
1070
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, startNum));
34,604,316✔
1071
  for (int32_t i = 0; i < startNum; ++i) {
35,015,256✔
1072
    SStreamTaskStart* pTask = (SStreamTaskStart*)taosArrayGet(pRsp->start.taskList, i);
410,940✔
1073
    TAOS_CHECK_EXIT(tEncodeSStreamTaskStart(pEncoder, pTask));
410,940✔
1074
  }
1075

1076
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pRsp->undeploy.undeployAll));
69,208,632✔
1077
  if (!pRsp->undeploy.undeployAll) {
34,604,316✔
1078
    int32_t undeployNum = taosArrayGetSize(pRsp->undeploy.taskList);
34,604,316✔
1079
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, undeployNum));
34,604,316✔
1080
    for (int32_t i = 0; i < undeployNum; ++i) {
35,146,796✔
1081
      SStreamTaskUndeploy* pTask = (SStreamTaskUndeploy*)taosArrayGet(pRsp->undeploy.taskList, i);
542,480✔
1082
      TAOS_CHECK_EXIT(tEncodeSStreamTaskUndeploy(pEncoder, pTask));
542,480✔
1083
    }
1084
  }
1085

1086
  int32_t rspNum = taosArrayGetSize(pRsp->rsps.rspList);
34,604,316✔
1087
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, rspNum));
34,604,316✔
1088
  for (int32_t i = 0; i < rspNum; ++i) {
34,749,490✔
1089
    SStreamMgmtRsp* pMgmtRsp = (SStreamMgmtRsp*)taosArrayGet(pRsp->rsps.rspList, i);
145,174✔
1090
    TAOS_CHECK_EXIT(tEncodeSStreamMgmtRsp(pEncoder, pMgmtRsp));
145,174✔
1091
  }
1092
  
1093
_exit:
34,604,316✔
1094

1095
  tEndEncode(pEncoder);
34,604,316✔
1096

1097
  return code;
34,604,316✔
1098
}
1099

1100
int32_t tDecodeSStreamReaderDeployFromTrigger(SDecoder* pDecoder, SStreamReaderDeployFromTrigger* pMsg) {
321,499✔
1101
  int32_t code = 0;
321,499✔
1102
  int32_t lino;
1103

1104
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerTblName, NULL));
642,998✔
1105
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->triggerTblUid));
642,998✔
1106
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->triggerTblSuid));
642,998✔
1107
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerTblType));
642,998✔
1108
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->isTriggerTblVirt));
642,998✔
1109
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->deleteReCalc));
642,998✔
1110
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->deleteOutTbl));
642,998✔
1111
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->partitionCols, NULL));
642,998✔
1112
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerCols, NULL));
642,998✔
1113
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerScanPlan, NULL));
642,998✔
1114
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcCacheScanPlan, NULL));
642,998✔
1115

1116
_exit:
321,499✔
1117

1118
  return code;
321,499✔
1119
}
1120

1121

1122
int32_t tDecodeSStreamReaderDeployFromCalc(SDecoder* pDecoder, SStreamReaderDeployFromCalc* pMsg) {
393,125✔
1123
  int32_t code = 0;
393,125✔
1124
  int32_t lino;
1125

1126
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
786,250✔
1127
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcScanPlan, NULL));
786,250✔
1128

1129
_exit:
393,125✔
1130

1131
  return code;
393,125✔
1132
}
1133

1134

1135
int32_t tDecodeSStreamReaderDeployMsg(SDecoder* pDecoder, SStreamReaderDeployMsg* pMsg) {
714,624✔
1136
  int32_t code = 0;
714,624✔
1137
  int32_t lino;
1138

1139
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerReader));
1,429,248✔
1140
  if (pMsg->triggerReader) {
714,624✔
1141
    TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployFromTrigger(pDecoder, &pMsg->msg.trigger));
321,499✔
1142
  } else {
1143
    TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployFromCalc(pDecoder, &pMsg->msg.calc));
393,125✔
1144
  }
1145
  
1146
_exit:
393,125✔
1147

1148
  return code;
714,624✔
1149
}
1150

1151

1152
int32_t tDecodeSStreamTaskAddr(SDecoder* pDecoder, SStreamTaskAddr* pMsg) {
962,041✔
1153
  int32_t code = 0;
962,041✔
1154
  int32_t lino;
1155

1156
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->taskId));
1,924,082✔
1157
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->nodeId));
1,924,082✔
1158
  TAOS_CHECK_EXIT(tDecodeSEpSet(pDecoder, &pMsg->epset));
962,041✔
1159

1160
_exit:
962,041✔
1161

1162
  return code;
962,041✔
1163
}
1164

1165

1166
int32_t tDecodeSStreamRunnerTarget(SDecoder* pDecoder, SStreamRunnerTarget* pMsg) {
624,939✔
1167
  int32_t code = 0;
624,939✔
1168
  int32_t lino;
1169

1170
  TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, &pMsg->addr));
624,939✔
1171
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
1,249,878✔
1172

1173
_exit:
624,939✔
1174

1175
  return code;
624,939✔
1176
}
1177

1178

1179
int32_t tDecodeSStreamTriggerDeployMsg(SDecoder* pDecoder, SStreamTriggerDeployMsg* pMsg) {
211,748✔
1180
  int32_t code = 0;
211,748✔
1181
  int32_t lino;
1182

1183
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerType));
423,496✔
1184
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->igDisorder));
423,496✔
1185
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->fillHistory));
423,496✔
1186
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->fillHistoryFirst));
423,496✔
1187
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->lowLatencyCalc));
423,496✔
1188
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->igNoDataTrigger));
423,496✔
1189
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->enableMultiGroupCalc));
423,496✔
1190
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->isTriggerTblVirt));
423,496✔
1191
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerHasPF));
423,496✔
1192
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->isTriggerTblStb));
423,496✔
1193
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->partitionCols, NULL));
423,496✔
1194

1195
  int32_t addrSize = 0;
211,748✔
1196
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
211,748✔
1197
  if (addrSize > 0) {
211,748✔
1198
    pMsg->pNotifyAddrUrls = taosArrayInit_s(POINTER_BYTES, addrSize);
57,422✔
1199
    TSDB_CHECK_NULL(pMsg->pNotifyAddrUrls, code, lino, _exit, terrno);
57,422✔
1200
  }
1201
  for (int32_t i = 0; i < addrSize; ++i) {
269,170✔
1202
    const char **url = taosArrayGet(pMsg->pNotifyAddrUrls, i);
57,422✔
1203
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)url, NULL));
57,422✔
1204
  }
1205
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->notifyEventTypes));
423,496✔
1206
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->addOptions));
423,496✔
1207
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->notifyHistory));
423,496✔
1208

1209
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->maxDelay));
423,496✔
1210
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->fillHistoryStartTime));
423,496✔
1211
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->watermark));
423,496✔
1212
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->expiredTime));
423,496✔
1213
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->idleTimeoutMs));
423,496✔
1214

1215
  switch (pMsg->triggerType) {
211,748✔
1216
    case WINDOW_TYPE_SESSION:
8,748✔
1217
      // session trigger
1218
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->trigger.session.slotId));
17,496✔
1219
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.session.sessionVal));
17,496✔
1220
      break;
8,748✔
1221
    case WINDOW_TYPE_STATE:
67,986✔
1222
      // state trigger
1223
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->trigger.stateWin.slotId));
135,972✔
1224
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->trigger.stateWin.extend));
135,972✔
1225
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->trigger.stateWin.trueForType));
135,972✔
1226
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->trigger.stateWin.trueForCount));
135,972✔
1227
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.stateWin.trueForDuration));
135,972✔
1228
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.stateWin.zeroth, NULL));
135,972✔
1229
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.stateWin.expr, NULL));
135,972✔
1230
      break;
67,986✔
1231
    
1232
    case WINDOW_TYPE_INTERVAL:
79,745✔
1233
      // slide trigger
1234
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.intervalUnit));
159,490✔
1235
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.slidingUnit));
159,490✔
1236
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.offsetUnit));
159,490✔
1237
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.soffsetUnit));
159,490✔
1238
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.precision));
159,490✔
1239
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.interval));
159,490✔
1240
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.offset));
159,490✔
1241
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.sliding));
159,490✔
1242
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.soffset));
159,490✔
1243
      break;
79,745✔
1244
    
1245
    case WINDOW_TYPE_EVENT:
25,168✔
1246
      // event trigger
1247
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.event.startCond, NULL));
50,336✔
1248
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.event.endCond, NULL));
50,336✔
1249
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->trigger.event.trueForType));
50,336✔
1250
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->trigger.event.trueForCount));
50,336✔
1251
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.event.trueForDuration));
50,336✔
1252
      break;
25,168✔
1253
    
1254
    case WINDOW_TYPE_COUNT:
19,580✔
1255
      // count trigger
1256
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.count.condCols, NULL));
39,160✔
1257
      
1258
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.count.countVal));
39,160✔
1259
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.count.sliding));
39,160✔
1260
      break;
19,580✔
1261
    
1262
    case WINDOW_TYPE_PERIOD:
10,521✔
1263
      // period trigger
1264
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, (int8_t*)&pMsg->trigger.period.periodUnit));
21,042✔
1265
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, (int8_t*)&pMsg->trigger.period.offsetUnit));
21,042✔
1266
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.period.precision));
21,042✔
1267
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.period.period));
21,042✔
1268
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.period.offset));
21,042✔
1269
      break;
10,521✔
UNCOV
1270
    default:
×
UNCOV
1271
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
1272
      break;
×
1273
  }
1274

1275
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->eventTypes));
423,496✔
1276
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->placeHolderBitmap));
423,496✔
1277
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->calcTsSlotId));
423,496✔
1278
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->triTsSlotId));
423,496✔
1279
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->calcPkSlotId));
423,496✔
1280
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->triPkSlotId));
423,496✔
1281
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerPrevFilter, NULL));
423,496✔
1282
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerScanPlan, NULL));
423,496✔
1283
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcCacheScanPlan, NULL));
423,496✔
1284

1285
  int32_t readerNum = 0;
211,748✔
1286
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));
211,748✔
1287
  if (readerNum > 0) {
211,748✔
1288
    pMsg->readerList = taosArrayInit_s(sizeof(SStreamTaskAddr), readerNum);
207,830✔
1289
    TSDB_CHECK_NULL(pMsg->readerList, code, lino, _exit, terrno);
207,830✔
1290
  }
1291
  for (int32_t i = 0; i < readerNum; ++i) {
469,187✔
1292
    SStreamTaskAddr* pAddr = (SStreamTaskAddr*)taosArrayGet(pMsg->readerList, i);
257,439✔
1293
    TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, pAddr));
257,439✔
1294
  }
1295

1296
  int32_t runnerNum = 0;
211,748✔
1297
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));
211,748✔
1298
  if (runnerNum > 0) {
211,748✔
1299
    pMsg->runnerList = taosArrayInit_s(sizeof(SStreamRunnerTarget), runnerNum);
208,313✔
1300
    TSDB_CHECK_NULL(pMsg->runnerList, code, lino, _exit, terrno);
208,313✔
1301
  }
1302
  for (int32_t i = 0; i < runnerNum; ++i) {
836,687✔
1303
    SStreamRunnerTarget* pTarget = (SStreamRunnerTarget*)taosArrayGet(pMsg->runnerList, i);
624,939✔
1304
    TAOS_CHECK_EXIT(tDecodeSStreamRunnerTarget(pDecoder, pTarget));
624,939✔
1305
  }
1306

1307
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->leaderSnodeId));
423,496✔
1308
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->streamName, NULL));
423,496✔
1309
  if (!tDecodeIsEnd(pDecoder)) {
211,748✔
1310
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->precision));
423,496✔
1311
  }
1312
  if (!tDecodeIsEnd(pDecoder)) {
211,748✔
1313
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->nodelayCreateSubtable));
423,496✔
1314
  }
1315

1316
_exit:
211,748✔
1317

1318
  return code;
211,748✔
1319
}
1320

1321

1322

1323
int32_t tDeserializeSFieldWithOptions(SDecoder *pDecoder, SFieldWithOptions *pField) {
3,599,479✔
1324
  int32_t code = 0;
3,599,479✔
1325
  int32_t lino;
1326

1327
  TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, pField->name));
3,599,479✔
1328
  TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pField->type));
7,198,958✔
1329
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pField->flags));
7,198,958✔
1330
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pField->bytes));
7,198,958✔
1331
  TAOS_CHECK_EXIT(tDecodeU32(pDecoder, &pField->compress));
7,198,958✔
1332
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pField->typeMod));
7,198,958✔
1333

1334
_exit:
3,599,479✔
1335

1336
  return code;
3,599,479✔
1337
}
1338

1339
void destroySStreamOutCols(void* p){
70,527✔
1340
  if (p == NULL) return;
70,527✔
1341
  SStreamOutCol* col = (SStreamOutCol*)p;
70,527✔
1342
  taosMemoryFreeClear(col->expr);
70,527✔
1343
}
1344

1345
int32_t tDecodeSStreamRunnerDeployMsg(SDecoder* pDecoder, SStreamRunnerDeployMsg* pMsg) {
731,519✔
1346
  int32_t code = 0;
731,519✔
1347
  int32_t lino;
1348

1349
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
1,463,038✔
1350
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->streamName, NULL));
1,463,038✔
1351
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->pPlan, NULL));
1,463,038✔
1352
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->outDBFName, NULL));
1,463,038✔
1353
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->outTblName, NULL));
1,463,038✔
1354
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->outTblType));
1,463,038✔
1355
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->calcNotifyOnly));
1,463,038✔
1356
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->topPlan));
1,463,038✔
1357

1358
  int32_t addrSize = 0;
731,519✔
1359
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
731,519✔
1360
  if (addrSize > 0) {
731,519✔
1361
    pMsg->pNotifyAddrUrls = taosArrayInit_s(POINTER_BYTES, addrSize);
161,961✔
1362
    TSDB_CHECK_NULL(pMsg->pNotifyAddrUrls, code, lino, _exit, terrno);
161,961✔
1363
  }
1364
  for (int32_t i = 0; i < addrSize; ++i) {
893,480✔
1365
    const char **url = taosArrayGet(pMsg->pNotifyAddrUrls, i);
161,961✔
1366
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)url, NULL));
161,961✔
1367
  }
1368
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->addOptions));
1,463,038✔
1369

1370
  int32_t outColNum = 0;
731,519✔
1371
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outColNum));
731,519✔
1372
  if (outColNum > 0) {
731,519✔
1373
    pMsg->outCols = taosArrayInit_s(sizeof(SFieldWithOptions), outColNum);
731,519✔
1374
    TSDB_CHECK_NULL(pMsg->outCols, code, lino, _exit, terrno);
731,519✔
1375
  }
1376
  for (int32_t i = 0; i < outColNum; ++i) {
3,730,335✔
1377
    SFieldWithOptions *pCol = taosArrayGet(pMsg->outCols, i);
2,998,816✔
1378
    TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pCol));
2,998,816✔
1379
  }
1380

1381
  int32_t outTagNum = 0;
731,519✔
1382
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outTagNum));
731,519✔
1383
  if (outTagNum > 0) {
731,519✔
1384
    pMsg->outTags = taosArrayInit_s(sizeof(SFieldWithOptions), outTagNum);
304,308✔
1385
    TSDB_CHECK_NULL(pMsg->outTags, code, lino, _exit, terrno);
304,308✔
1386
  }
1387
  for (int32_t i = 0; i < outTagNum; ++i) {
1,332,182✔
1388
    SFieldWithOptions *pTag = taosArrayGet(pMsg->outTags, i);
600,663✔
1389
    TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pTag));
600,663✔
1390
  }
1391

1392
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pMsg->outStbUid));
1,463,038✔
1393
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->outStbSversion));
1,463,038✔
1394

1395
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->subTblNameExpr, NULL));
1,463,038✔
1396
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->tagValueExpr, NULL));
1,463,038✔
1397

1398
  int32_t forceOutColsSize = 0;
731,519✔
1399
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &forceOutColsSize));
731,519✔
1400
  if (forceOutColsSize > 0) {
731,519✔
1401
    pMsg->forceOutCols = taosArrayInit_s(sizeof(SStreamOutCol), forceOutColsSize);
12,747✔
1402
    TSDB_CHECK_NULL(pMsg->forceOutCols, code, lino, _exit, terrno);
12,747✔
1403
  }
1404
  for (int32_t i = 0; i < forceOutColsSize; ++i) {
802,046✔
1405
    SStreamOutCol *pCoutCol = (SStreamOutCol*)taosArrayGet(pMsg->forceOutCols, i);
70,527✔
1406

1407
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pCoutCol->expr, NULL));
141,054✔
1408
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.type));
141,054✔
1409
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.precision));
141,054✔
1410
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.scale));
141,054✔
1411
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pCoutCol->type.bytes));
141,054✔
1412
  }
1413

1414
  if (!tDecodeIsEnd(pDecoder)) {
731,519✔
1415
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->lowLatencyCalc));
1,463,038✔
1416
  }
1417

1418
  // colCids and tagCids - always decode size, create array only if size > 0
1419
  // For backward compatibility, check if there's more data before decoding
1420
  if (!tDecodeIsEnd(pDecoder)) {
731,519✔
1421
    int32_t colCidsSize = 0;
731,519✔
1422
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &colCidsSize));
731,519✔
1423
    if (colCidsSize > 0 && colCidsSize <= TSDB_MAX_COLUMNS) {  // Sanity check
731,519✔
1424
      pMsg->colCids = taosArrayInit(colCidsSize, sizeof(int16_t));
11,772✔
1425
      TSDB_CHECK_NULL(pMsg->colCids, code, lino, _exit, terrno);
11,772✔
1426
      for (int32_t i = 0; i < colCidsSize; ++i) {
48,018✔
1427
        int16_t cid = 0;
36,246✔
1428
        TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &cid));
36,246✔
1429
        if (taosArrayPush(pMsg->colCids, &cid) == NULL) {
72,492✔
UNCOV
1430
          TAOS_CHECK_EXIT(terrno);
×
1431
        }
1432
      }
1433
    }
1434
  }
1435
  // Try to decode tagCids if there's more data
1436
  if (!tDecodeIsEnd(pDecoder)) {
731,519✔
1437
    int32_t tagCidsSize = 0;
731,519✔
1438
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &tagCidsSize));
731,519✔
1439
    if (tagCidsSize > 0 && tagCidsSize <= TSDB_MAX_TAGS) {  // Sanity check
731,519✔
1440
      pMsg->tagCids = taosArrayInit(tagCidsSize, sizeof(int16_t));
8,340✔
1441
      TSDB_CHECK_NULL(pMsg->tagCids, code, lino, _exit, terrno);
8,340✔
1442
      for (int32_t i = 0; i < tagCidsSize; ++i) {
21,177✔
1443
        int16_t cid = 0;
12,837✔
1444
        TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &cid));
12,837✔
1445
        if (taosArrayPush(pMsg->tagCids, &cid) == NULL) {
25,674✔
UNCOV
1446
          TAOS_CHECK_EXIT(terrno);
×
1447
        }
1448
      }
1449
    }
1450
  }
1451

1452
_exit:
729,743✔
1453

1454
  return code;
731,519✔
1455
}
1456

1457
int32_t tDecodeSStmTaskDeploy(SDecoder* pDecoder, SStmTaskDeploy* pTask) {
1,657,891✔
1458
  int32_t code = 0;
1,657,891✔
1459
  int32_t lino;
1460

1461
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
1,657,891✔
1462
  switch (pTask->task.type) {
1,657,891✔
1463
    case STREAM_READER_TASK:
714,624✔
1464
      TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployMsg(pDecoder, &pTask->msg.reader));
714,624✔
1465
      break;
714,624✔
1466
    case STREAM_TRIGGER_TASK:
211,748✔
1467
      TAOS_CHECK_EXIT(tDecodeSStreamTriggerDeployMsg(pDecoder, &pTask->msg.trigger));
211,748✔
1468
      break;
211,748✔
1469
    case STREAM_RUNNER_TASK:
731,519✔
1470
      TAOS_CHECK_EXIT(tDecodeSStreamRunnerDeployMsg(pDecoder, &pTask->msg.runner));
731,519✔
1471
      break;
731,519✔
UNCOV
1472
    default:
×
UNCOV
1473
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
1474
      break;
×
1475
  }
1476
  
1477
_exit:
1,657,891✔
1478

1479
  return code;
1,657,891✔
1480
}
1481

1482

1483
int32_t tDecodeSStmStreamDeploy(SDecoder* pDecoder, SStmStreamDeploy* pStream) {
288,894✔
1484
  int32_t code = 0;
288,894✔
1485
  int32_t lino;
1486

1487
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pStream->streamId));
577,788✔
1488

1489
  int32_t readerNum = 0;
288,894✔
1490
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));
288,894✔
1491
  if (readerNum > 0) {
288,894✔
1492
    pStream->readerTasks = taosArrayInit_s(sizeof(SStmTaskDeploy), readerNum);
274,731✔
1493
    TSDB_CHECK_NULL(pStream->readerTasks, code, lino, _exit, terrno);
274,731✔
1494
  }
1495
  for (int32_t i = 0; i < readerNum; ++i) {
1,003,518✔
1496
    SStmTaskDeploy* pTask = taosArrayGet(pStream->readerTasks, i);
714,624✔
1497
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pTask));
714,624✔
1498
  }
1499

1500
  int32_t triggerTask = 0;
288,894✔
1501
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &triggerTask));
288,894✔
1502
  if (triggerTask) {
288,894✔
1503
    pStream->triggerTask = taosMemoryCalloc(1, sizeof(SStmTaskDeploy));
211,748✔
1504
    TSDB_CHECK_NULL(pStream->triggerTask, code, lino, _exit, terrno);
211,748✔
1505
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pStream->triggerTask));
211,748✔
1506
  }
1507
  
1508
  int32_t runnerNum = 0;
288,894✔
1509
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));
288,894✔
1510
  if (runnerNum > 0) {
288,894✔
1511
    pStream->runnerTasks = taosArrayInit_s(sizeof(SStmTaskDeploy), runnerNum);
216,116✔
1512
    TSDB_CHECK_NULL(pStream->runnerTasks, code, lino, _exit, terrno);
216,116✔
1513
  }
1514
  for (int32_t i = 0; i < runnerNum; ++i) {
1,020,413✔
1515
    SStmTaskDeploy* pTask = taosArrayGet(pStream->runnerTasks, i);
731,519✔
1516
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pTask));
731,519✔
1517
  }
1518

1519
_exit:
288,894✔
1520

1521
  return code;
288,894✔
1522
}
1523

1524

1525
int32_t tDecodeSStreamStartTaskMsg(SDecoder* pDecoder, SStreamStartTaskMsg* pStart) {
205,509✔
1526
  int32_t code = 0;
205,509✔
1527
  int32_t lino;
1528

1529
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pStart->header));
205,509✔
1530

1531
_exit:
205,509✔
1532

1533
  return code;
205,509✔
1534
}
1535

1536

1537
int32_t tDecodeSStreamTaskStart(SDecoder* pDecoder, SStreamTaskStart* pTask) {
205,509✔
1538
  int32_t code = 0;
205,509✔
1539
  int32_t lino;
1540

1541
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
205,509✔
1542
  TAOS_CHECK_EXIT(tDecodeSStreamStartTaskMsg(pDecoder, (SStreamStartTaskMsg*)&pTask->startMsg));
205,509✔
1543

1544
_exit:
205,509✔
1545

1546
  return code;
205,509✔
1547
}
1548

1549

1550
int32_t tDecodeSStreamUndeployTaskMsg(SDecoder* pDecoder, SStreamUndeployTaskMsg* pUndeploy) {
271,278✔
1551
  int32_t code = 0;
271,278✔
1552
  int32_t lino;
1553

1554
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pUndeploy->header));
271,278✔
1555
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pUndeploy->doCheckpoint));
542,556✔
1556
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pUndeploy->doCleanup));
542,556✔
1557

1558
_exit:
271,278✔
1559

1560
  return code;
271,278✔
1561
}
1562

1563

1564
int32_t tDecodeSStreamTaskUndeploy(SDecoder* pDecoder, SStreamTaskUndeploy* pTask) {
271,278✔
1565
  int32_t code = 0;
271,278✔
1566
  int32_t lino;
1567

1568
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
271,278✔
1569
  TAOS_CHECK_EXIT(tDecodeSStreamUndeployTaskMsg(pDecoder, (SStreamUndeployTaskMsg*)&pTask->undeployMsg));
271,278✔
1570

1571
_exit:
271,278✔
1572

1573
  return code;
271,278✔
1574
}
1575

1576
int32_t tDecodeSStreamRecalcReq(SDecoder* pDecoder, SStreamRecalcReq* recalc) {
3,640✔
1577
  int32_t code = 0;
3,640✔
1578
  int32_t lino;
1579

1580
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->recalcId));
7,280✔
1581
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->start));
7,280✔
1582
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->end));
7,280✔
1583

1584
_exit:
3,640✔
1585

1586
  return code;
3,640✔
1587
}
1588

1589
int32_t tDecodeSStreamMgmtRspCont(SDecoder* pDecoder, SStreamMsgType msgType, SStreamMgmtRspCont* pCont) {
72,587✔
1590
  int32_t code = 0;
72,587✔
1591
  int32_t lino;
1592

1593
  switch (msgType) {
72,587✔
1594
    case STREAM_MSG_ORIGTBL_READER_INFO: {
66,307✔
1595
      int32_t vgNum = 0;
66,307✔
1596
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgNum));  
66,307✔
1597
      if (vgNum > 0) {
66,307✔
1598
        pCont->vgIds = taosArrayInit_s(sizeof(int32_t), vgNum);
66,307✔
1599
        TSDB_CHECK_NULL(pCont->vgIds, code, lino, _exit, terrno);
66,307✔
1600
      }
1601
      for (int32_t i = 0; i < vgNum; ++i) {
260,605✔
1602
        int32_t *vgId = taosArrayGet(pCont->vgIds, i);
194,298✔
1603
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, vgId));  
194,298✔
1604
      }
1605

1606
      int32_t readerNum = 0;
66,307✔
1607
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));  
66,307✔
1608
      if (readerNum > 0) {
66,307✔
1609
        pCont->readerList = taosArrayInit_s(sizeof(SStreamTaskAddr), readerNum);
55,574✔
1610
        TSDB_CHECK_NULL(pCont->readerList, code, lino, _exit, terrno);
55,574✔
1611
      }
1612
      for (int32_t i = 0; i < readerNum; ++i) {
130,317✔
1613
        SStreamTaskAddr *addr = taosArrayGet(pCont->readerList, i);
64,010✔
1614
        TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, addr));  
64,010✔
1615
      }
1616
      break;
66,307✔
1617
    }
UNCOV
1618
    case STREAM_MSG_UPDATE_RUNNER: {
×
UNCOV
1619
      int32_t runnerNum = 0;
×
UNCOV
1620
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));  
×
UNCOV
1621
      if (runnerNum > 0) {
×
UNCOV
1622
        pCont->runnerList = taosArrayInit_s(sizeof(SStreamRunnerTarget), runnerNum);
×
UNCOV
1623
        TSDB_CHECK_NULL(pCont->runnerList, code, lino, _exit, terrno);
×
1624
      }
1625
      for (int32_t i = 0; i < runnerNum; ++i) {
×
1626
        SStreamRunnerTarget *target = taosArrayGet(pCont->runnerList, i);
×
1627
        TAOS_CHECK_EXIT(tDecodeSStreamRunnerTarget(pDecoder, target));  
×
1628
      }
1629
      break;
×
1630
    }
1631
    case STREAM_MSG_USER_RECALC: {
3,640✔
1632
      int32_t recalcNum = 0;
3,640✔
1633
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &recalcNum));  
3,640✔
1634
      if (recalcNum > 0) {
3,640✔
1635
        pCont->recalcList = taosArrayInit_s(sizeof(SStreamRecalcReq), recalcNum);
3,640✔
1636
        TSDB_CHECK_NULL(pCont->recalcList, code, lino, _exit, terrno);
3,640✔
1637
      }
1638
      for (int32_t i = 0; i < recalcNum; ++i) {
7,280✔
1639
        SStreamRecalcReq *recalc = taosArrayGet(pCont->recalcList, i);
3,640✔
1640
        TAOS_CHECK_EXIT(tDecodeSStreamRecalcReq(pDecoder, recalc));  
3,640✔
1641
      }
1642
      break;
3,640✔
1643
    }
1644
    case STREAM_MSG_RUNNER_ORIGTBL_READER: {
2,640✔
1645
      int32_t rspNum = 0, vgNum = 0;
2,640✔
1646
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &rspNum));  
2,640✔
1647
      if (rspNum > 0) {
2,640✔
1648
        pCont->execRspList = taosArrayInit_s(sizeof(SStreamOReaderDeployRsp), rspNum);
2,640✔
1649
        TSDB_CHECK_NULL(pCont->execRspList, code, lino, _exit, terrno);
2,640✔
1650
      }
1651
      for (int32_t i = 0; i < rspNum; ++i) {
5,280✔
1652
        SStreamOReaderDeployRsp *pDeployRsp = taosArrayGet(pCont->execRspList, i);
2,640✔
1653
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pDeployRsp->execId));  
5,280✔
1654
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgNum));
2,640✔
1655
        if (vgNum > 0) {
2,640✔
1656
          pDeployRsp->vgList = taosArrayInit_s(sizeof(SStreamTaskAddr), vgNum);
2,640✔
1657
          TSDB_CHECK_NULL(pDeployRsp->vgList, code, lino, _exit, terrno);
2,640✔
1658
        }
1659
        for (int32_t n = 0; n < vgNum; ++n) {
5,280✔
1660
          SStreamTaskAddr* pAddr = taosArrayGet(pDeployRsp->vgList, n);
2,640✔
1661
          TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, pAddr));  
2,640✔
1662
        }
1663
      }
1664
      break;
2,640✔
1665
    }
UNCOV
1666
    default:
×
UNCOV
1667
      break;
×
1668
  }
1669

1670
_exit:
72,587✔
1671

1672
  return code;
72,587✔
1673
}
1674

1675

1676
int32_t tDecodeSStreamMgmtRsp(SDecoder* pDecoder, SStreamMgmtRsp* pRsp) {
72,587✔
1677
  int32_t code = 0;
72,587✔
1678
  int32_t lino;
1679

1680
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pRsp->header));
72,587✔
1681
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->reqId));
145,174✔
1682
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->code));
145,174✔
1683
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, &pRsp->task));
72,587✔
1684
  TAOS_CHECK_EXIT(tDecodeSStreamMgmtRspCont(pDecoder, pRsp->header.msgType, &pRsp->cont));
72,587✔
1685

1686
_exit:
72,587✔
1687

1688
  return code;
72,587✔
1689
}
1690

1691
void tFreeSStreamOReaderDeployRsp(void* param) {
5,280✔
1692
  if (NULL == param) {
5,280✔
UNCOV
1693
    return;
×
1694
  }
1695

1696
  SStreamOReaderDeployRsp* pRsp = (SStreamOReaderDeployRsp*)param;
5,280✔
1697
  taosArrayDestroy(pRsp->vgList);
5,280✔
1698
}
1699

1700
void tFreeSStreamMgmtRsp(void* param) {
145,174✔
1701
  if (NULL == param) {
145,174✔
UNCOV
1702
    return;
×
1703
  }
1704
  
1705
  SStreamMgmtRsp* pRsp = (SStreamMgmtRsp*)param;
145,174✔
1706

1707
  taosArrayDestroy(pRsp->cont.vgIds);
145,174✔
1708
  taosArrayDestroy(pRsp->cont.readerList);
145,174✔
1709
  taosArrayDestroy(pRsp->cont.runnerList);
145,174✔
1710
  taosArrayDestroy(pRsp->cont.recalcList);
145,174✔
1711
  taosArrayDestroyEx(pRsp->cont.execRspList, tFreeSStreamOReaderDeployRsp);
145,174✔
1712
}
1713

1714
void tFreeSStreamReaderDeployMsg(SStreamReaderDeployMsg* pReader) {
714,624✔
1715
  if (NULL == pReader) {
714,624✔
UNCOV
1716
    return;
×
1717
  }
1718
  
1719
  if (pReader->triggerReader) {
714,624✔
1720
    SStreamReaderDeployFromTrigger* pMsg = (SStreamReaderDeployFromTrigger*)&pReader->msg.trigger;
321,499✔
1721
    taosMemoryFree(pMsg->triggerTblName);
321,499✔
1722
    taosMemoryFree(pMsg->partitionCols);
321,499✔
1723
    taosMemoryFree(pMsg->triggerCols);
321,499✔
1724
    taosMemoryFree(pMsg->triggerScanPlan);
321,499✔
1725
    taosMemoryFree(pMsg->calcCacheScanPlan);
321,499✔
1726
  } else {
1727
    SStreamReaderDeployFromCalc* pMsg = (SStreamReaderDeployFromCalc*)&pReader->msg.calc;
393,125✔
1728
    taosMemoryFree(pMsg->calcScanPlan);
393,125✔
1729
  }
1730
}
1731

UNCOV
1732
void tFreeStreamNotifyUrl(void* param) {
×
UNCOV
1733
  if (NULL == param) {
×
UNCOV
1734
    return;
×
1735
  }
1736

UNCOV
1737
  taosMemoryFree(*(void**)param);
×
1738
}
1739

1740
void tFreeSStreamTriggerDeployMsg(SStreamTriggerDeployMsg* pTrigger) {
211,748✔
1741
  if (NULL == pTrigger) {
211,748✔
UNCOV
1742
    return;
×
1743
  }
1744
  
1745
  taosArrayDestroyEx(pTrigger->pNotifyAddrUrls, tFreeStreamNotifyUrl);
211,748✔
1746
  switch (pTrigger->triggerType) {
211,748✔
1747
    case WINDOW_TYPE_STATE:
67,986✔
1748
      taosMemoryFree(pTrigger->trigger.stateWin.zeroth);
67,986✔
1749
      taosMemoryFree(pTrigger->trigger.stateWin.expr);
67,986✔
1750
      break;
67,986✔
1751
    case WINDOW_TYPE_EVENT:
25,168✔
1752
      taosMemoryFree(pTrigger->trigger.event.startCond);
25,168✔
1753
      taosMemoryFree(pTrigger->trigger.event.endCond);
25,168✔
1754
      break;
25,168✔
1755
    case WINDOW_TYPE_COUNT:
19,580✔
1756
      taosMemoryFree(pTrigger->trigger.count.condCols);  
19,580✔
1757
      break;
19,580✔
1758
    default:
99,014✔
1759
      break;
99,014✔
1760
  }
1761

1762
  taosMemoryFree(pTrigger->partitionCols);
211,748✔
1763
  taosMemoryFree(pTrigger->triggerPrevFilter);
211,748✔
1764
  taosMemoryFree(pTrigger->triggerScanPlan);
211,748✔
1765
  taosMemoryFree(pTrigger->calcCacheScanPlan);
211,748✔
1766

1767
  taosArrayDestroy(pTrigger->readerList);
211,748✔
1768
  taosArrayDestroy(pTrigger->runnerList);
211,748✔
1769
  taosMemoryFree(pTrigger->streamName);
211,748✔
1770
}
1771

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

UNCOV
1777
  SStreamOutCol* pOut = (SStreamOutCol*)param;
×
1778
  taosMemoryFree(pOut->expr);
×
1779
}
1780

1781
void tFreeSStreamRunnerDeployMsg(SStreamRunnerDeployMsg* pRunner) {
731,519✔
1782
  if (NULL == pRunner) {
731,519✔
1783
    return;
×
1784
  }
1785

1786
  taosMemoryFree(pRunner->streamName);
731,519✔
1787
  taosMemoryFree(pRunner->pPlan);
731,519✔
1788
  taosMemoryFree(pRunner->outDBFName);
731,519✔
1789
  taosMemoryFree(pRunner->outTblName);
731,519✔
1790

1791
  taosArrayDestroyEx(pRunner->pNotifyAddrUrls, tFreeStreamNotifyUrl);
731,519✔
1792
  taosArrayDestroy(pRunner->outCols);
731,519✔
1793
  taosArrayDestroy(pRunner->outTags);
731,519✔
1794

1795
  taosMemoryFree(pRunner->subTblNameExpr);
731,519✔
1796
  taosMemoryFree(pRunner->tagValueExpr);
731,519✔
1797
  taosArrayDestroyEx(pRunner->forceOutCols, tFreeSStreamOutCol);
731,519✔
1798
}
1799

1800
void tFreeSStmTaskDeploy(void* param) {
2,024,608✔
1801
  if (NULL == param) {
2,024,608✔
1802
    return;
366,717✔
1803
  }
1804

1805
  SStmTaskDeploy* pTask = (SStmTaskDeploy*)param;
1,657,891✔
1806
  switch (pTask->task.type)  {
1,657,891✔
1807
    case STREAM_READER_TASK:
714,624✔
1808
      tFreeSStreamReaderDeployMsg(&pTask->msg.reader);
714,624✔
1809
      break;
714,624✔
1810
    case STREAM_TRIGGER_TASK:
211,748✔
1811
      tFreeSStreamTriggerDeployMsg(&pTask->msg.trigger);
211,748✔
1812
      break;
211,748✔
1813
    case STREAM_RUNNER_TASK:
731,519✔
1814
      tFreeSStreamRunnerDeployMsg(&pTask->msg.runner);
731,519✔
1815
      break;
731,519✔
UNCOV
1816
    default:
×
UNCOV
1817
      break;
×
1818
  }
1819
}
1820

1821

1822
void tFreeSStmStreamDeploy(void* param) {
289,571✔
1823
  if (NULL == param) {
289,571✔
UNCOV
1824
    return;
×
1825
  }
1826
  
1827
  SStmStreamDeploy* pDeploy = (SStmStreamDeploy*)param;
289,571✔
1828
  int32_t readerNum = taosArrayGetSize(pDeploy->readerTasks);
289,571✔
1829
  for (int32_t i = 0; i < readerNum; ++i) {
1,005,271✔
1830
    SStmTaskDeploy* pReader = taosArrayGet(pDeploy->readerTasks, i);
715,700✔
1831
    if (!pReader->msg.reader.triggerReader && pReader->msg.reader.msg.calc.freeScanPlan) {
715,700✔
1832
      taosMemoryFreeClear(pReader->msg.reader.msg.calc.calcScanPlan);
383,225✔
1833
    }
1834
  }
1835
  taosArrayDestroy(pDeploy->readerTasks);
289,571✔
1836

1837
  if (pDeploy->triggerTask) {
289,571✔
1838
    taosArrayDestroy(pDeploy->triggerTask->msg.trigger.readerList);
212,229✔
1839
    taosArrayDestroy(pDeploy->triggerTask->msg.trigger.runnerList);
212,229✔
1840
    taosMemoryFree(pDeploy->triggerTask);
212,229✔
1841
  }
1842

1843
  int32_t runnerNum = taosArrayGetSize(pDeploy->runnerTasks);
289,571✔
1844
  for (int32_t i = 0; i < runnerNum; ++i) {
1,023,245✔
1845
    SStmTaskDeploy* pRunner = taosArrayGet(pDeploy->runnerTasks, i);
733,674✔
1846
    taosMemoryFree(pRunner->msg.runner.pPlan);
733,674✔
1847
  }
1848
  taosArrayDestroy(pDeploy->runnerTasks);
289,571✔
1849
}
1850

1851
void tDeepFreeSStmStreamDeploy(void* param) {
578,465✔
1852
  if (NULL == param) {
578,465✔
UNCOV
1853
    return;
×
1854
  }
1855
  
1856
  SStmStreamDeploy* pDeploy = (SStmStreamDeploy*)param;
578,465✔
1857
  taosArrayDestroyEx(pDeploy->readerTasks, tFreeSStmTaskDeploy);
578,465✔
1858
  tFreeSStmTaskDeploy(pDeploy->triggerTask);
578,465✔
1859
  taosMemoryFree(pDeploy->triggerTask);
578,465✔
1860
  taosArrayDestroyEx(pDeploy->runnerTasks, tFreeSStmTaskDeploy);
578,465✔
1861
}
1862

1863

1864
void tFreeSMStreamHbRspMsg(SMStreamHbRspMsg* pRsp) {
34,944,474✔
1865
  if (NULL == pRsp) {
34,944,474✔
UNCOV
1866
    return;
×
1867
  }
1868
  taosArrayDestroyEx(pRsp->deploy.streamList, tFreeSStmStreamDeploy);
34,944,474✔
1869
  taosArrayDestroy(pRsp->start.taskList);
34,944,474✔
1870
  taosArrayDestroy(pRsp->undeploy.taskList);
34,944,474✔
1871
  taosArrayDestroyEx(pRsp->rsps.rspList, tFreeSStreamMgmtRsp);
34,944,474✔
1872
}
1873

1874
void tDeepFreeSMStreamHbRspMsg(SMStreamHbRspMsg* pRsp) {
17,224,669✔
1875
  if (NULL == pRsp) {
17,224,669✔
UNCOV
1876
    return;
×
1877
  }
1878
  taosArrayDestroyEx(pRsp->deploy.streamList, tDeepFreeSStmStreamDeploy);
17,224,669✔
1879
  taosArrayDestroy(pRsp->start.taskList);
17,224,669✔
1880
  taosArrayDestroy(pRsp->undeploy.taskList);
17,224,669✔
1881
  taosArrayDestroyEx(pRsp->rsps.rspList, tFreeSStreamMgmtRsp);
17,224,669✔
1882
}
1883

1884

1885

1886
int32_t tDecodeStreamHbRsp(SDecoder* pDecoder, SMStreamHbRspMsg* pRsp) {
17,224,669✔
1887
  int32_t code = 0;
17,224,669✔
1888
  int32_t lino;
1889

1890
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
17,224,669✔
1891
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->streamGId));
34,449,338✔
1892
  int32_t deployNum = 0;
17,224,669✔
1893
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &deployNum));
17,224,669✔
1894
  if (deployNum > 0) {
17,224,669✔
1895
    pRsp->deploy.streamList = taosArrayInit_s(sizeof(SStmStreamDeploy), deployNum);
76,238✔
1896
    TSDB_CHECK_NULL(pRsp->deploy.streamList, code, lino, _exit, terrno);
76,238✔
1897
  }
1898
  for (int32_t i = 0; i < deployNum; ++i) {
17,513,563✔
1899
    SStmStreamDeploy* pStream = taosArrayGet(pRsp->deploy.streamList, i);
288,894✔
1900
    TAOS_CHECK_EXIT(tDecodeSStmStreamDeploy(pDecoder, pStream));
288,894✔
1901
  }
1902

1903
  int32_t startNum = 0;
17,224,669✔
1904
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &startNum));
17,224,669✔
1905
  if (startNum > 0) {
17,224,669✔
1906
    pRsp->start.taskList = taosArrayInit_s(sizeof(SStreamTaskStart), startNum);
99,875✔
1907
    TSDB_CHECK_NULL(pRsp->start.taskList, code, lino, _exit, terrno);
99,875✔
1908
  }
1909
  for (int32_t i = 0; i < startNum; ++i) {
17,430,178✔
1910
    SStreamTaskStart* pTask = (SStreamTaskStart*)taosArrayGet(pRsp->start.taskList, i);
205,509✔
1911
    TAOS_CHECK_EXIT(tDecodeSStreamTaskStart(pDecoder, pTask));
205,509✔
1912
  }
1913

1914
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pRsp->undeploy.undeployAll));
34,449,338✔
1915
  if (!pRsp->undeploy.undeployAll) {
17,224,669✔
1916
    int32_t undeployNum = 0;
17,224,669✔
1917
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &undeployNum));
17,224,669✔
1918
    if (undeployNum > 0) {
17,224,669✔
1919
      pRsp->undeploy.taskList = taosArrayInit_s(sizeof(SStreamTaskUndeploy), undeployNum);
37,974✔
1920
      TSDB_CHECK_NULL(pRsp->undeploy.taskList, code, lino, _exit, terrno);
37,974✔
1921
    }
1922
    for (int32_t i = 0; i < undeployNum; ++i) {
17,495,947✔
1923
      SStreamTaskUndeploy* pTask = (SStreamTaskUndeploy*)taosArrayGet(pRsp->undeploy.taskList, i);
271,278✔
1924
      TAOS_CHECK_EXIT(tDecodeSStreamTaskUndeploy(pDecoder, pTask));
271,278✔
1925
    }
1926
  }  
1927

1928
  int32_t rspNum = 0;
17,224,669✔
1929
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &rspNum));
17,224,669✔
1930
  if (rspNum > 0) {
17,224,669✔
1931
    pRsp->rsps.rspList = taosArrayInit_s(sizeof(SStreamMgmtRsp), rspNum);
21,873✔
1932
    TSDB_CHECK_NULL(pRsp->rsps.rspList, code, lino, _exit, terrno);
21,873✔
1933
    for (int32_t i = 0; i < rspNum; ++i) {
94,460✔
1934
      SStreamMgmtRsp* pMgmtRsp = (SStreamMgmtRsp*)taosArrayGet(pRsp->rsps.rspList, i);
72,587✔
1935
      TAOS_CHECK_EXIT(tDecodeSStreamMgmtRsp(pDecoder, pMgmtRsp));
72,587✔
1936
    }
1937
  }
1938

1939
  tEndDecode(pDecoder);
17,224,669✔
1940

1941
_exit:
17,224,669✔
1942
  return code;
17,224,669✔
1943
}
1944

UNCOV
1945
int32_t tEncodeStreamTaskRunReq (SEncoder* pEncoder, const SStreamTaskRunReq* pReq) {
×
UNCOV
1946
  int32_t code = 0;
×
1947
  int32_t lino;
1948

UNCOV
1949
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
UNCOV
1950
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
1951
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->taskId));
×
1952
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->reqType));
×
UNCOV
1953
  tEndEncode(pEncoder);
×
1954

1955
_exit:
×
1956
  return code;
×
1957
}
1958

1959
int32_t tDecodeStreamTaskRunReq(SDecoder* pDecoder, SStreamTaskRunReq* pReq) {
×
UNCOV
1960
  int32_t code = 0;
×
1961
  int32_t lino;
1962

UNCOV
1963
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
UNCOV
1964
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
1965
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->taskId));
×
1966
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->reqType));
×
UNCOV
1967
  tEndDecode(pDecoder);
×
1968

1969
_exit:
×
1970
  return code;
×
1971
}
1972

1973
int32_t tEncodeStreamTaskStopReq(SEncoder* pEncoder, const SStreamTaskStopReq* pReq) {
×
UNCOV
1974
  int32_t code = 0;
×
1975
  int32_t lino;
1976

UNCOV
1977
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
UNCOV
1978
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
1979
  tEndEncode(pEncoder);
×
1980

UNCOV
1981
_exit:
×
UNCOV
1982
  return code;
×
1983
}
1984

1985
int32_t tDecodeStreamTaskStopReq(SDecoder* pDecoder, SStreamTaskStopReq* pReq) {
×
UNCOV
1986
  int32_t code = 0;
×
1987
  int32_t lino;
1988

UNCOV
1989
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
UNCOV
1990
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
1991
  tEndDecode(pDecoder);
×
1992

UNCOV
1993
_exit:
×
UNCOV
1994
  return code;
×
1995

1996
}
1997

1998

1999
int32_t tSerializeSCMCreateStreamReqImpl(SEncoder* pEncoder, const SCMCreateStreamReq *pReq) {
1,525,442✔
2000
  int32_t code = TSDB_CODE_SUCCESS;
1,525,442✔
2001
  int32_t lino = 0;
1,525,442✔
2002

2003
  char*   json = NULL;
1,525,442✔
2004
  int32_t jsonLen = 0;
1,525,442✔
2005
  TAOS_CHECK_EXIT(scmCreateStreamReqToJson(pReq, false, &json, &jsonLen));
1,525,442✔
2006
  TAOS_CHECK_EXIT(tEncodeCStrWithLen(pEncoder, json, jsonLen));
3,050,884✔
2007

2008
_exit:
1,525,442✔
2009
  taosMemoryFreeClear(json);
1,525,442✔
2010
  if (code) {
1,525,442✔
UNCOV
2011
    return code;
×
2012
  }
2013
  
2014
  return 0;
1,525,442✔
2015
}
2016

2017
int32_t tSerializeSCMCreateStreamReq(void *buf, int32_t bufLen, const SCMCreateStreamReq *pReq) {
676,600✔
2018
  SEncoder encoder = {0};
676,600✔
2019
  tEncoderInit(&encoder, buf, bufLen);
676,600✔
2020
  int32_t code = 0;
676,600✔
2021
  int32_t lino;
2022

2023
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
676,600✔
2024

2025
  TAOS_CHECK_EXIT(tSerializeSCMCreateStreamReqImpl(&encoder, pReq));
676,600✔
2026

2027
  tEndEncode(&encoder);
676,600✔
2028

2029
_exit:
676,600✔
2030
  if (code) {
676,600✔
UNCOV
2031
    tEncoderClear(&encoder);
×
UNCOV
2032
    return code;
×
2033
  } else {
2034
    int32_t tlen = encoder.pos;
676,600✔
2035
    tEncoderClear(&encoder);
676,600✔
2036
    return tlen;
676,600✔
2037
  }
2038
  return 0;
2039
}
2040

2041
// Old version deserialization for backward compatibility,
2042
// especially for stream version number 7
UNCOV
2043
int32_t tDeserializeSCMCreateStreamReqImplOld(SDecoder *pDecoder, SCMCreateStreamReq *pReq, int32_t leftBytes) {
×
UNCOV
2044
  int32_t code = 0;
×
2045
  int32_t lino;
UNCOV
2046
  pReq->calcPkSlotId = -1;
×
UNCOV
2047
  pReq->triPkSlotId = -1;
×
2048

2049
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
2050

UNCOV
2051
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->name, NULL));
×
2052
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->sql, NULL));
×
2053
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->outDB, NULL));
×
UNCOV
2054
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->streamDB, NULL));
×
2055
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerDB, NULL));
×
UNCOV
2056
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerTblName, NULL));
×
2057
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->outTblName, NULL));
×
2058

2059
  int32_t calcDbSize = 0;
×
2060
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &calcDbSize));
×
2061
  pReq->calcDB = taosArrayInit(calcDbSize, POINTER_BYTES);
×
2062
  if (pReq->calcDB == NULL) {
×
2063
    TAOS_CHECK_EXIT(terrno);
×
2064
  }
2065
  for (int32_t i = 0; i < calcDbSize; ++i) {
×
2066
    char *calcDb = NULL;
×
2067
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &calcDb));
×
2068
    calcDb = taosStrndup(calcDb, TSDB_DB_FNAME_LEN);
×
2069
    if (calcDb == NULL) {
×
UNCOV
2070
      TAOS_CHECK_EXIT(terrno);
×
2071
    }
2072
    if (taosArrayPush(pReq->calcDB, &calcDb) == NULL) {
×
2073
      taosMemoryFree(calcDb);
×
2074
      TAOS_CHECK_EXIT(terrno);
×
2075
    }
2076
  }
2077

2078
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igExists));
×
2079
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerType));
×
2080
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igDisorder));
×
UNCOV
2081
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->deleteReCalc));
×
UNCOV
2082
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->deleteOutTbl));
×
UNCOV
2083
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->fillHistory));
×
2084
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->fillHistoryFirst));
×
2085
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->calcNotifyOnly));
×
2086
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->lowLatencyCalc));
×
2087
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igNoDataTrigger));
×
2088

2089
  int32_t addrSize = 0;
×
2090
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
×
2091
  if (addrSize > 0) {
×
2092
    pReq->pNotifyAddrUrls = taosArrayInit(addrSize, POINTER_BYTES);
×
2093
    if (pReq->pNotifyAddrUrls == NULL) {
×
UNCOV
2094
      TAOS_CHECK_EXIT(terrno);
×
2095
    }
2096
  }
2097
  for (int32_t i = 0; i < addrSize; ++i) {
×
2098
    char *url = NULL;
×
2099
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &url));
×
2100
    url = taosStrndup(url, TSDB_STREAM_NOTIFY_URL_LEN);
×
UNCOV
2101
    if (url == NULL) {
×
UNCOV
2102
      TAOS_CHECK_EXIT(terrno);
×
2103
    }
2104
    if (taosArrayPush(pReq->pNotifyAddrUrls, &url) == NULL) {
×
2105
      taosMemoryFree(url);
×
2106
      TAOS_CHECK_EXIT(terrno);
×
2107
    }
2108
  }
UNCOV
2109
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->notifyEventTypes));
×
2110
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->addOptions));
×
2111
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->notifyHistory));
×
2112

UNCOV
2113
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerFilterCols, NULL));
×
UNCOV
2114
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerCols, NULL));
×
2115
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->partitionCols, NULL));
×
2116

2117
  int32_t outColSize = 0;
×
UNCOV
2118
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outColSize));
×
2119
  if (outColSize > 0) {
×
2120
    pReq->outCols = taosArrayInit_s(sizeof(SFieldWithOptions), outColSize);
×
2121
    if (pReq->outCols == NULL) {
×
UNCOV
2122
      TAOS_CHECK_EXIT(terrno);
×
2123
    }
2124

2125
    for (int32_t i = 0; i < outColSize; ++i) {
×
2126
      SFieldWithOptions* pField = taosArrayGet(pReq->outCols, i);
×
2127
      TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pField));
×
2128
    }
2129
  }
2130

2131
  int32_t outTagSize = 0;
×
2132
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outTagSize));
×
2133
  if (outTagSize > 0) {
×
UNCOV
2134
    pReq->outTags = taosArrayInit(outTagSize, sizeof(SFieldWithOptions));
×
UNCOV
2135
    if (pReq->outTags == NULL) {
×
UNCOV
2136
      TAOS_CHECK_EXIT(terrno);
×
2137
    }
2138

2139
    for (int32_t i = 0; i < outTagSize; ++i) {
×
2140
      SFieldWithOptions field = {0};
×
2141
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &field.type));
×
2142
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &field.flags));
×
UNCOV
2143
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &field.bytes));
×
UNCOV
2144
      TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, field.name));
×
2145
      if (taosArrayPush(pReq->outTags, &field) == NULL) {
×
2146
        TAOS_CHECK_EXIT(terrno);
×
2147
      }
2148
    }
2149
  }
2150

2151
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->maxDelay));
×
2152
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->fillHistoryStartTime));
×
UNCOV
2153
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->watermark));
×
UNCOV
2154
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->expiredTime));
×
2155

UNCOV
2156
  switch (pReq->triggerType) {
×
2157
    case WINDOW_TYPE_SESSION: {
×
2158
      // session trigger
2159
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->trigger.session.slotId));
×
2160
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.session.sessionVal));
×
UNCOV
2161
      break;
×
2162
    }
2163
      case WINDOW_TYPE_STATE: {
×
2164
        // state trigger
2165
        TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->trigger.stateWin.slotId));
×
2166
        pReq->trigger.stateWin.extend = 0;
×
2167
        pReq->trigger.stateWin.trueForType = 0;
×
UNCOV
2168
        pReq->trigger.stateWin.trueForCount = 0;
×
2169
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.stateWin.trueForDuration));
×
UNCOV
2170
        break;
×
2171
      }
2172
      case WINDOW_TYPE_INTERVAL: {
×
2173
        // slide trigger
2174
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.intervalUnit));
×
2175
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.slidingUnit));
×
2176
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.offsetUnit));
×
UNCOV
2177
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.soffsetUnit));
×
2178
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.precision));
×
UNCOV
2179
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.interval));
×
2180
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.offset));
×
2181
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.sliding));
×
2182
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.soffset));
×
2183
        break;
×
2184
      }
2185
      case WINDOW_TYPE_EVENT: {
×
2186
        // event trigger
2187
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.event.startCond, NULL));
×
2188
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.event.endCond, NULL));
×
2189
        pReq->trigger.event.trueForType = 0;
×
UNCOV
2190
        pReq->trigger.event.trueForCount = 0;
×
2191
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.event.trueForDuration));
×
UNCOV
2192
        break;
×
2193
      }
2194
      case WINDOW_TYPE_COUNT: {
×
2195
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.count.condCols, NULL));
×
2196

2197
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.count.countVal));
×
2198
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.count.sliding));
×
UNCOV
2199
        break;
×
2200
      }
2201
      case WINDOW_TYPE_PERIOD: {
×
2202
        // period trigger
2203
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.precision));
×
2204
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.periodUnit));
×
2205
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.offsetUnit));
×
UNCOV
2206
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.period.period));
×
2207
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.period.offset));
×
UNCOV
2208
        break;
×
2209
      }
2210
      default:
×
2211
        TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
×
2212
  }
2213

2214
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerTblType));
×
UNCOV
2215
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->triggerTblUid));
×
2216
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->triggerTblSuid));
×
2217
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->vtableCalc));
×
UNCOV
2218
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->outTblType));
×
UNCOV
2219
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->outStbExists));
×
2220
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->outStbUid));
×
2221
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->outStbSversion));
×
2222
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->eventTypes));
×
2223
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->flags));
×
2224
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->tsmaId));
×
2225
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->placeHolderBitmap));
×
2226
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->calcTsSlotId));
×
2227
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->triTsSlotId));
×
2228

2229
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->triggerTblVgId));
×
2230
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->outTblVgId));
×
2231

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

UNCOV
2234
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerHasPF));
×
2235
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerPrevFilter, NULL));
×
2236

UNCOV
2237
  int32_t calcScanPlanListSize = 0;
×
2238
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &calcScanPlanListSize));
×
UNCOV
2239
  if (calcScanPlanListSize > 0) {
×
2240
    pReq->calcScanPlanList = taosArrayInit(calcScanPlanListSize, sizeof(SStreamCalcScan));
×
2241
    if (pReq->calcScanPlanList == NULL) {
×
UNCOV
2242
      TAOS_CHECK_EXIT(terrno);
×
2243
    }
2244
    for (int32_t i = 0; i < calcScanPlanListSize; ++i) {
×
2245
      SStreamCalcScan calcScan = {0};
×
2246
      int32_t         vgListSize = 0;
×
2247
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgListSize));
×
2248
      if (vgListSize > 0) {
×
UNCOV
2249
        calcScan.vgList = taosArrayInit(vgListSize, sizeof(int32_t));
×
2250
        if (calcScan.vgList == NULL) {
×
2251
          TAOS_CHECK_EXIT(terrno);
×
2252
        }
2253
        for (int32_t j = 0; j < vgListSize; ++j) {
×
2254
          int32_t vgId = 0;
×
2255
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgId));
×
2256
          if (taosArrayPush(calcScan.vgList, &vgId) == NULL) {
×
2257
            TAOS_CHECK_EXIT(terrno);
×
2258
          }
2259
        }
2260
      }
2261
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &calcScan.readFromCache));
×
2262
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&calcScan.scanPlan, NULL));
×
2263
      if (taosArrayPush(pReq->calcScanPlanList, &calcScan) == NULL) {
×
UNCOV
2264
        TAOS_CHECK_EXIT(terrno);
×
2265
      }
2266
    }
2267
  }
2268

2269
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->numOfCalcSubplan));
×
2270
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->calcPlan, NULL));
×
UNCOV
2271
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->subTblNameExpr, NULL));
×
UNCOV
2272
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->tagValueExpr, NULL));
×
2273

UNCOV
2274
  int32_t forceOutColsSize = 0;
×
2275
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &forceOutColsSize));
×
2276
  if (forceOutColsSize > 0) {
×
2277
    pReq->forceOutCols = taosArrayInit(forceOutColsSize, sizeof(SStreamOutCol));
×
2278
    if (pReq->forceOutCols == NULL) {
×
UNCOV
2279
      TAOS_CHECK_EXIT(terrno);
×
2280
    }
2281
    for (int32_t i = 0; i < forceOutColsSize; ++i) {
×
2282
      SStreamOutCol outCol = {0};
×
2283
      int64_t       exprLen = 0;
×
2284
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&outCol.expr, &exprLen));
×
2285
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.type));
×
UNCOV
2286
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.precision));
×
2287
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.scale));
×
2288
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outCol.type.bytes));
×
2289
      if (taosArrayPush(pReq->forceOutCols, &outCol) == NULL) {
×
2290
        TAOS_CHECK_EXIT(terrno);
×
2291
      }
2292
    }
2293
  }
2294

2295
  // LeftBytes is the size of all fields at the tail of SStreamObj.
2296
  // If there are more data in the buffer, then it means
2297
  // the new fields are added in SStreamObj, need to decode them.
UNCOV
2298
  if (pDecoder->size - pDecoder->pos > leftBytes) {
×
UNCOV
2299
    switch (pReq->triggerType) {
×
UNCOV
2300
      case WINDOW_TYPE_STATE: {
×
2301
        // state trigger
UNCOV
2302
        if (!tDecodeIsEnd(pDecoder)) {
×
UNCOV
2303
          TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.stateWin.expr, NULL));
×
2304
        }
2305
        if (!tDecodeIsEnd(pDecoder)) {
×
2306
          TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->trigger.stateWin.extend));
×
2307
        }
2308
        break;
×
2309
      }
UNCOV
2310
      case WINDOW_TYPE_INTERVAL: {
×
2311
        if (!tDecodeIsEnd(pDecoder)) {
×
2312
          TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.overlap));
×
2313
        }
2314
        break;
×
2315
      }
2316
      default:
×
2317
        break;
×
2318
    }
2319
  }
2320

UNCOV
2321
  if (pDecoder->size - pDecoder->pos > leftBytes) {
×
2322
    if (!tDecodeIsEnd(pDecoder)) {
×
2323
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pReq->triggerPrec));
×
2324
    }
2325
  }
2326

2327
_exit:
×
2328

2329
  return code;
×
2330
}
2331

2332
// New deserialization using JSON
2333
// start from taosd ver-3.3.8.6, stream version number 8
2334
int32_t tDeserializeSCMCreateStreamReqImpl(SDecoder *pDecoder, SCMCreateStreamReq *pReq) {
481,335✔
2335
  int32_t code = 0;
481,335✔
2336
  int32_t lino;
2337

2338
  char* json = NULL;
481,335✔
2339
  SJson* pJson = NULL;
481,335✔
2340
  TAOS_CHECK_EXIT(tDecodeCStrAlloc(pDecoder, &json));
481,335✔
2341
  pJson = tjsonParse(json);
481,335✔
2342
  if (pJson == NULL) {
481,335✔
UNCOV
2343
    TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INVALID_JSON);
×
2344
  }
2345
  TAOS_CHECK_EXIT(jsonToSCMCreateStreamReq(pJson, pReq));
481,335✔
2346

2347
_exit:
481,335✔
2348
  taosMemoryFreeClear(json);
481,335✔
2349
  if (NULL != pJson) {
481,335✔
2350
    tjsonDelete(pJson);
481,335✔
2351
  }
2352

2353
  return code;
481,335✔
2354
}
2355

2356

2357
int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStreamReq *pReq) {
230,352✔
2358
  SDecoder decoder = {0};
230,352✔
2359
  tDecoderInit(&decoder, buf, bufLen);
230,352✔
2360
  int32_t code = 0;
230,352✔
2361
  int32_t lino;
2362

2363
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
230,352✔
2364
  
2365
  code = tDeserializeSCMCreateStreamReqImpl(&decoder, pReq);
230,352✔
2366
  if (TSDB_CODE_MND_STREAM_INVALID_JSON == code) {
230,352✔
UNCOV
2367
    uError("invalid json for stream create request, try old deserialization");
×
2368
    // try old deserialization for backward compatibility
UNCOV
2369
    tDecoderClear(&decoder);
×
UNCOV
2370
    tDecoderInit(&decoder, buf, bufLen);
×
UNCOV
2371
    TAOS_CHECK_EXIT(tStartDecode(&decoder));
×
UNCOV
2372
    TAOS_CHECK_EXIT(tDeserializeSCMCreateStreamReqImplOld(&decoder, pReq, 0));
×
2373
  }
2374

2375
  tEndDecode(&decoder);
230,352✔
2376

2377
_exit:
230,352✔
2378

2379
  tDecoderClear(&decoder);
230,352✔
2380
  return code;
230,352✔
2381
}
2382

2383

2384
int32_t tSerializeSMDropStreamReq(void *buf, int32_t bufLen, const SMDropStreamReq *pReq) {
55,818✔
2385
  int32_t  code = 0;
55,818✔
2386
  int32_t  lino;
2387
  int32_t  tlen;
2388
  SEncoder encoder = {0};
55,818✔
2389
  tEncoderInit(&encoder, buf, bufLen);
55,818✔
2390

2391
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
55,818✔
2392

2393
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->count));
111,636✔
2394
  for (int32_t i = 0; i < pReq->count; i++) {
118,380✔
2395
    int32_t nameLen = pReq->name[i] == NULL ? 0 : (int32_t)strlen(pReq->name[i]) + 1;
62,562✔
2396
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name[i], nameLen));
125,124✔
2397
  }
2398
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
111,636✔
2399

2400
  tEndEncode(&encoder);
55,818✔
2401

2402
_exit:
55,818✔
2403
  if (code) {
55,818✔
UNCOV
2404
    tlen = code;
×
2405
  } else {
2406
    tlen = encoder.pos;
55,818✔
2407
  }
2408
  tEncoderClear(&encoder);
55,818✔
2409
  return tlen;
55,818✔
2410
}
2411

2412
int32_t tDeserializeSMDropStreamReq(void *buf, int32_t bufLen, SMDropStreamReq *pReq) {
21,836✔
2413
  SDecoder decoder = {0};
21,836✔
2414
  int32_t  code = 0;
21,836✔
2415
  int32_t  lino;
2416
  tDecoderInit(&decoder, buf, bufLen);
21,836✔
2417

2418
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
21,836✔
2419
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->count));
43,672✔
2420
  if (pReq->count > 0) {
21,836✔
2421
    pReq->name = taosMemoryCalloc(pReq->count, sizeof(char*));
21,836✔
2422
    if (pReq->name == NULL) {
21,836✔
UNCOV
2423
      code = terrno;
×
UNCOV
2424
      goto _exit;
×
2425
    }
2426
    for (int32_t i = 0; i < pReq->count; i++) {
47,032✔
2427
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name[i], NULL));
50,392✔
2428
    }
2429
  }
2430
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
43,672✔
2431

2432
  tEndDecode(&decoder);
21,836✔
2433

2434
_exit:
21,836✔
2435
  tDecoderClear(&decoder);
21,836✔
2436
  return code;
21,836✔
2437
}
2438

2439
void tFreeMDropStreamReq(SMDropStreamReq *pReq) {
50,603✔
2440
  if (NULL == pReq) {
50,603✔
UNCOV
2441
    return;
×
2442
  }
2443
  if (pReq->name) {
50,603✔
2444
    for (int32_t i = 0; i < pReq->count; i++) {
107,938✔
2445
      taosMemoryFreeClear(pReq->name[i]);
57,335✔
2446
    }
2447
    taosMemoryFreeClear(pReq->name);
50,603✔
2448
  }
2449
}
2450

2451
static FORCE_INLINE void tFreeStreamCalcScan(void* pScan) {
2,252,131✔
2452
  if (pScan == NULL) {
2,252,131✔
UNCOV
2453
    return;
×
2454
  }
2455
  SStreamCalcScan *pCalcScan = (SStreamCalcScan *)pScan;
2,252,131✔
2456
  taosArrayDestroy(pCalcScan->vgList);
2,252,131✔
2457
  taosMemoryFreeClear(pCalcScan->scanPlan);
2,252,131✔
2458
}
2459

2460
void tFreeStreamOutCol(void* pCol) {
80,686✔
2461
  if (pCol == NULL) {
80,686✔
UNCOV
2462
    return;
×
2463
  }
2464
  SStreamOutCol *pOutCol = (SStreamOutCol *)pCol;
80,686✔
2465
  taosMemoryFreeClear(pOutCol->expr);
80,686✔
2466
}
2467

2468

2469

2470
void tFreeSCMCreateStreamReq(SCMCreateStreamReq *pReq) {
1,324,242✔
2471
  if (NULL == pReq) {
1,324,242✔
2472
    return;
216,624✔
2473
  }
2474
  taosMemoryFreeClear(pReq->name);
1,107,618✔
2475
  taosMemoryFreeClear(pReq->sql);
1,107,618✔
2476
  taosMemoryFreeClear(pReq->streamDB);
1,107,618✔
2477
  taosMemoryFreeClear(pReq->triggerDB);
1,107,618✔
2478
  taosMemoryFreeClear(pReq->outDB);
1,107,618✔
2479
  taosMemoryFreeClear(pReq->triggerTblName);
1,107,618✔
2480
  taosMemoryFreeClear(pReq->outTblName);
1,107,618✔
2481

2482
  taosArrayDestroyP(pReq->calcDB, NULL);
1,107,618✔
2483
  pReq->calcDB = NULL;
1,107,618✔
2484
  taosArrayDestroyP(pReq->pNotifyAddrUrls, NULL);
1,107,618✔
2485
  pReq->pNotifyAddrUrls = NULL;
1,107,618✔
2486

2487
  taosMemoryFreeClear(pReq->triggerFilterCols);
1,107,618✔
2488
  taosMemoryFreeClear(pReq->triggerCols);
1,107,618✔
2489
  taosMemoryFreeClear(pReq->partitionCols);
1,107,618✔
2490

2491
  taosArrayDestroy(pReq->outTags);
1,107,618✔
2492
  pReq->outTags = NULL;
1,107,618✔
2493
  taosArrayDestroy(pReq->outCols);
1,107,618✔
2494
  pReq->outCols = NULL;
1,107,618✔
2495

2496
  switch (pReq->triggerType) {
1,107,618✔
2497
    case WINDOW_TYPE_STATE:
315,617✔
2498
      taosMemoryFreeClear(pReq->trigger.stateWin.zeroth);
315,617✔
2499
      taosMemoryFreeClear(pReq->trigger.stateWin.expr);
315,617✔
2500
      break;
315,617✔
2501
    case WINDOW_TYPE_EVENT:
114,793✔
2502
      taosMemoryFreeClear(pReq->trigger.event.startCond);
114,793✔
2503
      taosMemoryFreeClear(pReq->trigger.event.endCond);
114,793✔
2504
      break;
114,793✔
2505
    default:
677,208✔
2506
      break;
677,208✔
2507
  }
2508

2509
  taosMemoryFreeClear(pReq->triggerScanPlan);
1,107,618✔
2510
  taosArrayDestroyEx(pReq->calcScanPlanList, tFreeStreamCalcScan);
1,107,618✔
2511
  pReq->calcScanPlanList = NULL;
1,107,618✔
2512
  taosMemoryFreeClear(pReq->triggerPrevFilter);
1,107,618✔
2513

2514
  taosMemoryFreeClear(pReq->calcPlan);
1,107,618✔
2515
  taosMemoryFreeClear(pReq->subTblNameExpr);
1,107,618✔
2516
  taosMemoryFreeClear(pReq->tagValueExpr);
1,107,618✔
2517
  taosArrayDestroyEx(pReq->forceOutCols, tFreeStreamOutCol);
1,107,618✔
2518
  pReq->forceOutCols = NULL;
1,107,618✔
2519
  taosArrayDestroy(pReq->colCids);
1,107,618✔
2520
  pReq->colCids = NULL;
1,107,618✔
2521
  taosArrayDestroy(pReq->tagCids);
1,107,618✔
2522
  pReq->tagCids = NULL;
1,107,618✔
2523
}
2524

2525
int32_t tCloneStreamCreateDeployPointers(SCMCreateStreamReq *pSrc, SCMCreateStreamReq** ppDst) {
204,983✔
2526
  int32_t code = 0, lino = 0;
204,983✔
2527
  if (NULL == pSrc) {
204,983✔
UNCOV
2528
    return code;
×
2529
  } 
2530

2531
  void* p = NULL;
204,983✔
2532
  int32_t num = 0;
204,983✔
2533
  *ppDst = taosMemoryCalloc(1, sizeof(SCMCreateStreamReq));
204,983✔
2534
  TSDB_CHECK_NULL(*ppDst, code, lino, _exit, terrno);
204,983✔
2535

2536
  SCMCreateStreamReq* pDst = *ppDst;
204,983✔
2537

2538
  if (pSrc->outDB) {
204,983✔
2539
    pDst->outDB = COPY_STR(pSrc->outDB);
201,548✔
2540
    TSDB_CHECK_NULL(pDst->outDB, code, lino, _exit, terrno);
201,548✔
2541
  }
2542
  
2543
  if (pSrc->triggerTblName) {
204,983✔
2544
    pDst->triggerTblName = COPY_STR(pSrc->triggerTblName);
200,543✔
2545
    TSDB_CHECK_NULL(pDst->triggerTblName, code, lino, _exit, terrno);
200,543✔
2546
  }
2547
  
2548
  if (pSrc->outTblName) {
204,983✔
2549
    pDst->outTblName = COPY_STR(pSrc->outTblName);
201,548✔
2550
    TSDB_CHECK_NULL(pDst->outTblName, code, lino, _exit, terrno);
201,548✔
2551
  }
2552
  
2553
  if (pSrc->pNotifyAddrUrls) {
204,983✔
2554
    num = taosArrayGetSize(pSrc->pNotifyAddrUrls);
57,422✔
2555
    if (num > 0) {
57,422✔
2556
      pDst->pNotifyAddrUrls = taosArrayInit(num, POINTER_BYTES);
57,422✔
2557
      TSDB_CHECK_NULL(pDst->pNotifyAddrUrls, code, lino, _exit, terrno);
57,422✔
2558
    }
2559
    for (int32_t i = 0; i < num; ++i) {
114,844✔
2560
      p = taosStrdup(taosArrayGetP(pSrc->pNotifyAddrUrls, i));
57,422✔
2561
      TSDB_CHECK_NULL(p, code, lino, _exit, terrno);
57,422✔
2562
      TSDB_CHECK_NULL(taosArrayPush(pDst->pNotifyAddrUrls, &p), code, lino, _exit, terrno);
114,844✔
2563
    }
2564
  }
2565
  
2566
  if (pSrc->triggerFilterCols) {
204,983✔
2567
    pDst->triggerFilterCols = COPY_STR(pSrc->triggerFilterCols);
18,192✔
2568
    TSDB_CHECK_NULL(pDst->triggerFilterCols, code, lino, _exit, terrno);
18,192✔
2569
  }
2570
  
2571
  if (pSrc->triggerCols) {
204,983✔
2572
    pDst->triggerCols = COPY_STR(pSrc->triggerCols);
194,154✔
2573
    TSDB_CHECK_NULL(pDst->triggerCols, code, lino, _exit, terrno);
194,154✔
2574
  }
2575
  
2576
  if (pSrc->partitionCols) {
204,983✔
2577
    pDst->partitionCols = COPY_STR(pSrc->partitionCols);
75,531✔
2578
    TSDB_CHECK_NULL(pDst->partitionCols, code, lino, _exit, terrno);
75,531✔
2579
  }
2580
  
2581
  if (pSrc->outCols) {
204,983✔
2582
    pDst->outCols = taosArrayDup(pSrc->outCols, NULL);
201,548✔
2583
    TSDB_CHECK_NULL(pDst->outCols, code, lino, _exit, terrno);
201,548✔
2584
  }
2585
  
2586
  if (pSrc->outTags) {
204,983✔
2587
    pDst->outTags = taosArrayDup(pSrc->outTags, NULL);
75,531✔
2588
    TSDB_CHECK_NULL(pDst->outTags, code, lino, _exit, terrno);
75,531✔
2589
  }
2590

2591
  pDst->triggerType = pSrc->triggerType;
204,983✔
2592
  
2593
  switch (pSrc->triggerType) {
204,983✔
2594
    case WINDOW_TYPE_STATE:
67,718✔
2595
      pDst->trigger.stateWin.slotId = pSrc->trigger.stateWin.slotId;
67,718✔
2596
      pDst->trigger.stateWin.extend = pSrc->trigger.stateWin.extend;
67,718✔
2597
      pDst->trigger.stateWin.trueForType = pSrc->trigger.stateWin.trueForType;
67,718✔
2598
      pDst->trigger.stateWin.trueForCount = pSrc->trigger.stateWin.trueForCount;
67,718✔
2599
      pDst->trigger.stateWin.trueForDuration = pSrc->trigger.stateWin.trueForDuration;
67,718✔
2600
      if (pSrc->trigger.stateWin.zeroth) {
67,718✔
UNCOV
2601
        pDst->trigger.stateWin.zeroth = COPY_STR(pSrc->trigger.stateWin.zeroth);
×
UNCOV
2602
        TSDB_CHECK_NULL(pDst->trigger.stateWin.zeroth, code, lino, _exit, terrno);
×
2603
      }
2604
      if (pSrc->trigger.stateWin.expr) {
67,718✔
2605
        pDst->trigger.stateWin.expr = COPY_STR(pSrc->trigger.stateWin.expr);
67,718✔
2606
        TSDB_CHECK_NULL(pDst->trigger.stateWin.expr, code, lino, _exit, terrno);
67,718✔
2607
      }
2608
      break;
67,718✔
2609
    case WINDOW_TYPE_EVENT:
24,386✔
2610
      if (pSrc->trigger.event.startCond) {
24,386✔
2611
        pDst->trigger.event.startCond = COPY_STR(pSrc->trigger.event.startCond);
24,386✔
2612
        TSDB_CHECK_NULL(pDst->trigger.event.startCond, code, lino, _exit, terrno);
24,386✔
2613
      }
2614
      
2615
      if (pSrc->trigger.event.endCond) {
24,386✔
2616
        pDst->trigger.event.endCond = COPY_STR(pSrc->trigger.event.endCond);
22,298✔
2617
        TSDB_CHECK_NULL(pDst->trigger.event.endCond, code, lino, _exit, terrno);
22,298✔
2618
      }
2619
      pDst->trigger.event.trueForType = pSrc->trigger.event.trueForType;
24,386✔
2620
      pDst->trigger.event.trueForCount = pSrc->trigger.event.trueForCount;
24,386✔
2621
      pDst->trigger.event.trueForDuration = pSrc->trigger.event.trueForDuration;
24,386✔
2622
      break;
24,386✔
2623
    case WINDOW_TYPE_COUNT:
19,580✔
2624
      pDst->trigger.count.countVal = pSrc->trigger.count.countVal;
19,580✔
2625
      pDst->trigger.count.sliding = pSrc->trigger.count.sliding;
19,580✔
2626
      if (pSrc->trigger.count.condCols) {
19,580✔
UNCOV
2627
        pDst->trigger.count.condCols = COPY_STR(pSrc->trigger.count.condCols);
×
UNCOV
2628
        TSDB_CHECK_NULL(pDst->trigger.count.condCols, code, lino, _exit, terrno);
×
2629
      }
2630
      break;
19,580✔
2631
    default:
93,299✔
2632
      pDst->trigger = pSrc->trigger;
93,299✔
2633
      break;
93,299✔
2634
  }
2635

2636

2637
  if (pSrc->triggerScanPlan) {
204,983✔
2638
    pDst->triggerScanPlan = COPY_STR(pSrc->triggerScanPlan);
200,543✔
2639
    TSDB_CHECK_NULL(pDst->triggerScanPlan, code, lino, _exit, terrno);
200,543✔
2640
  }
2641
  
2642
  if (pSrc->calcScanPlanList) {
204,983✔
2643
    num = taosArrayGetSize(pSrc->calcScanPlanList);
201,548✔
2644
    if (num > 0) {
201,548✔
2645
      pDst->calcScanPlanList = taosArrayInit(num, sizeof(SStreamCalcScan));
201,548✔
2646
      TSDB_CHECK_NULL(pDst->calcScanPlanList, code, lino, _exit, terrno);
201,548✔
2647
    }
2648
    for (int32_t i = 0; i < num; ++i) {
666,457✔
2649
      SStreamCalcScan* sscan = taosArrayGet(pSrc->calcScanPlanList, i);
464,909✔
2650
      SStreamCalcScan  dscan = {.readFromCache = sscan->readFromCache};
464,909✔
2651

2652
      dscan.vgList = taosArrayDup(sscan->vgList, NULL);
464,909✔
2653
      TSDB_CHECK_NULL(dscan.vgList, code, lino, _exit, terrno);
464,909✔
2654

2655
      dscan.scanPlan = COPY_STR(sscan->scanPlan);
464,909✔
2656
      TSDB_CHECK_NULL(dscan.scanPlan, code, lino, _exit, terrno);
464,909✔
2657
      
2658
      TSDB_CHECK_NULL(taosArrayPush(pDst->calcScanPlanList, &dscan), code, lino, _exit, terrno);
929,818✔
2659
    }
2660
  }
2661
  
2662
  if (pSrc->triggerPrevFilter) {
204,983✔
2663
    pDst->triggerPrevFilter = COPY_STR(pSrc->triggerPrevFilter);
7,960✔
2664
    TSDB_CHECK_NULL(pDst->triggerPrevFilter, code, lino, _exit, terrno);
7,960✔
2665
  }
2666
  
2667
  if (pSrc->calcPlan) {
204,983✔
2668
    pDst->calcPlan = COPY_STR(pSrc->calcPlan);
201,548✔
2669
    TSDB_CHECK_NULL(pDst->calcPlan, code, lino, _exit, terrno);
201,548✔
2670
  }
2671
  
2672
  if (pSrc->subTblNameExpr) {
204,983✔
2673
    pDst->subTblNameExpr = COPY_STR(pSrc->subTblNameExpr);
75,531✔
2674
    TSDB_CHECK_NULL(pDst->subTblNameExpr, code, lino, _exit, terrno);
75,531✔
2675
  }
2676
  
2677
  if (pSrc->tagValueExpr) {
204,983✔
2678
    pDst->tagValueExpr = COPY_STR(pSrc->tagValueExpr);
75,531✔
2679
    TSDB_CHECK_NULL(pDst->tagValueExpr, code, lino, _exit, terrno);
75,531✔
2680
  }
2681
  
2682
  if (pSrc->forceOutCols) {
204,983✔
2683
    num = taosArrayGetSize(pSrc->forceOutCols);
3,514✔
2684
    if (num > 0) {
3,514✔
2685
      pDst->forceOutCols = taosArrayInit(num, sizeof(SStreamOutCol));
3,514✔
2686
      TSDB_CHECK_NULL(pDst->forceOutCols, code, lino, _exit, terrno);
3,514✔
2687
    }
2688
    for (int32_t i = 0; i < num; ++i) {
23,348✔
2689
      SStreamOutCol* scol = taosArrayGet(pSrc->forceOutCols, i);
19,834✔
2690
      SStreamOutCol  dcol = {.type = scol->type};
19,834✔
2691

2692
      dcol.expr = COPY_STR(scol->expr);
19,834✔
2693
      TSDB_CHECK_NULL(dcol.expr, code, lino, _exit, terrno);
19,834✔
2694
      
2695
      TSDB_CHECK_NULL(taosArrayPush(pDst->forceOutCols, &dcol), code, lino, _exit, terrno);
39,668✔
2696
    }
2697
  }
2698

2699
  if (pSrc->colCids) {
204,983✔
2700
    pDst->colCids = taosArrayDup(pSrc->colCids, NULL);
3,496✔
2701
    TSDB_CHECK_NULL(pDst->colCids, code, lino, _exit, terrno);
3,496✔
2702
  }
2703

2704
  if (pSrc->tagCids) {
204,983✔
2705
    pDst->tagCids = taosArrayDup(pSrc->tagCids, NULL);
2,780✔
2706
    TSDB_CHECK_NULL(pDst->tagCids, code, lino, _exit, terrno);
2,780✔
2707
  }
2708

2709
  pDst->triggerTblUid = pSrc->triggerTblUid;
204,983✔
2710
  pDst->triggerTblSuid = pSrc->triggerTblSuid;
204,983✔
2711
  pDst->triggerTblType = pSrc->triggerTblType;
204,983✔
2712
  pDst->triggerPrec = pSrc->triggerPrec;
204,983✔
2713
  pDst->deleteReCalc = pSrc->deleteReCalc;
204,983✔
2714
  pDst->deleteOutTbl = pSrc->deleteOutTbl;
204,983✔
2715
  pDst->flags = pSrc->flags;
204,983✔
2716
  
2717
_exit:
204,983✔
2718

2719
  if (code) {
204,983✔
UNCOV
2720
    tFreeSCMCreateStreamReq(pDst);
×
UNCOV
2721
    uError("%s failed at line %d since %s", __FUNCTION__, lino, tstrerror(code));
×
2722
  }
2723

2724
  return code;
204,983✔
2725
}
2726

2727

2728
int32_t tSerializeSMPauseStreamReq(void *buf, int32_t bufLen, const SMPauseStreamReq *pReq) {
6,230✔
2729
  int32_t  code = 0;
6,230✔
2730
  int32_t  lino;
2731
  int32_t  tlen;
2732
  SEncoder encoder = {0};
6,230✔
2733
  tEncoderInit(&encoder, buf, bufLen);
6,230✔
2734
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
6,230✔
2735

2736
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
6,230✔
2737
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
12,460✔
2738
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
12,460✔
2739
  tEndEncode(&encoder);
6,230✔
2740

2741
_exit:
6,230✔
2742
  if (code) {
6,230✔
UNCOV
2743
    tlen = code;
×
2744
  } else {
2745
    tlen = encoder.pos;
6,230✔
2746
  }
2747
  tEncoderClear(&encoder);
6,230✔
2748
  return tlen;
6,230✔
2749
}
2750

2751
int32_t tDeserializeSMPauseStreamReq(void *buf, int32_t bufLen, SMPauseStreamReq *pReq) {
2,944✔
2752
  SDecoder decoder = {0};
2,944✔
2753
  int32_t  code = 0;
2,944✔
2754
  int32_t  lino;
2755

2756
  tDecoderInit(&decoder, buf, bufLen);
2,944✔
2757
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
2,944✔
2758
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
5,888✔
2759
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
5,888✔
2760
  tEndDecode(&decoder);
2,944✔
2761

2762
_exit:
2,944✔
2763
  tDecoderClear(&decoder);
2,944✔
2764
  return code;
2,944✔
2765
}
2766

2767
void tFreeMPauseStreamReq(SMPauseStreamReq *pReq) {
3,115✔
2768
  taosMemoryFreeClear(pReq->name);
3,115✔
2769
}
3,115✔
2770

2771
int32_t tSerializeSMResumeStreamReq(void *buf, int32_t bufLen, const SMResumeStreamReq *pReq) {
5,478✔
2772
  SEncoder encoder = {0};
5,478✔
2773
  int32_t  code = 0;
5,478✔
2774
  int32_t  lino;
2775
  int32_t  tlen;
2776
  tEncoderInit(&encoder, buf, bufLen);
5,478✔
2777
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
5,478✔
2778
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
5,478✔
2779
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
10,956✔
2780
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
10,956✔
2781
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igUntreated));
10,956✔
2782
  tEndEncode(&encoder);
5,478✔
2783

2784
_exit:
5,478✔
2785
  if (code) {
5,478✔
UNCOV
2786
    tlen = code;
×
2787
  } else {
2788
    tlen = encoder.pos;
5,478✔
2789
  }
2790
  tEncoderClear(&encoder);
5,478✔
2791
  return tlen;
5,478✔
2792
}
2793

2794
int32_t tDeserializeSMResumeStreamReq(void *buf, int32_t bufLen, SMResumeStreamReq *pReq) {
2,568✔
2795
  SDecoder decoder = {0};
2,568✔
2796
  int32_t  code = 0;
2,568✔
2797
  int32_t  lino;
2798

2799
  tDecoderInit(&decoder, buf, bufLen);
2,568✔
2800
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
2,568✔
2801
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
5,136✔
2802
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
5,136✔
2803
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igUntreated));
5,136✔
2804
  tEndDecode(&decoder);
2,568✔
2805

2806
_exit:
2,568✔
2807
  tDecoderClear(&decoder);
2,568✔
2808
  return code;
2,568✔
2809
}
2810

2811
void tFreeMResumeStreamReq(SMResumeStreamReq *pReq) {
2,739✔
2812
  taosMemoryFreeClear(pReq->name);
2,739✔
2813
}
2,739✔
2814

2815
int32_t tSerializeSMRecalcStreamReq(void *buf, int32_t bufLen, const SMRecalcStreamReq *pReq) {
24,992✔
2816
  SEncoder encoder = {0};
24,992✔
2817
  int32_t  code = 0;
24,992✔
2818
  int32_t  lino;
2819
  int32_t  tlen;
2820
  tEncoderInit(&encoder, buf, bufLen);
24,992✔
2821
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
24,992✔
2822
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
24,992✔
2823
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
49,984✔
2824
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->calcAll));
49,984✔
2825
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->timeRange.skey));
49,984✔
2826
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->timeRange.ekey));
49,984✔
2827
  tEndEncode(&encoder);
24,992✔
2828

2829
_exit:
24,992✔
2830
  if (code) {
24,992✔
UNCOV
2831
    tlen = code;
×
2832
  } else {
2833
    tlen = encoder.pos;
24,992✔
2834
  }
2835
  tEncoderClear(&encoder);
24,992✔
2836
  return tlen;
24,992✔
2837
}
2838

2839
int32_t tDeserializeSMRecalcStreamReq(void *buf, int32_t bufLen, SMRecalcStreamReq *pReq) {
12,496✔
2840
  SDecoder decoder = {0};
12,496✔
2841
  int32_t  code = 0;
12,496✔
2842
  int32_t  lino;
2843

2844
  tDecoderInit(&decoder, buf, bufLen);
12,496✔
2845
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
12,496✔
2846

2847
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
24,992✔
2848
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->calcAll));
24,992✔
2849
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->timeRange.skey));
24,992✔
2850
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->timeRange.ekey));
24,992✔
2851
  tEndDecode(&decoder);
12,496✔
2852

2853
_exit:
12,496✔
2854
  tDecoderClear(&decoder);
12,496✔
2855
  return code;
12,496✔
2856
}
2857

2858
void tFreeMRecalcStreamReq(SMRecalcStreamReq *pReq) {
24,992✔
2859
  taosMemoryFreeClear(pReq->name);
24,992✔
2860
}
24,992✔
2861

2862
static int32_t tEncodeStreamProgressReq(SEncoder *pEncoder, const SStreamProgressReq *pReq) {
13,442✔
2863
  int32_t code = 0;
13,442✔
2864
  int32_t lino;
2865

2866
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
26,884✔
2867
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->taskId));
26,884✔
2868
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->fetchIdx));
26,884✔
2869

2870
_exit:
13,442✔
2871
  return code;
13,442✔
2872
}
2873

2874
int32_t tSerializeStreamProgressReq(void *buf, int32_t bufLen, const SStreamProgressReq *pReq) {
13,442✔
2875
  SEncoder encoder = {0};
13,442✔
2876
  int32_t  code = 0;
13,442✔
2877
  int32_t  lino;
2878
  int32_t  tlen;
2879
  tEncoderInit(&encoder, buf, bufLen);
13,442✔
2880

2881
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
13,442✔
2882
  TAOS_CHECK_EXIT(tEncodeStreamProgressReq(&encoder, pReq));
13,442✔
2883

2884
  tEndEncode(&encoder);
13,442✔
2885

2886
_exit:
13,442✔
2887
  if (code) {
13,442✔
UNCOV
2888
    tlen = code;
×
2889
  } else {
2890
    tlen = encoder.pos;
13,442✔
2891
  }
2892
  tEncoderClear(&encoder);
13,442✔
2893
  return tlen;
13,442✔
2894
}
2895

2896
static int32_t tDecodeStreamProgressReq(SDecoder *pDecoder, SStreamProgressReq *pReq) {
11,154✔
2897
  int32_t code = 0;
11,154✔
2898
  int32_t lino;
2899

2900
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
22,308✔
2901
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->taskId));
22,308✔
2902
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->fetchIdx));
22,308✔
2903

2904
_exit:
11,154✔
2905
  return code;
11,154✔
2906
}
2907

2908
int32_t tDeserializeStreamProgressReq(void *buf, int32_t bufLen, SStreamProgressReq *pReq) {
11,154✔
2909
  SDecoder decoder = {0};
11,154✔
2910
  int32_t  code = 0;
11,154✔
2911
  int32_t  lino;
2912

2913
  tDecoderInit(&decoder, (char *)buf, bufLen);
11,154✔
2914

2915
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
11,154✔
2916
  TAOS_CHECK_EXIT(tDecodeStreamProgressReq(&decoder, pReq));
11,154✔
2917

2918
  tEndDecode(&decoder);
11,154✔
2919

2920
_exit:
11,154✔
2921
  tDecoderClear(&decoder);
11,154✔
2922
  return code;
11,154✔
2923
}
2924

2925
static int32_t tEncodeStreamProgressRsp(SEncoder *pEncoder, const SStreamProgressRsp *pRsp) {
13,442✔
2926
  int32_t code = 0;
13,442✔
2927
  int32_t lino;
2928

2929
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->streamId));
26,884✔
2930
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pRsp->fillHisFinished));
26,884✔
2931
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->progressDelay));
26,884✔
2932
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->fetchIdx));
26,884✔
2933

2934
_exit:
13,442✔
2935
  return code;
13,442✔
2936
}
2937

2938
int32_t tSerializeStreamProgressRsp(void *buf, int32_t bufLen, const SStreamProgressRsp *pRsp) {
13,442✔
2939
  SEncoder encoder = {0};
13,442✔
2940
  int32_t  code = 0;
13,442✔
2941
  int32_t  lino;
2942
  int32_t  tlen;
2943
  tEncoderInit(&encoder, buf, bufLen);
13,442✔
2944

2945
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
13,442✔
2946
  TAOS_CHECK_EXIT(tEncodeStreamProgressRsp(&encoder, pRsp));
13,442✔
2947

2948
  tEndEncode(&encoder);
13,442✔
2949

2950
_exit:
13,442✔
2951
  if (code) {
13,442✔
UNCOV
2952
    tlen = code;
×
2953
  } else {
2954
    tlen = encoder.pos;
13,442✔
2955
  }
2956
  tEncoderClear(&encoder);
13,442✔
2957
  return tlen;
13,442✔
2958
}
2959

2960
static int32_t tDecodeStreamProgressRsp(SDecoder *pDecoder, SStreamProgressRsp *pRsp) {
6,721✔
2961
  int32_t code = 0;
6,721✔
2962
  int32_t lino;
2963

2964
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->streamId));
13,442✔
2965
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, (int8_t *)&pRsp->fillHisFinished));
13,442✔
2966
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->progressDelay));
13,442✔
2967
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->fetchIdx));
13,442✔
2968

2969
_exit:
6,721✔
2970
  return code;
6,721✔
2971
}
2972

2973
int32_t tDeserializeSStreamProgressRsp(void *buf, int32_t bufLen, SStreamProgressRsp *pRsp) {
6,721✔
2974
  SDecoder decoder = {0};
6,721✔
2975
  int32_t  code = 0;
6,721✔
2976
  int32_t  lino;
2977

2978
  tDecoderInit(&decoder, buf, bufLen);
6,721✔
2979

2980
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
6,721✔
2981
  TAOS_CHECK_EXIT(tDecodeStreamProgressRsp(&decoder, pRsp));
6,721✔
2982

2983
  tEndDecode(&decoder);
6,721✔
2984

2985
_exit:
6,721✔
2986
  tDecoderClear(&decoder);
6,721✔
2987
  return code;
6,721✔
2988
}
2989

2990
int32_t tSerializeSTriggerOrigTableInfoRsp(void* buf, int32_t bufLen, const SSTriggerOrigTableInfoRsp* pRsp){
278,790✔
2991
  SEncoder encoder = {0};
278,790✔
2992
  int32_t  code = TSDB_CODE_SUCCESS;
278,790✔
2993
  int32_t  lino = 0;
278,790✔
2994
  int32_t  tlen = 0;
278,790✔
2995

2996
  tEncoderInit(&encoder, buf, bufLen);
278,790✔
2997
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
278,790✔
2998

2999
  int32_t size = taosArrayGetSize(pRsp->cols);
278,790✔
3000
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
278,790✔
3001
  for (int32_t i = 0; i < size; ++i) {
1,027,328✔
3002
    OTableInfoRsp* oInfo = taosArrayGet(pRsp->cols, i);
748,538✔
3003
    if (oInfo == NULL) {
748,538✔
UNCOV
3004
      uError("col id is NULL at index %d", i);
×
UNCOV
3005
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3006
      goto _exit;
×
3007
    }
3008
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, oInfo->suid));
1,497,076✔
3009
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, oInfo->uid));
1,497,076✔
3010
    TAOS_CHECK_EXIT(tEncodeI16(&encoder, oInfo->cid));
1,497,076✔
3011
  }
3012

3013
  tEndEncode(&encoder);
278,790✔
3014

3015
_exit:
278,790✔
3016
  if (code != TSDB_CODE_SUCCESS) {
278,790✔
UNCOV
3017
    tlen = code;
×
3018
  } else {
3019
    tlen = encoder.pos;
278,790✔
3020
  }
3021
  tEncoderClear(&encoder);
278,790✔
3022
  return tlen;
278,790✔
3023
}
3024

3025
int32_t tDserializeSTriggerOrigTableInfoRsp(void* buf, int32_t bufLen, SSTriggerOrigTableInfoRsp* pRsp){
139,395✔
3026
  SDecoder decoder = {0};
139,395✔
3027
  int32_t  code = TSDB_CODE_SUCCESS;
139,395✔
3028
  int32_t  lino = 0;
139,395✔
3029

3030
  tDecoderInit(&decoder, buf, bufLen);
139,395✔
3031
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
139,395✔
3032

3033
  int32_t size = 0;
139,395✔
3034
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
139,395✔
3035
  pRsp->cols = taosArrayInit(size, sizeof(OTableInfoRsp));
139,395✔
3036
  if (pRsp->cols == NULL) {
139,395✔
UNCOV
3037
    code = terrno;
×
UNCOV
3038
    uError("failed to allocate memory for cids, size: %d, errno: %d", size, code);
×
UNCOV
3039
    goto _exit;
×
3040
  }
3041
  for (int32_t i = 0; i < size; ++i) {
513,664✔
3042
    OTableInfoRsp* oInfo = taosArrayReserve(pRsp->cols, 1);
374,269✔
3043
    if (oInfo == NULL) {
374,269✔
3044
      code = terrno;
×
3045
      uError("failed to reserve memory for OTableInfo, size: %d, errno: %d", size, code);
×
3046
      goto _exit;
×
3047
    }
3048
    TAOS_CHECK_RETURN(tDecodeI64(&decoder, &oInfo->suid));
748,538✔
3049
    TAOS_CHECK_RETURN(tDecodeI64(&decoder, &oInfo->uid));
748,538✔
3050
    TAOS_CHECK_RETURN(tDecodeI16(&decoder, &oInfo->cid));
748,538✔
3051
  }
3052

3053
  tEndDecode(&decoder);
139,395✔
3054

3055
_exit:
139,395✔
3056
  tDecoderClear(&decoder);
139,395✔
3057
  return code;
139,395✔
3058
}
3059

3060
void    tDestroySTriggerOrigTableInfoRsp(SSTriggerOrigTableInfoRsp* pRsp){
25,885,747✔
3061
  taosArrayDestroy(pRsp->cols);
25,885,747✔
3062
}
25,885,870✔
3063

3064
void tDestroySTriggerPullRequest(SSTriggerPullRequestUnion* pReq) {
34,693,597✔
3065
  if (pReq == NULL) return;
34,693,597✔
3066
  if (pReq->base.type == STRIGGER_PULL_WAL_DATA_NEW || pReq->base.type == STRIGGER_PULL_WAL_CALC_DATA_NEW) {
43,289,691✔
3067
    SSTriggerWalDataNewRequest* pRequest = (SSTriggerWalDataNewRequest*)pReq;
8,594,762✔
3068
    taosArrayDestroy(pRequest->versions);
8,594,762✔
3069
    tSimpleHashCleanup(pRequest->ranges);
8,596,094✔
3070
  } else if (pReq->base.type == STRIGGER_PULL_TSDB_DATA) {
26,099,502✔
3071
    SSTriggerTsdbDataRequest* pRequest = (SSTriggerTsdbDataRequest*)pReq;
455,198✔
3072
    if (pRequest->cids != NULL) {
455,198✔
3073
      taosArrayDestroy(pRequest->cids);
455,198✔
3074
      pRequest->cids = NULL;
455,198✔
3075
    }
3076
  } else if (pReq->base.type == STRIGGER_PULL_VTABLE_INFO) {
25,643,499✔
3077
    SSTriggerVirTableInfoRequest* pRequest = (SSTriggerVirTableInfoRequest*)pReq;
78,677✔
3078
    if (pRequest->cids != NULL) {
78,677✔
3079
      taosArrayDestroy(pRequest->cids);
78,677✔
3080
      pRequest->cids = NULL;
78,677✔
3081
    }
3082
    if (pRequest->uids != NULL) {
78,677✔
UNCOV
3083
      taosArrayDestroy(pRequest->uids);
×
UNCOV
3084
      pRequest->uids = NULL;
×
3085
    }
3086
  } else if (pReq->base.type == STRIGGER_PULL_VTABLE_PSEUDO_COL) {
25,563,378✔
3087
    SSTriggerVirTablePseudoColRequest *pRequest = (SSTriggerVirTablePseudoColRequest*)pReq;
895,961✔
3088
    if (pRequest->cids != NULL) {
895,961✔
3089
      taosArrayDestroy(pRequest->cids);
895,961✔
3090
      pRequest->cids = NULL;
895,961✔
3091
    }
3092
  } else if (pReq->base.type == STRIGGER_PULL_OTABLE_INFO) {
24,667,695✔
3093
    SSTriggerOrigTableInfoRequest* pRequest = (SSTriggerOrigTableInfoRequest*)pReq;
139,395✔
3094
    if (pRequest->cols != NULL) {
139,395✔
3095
      taosArrayDestroy(pRequest->cols);
139,395✔
3096
      pRequest->cols = NULL;
139,395✔
3097
    }
3098
  } else if (pReq->base.type == STRIGGER_PULL_SET_TABLE) {
24,528,272✔
3099
    SSTriggerSetTableRequest* pRequest = (SSTriggerSetTableRequest*)pReq;
139,395✔
3100
    tSimpleHashCleanup(pRequest->uidInfoTrigger);
139,395✔
3101
    tSimpleHashCleanup(pRequest->uidInfoCalc);
139,395✔
3102
  }
3103
}
3104

3105
int32_t encodePlainArray(SEncoder *encoder, SArray *pArr) {
3,022,070✔
3106
  int32_t  code = TSDB_CODE_SUCCESS;
3,022,070✔
3107
  int32_t  lino = 0;
3,022,070✔
3108
  int32_t  nEle = taosArrayGetSize(pArr);
3,022,070✔
3109
  uint8_t* buf = (nEle > 0) ? TARRAY_DATA(pArr) : NULL;
3,022,070✔
3110
  int32_t  len = (nEle > 0) ? (nEle * pArr->elemSize) : 0;
3,022,070✔
3111
  TAOS_CHECK_EXIT(tEncodeBinary(encoder, buf, len));
6,044,140✔
3112

3113
_exit:
3,022,070✔
3114
  return code;
3,022,070✔
3115
}
3116

3117
int32_t decodePlainArray(SDecoder* decoder, SArray** ppArr, uint32_t elemSize) {
1,508,513✔
3118
  int32_t  code = TSDB_CODE_SUCCESS;
1,508,513✔
3119
  int32_t  lino = 0;
1,508,513✔
3120
  void*    buf = NULL;
1,508,513✔
3121
  uint64_t len = 0;
1,508,513✔
3122
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(decoder, &buf, &len));
1,508,513✔
3123

3124
  if (len > 0) {
1,508,513✔
3125
    *ppArr = taosArrayInit(0, elemSize);
1,429,836✔
3126
    TSDB_CHECK_NULL(*ppArr, code, lino, _exit, terrno);
1,429,836✔
3127
    TSWAP((*ppArr)->pData, buf);
1,429,836✔
3128
    (*ppArr)->size = (*ppArr)->capacity = len / elemSize;
1,429,836✔
3129
  }
3130

3131
_exit:
1,508,513✔
3132
  if (buf != NULL) {
1,508,513✔
3133
    taosMemoryFree(buf);
1,429,836✔
3134
  }
3135
  return code;
1,508,513✔
3136
}
3137

3138
static int32_t encodeSetTableMapInfo(SEncoder* encoder, SSHashObj* pInfo) {
557,580✔
3139
  int32_t  code = TSDB_CODE_SUCCESS;
557,580✔
3140
  int32_t  lino = 0;
557,580✔
3141
  int32_t size = tSimpleHashGetSize(pInfo);
557,580✔
3142
  TAOS_CHECK_EXIT(tEncodeI32(encoder, size));
557,580✔
3143
  int32_t iter = 0;
557,580✔
3144
  void*   px = tSimpleHashIterate(pInfo, NULL, &iter);
557,580✔
3145
  while (px != NULL) {
1,249,928✔
3146
    int64_t* uid = tSimpleHashGetKey(px, NULL);
692,348✔
3147
    TAOS_CHECK_EXIT(tEncodeI64(encoder, *uid));
1,384,696✔
3148
    TAOS_CHECK_EXIT(tEncodeI64(encoder, *(uid + 1)));
1,384,696✔
3149
    SSHashObj* info = *(SSHashObj**)px;
692,348✔
3150
    int32_t len = tSimpleHashGetSize(info);
692,348✔
3151
    TAOS_CHECK_EXIT(tEncodeI32(encoder, len));
692,348✔
3152
    int32_t iter1 = 0;
692,348✔
3153
    void*   px1 = tSimpleHashIterate(info, NULL, &iter1);
692,097✔
3154
    while (px1 != NULL) {
2,608,655✔
3155
      int16_t* slot = tSimpleHashGetKey(px1, NULL);
1,916,307✔
3156
      int16_t* cid = (int16_t*)px1;
1,916,307✔
3157
      TAOS_CHECK_EXIT(tEncodeI16(encoder, *slot));
3,832,614✔
3158
      TAOS_CHECK_EXIT(tEncodeI16(encoder, *cid));
3,832,865✔
3159

3160
      px1 = tSimpleHashIterate(info, px1, &iter1);
1,916,558✔
3161
    }
3162

3163
    px = tSimpleHashIterate(pInfo, px, &iter);
692,348✔
3164
  }
3165
  
3166
_exit:
557,580✔
3167
  return code;
557,580✔
3168
}
3169

3170
int32_t tSerializeSTriggerPullRequest(void* buf, int32_t bufLen, const SSTriggerPullRequest* pReq) {
69,782,460✔
3171
  SEncoder encoder = {0};
69,782,460✔
3172
  int32_t  code = TSDB_CODE_SUCCESS;
69,783,350✔
3173
  int32_t  lino = 0;
69,783,350✔
3174
  int32_t  tlen = 0;
69,783,350✔
3175

3176
  tEncoderInit(&encoder, buf, bufLen);
69,783,350✔
3177
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
69,784,660✔
3178

3179
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->type));
139,562,270✔
3180
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
139,558,903✔
3181
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->readerTaskId));
139,557,572✔
3182
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
139,560,016✔
3183

3184
  switch (pReq->type) {
69,780,675✔
3185
    case STRIGGER_PULL_SET_TABLE: {
278,790✔
3186
      SSTriggerSetTableRequest* pRequest = (SSTriggerSetTableRequest*)pReq;
278,790✔
3187
      TAOS_CHECK_EXIT(encodeSetTableMapInfo(&encoder, pRequest->uidInfoTrigger));
278,790✔
3188
      TAOS_CHECK_EXIT(encodeSetTableMapInfo(&encoder, pRequest->uidInfoCalc));
278,790✔
3189
      break;
278,790✔
3190
    }
3191
    case STRIGGER_PULL_LAST_TS: {
612,553✔
3192
      break;
612,553✔
3193
    }
3194
    case STRIGGER_PULL_FIRST_TS: {
575,757✔
3195
      SSTriggerFirstTsRequest* pRequest = (SSTriggerFirstTsRequest*)pReq;
575,757✔
3196
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
1,152,233✔
3197
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
1,152,718✔
3198
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
1,152,000✔
3199
      break;
575,758✔
3200
    }
3201
    case STRIGGER_PULL_TSDB_META: {
1,022,082✔
3202
      SSTriggerTsdbMetaRequest* pRequest = (SSTriggerTsdbMetaRequest*)pReq;
1,022,082✔
3203
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
2,043,662✔
3204
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->endTime));
2,043,662✔
3205
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
2,043,913✔
3206
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
2,043,662✔
3207
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
2,043,662✔
3208
      break;
1,021,831✔
3209
    }
UNCOV
3210
    case STRIGGER_PULL_TSDB_META_NEXT: {
×
UNCOV
3211
      break;
×
3212
    }
3213
    case STRIGGER_PULL_TSDB_TS_DATA: {
300,962✔
3214
      SSTriggerTsdbTsDataRequest* pRequest = (SSTriggerTsdbTsDataRequest*)pReq;
300,962✔
3215
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->suid));
601,924✔
3216
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
601,924✔
3217
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
601,924✔
3218
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
601,924✔
3219
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
601,924✔
3220
      break;
300,962✔
3221
    }
3222
    case STRIGGER_PULL_TSDB_TRIGGER_DATA: {
119,422✔
3223
      SSTriggerTsdbTriggerDataRequest* pRequest = (SSTriggerTsdbTriggerDataRequest*)pReq;
119,422✔
3224
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
238,594✔
3225
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
238,594✔
3226
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
239,094✔
3227
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
239,344✔
3228
      break;
119,672✔
3229
    }
3230
    case STRIGGER_PULL_TSDB_TRIGGER_DATA_NEXT: {
119,672✔
3231
      break;
119,672✔
3232
    }
3233
    case STRIGGER_PULL_TSDB_CALC_DATA: {
13,439,466✔
3234
      SSTriggerTsdbCalcDataRequest* pRequest = (SSTriggerTsdbCalcDataRequest*)pReq;
13,439,466✔
3235
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
26,878,932✔
3236
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
26,878,932✔
3237
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
26,878,932✔
3238
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
26,878,682✔
3239
      break;
13,439,216✔
3240
    }
UNCOV
3241
    case STRIGGER_PULL_TSDB_CALC_DATA_NEXT: {
×
UNCOV
3242
      break;
×
3243
    }
3244
    case STRIGGER_PULL_TSDB_DATA: {
913,580✔
3245
      SSTriggerTsdbDataRequest* pRequest = (SSTriggerTsdbDataRequest*)pReq;
913,580✔
3246
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->suid));
1,827,160✔
3247
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
1,827,160✔
3248
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
1,827,160✔
3249
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
1,827,160✔
3250
      TAOS_CHECK_EXIT(encodePlainArray(&encoder, pRequest->cids));
913,580✔
3251
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
1,827,160✔
3252
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
1,827,160✔
3253
      break;
913,580✔
3254
    }
UNCOV
3255
    case STRIGGER_PULL_TSDB_DATA_NEXT: {
×
UNCOV
3256
      break;
×
3257
    }
3258
    case STRIGGER_PULL_WAL_META_NEW: {
24,963,484✔
3259
      SSTriggerWalMetaNewRequest* pRequest = (SSTriggerWalMetaNewRequest*)pReq;
24,963,484✔
3260
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->lastVer));
49,927,027✔
3261
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ctime));
49,927,728✔
3262
      break;
24,964,185✔
3263
    }
3264
    case STRIGGER_PULL_WAL_DATA_NEW:
17,192,204✔
3265
    case STRIGGER_PULL_WAL_CALC_DATA_NEW: {
3266
      SSTriggerWalDataNewRequest* pRequest = (SSTriggerWalDataNewRequest*)pReq;
17,192,204✔
3267
      int32_t                     nVersion = taosArrayGetSize(pRequest->versions);
17,192,204✔
3268
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, nVersion));
17,192,455✔
3269
      for (int32_t i = 0; i < nVersion; i++) {
35,150,830✔
3270
        int64_t ver = *(int64_t*)TARRAY_GET_ELEM(pRequest->versions, i);
17,958,626✔
3271
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, ver));
17,958,375✔
3272
      }
3273
      int32_t nRanges = tSimpleHashGetSize(pRequest->ranges);
17,192,204✔
3274
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, nRanges));
17,191,157✔
3275
      int32_t iter = 0;
17,191,157✔
3276
      void*   px = tSimpleHashIterate(pRequest->ranges, NULL, &iter);
17,191,157✔
3277
      while (px != NULL) {
24,038,353✔
3278
        uint64_t* gid = tSimpleHashGetKey(px, NULL);
6,845,145✔
3279
        TAOS_CHECK_EXIT(tEncodeU64(&encoder, *gid));
13,690,541✔
3280
        int64_t* key = (int64_t*)px;
6,845,396✔
3281
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, key[0]));
13,690,290✔
3282
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, key[1]));
13,690,039✔
3283

3284
        px = tSimpleHashIterate(pRequest->ranges, px, &iter);
6,845,145✔
3285
      }
3286
      break;
17,192,957✔
3287
    }
3288
    case STRIGGER_PULL_WAL_META_DATA_NEW: {
7,389,577✔
3289
      SSTriggerWalMetaDataNewRequest* pRequest = (SSTriggerWalMetaDataNewRequest*)pReq;
7,389,577✔
3290
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->lastVer));
14,777,560✔
3291
      break;
7,387,983✔
3292
    }
3293
    case STRIGGER_PULL_GROUP_COL_VALUE: {
624,486✔
3294
      SSTriggerGroupColValueRequest* pRequest = (SSTriggerGroupColValueRequest*)pReq;
624,486✔
3295
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
1,248,972✔
3296
      break;
624,486✔
3297
    }
3298
    case STRIGGER_PULL_VTABLE_INFO: {
158,284✔
3299
      SSTriggerVirTableInfoRequest* pRequest = (SSTriggerVirTableInfoRequest*)pReq;
158,284✔
3300
      TAOS_CHECK_EXIT(encodePlainArray(&encoder, pRequest->cids));
158,284✔
3301
      TAOS_CHECK_EXIT(encodePlainArray(&encoder, pRequest->uids));
158,284✔
3302
      TAOS_CHECK_EXIT(tEncodeBool(&encoder, pRequest->fetchAllTable));
158,284✔
3303
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
316,568✔
3304
      break;
158,284✔
3305
    }
3306
    case STRIGGER_PULL_VTABLE_PSEUDO_COL: {
1,791,922✔
3307
      SSTriggerVirTablePseudoColRequest* pRequest = (SSTriggerVirTablePseudoColRequest*)pReq;
1,791,922✔
3308
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
3,583,844✔
3309
      TAOS_CHECK_EXIT(encodePlainArray(&encoder, pRequest->cids));
1,791,922✔
3310
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
3,583,844✔
3311
      break;
1,791,922✔
3312
    }
3313
    case STRIGGER_PULL_OTABLE_INFO: {
278,790✔
3314
      SSTriggerOrigTableInfoRequest* pRequest = (SSTriggerOrigTableInfoRequest*)pReq;
278,790✔
3315
      int32_t size = taosArrayGetSize(pRequest->cols);
278,790✔
3316
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
278,790✔
3317
      for (int32_t i = 0; i < size; ++i) {
1,027,328✔
3318
        OTableInfo* oInfo = taosArrayGet(pRequest->cols, i);
748,538✔
3319
        if (oInfo == NULL) {
748,538✔
UNCOV
3320
          uError("col id is NULL at index %d", i);
×
UNCOV
3321
          code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3322
          goto _exit;
×
3323
        }
3324
        TAOS_CHECK_EXIT(tEncodeCStr(&encoder, oInfo->refTableName));
1,497,076✔
3325
        TAOS_CHECK_EXIT(tEncodeCStr(&encoder, oInfo->refColName));
1,497,076✔
3326
      }
3327
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
557,580✔
3328
      break; 
278,790✔
3329
    }
UNCOV
3330
    default: {
×
UNCOV
3331
      uError("unknown pull type %d", pReq->type);
×
UNCOV
3332
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3333
      break;
×
3334
    }
3335
  }
3336

3337
  tEndEncode(&encoder);
69,780,641✔
3338

3339
_exit:
69,774,122✔
3340
  if (code != TSDB_CODE_SUCCESS) {
69,775,824✔
UNCOV
3341
    tlen = code;
×
3342
  } else {
3343
    tlen = encoder.pos;
69,775,824✔
3344
  }
3345
  tEncoderClear(&encoder);
69,775,824✔
3346
  return tlen;
69,778,237✔
3347
}
3348

3349
static void destroyHash(void* data){
346,174✔
3350
  if (data){
346,174✔
3351
    SSHashObj* tmp = *(SSHashObj**)data;
346,174✔
3352
    tSimpleHashCleanup(tmp);
346,174✔
3353
  }
3354
}
346,174✔
3355

3356
static int32_t decodeSetTableMapInfo(SDecoder* decoder, SSHashObj** ppInfo) {
278,790✔
3357
  int32_t  code = TSDB_CODE_SUCCESS;
278,790✔
3358
  int32_t  lino = 0;
278,790✔
3359
  int32_t size = 0;
278,790✔
3360
  TAOS_CHECK_EXIT(tDecodeI32(decoder, &size));
278,790✔
3361
  *ppInfo = tSimpleHashInit(size, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY));
278,790✔
3362
  if (*ppInfo == NULL) {
278,790✔
UNCOV
3363
    TAOS_CHECK_EXIT(terrno);
×
3364
  }
3365
  tSimpleHashSetFreeFp(*ppInfo, destroyHash);
278,790✔
3366
  
3367
  for (int32_t i = 0; i < size; ++i) {
624,964✔
3368
    int64_t id[2] = {0};
346,174✔
3369
    TAOS_CHECK_EXIT(tDecodeI64(decoder, id));
346,174✔
3370
    TAOS_CHECK_EXIT(tDecodeI64(decoder, id+1));
692,348✔
3371
    int32_t len = 0;
346,174✔
3372
    TAOS_CHECK_EXIT(tDecodeI32(decoder, &len));
346,174✔
3373
    SSHashObj* tmp = tSimpleHashInit(len, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT));
346,174✔
3374
    if (tmp == NULL) {
346,174✔
UNCOV
3375
      TAOS_CHECK_EXIT(terrno);
×
3376
    }
3377
    TAOS_CHECK_EXIT(tSimpleHashPut(*ppInfo, id, sizeof(id), &tmp, POINTER_BYTES));
346,174✔
3378

3379
    for (int32_t j = 0; j < len; ++j) {
1,304,453✔
3380
      int16_t slotId = 0;
958,279✔
3381
      int16_t cid = 0;
958,279✔
3382
      TAOS_CHECK_EXIT(tDecodeI16(decoder, &slotId));
958,279✔
3383
      TAOS_CHECK_EXIT(tDecodeI16(decoder, &cid));
958,279✔
3384
      TAOS_CHECK_EXIT(tSimpleHashPut(tmp, &slotId, sizeof(slotId), &cid, sizeof(cid)));
958,279✔
3385
    }
3386
  }
3387
_exit:
278,790✔
3388
  if (code != TSDB_CODE_SUCCESS) {
278,790✔
UNCOV
3389
    tSimpleHashCleanup(*ppInfo);
×
UNCOV
3390
    *ppInfo = NULL;
×
3391
  }
3392
  return code;
278,790✔
3393
}
3394

3395
int32_t tDeserializeSTriggerPullRequest(void* buf, int32_t bufLen, SSTriggerPullRequestUnion* pReq) {
34,695,770✔
3396
  SDecoder decoder = {0};
34,695,770✔
3397
  int32_t  code = TSDB_CODE_SUCCESS;
34,697,087✔
3398
  int32_t  lino = 0;
34,697,087✔
3399

3400
  tDecoderInit(&decoder, buf, bufLen);
34,697,087✔
3401
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
34,696,142✔
3402

3403
  int32_t type = 0;
34,699,059✔
3404
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &type));
34,699,060✔
3405
  SSTriggerPullRequest* pBase = &(pReq->base);
34,699,060✔
3406
  pBase->type = type;
34,695,829✔
3407
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->streamId));
69,397,149✔
3408
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->readerTaskId));
69,395,494✔
3409
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->sessionId));
69,394,637✔
3410

3411
  switch (type) {
34,698,218✔
3412
    case STRIGGER_PULL_SET_TABLE: {
139,395✔
3413
      SSTriggerSetTableRequest* pRequest = &(pReq->setTableReq);
139,395✔
3414
      TAOS_CHECK_EXIT(decodeSetTableMapInfo(&decoder, &pRequest->uidInfoTrigger));
139,395✔
3415
      TAOS_CHECK_EXIT(decodeSetTableMapInfo(&decoder, &pRequest->uidInfoCalc));
139,395✔
3416
      break;
139,395✔
3417
    }
3418
    case STRIGGER_PULL_LAST_TS: {
306,333✔
3419
      break;
306,333✔
3420
    }
3421
    case STRIGGER_PULL_FIRST_TS: {
285,440✔
3422
      SSTriggerFirstTsRequest* pRequest = &(pReq->firstTsReq);
285,440✔
3423
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
570,880✔
3424
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
570,880✔
3425
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
570,630✔
3426
      break;
285,190✔
3427
    }
3428
    case STRIGGER_PULL_TSDB_META: {
510,959✔
3429
      SSTriggerTsdbMetaRequest* pRequest = &(pReq->tsdbMetaReq);
510,959✔
3430
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
1,021,918✔
3431
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->endTime));
1,021,918✔
3432
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
1,021,918✔
3433
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
1,021,918✔
3434
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
1,021,918✔
3435
      break;
510,959✔
3436
    }
UNCOV
3437
    case STRIGGER_PULL_TSDB_META_NEXT: {
×
UNCOV
3438
      break;
×
3439
    }
3440
    case STRIGGER_PULL_TSDB_TS_DATA: {
150,469✔
3441
      SSTriggerTsdbTsDataRequest* pRequest = &(pReq->tsdbTsDataReq);
150,469✔
3442
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->suid));
300,938✔
3443
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
300,938✔
3444
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
300,938✔
3445
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
300,938✔
3446
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
300,938✔
3447
      break;
150,469✔
3448
    }
3449
    case STRIGGER_PULL_TSDB_TRIGGER_DATA: {
59,836✔
3450
      SSTriggerTsdbTriggerDataRequest* pRequest = &(pReq->tsdbTriggerDataReq);
59,836✔
3451
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
119,672✔
3452
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
119,672✔
3453
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
119,672✔
3454
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
119,672✔
3455
      break;
59,836✔
3456
    }
3457
    case STRIGGER_PULL_TSDB_TRIGGER_DATA_NEXT: {
59,836✔
3458
      break;
59,836✔
3459
    }
3460
    case STRIGGER_PULL_TSDB_CALC_DATA: {
6,716,533✔
3461
      SSTriggerTsdbCalcDataRequest* pRequest = &(pReq->tsdbCalcDataReq);
6,716,533✔
3462
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
13,434,434✔
3463
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
13,434,914✔
3464
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
13,434,914✔
3465
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
13,434,914✔
3466
      break;
6,717,457✔
3467
    }
UNCOV
3468
    case STRIGGER_PULL_TSDB_CALC_DATA_NEXT: {
×
UNCOV
3469
      break;
×
3470
    }
3471
    case STRIGGER_PULL_TSDB_DATA: {
455,198✔
3472
      SSTriggerTsdbDataRequest* pRequest = &(pReq->tsdbDataReq);
455,198✔
3473
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->suid));
910,396✔
3474
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
910,396✔
3475
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
910,396✔
3476
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
910,396✔
3477
      TAOS_CHECK_EXIT(decodePlainArray(&decoder, &pRequest->cids, sizeof(col_id_t)));
455,198✔
3478
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
910,396✔
3479
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
910,396✔
3480
      break;
455,198✔
3481
    }
UNCOV
3482
    case STRIGGER_PULL_TSDB_DATA_NEXT: {
×
UNCOV
3483
      break;
×
3484
    }
3485
    case STRIGGER_PULL_WAL_META_NEW: {
12,372,060✔
3486
      SSTriggerWalMetaNewRequest* pRequest = &(pReq->walMetaNewReq);
12,372,060✔
3487
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->lastVer));
24,746,214✔
3488
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ctime));
24,747,619✔
3489
      break;
12,373,716✔
3490
    }
3491
    case STRIGGER_PULL_WAL_DATA_NEW:
8,595,298✔
3492
    case STRIGGER_PULL_WAL_CALC_DATA_NEW: {
3493
      SSTriggerWalDataNewRequest* pRequest = &(pReq->walDataNewReq);
8,595,298✔
3494
      int32_t                     nVersion = 0;
8,595,298✔
3495
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nVersion));
8,595,843✔
3496
      pRequest->versions = taosArrayInit_s(sizeof(int64_t), nVersion);
8,595,843✔
3497
      for (int32_t i = 0; i < nVersion; i++) {
17,564,161✔
3498
        int64_t* pVer = TARRAY_GET_ELEM(pRequest->versions, i);
8,968,067✔
3499
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, pVer));
8,967,817✔
3500
      }
3501
      int32_t nRanges = 0;
8,596,094✔
3502
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nRanges));
8,596,094✔
3503
      pRequest->ranges = tSimpleHashInit(nRanges, taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT));
8,596,094✔
3504
      if (pRequest->ranges == NULL) {
8,594,000✔
UNCOV
3505
        TAOS_CHECK_EXIT(terrno);
×
3506
      }
3507
      for (int32_t i = 0; i < nRanges; i++) {
12,014,573✔
3508
        uint64_t gid = 0;
3,421,118✔
3509
        int64_t pRange[2] = {0};
3,421,118✔
3510
        TAOS_CHECK_EXIT(tDecodeU64(&decoder, &gid));
3,421,118✔
3511
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRange[0]));
3,421,118✔
3512
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRange[1]));
3,421,118✔
3513
        TAOS_CHECK_EXIT(tSimpleHashPut(pRequest->ranges, &gid, sizeof(gid), pRange, sizeof(pRange)));
3,421,118✔
3514
      }
3515
      break;
8,593,455✔
3516
    }
3517
    case STRIGGER_PULL_WAL_META_DATA_NEW: {
3,617,521✔
3518
      SSTriggerWalMetaDataNewRequest* pRequest = &(pReq->walMetaDataNewReq);
3,617,521✔
3519
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->lastVer));
7,237,190✔
3520
      break;
3,618,669✔
3521
    }
3522
    case STRIGGER_PULL_GROUP_COL_VALUE: {
311,939✔
3523
      SSTriggerGroupColValueRequest* pRequest = &(pReq->groupColValueReq);
311,939✔
3524
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
623,878✔
3525
      break;
311,939✔
3526
    }
3527
    case STRIGGER_PULL_VTABLE_INFO: {
78,677✔
3528
      SSTriggerVirTableInfoRequest* pRequest = &(pReq->virTableInfoReq);
78,677✔
3529
      TAOS_CHECK_EXIT(decodePlainArray(&decoder, &pRequest->cids, sizeof(col_id_t)));
78,677✔
3530
      TAOS_CHECK_EXIT(decodePlainArray(&decoder, &pRequest->uids, sizeof(int64_t)));
78,677✔
3531
      TAOS_CHECK_EXIT(tDecodeBool(&decoder, &pRequest->fetchAllTable));
78,677✔
3532
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
157,354✔
3533
      break;
78,677✔
3534
    }
3535
    case STRIGGER_PULL_VTABLE_PSEUDO_COL: {
895,961✔
3536
      SSTriggerVirTablePseudoColRequest* pRequest = &(pReq->virTablePseudoColReq);
895,961✔
3537
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
1,791,922✔
3538
      TAOS_CHECK_EXIT(decodePlainArray(&decoder, &pRequest->cids, sizeof(col_id_t)));
895,961✔
3539
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
1,791,922✔
3540
      break;
895,961✔
3541
    }
3542
    case STRIGGER_PULL_OTABLE_INFO: {
139,395✔
3543
      SSTriggerOrigTableInfoRequest* pRequest = &(pReq->origTableInfoReq);
139,395✔
3544
      int32_t size = 0;
139,395✔
3545
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
139,395✔
3546
      pRequest->cols = taosArrayInit(size, sizeof(OTableInfo));
139,395✔
3547
      if (pRequest->cols == NULL) {
139,395✔
UNCOV
3548
        code = terrno;
×
UNCOV
3549
        uError("failed to allocate memory for cids, size: %d, errno: %d", size, code);
×
UNCOV
3550
        goto _exit;
×
3551
      }
3552
      for (int32_t i = 0; i < size; ++i) {
513,664✔
3553
        OTableInfo* oInfo = taosArrayReserve(pRequest->cols, 1);
374,269✔
3554
        if (oInfo == NULL) {
374,269✔
3555
          code = terrno;
×
3556
          uError("failed to reserve memory for OTableInfo, size: %d, errno: %d", size, code);
×
3557
          goto _exit;
×
3558
        }
3559
        TAOS_CHECK_RETURN(tDecodeCStrTo(&decoder, oInfo->refTableName));
374,269✔
3560
        TAOS_CHECK_RETURN(tDecodeCStrTo(&decoder, oInfo->refColName));
374,269✔
3561
      }
3562
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
278,790✔
3563

3564
      break;
139,395✔
3565
    }
3566
    default: {
3,368✔
3567
      uError("unknown pull type %d", type);
3,368✔
UNCOV
3568
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3569
      break;
×
3570
    }
3571
  }
3572

3573
  tEndDecode(&decoder);
34,697,281✔
3574

3575
_exit:
34,693,933✔
3576
  tDecoderClear(&decoder);
34,695,525✔
3577
  return code;
34,694,190✔
3578
}
3579

3580
static int32_t tSerializeSTriggerCalcParam(SEncoder* pEncoder, SArray* pParams, bool ignoreNotificationInfo, bool full) {
34,423,428✔
3581
  int32_t size = full ? taosArrayGetSize(pParams) : 0;
34,423,428✔
3582
  int32_t code = 0;
34,425,846✔
3583
  int32_t lino = 0;
34,425,846✔
3584
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, size));
34,427,094✔
3585
  for (int32_t i = 0; i < size; ++i) {
2,147,483,647✔
3586
    SSTriggerCalcParam* param = taosArrayGet(pParams, i);
2,147,483,647✔
3587
    if (param == NULL) {
2,147,483,647✔
UNCOV
3588
      TAOS_CHECK_EXIT(terrno);
×
3589
    }
3590
    int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
2,147,483,647✔
3591
    if (pEncoder->data) {
2,147,483,647✔
3592
      TAOS_MEMCPY(pEncoder->data + pEncoder->pos, param, plainFieldSize);
2,147,483,647✔
3593
    }
3594
    pEncoder->pos += plainFieldSize;
2,147,483,647✔
3595

3596
    if (!ignoreNotificationInfo) {
2,147,483,647✔
3597
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, param->notifyType));
860,927,350✔
3598
      uint64_t len = (param->extraNotifyContent != NULL) ? strlen(param->extraNotifyContent) + 1 : 0;
430,463,558✔
3599
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, (uint8_t*)param->extraNotifyContent, len));
922,287,737✔
3600
    }
3601
  }
3602
_exit:
7,569,271✔
3603
  return code;
7,569,271✔
3604
}
3605

3606
void tDestroySSTriggerCalcParam(void* ptr) {
2,147,483,647✔
3607
  SSTriggerCalcParam* pParam = ptr;
2,147,483,647✔
3608
  if (pParam && pParam->extraNotifyContent != NULL) {
2,147,483,647✔
3609
    taosMemoryFreeClear(pParam->extraNotifyContent);
269,055✔
3610
  }
3611
  if (pParam && pParam->resultNotifyContent != NULL) {
2,147,483,647✔
UNCOV
3612
    taosMemoryFreeClear(pParam->resultNotifyContent);
×
3613
  }
3614
  if (pParam && pParam->pExternalWindowData != NULL) {
2,147,483,647✔
3615
    taosArrayDestroyEx(pParam->pExternalWindowData, tDestroySStreamGroupValue);
55,915,208✔
3616
    pParam->pExternalWindowData = NULL;
55,837,907✔
3617
  }
3618
}
2,147,483,647✔
3619

3620
void tDestroySSTriggerGroupCalcInfo(void* ptr) {
152,557✔
3621
  SSTriggerGroupCalcInfo* pCalcInfo = ptr;
152,557✔
3622
  if (pCalcInfo && pCalcInfo->pParams != NULL) {
152,557✔
3623
    taosArrayDestroyEx(pCalcInfo->pParams, tDestroySSTriggerCalcParam);
152,557✔
3624
    pCalcInfo->pParams = NULL;
152,557✔
3625
  }
3626
  if (pCalcInfo && pCalcInfo->pGroupColVals != NULL) {
152,557✔
NEW
3627
    taosArrayDestroyEx(pCalcInfo->pGroupColVals, tDestroySStreamGroupValue);
×
NEW
3628
    pCalcInfo->pGroupColVals = NULL;
×
3629
  }
3630
}
152,557✔
3631

NEW
3632
void tDestroySSTriggerGroupReadInfo(void* ptr) {
×
NEW
3633
  SSTriggerGroupReadInfo* pReadInfo = ptr;
×
NEW
3634
  if (pReadInfo && pReadInfo->pTables) {
×
NEW
3635
    taosArrayDestroy(pReadInfo->pTables);
×
NEW
3636
    pReadInfo->pTables = NULL;
×
3637
  }
NEW
3638
}
×
3639

NEW
3640
void tDestroySSTriggerGroupReadInfoArray(void* ptr) {
×
NEW
3641
  if (ptr != NULL && *(SArray**)ptr != NULL) {
×
NEW
3642
    SArray* pArray = *(SArray**)ptr;
×
NEW
3643
    taosArrayDestroyEx(pArray, tDestroySSTriggerGroupReadInfo);
×
NEW
3644
    *(SArray**)ptr = NULL;
×
3645
  }
UNCOV
3646
}
×
3647

3648
void tDestroySStreamGroupValue(void* ptr) {
77,068,714✔
3649
  SStreamGroupValue* pValue = ptr;
77,068,714✔
3650
  if ((pValue != NULL) && (IS_VAR_DATA_TYPE(pValue->data.type) || pValue->data.type == TSDB_DATA_TYPE_DECIMAL)) {
77,068,714✔
3651
    taosMemoryFreeClear(pValue->data.pData);
16,107,653✔
3652
    pValue->data.nData = 0;
16,154,080✔
3653
  }
3654
}
77,133,337✔
3655

3656
static int32_t tDeserializeSTriggerCalcParam(SDecoder* pDecoder, SArray**ppParams, bool ignoreNotificationInfo) {
17,210,418✔
3657
  int32_t size = 0, code = 0, lino = 0;
17,210,418✔
3658
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &size));
17,211,178✔
3659
  if (size <= 0) {
17,211,178✔
3660
    return code;
5,166,546✔
3661
  }
3662
  
3663
  *ppParams = taosArrayInit(size, sizeof(SSTriggerCalcParam));
12,044,632✔
3664
  if (*ppParams == NULL) {
12,044,375✔
UNCOV
3665
    TAOS_CHECK_EXIT(terrno);
×
3666
  }
3667
  for (int32_t i = 0; i < size; ++i) {
2,147,483,647✔
3668
    SSTriggerCalcParam* param = taosArrayReserve(*ppParams, 1);
2,147,483,647✔
3669
    if (param == NULL) {
2,147,483,647✔
3670
      TAOS_CHECK_EXIT(terrno);
×
3671
    }
3672
    int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
2,147,483,647✔
3673
    TAOS_MEMCPY(param, pDecoder->data + pDecoder->pos, plainFieldSize);
2,147,483,647✔
3674
    pDecoder->pos += plainFieldSize;
2,147,483,647✔
3675

3676
    if (!ignoreNotificationInfo) {
2,147,483,647✔
3677
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &param->notifyType));
430,309,928✔
3678
      uint64_t len = 0;
215,154,964✔
3679
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&param->extraNotifyContent, &len));
430,309,928✔
3680
    }
3681
  }
3682

3683
_exit:
2,853,042✔
3684
  return code;
12,044,072✔
3685
}
3686

3687
static int32_t tSerializeStriggerGroupColVals(SEncoder* pEncoder, SArray* pGroupColVals, int32_t vgId) {
35,050,623✔
3688
  int32_t code = TSDB_CODE_SUCCESS;
35,050,623✔
3689
  int32_t lino = 0;
35,050,623✔
3690

3691
  int32_t size = taosArrayGetSize(pGroupColVals);
35,050,623✔
3692
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, size));
35,050,631✔
3693
  for (int32_t i = 0; i < size; ++i) {
76,730,896✔
3694
    SStreamGroupValue* pValue = taosArrayGet(pGroupColVals, i);
41,680,206✔
3695
    if (pValue == NULL) {
41,680,230✔
UNCOV
3696
      TAOS_CHECK_EXIT(terrno);
×
3697
    }
3698
    TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pValue->isNull));
41,680,230✔
3699
    if (pValue->isNull) {
41,680,234✔
3700
      continue;
16,830✔
3701
    }
3702
    TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pValue->isTbname));
41,662,886✔
3703
    if (pValue->isTbname) {
41,662,993✔
3704
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pValue->uid));
38,486,713✔
3705
      if (vgId != -1) { pValue->vgId = vgId; }
19,243,638✔
3706
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pValue->vgId));
38,487,087✔
3707
    }
3708
    TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pValue->data.type));
83,326,232✔
3709
    if (IS_VAR_DATA_TYPE(pValue->data.type)) {
41,662,865✔
3710
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pValue->data.pData, pValue->data.nData));
60,862,288✔
3711
    } else {
3712
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pValue->data.val));
22,463,611✔
3713
    }
3714
  }
3715

3716
_exit:
35,050,690✔
3717
  return code;
35,050,690✔
3718
}
3719

3720
static int32_t tDeserializeStriggerGroupColVals(SDecoder* pDecoder, SArray** ppGroupColVals) {
17,523,105✔
3721
  int32_t code = TSDB_CODE_SUCCESS;
17,523,105✔
3722
  int32_t lino = 0;
17,523,105✔
3723
  int32_t size = 0;
17,523,105✔
3724

3725
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &size));
17,523,171✔
3726
  taosArrayClearEx(*ppGroupColVals, tDestroySStreamGroupValue);
17,523,171✔
3727
  if (size > 0) {
17,523,248✔
3728
    if (*ppGroupColVals == NULL) {
10,793,748✔
3729
      *ppGroupColVals = taosArrayInit(size, sizeof(SStreamGroupValue));
10,793,748✔
3730
      if (*ppGroupColVals == NULL) {
10,793,748✔
UNCOV
3731
        TAOS_CHECK_EXIT(terrno);
×
3732
      }
3733
    } else {
3734
      TAOS_CHECK_EXIT(taosArrayEnsureCap(*ppGroupColVals, size));
84✔
3735
    }
3736
  }
3737
  for (int32_t i = 0; i < size; ++i) {
38,363,028✔
3738
    SStreamGroupValue* pValue = taosArrayReserve(*ppGroupColVals, 1);
20,839,780✔
3739
    if (pValue == NULL) {
20,839,721✔
UNCOV
3740
      TAOS_CHECK_EXIT(terrno);
×
3741
    }
3742
    TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pValue->isNull));
20,839,721✔
3743
    if (pValue->isNull) {
20,839,748✔
3744
      continue;
8,415✔
3745
    }
3746
    TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pValue->isTbname));
20,831,333✔
3747
    if (pValue->isTbname) {
20,831,735✔
3748
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pValue->uid));
19,241,704✔
3749
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pValue->vgId));
19,241,788✔
3750
    }
3751
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pValue->data.type));
41,663,411✔
3752
    if (IS_VAR_DATA_TYPE(pValue->data.type)) {
36,046,703✔
3753
      uint64_t len = 0;
15,215,111✔
3754
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pValue->data.pData, &len));
30,430,138✔
3755
      pValue->data.nData = len;
15,215,111✔
3756
    } else {
3757
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pValue->data.val));
11,232,760✔
3758
    }
3759
  }
3760
_exit:
17,523,248✔
3761
  return code;
17,523,118✔
3762
}
3763

3764
int32_t tSerializeSStreamGroupInfo(void* buf, int32_t bufLen, const SStreamGroupInfo* gInfo, int32_t vgId) {
623,878✔
3765
  SEncoder encoder = {0};
623,878✔
3766
  int32_t  code = TSDB_CODE_SUCCESS;
623,878✔
3767
  int32_t  lino = 0;
623,878✔
3768
  int32_t  tlen = 0;
623,878✔
3769

3770
  tEncoderInit(&encoder, buf, bufLen);
623,878✔
3771
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
623,878✔
3772

3773
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, gInfo->gInfo, vgId));
623,878✔
3774

3775
  tEndEncode(&encoder);
623,878✔
3776

3777
_exit:
623,878✔
3778
  if (code != TSDB_CODE_SUCCESS) {
623,878✔
UNCOV
3779
    tlen = code;
×
3780
  } else {
3781
    tlen = encoder.pos;
623,878✔
3782
  }
3783
  tEncoderClear(&encoder);
623,878✔
3784
  return tlen;
623,878✔
3785
}
3786

3787
int32_t tDeserializeSStreamGroupInfo(void* buf, int32_t bufLen, SStreamGroupInfo* gInfo) {
312,243✔
3788
  SDecoder decoder = {0};
312,243✔
3789
  int32_t  code = TSDB_CODE_SUCCESS;
312,243✔
3790
  int32_t  lino = 0;
312,243✔
3791
  int32_t  size = 0;
312,243✔
3792

3793
  tDecoderInit(&decoder, buf, bufLen);
312,243✔
3794
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
312,243✔
3795

3796
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &gInfo->gInfo));
312,243✔
3797

3798
  tEndDecode(&decoder);
312,243✔
3799

3800
_exit:
312,243✔
3801
  tDecoderClear(&decoder);
312,243✔
3802
  return code;
312,243✔
3803
}
3804

3805
static int32_t tSerializeSSTriggerGroupCalcInfo(SEncoder* pEncoder, SSTriggerGroupCalcInfo* pInfo) {
22,904✔
3806
  int32_t code = 0;
22,904✔
3807
  int32_t lino = 0;
22,904✔
3808

3809
  TAOS_CHECK_EXIT(tSerializeSTriggerCalcParam(pEncoder, pInfo->pParams, false, true));
22,904✔
3810
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(pEncoder, pInfo->pGroupColVals, -1));
22,904✔
3811
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pInfo->createTable));
45,808✔
3812

3813
_exit:
22,904✔
3814
  return code;
22,904✔
3815
}
3816

NEW
3817
static int32_t tSerializeSSTriggerGroupReadInfo(SEncoder* pEncoder, SSTriggerGroupReadInfo* pInfo) {
×
NEW
3818
  int32_t code = 0;
×
NEW
3819
  int32_t lino = 0;
×
3820

NEW
3821
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->gid));
×
NEW
3822
  int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
×
NEW
3823
  if (pEncoder->data) {
×
NEW
3824
    TAOS_MEMCPY(pEncoder->data + pEncoder->pos, &pInfo->firstParam, plainFieldSize);
×
3825
  }
NEW
3826
  pEncoder->pos += plainFieldSize;
×
NEW
3827
  if (pEncoder->data) {
×
NEW
3828
    TAOS_MEMCPY(pEncoder->data + pEncoder->pos, &pInfo->lastParam, plainFieldSize);
×
3829
  }
NEW
3830
  pEncoder->pos += plainFieldSize;
×
3831

NEW
3832
  int32_t nTables = taosArrayGetSize(pInfo->pTables);
×
NEW
3833
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nTables));
×
NEW
3834
  if (pEncoder->data && nTables > 0) {
×
NEW
3835
    TAOS_MEMCPY(pEncoder->data + pEncoder->pos, pInfo->pTables->pData, nTables * sizeof(int64_t));
×
3836
  }
NEW
3837
  pEncoder->pos += nTables * sizeof(int64_t);
×
3838

NEW
3839
_exit:
×
NEW
3840
  return code;
×
3841
}
3842

3843
int32_t tSerializeSTriggerCalcRequest(void* buf, int32_t bufLen, const SSTriggerCalcRequest* pReq) {
6,336,970✔
3844
  SEncoder encoder = {0};
6,336,970✔
3845
  int32_t  code = TSDB_CODE_SUCCESS;
6,336,970✔
3846
  int32_t  lino = 0;
6,336,970✔
3847
  int32_t  tlen = 0;
6,336,970✔
3848

3849
  tEncoderInit(&encoder, buf, bufLen);
6,336,970✔
3850
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
6,336,970✔
3851

3852
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
12,673,690✔
3853
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->runnerTaskId));
12,673,940✔
3854
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
12,673,940✔
3855
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->triggerType));
12,673,940✔
3856
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->isMultiGroupCalc));
12,673,940✔
3857
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->stbPartByTbname));
12,673,940✔
3858

3859
  if (!pReq->isMultiGroupCalc) {
6,336,970✔
3860
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->gid));
12,673,940✔
3861
    TAOS_CHECK_EXIT(tSerializeSTriggerCalcParam(&encoder, pReq->params, false, true));
6,336,970✔
3862
    TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, pReq->groupColVals, -1));
6,337,000✔
3863
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->createTable));
12,674,000✔
3864
  } else {
NEW
3865
    int32_t nGroups = tSimpleHashGetSize(pReq->pGroupCalcInfos);
×
NEW
3866
    TAOS_CHECK_EXIT(tEncodeI32(&encoder, nGroups));
×
NEW
3867
    int32_t                 iter1 = 0;
×
NEW
3868
    SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashIterate(pReq->pGroupCalcInfos, NULL, &iter1);
×
NEW
3869
    while (pCalcInfo != NULL) {
×
NEW
3870
      int64_t* gid = tSimpleHashGetKey(pCalcInfo, NULL);
×
NEW
3871
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, *gid));
×
NEW
3872
      TAOS_CHECK_EXIT(tSerializeSSTriggerGroupCalcInfo(&encoder, pCalcInfo));
×
NEW
3873
      pCalcInfo = tSimpleHashIterate(pReq->pGroupCalcInfos, pCalcInfo, &iter1);
×
3874
    }
3875

NEW
3876
    int32_t nVnodes = tSimpleHashGetSize(pReq->pGroupReadInfos);
×
NEW
3877
    TAOS_CHECK_EXIT(tEncodeI32(&encoder, nVnodes));
×
NEW
3878
    int32_t iter2 = 0;
×
NEW
3879
    void*   px = tSimpleHashIterate(pReq->pGroupReadInfos, NULL, &iter2);
×
NEW
3880
    while (px != NULL) {
×
NEW
3881
      int32_t* vgId = tSimpleHashGetKey(px, NULL);
×
NEW
3882
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, *vgId));
×
NEW
3883
      SArray* pInfos = *(SArray**)px;
×
NEW
3884
      int32_t nGroups = taosArrayGetSize(pInfos);
×
NEW
3885
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, nGroups));
×
NEW
3886
      for (int32_t i = 0; i < nGroups; ++i) {
×
NEW
3887
        SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfos, i);
×
NEW
3888
        TAOS_CHECK_EXIT(tSerializeSSTriggerGroupReadInfo(&encoder, pReadInfo));
×
3889
      }
NEW
3890
      px = tSimpleHashIterate(pReq->pGroupReadInfos, px, &iter2);
×
3891
    }
3892
  }
3893

3894
  TAOS_CHECK_EXIT(tEncodeBool(&encoder, pReq->isWindowTrigger));
6,337,000✔
3895
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->precision));
12,673,880✔
3896

3897
  tEndEncode(&encoder);
6,336,940✔
3898

3899
_exit:
6,336,940✔
3900
  if (code != TSDB_CODE_SUCCESS) {
6,336,940✔
UNCOV
3901
    tlen = code;
×
3902
  } else {
3903
    tlen = encoder.pos;
6,336,940✔
3904
  }
3905
  tEncoderClear(&encoder);
6,336,940✔
3906
  return tlen;
6,335,950✔
3907
}
3908

3909
static int32_t tDeserializeSSTriggerGroupCalcInfo(SDecoder* pDecoder, SSTriggerGroupCalcInfo* pInfo) {
11,452✔
3910
  int32_t code = 0;
11,452✔
3911
  int32_t lino = 0;
11,452✔
3912

3913
  TAOS_CHECK_EXIT(tDeserializeSTriggerCalcParam(pDecoder, &pInfo->pParams, false));
11,452✔
3914
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(pDecoder, &pInfo->pGroupColVals));
11,452✔
3915
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pInfo->createTable));
22,904✔
3916

3917
_exit:
11,452✔
3918
  return code;
11,452✔
3919
}
3920

NEW
3921
static int32_t tDeserializeSSTriggerGroupReadInfo(SDecoder* pDecoder, SSTriggerGroupReadInfo* pInfo) {
×
NEW
3922
  int32_t code = 0;
×
NEW
3923
  int32_t lino = 0;
×
3924

NEW
3925
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->gid));
×
NEW
3926
  int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
×
NEW
3927
  TAOS_MEMCPY(&pInfo->firstParam, pDecoder->data + pDecoder->pos, plainFieldSize);
×
NEW
3928
  pDecoder->pos += plainFieldSize;
×
NEW
3929
  TAOS_MEMCPY(&pInfo->lastParam, pDecoder->data + pDecoder->pos, plainFieldSize);
×
NEW
3930
  pDecoder->pos += plainFieldSize;
×
3931

NEW
3932
  int32_t nTables = 0;
×
NEW
3933
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nTables));
×
NEW
3934
  if (nTables > 0) {
×
NEW
3935
    pInfo->pTables = taosArrayInit_s(sizeof(int64_t), nTables);
×
NEW
3936
    QUERY_CHECK_NULL(pInfo->pTables, code, lino, _exit, terrno);
×
NEW
3937
    TAOS_MEMCPY(pInfo->pTables->pData, pDecoder->data + pDecoder->pos, nTables * sizeof(int64_t));
×
3938
  }
NEW
3939
  pDecoder->pos += nTables * sizeof(int64_t);
×
3940

NEW
3941
_exit:
×
NEW
3942
  return code;
×
3943
}
3944

3945
int32_t tDeserializeSTriggerCalcRequest(void* buf, int32_t bufLen, SSTriggerCalcRequest* pReq) {
3,167,393✔
3946
  SDecoder decoder = {0};
3,167,393✔
3947
  int32_t  code = TSDB_CODE_SUCCESS;
3,167,393✔
3948
  int32_t  lino = 0;
3,167,393✔
3949

3950
  tDecoderInit(&decoder, buf, bufLen);
3,167,393✔
3951
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
3,167,393✔
3952

3953
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
6,334,595✔
3954
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->runnerTaskId));
6,334,595✔
3955
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
6,334,846✔
3956
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->triggerType));
6,334,846✔
3957
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->isMultiGroupCalc));
6,334,846✔
3958
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->stbPartByTbname));
6,334,846✔
3959

3960
  if (!pReq->isMultiGroupCalc) {
3,167,423✔
3961
    TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->gid));
6,334,846✔
3962
    TAOS_CHECK_EXIT(tDeserializeSTriggerCalcParam(&decoder, &pReq->params, false));
3,167,423✔
3963
    TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &pReq->groupColVals));
3,167,423✔
3964
    TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->createTable));
6,334,846✔
3965
  } else {
NEW
3966
    pReq->pGroupCalcInfos = tSimpleHashInit(256, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT));
×
NEW
3967
    QUERY_CHECK_NULL(pReq->pGroupCalcInfos, code, lino, _exit, terrno);
×
NEW
3968
    tSimpleHashSetFreeFp(pReq->pGroupCalcInfos, tDestroySSTriggerGroupCalcInfo);
×
NEW
3969
    int32_t nGroups = 0;
×
NEW
3970
    TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nGroups));
×
NEW
3971
    for (int32_t i = 0; i < nGroups; i++) {
×
NEW
3972
      int64_t gid = 0;
×
NEW
3973
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &gid));
×
NEW
3974
      SSTriggerGroupCalcInfo info = {0};
×
NEW
3975
      TAOS_CHECK_EXIT(tSimpleHashPut(pReq->pGroupCalcInfos, &gid, sizeof(int64_t), &info, sizeof(info)));
×
NEW
3976
      SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashGet(pReq->pGroupCalcInfos, &gid, sizeof(int64_t));
×
NEW
3977
      QUERY_CHECK_NULL(pCalcInfo, code, lino, _exit, TSDB_CODE_INTERNAL_ERROR);
×
NEW
3978
      TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupCalcInfo(&decoder, pCalcInfo));
×
3979
    }
3980

NEW
3981
    int32_t nVnodes = 0;
×
NEW
3982
    TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nVnodes));
×
NEW
3983
    pReq->pGroupReadInfos = tSimpleHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT));
×
NEW
3984
    QUERY_CHECK_NULL(pReq->pGroupReadInfos, code, lino, _exit, terrno);
×
NEW
3985
    tSimpleHashSetFreeFp(pReq->pGroupReadInfos, tDestroySSTriggerGroupReadInfoArray);
×
NEW
3986
    for (int32_t i = 0; i < nVnodes; i++) {
×
NEW
3987
      int32_t vgId = 0;
×
NEW
3988
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &vgId));
×
NEW
3989
      int32_t nGroups = 0;
×
NEW
3990
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nGroups));
×
NEW
3991
      SArray* pInfos = taosArrayInit_s(sizeof(SSTriggerGroupReadInfo), nGroups);
×
NEW
3992
      QUERY_CHECK_NULL(pInfos, code, lino, _exit, terrno);
×
NEW
3993
      code = tSimpleHashPut(pReq->pGroupReadInfos, &vgId, sizeof(int32_t), &pInfos, POINTER_BYTES);
×
NEW
3994
      if (code != TSDB_CODE_SUCCESS) {
×
NEW
3995
        taosArrayDestroy(pInfos);
×
NEW
3996
        TAOS_CHECK_EXIT(code);
×
3997
      }
NEW
3998
      for (int32_t j = 0; j < nGroups; ++j) {
×
NEW
3999
        SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfos, j);
×
NEW
4000
        TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupReadInfo(&decoder, pReadInfo));
×
4001
      }
4002
    }
4003
  }
4004

4005
  if (!tDecodeIsEnd(&decoder)) {
3,167,423✔
4006
    TAOS_CHECK_EXIT(tDecodeBool(&decoder, &pReq->isWindowTrigger));
3,167,423✔
4007
    TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->precision));
6,334,846✔
4008
  }
4009

4010
  tEndDecode(&decoder);
3,167,423✔
4011

4012
_exit:
3,167,423✔
4013
  tDecoderClear(&decoder);
3,167,423✔
4014
  return code;
3,167,423✔
4015
}
4016

4017
void tDestroySTriggerCalcRequest(SSTriggerCalcRequest* pReq) {
7,567,609✔
4018
  if (pReq != NULL) {
7,567,609✔
4019
    if (pReq->params != NULL) {
7,567,609✔
4020
      taosArrayDestroyEx(pReq->params, tDestroySSTriggerCalcParam);
4,506,675✔
4021
      pReq->params = NULL;
4,506,508✔
4022
    }
4023
    if (pReq->groupColVals != NULL) {
7,567,442✔
4024
      taosArrayDestroyEx(pReq->groupColVals, tDestroySStreamGroupValue);
1,783,799✔
4025
      pReq->groupColVals = NULL;
1,784,050✔
4026
    }
4027
    if (pReq->pGroupCalcInfos != NULL) {
7,567,609✔
NEW
4028
      tSimpleHashCleanup(pReq->pGroupCalcInfos);
×
NEW
4029
      pReq->pGroupCalcInfos = NULL;
×
4030
    }
4031
    if (pReq->pGroupReadInfos != NULL) {
7,567,609✔
NEW
4032
      tSimpleHashCleanup(pReq->pGroupReadInfos);
×
NEW
4033
      pReq->pGroupReadInfos = NULL;
×
4034
    }
4035
    blockDataDestroy(pReq->pOutBlock);
7,567,609✔
4036
    pReq->pOutBlock = NULL;
7,567,369✔
4037
  }
4038
}
7,567,609✔
4039

UNCOV
4040
int32_t tSerializeSTriggerDropTableRequest(void* buf, int32_t bufLen, const SSTriggerDropRequest* pReq) {
×
4041
  SEncoder encoder = {0};
×
4042
  int32_t  code = TSDB_CODE_SUCCESS;
×
UNCOV
4043
  int32_t  lino = 0;
×
UNCOV
4044
  int32_t  tlen = 0;
×
4045

UNCOV
4046
  tEncoderInit(&encoder, buf, bufLen);
×
UNCOV
4047
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
×
4048

UNCOV
4049
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
×
UNCOV
4050
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->runnerTaskId));
×
UNCOV
4051
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
×
UNCOV
4052
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->gid));
×
4053

UNCOV
4054
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, pReq->groupColVals, -1));
×
4055

UNCOV
4056
  tEndEncode(&encoder);
×
4057

UNCOV
4058
_exit:
×
UNCOV
4059
  if (code != TSDB_CODE_SUCCESS) {
×
UNCOV
4060
    tlen = code;
×
4061
  } else {
UNCOV
4062
    tlen = encoder.pos;
×
4063
  }
UNCOV
4064
  tEncoderClear(&encoder);
×
UNCOV
4065
  return tlen;
×
4066
}
4067

4068
int32_t tDeserializeSTriggerDropTableRequest(void* buf, int32_t bufLen, SSTriggerDropRequest* pReq) {
×
4069
  SDecoder decoder = {0};
×
4070
  int32_t  code = TSDB_CODE_SUCCESS;
×
4071
  int32_t  lino = 0;
×
4072

4073
  tDecoderInit(&decoder, buf, bufLen);
×
4074
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
×
4075

UNCOV
4076
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
×
UNCOV
4077
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->runnerTaskId));
×
4078
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
×
4079
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->gid));
×
4080

4081
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &pReq->groupColVals));
×
4082

4083
  tEndDecode(&decoder);
×
4084

4085
_exit:
×
4086
  tDecoderClear(&decoder);
×
4087
  return code;
×
4088
}
4089

4090
void tDestroySSTriggerDropRequest(SSTriggerDropRequest* pReq) {
×
UNCOV
4091
  if (pReq != NULL) {
×
4092
    if (pReq->groupColVals != NULL) {
×
UNCOV
4093
      taosArrayDestroyEx(pReq->groupColVals, tDestroySStreamGroupValue);
×
UNCOV
4094
      pReq->groupColVals = NULL;
×
4095
    }
4096
  }
UNCOV
4097
}
×
4098

4099
int32_t tSerializeSTriggerCtrlRequest(void* buf, int32_t bufLen, const SSTriggerCtrlRequest* pReq) {
40,036,816✔
4100
  SEncoder encoder = {0};
40,036,816✔
4101
  int32_t  code = TSDB_CODE_SUCCESS;
40,036,816✔
4102
  int32_t  lino = 0;
40,036,816✔
4103
  int32_t  tlen = 0;
40,036,816✔
4104

4105
  tEncoderInit(&encoder, buf, bufLen);
40,036,816✔
4106
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
40,036,816✔
4107

4108
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->type));
80,073,632✔
4109
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
80,073,632✔
4110
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->taskId));
80,073,632✔
4111
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
80,073,376✔
4112

4113
  tEndEncode(&encoder);
40,036,560✔
4114

4115
_exit:
40,036,816✔
4116
  if (code != TSDB_CODE_SUCCESS) {
40,036,816✔
UNCOV
4117
    tlen = code;
×
4118
  } else {
4119
    tlen = encoder.pos;
40,036,816✔
4120
  }
4121
  tEncoderClear(&encoder);
40,036,816✔
4122
  return tlen;
40,036,816✔
4123
}
4124

4125
int32_t tDeserializeSTriggerCtrlRequest(void* buf, int32_t bufLen, SSTriggerCtrlRequest* pReq) {
60,029,819✔
4126
  SDecoder decoder = {0};
60,029,819✔
4127
  int32_t  code = TSDB_CODE_SUCCESS;
60,030,714✔
4128
  int32_t  lino = 0;
60,030,714✔
4129

4130
  tDecoderInit(&decoder, buf, bufLen);
60,030,714✔
4131
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
60,025,141✔
4132

4133
  int32_t type = 0;
60,039,908✔
4134
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &type));
60,038,812✔
4135
  pReq->type = type;
60,038,812✔
4136
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
120,081,450✔
4137
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->taskId));
120,084,031✔
4138
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
120,080,750✔
4139

4140
  tEndDecode(&decoder);
60,039,318✔
4141

4142
_exit:
60,033,065✔
4143
  tDecoderClear(&decoder);
60,033,540✔
4144
  return code;
60,030,887✔
4145
}
4146

4147
int32_t tSerializeStRtFuncInfo(SEncoder* pEncoder, const SStreamRuntimeFuncInfo* pInfo, bool needStreamRtInfo, bool needStreamGrpInfo) {
28,078,072✔
4148
  int32_t code = 0, lino = 0;
28,078,072✔
4149
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pInfo->isMultiGroupCalc));
56,156,790✔
4150
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pInfo->stbPartByTbname));
56,157,603✔
4151
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, needStreamRtInfo));
28,078,885✔
4152
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, needStreamGrpInfo));
28,076,728✔
4153
  if (pInfo->isMultiGroupCalc) {
28,079,100✔
4154
    if (needStreamRtInfo) {
13,088✔
4155
      if (needStreamGrpInfo) {
13,088✔
4156
        int32_t nGroups = taosArrayGetSize(pInfo->curGrpRead);
13,088✔
4157
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nGroups));
13,088✔
4158
        int8_t withGrpCalcInfo = 1;
13,088✔
4159
        for (int32_t i = 0; i < nGroups; ++i) {
13,088✔
NEW
4160
          SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfo->curGrpRead, i);
×
NEW
4161
          TAOS_CHECK_EXIT(tSerializeSSTriggerGroupReadInfo(pEncoder, pReadInfo));
×
NEW
4162
          if (0 == i) {
×
NEW
4163
            withGrpCalcInfo = (taosArrayGetSize(pReadInfo->pTables) <= 0);
×
4164
          }
4165
        }
4166
        
4167
        TAOS_CHECK_EXIT(tEncodeI8(pEncoder, withGrpCalcInfo));
26,176✔
4168
        if (withGrpCalcInfo) {
13,088✔
4169
          int32_t nGroups = tSimpleHashGetSize(pInfo->pGroupCalcInfos);
13,088✔
4170
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nGroups));
13,088✔
4171
          int32_t                 iter1 = 0;
13,088✔
4172
          SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashIterate(pInfo->pGroupCalcInfos, NULL, &iter1);
13,088✔
4173
          while (pCalcInfo != NULL) {
35,992✔
4174
            int64_t* gid = tSimpleHashGetKey(pCalcInfo, NULL);
22,904✔
4175
            TAOS_CHECK_EXIT(tEncodeI64(pEncoder, *gid));
45,808✔
4176
            TAOS_CHECK_EXIT(tSerializeSSTriggerGroupCalcInfo(pEncoder, pCalcInfo));
22,904✔
4177
            pCalcInfo = tSimpleHashIterate(pInfo->pGroupCalcInfos, pCalcInfo, &iter1);
22,904✔
4178
          }
4179
        }
4180
      } else {
NEW
4181
        int32_t nGroups = tSimpleHashGetSize(pInfo->pGroupCalcInfos);
×
NEW
4182
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nGroups));
×
NEW
4183
        int32_t                 iter1 = 0;
×
NEW
4184
        SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashIterate(pInfo->pGroupCalcInfos, NULL, &iter1);
×
NEW
4185
        while (pCalcInfo != NULL) {
×
NEW
4186
          int64_t* gid = tSimpleHashGetKey(pCalcInfo, NULL);
×
NEW
4187
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, *gid));
×
NEW
4188
          TAOS_CHECK_EXIT(tSerializeSSTriggerGroupCalcInfo(pEncoder, pCalcInfo));
×
NEW
4189
          pCalcInfo = tSimpleHashIterate(pInfo->pGroupCalcInfos, pCalcInfo, &iter1);
×
4190
        }
4191

NEW
4192
        int32_t nVnodes = tSimpleHashGetSize(pInfo->pGroupReadInfos);
×
NEW
4193
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nVnodes));
×
NEW
4194
        int32_t iter2 = 0;
×
NEW
4195
        void*   px = tSimpleHashIterate(pInfo->pGroupReadInfos, NULL, &iter2);
×
NEW
4196
        while (px != NULL) {
×
NEW
4197
          int32_t* vgId = tSimpleHashGetKey(px, NULL);
×
NEW
4198
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *vgId));
×
NEW
4199
          SArray* pInfos = *(SArray**)px;
×
NEW
4200
          int32_t nGroups = taosArrayGetSize(pInfos);
×
NEW
4201
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, nGroups));
×
NEW
4202
          for (int32_t i = 0; i < nGroups; ++i) {
×
NEW
4203
            SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfos, i);
×
NEW
4204
            TAOS_CHECK_EXIT(tSerializeSSTriggerGroupReadInfo(pEncoder, pReadInfo));
×
4205
          }
NEW
4206
          px = tSimpleHashIterate(pInfo->pGroupReadInfos, px, &iter2);
×
4207
        }
4208
      }
4209
    }
4210
  } else {
4211
    TAOS_CHECK_EXIT(tSerializeSTriggerCalcParam(pEncoder, pInfo->pStreamPesudoFuncVals, true, needStreamRtInfo));
28,066,012✔
4212
    TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(pEncoder, pInfo->pStreamPartColVals, -1));
28,067,219✔
4213
    TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->groupId));
56,133,479✔
4214
  }
4215
  
4216
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->curWindow.skey));
56,158,325✔
4217
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->curWindow.ekey));
56,159,314✔
4218
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pInfo->curIdx));
56,159,672✔
4219
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->sessionId));
56,158,143✔
4220
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pInfo->withExternalWindow));
28,078,249✔
4221
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pInfo->triggerType));
56,158,872✔
4222
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pInfo->isWindowTrigger));
28,080,089✔
4223
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pInfo->precision));
56,158,836✔
4224
_exit:
28,079,303✔
4225
  return code;
28,079,859✔
4226
}
4227

4228
int32_t tDeserializeStRtFuncInfo(SDecoder* pDecoder, SStreamRuntimeFuncInfo* pInfo) {
14,038,847✔
4229
  int32_t code = 0, lino = 0;
14,038,847✔
4230
  int32_t size = 0;
14,038,847✔
4231
  bool needStreamRtInfo = false;
14,038,847✔
4232
  bool needStreamGrpInfo = false;
14,038,338✔
4233
  
4234
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pInfo->isMultiGroupCalc));
28,077,185✔
4235
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pInfo->stbPartByTbname));
28,077,694✔
4236
  TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &needStreamRtInfo));
14,038,847✔
4237
  TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &needStreamGrpInfo));
14,038,588✔
4238
  
4239
  if (pInfo->isMultiGroupCalc) {
14,038,847✔
4240
    if (needStreamRtInfo) {
6,544✔
4241
      if (needStreamGrpInfo) {
6,544✔
4242
        int32_t nGroups = 0;
6,544✔
4243
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nGroups));
6,544✔
4244
        if (nGroups > 0) {
6,544✔
NEW
4245
          pInfo->curGrpRead = taosArrayInit_s(sizeof(SSTriggerGroupReadInfo), nGroups);
×
NEW
4246
          QUERY_CHECK_NULL(pInfo->curGrpRead, code, lino, _exit, terrno);
×
4247
        }
4248
        for (int32_t j = 0; j < nGroups; ++j) {
6,544✔
NEW
4249
          SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfo->curGrpRead, j);
×
NEW
4250
          TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupReadInfo(pDecoder, pReadInfo));
×
4251
        }
4252
        int8_t withGrpCalcInfo = 0;
6,544✔
4253
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &withGrpCalcInfo));
6,544✔
4254
        if (withGrpCalcInfo) {
6,544✔
4255
          int32_t nGroups = 0;
6,544✔
4256
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nGroups));
6,544✔
4257
          pInfo->pGroupCalcInfos = tSimpleHashInit(nGroups, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT));
6,544✔
4258
          QUERY_CHECK_NULL(pInfo->pGroupCalcInfos, code, lino, _exit, terrno);
6,544✔
4259
          tSimpleHashSetFreeFp(pInfo->pGroupCalcInfos, tDestroySSTriggerGroupCalcInfo);
6,544✔
4260

4261
          for (int32_t i = 0; i < nGroups; i++) {
17,996✔
4262
            int64_t gid = 0;
11,452✔
4263
            TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &gid));
11,452✔
4264
            SSTriggerGroupCalcInfo info = {0};
11,452✔
4265
            TAOS_CHECK_EXIT(tSimpleHashPut(pInfo->pGroupCalcInfos, &gid, sizeof(int64_t), &info, sizeof(info)));
11,452✔
4266
            SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashGet(pInfo->pGroupCalcInfos, &gid, sizeof(int64_t));
11,452✔
4267
            QUERY_CHECK_NULL(pCalcInfo, code, lino, _exit, TSDB_CODE_INTERNAL_ERROR);
11,452✔
4268
            TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupCalcInfo(pDecoder, pCalcInfo));
11,452✔
4269
          }
4270
        }
4271
      } else {
NEW
4272
        int32_t nGroups = 0;
×
NEW
4273
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nGroups));
×
NEW
4274
        pInfo->pGroupCalcInfos = tSimpleHashInit(nGroups, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT));
×
NEW
4275
        QUERY_CHECK_NULL(pInfo->pGroupCalcInfos, code, lino, _exit, terrno);
×
NEW
4276
        tSimpleHashSetFreeFp(pInfo->pGroupCalcInfos, tDestroySSTriggerGroupCalcInfo);
×
4277

NEW
4278
        for (int32_t i = 0; i < nGroups; i++) {
×
NEW
4279
          int64_t gid = 0;
×
NEW
4280
          TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &gid));
×
NEW
4281
          SSTriggerGroupCalcInfo info = {0};
×
NEW
4282
          TAOS_CHECK_EXIT(tSimpleHashPut(pInfo->pGroupCalcInfos, &gid, sizeof(int64_t), &info, sizeof(info)));
×
NEW
4283
          SSTriggerGroupCalcInfo* pCalcInfo = tSimpleHashGet(pInfo->pGroupCalcInfos, &gid, sizeof(int64_t));
×
NEW
4284
          QUERY_CHECK_NULL(pCalcInfo, code, lino, _exit, TSDB_CODE_INTERNAL_ERROR);
×
NEW
4285
          TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupCalcInfo(pDecoder, pCalcInfo));
×
4286
        }
4287

NEW
4288
        int32_t nVnodes = 0;
×
NEW
4289
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nVnodes));
×
NEW
4290
        pInfo->pGroupReadInfos = tSimpleHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT));
×
NEW
4291
        QUERY_CHECK_NULL(pInfo->pGroupReadInfos, code, lino, _exit, terrno);
×
NEW
4292
        tSimpleHashSetFreeFp(pInfo->pGroupReadInfos, tDestroySSTriggerGroupReadInfoArray);
×
NEW
4293
        for (int32_t i = 0; i < nVnodes; i++) {
×
NEW
4294
          int32_t vgId = 0;
×
NEW
4295
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgId));
×
NEW
4296
          int32_t nGroups = 0;
×
NEW
4297
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &nGroups));
×
NEW
4298
          SArray* pInfos = taosArrayInit_s(sizeof(SSTriggerGroupReadInfo), nGroups);
×
NEW
4299
          QUERY_CHECK_NULL(pInfos, code, lino, _exit, terrno);
×
NEW
4300
          code = tSimpleHashPut(pInfo->pGroupReadInfos, &vgId, sizeof(int32_t), &pInfos, POINTER_BYTES);
×
NEW
4301
          if (code != TSDB_CODE_SUCCESS) {
×
NEW
4302
            taosArrayDestroy(pInfos);
×
NEW
4303
            TAOS_CHECK_EXIT(code);
×
4304
          }
NEW
4305
          for (int32_t j = 0; j < nGroups; ++j) {
×
NEW
4306
            SSTriggerGroupReadInfo* pReadInfo = TARRAY_GET_ELEM(pInfos, j);
×
NEW
4307
            TAOS_CHECK_EXIT(tDeserializeSSTriggerGroupReadInfo(pDecoder, pReadInfo));
×
4308
          }
4309
        }
4310
      }
4311
    }
4312
  } else {
4313
    TAOS_CHECK_EXIT(tDeserializeSTriggerCalcParam(pDecoder, &pInfo->pStreamPesudoFuncVals, true));
14,032,303✔
4314
    TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(pDecoder, &pInfo->pStreamPartColVals));
14,032,303✔
4315
    TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->groupId));
28,064,273✔
4316
  }
4317
  
4318
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->curWindow.skey));
28,077,664✔
4319
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->curWindow.ekey));
28,077,694✔
4320
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pInfo->curIdx));
28,077,664✔
4321
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->sessionId));
28,077,634✔
4322
  TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pInfo->withExternalWindow));
14,038,817✔
4323
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pInfo->triggerType));
28,077,694✔
4324
  if (!tDecodeIsEnd(pDecoder)) {
14,038,347✔
4325
    TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pInfo->isWindowTrigger));
14,038,317✔
4326
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pInfo->precision));
28,077,299✔
4327
  }
4328
_exit:
14,038,763✔
4329
  return code;
14,038,763✔
4330
}
4331

4332
void tDestroyStRtFuncInfo(SStreamRuntimeFuncInfo* pInfo){
533,138,485✔
4333
  if (pInfo == NULL) return;
533,138,485✔
4334
  if (pInfo->pStreamPesudoFuncVals != NULL) {
23,967,768✔
4335
    taosArrayDestroyEx(pInfo->pStreamPesudoFuncVals, tDestroySSTriggerCalcParam);
8,388,622✔
4336
    pInfo->pStreamPesudoFuncVals = NULL;
8,389,290✔
4337
  }
4338
  if (pInfo->pStreamPartColVals != NULL) {
23,997,202✔
4339
    taosArrayDestroyEx(pInfo->pStreamPartColVals, tDestroySStreamGroupValue);
9,227,216✔
4340
    pInfo->pStreamPartColVals = NULL;
9,226,966✔
4341
  }
4342
  if (pInfo->pGroupCalcInfos != NULL) {
23,996,048✔
4343
    tSimpleHashCleanup(pInfo->pGroupCalcInfos);
77,710✔
4344
    pInfo->pGroupCalcInfos = NULL;
77,710✔
4345
  }
4346
  if (pInfo->pGroupReadInfos != NULL) {
23,996,048✔
NEW
4347
    tSimpleHashCleanup(pInfo->pGroupReadInfos);
×
NEW
4348
    pInfo->pGroupReadInfos = NULL;
×
4349
  }  
4350
  if (pInfo->outNormalTable != NULL) {
23,995,873✔
NEW
4351
    taosMemoryFreeClear(pInfo->outNormalTable);
×
4352
  }
4353
}
4354

4355
int32_t tSerializeSStreamMsgVTableInfo(void* buf, int32_t bufLen, const SStreamMsgVTableInfo* pRsp){
157,354✔
4356
  SEncoder encoder = {0};
157,354✔
4357
  int32_t  code = TSDB_CODE_SUCCESS;
157,354✔
4358
  int32_t  lino = 0;
157,354✔
4359
  int32_t  tlen = 0;
157,354✔
4360

4361
  tEncoderInit(&encoder, buf, bufLen);
157,354✔
4362
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
157,354✔
4363

4364
  int32_t size = taosArrayGetSize(pRsp->infos);
157,354✔
4365
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
157,354✔
4366
  for (int32_t i = 0; i < size; ++i) {
545,950✔
4367
    VTableInfo* info = taosArrayGet(pRsp->infos, i);
388,596✔
4368
    if (info == NULL) {
388,596✔
UNCOV
4369
      TAOS_CHECK_EXIT(terrno);
×
4370
    }
4371
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, info->gId));
777,192✔
4372
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, info->uid));
777,192✔
4373
    TAOS_CHECK_EXIT(tEncodeSColRefWrapper(&encoder, &info->cols));
388,596✔
4374
  }
4375

4376
  tEndEncode(&encoder);
157,354✔
4377

4378
_exit:
157,354✔
4379
  if (code != TSDB_CODE_SUCCESS) {
157,354✔
UNCOV
4380
    tlen = code;
×
4381
  } else {
4382
    tlen = encoder.pos;
157,354✔
4383
  }
4384
  tEncoderClear(&encoder);
157,354✔
4385
  return tlen;
157,354✔
4386
}
4387

4388
int32_t tDeserializeSStreamMsgVTableInfo(void* buf, int32_t bufLen, SStreamMsgVTableInfo *vTableInfo){
78,677✔
4389
  SDecoder decoder = {0};
78,677✔
4390
  int32_t  code = TSDB_CODE_SUCCESS;
78,677✔
4391
  int32_t  lino = 0;
78,677✔
4392
  int32_t  size = 0;
78,677✔
4393

4394
  tDecoderInit(&decoder, buf, bufLen);
78,677✔
4395
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
78,677✔
4396

4397
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
78,677✔
4398
  vTableInfo->infos = taosArrayInit(size, sizeof(VTableInfo));
78,677✔
4399
  if (vTableInfo->infos == NULL) {
78,677✔
UNCOV
4400
    TAOS_CHECK_EXIT(terrno);
×
4401
  }
4402
  for (int32_t i = 0; i < size; ++i) {
272,975✔
4403
    VTableInfo* info = taosArrayReserve(vTableInfo->infos, 1);
194,298✔
4404
    if (info == NULL) {
194,298✔
4405
      TAOS_CHECK_EXIT(terrno);
×
4406
    }
4407
    TAOS_CHECK_EXIT(tDecodeI64(&decoder, &info->gId));
388,596✔
4408
    TAOS_CHECK_EXIT(tDecodeI64(&decoder, &info->uid));
388,596✔
4409
    TAOS_CHECK_EXIT(tDecodeSColRefWrapperEx(&decoder, &info->cols, false));
194,298✔
4410
  }
4411

4412
  tEndDecode(&decoder);
78,677✔
4413

4414
_exit:
78,677✔
4415
  tDecoderClear(&decoder);
78,677✔
4416
  return code;
78,677✔
4417
}
4418

4419

4420
void tDestroyVTableInfo(void *ptr) {
388,596✔
4421
  if (NULL == ptr) {
388,596✔
UNCOV
4422
    return;
×
4423
  }
4424
  VTableInfo* pTable = (VTableInfo*)ptr;
388,596✔
4425
  taosMemoryFree(pTable->cols.pColRef);
388,596✔
4426
}
4427

4428
void tDestroySStreamMsgVTableInfo(SStreamMsgVTableInfo *ptr) {
25,825,403✔
4429
  if (ptr == NULL) return;
25,825,403✔
4430
  taosArrayDestroyEx(ptr->infos, tDestroyVTableInfo);
25,825,403✔
4431
  ptr->infos = NULL;
25,825,403✔
4432
}
4433

4434
int32_t tSerializeSStreamTsResponse(void* buf, int32_t bufLen, const SStreamTsResponse* pRsp) {
1,183,153✔
4435
  SEncoder encoder = {0};
1,183,153✔
4436
  int32_t  code = TSDB_CODE_SUCCESS;
1,183,296✔
4437
  int32_t  lino = 0;
1,183,296✔
4438
  int32_t  tlen = 0;
1,183,296✔
4439

4440
  tEncoderInit(&encoder, buf, bufLen);
1,183,296✔
4441
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1,182,794✔
4442

4443
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRsp->ver));
2,365,948✔
4444
  int32_t size = taosArrayGetSize(pRsp->tsInfo);
1,182,795✔
4445
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
1,182,794✔
4446
  for (int32_t i = 0; i < size; ++i) {
2,820,156✔
4447
    STsInfo* tsInfo = taosArrayGet(pRsp->tsInfo, i);
1,638,346✔
4448
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, tsInfo->gId));
3,276,442✔
4449
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, tsInfo->ts));
3,275,959✔
4450
  }
4451

4452
  tEndEncode(&encoder);
1,181,810✔
4453

4454
_exit:
1,183,403✔
4455
  if (code != TSDB_CODE_SUCCESS) {
1,183,403✔
UNCOV
4456
    tlen = code;
×
4457
  } else {
4458
    tlen = encoder.pos;
1,183,403✔
4459
  }
4460
  tEncoderClear(&encoder);
1,183,403✔
4461
  return tlen;
1,182,076✔
4462
}
4463

4464
int32_t tDeserializeSStreamTsResponse(void* buf, int32_t bufLen, void *pBlock) {
591,941✔
4465
  SDecoder decoder = {0};
591,941✔
4466
  int32_t  code = TSDB_CODE_SUCCESS;
591,941✔
4467
  int32_t  lino = 0;
591,941✔
4468
  SSDataBlock *pResBlock = pBlock;
591,941✔
4469

4470
  tDecoderInit(&decoder, buf, bufLen);
591,941✔
4471
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
591,941✔
4472

4473
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, (int64_t*)&pResBlock->info.id.groupId));
1,183,882✔
4474
  int32_t numOfCols = 2;
591,941✔
4475
  if (pResBlock->pDataBlock == NULL) {
591,941✔
4476
    pResBlock->pDataBlock = taosArrayInit_s(sizeof(SColumnInfoData), numOfCols);
591,941✔
4477
    if (pResBlock->pDataBlock == NULL) {
591,941✔
4478
      TAOS_CHECK_EXIT(terrno);
×
4479
    }
4480
    for (int32_t i = 0; i< numOfCols; ++i) {
1,774,601✔
4481
      SColumnInfoData *pColInfoData = taosArrayGet(pResBlock->pDataBlock, i);
1,183,151✔
4482
      if (pColInfoData == NULL) {
1,183,151✔
UNCOV
4483
        TAOS_CHECK_EXIT(terrno);
×
4484
      }
4485
      pColInfoData->info.type = TSDB_DATA_TYPE_BIGINT;
1,183,151✔
4486
      pColInfoData->info.bytes = sizeof(int64_t);
1,183,151✔
4487
    }
4488
  }
4489
  int32_t numOfRows = 0;
591,450✔
4490
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &numOfRows));
591,690✔
4491
  TAOS_CHECK_EXIT(blockDataEnsureCapacity(pResBlock, numOfRows));
591,690✔
4492
  for (int32_t i = 0; i < numOfRows; ++i) {
1,411,669✔
4493
    for (int32_t j = 0; j < numOfCols; ++j) {
2,458,742✔
4494
      SColumnInfoData *pColInfoData = taosArrayGet(pResBlock->pDataBlock, j);
1,639,014✔
4495
      if (pColInfoData == NULL) {
1,639,265✔
UNCOV
4496
        TAOS_CHECK_EXIT(terrno);
×
4497
      }
4498
      int64_t value = 0;
1,639,265✔
4499
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &value));
1,639,496✔
4500
      colDataSetInt64(pColInfoData, i, &value);
1,639,496✔
4501
    }
4502
  }
4503

4504
  pResBlock->info.dataLoad = 1;
592,172✔
4505
  pResBlock->info.rows = numOfRows;
591,701✔
4506

4507
  tEndDecode(&decoder);
591,701✔
4508

4509
_exit:
591,952✔
4510
  tDecoderClear(&decoder);
591,701✔
4511
  return code;
591,941✔
4512
}
4513

4514
static int32_t encodeData(SEncoder* encoder, void* pBlock, SSHashObj* indexHash) {
2,670,050✔
4515
  int32_t code = TSDB_CODE_SUCCESS;
2,670,050✔
4516
  int32_t lino = 0;
2,670,050✔
4517
  int32_t len = 0;
2,670,050✔
4518
  if (encoder->data == NULL){
2,670,050✔
4519
    len = blockGetEncodeSize(pBlock);
1,334,996✔
4520
  } else {
4521
    len = blockEncode(pBlock, (char*)(encoder->data + encoder->pos), encoder->size - encoder->pos, blockDataGetNumOfCols(pBlock));
1,335,054✔
4522
    if (len < 0) {
1,335,247✔
4523
      TAOS_CHECK_EXIT(terrno);
×
4524
    }
4525
  }
4526
  encoder->pos += len;
2,670,494✔
4527

4528
  if (indexHash == NULL) {
2,670,494✔
4529
    goto _exit;
1,269,084✔
4530
  } 
4531
  
4532
  uint32_t pos = encoder->pos;
1,401,410✔
4533
  encoder->pos += sizeof(uint32_t); // reserve space for tables
1,401,159✔
4534
  int32_t tables = 0;
1,401,159✔
4535
  
4536
  void*   pe = NULL;
1,401,159✔
4537
  int32_t iter = 0;
1,401,159✔
4538
  while ((pe = tSimpleHashIterate(indexHash, pe, &iter)) != NULL) {
3,039,620✔
4539
    SStreamWalDataSlice* pInfo = (SStreamWalDataSlice*)pe;
1,638,461✔
4540
    if (pInfo->gId == -1){
1,638,461✔
UNCOV
4541
      continue;
×
4542
    }
4543
    int64_t uid = *(int64_t*)(tSimpleHashGetKey(pe, NULL));
1,638,461✔
4544
    TAOS_CHECK_EXIT(tEncodeI64(encoder, uid));
1,638,154✔
4545
    TAOS_CHECK_EXIT(tEncodeU64(encoder, pInfo->gId));
3,276,558✔
4546
    TAOS_CHECK_EXIT(tEncodeI32(encoder, pInfo->startRowIdx));
3,276,808✔
4547
    TAOS_CHECK_EXIT(tEncodeI32(encoder, pInfo->numRows));
3,276,865✔
4548
    tables++;
1,638,461✔
4549
  }
4550
  uint32_t tmpPos = encoder->pos;
1,400,910✔
4551
  encoder->pos = pos;
1,401,160✔
4552
  TAOS_CHECK_EXIT(tEncodeI32(encoder, tables));
1,401,410✔
4553
  encoder->pos = tmpPos;
1,401,410✔
4554
_exit:
2,670,494✔
4555
  return code;
2,670,243✔
4556
}
4557
 
4558
static int32_t encodeBlock(SEncoder* encoder, void* block, SSHashObj* indexHash) {
9,543,151✔
4559
  int32_t  code = TSDB_CODE_SUCCESS;
9,543,151✔
4560
  int32_t  lino = 0;
9,543,151✔
4561
  if (block != NULL && ((SSDataBlock*)block)->info.rows > 0) {
9,543,151✔
4562
    TAOS_CHECK_EXIT(tEncodeI8(encoder, 1));
2,670,080✔
4563
    TAOS_CHECK_EXIT(encodeData(encoder, block, indexHash));
2,670,080✔
4564
  } else {
4565
    TAOS_CHECK_EXIT(tEncodeI8(encoder, 0));
6,873,434✔
4566
  }
4567

4568
_exit:
6,873,434✔
4569
  return code;
9,543,677✔
4570
}
4571

4572
int32_t tSerializeSStreamWalDataResponse(void* buf, int32_t bufLen, SSTriggerWalNewRsp* rsp) {
2,385,517✔
4573
  SEncoder encoder = {0};
2,385,517✔
4574
  int32_t  code = TSDB_CODE_SUCCESS;
2,386,240✔
4575
  int32_t  lino = 0;
2,386,240✔
4576
  int32_t  tlen = 0;
2,386,240✔
4577

4578
  tEncoderInit(&encoder, buf, bufLen);
2,386,240✔
4579
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
2,386,240✔
4580

4581
  TAOS_CHECK_EXIT(encodeBlock(&encoder, rsp->dataBlock, rsp->indexHash));
2,386,466✔
4582
  TAOS_CHECK_EXIT(encodeBlock(&encoder, rsp->metaBlock, NULL));
2,386,466✔
4583
  TAOS_CHECK_EXIT(encodeBlock(&encoder, rsp->deleteBlock, NULL));
2,386,216✔
4584
  TAOS_CHECK_EXIT(encodeBlock(&encoder, rsp->tableBlock, NULL));
2,386,273✔
4585

4586
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, rsp->ver));
4,772,081✔
4587
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, rsp->verTime));
4,770,781✔
4588
  tEndEncode(&encoder);
2,385,166✔
4589

4590
_exit:
2,385,865✔
4591
  if (code != TSDB_CODE_SUCCESS) {
2,385,865✔
UNCOV
4592
    tlen = code;
×
4593
  } else {
4594
    tlen = encoder.pos;
2,385,865✔
4595
  }
4596
  tEncoderClear(&encoder);
2,385,865✔
4597
  return tlen;
2,384,732✔
4598
}
4599

4600
static int32_t decodeBlock(SDecoder* decoder, void* pBlock) {
3,580,558✔
4601
  int32_t  code = TSDB_CODE_SUCCESS;
3,580,558✔
4602
  int32_t  lino = 0;
3,580,558✔
4603
  
4604
  int8_t hasData = false;
3,580,558✔
4605
  TAOS_CHECK_EXIT(tDecodeI8(decoder, &hasData));
3,580,809✔
4606
  if (hasData) {
3,580,809✔
4607
    TAOS_CHECK_EXIT(pBlock != NULL ? TSDB_CODE_SUCCESS : TSDB_CODE_INVALID_PARA);
634,764✔
4608
    const char* pEndPos = NULL;
634,764✔
4609
    TAOS_CHECK_EXIT(blockDecode(pBlock, (char*)decoder->data + decoder->pos, &pEndPos));
634,764✔
4610
    decoder->pos = (uint8_t*)pEndPos - decoder->data;
634,513✔
4611
  } else if (pBlock != NULL) {
2,946,045✔
4612
    blockDataEmpty(pBlock);
1,267,524✔
4613
  }
4614

4615
_exit:
3,576,987✔
4616
  return code;
3,580,056✔
4617
}
4618

4619
int32_t tDeserializeSStreamWalDataResponse(void* buf, int32_t bufLen, SSTriggerWalNewRsp* pRsp, SArray* pSlices){
1,193,603✔
4620
  SDecoder     decoder = {0};
1,193,603✔
4621
  int32_t      code = TSDB_CODE_SUCCESS;
1,193,603✔
4622
  int32_t      lino = 0;
1,193,603✔
4623
  SSDataBlock* pBlock = NULL;
1,193,603✔
4624

4625
  tDecoderInit(&decoder, buf, bufLen);
1,193,603✔
4626
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
1,193,603✔
4627

4628
  // decode data block
4629
  int8_t hasData = false;
1,193,603✔
4630
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &hasData));
1,193,603✔
4631
  pBlock = pRsp->dataBlock;
1,193,603✔
4632
  if (hasData) {
1,193,603✔
4633
    TAOS_CHECK_EXIT(pBlock != NULL ? TSDB_CODE_SUCCESS : TSDB_CODE_INVALID_PARA);
700,853✔
4634
    const char* pEndPos = NULL;
700,853✔
4635
    TAOS_CHECK_EXIT(blockDecode(pBlock, (char*)decoder.data + decoder.pos, &pEndPos));
700,853✔
4636
    decoder.pos = (uint8_t*)pEndPos - decoder.data;
700,853✔
4637

4638
    int32_t nSlices = 0;
700,853✔
4639
    TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nSlices));
700,853✔
4640
    TAOS_CHECK_EXIT(taosArrayEnsureCap(pSlices, nSlices));
700,853✔
4641
    taosArrayClear(pSlices);
700,853✔
4642
    int64_t  uid = 0;
700,853✔
4643
    uint64_t gid = 0;
700,853✔
4644
    int32_t  startIdx = 0;
700,853✔
4645
    int32_t  numRows = 0;
700,853✔
4646
    for (int32_t i = 0; i < nSlices; i++) {
1,520,076✔
4647
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &uid));
819,475✔
4648
      TAOS_CHECK_EXIT(tDecodeU64(&decoder, &gid));
819,475✔
4649
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &startIdx));
819,475✔
4650
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &numRows));
819,475✔
4651
      int32_t endIdx = startIdx + numRows;
819,475✔
4652
      int64_t value[3] = {gid, uid, (int64_t)startIdx << 32 | endIdx};
819,475✔
4653
      void*   px = taosArrayPush(pSlices, value);
819,223✔
4654
      if (px == NULL) {
819,223✔
4655
        code = terrno;
×
4656
        goto _exit;
×
4657
      }
4658
    }
4659
  } else if (pBlock != NULL) {
492,750✔
4660
    blockDataEmpty(pBlock);
3,527✔
4661
    taosArrayClear(pSlices);
3,527✔
4662
  }
4663

4664
  TAOS_CHECK_EXIT(decodeBlock(&decoder, pRsp->metaBlock));
1,193,351✔
4665
  TAOS_CHECK_EXIT(decodeBlock(&decoder, pRsp->deleteBlock));
1,193,603✔
4666
  TAOS_CHECK_EXIT(decodeBlock(&decoder, pRsp->tableBlock));
1,193,352✔
4667
  
4668
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRsp->ver));
2,386,954✔
4669
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRsp->verTime));
2,386,954✔
4670

4671
  tEndDecode(&decoder);
1,193,603✔
4672

4673
_exit:
1,193,347✔
4674
  if (code != TSDB_CODE_SUCCESS) {
1,193,347✔
UNCOV
4675
    uError("%s failed at line %d since %s", __func__, lino, tstrerror(code));
×
4676
  }
4677
  tDecoderClear(&decoder);
1,193,347✔
4678
  return code;
1,193,352✔
4679
}
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