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

taosdata / TDengine / #4807

17 Oct 2025 06:47AM UTC coverage: 61.121% (+0.03%) from 61.094%
#4807

push

travis-ci

web-flow
Merge pull request #33289 from taosdata/3.0

enh: Code Optimization (#33283)

155421 of 324369 branches covered (47.91%)

Branch coverage included in aggregate %.

1 of 1 new or added line in 1 file covered. (100.0%)

2727 existing lines in 120 files now uncovered.

207582 of 269535 relevant lines covered (77.01%)

127069383.69 hits per line

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

65.22
/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
typedef struct STaskId {
28
  int64_t streamId;
29
  int64_t taskId;
30
} STaskId;
31

32
typedef enum EWindowType {
33
  WINDOW_TYPE_INTERVAL = 1,
34
  WINDOW_TYPE_SESSION,
35
  WINDOW_TYPE_STATE,
36
  WINDOW_TYPE_EVENT,
37
  WINDOW_TYPE_COUNT,
38
  WINDOW_TYPE_ANOMALY,
39
  WINDOW_TYPE_EXTERNAL,
40
  WINDOW_TYPE_PERIOD
41
} EWindowType;
42

43
typedef struct STaskCkptInfo {
44
  int64_t latestId;          // saved checkpoint id
45
  int64_t latestVer;         // saved checkpoint ver
46
  int64_t latestTime;        // latest checkpoint time
47
  int64_t latestSize;        // latest checkpoint size
48
  int8_t  remoteBackup;      // latest checkpoint backup done
49
  int64_t activeId;          // current active checkpoint id
50
  int32_t activeTransId;     // checkpoint trans id
51
  int8_t  failed;            // denote if the checkpoint is failed or not
52
  int8_t  consensusChkptId;  // required the consensus-checkpointId
53
  int64_t consensusTs;       //
54
} STaskCkptInfo;
55

56
typedef struct STaskStatusEntry {
57
  STaskId       id;
58
  int32_t       status;
59
  int32_t       statusLastDuration;  // to record the last duration of current status
60
  int64_t       stage;
61
  int32_t       nodeId;
62
  SVersionRange verRange;      // start/end version in WAL, only valid for source task
63
  int64_t       processedVer;  // only valid for source task
64
  double        inputQUsed;    // in MiB
65
  double        inputRate;
66
  double        procsThroughput;   // duration between one element put into input queue and being processed.
67
  double        procsTotal;        // duration between one element put into input queue and being processed.
68
  double        outputThroughput;  // the size of dispatched result blocks in bytes
69
  double        outputTotal;       // the size of dispatched result blocks in bytes
70
  double        sinkQuota;         // existed quota size for sink task
71
  double        sinkDataSize;      // sink to dst data size
72
  int64_t       startTime;
73
  int64_t       startCheckpointId;
74
  int64_t       startCheckpointVer;
75
  int64_t       hTaskId;
76
  STaskCkptInfo checkpointInfo;
77
  STaskNotifyEventStat notifyEventStat;
78
} STaskStatusEntry;
79

80
int32_t tEncodeStreamEpInfo(SEncoder* pEncoder, const SStreamUpstreamEpInfo* pInfo) {
×
81
  TAOS_CHECK_RETURN(tEncodeI32(pEncoder, pInfo->taskId));
×
82
  TAOS_CHECK_RETURN(tEncodeI32(pEncoder, pInfo->nodeId));
×
83
  TAOS_CHECK_RETURN(tEncodeI32(pEncoder, pInfo->childId));
×
84
  TAOS_CHECK_RETURN(tEncodeSEpSet(pEncoder, &pInfo->epSet));
×
85
  TAOS_CHECK_RETURN(tEncodeI64(pEncoder, pInfo->stage));
×
86
  return 0;
×
87
}
88

89
int32_t tDecodeStreamEpInfo(SDecoder* pDecoder, SStreamUpstreamEpInfo* pInfo) {
×
90
  TAOS_CHECK_RETURN(tDecodeI32(pDecoder, &pInfo->taskId));
×
91
  TAOS_CHECK_RETURN(tDecodeI32(pDecoder, &pInfo->nodeId));
×
92
  TAOS_CHECK_RETURN(tDecodeI32(pDecoder, &pInfo->childId));
×
93
  TAOS_CHECK_RETURN(tDecodeSEpSet(pDecoder, &pInfo->epSet));
×
94
  TAOS_CHECK_RETURN(tDecodeI64(pDecoder, &pInfo->stage));
×
95
  return 0;
×
96
}
97

98
int32_t tEncodeStreamTaskUpdateMsg(SEncoder* pEncoder, const SStreamTaskNodeUpdateMsg* pMsg) {
×
99
  int32_t code = 0;
×
100
  int32_t lino;
101

102
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
103
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->streamId));
×
104
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->taskId));
×
105

106
  int32_t size = taosArrayGetSize(pMsg->pNodeList);
×
107
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, size));
×
108

109
  for (int32_t i = 0; i < size; ++i) {
×
110
    SNodeUpdateInfo* pInfo = taosArrayGet(pMsg->pNodeList, i);
×
111
    if (pInfo == NULL) {
×
112
      TAOS_CHECK_EXIT(terrno);
×
113
    }
114

115
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pInfo->nodeId));
×
116
    TAOS_CHECK_EXIT(tEncodeSEpSet(pEncoder, &pInfo->prevEp));
×
117
    TAOS_CHECK_EXIT(tEncodeSEpSet(pEncoder, &pInfo->newEp));
×
118
  }
119

120
  // todo this new attribute will be result in being incompatible with previous version
121
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->transId));
×
122

123
  int32_t numOfTasks = taosArrayGetSize(pMsg->pTaskList);
×
124
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, numOfTasks));
×
125

126
  for (int32_t i = 0; i < numOfTasks; ++i) {
×
127
    int32_t* pId = taosArrayGet(pMsg->pTaskList, i);
×
128
    if (pId == NULL) {
×
129
      TAOS_CHECK_EXIT(terrno);
×
130
    }
131
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *(int32_t*)pId));
×
132
  }
133

134
  tEndEncode(pEncoder);
×
135
_exit:
×
136
  if (code) {
×
137
    return code;
×
138
  } else {
139
    return pEncoder->pos;
×
140
  }
141
}
142

143
int32_t tDecodeStreamTaskUpdateMsg(SDecoder* pDecoder, SStreamTaskNodeUpdateMsg* pMsg) {
×
144
  int32_t code = 0;
×
145
  int32_t lino;
146

147
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
148
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->streamId));
×
149
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->taskId));
×
150

151
  int32_t size = 0;
×
152
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &size));
×
153

154
  pMsg->pNodeList = taosArrayInit(size, sizeof(SNodeUpdateInfo));
×
155
  TSDB_CHECK_NULL(pMsg->pNodeList, code, lino, _exit, terrno);
×
156

157
  for (int32_t i = 0; i < size; ++i) {
×
158
    SNodeUpdateInfo info = {0};
×
159
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &info.nodeId));
×
160
    TAOS_CHECK_EXIT(tDecodeSEpSet(pDecoder, &info.prevEp));
×
161
    TAOS_CHECK_EXIT(tDecodeSEpSet(pDecoder, &info.newEp));
×
162

163
    if (taosArrayPush(pMsg->pNodeList, &info) == NULL) {
×
164
      TAOS_CHECK_EXIT(terrno);
×
165
    }
166
  }
167

168
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->transId));
×
169

170
  // number of tasks
171
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &size));
×
172
  pMsg->pTaskList = taosArrayInit(size, sizeof(int32_t));
×
173
  if (pMsg->pTaskList == NULL) {
×
174
    TAOS_CHECK_EXIT(terrno);
×
175
  }
176

177
  for (int32_t i = 0; i < size; ++i) {
×
178
    int32_t id = 0;
×
179
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &id));
×
180
    if (taosArrayPush(pMsg->pTaskList, &id) == NULL) {
×
181
      TAOS_CHECK_EXIT(terrno);
×
182
    }
183
  }
184

185
  tEndDecode(pDecoder);
×
186
_exit:
×
187
  return code;
×
188
}
189

190
void tDestroyNodeUpdateMsg(SStreamTaskNodeUpdateMsg* pMsg) {
×
191
  taosArrayDestroy(pMsg->pNodeList);
×
192
  taosArrayDestroy(pMsg->pTaskList);
×
193
  pMsg->pNodeList = NULL;
×
194
  pMsg->pTaskList = NULL;
×
195
}
×
196

197
int32_t tEncodeStreamTaskCheckReq(SEncoder* pEncoder, const SStreamTaskCheckReq* pReq) {
×
198
  int32_t code = 0;
×
199
  int32_t lino;
200

201
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
202
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->reqId));
×
203
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
204
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->upstreamNodeId));
×
205
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->upstreamTaskId));
×
206
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->downstreamNodeId));
×
207
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->downstreamTaskId));
×
208
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->childId));
×
209
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->stage));
×
210
  tEndEncode(pEncoder);
×
211

212
_exit:
×
213
  if (code) {
×
214
    return code;
×
215
  } else {
216
    return pEncoder->pos;
×
217
  }
218
}
219

220
int32_t tDecodeStreamTaskCheckReq(SDecoder* pDecoder, SStreamTaskCheckReq* pReq) {
×
221
  int32_t code = 0;
×
222
  int32_t lino;
223

224
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
225
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->reqId));
×
226
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
227
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->upstreamNodeId));
×
228
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->upstreamTaskId));
×
229
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->downstreamNodeId));
×
230
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->downstreamTaskId));
×
231
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->childId));
×
232
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->stage));
×
233
  tEndDecode(pDecoder);
×
234

235
_exit:
×
236
  return code;
×
237
}
238

239
int32_t tEncodeStreamTaskCheckRsp(SEncoder* pEncoder, const SStreamTaskCheckRsp* pRsp) {
×
240
  int32_t code = 0;
×
241
  int32_t lino;
242

243
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
244
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->reqId));
×
245
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->streamId));
×
246
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->upstreamNodeId));
×
247
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->upstreamTaskId));
×
248
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->downstreamNodeId));
×
249
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->downstreamTaskId));
×
250
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->childId));
×
251
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->oldStage));
×
252
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pRsp->status));
×
253
  tEndEncode(pEncoder);
×
254

255
_exit:
×
256
  if (code) {
×
257
    return code;
×
258
  } else {
259
    return pEncoder->pos;
×
260
  }
261
}
262

263
int32_t tDecodeStreamTaskCheckRsp(SDecoder* pDecoder, SStreamTaskCheckRsp* pRsp) {
×
264
  int32_t code = 0;
×
265
  int32_t lino;
266

267
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
268
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->reqId));
×
269
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->streamId));
×
270
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->upstreamNodeId));
×
271
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->upstreamTaskId));
×
272
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->downstreamNodeId));
×
273
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->downstreamTaskId));
×
274
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->childId));
×
275
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->oldStage));
×
276
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pRsp->status));
×
277
  tEndDecode(pDecoder);
×
278

279
_exit:
×
280
  return code;
×
281
}
282

283
int32_t tEncodeStreamDispatchReq(SEncoder* pEncoder, const SStreamDispatchReq* pReq) {
×
284
  int32_t code = 0;
×
285
  int32_t lino;
286

287
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
288
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->stage));
×
289
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->msgId));
×
290
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->srcVgId));
×
291
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->type));
×
292
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
293
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->taskId));
×
294
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->type));
×
295
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->upstreamTaskId));
×
296
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->upstreamChildId));
×
297
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->upstreamNodeId));
×
298
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->upstreamRelTaskId));
×
299
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->blockNum));
×
300
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->totalLen));
×
301

302
  if (taosArrayGetSize(pReq->data) != pReq->blockNum || taosArrayGetSize(pReq->dataLen) != pReq->blockNum) {
×
303
    uError("invalid dispatch req msg");
×
304
    TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
×
305
  }
306

307
  for (int32_t i = 0; i < pReq->blockNum; i++) {
×
308
    int32_t* pLen = taosArrayGet(pReq->dataLen, i);
×
309
    void*    data = taosArrayGetP(pReq->data, i);
×
310
    if (data == NULL || pLen == NULL) {
×
311
      TAOS_CHECK_EXIT(terrno);
×
312
    }
313

314
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *pLen));
×
315
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, data, *pLen));
×
316
  }
317
  tEndEncode(pEncoder);
×
318
_exit:
×
319
  if (code) {
×
320
    return code;
×
321
  } else {
322
    return pEncoder->pos;
×
323
  }
324
}
325

326
int32_t tDecodeStreamDispatchReq(SDecoder* pDecoder, SStreamDispatchReq* pReq) {
×
327
  int32_t code = 0;
×
328
  int32_t lino;
329

330
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
331
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->stage));
×
332
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->msgId));
×
333
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->srcVgId));
×
334
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->type));
×
335
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
336
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->taskId));
×
337
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->type));
×
338
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->upstreamTaskId));
×
339
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->upstreamChildId));
×
340
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->upstreamNodeId));
×
341
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->upstreamRelTaskId));
×
342
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->blockNum));
×
343
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->totalLen));
×
344

345
  if ((pReq->data = taosArrayInit(pReq->blockNum, sizeof(void*))) == NULL) {
×
346
    TAOS_CHECK_EXIT(terrno);
×
347
  }
348
  if ((pReq->dataLen = taosArrayInit(pReq->blockNum, sizeof(int32_t))) == NULL) {
×
349
    TAOS_CHECK_EXIT(terrno);
×
350
  }
351
  for (int32_t i = 0; i < pReq->blockNum; i++) {
×
352
    int32_t  len1;
×
353
    uint64_t len2;
×
354
    void*    data;
×
355
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &len1));
×
356
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, &data, &len2));
×
357

358
    if (len1 != len2) {
×
359
      TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
×
360
    }
361

362
    if (taosArrayPush(pReq->dataLen, &len1) == NULL) {
×
363
      TAOS_CHECK_EXIT(terrno);
×
364
    }
365

366
    if (taosArrayPush(pReq->data, &data) == NULL) {
×
367
      TAOS_CHECK_EXIT(terrno);
×
368
    }
369
  }
370

371
  tEndDecode(pDecoder);
×
372
_exit:
×
373
  return code;
×
374
}
375

376
void tCleanupStreamDispatchReq(SStreamDispatchReq* pReq) {
×
377
  taosArrayDestroyP(pReq->data, NULL);
×
378
  taosArrayDestroy(pReq->dataLen);
×
379
}
×
380

381
int32_t tEncodeStreamRetrieveReq(SEncoder* pEncoder, const SStreamRetrieveReq* pReq) {
×
382
  int32_t code = 0;
×
383
  int32_t lino;
384

385
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
386
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
387
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->reqId));
×
388
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->dstNodeId));
×
389
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->dstTaskId));
×
390
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->srcNodeId));
×
391
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->srcTaskId));
×
392
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, (const uint8_t*)pReq->pRetrieve, pReq->retrieveLen));
×
393
  tEndEncode(pEncoder);
×
394

395
_exit:
×
396
  if (code) {
×
397
    return code;
×
398
  } else {
399
    return pEncoder->pos;
×
400
  }
401
}
402

403
int32_t tDecodeStreamRetrieveReq(SDecoder* pDecoder, SStreamRetrieveReq* pReq) {
×
404
  int32_t code = 0;
×
405
  int32_t lino;
406

407
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
408
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
409
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->reqId));
×
410
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->dstNodeId));
×
411
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->dstTaskId));
×
412
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->srcNodeId));
×
413
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->srcTaskId));
×
414
  uint64_t len = 0;
×
415
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->pRetrieve, &len));
×
416
  pReq->retrieveLen = (int32_t)len;
×
417
  tEndDecode(pDecoder);
×
418

419
_exit:
×
420
  return code;
×
421
}
422

423
void tCleanupStreamRetrieveReq(SStreamRetrieveReq* pReq) { taosMemoryFree(pReq->pRetrieve); }
×
424

425

426
int32_t tEncodeSStreamMgmtReq(SEncoder* pEncoder, const SStreamMgmtReq* pReq) {
83,710✔
427
  int32_t code = 0;
83,710✔
428
  int32_t lino = 0;
83,710✔
429
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->reqId));
167,420!
430
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->type));
167,420!
431
  switch (pReq->type) {
83,710!
432
    case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER: {
66,142✔
433
      if (pReq->cont.pReqs) {
66,142!
434
        int32_t num = taosArrayGetSize(pReq->cont.pReqs);
66,142!
435
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, num));
66,142!
436
        for (int32_t i = 0; i < num; ++i) {
190,984✔
437
          SStreamDbTableName* pName = taosArrayGet(pReq->cont.pReqs, i);
124,842✔
438
          TAOS_CHECK_EXIT(tEncodeCStrWithLen(pEncoder, pName->dbFName, strlen(pName->dbFName) + 1));
249,684!
439
          TAOS_CHECK_EXIT(tEncodeCStrWithLen(pEncoder, pName->tbName, strlen(pName->tbName) + 1));
249,684!
440
        }
441
      } else {
442
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
×
443
      }
444
      break;
66,142✔
445
    }
446
    case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER: {
17,568✔
447
      if (pReq->cont.pReqs) {
17,568!
448
        int32_t num = taosArrayGetSize(pReq->cont.pReqs);
17,568!
449
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, num));
17,568!
450
        for (int32_t i = 0; i < num; ++i) {
35,136✔
451
          SStreamOReaderDeployReq* pDeploy = taosArrayGet(pReq->cont.pReqs, i);
17,568✔
452
          int32_t vgIdNum = taosArrayGetSize(pDeploy->vgIds);
17,568✔
453
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pDeploy->execId));
35,136!
454
          TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pDeploy->uid));
35,136!
455
          TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgIdNum));
17,568!
456
          for (int32_t n = 0; n < vgIdNum; ++n) {
38,430✔
457
            TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *(int32_t*)taosArrayGet(pDeploy->vgIds, n)));
41,724!
458
          }
459
        }
460
      } else {
461
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
×
462
      }
463
      break;
17,568✔
464
    }
465
    default:
×
466
      code = TSDB_CODE_STREAM_INVALID_TASK_TYPE;
×
467
      break;
×
468
  }
469

470
_exit:
83,710✔
471

472
  return code;
83,710✔
473
}
474

475
void tFreeRunnerOReaderDeployReq(void* param) {
26,352✔
476
  if (NULL == param || NULL == *(void**)param) {
26,352!
477
    return;
9,882✔
478
  }
479

480
  SStreamOReaderDeployReq* pReq = (SStreamOReaderDeployReq*)param;
16,470✔
481
  taosArrayDestroy(pReq->vgIds);
16,470✔
482
}
483

484
void tFreeSStreamMgmtReq(SStreamMgmtReq* pReq) {
167,420✔
485
  if (NULL == pReq) {
167,420✔
486
    return;
41,855✔
487
  }
488

489
  switch (pReq->type) {
125,565!
490
    case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER:
99,213✔
491
      taosArrayDestroy(pReq->cont.pReqs);
99,213✔
492
      break;
99,213✔
493
    case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER:
26,352✔
494
      taosArrayDestroyEx(pReq->cont.pReqs, tFreeRunnerOReaderDeployReq);
26,352✔
495
      break;
26,352✔
496
    default:
×
497
      break;
×
498
  }
499
}
500

501

502
int32_t tCloneSStreamMgmtReq(SStreamMgmtReq* pSrc, SStreamMgmtReq** ppDst) {
41,855✔
503
  *ppDst = NULL;
41,855✔
504
  
505
  if (NULL == pSrc) {
41,855!
506
    return TSDB_CODE_SUCCESS;
×
507
  }
508

509
  int32_t code = 0, lino = 0;
41,855✔
510
  *ppDst = taosMemoryCalloc(1, sizeof(SStreamMgmtReq));
41,855!
511
  TSDB_CHECK_NULL(*ppDst, code, lino, _exit, terrno);
41,855!
512

513
  memcpy(*ppDst, pSrc, sizeof(*pSrc));
41,855!
514
  if (pSrc->cont.pReqs) {
41,855!
515
    switch (pSrc->type) {
41,855!
516
      case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER:
33,071✔
517
        (*ppDst)->cont.pReqs = taosArrayDup(pSrc->cont.pReqs, NULL);
33,071✔
518
        TSDB_CHECK_NULL((*ppDst)->cont.pReqs, code, lino, _exit, terrno);
33,071!
519
        break;
33,071✔
520
      case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER: {
8,784✔
521
        int32_t reqNum = taosArrayGetSize(pSrc->cont.pReqs);
8,784✔
522
        (*ppDst)->cont.pReqs = taosArrayInit_s(sizeof(SStreamOReaderDeployReq), reqNum);
8,784✔
523
        TSDB_CHECK_NULL((*ppDst)->cont.pReqs, code, lino, _exit, terrno);
8,784!
524
        for (int32_t i = 0; i < reqNum; ++i) {
17,568✔
525
          SStreamOReaderDeployReq* pNew = taosArrayGet((*ppDst)->cont.pReqs, i);
8,784✔
526
          SStreamOReaderDeployReq* pReq = taosArrayGet(pSrc->cont.pReqs, i);
8,784✔
527
          pNew->vgIds = taosArrayDup(pReq->vgIds, NULL);
8,784✔
528
          TSDB_CHECK_NULL(pNew->vgIds, code, lino, _exit, terrno);
8,784!
529
          pNew->execId = pReq->execId;
8,784✔
530
          pNew->uid = pReq->uid;
8,784✔
531
        }
532
        break;
8,784✔
533
      }  
534
      default:
×
535
        break;
×
536
    }
537
  }
538
  
539
_exit:
×
540

541
  if (code) {
41,855!
542
    tFreeSStreamMgmtReq(*ppDst);
×
543
    taosMemoryFreeClear(*ppDst);
×
544
    uError("%s failed at line %d since %s", __FUNCTION__, lino, tstrerror(code));
×
545
  }
546
  
547
  return code;
41,855✔
548
}
549

550

551
int32_t tDecodeSStreamMgmtReq(SDecoder* pDecoder, SStreamMgmtReq* pReq) {
41,855✔
552
  int32_t code = 0;
41,855✔
553
  int32_t lino = 0;
41,855✔
554

555
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->reqId));
83,710!
556
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t*)&pReq->type));
83,710!
557
  switch (pReq->type) {
41,855!
558
    case STREAM_MGMT_REQ_TRIGGER_ORIGTBL_READER: {
33,071✔
559
      int32_t num = 0;
33,071✔
560
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &num));
33,071!
561
      if (num > 0) {
33,071!
562
        pReq->cont.pReqs = taosArrayInit(num, sizeof(SStreamDbTableName));
33,071✔
563
        TSDB_CHECK_NULL(pReq->cont.pReqs, code, lino, _exit, terrno);
33,071!
564
        for (int32_t i = 0; i < num; ++i) {
95,492✔
565
          SStreamDbTableName* p = taosArrayReserve(pReq->cont.pReqs, 1);
62,421✔
566
          TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, p->dbFName));
62,421!
567
          TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, p->tbName));
62,421!
568
        }
569
      }
570
      break;
33,071✔
571
    }
572
    case STREAM_MGMT_REQ_RUNNER_ORIGTBL_READER: {
8,784✔
573
      int32_t num = 0, vgIdNum = 0;
8,784✔
574
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &num));
8,784!
575
      if (num > 0) {
8,784!
576
        pReq->cont.pReqs = taosArrayInit_s(sizeof(SStreamOReaderDeployReq), num);
8,784✔
577
        TSDB_CHECK_NULL(pReq->cont.pReqs, code, lino, _exit, terrno);
8,784!
578
        for (int32_t i = 0; i < num; ++i) {
17,568✔
579
          SStreamOReaderDeployReq* p = taosArrayGet(pReq->cont.pReqs, i);
8,784✔
580
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &p->execId));
17,568!
581
          TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &p->uid));
17,568!
582
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgIdNum));
8,784!
583
          if (vgIdNum > 0) {
8,784!
584
            p->vgIds = taosArrayInit_s(sizeof(int32_t), vgIdNum);
8,784✔
585
            TSDB_CHECK_NULL(p->vgIds, code, lino, _exit, terrno);
8,784!
586
          }
587
          for (int32_t n = 0; n < vgIdNum; ++n) {
19,215✔
588
            int32_t* vgId = taosArrayGet(p->vgIds, n);
10,431✔
589
            TAOS_CHECK_EXIT(tDecodeI32(pDecoder, vgId));
10,431!
590
          }
591
        }
592
      }
593
      break;
8,784✔
594
    }
595
    default:
×
596
      code = TSDB_CODE_STREAM_INVALID_TASK_TYPE;
×
597
      break;
×
598
  }
599

600
_exit:
41,855✔
601

602
  return code;  
41,855✔
603
}
604

605
int32_t tEncodeStreamTask(SEncoder* pEncoder, const SStreamTask* pTask) {
43,287,544✔
606
  int32_t code = 0;
43,287,544✔
607
  int32_t lino;
608

609
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->type));
86,575,088!
610
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->streamId));
86,575,088!
611
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->taskId));
86,575,088!
612

613
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->flags));
86,575,088!
614
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pTask->seriousId));
86,575,088!
615
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->deployId));
86,575,088!
616
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->nodeId));
86,575,088!
617
  // SKIP SESSIONID
618
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->taskIdx));
86,575,088!
619
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->status));
86,575,088!
620
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->detailStatus));
86,575,088!
621
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pTask->errorCode));
86,575,088!
622
  if (pTask->pMgmtReq) {
43,287,544✔
623
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 1));
83,710!
624
    TAOS_CHECK_EXIT(tEncodeSStreamMgmtReq(pEncoder, pTask->pMgmtReq));
83,710!
625
  } else {
626
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, 0));
43,203,834!
627
  }
628

629
_exit:
43,203,834✔
630

631
  return code;
43,287,544✔
632
}
633

634

635
int32_t tDecodeStreamTask(SDecoder* pDecoder, SStreamTask* pTask) {
20,441,965✔
636
  int32_t code = 0;
20,441,965✔
637
  int32_t lino;
638

639
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t*)&pTask->type));
40,883,930!
640
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pTask->streamId));
40,883,930!
641
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pTask->taskId));
40,883,930!
642
  
643
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pTask->flags));
40,883,930!
644
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pTask->seriousId));
40,883,930!
645
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->deployId));
40,883,930!
646
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->nodeId));
40,883,930!
647
  // SKIP SESSIONID
648
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->taskIdx));
40,883,930!
649
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, (int32_t*)&pTask->status));
40,883,930!
650
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->detailStatus));
40,883,930!
651
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pTask->errorCode));
40,883,930!
652
  int32_t req = 0;
20,441,965✔
653
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &req));
20,441,965!
654
  if (req) {
20,441,965✔
655
    pTask->pMgmtReq = taosMemoryCalloc(1, sizeof(SStreamMgmtReq));
41,855!
656
    TSDB_CHECK_NULL(pTask->pMgmtReq, code, lino, _exit, terrno);
41,855!
657
    TAOS_CHECK_EXIT(tDecodeSStreamMgmtReq(pDecoder, pTask->pMgmtReq));
41,855!
658
  }
659

660
_exit:
20,441,965✔
661

662
  return code;
20,441,965✔
663
}
664

665
int32_t tEncodeSSTriggerRecalcProgress(SEncoder* pEncoder, const SSTriggerRecalcProgress* pProgress) {
×
666
  int32_t code = 0;
×
667
  int32_t lino;
668

669
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pProgress->recalcId));
×
670
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pProgress->progress));
×
671
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pProgress->start));
×
672
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pProgress->end));
×
673

674
_exit:
×
675

676
  return code;
×
677
}
678

679
int32_t tDecodeSSTriggerRecalcProgress(SDecoder* pDecoder, SSTriggerRecalcProgress* pProgress) {
×
680
  int32_t code = 0;
×
681
  int32_t lino;
682

683
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pProgress->recalcId));
×
684
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pProgress->progress));
×
685
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pProgress->start));
×
686
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pProgress->end));
×
687

688
_exit:
×
689

690
  return code;
×
691
}
692

693

694
int32_t tEncodeSSTriggerRuntimeStatus(SEncoder* pEncoder, const SSTriggerRuntimeStatus* pStatus) {
3,339,538✔
695
  int32_t code = 0;
3,339,538✔
696
  int32_t lino;
697

698
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->autoRecalcNum));
6,679,076!
699
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->realtimeSessionNum));
6,679,076!
700
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->historySessionNum));
6,679,076!
701
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->recalcSessionNum));
6,679,076!
702
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStatus->histroyProgress));
6,679,076!
703

704
  int32_t recalcNum = (int32_t)taosArrayGetSize(pStatus->userRecalcs);
3,339,538✔
705
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, recalcNum));
3,339,538!
706
  for (int32_t i = 0; i < recalcNum; ++i) {
3,339,538!
707
    SSTriggerRecalcProgress* pProgress = taosArrayGet(pStatus->userRecalcs, i);
×
708
    TAOS_CHECK_EXIT(tEncodeSSTriggerRecalcProgress(pEncoder, pProgress));
×
709
  }
710

711
_exit:
3,339,538✔
712

713
  return code;
3,339,538✔
714
}
715

716
int32_t tDecodeSSTriggerRuntimeStatus(SDecoder* pDecoder, SSTriggerRuntimeStatus* pStatus) {
1,552,443✔
717
  int32_t code = 0;
1,552,443✔
718
  int32_t lino;
719

720
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->autoRecalcNum));
3,104,886!
721
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->realtimeSessionNum));
3,104,886!
722
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->historySessionNum));
3,104,886!
723
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->realtimeSessionNum));
3,104,886!
724
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pStatus->histroyProgress));
3,104,886!
725

726
  int32_t recalcNum = 0;
1,552,443✔
727
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &recalcNum));
1,552,443!
728
  if (recalcNum > 0) {
1,552,443!
729
    pStatus->userRecalcs = taosArrayInit_s(sizeof(SSTriggerRecalcProgress), recalcNum);
×
730
    if (NULL == pStatus->userRecalcs) {
×
731
      code = terrno;
×
732
      goto _exit;
×
733
    }
734
  }
735

736
  for (int32_t i = 0; i < recalcNum; ++i) {
1,552,443!
737
    SSTriggerRecalcProgress* pProgress = taosArrayGet(pStatus->userRecalcs, i);
×
738
    TAOS_CHECK_EXIT(tDecodeSSTriggerRecalcProgress(pDecoder, pProgress));
×
739
  }
740

741
_exit:
1,552,443✔
742

743
  return code;
1,552,443✔
744
}
745

746

747
int32_t tEncodeStreamHbMsg(SEncoder* pEncoder, const SStreamHbMsg* pReq) {
28,699,088✔
748
  int32_t code = 0;
28,699,088✔
749
  int32_t lino;
750

751
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
28,699,088!
752
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->dnodeId));
57,398,176!
753
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->streamGId));
57,398,176!
754
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->snodeId));
57,398,176!
755
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->runnerThreadNum));
57,398,176!
756

757
  int32_t vgLeaderNum = taosArrayGetSize(pReq->pVgLeaders);
28,699,088✔
758
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgLeaderNum));
28,699,088!
759
  for (int32_t i = 0; i < vgLeaderNum; ++i) {
109,922,306✔
760
    int32_t* vgId = taosArrayGet(pReq->pVgLeaders, i);
81,223,218✔
761
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *vgId));
162,446,436!
762
  }
763
  
764
  int32_t statusNum = taosArrayGetSize(pReq->pStreamStatus);
28,699,088✔
765
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, statusNum));
28,699,088!
766
  for (int32_t i = 0; i < statusNum; ++i) {
69,059,834✔
767
    SStmTaskStatusMsg* pStatus = taosArrayGet(pReq->pStreamStatus, i);
40,360,746✔
768
    TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)pStatus));
40,360,746!
769
  }
770

771
  int32_t reqNum = taosArrayGetSize(pReq->pStreamReq);
28,699,088✔
772
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, reqNum));
28,699,088!
773
  for (int32_t i = 0; i < reqNum; ++i) {
28,782,798✔
774
    int32_t* idx = taosArrayGet(pReq->pStreamReq, i);
83,710✔
775
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *idx));
167,420!
776
  }
777

778
  int32_t triggerNum = taosArrayGetSize(pReq->pTriggerStatus);
28,699,088✔
779
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, triggerNum));
28,699,088!
780
  for (int32_t i = 0; i < triggerNum; ++i) {
32,038,626✔
781
    SSTriggerRuntimeStatus* pTrigger = taosArrayGet(pReq->pTriggerStatus, i);
3,339,538✔
782
    TAOS_CHECK_EXIT(tEncodeSSTriggerRuntimeStatus(pEncoder, pTrigger));
3,339,538!
783
  }
784
  
785
  tEndEncode(pEncoder);
28,699,088✔
786

787
_exit:
28,699,088✔
788
  if (code) {
28,699,088!
789
    return code;
×
790
  } else {
791
    return pEncoder->pos;
28,699,088✔
792
  }
793
}
794

795
int32_t tDecodeStreamHbMsg(SDecoder* pDecoder, SStreamHbMsg* pReq) {
13,482,986✔
796
  int32_t code = 0;
13,482,986✔
797
  int32_t lino;
798

799
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
13,482,986!
800
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->dnodeId));
26,965,972!
801
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->streamGId));
26,965,972!
802
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->snodeId));
26,965,972!
803
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->runnerThreadNum));
26,965,972!
804

805
  int32_t vgLearderNum = 0;
13,482,986✔
806
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgLearderNum));
13,482,986!
807
  if (vgLearderNum > 0) {
13,482,986✔
808
    pReq->pVgLeaders = taosArrayInit(vgLearderNum, sizeof(int32_t));
9,863,948✔
809
    if (NULL == pReq->pVgLeaders) {
9,863,948!
810
      code = terrno;
×
811
      goto _exit;
×
812
    }
813
  }
814
  for (int32_t i = 0; i < vgLearderNum; ++i) {
52,832,951✔
815
    int32_t vgId = 0;
39,349,965✔
816
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgId));
39,349,965!
817
    if (NULL == taosArrayPush(pReq->pVgLeaders, &vgId)) {
78,699,930!
818
      code = terrno;
×
819
      goto _exit;
×
820
    }
821
  }
822

823

824
  int32_t statusNum = 0;
13,482,986✔
825
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &statusNum));
13,482,986!
826
  if (statusNum > 0) {
13,482,986✔
827
    pReq->pStreamStatus = taosArrayInit_s(sizeof(SStmTaskStatusMsg), statusNum);
1,235,452✔
828
    if (NULL == pReq->pStreamStatus) {
1,235,452!
829
      code = terrno;
×
830
      goto _exit;
×
831
    }
832
  }
833
  for (int32_t i = 0; i < statusNum; ++i) {
32,457,559✔
834
    SStmTaskStatusMsg* pTask = taosArrayGet(pReq->pStreamStatus, i);
18,974,573✔
835
    if (NULL == pTask) {
18,974,573!
836
      code = terrno;
×
837
      goto _exit;
×
838
    }
839
    TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)pTask));
18,974,573!
840
  }
841

842

843
  int32_t reqNum = 0;
13,482,986✔
844
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &reqNum));
13,482,986!
845
  if (reqNum > 0) {
13,482,986✔
846
    pReq->pStreamReq = taosArrayInit_s(sizeof(int32_t), reqNum);
21,527✔
847
    if (NULL == pReq->pStreamReq) {
21,527!
848
      code = terrno;
×
849
      goto _exit;
×
850
    }
851
  }
852
  for (int32_t i = 0; i < reqNum; ++i) {
13,524,841✔
853
    int32_t* pIdx = taosArrayGet(pReq->pStreamReq, i);
41,855✔
854
    if (NULL == pIdx) {
41,855!
855
      code = terrno;
×
856
      goto _exit;
×
857
    }
858
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, pIdx));
41,855!
859
  }
860

861

862
  int32_t triggerNum = 0;
13,482,986✔
863
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &triggerNum));
13,482,986!
864
  if (triggerNum > 0) {
13,482,986✔
865
    pReq->pTriggerStatus = taosArrayInit_s(sizeof(SSTriggerRuntimeStatus), triggerNum);
577,085✔
866
    if (NULL == pReq->pTriggerStatus) {
577,085!
867
      code = terrno;
×
868
      goto _exit;
×
869
    }
870
  }
871
  for (int32_t i = 0; i < triggerNum; ++i) {
15,035,429✔
872
    SSTriggerRuntimeStatus* pStatus = taosArrayGet(pReq->pTriggerStatus, i);
1,552,443✔
873
    if (NULL == pStatus) {
1,552,443!
874
      code = terrno;
×
875
      goto _exit;
×
876
    }
877
    TAOS_CHECK_EXIT(tDecodeSSTriggerRuntimeStatus(pDecoder, pStatus));
1,552,443!
878
  }
879

880
  
881
  tEndDecode(pDecoder);
13,482,986✔
882

883
_exit:
13,482,986✔
884
  return code;
13,482,986✔
885
}
886

887
void tFreeSSTriggerRuntimeStatus(void* param) {
3,222,212✔
888
  SSTriggerRuntimeStatus* pStatus = (SSTriggerRuntimeStatus*)param;
3,222,212✔
889
  if (NULL == pStatus) {
3,222,212!
890
    return;
×
891
  }
892
  taosArrayDestroy(pStatus->userRecalcs);
3,222,212✔
893
}
894

895
void tCleanupStreamHbMsg(SStreamHbMsg* pMsg, bool deepClean) {
82,564,775✔
896
  if (pMsg == NULL) {
82,564,775!
897
    return;
×
898
  }
899

900
  taosArrayDestroy(pMsg->pVgLeaders);
82,564,775✔
901
  if (deepClean) {
82,564,775!
902
    int32_t reqNum = taosArrayGetSize(pMsg->pStreamReq);
82,564,775✔
903
    for (int32_t i = 0; i < reqNum; ++i) {
82,648,485✔
904
      int32_t* idx = taosArrayGet(pMsg->pStreamReq, i);
83,710✔
905
      SStmTaskStatusMsg* pTask = taosArrayGet(pMsg->pStreamStatus, *idx);
83,710✔
906
      if (NULL == pTask) {
83,710!
907
        continue;
×
908
      }
909

910
      tFreeSStreamMgmtReq(pTask->pMgmtReq);
83,710✔
911
      taosMemoryFree(pTask->pMgmtReq);
83,710!
912
    }
913
  }
914
  taosArrayDestroy(pMsg->pStreamReq);
82,564,775✔
915
  taosArrayDestroy(pMsg->pStreamStatus);
82,564,775✔
916
  taosArrayDestroyEx(pMsg->pTriggerStatus, tFreeSSTriggerRuntimeStatus);
82,564,775✔
917
}
918

919
int32_t tEncodeSStreamReaderDeployFromTrigger(SEncoder* pEncoder, const SStreamReaderDeployFromTrigger* pMsg) {
479,742✔
920
  int32_t code = 0;
479,742✔
921
  int32_t lino;
922

923
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerTblName, pMsg->triggerTblName == NULL ? 0 : (int32_t)strlen(pMsg->triggerTblName) + 1));
959,484!
924
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->triggerTblUid));
959,484!
925
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->triggerTblSuid));
959,484!
926
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerTblType));
959,484!
927
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->deleteReCalc));
959,484!
928
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->deleteOutTbl));
959,484!
929
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->partitionCols, pMsg->partitionCols == NULL ? 0 : (int32_t)strlen(pMsg->partitionCols) + 1));
959,484!
930
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerCols, pMsg->triggerCols == NULL ? 0 : (int32_t)strlen(pMsg->triggerCols) + 1));
959,484!
931
  //TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerPrevFilter, pMsg->triggerPrevFilter == NULL ? 0 : (int32_t)strlen(pMsg->triggerPrevFilter) + 1));
932
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerScanPlan, pMsg->triggerScanPlan == NULL ? 0 : (int32_t)strlen(pMsg->triggerScanPlan) + 1));
959,484!
933
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->calcCacheScanPlan, pMsg->calcCacheScanPlan == NULL ? 0 : (int32_t)strlen(pMsg->calcCacheScanPlan) + 1));
959,484!
934

935
_exit:
479,742✔
936

937
  return code;
479,742✔
938
}
939

940
int32_t tEncodeSStreamReaderDeployFromCalc(SEncoder* pEncoder, const SStreamReaderDeployFromCalc* pMsg) {
295,864✔
941
  int32_t code = 0;
295,864✔
942
  int32_t lino;
943

944
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->execReplica));
591,728!
945
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->calcScanPlan, pMsg->calcScanPlan == NULL ? 0 : (int32_t)strlen(pMsg->calcScanPlan) + 1));
591,728!
946

947
_exit:
295,864✔
948

949
  return code;
295,864✔
950
}
951

952

953
int32_t tEncodeSStreamReaderDeployMsg(SEncoder* pEncoder, const SStreamReaderDeployMsg* pMsg) {
775,606✔
954
  int32_t code = 0;
775,606✔
955
  int32_t lino;
956

957
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerReader));
1,551,212!
958
  if (pMsg->triggerReader) {
775,606✔
959
    TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployFromTrigger(pEncoder, &pMsg->msg.trigger));
479,742!
960
  } else {
961
    TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployFromCalc(pEncoder, &pMsg->msg.calc));
295,864!
962
  }
963
  
964
_exit:
295,864✔
965

966
  return code;
775,606✔
967
}
968

969
int32_t tEncodeSStreamTaskAddr(SEncoder* pEncoder, const SStreamTaskAddr* pMsg) {
1,547,512✔
970
  int32_t code = 0;
1,547,512✔
971
  int32_t lino;
972

973
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->taskId));
3,095,024!
974
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->nodeId));
3,095,024!
975
  TAOS_CHECK_EXIT(tEncodeSEpSet(pEncoder, &pMsg->epset));
1,547,512!
976

977
_exit:
1,547,512✔
978

979
  return code;
1,547,512✔
980
}
981

982
int32_t tEncodeSStreamRunnerTarget(SEncoder* pEncoder, const SStreamRunnerTarget* pMsg) {
1,050,996✔
983
  int32_t code = 0;
1,050,996✔
984
  int32_t lino;
985

986
  TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, &pMsg->addr));
1,050,996!
987
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->execReplica));
2,101,992!
988

989
_exit:
1,050,996✔
990

991
  return code;
1,050,996✔
992
}
993

994

995
int32_t tEncodeSStreamTriggerDeployMsg(SEncoder* pEncoder, const SStreamTriggerDeployMsg* pMsg) {
351,430✔
996
  int32_t code = 0;
351,430✔
997
  int32_t lino;
998

999
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerType));
702,860!
1000
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->igDisorder));
702,860!
1001
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->fillHistory));
702,860!
1002
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->fillHistoryFirst));
702,860!
1003
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->lowLatencyCalc));
702,860!
1004
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->igNoDataTrigger));
702,860!
1005
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->isTriggerTblVirt));
702,860!
1006
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->triggerHasPF));
702,860!
1007
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->isTriggerTblStb));
702,860!
1008
  int32_t partitionColsLen = pMsg->partitionCols == NULL ? 0 : (int32_t)strlen((char*)pMsg->partitionCols) + 1;
351,430!
1009
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->partitionCols, partitionColsLen));
702,860!
1010

1011
  int32_t addrSize = (int32_t)taosArrayGetSize(pMsg->pNotifyAddrUrls);
351,430✔
1012
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, addrSize));
351,430!
1013
  for (int32_t i = 0; i < addrSize; ++i) {
385,156✔
1014
    const char *url = taosArrayGetP(pMsg->pNotifyAddrUrls, i);
33,726✔
1015
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, url, NULL == url ? 0 : (int32_t)strlen(url) + 1));
67,452!
1016
  }
1017
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->notifyEventTypes));
702,860!
1018
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->addOptions));
702,860!
1019
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->notifyHistory));
702,860!
1020

1021
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->maxDelay));
702,860!
1022
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->fillHistoryStartTime));
702,860!
1023
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->watermark));
702,860!
1024
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->expiredTime));
702,860!
1025

1026
  switch (pMsg->triggerType) {
351,430!
1027
    case WINDOW_TYPE_SESSION: {
8,666✔
1028
      // session trigger
1029
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->trigger.session.slotId));
17,332!
1030
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.session.sessionVal));
17,332!
1031
      break;
8,666✔
1032
    }
1033
    case WINDOW_TYPE_STATE: {
158,140✔
1034
      // state trigger
1035
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->trigger.stateWin.slotId));
316,280!
1036
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->trigger.stateWin.extend));
316,280!
1037
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.stateWin.trueForDuration));
316,280!
1038
      int32_t stateWindowExprLen =
158,140✔
1039
          pMsg->trigger.stateWin.expr == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.stateWin.expr) + 1;
158,140!
1040
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.stateWin.expr, stateWindowExprLen));
316,280!
1041
      break;
158,140✔
1042
    }
1043
    case WINDOW_TYPE_INTERVAL: {
135,784✔
1044
      // slide trigger
1045
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.intervalUnit));
271,568!
1046
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.slidingUnit));
271,568!
1047
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.offsetUnit));
271,568!
1048
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.soffsetUnit));
271,568!
1049
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->trigger.sliding.precision));
271,568!
1050
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.interval));
271,568!
1051
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.offset));
271,568!
1052
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.sliding));
271,568!
1053
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.sliding.soffset));
271,568!
1054
      break;
135,784✔
1055
    }
1056
    case WINDOW_TYPE_EVENT: {
29,862✔
1057
      // event trigger
1058
      int32_t eventWindowStartCondLen = pMsg->trigger.event.startCond == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.event.startCond) + 1;
29,862!
1059
      int32_t eventWindowEndCondLen = pMsg->trigger.event.endCond == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.event.endCond) + 1;
29,862!
1060

1061
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.event.startCond, eventWindowStartCondLen));
59,724!
1062
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.event.endCond, eventWindowEndCondLen));
59,724!
1063

1064
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.event.trueForDuration));
59,724!
1065
      break;
29,862✔
1066
    }
1067
    case WINDOW_TYPE_COUNT: {
11,274✔
1068
      // count trigger
1069
      int32_t countWindowCondColsLen = pMsg->trigger.count.condCols == NULL ? 0 : (int32_t)strlen((char*)pMsg->trigger.count.condCols) + 1;
11,274!
1070
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->trigger.count.condCols, countWindowCondColsLen));
22,548!
1071

1072
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.count.countVal));
22,548!
1073
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.count.sliding));
22,548!
1074
      break;
11,274✔
1075
    }
1076
    case WINDOW_TYPE_PERIOD: {
7,704✔
1077
      // period trigger
1078
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.period.period));
15,408!
1079
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->trigger.period.offset));
15,408!
1080
      break;
7,704✔
1081
    }
UNCOV
1082
    default:
×
UNCOV
1083
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
1084
      break;
×
1085
  }
1086

1087
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->eventTypes));
702,860!
1088
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->placeHolderBitmap));
702,860!
1089
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->calcTsSlotId));
702,860!
1090
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pMsg->triTsSlotId));
702,860!
1091
  int32_t triggerPrevFilterLen = (pMsg->triggerPrevFilter == NULL) ? 0 : ((int32_t)strlen(pMsg->triggerPrevFilter) + 1);
351,430!
1092
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerPrevFilter, triggerPrevFilterLen));
702,860!
1093
  int32_t triggerScanPlanLen = (pMsg->triggerScanPlan == NULL) ? 0 : ((int32_t)strlen(pMsg->triggerScanPlan) + 1);
351,430!
1094
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->triggerScanPlan, triggerScanPlanLen));
702,860!
1095
  int32_t calcCacheScanPlanLen = (pMsg->calcCacheScanPlan == NULL) ? 0 : ((int32_t)strlen(pMsg->calcCacheScanPlan) + 1);
351,430!
1096
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->calcCacheScanPlan, calcCacheScanPlanLen));
702,860!
1097

1098
  int32_t readerNum = taosArrayGetSize(pMsg->readerList);
351,430✔
1099
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
351,430!
1100
  for (int32_t i = 0; i < readerNum; ++i) {
803,368✔
1101
    SStreamTaskAddr* pAddr = (SStreamTaskAddr*)taosArrayGet(pMsg->readerList, i);
451,938✔
1102
    TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, pAddr));
451,938!
1103
  }
1104

1105
  int32_t runnerNum = taosArrayGetSize(pMsg->runnerList);
351,430✔
1106
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
351,430!
1107
  for (int32_t i = 0; i < runnerNum; ++i) {
1,402,426✔
1108
    SStreamRunnerTarget* pTarget = (SStreamRunnerTarget*)taosArrayGet(pMsg->runnerList, i);
1,050,996✔
1109
    TAOS_CHECK_EXIT(tEncodeSStreamRunnerTarget(pEncoder, pTarget));
1,050,996!
1110
  }
1111

1112
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->leaderSnodeId));
702,860!
1113
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->streamName, (int32_t)strlen(pMsg->streamName) + 1));
702,860!
1114

1115
_exit:
351,430✔
1116

1117
  return code;
351,430✔
1118
}
1119

1120

1121
int32_t tSerializeSFieldWithOptions(SEncoder* pEncoder, const SFieldWithOptions *pField) {
12,684,708✔
1122
  int32_t code = 0;
12,684,708✔
1123
  int32_t lino;
1124

1125
  TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, pField->name));
25,369,416!
1126
  TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pField->type));
25,369,416!
1127
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pField->flags));
25,369,416!
1128
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pField->bytes));
25,369,416!
1129
  TAOS_CHECK_EXIT(tEncodeU32(pEncoder, pField->compress));
25,369,416!
1130
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pField->typeMod));
25,369,416!
1131

1132
_exit:
12,684,708✔
1133

1134
  return code;
12,684,708✔
1135
}
1136

1137

1138
int32_t tEncodeSStreamRunnerDeployMsg(SEncoder* pEncoder, const SStreamRunnerDeployMsg* pMsg) {
1,120,302✔
1139
  int32_t code = 0;
1,120,302✔
1140
  int32_t lino;
1141

1142
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->execReplica));
2,240,604!
1143
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->streamName, (int32_t)strlen(pMsg->streamName) + 1));
2,240,604!
1144
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->pPlan, NULL == pMsg->pPlan ? 0 : (int32_t)strlen(pMsg->pPlan) + 1));
2,240,604!
1145
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->outDBFName, NULL == pMsg->outDBFName ? 0 : (int32_t)strlen(pMsg->outDBFName) + 1));
2,240,604!
1146
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->outTblName, NULL == pMsg->outTblName ? 0 : (int32_t)strlen(pMsg->outTblName) + 1));
2,240,604!
1147
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->outTblType));
2,240,604!
1148
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->calcNotifyOnly));
2,240,604!
1149
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->topPlan));
2,240,604!
1150

1151
  int32_t addrSize = (int32_t)taosArrayGetSize(pMsg->pNotifyAddrUrls);
1,120,302✔
1152
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, addrSize));
1,120,302!
1153
  for (int32_t i = 0; i < addrSize; ++i) {
1,218,186✔
1154
    const char *url = taosArrayGetP(pMsg->pNotifyAddrUrls, i);
97,884✔
1155
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, url, NULL == url ? 0 : (int32_t)strlen(url) + 1));
195,768!
1156
  }
1157
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->addOptions));
2,240,604!
1158

1159
  int32_t outColNum = (int32_t)taosArrayGetSize(pMsg->outCols);
1,120,302✔
1160
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, outColNum));
1,120,302!
1161
  for (int32_t i = 0; i < outColNum; ++i) {
5,798,796✔
1162
    SFieldWithOptions *pCol = taosArrayGet(pMsg->outCols, i);
4,678,494✔
1163
    TAOS_CHECK_EXIT(tSerializeSFieldWithOptions(pEncoder, pCol));
4,678,494!
1164
  }
1165

1166
  int32_t outTagNum = (int32_t)taosArrayGetSize(pMsg->outTags);
1,120,302✔
1167
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, outTagNum));
1,120,302!
1168
  for (int32_t i = 0; i < outTagNum; ++i) {
2,208,114✔
1169
    SFieldWithOptions *pTag = taosArrayGet(pMsg->outTags, i);
1,087,812✔
1170
    TAOS_CHECK_EXIT(tSerializeSFieldWithOptions(pEncoder, pTag));
1,087,812!
1171
  }
1172

1173
  TAOS_CHECK_EXIT(tEncodeU64(pEncoder, pMsg->outStbUid));
2,240,604!
1174
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pMsg->outStbSversion));
2,240,604!
1175

1176
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->subTblNameExpr, NULL == pMsg->subTblNameExpr ? 0 : (int32_t)strlen(pMsg->subTblNameExpr) + 1));
2,240,604!
1177
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pMsg->tagValueExpr, NULL == pMsg->tagValueExpr ? 0 : (int32_t)strlen(pMsg->tagValueExpr) + 1));
2,240,604!
1178

1179
  int32_t forceOutColsSize = (int32_t)taosArrayGetSize(pMsg->forceOutCols);
1,120,302✔
1180
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, forceOutColsSize));
1,120,302!
1181
  for (int32_t i = 0; i < forceOutColsSize; ++i) {
1,383,906✔
1182
    SStreamOutCol *pCoutCol = (SStreamOutCol*)taosArrayGet(pMsg->forceOutCols, i);
263,604✔
1183
    int32_t        exprLen = pCoutCol->expr == NULL ? 0 : (int32_t)strlen((char*)pCoutCol->expr) + 1;
263,604!
1184

1185
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pCoutCol->expr, exprLen));
527,208!
1186
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.type));
527,208!
1187
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.precision));
527,208!
1188
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.scale));
527,208!
1189
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pCoutCol->type.bytes));
527,208!
1190
  }
1191

1192
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pMsg->lowLatencyCalc));
2,240,604!
1193

1194
_exit:
1,120,302✔
1195

1196
  return code;
1,120,302✔
1197
}
1198

1199

1200
int32_t tEncodeSStmTaskDeploy(SEncoder* pEncoder, const SStmTaskDeploy* pTask) {
2,247,338✔
1201
  int32_t code = 0;
2,247,338✔
1202
  int32_t lino;
1203

1204
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
2,247,338!
1205
  switch (pTask->task.type) {
2,247,338!
1206
    case STREAM_READER_TASK:
775,606✔
1207
      TAOS_CHECK_EXIT(tEncodeSStreamReaderDeployMsg(pEncoder, &pTask->msg.reader));
775,606!
1208
      break;
775,606✔
1209
    case STREAM_TRIGGER_TASK:
351,430✔
1210
      TAOS_CHECK_EXIT(tEncodeSStreamTriggerDeployMsg(pEncoder, &pTask->msg.trigger));
351,430!
1211
      break;
351,430✔
1212
    case STREAM_RUNNER_TASK:
1,120,302✔
1213
      TAOS_CHECK_EXIT(tEncodeSStreamRunnerDeployMsg(pEncoder, &pTask->msg.runner));
1,120,302!
1214
      break;
1,120,302✔
UNCOV
1215
    default:
×
UNCOV
1216
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
1217
      break;
×
1218
  }
1219
  
1220
_exit:
2,247,338✔
1221

1222
  return code;
2,247,338✔
1223
}
1224

1225

1226
int32_t tEncodeSStmStreamDeploy(SEncoder* pEncoder, const SStmStreamDeploy* pStream) {
422,248✔
1227
  int32_t code = 0;
422,248✔
1228
  int32_t lino;
1229

1230
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pStream->streamId));
844,496!
1231

1232
  int32_t readerNum = taosArrayGetSize(pStream->readerTasks);
422,248✔
1233
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
422,248!
1234
  for (int32_t i = 0; i < readerNum; ++i) {
1,197,854✔
1235
    SStmTaskDeploy* pDeploy = taosArrayGet(pStream->readerTasks, i);
775,606✔
1236
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pDeploy));
775,606!
1237
  }
1238

1239
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pStream->triggerTask ? 1 : 0));
844,496!
1240
  if (pStream->triggerTask) {
422,248✔
1241
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pStream->triggerTask));
351,430!
1242
  }
1243
  
1244
  int32_t runnerNum = taosArrayGetSize(pStream->runnerTasks);
422,248✔
1245
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
422,248!
1246
  for (int32_t i = 0; i < runnerNum; ++i) {
1,542,550✔
1247
    SStmTaskDeploy* pDeploy = taosArrayGet(pStream->runnerTasks, i);
1,120,302✔
1248
    TAOS_CHECK_EXIT(tEncodeSStmTaskDeploy(pEncoder, pDeploy));
1,120,302!
1249
  }
1250

1251
_exit:
422,248✔
1252

1253
  return code;
422,248✔
1254
}
1255

1256
int32_t tEncodeSStreamMsg(SEncoder* pEncoder, const SStreamMsg* pMsg) {
679,460✔
1257
  int32_t code = 0;
679,460✔
1258
  int32_t lino = 0;
679,460✔
1259

1260
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pMsg->msgType));
1,358,920!
1261

1262
_exit:
679,460✔
1263
  return code;
679,460✔
1264
}
1265

1266
int32_t tDecodeSStreamMsg(SDecoder* pDecoder, SStreamMsg* pMsg) {
340,443✔
1267
  int32_t code = 0;
340,443✔
1268
  int32_t lino;
1269

1270
  int32_t type = 0;
340,443✔
1271
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &type));
340,443!
1272
  pMsg->msgType = type;
340,443✔
1273

1274
_exit:
340,443✔
1275
  return code;
340,443✔
1276
}
1277

1278
int32_t tEncodeSStreamStartTaskMsg(SEncoder* pEncoder, const SStreamStartTaskMsg* pStart) {
415,388✔
1279
  int32_t code = 0;
415,388✔
1280
  int32_t lino;
1281

1282
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pStart->header));
415,388!
1283

1284
_exit:
415,388✔
1285

1286
  return code;
415,388✔
1287
}
1288

1289
int32_t tEncodeSStreamTaskStart(SEncoder* pEncoder, const SStreamTaskStart* pTask) {
415,388✔
1290
  int32_t code = 0;
415,388✔
1291
  int32_t lino;
1292

1293
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
415,388!
1294
  TAOS_CHECK_EXIT(tEncodeSStreamStartTaskMsg(pEncoder, (SStreamStartTaskMsg*)&pTask->startMsg));
415,388!
1295

1296
_exit:
415,388✔
1297

1298
  return code;
415,388✔
1299
}
1300

1301
int32_t tEncodeSStreamUndeployTaskMsg(SEncoder* pEncoder, const SStreamUndeployTaskMsg* pUndeploy) {
167,178✔
1302
  int32_t code = 0;
167,178✔
1303
  int32_t lino;
1304

1305
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pUndeploy->header));
167,178!
1306
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pUndeploy->doCheckpoint));
334,356!
1307
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pUndeploy->doCleanup));
334,356!
1308

1309
_exit:
167,178✔
1310

1311
  return code;
167,178✔
1312
}
1313

1314
int32_t tEncodeSStreamTaskUndeploy(SEncoder* pEncoder, const SStreamTaskUndeploy* pTask) {
167,178✔
1315
  int32_t code = 0;
167,178✔
1316
  int32_t lino;
1317

1318
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, (SStreamTask*)&pTask->task));
167,178!
1319
  TAOS_CHECK_EXIT(tEncodeSStreamUndeployTaskMsg(pEncoder, (SStreamUndeployTaskMsg*)&pTask->undeployMsg));
167,178!
1320

1321
_exit:
167,178✔
1322

1323
  return code;
167,178✔
1324
}
1325

1326

1327
int32_t tEncodeSStreamRecalcReq(SEncoder* pEncoder, const SStreamRecalcReq* recalc) {
13,184✔
1328
  int32_t code = 0;
13,184✔
1329
  int32_t lino;
1330

1331
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->recalcId));
26,368!
1332
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->start));
26,368!
1333
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, recalc->end));
26,368!
1334

1335
_exit:
13,184✔
1336

1337
  return code;
13,184✔
1338
}
1339

1340
int32_t tEncodeSStreamMgmtRspCont(SEncoder* pEncoder, SStreamMsgType msgType, const SStreamMgmtRspCont* pRsp) {
96,894✔
1341
  int32_t code = 0;
96,894✔
1342
  int32_t lino;
1343

1344
  switch (msgType) {
96,894!
1345
    case STREAM_MSG_ORIGTBL_READER_INFO: {
66,142✔
1346
      int32_t vgNum = taosArrayGetSize(pRsp->vgIds);
66,142!
1347
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgNum));
66,142!
1348

1349
      for (int32_t i = 0; i < vgNum; ++i) {
190,984✔
1350
        int32_t* vgId = taosArrayGet(pRsp->vgIds, i);
124,842✔
1351
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *vgId));
249,684!
1352
      }
1353

1354
      int32_t readerNum = taosArrayGetSize(pRsp->readerList);
66,142!
1355
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, readerNum));
66,142!
1356
      
1357
      for (int32_t i = 0; i < readerNum; ++i) {
89,858✔
1358
        SStreamTaskAddr* addr = taosArrayGet(pRsp->readerList, i);
23,716✔
1359
        TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, addr));
23,716!
1360
      }
1361
      break;
66,142✔
1362
    }
UNCOV
1363
    case STREAM_MSG_UPDATE_RUNNER: {
×
UNCOV
1364
      int32_t runnerNum = taosArrayGetSize(pRsp->runnerList);
×
UNCOV
1365
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, runnerNum));
×
1366
      
1367
      for (int32_t i = 0; i < runnerNum; ++i) {
×
1368
        SStreamRunnerTarget* target = taosArrayGet(pRsp->runnerList, i);
×
UNCOV
1369
        TAOS_CHECK_EXIT(tEncodeSStreamRunnerTarget(pEncoder, target));
×
1370
      }
1371
      break;
×
1372
    }
1373
    case STREAM_MSG_USER_RECALC: {
13,184✔
1374
      int32_t recalcNum = taosArrayGetSize(pRsp->recalcList);
13,184!
1375
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, recalcNum));
13,184!
1376
      
1377
      for (int32_t i = 0; i < recalcNum; ++i) {
26,368✔
1378
        SStreamRecalcReq* recalc = taosArrayGet(pRsp->recalcList, i);
13,184✔
1379
        TAOS_CHECK_EXIT(tEncodeSStreamRecalcReq(pEncoder, recalc));
13,184!
1380
      }
1381
      break;
13,184✔
1382
    }
1383
    case STREAM_MSG_RUNNER_ORIGTBL_READER: {
17,568✔
1384
      int32_t rspNum = taosArrayGetSize(pRsp->execRspList);
17,568!
1385
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, rspNum));
17,568!
1386
      
1387
      for (int32_t i = 0; i < rspNum; ++i) {
35,136✔
1388
        SStreamOReaderDeployRsp* pDeployRsp = taosArrayGet(pRsp->execRspList, i);
17,568✔
1389
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pDeployRsp->execId));
35,136!
1390
        int32_t vgNum = taosArrayGetSize(pDeployRsp->vgList);
17,568!
1391
        TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgNum));
17,568!
1392
        for (int32_t n = 0; n < vgNum; ++n) {
38,430✔
1393
          TAOS_CHECK_EXIT(tEncodeSStreamTaskAddr(pEncoder, taosArrayGet(pDeployRsp->vgList, n)));
20,862!
1394
        }
1395
      }
1396
      break;
17,568✔
1397
    }
UNCOV
1398
    default:
×
UNCOV
1399
      break;
×
1400
  }
1401

1402
_exit:
96,894✔
1403

1404
  return code;
96,894✔
1405
}
1406

1407
int32_t tEncodeSStreamMgmtRsp(SEncoder* pEncoder, const SStreamMgmtRsp* pRsp) {
96,894✔
1408
  int32_t code = 0;
96,894✔
1409
  int32_t lino;
1410

1411
  TAOS_CHECK_EXIT(tEncodeSStreamMsg(pEncoder, &pRsp->header));
96,894!
1412
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->reqId));
193,788!
1413
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->code));
193,788!
1414
  TAOS_CHECK_EXIT(tEncodeStreamTask(pEncoder, &pRsp->task));
96,894!
1415
  TAOS_CHECK_EXIT(tEncodeSStreamMgmtRspCont(pEncoder, pRsp->header.msgType, (SStreamMgmtRspCont*)&pRsp->cont));
96,894!
1416

1417
_exit:
96,894✔
1418

1419
  return code;
96,894✔
1420
}
1421

1422

1423
int32_t tEncodeStreamHbRsp(SEncoder* pEncoder, const SMStreamHbRspMsg* pRsp) {
26,513,722✔
1424
  int32_t code = 0;
26,513,722✔
1425
  int32_t lino;
1426

1427
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
26,513,722!
1428
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->streamGId));
53,027,444!
1429
  int32_t deployNum = taosArrayGetSize(pRsp->deploy.streamList);
26,513,722✔
1430
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, deployNum));
26,513,722!
1431
  for (int32_t i = 0; i < deployNum; ++i) {
26,935,970✔
1432
    SStmStreamDeploy* pStream = (SStmStreamDeploy*)taosArrayGet(pRsp->deploy.streamList, i);
422,248✔
1433
    TAOS_CHECK_EXIT(tEncodeSStmStreamDeploy(pEncoder, pStream));
422,248!
1434
  }
1435

1436
  int32_t startNum = taosArrayGetSize(pRsp->start.taskList);
26,513,722✔
1437
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, startNum));
26,513,722!
1438
  for (int32_t i = 0; i < startNum; ++i) {
26,929,110✔
1439
    SStreamTaskStart* pTask = (SStreamTaskStart*)taosArrayGet(pRsp->start.taskList, i);
415,388✔
1440
    TAOS_CHECK_EXIT(tEncodeSStreamTaskStart(pEncoder, pTask));
415,388!
1441
  }
1442

1443
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pRsp->undeploy.undeployAll));
53,027,444!
1444
  if (!pRsp->undeploy.undeployAll) {
26,513,722!
1445
    int32_t undeployNum = taosArrayGetSize(pRsp->undeploy.taskList);
26,513,722✔
1446
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, undeployNum));
26,513,722!
1447
    for (int32_t i = 0; i < undeployNum; ++i) {
26,680,900✔
1448
      SStreamTaskUndeploy* pTask = (SStreamTaskUndeploy*)taosArrayGet(pRsp->undeploy.taskList, i);
167,178✔
1449
      TAOS_CHECK_EXIT(tEncodeSStreamTaskUndeploy(pEncoder, pTask));
167,178!
1450
    }
1451
  }
1452

1453
  int32_t rspNum = taosArrayGetSize(pRsp->rsps.rspList);
26,513,722✔
1454
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, rspNum));
26,513,722!
1455
  for (int32_t i = 0; i < rspNum; ++i) {
26,610,616✔
1456
    SStreamMgmtRsp* pMgmtRsp = (SStreamMgmtRsp*)taosArrayGet(pRsp->rsps.rspList, i);
96,894✔
1457
    TAOS_CHECK_EXIT(tEncodeSStreamMgmtRsp(pEncoder, pMgmtRsp));
96,894!
1458
  }
1459
  
1460
_exit:
26,513,722✔
1461

1462
  tEndEncode(pEncoder);
26,513,722✔
1463

1464
  return code;
26,513,722✔
1465
}
1466

1467
int32_t tDecodeSStreamReaderDeployFromTrigger(SDecoder* pDecoder, SStreamReaderDeployFromTrigger* pMsg) {
239,871✔
1468
  int32_t code = 0;
239,871✔
1469
  int32_t lino;
1470

1471
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerTblName, NULL));
479,742!
1472
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->triggerTblUid));
479,742!
1473
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->triggerTblSuid));
479,742!
1474
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerTblType));
479,742!
1475
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->deleteReCalc));
479,742!
1476
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->deleteOutTbl));
479,742!
1477
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->partitionCols, NULL));
479,742!
1478
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerCols, NULL));
479,742!
1479
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerScanPlan, NULL));
479,742!
1480
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcCacheScanPlan, NULL));
479,742!
1481

1482
_exit:
239,871✔
1483

1484
  return code;
239,871✔
1485
}
1486

1487

1488
int32_t tDecodeSStreamReaderDeployFromCalc(SDecoder* pDecoder, SStreamReaderDeployFromCalc* pMsg) {
147,932✔
1489
  int32_t code = 0;
147,932✔
1490
  int32_t lino;
1491

1492
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
295,864!
1493
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcScanPlan, NULL));
295,864!
1494

1495
_exit:
147,932✔
1496

1497
  return code;
147,932✔
1498
}
1499

1500

1501
int32_t tDecodeSStreamReaderDeployMsg(SDecoder* pDecoder, SStreamReaderDeployMsg* pMsg) {
387,803✔
1502
  int32_t code = 0;
387,803✔
1503
  int32_t lino;
1504

1505
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerReader));
775,606!
1506
  if (pMsg->triggerReader) {
387,803✔
1507
    TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployFromTrigger(pDecoder, &pMsg->msg.trigger));
239,871!
1508
  } else {
1509
    TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployFromCalc(pDecoder, &pMsg->msg.calc));
147,932!
1510
  }
1511
  
1512
_exit:
147,932✔
1513

1514
  return code;
387,803✔
1515
}
1516

1517

1518
int32_t tDecodeSStreamTaskAddr(SDecoder* pDecoder, SStreamTaskAddr* pMsg) {
904,235✔
1519
  int32_t code = 0;
904,235✔
1520
  int32_t lino;
1521

1522
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->taskId));
1,808,470!
1523
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->nodeId));
1,808,470!
1524
  TAOS_CHECK_EXIT(tDecodeSEpSet(pDecoder, &pMsg->epset));
904,235!
1525

1526
_exit:
904,235✔
1527

1528
  return code;
904,235✔
1529
}
1530

1531

1532
int32_t tDecodeSStreamRunnerTarget(SDecoder* pDecoder, SStreamRunnerTarget* pMsg) {
527,577✔
1533
  int32_t code = 0;
527,577✔
1534
  int32_t lino;
1535

1536
  TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, &pMsg->addr));
527,577!
1537
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
1,055,154!
1538

1539
_exit:
527,577✔
1540

1541
  return code;
527,577✔
1542
}
1543

1544

1545
int32_t tDecodeSStreamTriggerDeployMsg(SDecoder* pDecoder, SStreamTriggerDeployMsg* pMsg) {
176,408✔
1546
  int32_t code = 0;
176,408✔
1547
  int32_t lino;
1548

1549
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerType));
352,816!
1550
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->igDisorder));
352,816!
1551
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->fillHistory));
352,816!
1552
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->fillHistoryFirst));
352,816!
1553
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->lowLatencyCalc));
352,816!
1554
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->igNoDataTrigger));
352,816!
1555
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->isTriggerTblVirt));
352,816!
1556
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->triggerHasPF));
352,816!
1557
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->isTriggerTblStb));
352,816!
1558
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->partitionCols, NULL));
352,816!
1559

1560
  int32_t addrSize = 0;
176,408✔
1561
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
176,408!
1562
  if (addrSize > 0) {
176,408✔
1563
    pMsg->pNotifyAddrUrls = taosArrayInit_s(POINTER_BYTES, addrSize);
16,863✔
1564
    TSDB_CHECK_NULL(pMsg->pNotifyAddrUrls, code, lino, _exit, terrno);
16,863!
1565
  }
1566
  for (int32_t i = 0; i < addrSize; ++i) {
193,271✔
1567
    const char **url = taosArrayGet(pMsg->pNotifyAddrUrls, i);
16,863✔
1568
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)url, NULL));
16,863!
1569
  }
1570
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->notifyEventTypes));
352,816!
1571
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->addOptions));
352,816!
1572
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->notifyHistory));
352,816!
1573

1574
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->maxDelay));
352,816!
1575
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->fillHistoryStartTime));
352,816!
1576
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->watermark));
352,816!
1577
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->expiredTime));
352,816!
1578

1579
  switch (pMsg->triggerType) {
176,408!
1580
    case WINDOW_TYPE_SESSION:
4,333✔
1581
      // session trigger
1582
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->trigger.session.slotId));
8,666!
1583
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.session.sessionVal));
8,666!
1584
      break;
4,333✔
1585
    case WINDOW_TYPE_STATE:
79,070✔
1586
      // state trigger
1587
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->trigger.stateWin.slotId));
158,140!
1588
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->trigger.stateWin.extend));
158,140!
1589
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.stateWin.trueForDuration));
158,140!
1590
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.stateWin.expr, NULL));
158,140!
1591
      break;
79,070✔
1592
    
1593
    case WINDOW_TYPE_INTERVAL:
68,585✔
1594
      // slide trigger
1595
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.intervalUnit));
137,170!
1596
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.slidingUnit));
137,170!
1597
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.offsetUnit));
137,170!
1598
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.soffsetUnit));
137,170!
1599
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->trigger.sliding.precision));
137,170!
1600
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.interval));
137,170!
1601
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.offset));
137,170!
1602
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.sliding));
137,170!
1603
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.sliding.soffset));
137,170!
1604
      break;
68,585✔
1605
    
1606
    case WINDOW_TYPE_EVENT:
14,931✔
1607
      // event trigger
1608
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.event.startCond, NULL));
29,862!
1609
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.event.endCond, NULL));
29,862!
1610
      
1611
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.event.trueForDuration));
29,862!
1612
      break;
14,931✔
1613
    
1614
    case WINDOW_TYPE_COUNT:
5,637✔
1615
      // count trigger
1616
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->trigger.count.condCols, NULL));
11,274!
1617
      
1618
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.count.countVal));
11,274!
1619
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.count.sliding));
11,274!
1620
      break;
5,637✔
1621
    
1622
    case WINDOW_TYPE_PERIOD:
3,852✔
1623
      // period trigger
1624
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.period.period));
7,704!
1625
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->trigger.period.offset));
7,704!
1626
      break;
3,852✔
UNCOV
1627
    default:
×
UNCOV
1628
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
1629
      break;
×
1630
  }
1631

1632
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->eventTypes));
352,816!
1633
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->placeHolderBitmap));
352,816!
1634
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->calcTsSlotId));
352,816!
1635
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pMsg->triTsSlotId));
352,816!
1636
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerPrevFilter, NULL));
352,816!
1637
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->triggerScanPlan, NULL));
352,816!
1638
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->calcCacheScanPlan, NULL));
352,816!
1639

1640
  int32_t readerNum = 0;
176,408✔
1641
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));
176,408!
1642
  if (readerNum > 0) {
176,408✔
1643
    pMsg->readerList = taosArrayInit_s(sizeof(SStreamTaskAddr), readerNum);
175,848✔
1644
    TSDB_CHECK_NULL(pMsg->readerList, code, lino, _exit, terrno);
175,848!
1645
  }
1646
  for (int32_t i = 0; i < readerNum; ++i) {
403,173✔
1647
    SStreamTaskAddr* pAddr = (SStreamTaskAddr*)taosArrayGet(pMsg->readerList, i);
226,765✔
1648
    TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, pAddr));
226,765!
1649
  }
1650

1651
  int32_t runnerNum = 0;
176,408✔
1652
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));
176,408!
1653
  if (runnerNum > 0) {
176,408✔
1654
    pMsg->runnerList = taosArrayInit_s(sizeof(SStreamRunnerTarget), runnerNum);
175,859✔
1655
    TSDB_CHECK_NULL(pMsg->runnerList, code, lino, _exit, terrno);
175,859!
1656
  }
1657
  for (int32_t i = 0; i < runnerNum; ++i) {
703,985✔
1658
    SStreamRunnerTarget* pTarget = (SStreamRunnerTarget*)taosArrayGet(pMsg->runnerList, i);
527,577✔
1659
    TAOS_CHECK_EXIT(tDecodeSStreamRunnerTarget(pDecoder, pTarget));
527,577!
1660
  }
1661

1662
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->leaderSnodeId));
352,816!
1663
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->streamName, NULL));
352,816!
1664

1665
_exit:
176,408✔
1666

1667
  return code;
176,408✔
1668
}
1669

1670

1671

1672
int32_t tDeserializeSFieldWithOptions(SDecoder *pDecoder, SFieldWithOptions *pField) {
4,576,787✔
1673
  int32_t code = 0;
4,576,787✔
1674
  int32_t lino;
1675

1676
  TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, pField->name));
4,576,787!
1677
  TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pField->type));
9,153,574!
1678
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pField->flags));
9,153,574!
1679
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pField->bytes));
9,153,574!
1680
  TAOS_CHECK_EXIT(tDecodeU32(pDecoder, &pField->compress));
9,153,574!
1681
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pField->typeMod));
9,153,574!
1682

1683
_exit:
4,576,787✔
1684

1685
  return code;
4,576,787✔
1686
}
1687

1688
void destroySStreamOutCols(void* p){
131,802✔
1689
  if (p == NULL) return;
131,802!
1690
  SStreamOutCol* col = (SStreamOutCol*)p;
131,802✔
1691
  taosMemoryFreeClear(col->expr);
131,802!
1692
}
1693

1694
int32_t tDecodeSStreamRunnerDeployMsg(SDecoder* pDecoder, SStreamRunnerDeployMsg* pMsg) {
562,738✔
1695
  int32_t code = 0;
562,738✔
1696
  int32_t lino;
1697

1698
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->execReplica));
1,125,476!
1699
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->streamName, NULL));
1,125,476!
1700
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->pPlan, NULL));
1,125,476!
1701
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->outDBFName, NULL));
1,125,476!
1702
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->outTblName, NULL));
1,125,476!
1703
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->outTblType));
1,125,476!
1704
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->calcNotifyOnly));
1,125,476!
1705
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->topPlan));
1,125,476!
1706

1707
  int32_t addrSize = 0;
562,738✔
1708
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
562,738!
1709
  if (addrSize > 0) {
562,738✔
1710
    pMsg->pNotifyAddrUrls = taosArrayInit_s(POINTER_BYTES, addrSize);
48,942✔
1711
    TSDB_CHECK_NULL(pMsg->pNotifyAddrUrls, code, lino, _exit, terrno);
48,942!
1712
  }
1713
  for (int32_t i = 0; i < addrSize; ++i) {
611,680✔
1714
    const char **url = taosArrayGet(pMsg->pNotifyAddrUrls, i);
48,942✔
1715
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)url, NULL));
48,942!
1716
  }
1717
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pMsg->addOptions));
1,125,476!
1718

1719
  int32_t outColNum = 0;
562,738✔
1720
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outColNum));
562,738!
1721
  if (outColNum > 0) {
562,738!
1722
    pMsg->outCols = taosArrayInit_s(sizeof(SFieldWithOptions), outColNum);
562,738✔
1723
    TSDB_CHECK_NULL(pMsg->outCols, code, lino, _exit, terrno);
562,738!
1724
  }
1725
  for (int32_t i = 0; i < outColNum; ++i) {
2,907,159✔
1726
    SFieldWithOptions *pCol = taosArrayGet(pMsg->outCols, i);
2,344,421✔
1727
    TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pCol));
2,344,421!
1728
  }
1729

1730
  int32_t outTagNum = 0;
562,738✔
1731
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outTagNum));
562,738!
1732
  if (outTagNum > 0) {
562,738✔
1733
    pMsg->outTags = taosArrayInit_s(sizeof(SFieldWithOptions), outTagNum);
342,021✔
1734
    TSDB_CHECK_NULL(pMsg->outTags, code, lino, _exit, terrno);
342,021!
1735
  }
1736
  for (int32_t i = 0; i < outTagNum; ++i) {
1,106,953✔
1737
    SFieldWithOptions *pTag = taosArrayGet(pMsg->outTags, i);
544,215✔
1738
    TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pTag));
544,215!
1739
  }
1740

1741
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pMsg->outStbUid));
1,125,476!
1742
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pMsg->outStbSversion));
1,125,476!
1743

1744
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->subTblNameExpr, NULL));
1,125,476!
1745
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pMsg->tagValueExpr, NULL));
1,125,476!
1746

1747
  int32_t forceOutColsSize = 0;
562,738✔
1748
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &forceOutColsSize));
562,738!
1749
  if (forceOutColsSize > 0) {
562,738✔
1750
    pMsg->forceOutCols = taosArrayInit_s(sizeof(SStreamOutCol), forceOutColsSize);
19,986✔
1751
    TSDB_CHECK_NULL(pMsg->forceOutCols, code, lino, _exit, terrno);
19,986!
1752
  }
1753
  for (int32_t i = 0; i < forceOutColsSize; ++i) {
694,540✔
1754
    SStreamOutCol *pCoutCol = (SStreamOutCol*)taosArrayGet(pMsg->forceOutCols, i);
131,802✔
1755

1756
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pCoutCol->expr, NULL));
263,604!
1757
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.type));
263,604!
1758
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.precision));
263,604!
1759
    TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &pCoutCol->type.scale));
263,604!
1760
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pCoutCol->type.bytes));
263,604!
1761
  }
1762

1763
  if (!tDecodeIsEnd(pDecoder)) {
562,738!
1764
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pMsg->lowLatencyCalc));
1,125,476!
1765
  }
1766

1767
_exit:
562,738✔
1768

1769
  return code;
562,738✔
1770
}
1771

1772
int32_t tDecodeSStmTaskDeploy(SDecoder* pDecoder, SStmTaskDeploy* pTask) {
1,126,949✔
1773
  int32_t code = 0;
1,126,949✔
1774
  int32_t lino;
1775

1776
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
1,126,949!
1777
  switch (pTask->task.type) {
1,126,949!
1778
    case STREAM_READER_TASK:
387,803✔
1779
      TAOS_CHECK_EXIT(tDecodeSStreamReaderDeployMsg(pDecoder, &pTask->msg.reader));
387,803!
1780
      break;
387,803✔
1781
    case STREAM_TRIGGER_TASK:
176,408✔
1782
      TAOS_CHECK_EXIT(tDecodeSStreamTriggerDeployMsg(pDecoder, &pTask->msg.trigger));
176,408!
1783
      break;
176,408✔
1784
    case STREAM_RUNNER_TASK:
562,738✔
1785
      TAOS_CHECK_EXIT(tDecodeSStreamRunnerDeployMsg(pDecoder, &pTask->msg.runner));
562,738!
1786
      break;
562,738✔
UNCOV
1787
    default:
×
UNCOV
1788
      TAOS_CHECK_EXIT(TSDB_CODE_MND_STREAM_INTERNAL_ERROR);
×
UNCOV
1789
      break;
×
1790
  }
1791
  
1792
_exit:
1,126,949✔
1793

1794
  return code;
1,126,949✔
1795
}
1796

1797

1798
int32_t tDecodeSStmStreamDeploy(SDecoder* pDecoder, SStmStreamDeploy* pStream) {
213,489✔
1799
  int32_t code = 0;
213,489✔
1800
  int32_t lino;
1801

1802
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pStream->streamId));
426,978!
1803

1804
  int32_t readerNum = 0;
213,489✔
1805
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));
213,489!
1806
  if (readerNum > 0) {
213,489✔
1807
    pStream->readerTasks = taosArrayInit_s(sizeof(SStmTaskDeploy), readerNum);
195,117✔
1808
    TSDB_CHECK_NULL(pStream->readerTasks, code, lino, _exit, terrno);
195,117!
1809
  }
1810
  for (int32_t i = 0; i < readerNum; ++i) {
601,292✔
1811
    SStmTaskDeploy* pTask = taosArrayGet(pStream->readerTasks, i);
387,803✔
1812
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pTask));
387,803!
1813
  }
1814

1815
  int32_t triggerTask = 0;
213,489✔
1816
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &triggerTask));
213,489!
1817
  if (triggerTask) {
213,489✔
1818
    pStream->triggerTask = taosMemoryCalloc(1, sizeof(SStmTaskDeploy));
176,408!
1819
    TSDB_CHECK_NULL(pStream->triggerTask, code, lino, _exit, terrno);
176,408!
1820
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pStream->triggerTask));
176,408!
1821
  }
1822
  
1823
  int32_t runnerNum = 0;
213,489✔
1824
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));
213,489!
1825
  if (runnerNum > 0) {
213,489✔
1826
    pStream->runnerTasks = taosArrayInit_s(sizeof(SStmTaskDeploy), runnerNum);
187,751✔
1827
    TSDB_CHECK_NULL(pStream->runnerTasks, code, lino, _exit, terrno);
187,751!
1828
  }
1829
  for (int32_t i = 0; i < runnerNum; ++i) {
776,227✔
1830
    SStmTaskDeploy* pTask = taosArrayGet(pStream->runnerTasks, i);
562,738✔
1831
    TAOS_CHECK_EXIT(tDecodeSStmTaskDeploy(pDecoder, pTask));
562,738!
1832
  }
1833

1834
_exit:
213,489✔
1835

1836
  return code;
213,489✔
1837
}
1838

1839

1840
int32_t tDecodeSStreamStartTaskMsg(SDecoder* pDecoder, SStreamStartTaskMsg* pStart) {
208,387✔
1841
  int32_t code = 0;
208,387✔
1842
  int32_t lino;
1843

1844
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pStart->header));
208,387!
1845

1846
_exit:
208,387✔
1847

1848
  return code;
208,387✔
1849
}
1850

1851

1852
int32_t tDecodeSStreamTaskStart(SDecoder* pDecoder, SStreamTaskStart* pTask) {
208,387✔
1853
  int32_t code = 0;
208,387✔
1854
  int32_t lino;
1855

1856
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
208,387!
1857
  TAOS_CHECK_EXIT(tDecodeSStreamStartTaskMsg(pDecoder, (SStreamStartTaskMsg*)&pTask->startMsg));
208,387!
1858

1859
_exit:
208,387✔
1860

1861
  return code;
208,387✔
1862
}
1863

1864

1865
int32_t tDecodeSStreamUndeployTaskMsg(SDecoder* pDecoder, SStreamUndeployTaskMsg* pUndeploy) {
83,609✔
1866
  int32_t code = 0;
83,609✔
1867
  int32_t lino;
1868

1869
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pUndeploy->header));
83,609!
1870
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pUndeploy->doCheckpoint));
167,218!
1871
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pUndeploy->doCleanup));
167,218!
1872

1873
_exit:
83,609✔
1874

1875
  return code;
83,609✔
1876
}
1877

1878

1879
int32_t tDecodeSStreamTaskUndeploy(SDecoder* pDecoder, SStreamTaskUndeploy* pTask) {
83,609✔
1880
  int32_t code = 0;
83,609✔
1881
  int32_t lino;
1882

1883
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, (SStreamTask*)&pTask->task));
83,609!
1884
  TAOS_CHECK_EXIT(tDecodeSStreamUndeployTaskMsg(pDecoder, (SStreamUndeployTaskMsg*)&pTask->undeployMsg));
83,609!
1885

1886
_exit:
83,609✔
1887

1888
  return code;
83,609✔
1889
}
1890

1891
int32_t tDecodeSStreamRecalcReq(SDecoder* pDecoder, SStreamRecalcReq* recalc) {
6,592✔
1892
  int32_t code = 0;
6,592✔
1893
  int32_t lino;
1894

1895
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->recalcId));
13,184!
1896
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->start));
13,184!
1897
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &recalc->end));
13,184!
1898

1899
_exit:
6,592✔
1900

1901
  return code;
6,592✔
1902
}
1903

1904
int32_t tDecodeSStreamMgmtRspCont(SDecoder* pDecoder, SStreamMsgType msgType, SStreamMgmtRspCont* pCont) {
48,447✔
1905
  int32_t code = 0;
48,447✔
1906
  int32_t lino;
1907

1908
  switch (msgType) {
48,447!
1909
    case STREAM_MSG_ORIGTBL_READER_INFO: {
33,071✔
1910
      int32_t vgNum = 0;
33,071✔
1911
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgNum));  
33,071!
1912
      if (vgNum > 0) {
33,071!
1913
        pCont->vgIds = taosArrayInit_s(sizeof(int32_t), vgNum);
33,071✔
1914
        TSDB_CHECK_NULL(pCont->vgIds, code, lino, _exit, terrno);
33,071!
1915
      }
1916
      for (int32_t i = 0; i < vgNum; ++i) {
95,492✔
1917
        int32_t *vgId = taosArrayGet(pCont->vgIds, i);
62,421✔
1918
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, vgId));  
62,421!
1919
      }
1920

1921
      int32_t readerNum = 0;
33,071✔
1922
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &readerNum));  
33,071!
1923
      if (readerNum > 0) {
33,071✔
1924
        pCont->readerList = taosArrayInit_s(sizeof(SStreamTaskAddr), readerNum);
11,319✔
1925
        TSDB_CHECK_NULL(pCont->readerList, code, lino, _exit, terrno);
11,319!
1926
      }
1927
      for (int32_t i = 0; i < readerNum; ++i) {
44,929✔
1928
        SStreamTaskAddr *addr = taosArrayGet(pCont->readerList, i);
11,858✔
1929
        TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, addr));  
11,858!
1930
      }
1931
      break;
33,071✔
1932
    }
UNCOV
1933
    case STREAM_MSG_UPDATE_RUNNER: {
×
UNCOV
1934
      int32_t runnerNum = 0;
×
UNCOV
1935
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &runnerNum));  
×
UNCOV
1936
      if (runnerNum > 0) {
×
1937
        pCont->runnerList = taosArrayInit_s(sizeof(SStreamRunnerTarget), runnerNum);
×
1938
        TSDB_CHECK_NULL(pCont->runnerList, code, lino, _exit, terrno);
×
1939
      }
1940
      for (int32_t i = 0; i < runnerNum; ++i) {
×
1941
        SStreamRunnerTarget *target = taosArrayGet(pCont->runnerList, i);
×
1942
        TAOS_CHECK_EXIT(tDecodeSStreamRunnerTarget(pDecoder, target));  
×
1943
      }
1944
      break;
×
1945
    }
1946
    case STREAM_MSG_USER_RECALC: {
6,592✔
1947
      int32_t recalcNum = 0;
6,592✔
1948
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &recalcNum));  
6,592!
1949
      if (recalcNum > 0) {
6,592!
1950
        pCont->recalcList = taosArrayInit_s(sizeof(SStreamRecalcReq), recalcNum);
6,592✔
1951
        TSDB_CHECK_NULL(pCont->recalcList, code, lino, _exit, terrno);
6,592!
1952
      }
1953
      for (int32_t i = 0; i < recalcNum; ++i) {
13,184✔
1954
        SStreamRecalcReq *recalc = taosArrayGet(pCont->recalcList, i);
6,592✔
1955
        TAOS_CHECK_EXIT(tDecodeSStreamRecalcReq(pDecoder, recalc));  
6,592!
1956
      }
1957
      break;
6,592✔
1958
    }
1959
    case STREAM_MSG_RUNNER_ORIGTBL_READER: {
8,784✔
1960
      int32_t rspNum = 0, vgNum = 0;
8,784✔
1961
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &rspNum));  
8,784!
1962
      if (rspNum > 0) {
8,784!
1963
        pCont->execRspList = taosArrayInit_s(sizeof(SStreamOReaderDeployRsp), rspNum);
8,784✔
1964
        TSDB_CHECK_NULL(pCont->execRspList, code, lino, _exit, terrno);
8,784!
1965
      }
1966
      for (int32_t i = 0; i < rspNum; ++i) {
17,568✔
1967
        SStreamOReaderDeployRsp *pDeployRsp = taosArrayGet(pCont->execRspList, i);
8,784✔
1968
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pDeployRsp->execId));  
17,568!
1969
        TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgNum));
8,784!
1970
        if (vgNum > 0) {
8,784!
1971
          pDeployRsp->vgList = taosArrayInit_s(sizeof(SStreamTaskAddr), vgNum);
8,784✔
1972
          TSDB_CHECK_NULL(pDeployRsp->vgList, code, lino, _exit, terrno);
8,784!
1973
        }
1974
        for (int32_t n = 0; n < vgNum; ++n) {
19,215✔
1975
          SStreamTaskAddr* pAddr = taosArrayGet(pDeployRsp->vgList, n);
10,431✔
1976
          TAOS_CHECK_EXIT(tDecodeSStreamTaskAddr(pDecoder, pAddr));  
10,431!
1977
        }
1978
      }
1979
      break;
8,784✔
1980
    }
UNCOV
1981
    default:
×
UNCOV
1982
      break;
×
1983
  }
1984

1985
_exit:
48,447✔
1986

1987
  return code;
48,447✔
1988
}
1989

1990

1991
int32_t tDecodeSStreamMgmtRsp(SDecoder* pDecoder, SStreamMgmtRsp* pRsp) {
48,447✔
1992
  int32_t code = 0;
48,447✔
1993
  int32_t lino;
1994

1995
  TAOS_CHECK_EXIT(tDecodeSStreamMsg(pDecoder, &pRsp->header));
48,447!
1996
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->reqId));
96,894!
1997
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->code));
96,894!
1998
  TAOS_CHECK_EXIT(tDecodeStreamTask(pDecoder, &pRsp->task));
48,447!
1999
  TAOS_CHECK_EXIT(tDecodeSStreamMgmtRspCont(pDecoder, pRsp->header.msgType, &pRsp->cont));
48,447!
2000

2001
_exit:
48,447✔
2002

2003
  return code;
48,447✔
2004
}
2005

2006
void tFreeSStreamOReaderDeployRsp(void* param) {
17,568✔
2007
  if (NULL == param) {
17,568!
UNCOV
2008
    return;
×
2009
  }
2010

2011
  SStreamOReaderDeployRsp* pRsp = (SStreamOReaderDeployRsp*)param;
17,568✔
2012
  taosArrayDestroy(pRsp->vgList);
17,568✔
2013
}
2014

2015
void tFreeSStreamMgmtRsp(void* param) {
96,894✔
2016
  if (NULL == param) {
96,894!
UNCOV
2017
    return;
×
2018
  }
2019
  
2020
  SStreamMgmtRsp* pRsp = (SStreamMgmtRsp*)param;
96,894✔
2021

2022
  taosArrayDestroy(pRsp->cont.vgIds);
96,894✔
2023
  taosArrayDestroy(pRsp->cont.readerList);
96,894✔
2024
  taosArrayDestroy(pRsp->cont.runnerList);
96,894✔
2025
  taosArrayDestroy(pRsp->cont.recalcList);
96,894✔
2026
  taosArrayDestroyEx(pRsp->cont.execRspList, tFreeSStreamOReaderDeployRsp);
96,894✔
2027
}
2028

2029
void tFreeSStreamReaderDeployMsg(SStreamReaderDeployMsg* pReader) {
387,803✔
2030
  if (NULL == pReader) {
387,803!
UNCOV
2031
    return;
×
2032
  }
2033
  
2034
  if (pReader->triggerReader) {
387,803✔
2035
    SStreamReaderDeployFromTrigger* pMsg = (SStreamReaderDeployFromTrigger*)&pReader->msg.trigger;
239,871✔
2036
    taosMemoryFree(pMsg->triggerTblName);
239,871!
2037
    taosMemoryFree(pMsg->partitionCols);
239,871!
2038
    taosMemoryFree(pMsg->triggerCols);
239,871!
2039
    taosMemoryFree(pMsg->triggerScanPlan);
239,871!
2040
    taosMemoryFree(pMsg->calcCacheScanPlan);
239,871!
2041
  } else {
2042
    SStreamReaderDeployFromCalc* pMsg = (SStreamReaderDeployFromCalc*)&pReader->msg.calc;
147,932✔
2043
    taosMemoryFree(pMsg->calcScanPlan);
147,932!
2044
  }
2045
}
2046

UNCOV
2047
void tFreeStreamNotifyUrl(void* param) {
×
UNCOV
2048
  if (NULL == param) {
×
UNCOV
2049
    return;
×
2050
  }
2051

2052
  taosMemoryFree(*(void**)param);
×
2053
}
2054

2055
void tFreeSStreamTriggerDeployMsg(SStreamTriggerDeployMsg* pTrigger) {
176,408✔
2056
  if (NULL == pTrigger) {
176,408!
UNCOV
2057
    return;
×
2058
  }
2059
  
2060
  taosArrayDestroyEx(pTrigger->pNotifyAddrUrls, tFreeStreamNotifyUrl);
176,408✔
2061
  switch (pTrigger->triggerType) {
176,408✔
2062
    case WINDOW_TYPE_STATE:
79,070✔
2063
      taosMemoryFree(pTrigger->trigger.stateWin.expr);
79,070!
2064
      break;
79,070✔
2065
    case WINDOW_TYPE_EVENT:
14,931✔
2066
      taosMemoryFree(pTrigger->trigger.event.startCond);
14,931!
2067
      taosMemoryFree(pTrigger->trigger.event.endCond);
14,931!
2068
      break;
14,931✔
2069
    case WINDOW_TYPE_COUNT:
5,637✔
2070
      taosMemoryFree(pTrigger->trigger.count.condCols);  
5,637!
2071
      break;
5,637✔
2072
    default:
76,770✔
2073
      break;
76,770✔
2074
  }
2075

2076
  taosMemoryFree(pTrigger->partitionCols);
176,408!
2077
  taosMemoryFree(pTrigger->triggerPrevFilter);
176,408!
2078
  taosMemoryFree(pTrigger->triggerScanPlan);
176,408!
2079
  taosMemoryFree(pTrigger->calcCacheScanPlan);
176,408!
2080

2081
  taosArrayDestroy(pTrigger->readerList);
176,408✔
2082
  taosArrayDestroy(pTrigger->runnerList);
176,408✔
2083
  taosMemoryFree(pTrigger->streamName);
176,408!
2084
}
2085

UNCOV
2086
void tFreeSStreamOutCol(void* param) {
×
UNCOV
2087
  if (NULL == param) {
×
UNCOV
2088
    return;
×
2089
  }
2090

2091
  SStreamOutCol* pOut = (SStreamOutCol*)param;
×
2092
  taosMemoryFree(pOut->expr);
×
2093
}
2094

2095
void tFreeSStreamRunnerDeployMsg(SStreamRunnerDeployMsg* pRunner) {
562,738✔
2096
  if (NULL == pRunner) {
562,738!
2097
    return;
×
2098
  }
2099

2100
  taosMemoryFree(pRunner->streamName);
562,738!
2101
  taosMemoryFree(pRunner->pPlan);
562,738!
2102
  taosMemoryFree(pRunner->outDBFName);
562,738!
2103
  taosMemoryFree(pRunner->outTblName);
562,738!
2104

2105
  taosArrayDestroyEx(pRunner->pNotifyAddrUrls, tFreeStreamNotifyUrl);
562,738✔
2106
  taosArrayDestroy(pRunner->outCols);
562,738✔
2107
  taosArrayDestroy(pRunner->outTags);
562,738✔
2108

2109
  taosMemoryFree(pRunner->subTblNameExpr);
562,738!
2110
  taosMemoryFree(pRunner->tagValueExpr);
562,738!
2111
  taosArrayDestroyEx(pRunner->forceOutCols, tFreeSStreamOutCol);
562,738✔
2112
}
2113

2114
void tFreeSStmTaskDeploy(void* param) {
1,375,154✔
2115
  if (NULL == param) {
1,375,154✔
2116
    return;
248,205✔
2117
  }
2118

2119
  SStmTaskDeploy* pTask = (SStmTaskDeploy*)param;
1,126,949✔
2120
  switch (pTask->task.type)  {
1,126,949!
2121
    case STREAM_READER_TASK:
387,803✔
2122
      tFreeSStreamReaderDeployMsg(&pTask->msg.reader);
387,803✔
2123
      break;
387,803✔
2124
    case STREAM_TRIGGER_TASK:
176,408✔
2125
      tFreeSStreamTriggerDeployMsg(&pTask->msg.trigger);
176,408✔
2126
      break;
176,408✔
2127
    case STREAM_RUNNER_TASK:
562,738✔
2128
      tFreeSStreamRunnerDeployMsg(&pTask->msg.runner);
562,738✔
2129
      break;
562,738✔
UNCOV
2130
    default:
×
UNCOV
2131
      break;
×
2132
  }
2133
}
2134

2135
void tFreeSStmStreamDeploy(void* param) {
211,124✔
2136
  if (NULL == param) {
211,124!
UNCOV
2137
    return;
×
2138
  }
2139
  
2140
  SStmStreamDeploy* pDeploy = (SStmStreamDeploy*)param;
211,124✔
2141
  taosArrayDestroy(pDeploy->readerTasks);
211,124✔
2142
  if (pDeploy->triggerTask) {
211,124✔
2143
    taosArrayDestroy(pDeploy->triggerTask->msg.trigger.readerList);
175,715✔
2144
    taosArrayDestroy(pDeploy->triggerTask->msg.trigger.runnerList);
175,715✔
2145
    taosMemoryFree(pDeploy->triggerTask);
175,715!
2146
  }
2147

2148
  int32_t runnerNum = taosArrayGetSize(pDeploy->runnerTasks);
211,124✔
2149
  for (int32_t i = 0; i < runnerNum; ++i) {
771,275✔
2150
    SStmTaskDeploy* pRunner = taosArrayGet(pDeploy->runnerTasks, i);
560,151✔
2151
    taosMemoryFree(pRunner->msg.runner.pPlan);
560,151!
2152
  }
2153
  taosArrayDestroy(pDeploy->runnerTasks);
211,124✔
2154
}
2155

2156
void tDeepFreeSStmStreamDeploy(void* param) {
424,613✔
2157
  if (NULL == param) {
424,613!
UNCOV
2158
    return;
×
2159
  }
2160
  
2161
  SStmStreamDeploy* pDeploy = (SStmStreamDeploy*)param;
424,613✔
2162
  taosArrayDestroyEx(pDeploy->readerTasks, tFreeSStmTaskDeploy);
424,613✔
2163
  tFreeSStmTaskDeploy(pDeploy->triggerTask);
424,613✔
2164
  taosMemoryFree(pDeploy->triggerTask);
424,613!
2165
  taosArrayDestroyEx(pDeploy->runnerTasks, tFreeSStmTaskDeploy);
424,613✔
2166
}
2167

2168

2169
void tFreeSMStreamHbRspMsg(SMStreamHbRspMsg* pRsp) {
26,965,972✔
2170
  if (NULL == pRsp) {
26,965,972!
UNCOV
2171
    return;
×
2172
  }
2173
  taosArrayDestroyEx(pRsp->deploy.streamList, tFreeSStmStreamDeploy);
26,965,972✔
2174
  taosArrayDestroy(pRsp->start.taskList);
26,965,972✔
2175
  taosArrayDestroy(pRsp->undeploy.taskList);
26,965,972✔
2176
  taosArrayDestroyEx(pRsp->rsps.rspList, tFreeSStreamMgmtRsp);
26,965,972✔
2177
}
2178

2179
void tDeepFreeSMStreamHbRspMsg(SMStreamHbRspMsg* pRsp) {
13,295,854✔
2180
  if (NULL == pRsp) {
13,295,854!
UNCOV
2181
    return;
×
2182
  }
2183
  taosArrayDestroyEx(pRsp->deploy.streamList, tDeepFreeSStmStreamDeploy);
13,295,854✔
2184
  taosArrayDestroy(pRsp->start.taskList);
13,295,854✔
2185
  taosArrayDestroy(pRsp->undeploy.taskList);
13,295,854✔
2186
  taosArrayDestroyEx(pRsp->rsps.rspList, tFreeSStreamMgmtRsp);
13,295,854✔
2187
}
2188

2189

2190

2191
int32_t tDecodeStreamHbRsp(SDecoder* pDecoder, SMStreamHbRspMsg* pRsp) {
13,295,854✔
2192
  int32_t code = 0;
13,295,854✔
2193
  int32_t lino;
2194

2195
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
13,295,854!
2196
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->streamGId));
26,591,708!
2197
  int32_t deployNum = 0;
13,295,854✔
2198
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &deployNum));
13,295,854!
2199
  if (deployNum > 0) {
13,295,854✔
2200
    pRsp->deploy.streamList = taosArrayInit_s(sizeof(SStmStreamDeploy), deployNum);
68,673✔
2201
    TSDB_CHECK_NULL(pRsp->deploy.streamList, code, lino, _exit, terrno);
68,673!
2202
  }
2203
  for (int32_t i = 0; i < deployNum; ++i) {
13,509,343✔
2204
    SStmStreamDeploy* pStream = taosArrayGet(pRsp->deploy.streamList, i);
213,489✔
2205
    TAOS_CHECK_EXIT(tDecodeSStmStreamDeploy(pDecoder, pStream));
213,489!
2206
  }
2207

2208
  int32_t startNum = 0;
13,295,854✔
2209
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &startNum));
13,295,854!
2210
  if (startNum > 0) {
13,295,854✔
2211
    pRsp->start.taskList = taosArrayInit_s(sizeof(SStreamTaskStart), startNum);
103,220✔
2212
    TSDB_CHECK_NULL(pRsp->start.taskList, code, lino, _exit, terrno);
103,220!
2213
  }
2214
  for (int32_t i = 0; i < startNum; ++i) {
13,504,241✔
2215
    SStreamTaskStart* pTask = (SStreamTaskStart*)taosArrayGet(pRsp->start.taskList, i);
208,387✔
2216
    TAOS_CHECK_EXIT(tDecodeSStreamTaskStart(pDecoder, pTask));
208,387!
2217
  }
2218

2219
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pRsp->undeploy.undeployAll));
26,591,708!
2220
  if (!pRsp->undeploy.undeployAll) {
13,295,854!
2221
    int32_t undeployNum = 0;
13,295,854✔
2222
    TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &undeployNum));
13,295,854!
2223
    if (undeployNum > 0) {
13,295,854✔
2224
      pRsp->undeploy.taskList = taosArrayInit_s(sizeof(SStreamTaskUndeploy), undeployNum);
24,992✔
2225
      TSDB_CHECK_NULL(pRsp->undeploy.taskList, code, lino, _exit, terrno);
24,992!
2226
    }
2227
    for (int32_t i = 0; i < undeployNum; ++i) {
13,379,463✔
2228
      SStreamTaskUndeploy* pTask = (SStreamTaskUndeploy*)taosArrayGet(pRsp->undeploy.taskList, i);
83,609✔
2229
      TAOS_CHECK_EXIT(tDecodeSStreamTaskUndeploy(pDecoder, pTask));
83,609!
2230
    }
2231
  }  
2232

2233
  int32_t rspNum = 0;
13,295,854✔
2234
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &rspNum));
13,295,854!
2235
  if (rspNum > 0) {
13,295,854✔
2236
    pRsp->rsps.rspList = taosArrayInit_s(sizeof(SStreamMgmtRsp), rspNum);
28,119✔
2237
    TSDB_CHECK_NULL(pRsp->rsps.rspList, code, lino, _exit, terrno);
28,119!
2238
    for (int32_t i = 0; i < rspNum; ++i) {
76,566✔
2239
      SStreamMgmtRsp* pMgmtRsp = (SStreamMgmtRsp*)taosArrayGet(pRsp->rsps.rspList, i);
48,447✔
2240
      TAOS_CHECK_EXIT(tDecodeSStreamMgmtRsp(pDecoder, pMgmtRsp));
48,447!
2241
    }
2242
  }
2243

2244
  tEndDecode(pDecoder);
13,295,854✔
2245

2246
_exit:
13,295,854✔
2247
  return code;
13,295,854✔
2248
}
2249

UNCOV
2250
int32_t tEncodeStreamTaskRunReq (SEncoder* pEncoder, const SStreamTaskRunReq* pReq) {
×
UNCOV
2251
  int32_t code = 0;
×
2252
  int32_t lino;
2253

UNCOV
2254
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
2255
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
2256
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->taskId));
×
UNCOV
2257
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->reqType));
×
UNCOV
2258
  tEndEncode(pEncoder);
×
2259

2260
_exit:
×
2261
  return code;
×
2262
}
2263

UNCOV
2264
int32_t tDecodeStreamTaskRunReq(SDecoder* pDecoder, SStreamTaskRunReq* pReq) {
×
2265
  int32_t code = 0;
×
2266
  int32_t lino;
2267

UNCOV
2268
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
2269
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
2270
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->taskId));
×
UNCOV
2271
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->reqType));
×
UNCOV
2272
  tEndDecode(pDecoder);
×
2273

2274
_exit:
×
2275
  return code;
×
2276
}
2277

UNCOV
2278
int32_t tEncodeStreamTaskStopReq(SEncoder* pEncoder, const SStreamTaskStopReq* pReq) {
×
2279
  int32_t code = 0;
×
2280
  int32_t lino;
2281

UNCOV
2282
  TAOS_CHECK_EXIT(tStartEncode(pEncoder));
×
2283
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
×
2284
  tEndEncode(pEncoder);
×
2285

UNCOV
2286
_exit:
×
2287
  return code;
×
2288
}
2289

UNCOV
2290
int32_t tDecodeStreamTaskStopReq(SDecoder* pDecoder, SStreamTaskStopReq* pReq) {
×
2291
  int32_t code = 0;
×
2292
  int32_t lino;
2293

UNCOV
2294
  TAOS_CHECK_EXIT(tStartDecode(pDecoder));
×
2295
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
2296
  tEndDecode(pDecoder);
×
2297

UNCOV
2298
_exit:
×
2299
  return code;
×
2300

2301
}
2302

2303

2304
int32_t tSerializeSCMCreateStreamReqImpl(SEncoder* pEncoder, const SCMCreateStreamReq *pReq) {
1,555,730✔
2305
  int32_t code = 0;
1,555,730✔
2306
  int32_t lino;
2307

2308
  // name part
2309
  int32_t sqlLen = pReq->sql == NULL ? 0 : (int32_t)strlen(pReq->sql) + 1;
1,555,730!
2310
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
1,555,730!
2311
  int32_t outDbLen = pReq->outDB == NULL ? 0 : (int32_t)strlen(pReq->outDB) + 1;
1,555,730!
2312
  int32_t streamDBLen = pReq->streamDB == NULL ? 0 : (int32_t)strlen(pReq->streamDB) + 1;
1,555,730!
2313
  int32_t triggerDBLen = pReq->triggerDB == NULL ? 0 : (int32_t)strlen(pReq->triggerDB) + 1;
1,555,730!
2314
  int32_t triggerTblNameLen = pReq->triggerTblName == NULL ? 0 : (int32_t)strlen(pReq->triggerTblName) + 1;
1,555,730!
2315
  int32_t outTblNameLen = pReq->outTblName == NULL ? 0 : (int32_t)strlen(pReq->outTblName) + 1;
1,555,730!
2316

2317
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
3,111,460!
2318

2319
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->name, nameLen));
3,111,460!
2320
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->sql, sqlLen));
3,111,460!
2321
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->outDB, outDbLen));
3,111,460!
2322
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->streamDB, streamDBLen));
3,111,460!
2323
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->triggerDB, triggerDBLen));
3,111,460!
2324
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->triggerTblName, triggerTblNameLen));
3,111,460!
2325
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->outTblName, outTblNameLen));
3,111,460!
2326

2327
  int32_t calcDbSize = (int32_t)taosArrayGetSize(pReq->calcDB);
1,555,730✔
2328
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, calcDbSize));
1,555,730!
2329
  for (int32_t i = 0; i < calcDbSize; ++i) {
3,107,200✔
2330
    const char *dbName = taosArrayGetP(pReq->calcDB, i);
1,551,470✔
2331
    TAOS_CHECK_EXIT((tEncodeCStr(pEncoder, dbName)));
1,551,470!
2332
  }
2333

2334
  // trigger control part
2335
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->igExists));
3,111,460!
2336
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->triggerType));
3,111,460!
2337
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->igDisorder));
3,111,460!
2338
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->deleteReCalc));
3,111,460!
2339
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->deleteOutTbl));
3,111,460!
2340
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->fillHistory));
3,111,460!
2341
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->fillHistoryFirst));
3,111,460!
2342
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->calcNotifyOnly));
3,111,460!
2343
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->lowLatencyCalc));
3,111,460!
2344
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->igNoDataTrigger));
3,111,460!
2345

2346
  // notify part
2347
  int32_t addrSize = (int32_t)taosArrayGetSize(pReq->pNotifyAddrUrls);
1,555,730✔
2348
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, addrSize));
1,555,730!
2349
  for (int32_t i = 0; i < addrSize; ++i) {
1,787,360✔
2350
    const char *url = taosArrayGetP(pReq->pNotifyAddrUrls, i);
231,630✔
2351
    TAOS_CHECK_EXIT((tEncodeCStr(pEncoder, url)));
231,630!
2352
  }
2353
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->notifyEventTypes));
3,111,460!
2354
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->addOptions));
3,111,460!
2355
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->notifyHistory));
3,111,460!
2356

2357
  // out table part
2358

2359
  // trigger cols and partition cols
2360
  int32_t filterColsLen = pReq->triggerFilterCols == NULL ? 0 : (int32_t)strlen((char*)pReq->triggerFilterCols) + 1;
1,555,730!
2361
  int32_t triggerColsLen = pReq->triggerCols == NULL ? 0 : (int32_t)strlen((char*)pReq->triggerCols) + 1;
1,555,730!
2362
  int32_t partitionColsLen = pReq->partitionCols == NULL ? 0 : (int32_t)strlen((char*)pReq->partitionCols) + 1;
1,555,730!
2363
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->triggerFilterCols, filterColsLen));
3,111,460!
2364
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->triggerCols, triggerColsLen));
3,111,460!
2365
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->partitionCols, partitionColsLen));
3,111,460!
2366

2367
  // out col
2368
  int32_t outColSize = (int32_t )taosArrayGetSize(pReq->outCols);
1,555,730✔
2369
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, outColSize));
1,555,730!
2370
  for (int32_t i = 0; i < outColSize; ++i) {
8,474,132✔
2371
    SFieldWithOptions *pField = taosArrayGet(pReq->outCols, i);
6,918,402✔
2372
    TAOS_CHECK_EXIT(tSerializeSFieldWithOptions(pEncoder, pField));
6,918,402!
2373
  }
2374

2375
  // out tag
2376
  int32_t outTagSize = (int32_t )taosArrayGetSize(pReq->outTags);
1,555,730✔
2377
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, outTagSize));
1,555,730!
2378
  for (int32_t i = 0; i < outTagSize; ++i) {
2,918,286✔
2379
    SField *pField = taosArrayGet(pReq->outTags, i);
1,362,556✔
2380
    TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pField->type));
2,725,112!
2381
    TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pField->flags));
2,725,112!
2382
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pField->bytes));
2,725,112!
2383
    TAOS_CHECK_EXIT(tEncodeCStr(pEncoder, pField->name));
2,725,112!
2384
  }
2385

2386
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->maxDelay));
3,111,460!
2387
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->fillHistoryStartTime));
3,111,460!
2388
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->watermark));
3,111,460!
2389
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->expiredTime));
3,111,460!
2390

2391
  switch (pReq->triggerType) {
1,555,730!
2392
    case WINDOW_TYPE_SESSION: {
92,518✔
2393
      // session trigger
2394
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pReq->trigger.session.slotId));
185,036!
2395
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.session.sessionVal));
185,036!
2396
      break;
92,518✔
2397
    }
2398
    case WINDOW_TYPE_STATE: {
510,072✔
2399
      // state trigger
2400
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pReq->trigger.stateWin.slotId));
1,020,144!
2401
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.stateWin.trueForDuration));
1,020,144!
2402
      break;
510,072✔
2403
    }
2404
    case WINDOW_TYPE_INTERVAL: {
634,928✔
2405
      // slide trigger
2406
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.sliding.intervalUnit));
1,269,856!
2407
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.sliding.slidingUnit));
1,269,856!
2408
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.sliding.offsetUnit));
1,269,856!
2409
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.sliding.soffsetUnit));
1,269,856!
2410
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.sliding.precision));
1,269,856!
2411
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.sliding.interval));
1,269,856!
2412
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.sliding.offset));
1,269,856!
2413
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.sliding.sliding));
1,269,856!
2414
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.sliding.soffset));
1,269,856!
2415
      break;
634,928✔
2416
    }
2417
    case WINDOW_TYPE_EVENT: {
155,046✔
2418
      // event trigger
2419
      int32_t eventWindowStartCondLen = pReq->trigger.event.startCond == NULL ? 0 : (int32_t)strlen((char*)pReq->trigger.event.startCond) + 1;
155,046!
2420
      int32_t eventWindowEndCondLen = pReq->trigger.event.endCond == NULL ? 0 : (int32_t)strlen((char*)pReq->trigger.event.endCond) + 1;
155,046!
2421

2422
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->trigger.event.startCond, eventWindowStartCondLen));
310,092!
2423
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->trigger.event.endCond, eventWindowEndCondLen));
310,092!
2424

2425
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.event.trueForDuration));
310,092!
2426
      break;
155,046✔
2427
    }
2428
    case WINDOW_TYPE_COUNT: {
108,662✔
2429
      // count trigger
2430
      int32_t countWindowCondColsLen = pReq->trigger.count.condCols == NULL ? 0 : (int32_t)strlen((char*)pReq->trigger.count.condCols) + 1;
108,662!
2431
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->trigger.count.condCols, countWindowCondColsLen));
217,324!
2432

2433
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.count.countVal));
217,324!
2434
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.count.sliding));
217,324!
2435
      break;
108,662✔
2436
    }
2437
    case WINDOW_TYPE_PERIOD: {
54,504✔
2438
      // period trigger
2439
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.period.precision));
109,008!
2440
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.period.periodUnit));
109,008!
2441
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.period.offsetUnit));
109,008!
2442
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.period.period));
109,008!
2443
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->trigger.period.offset));
109,008!
2444
      break;
54,504✔
2445
    }
2446
  }
2447

2448
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->triggerTblType));
3,111,460!
2449
  TAOS_CHECK_EXIT(tEncodeU64(pEncoder, pReq->triggerTblUid));
3,111,460!
2450
  TAOS_CHECK_EXIT(tEncodeU64(pEncoder, pReq->triggerTblSuid));
3,111,460!
2451
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->vtableCalc));
3,111,460!
2452
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->outTblType));
3,111,460!
2453
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->outStbExists));
3,111,460!
2454
  TAOS_CHECK_EXIT(tEncodeU64(pEncoder, pReq->outStbUid));
3,111,460!
2455
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->outStbSversion));
3,111,460!
2456
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->eventTypes));
3,111,460!
2457
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->flags));
3,111,460!
2458
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->tsmaId));
3,111,460!
2459
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->placeHolderBitmap));
3,111,460!
2460
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pReq->calcTsSlotId));
3,111,460!
2461
  TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pReq->triTsSlotId));
3,111,460!
2462

2463
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->triggerTblVgId));
3,111,460!
2464
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->outTblVgId));
3,111,460!
2465

2466
  int32_t triggerScanPlanLen = pReq->triggerScanPlan == NULL ? 0 : (int32_t)strlen((char*)pReq->triggerScanPlan) + 1;
1,555,730!
2467
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->triggerScanPlan, triggerScanPlanLen));
3,111,460!
2468

2469
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->triggerHasPF));
3,111,460!
2470
  int32_t triggerFilterLen = pReq->triggerPrevFilter == NULL ? 0 : (int32_t)strlen((char*)pReq->triggerPrevFilter) + 1;
1,555,730!
2471
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->triggerPrevFilter, triggerFilterLen));
3,111,460!
2472

2473
  int32_t calcScanPlanListSize = (int32_t)taosArrayGetSize(pReq->calcScanPlanList);
1,555,730✔
2474
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, calcScanPlanListSize));
1,555,730!
2475
  for (int32_t i = 0; i < calcScanPlanListSize; ++i) {
3,990,872✔
2476
    SStreamCalcScan* pCalcScanPlan = (SStreamCalcScan*)taosArrayGet(pReq->calcScanPlanList, i);
2,435,142✔
2477
    int32_t          vgListSize = (int32_t)taosArrayGetSize(pCalcScanPlan->vgList);
2,435,142✔
2478
    int32_t          scanPlanLen = pCalcScanPlan->scanPlan == NULL ? 0 : (int32_t)strlen((char*)pCalcScanPlan->scanPlan) + 1;
2,435,142!
2479
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, vgListSize));
2,435,142!
2480
    for (int32_t j = 0; j < vgListSize; ++j) {
4,870,284✔
2481
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, *(int32_t*)taosArrayGet(pCalcScanPlan->vgList, j)));
4,870,284!
2482
    }
2483
    TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pCalcScanPlan->readFromCache));
4,870,284!
2484
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pCalcScanPlan->scanPlan, scanPlanLen));
4,870,284!
2485
  }
2486

2487
  int32_t calcPlanLen = pReq->calcPlan == NULL ? 0 : (int32_t)strlen((char*)pReq->calcPlan) + 1;
1,555,730!
2488
  int32_t subTblNameExprLen = pReq->subTblNameExpr == NULL ? 0 : (int32_t)strlen((char*)pReq->subTblNameExpr) + 1;
1,555,730!
2489
  int32_t tagValueExprLen = pReq->tagValueExpr == NULL ? 0 : (int32_t)strlen((char*)pReq->tagValueExpr) + 1;
1,555,730!
2490

2491
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->numOfCalcSubplan));
3,111,460!
2492
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->calcPlan, calcPlanLen));
3,111,460!
2493
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->subTblNameExpr, subTblNameExprLen));
3,111,460!
2494
  TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->tagValueExpr, tagValueExprLen));
3,111,460!
2495

2496
  int32_t forceOutColsSize = (int32_t)taosArrayGetSize(pReq->forceOutCols);
1,555,730✔
2497
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, forceOutColsSize));
1,555,730!
2498
  for (int32_t i = 0; i < forceOutColsSize; ++i) {
1,803,056✔
2499
    SStreamOutCol *pCoutCol = (SStreamOutCol*)taosArrayGet(pReq->forceOutCols, i);
247,326✔
2500
    int32_t        exprLen = pCoutCol->expr == NULL ? 0 : (int32_t)strlen((char*)pCoutCol->expr) + 1;
247,326!
2501

2502
    TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pCoutCol->expr, exprLen));
494,652!
2503
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.type));
494,652!
2504
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.precision));
494,652!
2505
    TAOS_CHECK_EXIT(tEncodeU8(pEncoder, pCoutCol->type.scale));
494,652!
2506
    TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pCoutCol->type.bytes));
494,652!
2507
  }
2508

2509
  switch (pReq->triggerType) {
1,555,730✔
2510
    case WINDOW_TYPE_STATE: {
510,072✔
2511
      // state trigger
2512
      int32_t stateExprLen = pReq->trigger.stateWin.expr == NULL ? 0 : (int32_t)strlen((char*)pReq->trigger.stateWin.expr) + 1;
510,072!
2513
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pReq->trigger.stateWin.expr, stateExprLen));
1,020,144!
2514
      TAOS_CHECK_EXIT(tEncodeI16(pEncoder, pReq->trigger.stateWin.extend));
1,020,144!
2515
      break;
510,072✔
2516
    }
2517
    case WINDOW_TYPE_INTERVAL: {
634,928✔
2518
      TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pReq->trigger.sliding.overlap));
1,269,856!
2519
      break;
634,928✔
2520
    }
2521
    default: {
410,730✔
2522
      break;
410,730✔
2523
    }
2524
  }
2525

2526
_exit:
1,555,730✔
2527

2528
  if (code) {
1,555,730!
UNCOV
2529
    return code;
×
2530
  }
2531
  
2532
  return 0;
1,555,730✔
2533
}
2534

2535
int32_t tSerializeSCMCreateStreamReq(void *buf, int32_t bufLen, const SCMCreateStreamReq *pReq) {
857,112✔
2536
  SEncoder encoder = {0};
857,112✔
2537
  tEncoderInit(&encoder, buf, bufLen);
857,112✔
2538
  int32_t code = 0;
857,112✔
2539
  int32_t lino;
2540

2541
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
857,112!
2542

2543
  TAOS_CHECK_EXIT(tSerializeSCMCreateStreamReqImpl(&encoder, pReq));
857,112!
2544

2545
  tEndEncode(&encoder);
857,112✔
2546

2547
_exit:
857,112✔
2548
  if (code) {
857,112!
UNCOV
2549
    tEncoderClear(&encoder);
×
UNCOV
2550
    return code;
×
2551
  } else {
2552
    int32_t tlen = encoder.pos;
857,112✔
2553
    tEncoderClear(&encoder);
857,112✔
2554
    return tlen;
857,112✔
2555
  }
2556
  return 0;
2557
}
2558

2559

2560
int32_t tDeserializeSCMCreateStreamReqImpl(SDecoder *pDecoder, SCMCreateStreamReq *pReq) {
400,145✔
2561
  int32_t code = 0;
400,145✔
2562
  int32_t lino;
2563

2564
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
800,290!
2565

2566
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->name, NULL));
800,290!
2567
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->sql, NULL));
800,290!
2568
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->outDB, NULL));
800,290!
2569
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->streamDB, NULL));
800,290!
2570
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerDB, NULL));
800,290!
2571
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerTblName, NULL));
800,290!
2572
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->outTblName, NULL));
800,290!
2573

2574
  int32_t calcDbSize = 0;
400,145✔
2575
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &calcDbSize));
400,145!
2576
  pReq->calcDB = taosArrayInit(calcDbSize, POINTER_BYTES);
400,145✔
2577
  if (pReq->calcDB == NULL) {
400,145!
UNCOV
2578
    TAOS_CHECK_EXIT(terrno);
×
2579
  }
2580
  for (int32_t i = 0; i < calcDbSize; ++i) {
799,192✔
2581
    char *calcDb = NULL;
399,047✔
2582
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &calcDb));
399,047!
2583
    calcDb = taosStrndup(calcDb, TSDB_DB_FNAME_LEN);
399,047!
2584
    if (calcDb == NULL) {
399,047!
2585
      TAOS_CHECK_EXIT(terrno);
×
2586
    }
2587
    if (taosArrayPush(pReq->calcDB, &calcDb) == NULL) {
798,094!
UNCOV
2588
      taosMemoryFree(calcDb);
×
UNCOV
2589
      TAOS_CHECK_EXIT(terrno);
×
2590
    }
2591
  }
2592

2593
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igExists));
800,290!
2594
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerType));
800,290!
2595
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igDisorder));
800,290!
2596
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->deleteReCalc));
800,290!
2597
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->deleteOutTbl));
800,290!
2598
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->fillHistory));
800,290!
2599
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->fillHistoryFirst));
800,290!
2600
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->calcNotifyOnly));
800,290!
2601
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->lowLatencyCalc));
800,290!
2602
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->igNoDataTrigger));
800,290!
2603

2604
  int32_t addrSize = 0;
400,145✔
2605
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &addrSize));
400,145!
2606
  if (addrSize > 0) {
400,145✔
2607
    pReq->pNotifyAddrUrls = taosArrayInit(addrSize, POINTER_BYTES);
33,786✔
2608
    if (pReq->pNotifyAddrUrls == NULL) {
33,786!
UNCOV
2609
      TAOS_CHECK_EXIT(terrno);
×
2610
    }
2611
  }
2612
  for (int32_t i = 0; i < addrSize; ++i) {
433,981✔
2613
    char *url = NULL;
33,836✔
2614
    TAOS_CHECK_EXIT(tDecodeCStr(pDecoder, &url));
33,836!
2615
    url = taosStrndup(url, TSDB_STREAM_NOTIFY_URL_LEN);
33,836!
2616
    if (url == NULL) {
33,836!
UNCOV
2617
      TAOS_CHECK_EXIT(terrno);
×
2618
    }
2619
    if (taosArrayPush(pReq->pNotifyAddrUrls, &url) == NULL) {
67,672!
UNCOV
2620
      taosMemoryFree(url);
×
UNCOV
2621
      TAOS_CHECK_EXIT(terrno);
×
2622
    }
2623
  }
2624
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->notifyEventTypes));
800,290!
2625
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->addOptions));
800,290!
2626
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->notifyHistory));
800,290!
2627

2628
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerFilterCols, NULL));
800,290!
2629
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerCols, NULL));
800,290!
2630
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->partitionCols, NULL));
800,290!
2631

2632
  int32_t outColSize = 0;
400,145✔
2633
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outColSize));
400,145!
2634
  if (outColSize > 0) {
400,145✔
2635
    pReq->outCols = taosArrayInit_s(sizeof(SFieldWithOptions), outColSize);
399,047✔
2636
    if (pReq->outCols == NULL) {
399,047!
UNCOV
2637
      TAOS_CHECK_EXIT(terrno);
×
2638
    }
2639

2640
    for (int32_t i = 0; i < outColSize; ++i) {
2,087,198✔
2641
      SFieldWithOptions* pField = taosArrayGet(pReq->outCols, i);
1,688,151✔
2642
      TAOS_CHECK_EXIT(tDeserializeSFieldWithOptions(pDecoder, pField));
1,688,151!
2643
    }
2644
  }
2645

2646
  int32_t outTagSize = 0;
400,145✔
2647
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outTagSize));
400,145!
2648
  if (outTagSize > 0) {
400,145✔
2649
    pReq->outTags = taosArrayInit(outTagSize, sizeof(SFieldWithOptions));
250,016✔
2650
    if (pReq->outTags == NULL) {
250,016!
UNCOV
2651
      TAOS_CHECK_EXIT(terrno);
×
2652
    }
2653

2654
    for (int32_t i = 0; i < outTagSize; ++i) {
632,316✔
2655
      SFieldWithOptions field = {0};
382,300✔
2656
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &field.type));
382,300!
2657
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &field.flags));
382,300!
2658
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &field.bytes));
382,300!
2659
      TAOS_CHECK_EXIT(tDecodeCStrTo(pDecoder, field.name));
382,300!
2660
      if (taosArrayPush(pReq->outTags, &field) == NULL) {
764,600!
UNCOV
2661
        TAOS_CHECK_EXIT(terrno);
×
2662
      }
2663
    }
2664
  }
2665

2666
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->maxDelay));
800,290!
2667
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->fillHistoryStartTime));
800,290!
2668
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->watermark));
800,290!
2669
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->expiredTime));
800,290!
2670

2671
  switch (pReq->triggerType) {
400,145!
2672
    case WINDOW_TYPE_SESSION: {
8,502✔
2673
      // session trigger
2674
      TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->trigger.session.slotId));
17,004!
2675
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.session.sessionVal));
17,004!
2676
      break;
8,502✔
2677
    }
2678
      case WINDOW_TYPE_STATE: {
158,811✔
2679
        // state trigger
2680
        TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->trigger.stateWin.slotId));
317,622!
2681
        pReq->trigger.stateWin.extend = 0;
158,811✔
2682
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.stateWin.trueForDuration));
317,622!
2683
        break;
158,811✔
2684
      }
2685
      case WINDOW_TYPE_INTERVAL: {
182,028✔
2686
        // slide trigger
2687
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.intervalUnit));
364,056!
2688
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.slidingUnit));
364,056!
2689
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.offsetUnit));
364,056!
2690
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.soffsetUnit));
364,056!
2691
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.precision));
364,056!
2692
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.interval));
364,056!
2693
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.offset));
364,056!
2694
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.sliding));
364,056!
2695
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.sliding.soffset));
364,056!
2696
        break;
182,028✔
2697
      }
2698
      case WINDOW_TYPE_EVENT: {
29,902✔
2699
        // event trigger
2700
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.event.startCond, NULL));
59,804!
2701
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.event.endCond, NULL));
59,804!
2702
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.event.trueForDuration));
59,804!
2703
        break;
29,902✔
2704
      }
2705
      case WINDOW_TYPE_COUNT: {
11,354✔
2706
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.count.condCols, NULL));
22,708!
2707

2708
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.count.countVal));
22,708!
2709
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.count.sliding));
22,708!
2710
        break;
11,354✔
2711
      }
2712
      case WINDOW_TYPE_PERIOD: {
9,548✔
2713
        // period trigger
2714
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.precision));
19,096!
2715
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.periodUnit));
19,096!
2716
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.period.offsetUnit));
19,096!
2717
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.period.period));
19,096!
2718
        TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->trigger.period.offset));
19,096!
2719
        break;
9,548✔
2720
      }
UNCOV
2721
      default:
×
UNCOV
2722
        TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
×
2723
  }
2724

2725
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerTblType));
800,290!
2726
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->triggerTblUid));
800,290!
2727
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->triggerTblSuid));
800,290!
2728
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->vtableCalc));
800,290!
2729
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->outTblType));
800,290!
2730
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->outStbExists));
800,290!
2731
  TAOS_CHECK_EXIT(tDecodeU64(pDecoder, &pReq->outStbUid));
800,290!
2732
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->outStbSversion));
800,290!
2733
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->eventTypes));
800,290!
2734
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->flags));
800,290!
2735
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->tsmaId));
800,290!
2736
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->placeHolderBitmap));
800,290!
2737
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->calcTsSlotId));
800,290!
2738
  TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->triTsSlotId));
800,290!
2739

2740
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->triggerTblVgId));
800,290!
2741
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->outTblVgId));
800,290!
2742

2743
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerScanPlan, NULL));
800,290!
2744

2745
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->triggerHasPF));
800,290!
2746
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->triggerPrevFilter, NULL));
800,290!
2747

2748
  int32_t calcScanPlanListSize = 0;
400,145✔
2749
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &calcScanPlanListSize));
400,145!
2750
  if (calcScanPlanListSize > 0) {
400,145✔
2751
    pReq->calcScanPlanList = taosArrayInit(calcScanPlanListSize, sizeof(SStreamCalcScan));
399,047✔
2752
    if (pReq->calcScanPlanList == NULL) {
399,047!
UNCOV
2753
      TAOS_CHECK_EXIT(terrno);
×
2754
    }
2755
    for (int32_t i = 0; i < calcScanPlanListSize; ++i) {
920,626✔
2756
      SStreamCalcScan calcScan = {0};
521,579✔
2757
      int32_t         vgListSize = 0;
521,579✔
2758
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgListSize));
521,579!
2759
      if (vgListSize > 0) {
521,579!
2760
        calcScan.vgList = taosArrayInit(vgListSize, sizeof(int32_t));
521,579✔
2761
        if (calcScan.vgList == NULL) {
521,579!
UNCOV
2762
          TAOS_CHECK_EXIT(terrno);
×
2763
        }
2764
        for (int32_t j = 0; j < vgListSize; ++j) {
1,043,158✔
2765
          int32_t vgId = 0;
521,579✔
2766
          TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &vgId));
521,579!
2767
          if (taosArrayPush(calcScan.vgList, &vgId) == NULL) {
1,043,158!
UNCOV
2768
            TAOS_CHECK_EXIT(terrno);
×
2769
          }
2770
        }
2771
      }
2772
      TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &calcScan.readFromCache));
521,579!
2773
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&calcScan.scanPlan, NULL));
521,579!
2774
      if (taosArrayPush(pReq->calcScanPlanList, &calcScan) == NULL) {
1,043,158!
2775
        TAOS_CHECK_EXIT(terrno);
×
2776
      }
2777
    }
2778
  }
2779

2780
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->numOfCalcSubplan));
800,290!
2781
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->calcPlan, NULL));
800,290!
2782
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->subTblNameExpr, NULL));
800,290!
2783
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->tagValueExpr, NULL));
800,290!
2784

2785
  int32_t forceOutColsSize = 0;
400,145✔
2786
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &forceOutColsSize));
400,145!
2787
  if (forceOutColsSize > 0) {
400,145✔
2788
    pReq->forceOutCols = taosArrayInit(forceOutColsSize, sizeof(SStreamOutCol));
12,216✔
2789
    if (pReq->forceOutCols == NULL) {
12,216!
UNCOV
2790
      TAOS_CHECK_EXIT(terrno);
×
2791
    }
2792
    for (int32_t i = 0; i < forceOutColsSize; ++i) {
92,328✔
2793
      SStreamOutCol outCol = {0};
80,112✔
2794
      int64_t       exprLen = 0;
80,112✔
2795
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&outCol.expr, &exprLen));
80,112!
2796
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.type));
80,112!
2797
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.precision));
80,112!
2798
      TAOS_CHECK_EXIT(tDecodeU8(pDecoder, &outCol.type.scale));
80,112!
2799
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &outCol.type.bytes));
80,112!
2800
      if (taosArrayPush(pReq->forceOutCols, &outCol) == NULL) {
160,224!
UNCOV
2801
        TAOS_CHECK_EXIT(terrno);
×
2802
      }
2803
    }
2804
  }
2805

2806
  switch (pReq->triggerType) {
400,145✔
2807
    case WINDOW_TYPE_STATE: {
158,811✔
2808
      // state trigger
2809
      if (!tDecodeIsEnd(pDecoder)) {
158,811!
2810
        TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pReq->trigger.stateWin.expr, NULL));
317,622!
2811
      }
2812
      if (!tDecodeIsEnd(pDecoder)) {
158,811!
2813
        TAOS_CHECK_EXIT(tDecodeI16(pDecoder, &pReq->trigger.stateWin.extend));
317,622!
2814
      }
2815
      break;
158,811✔
2816
    }
2817
    case WINDOW_TYPE_INTERVAL: {
182,028✔
2818
      if (!tDecodeIsEnd(pDecoder)) {
182,028!
2819
        TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pReq->trigger.sliding.overlap));
364,056!
2820
      }
2821
      break;
182,028✔
2822
    }
2823
    default:
59,306✔
2824
      break;
59,306✔
2825
  }
2826

2827

2828
_exit:
400,145✔
2829

2830
  return code;
400,145✔
2831
}
2832

2833

2834
int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStreamReq *pReq) {
206,496✔
2835
  SDecoder decoder = {0};
206,496✔
2836
  tDecoderInit(&decoder, buf, bufLen);
206,496✔
2837
  int32_t code = 0;
206,496✔
2838
  int32_t lino;
2839

2840
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
206,496!
2841
  
2842
  TAOS_CHECK_EXIT(tDeserializeSCMCreateStreamReqImpl(&decoder, pReq));
206,496!
2843

2844
  tEndDecode(&decoder);
206,496✔
2845

2846
_exit:
206,496✔
2847

2848
  tDecoderClear(&decoder);
206,496✔
2849
  return code;
206,496✔
2850
}
2851

2852

2853
int32_t tSerializeSMDropStreamReq(void *buf, int32_t bufLen, const SMDropStreamReq *pReq) {
50,798✔
2854
  int32_t  code = 0;
50,798✔
2855
  int32_t  lino;
2856
  int32_t  tlen;
2857
  SEncoder encoder = {0};
50,798✔
2858
  tEncoderInit(&encoder, buf, bufLen);
50,798✔
2859

2860
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
50,798!
2861

2862
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
50,798!
2863
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
101,596!
2864
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
101,596!
2865

2866
  tEndEncode(&encoder);
50,798✔
2867

2868
_exit:
50,798✔
2869
  if (code) {
50,798!
UNCOV
2870
    tlen = code;
×
2871
  } else {
2872
    tlen = encoder.pos;
50,798✔
2873
  }
2874
  tEncoderClear(&encoder);
50,798✔
2875
  return tlen;
50,798✔
2876
}
2877

2878
int32_t tDeserializeSMDropStreamReq(void *buf, int32_t bufLen, SMDropStreamReq *pReq) {
13,016✔
2879
  SDecoder decoder = {0};
13,016✔
2880
  int32_t  code = 0;
13,016✔
2881
  int32_t  lino;
2882
  tDecoderInit(&decoder, buf, bufLen);
13,016✔
2883

2884
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
13,016!
2885
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
26,032!
2886
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
26,032!
2887

2888
  tEndDecode(&decoder);
13,016✔
2889

2890
_exit:
13,016✔
2891
  tDecoderClear(&decoder);
13,016✔
2892
  return code;
13,016✔
2893
}
2894

2895
void tFreeMDropStreamReq(SMDropStreamReq *pReq) {
38,415✔
2896
  taosMemoryFreeClear(pReq->name);
38,415!
2897
}
38,415✔
2898

2899
static FORCE_INLINE void tFreeStreamCalcScan(void* pScan) {
1,541,026✔
2900
  if (pScan == NULL) {
1,541,026!
UNCOV
2901
    return;
×
2902
  }
2903
  SStreamCalcScan *pCalcScan = (SStreamCalcScan *)pScan;
1,541,026✔
2904
  taosArrayDestroy(pCalcScan->vgList);
1,541,026✔
2905
  taosMemoryFreeClear(pCalcScan->scanPlan);
1,541,026!
2906
}
2907

2908
void tFreeStreamOutCol(void* pCol) {
163,719✔
2909
  if (pCol == NULL) {
163,719!
UNCOV
2910
    return;
×
2911
  }
2912
  SStreamOutCol *pOutCol = (SStreamOutCol *)pCol;
163,719✔
2913
  taosMemoryFreeClear(pOutCol->expr);
163,719!
2914
}
2915

2916

2917

2918
void tFreeSCMCreateStreamReq(SCMCreateStreamReq *pReq) {
1,299,287✔
2919
  if (NULL == pReq) {
1,299,287✔
2920
    return;
205,286✔
2921
  }
2922
  taosMemoryFreeClear(pReq->name);
1,094,001!
2923
  taosMemoryFreeClear(pReq->sql);
1,094,001!
2924
  taosMemoryFreeClear(pReq->streamDB);
1,094,001!
2925
  taosMemoryFreeClear(pReq->triggerDB);
1,094,001!
2926
  taosMemoryFreeClear(pReq->outDB);
1,094,001!
2927
  taosMemoryFreeClear(pReq->triggerTblName);
1,094,001!
2928
  taosMemoryFreeClear(pReq->outTblName);
1,094,001!
2929

2930
  taosArrayDestroyP(pReq->calcDB, NULL);
1,094,001✔
2931
  pReq->calcDB = NULL;
1,094,001✔
2932
  taosArrayDestroyP(pReq->pNotifyAddrUrls, NULL);
1,094,001✔
2933
  pReq->pNotifyAddrUrls = NULL;
1,094,001✔
2934

2935
  taosMemoryFreeClear(pReq->triggerFilterCols);
1,094,001!
2936
  taosMemoryFreeClear(pReq->triggerCols);
1,094,001!
2937
  taosMemoryFreeClear(pReq->partitionCols);
1,094,001!
2938

2939
  taosArrayDestroy(pReq->outTags);
1,094,001✔
2940
  pReq->outTags = NULL;
1,094,001✔
2941
  taosArrayDestroy(pReq->outCols);
1,094,001✔
2942
  pReq->outCols = NULL;
1,094,001✔
2943

2944
  switch (pReq->triggerType) {
1,094,001✔
2945
    case WINDOW_TYPE_STATE:
340,479✔
2946
      taosMemoryFreeClear(pReq->trigger.stateWin.expr);
340,479!
2947
      break;
340,479✔
2948
    case WINDOW_TYPE_EVENT:
95,324✔
2949
      taosMemoryFreeClear(pReq->trigger.event.startCond);
95,324!
2950
      taosMemoryFreeClear(pReq->trigger.event.endCond);
95,324!
2951
      break;
95,324✔
2952
    default:
658,198✔
2953
      break;
658,198✔
2954
  }
2955

2956
  taosMemoryFreeClear(pReq->triggerScanPlan);
1,094,001!
2957
  taosArrayDestroyEx(pReq->calcScanPlanList, tFreeStreamCalcScan);
1,094,001✔
2958
  pReq->calcScanPlanList = NULL;
1,094,001✔
2959
  taosMemoryFreeClear(pReq->triggerPrevFilter);
1,094,001!
2960

2961
  taosMemoryFreeClear(pReq->calcPlan);
1,094,001!
2962
  taosMemoryFreeClear(pReq->subTblNameExpr);
1,094,001!
2963
  taosMemoryFreeClear(pReq->tagValueExpr);
1,094,001!
2964
  taosArrayDestroyEx(pReq->forceOutCols, tFreeStreamOutCol);
1,094,001✔
2965
  pReq->forceOutCols = NULL;
1,094,001✔
2966
}
2967

2968
int32_t tCloneStreamCreateDeployPointers(SCMCreateStreamReq *pSrc, SCMCreateStreamReq** ppDst) {
166,196✔
2969
  int32_t code = 0, lino = 0;
166,196✔
2970
  if (NULL == pSrc) {
166,196!
UNCOV
2971
    return code;
×
2972
  } 
2973

2974
  void* p = NULL;
166,196✔
2975
  int32_t num = 0;
166,196✔
2976
  *ppDst = taosMemoryCalloc(1, sizeof(SCMCreateStreamReq));
166,196!
2977
  TSDB_CHECK_NULL(*ppDst, code, lino, _exit, terrno);
166,196!
2978

2979
  SCMCreateStreamReq* pDst = *ppDst;
166,196✔
2980

2981
  if (pSrc->outDB) {
166,196✔
2982
    pDst->outDB = COPY_STR(pSrc->outDB);
165,647!
2983
    TSDB_CHECK_NULL(pDst->outDB, code, lino, _exit, terrno);
165,647!
2984
  }
2985
  
2986
  if (pSrc->triggerTblName) {
166,196✔
2987
    pDst->triggerTblName = COPY_STR(pSrc->triggerTblName);
165,636!
2988
    TSDB_CHECK_NULL(pDst->triggerTblName, code, lino, _exit, terrno);
165,636!
2989
  }
2990
  
2991
  if (pSrc->outTblName) {
166,196✔
2992
    pDst->outTblName = COPY_STR(pSrc->outTblName);
165,647!
2993
    TSDB_CHECK_NULL(pDst->outTblName, code, lino, _exit, terrno);
165,647!
2994
  }
2995
  
2996
  if (pSrc->pNotifyAddrUrls) {
166,196✔
2997
    num = taosArrayGetSize(pSrc->pNotifyAddrUrls);
16,863✔
2998
    if (num > 0) {
16,863!
2999
      pDst->pNotifyAddrUrls = taosArrayInit(num, POINTER_BYTES);
16,863✔
3000
      TSDB_CHECK_NULL(pDst->pNotifyAddrUrls, code, lino, _exit, terrno);
16,863!
3001
    }
3002
    for (int32_t i = 0; i < num; ++i) {
33,726✔
3003
      p = taosStrdup(taosArrayGetP(pSrc->pNotifyAddrUrls, i));
16,863!
3004
      TSDB_CHECK_NULL(p, code, lino, _exit, terrno);
16,863!
3005
      TSDB_CHECK_NULL(taosArrayPush(pDst->pNotifyAddrUrls, &p), code, lino, _exit, terrno);
33,726!
3006
    }
3007
  }
3008
  
3009
  if (pSrc->triggerFilterCols) {
166,196✔
3010
    pDst->triggerFilterCols = COPY_STR(pSrc->triggerFilterCols);
10,964!
3011
    TSDB_CHECK_NULL(pDst->triggerFilterCols, code, lino, _exit, terrno);
10,964!
3012
  }
3013
  
3014
  if (pSrc->triggerCols) {
166,196✔
3015
    pDst->triggerCols = COPY_STR(pSrc->triggerCols);
162,344!
3016
    TSDB_CHECK_NULL(pDst->triggerCols, code, lino, _exit, terrno);
162,344!
3017
  }
3018
  
3019
  if (pSrc->partitionCols) {
166,196✔
3020
    pDst->partitionCols = COPY_STR(pSrc->partitionCols);
99,520!
3021
    TSDB_CHECK_NULL(pDst->partitionCols, code, lino, _exit, terrno);
99,520!
3022
  }
3023
  
3024
  if (pSrc->outCols) {
166,196✔
3025
    pDst->outCols = taosArrayDup(pSrc->outCols, NULL);
165,647✔
3026
    TSDB_CHECK_NULL(pDst->outCols, code, lino, _exit, terrno);
165,647!
3027
  }
3028
  
3029
  if (pSrc->outTags) {
166,196✔
3030
    pDst->outTags = taosArrayDup(pSrc->outTags, NULL);
99,520✔
3031
    TSDB_CHECK_NULL(pDst->outTags, code, lino, _exit, terrno);
99,520!
3032
  }
3033

3034
  pDst->triggerType = pSrc->triggerType;
166,196✔
3035
  
3036
  switch (pSrc->triggerType) {
166,196✔
3037
    case WINDOW_TYPE_STATE:
76,300✔
3038
      pDst->trigger.stateWin.slotId = pSrc->trigger.stateWin.slotId;
76,300✔
3039
      pDst->trigger.stateWin.extend = pSrc->trigger.stateWin.extend;
76,300✔
3040
      pDst->trigger.stateWin.trueForDuration = pSrc->trigger.stateWin.trueForDuration;
76,300✔
3041
      if (pSrc->trigger.stateWin.expr) {
76,300!
3042
        pDst->trigger.stateWin.expr = COPY_STR(pSrc->trigger.stateWin.expr);
76,300!
3043
        TSDB_CHECK_NULL(pDst->trigger.stateWin.expr, code, lino, _exit, terrno);
76,300!
3044
      }
3045
      break;
76,300✔
3046
    case WINDOW_TYPE_EVENT:
14,931✔
3047
      if (pSrc->trigger.event.startCond) {
14,931!
3048
        pDst->trigger.event.startCond = COPY_STR(pSrc->trigger.event.startCond);
14,931!
3049
        TSDB_CHECK_NULL(pDst->trigger.event.startCond, code, lino, _exit, terrno);
14,931!
3050
      }
3051
      
3052
      if (pSrc->trigger.event.endCond) {
14,931!
3053
        pDst->trigger.event.endCond = COPY_STR(pSrc->trigger.event.endCond);
14,931!
3054
        TSDB_CHECK_NULL(pDst->trigger.event.endCond, code, lino, _exit, terrno);
14,931!
3055
      }
3056
      pDst->trigger.event.trueForDuration = pSrc->trigger.event.trueForDuration;
14,931✔
3057
      break;
14,931✔
3058
    default:
74,965✔
3059
      pDst->trigger = pSrc->trigger;
74,965✔
3060
      break;
74,965✔
3061
  }
3062

3063

3064
  if (pSrc->triggerScanPlan) {
166,196✔
3065
    pDst->triggerScanPlan = COPY_STR(pSrc->triggerScanPlan);
165,636!
3066
    TSDB_CHECK_NULL(pDst->triggerScanPlan, code, lino, _exit, terrno);
165,636!
3067
  }
3068
  
3069
  if (pSrc->calcScanPlanList) {
166,196✔
3070
    num = taosArrayGetSize(pSrc->calcScanPlanList);
165,647✔
3071
    if (num > 0) {
165,647!
3072
      pDst->calcScanPlanList = taosArrayInit(num, sizeof(SStreamCalcScan));
165,647✔
3073
      TSDB_CHECK_NULL(pDst->calcScanPlanList, code, lino, _exit, terrno);
165,647!
3074
    }
3075
    for (int32_t i = 0; i < num; ++i) {
382,912✔
3076
      SStreamCalcScan* sscan = taosArrayGet(pSrc->calcScanPlanList, i);
217,265✔
3077
      SStreamCalcScan  dscan = {.readFromCache = sscan->readFromCache};
217,265✔
3078

3079
      dscan.vgList = taosArrayDup(sscan->vgList, NULL);
217,265✔
3080
      TSDB_CHECK_NULL(dscan.vgList, code, lino, _exit, terrno);
217,265!
3081

3082
      dscan.scanPlan = COPY_STR(sscan->scanPlan);
217,265!
3083
      TSDB_CHECK_NULL(dscan.scanPlan, code, lino, _exit, terrno);
217,265!
3084
      
3085
      TSDB_CHECK_NULL(taosArrayPush(pDst->calcScanPlanList, &dscan), code, lino, _exit, terrno);
434,530!
3086
    }
3087
  }
3088
  
3089
  if (pSrc->triggerPrevFilter) {
166,196!
UNCOV
3090
    pDst->triggerPrevFilter = COPY_STR(pSrc->triggerPrevFilter);
×
UNCOV
3091
    TSDB_CHECK_NULL(pDst->triggerPrevFilter, code, lino, _exit, terrno);
×
3092
  }
3093
  
3094
  if (pSrc->calcPlan) {
166,196✔
3095
    pDst->calcPlan = COPY_STR(pSrc->calcPlan);
165,647!
3096
    TSDB_CHECK_NULL(pDst->calcPlan, code, lino, _exit, terrno);
165,647!
3097
  }
3098
  
3099
  if (pSrc->subTblNameExpr) {
166,196✔
3100
    pDst->subTblNameExpr = COPY_STR(pSrc->subTblNameExpr);
99,520!
3101
    TSDB_CHECK_NULL(pDst->subTblNameExpr, code, lino, _exit, terrno);
99,520!
3102
  }
3103
  
3104
  if (pSrc->tagValueExpr) {
166,196✔
3105
    pDst->tagValueExpr = COPY_STR(pSrc->tagValueExpr);
99,520!
3106
    TSDB_CHECK_NULL(pDst->tagValueExpr, code, lino, _exit, terrno);
99,520!
3107
  }
3108
  
3109
  if (pSrc->forceOutCols) {
166,196✔
3110
    num = taosArrayGetSize(pSrc->forceOutCols);
6,108✔
3111
    if (num > 0) {
6,108!
3112
      pDst->forceOutCols = taosArrayInit(num, sizeof(SStreamOutCol));
6,108✔
3113
      TSDB_CHECK_NULL(pDst->forceOutCols, code, lino, _exit, terrno);
6,108!
3114
    }
3115
    for (int32_t i = 0; i < num; ++i) {
46,164✔
3116
      SStreamOutCol* scol = taosArrayGet(pSrc->forceOutCols, i);
40,056✔
3117
      SStreamOutCol  dcol = {.type = scol->type};
40,056✔
3118

3119
      dcol.expr = COPY_STR(scol->expr);
40,056!
3120
      TSDB_CHECK_NULL(dcol.expr, code, lino, _exit, terrno);
40,056!
3121
      
3122
      TSDB_CHECK_NULL(taosArrayPush(pDst->forceOutCols, &dcol), code, lino, _exit, terrno);
80,112!
3123
    }
3124
  }
3125

3126
  pDst->triggerTblUid = pSrc->triggerTblUid;
166,196✔
3127
  pDst->triggerTblType = pSrc->triggerTblType;
166,196✔
3128
  pDst->deleteReCalc = pSrc->deleteReCalc;
166,196✔
3129
  pDst->deleteOutTbl = pSrc->deleteOutTbl;
166,196✔
3130
  
3131
_exit:
166,196✔
3132

3133
  if (code) {
166,196!
UNCOV
3134
    tFreeSCMCreateStreamReq(pDst);
×
UNCOV
3135
    uError("%s failed at line %d since %s", __FUNCTION__, lino, tstrerror(code));
×
3136
  }
3137

3138
  return code;
166,196✔
3139
}
3140

3141

3142
int32_t tSerializeSMPauseStreamReq(void *buf, int32_t bufLen, const SMPauseStreamReq *pReq) {
26,076✔
3143
  int32_t  code = 0;
26,076✔
3144
  int32_t  lino;
3145
  int32_t  tlen;
3146
  SEncoder encoder = {0};
26,076✔
3147
  tEncoderInit(&encoder, buf, bufLen);
26,076✔
3148
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
26,076!
3149

3150
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
26,076!
3151
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
52,152!
3152
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
52,152!
3153
  tEndEncode(&encoder);
26,076✔
3154

3155
_exit:
26,076✔
3156
  if (code) {
26,076!
UNCOV
3157
    tlen = code;
×
3158
  } else {
3159
    tlen = encoder.pos;
26,076✔
3160
  }
3161
  tEncoderClear(&encoder);
26,076✔
3162
  return tlen;
26,076✔
3163
}
3164

3165
int32_t tDeserializeSMPauseStreamReq(void *buf, int32_t bufLen, SMPauseStreamReq *pReq) {
11,479✔
3166
  SDecoder decoder = {0};
11,479✔
3167
  int32_t  code = 0;
11,479✔
3168
  int32_t  lino;
3169

3170
  tDecoderInit(&decoder, buf, bufLen);
11,479✔
3171
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
11,479!
3172
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
22,958!
3173
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
22,958!
3174
  tEndDecode(&decoder);
11,479✔
3175

3176
_exit:
11,479✔
3177
  tDecoderClear(&decoder);
11,479✔
3178
  return code;
11,479✔
3179
}
3180

3181
void tFreeMPauseStreamReq(SMPauseStreamReq *pReq) {
13,038✔
3182
  taosMemoryFreeClear(pReq->name);
13,038!
3183
}
13,038✔
3184

3185
int32_t tSerializeSMResumeStreamReq(void *buf, int32_t bufLen, const SMResumeStreamReq *pReq) {
26,076✔
3186
  SEncoder encoder = {0};
26,076✔
3187
  int32_t  code = 0;
26,076✔
3188
  int32_t  lino;
3189
  int32_t  tlen;
3190
  tEncoderInit(&encoder, buf, bufLen);
26,076✔
3191
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
26,076!
3192
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
26,076!
3193
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
52,152!
3194
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igNotExists));
52,152!
3195
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->igUntreated));
52,152!
3196
  tEndEncode(&encoder);
26,076✔
3197

3198
_exit:
26,076✔
3199
  if (code) {
26,076!
UNCOV
3200
    tlen = code;
×
3201
  } else {
3202
    tlen = encoder.pos;
26,076✔
3203
  }
3204
  tEncoderClear(&encoder);
26,076✔
3205
  return tlen;
26,076✔
3206
}
3207

3208
int32_t tDeserializeSMResumeStreamReq(void *buf, int32_t bufLen, SMResumeStreamReq *pReq) {
11,479✔
3209
  SDecoder decoder = {0};
11,479✔
3210
  int32_t  code = 0;
11,479✔
3211
  int32_t  lino;
3212

3213
  tDecoderInit(&decoder, buf, bufLen);
11,479✔
3214
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
11,479!
3215
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
22,958!
3216
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igNotExists));
22,958!
3217
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->igUntreated));
22,958!
3218
  tEndDecode(&decoder);
11,479✔
3219

3220
_exit:
11,479✔
3221
  tDecoderClear(&decoder);
11,479✔
3222
  return code;
11,479✔
3223
}
3224

3225
void tFreeMResumeStreamReq(SMResumeStreamReq *pReq) {
13,038✔
3226
  taosMemoryFreeClear(pReq->name);
13,038!
3227
}
13,038✔
3228

3229
int32_t tSerializeSMRecalcStreamReq(void *buf, int32_t bufLen, const SMRecalcStreamReq *pReq) {
48,002✔
3230
  SEncoder encoder = {0};
48,002✔
3231
  int32_t  code = 0;
48,002✔
3232
  int32_t  lino;
3233
  int32_t  tlen;
3234
  tEncoderInit(&encoder, buf, bufLen);
48,002✔
3235
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
48,002!
3236
  int32_t nameLen = pReq->name == NULL ? 0 : (int32_t)strlen(pReq->name) + 1;
48,002!
3237
  TAOS_CHECK_EXIT(tEncodeBinary(&encoder, pReq->name, nameLen));
96,004!
3238
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->calcAll));
96,004!
3239
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->timeRange.skey));
96,004!
3240
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->timeRange.ekey));
96,004!
3241
  tEndEncode(&encoder);
48,002✔
3242

3243
_exit:
48,002✔
3244
  if (code) {
48,002!
UNCOV
3245
    tlen = code;
×
3246
  } else {
3247
    tlen = encoder.pos;
48,002✔
3248
  }
3249
  tEncoderClear(&encoder);
48,002✔
3250
  return tlen;
48,002✔
3251
}
3252

3253
int32_t tDeserializeSMRecalcStreamReq(void *buf, int32_t bufLen, SMRecalcStreamReq *pReq) {
18,856✔
3254
  SDecoder decoder = {0};
18,856✔
3255
  int32_t  code = 0;
18,856✔
3256
  int32_t  lino;
3257

3258
  tDecoderInit(&decoder, buf, bufLen);
18,856✔
3259
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
18,856!
3260

3261
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void**)&pReq->name, NULL));
37,712!
3262
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->calcAll));
37,712!
3263
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->timeRange.skey));
37,712!
3264
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->timeRange.ekey));
37,712!
3265
  tEndDecode(&decoder);
18,856✔
3266

3267
_exit:
18,856✔
3268
  tDecoderClear(&decoder);
18,856✔
3269
  return code;
18,856✔
3270
}
3271

3272
void tFreeMRecalcStreamReq(SMRecalcStreamReq *pReq) {
42,857✔
3273
  taosMemoryFreeClear(pReq->name);
42,857!
3274
}
42,857✔
3275

3276
static int32_t tEncodeStreamProgressReq(SEncoder *pEncoder, const SStreamProgressReq *pReq) {
254,334✔
3277
  int32_t code = 0;
254,334✔
3278
  int32_t lino;
3279

3280
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->streamId));
508,668!
3281
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pReq->taskId));
508,668!
3282
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pReq->fetchIdx));
508,668!
3283

3284
_exit:
254,334✔
3285
  return code;
254,334✔
3286
}
3287

3288
int32_t tSerializeStreamProgressReq(void *buf, int32_t bufLen, const SStreamProgressReq *pReq) {
254,334✔
3289
  SEncoder encoder = {0};
254,334✔
3290
  int32_t  code = 0;
254,334✔
3291
  int32_t  lino;
3292
  int32_t  tlen;
3293
  tEncoderInit(&encoder, buf, bufLen);
254,334✔
3294

3295
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
254,334!
3296
  TAOS_CHECK_EXIT(tEncodeStreamProgressReq(&encoder, pReq));
254,334!
3297

3298
  tEndEncode(&encoder);
254,334✔
3299

3300
_exit:
254,334✔
3301
  if (code) {
254,334!
UNCOV
3302
    tlen = code;
×
3303
  } else {
3304
    tlen = encoder.pos;
254,334✔
3305
  }
3306
  tEncoderClear(&encoder);
254,334✔
3307
  return tlen;
254,334✔
3308
}
3309

UNCOV
3310
static int32_t tDecodeStreamProgressReq(SDecoder *pDecoder, SStreamProgressReq *pReq) {
×
UNCOV
3311
  int32_t code = 0;
×
3312
  int32_t lino;
3313

UNCOV
3314
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->streamId));
×
UNCOV
3315
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pReq->taskId));
×
UNCOV
3316
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pReq->fetchIdx));
×
3317

UNCOV
3318
_exit:
×
UNCOV
3319
  return code;
×
3320
}
3321

UNCOV
3322
int32_t tDeserializeStreamProgressReq(void *buf, int32_t bufLen, SStreamProgressReq *pReq) {
×
UNCOV
3323
  SDecoder decoder = {0};
×
UNCOV
3324
  int32_t  code = 0;
×
3325
  int32_t  lino;
3326

UNCOV
3327
  tDecoderInit(&decoder, (char *)buf, bufLen);
×
3328

3329
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
×
3330
  TAOS_CHECK_EXIT(tDecodeStreamProgressReq(&decoder, pReq));
×
3331

UNCOV
3332
  tEndDecode(&decoder);
×
3333

3334
_exit:
×
UNCOV
3335
  tDecoderClear(&decoder);
×
UNCOV
3336
  return code;
×
3337
}
3338

3339
static int32_t tEncodeStreamProgressRsp(SEncoder *pEncoder, const SStreamProgressRsp *pRsp) {
×
UNCOV
3340
  int32_t code = 0;
×
3341
  int32_t lino;
3342

UNCOV
3343
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->streamId));
×
3344
  TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pRsp->fillHisFinished));
×
3345
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pRsp->progressDelay));
×
UNCOV
3346
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->fetchIdx));
×
3347

UNCOV
3348
_exit:
×
3349
  return code;
×
3350
}
3351

UNCOV
3352
int32_t tSerializeStreamProgressRsp(void *buf, int32_t bufLen, const SStreamProgressRsp *pRsp) {
×
UNCOV
3353
  SEncoder encoder = {0};
×
3354
  int32_t  code = 0;
×
3355
  int32_t  lino;
3356
  int32_t  tlen;
UNCOV
3357
  tEncoderInit(&encoder, buf, bufLen);
×
3358

3359
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
×
3360
  TAOS_CHECK_EXIT(tEncodeStreamProgressRsp(&encoder, pRsp));
×
3361

UNCOV
3362
  tEndEncode(&encoder);
×
3363

3364
_exit:
×
UNCOV
3365
  if (code) {
×
UNCOV
3366
    tlen = code;
×
3367
  } else {
3368
    tlen = encoder.pos;
×
3369
  }
UNCOV
3370
  tEncoderClear(&encoder);
×
UNCOV
3371
  return tlen;
×
3372
}
3373

3374
static int32_t tDecodeStreamProgressRsp(SDecoder *pDecoder, SStreamProgressRsp *pRsp) {
127,167✔
3375
  int32_t code = 0;
127,167✔
3376
  int32_t lino;
3377

3378
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->streamId));
254,334!
3379
  TAOS_CHECK_EXIT(tDecodeI8(pDecoder, (int8_t *)&pRsp->fillHisFinished));
254,334!
3380
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pRsp->progressDelay));
254,334!
3381
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->fetchIdx));
254,334!
3382

3383
_exit:
127,167✔
3384
  return code;
127,167✔
3385
}
3386

3387
int32_t tDeserializeSStreamProgressRsp(void *buf, int32_t bufLen, SStreamProgressRsp *pRsp) {
127,167✔
3388
  SDecoder decoder = {0};
127,167✔
3389
  int32_t  code = 0;
127,167✔
3390
  int32_t  lino;
3391

3392
  tDecoderInit(&decoder, buf, bufLen);
127,167✔
3393

3394
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
127,167!
3395
  TAOS_CHECK_EXIT(tDecodeStreamProgressRsp(&decoder, pRsp));
127,167!
3396

3397
  tEndDecode(&decoder);
127,167✔
3398

3399
_exit:
127,167✔
3400
  tDecoderClear(&decoder);
127,167✔
3401
  return code;
127,167✔
3402
}
3403

3404
int32_t tSerializeSTriggerOrigTableInfoRsp(void* buf, int32_t bufLen, const SSTriggerOrigTableInfoRsp* pRsp){
90,936✔
3405
  SEncoder encoder = {0};
90,936✔
3406
  int32_t  code = TSDB_CODE_SUCCESS;
90,936✔
3407
  int32_t  lino = 0;
90,936✔
3408
  int32_t  tlen = 0;
90,936✔
3409

3410
  tEncoderInit(&encoder, buf, bufLen);
90,936✔
3411
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
90,936!
3412

3413
  int32_t size = taosArrayGetSize(pRsp->cols);
90,936!
3414
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
90,936!
3415
  for (int32_t i = 0; i < size; ++i) {
242,928✔
3416
    OTableInfoRsp* oInfo = taosArrayGet(pRsp->cols, i);
151,992✔
3417
    if (oInfo == NULL) {
151,992!
UNCOV
3418
      uError("col id is NULL at index %d", i);
×
UNCOV
3419
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3420
      goto _exit;
×
3421
    }
3422
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, oInfo->suid));
303,984!
3423
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, oInfo->uid));
303,984!
3424
    TAOS_CHECK_EXIT(tEncodeI16(&encoder, oInfo->cid));
303,984!
3425
  }
3426

3427
  tEndEncode(&encoder);
90,936✔
3428

3429
_exit:
90,936✔
3430
  if (code != TSDB_CODE_SUCCESS) {
90,936!
UNCOV
3431
    tlen = code;
×
3432
  } else {
3433
    tlen = encoder.pos;
90,936✔
3434
  }
3435
  tEncoderClear(&encoder);
90,936✔
3436
  return tlen;
90,936✔
3437
}
3438

3439
int32_t tDserializeSTriggerOrigTableInfoRsp(void* buf, int32_t bufLen, SSTriggerOrigTableInfoRsp* pRsp){
45,468✔
3440
  SDecoder decoder = {0};
45,468✔
3441
  int32_t  code = TSDB_CODE_SUCCESS;
45,468✔
3442
  int32_t  lino = 0;
45,468✔
3443

3444
  tDecoderInit(&decoder, buf, bufLen);
45,468✔
3445
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
45,468!
3446

3447
  int32_t size = 0;
45,468✔
3448
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
45,468!
3449
  pRsp->cols = taosArrayInit(size, sizeof(OTableInfoRsp));
45,468✔
3450
  if (pRsp->cols == NULL) {
45,468!
UNCOV
3451
    code = terrno;
×
UNCOV
3452
    uError("failed to allocate memory for cids, size: %d, errno: %d", size, code);
×
UNCOV
3453
    goto _exit;
×
3454
  }
3455
  for (int32_t i = 0; i < size; ++i) {
121,464✔
3456
    OTableInfoRsp* oInfo = taosArrayReserve(pRsp->cols, 1);
75,996✔
3457
    if (oInfo == NULL) {
75,996!
UNCOV
3458
      code = terrno;
×
UNCOV
3459
      uError("failed to reserve memory for OTableInfo, size: %d, errno: %d", size, code);
×
UNCOV
3460
      goto _exit;
×
3461
    }
3462
    TAOS_CHECK_RETURN(tDecodeI64(&decoder, &oInfo->suid));
151,992!
3463
    TAOS_CHECK_RETURN(tDecodeI64(&decoder, &oInfo->uid));
151,992!
3464
    TAOS_CHECK_RETURN(tDecodeI16(&decoder, &oInfo->cid));
151,992!
3465
  }
3466

3467
  tEndDecode(&decoder);
45,468✔
3468

3469
_exit:
45,468✔
3470
  tDecoderClear(&decoder);
45,468✔
3471
  return code;
45,468✔
3472
}
3473

3474
void    tDestroySTriggerOrigTableInfoRsp(SSTriggerOrigTableInfoRsp* pRsp){
12,550,854✔
3475
  taosArrayDestroy(pRsp->cols);
12,550,854✔
3476
}
12,551,967✔
3477

3478
void tDestroySTriggerPullRequest(SSTriggerPullRequestUnion* pReq) {
28,871,786✔
3479
  if (pReq == NULL) return;
28,871,786!
3480
  if (pReq->base.type == STRIGGER_PULL_WAL_DATA_NEW || pReq->base.type == STRIGGER_PULL_WAL_CALC_DATA_NEW) {
31,105,147✔
3481
    SSTriggerWalDataNewRequest* pRequest = (SSTriggerWalDataNewRequest*)pReq;
2,233,986✔
3482
    taosArrayDestroy(pRequest->versions);
2,233,986✔
3483
    tSimpleHashCleanup(pRequest->ranges);
2,236,141✔
3484
  } else if (pReq->base.type == STRIGGER_PULL_TSDB_DATA) {
26,638,909✔
3485
    SSTriggerTsdbDataRequest* pRequest = (SSTriggerTsdbDataRequest*)pReq;
81,196✔
3486
    if (pRequest->cids != NULL) {
81,196!
3487
      taosArrayDestroy(pRequest->cids);
81,196✔
3488
      pRequest->cids = NULL;
80,637✔
3489
    }
3490
  } else if (pReq->base.type == STRIGGER_PULL_VTABLE_INFO) {
26,555,034✔
3491
    SSTriggerVirTableInfoRequest* pRequest = (SSTriggerVirTableInfoRequest*)pReq;
196,699✔
3492
    if (pRequest->cids != NULL) {
196,699!
3493
      taosArrayDestroy(pRequest->cids);
196,699✔
3494
      pRequest->cids = NULL;
196,160✔
3495
    }
3496
  } else if (pReq->base.type == STRIGGER_PULL_VTABLE_PSEUDO_COL) {
26,352,409✔
3497
    SSTriggerVirTablePseudoColRequest *pRequest = (SSTriggerVirTablePseudoColRequest*)pReq;
149,907✔
3498
    if (pRequest->cids != NULL) {
149,907!
3499
      taosArrayDestroy(pRequest->cids);
149,907✔
3500
      pRequest->cids = NULL;
149,907✔
3501
    }
3502
  } else if (pReq->base.type == STRIGGER_PULL_OTABLE_INFO) {
26,205,113✔
3503
    SSTriggerOrigTableInfoRequest* pRequest = (SSTriggerOrigTableInfoRequest*)pReq;
45,468✔
3504
    if (pRequest->cols != NULL) {
45,468!
3505
      taosArrayDestroy(pRequest->cols);
45,468✔
3506
      pRequest->cols = NULL;
45,468✔
3507
    }
3508
  } else if (pReq->base.type == STRIGGER_PULL_SET_TABLE) {
26,160,188✔
3509
    SSTriggerSetTableRequest* pRequest = (SSTriggerSetTableRequest*)pReq;
45,468✔
3510
    tSimpleHashCleanup(pRequest->uidInfoTrigger);
45,468✔
3511
    tSimpleHashCleanup(pRequest->uidInfoCalc);
45,468✔
3512
  }
3513
}
3514

3515
int32_t encodeColsArray(SEncoder* encoder, SArray* cids) {
855,604✔
3516
  int32_t  code = TSDB_CODE_SUCCESS;
855,604✔
3517
  int32_t  lino = 0;
855,604✔
3518
  int32_t size = taosArrayGetSize(cids);
855,604!
3519
  TAOS_CHECK_EXIT(tEncodeI32(encoder, size));
855,604!
3520
  for (int32_t i = 0; i < size; ++i) {
2,598,330✔
3521
    col_id_t* pColId = taosArrayGet(cids, i);
1,742,172✔
3522
    if (pColId == NULL) {
1,742,172!
UNCOV
3523
      uError("col id is NULL at index %d", i);
×
UNCOV
3524
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3525
      goto _exit;
×
3526
    }
3527
    TAOS_CHECK_EXIT(tEncodeI16(encoder, *pColId));
3,484,898!
3528
  }
3529
  _exit:
856,158✔
3530

3531
  return code;
856,158✔
3532
}
3533

3534
int32_t decodeColsArray(SDecoder* decoder, SArray** cids) {
427,802✔
3535
  int32_t code = TSDB_CODE_SUCCESS;
427,802✔
3536
  int32_t lino = 0;
427,802✔
3537
  int32_t size = 0;
427,802✔
3538

3539
  TAOS_CHECK_EXIT(tDecodeI32(decoder, &size));
427,802!
3540
  if (size > 0){
427,802!
3541
    *cids = taosArrayInit(size, sizeof(col_id_t));
427,802✔
3542
    if (*cids == NULL) {
427,802!
UNCOV
3543
      code = terrno;
×
UNCOV
3544
      uError("failed to allocate memory for cids, size: %d, errno: %d", size, code);
×
UNCOV
3545
      goto _exit;
×
3546
    }
3547
  
3548
    for (int32_t i = 0; i < size; ++i) {
1,299,165✔
3549
      col_id_t* pColId = taosArrayReserve(*cids, 1);
871,363✔
3550
      if (pColId == NULL) {
871,363!
UNCOV
3551
        code = terrno;
×
UNCOV
3552
        uError("failed to reserve memory for col id at index %d, errno: %d", i, code);
×
UNCOV
3553
        goto _exit;
×
3554
      }
3555
      TAOS_CHECK_RETURN(tDecodeI16(decoder, pColId));
871,363!
3556
    }  
3557
  }
3558
  
3559
_exit:
427,802✔
3560
  if (code != TSDB_CODE_SUCCESS) {
427,802!
UNCOV
3561
    taosArrayDestroy(*cids);
×
UNCOV
3562
    *cids = NULL;
×
3563
  }
3564
  return code;
427,802✔
3565
}
3566

3567
static int32_t encodeSetTableMapInfo(SEncoder* encoder, SSHashObj* pInfo) {
181,333✔
3568
  int32_t  code = TSDB_CODE_SUCCESS;
181,333✔
3569
  int32_t  lino = 0;
181,333✔
3570
  int32_t size = tSimpleHashGetSize(pInfo);
181,333✔
3571
  TAOS_CHECK_EXIT(tEncodeI32(encoder, size));
181,333!
3572
  int32_t iter = 0;
181,333✔
3573
  void*   px = tSimpleHashIterate(pInfo, NULL, &iter);
181,333✔
3574
  while (px != NULL) {
532,078✔
3575
    int64_t* uid = tSimpleHashGetKey(px, NULL);
350,206✔
3576
    TAOS_CHECK_EXIT(tEncodeI64(encoder, *uid));
700,412!
3577
    TAOS_CHECK_EXIT(tEncodeI64(encoder, *(uid + 1)));
700,412!
3578
    SSHashObj* info = *(SSHashObj**)px;
350,206✔
3579
    int32_t len = tSimpleHashGetSize(info);
350,206✔
3580
    TAOS_CHECK_EXIT(tEncodeI32(encoder, len));
350,206!
3581
    int32_t iter1 = 0;
350,206✔
3582
    void*   px1 = tSimpleHashIterate(info, NULL, &iter1);
350,206✔
3583
    while (px1 != NULL) {
1,202,816✔
3584
      int16_t* slot = tSimpleHashGetKey(px1, NULL);
852,610✔
3585
      int16_t* cid = (int16_t*)px1;
852,610✔
3586
      TAOS_CHECK_EXIT(tEncodeI16(encoder, *slot));
1,705,220!
3587
      TAOS_CHECK_EXIT(tEncodeI16(encoder, *cid));
1,705,220!
3588

3589
      px1 = tSimpleHashIterate(info, px1, &iter1);
852,610✔
3590
    }
3591

3592
    px = tSimpleHashIterate(pInfo, px, &iter);
350,206✔
3593
  }
3594
  
3595
_exit:
181,872✔
3596
  return code;
181,872✔
3597
}
3598

3599
int32_t tSerializeSTriggerPullRequest(void* buf, int32_t bufLen, const SSTriggerPullRequest* pReq) {
58,085,490✔
3600
  SEncoder encoder = {0};
58,085,490✔
3601
  int32_t  code = TSDB_CODE_SUCCESS;
58,092,190✔
3602
  int32_t  lino = 0;
58,092,190✔
3603
  int32_t  tlen = 0;
58,092,190✔
3604

3605
  tEncoderInit(&encoder, buf, bufLen);
58,092,190✔
3606
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
58,087,168!
3607

3608
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->type));
116,173,343!
3609
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
116,147,882!
3610
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->readerTaskId));
116,165,510!
3611
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
116,174,963!
3612

3613
  switch (pReq->type) {
58,085,001!
3614
    case STRIGGER_PULL_SET_TABLE: {
90,936✔
3615
      SSTriggerSetTableRequest* pRequest = (SSTriggerSetTableRequest*)pReq;
90,936✔
3616
      TAOS_CHECK_EXIT(encodeSetTableMapInfo(&encoder, pRequest->uidInfoTrigger));
90,936!
3617
      TAOS_CHECK_EXIT(encodeSetTableMapInfo(&encoder, pRequest->uidInfoCalc));
90,936!
3618
      break;
90,936✔
3619
    }
3620
    case STRIGGER_PULL_LAST_TS: {
456,836✔
3621
      break;
456,836✔
3622
    }
3623
    case STRIGGER_PULL_FIRST_TS: {
389,109✔
3624
      SSTriggerFirstTsRequest* pRequest = (SSTriggerFirstTsRequest*)pReq;
389,109✔
3625
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
778,777!
3626
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
778,777!
3627
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
778,218!
3628
      break;
389,109✔
3629
    }
3630
    case STRIGGER_PULL_TSDB_META: {
819,114✔
3631
      SSTriggerTsdbMetaRequest* pRequest = (SSTriggerTsdbMetaRequest*)pReq;
819,114✔
3632
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
1,638,228!
3633
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->endTime));
1,638,228!
3634
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
1,638,228!
3635
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
1,638,228!
3636
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
1,638,228!
3637
      break;
819,114✔
3638
    }
UNCOV
3639
    case STRIGGER_PULL_TSDB_META_NEXT: {
×
UNCOV
3640
      break;
×
3641
    }
3642
    case STRIGGER_PULL_TSDB_TS_DATA: {
30,484✔
3643
      SSTriggerTsdbTsDataRequest* pRequest = (SSTriggerTsdbTsDataRequest*)pReq;
30,484✔
3644
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->suid));
60,968!
3645
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
60,968!
3646
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
60,968!
3647
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
60,968!
3648
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
60,968!
3649
      break;
30,484✔
3650
    }
3651
    case STRIGGER_PULL_TSDB_TRIGGER_DATA: {
156,351✔
3652
      SSTriggerTsdbTriggerDataRequest* pRequest = (SSTriggerTsdbTriggerDataRequest*)pReq;
156,351✔
3653
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->startTime));
312,702!
3654
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
313,251!
3655
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
313,251!
3656
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
312,702!
3657
      break;
156,351✔
3658
    }
3659
    case STRIGGER_PULL_TSDB_TRIGGER_DATA_NEXT: {
169,186✔
3660
      break;
169,186✔
3661
    }
3662
    case STRIGGER_PULL_TSDB_CALC_DATA: {
30,634,218✔
3663
      SSTriggerTsdbCalcDataRequest* pRequest = (SSTriggerTsdbCalcDataRequest*)pReq;
30,634,218✔
3664
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
61,268,436!
3665
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
61,268,436!
3666
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
61,268,436!
3667
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
61,268,436!
3668
      break;
30,634,218✔
3669
    }
UNCOV
3670
    case STRIGGER_PULL_TSDB_CALC_DATA_NEXT: {
×
UNCOV
3671
      break;
×
3672
    }
3673
    case STRIGGER_PULL_TSDB_DATA: {
162,392✔
3674
      SSTriggerTsdbDataRequest* pRequest = (SSTriggerTsdbDataRequest*)pReq;
162,392✔
3675
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->suid));
324,784!
3676
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
324,784!
3677
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->skey));
324,784!
3678
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ekey));
324,784!
3679
      TAOS_CHECK_EXIT(encodeColsArray(&encoder, pRequest->cids));
162,392!
3680
      TAOS_CHECK_EXIT(tEncodeI8(&encoder, pRequest->order));
324,784!
3681
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ver));
324,784!
3682
      break;
162,392✔
3683
    }
UNCOV
3684
    case STRIGGER_PULL_TSDB_DATA_NEXT: {
×
3685
      break;
×
3686
    }
3687
    case STRIGGER_PULL_WAL_META_NEW: {
11,226,442✔
3688
      SSTriggerWalMetaNewRequest* pRequest = (SSTriggerWalMetaNewRequest*)pReq;
11,226,442✔
3689
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->lastVer));
22,455,085!
3690
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->ctime));
22,455,017!
3691
      break;
11,226,374✔
3692
    }
3693
    case STRIGGER_PULL_WAL_DATA_NEW:
4,467,880✔
3694
    case STRIGGER_PULL_WAL_CALC_DATA_NEW: {
3695
      SSTriggerWalDataNewRequest* pRequest = (SSTriggerWalDataNewRequest*)pReq;
4,467,880✔
3696
      int32_t                     nVersion = taosArrayGetSize(pRequest->versions);
4,467,880!
3697
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, nVersion));
4,469,507!
3698
      for (int32_t i = 0; i < nVersion; i++) {
10,584,699✔
3699
        int64_t ver = *(int64_t*)TARRAY_GET_ELEM(pRequest->versions, i);
6,115,192!
3700
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, ver));
6,115,192!
3701
      }
3702
      int32_t nRanges = tSimpleHashGetSize(pRequest->ranges);
4,469,507✔
3703
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, nRanges));
4,467,845!
3704
      int32_t iter = 0;
4,467,845✔
3705
      void*   px = tSimpleHashIterate(pRequest->ranges, NULL, &iter);
4,467,291✔
3706
      while (px != NULL) {
5,460,126✔
3707
        uint64_t* gid = tSimpleHashGetKey(px, NULL);
991,732✔
3708
        TAOS_CHECK_EXIT(tEncodeU64(&encoder, *gid));
1,983,464!
3709
        int64_t* key = (int64_t*)px;
991,732✔
3710
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, key[0]));
1,983,464!
3711
        TAOS_CHECK_EXIT(tEncodeI64(&encoder, key[1]));
1,983,464!
3712

3713
        px = tSimpleHashIterate(pRequest->ranges, px, &iter);
991,732✔
3714
      }
3715
      break;
4,468,394✔
3716
    }
3717
    case STRIGGER_PULL_WAL_META_DATA_NEW: {
7,992,493✔
3718
      SSTriggerWalMetaDataNewRequest* pRequest = (SSTriggerWalMetaDataNewRequest*)pReq;
7,992,493✔
3719
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->lastVer));
15,979,974!
3720
      break;
7,987,481✔
3721
    }
3722
    case STRIGGER_PULL_GROUP_COL_VALUE: {
703,752✔
3723
      SSTriggerGroupColValueRequest* pRequest = (SSTriggerGroupColValueRequest*)pReq;
703,752✔
3724
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->gid));
1,407,504!
3725
      break;
703,752✔
3726
    }
3727
    case STRIGGER_PULL_VTABLE_INFO: {
393,398✔
3728
      SSTriggerVirTableInfoRequest* pRequest = (SSTriggerVirTableInfoRequest*)pReq;
393,398✔
3729
      TAOS_CHECK_EXIT(encodeColsArray(&encoder, pRequest->cids));
393,398!
3730
      break;
393,398✔
3731
    }
3732
    case STRIGGER_PULL_VTABLE_PSEUDO_COL: {
299,814✔
3733
      SSTriggerVirTablePseudoColRequest* pRequest = (SSTriggerVirTablePseudoColRequest*)pReq;
299,814✔
3734
      TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRequest->uid));
599,628!
3735
      TAOS_CHECK_EXIT(encodeColsArray(&encoder, pRequest->cids));
299,814!
3736
      break;
299,814✔
3737
    }
3738
    case STRIGGER_PULL_OTABLE_INFO: {
90,936✔
3739
      SSTriggerOrigTableInfoRequest* pRequest = (SSTriggerOrigTableInfoRequest*)pReq;
90,936✔
3740
      int32_t size = taosArrayGetSize(pRequest->cols);
90,936!
3741
      TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
90,936!
3742
      for (int32_t i = 0; i < size; ++i) {
242,928✔
3743
        OTableInfo* oInfo = taosArrayGet(pRequest->cols, i);
151,992✔
3744
        if (oInfo == NULL) {
151,992!
UNCOV
3745
          uError("col id is NULL at index %d", i);
×
UNCOV
3746
          code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3747
          goto _exit;
×
3748
        }
3749
        TAOS_CHECK_EXIT(tEncodeCStr(&encoder, oInfo->refTableName));
303,984!
3750
        TAOS_CHECK_EXIT(tEncodeCStr(&encoder, oInfo->refColName));
303,984!
3751
      }
3752
      break; 
90,936✔
3753
    }
3754
    default: {
4,986✔
3755
      uError("unknown pull type %d", pReq->type);
4,986!
UNCOV
3756
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3757
      break;
×
3758
    }
3759
  }
3760

3761
  tEndEncode(&encoder);
58,078,775✔
3762

3763
_exit:
58,078,718✔
3764
  if (code != TSDB_CODE_SUCCESS) {
58,082,069!
UNCOV
3765
    tlen = code;
×
3766
  } else {
3767
    tlen = encoder.pos;
58,082,069✔
3768
  }
3769
  tEncoderClear(&encoder);
58,082,069✔
3770
  return tlen;
58,077,224✔
3771
}
3772

3773
static void destroyHash(void* data){
175,103✔
3774
  if (data){
175,103!
3775
    SSHashObj* tmp = *(SSHashObj**)data;
175,103✔
3776
    tSimpleHashCleanup(tmp);
175,103✔
3777
  }
3778
}
175,103✔
3779

3780
static int32_t decodeSetTableMapInfo(SDecoder* decoder, SSHashObj** ppInfo) {
90,936✔
3781
  int32_t  code = TSDB_CODE_SUCCESS;
90,936✔
3782
  int32_t  lino = 0;
90,936✔
3783
  int32_t size = 0;
90,936✔
3784
  TAOS_CHECK_EXIT(tDecodeI32(decoder, &size));
90,936!
3785
  *ppInfo = tSimpleHashInit(size, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY));
90,936✔
3786
  if (*ppInfo == NULL) {
90,936!
UNCOV
3787
    TAOS_CHECK_EXIT(terrno);
×
3788
  }
3789
  tSimpleHashSetFreeFp(*ppInfo, destroyHash);
90,936✔
3790
  
3791
  for (int32_t i = 0; i < size; ++i) {
265,480✔
3792
    int64_t id[2] = {0};
174,544✔
3793
    TAOS_CHECK_EXIT(tDecodeI64(decoder, id));
175,103!
3794
    TAOS_CHECK_EXIT(tDecodeI64(decoder, id+1));
350,206!
3795
    int32_t len = 0;
175,103✔
3796
    TAOS_CHECK_EXIT(tDecodeI32(decoder, &len));
175,103!
3797
    SSHashObj* tmp = tSimpleHashInit(len, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT));
175,103✔
3798
    if (tmp == NULL) {
175,103!
UNCOV
3799
      TAOS_CHECK_EXIT(terrno);
×
3800
    }
3801
    TAOS_CHECK_EXIT(tSimpleHashPut(*ppInfo, id, sizeof(id), &tmp, POINTER_BYTES));
175,103!
3802

3803
    for (int32_t j = 0; j < len; ++j) {
601,408✔
3804
      int16_t slotId = 0;
426,305✔
3805
      int16_t cid = 0;
426,305✔
3806
      TAOS_CHECK_EXIT(tDecodeI16(decoder, &slotId));
426,305!
3807
      TAOS_CHECK_EXIT(tDecodeI16(decoder, &cid));
425,746!
3808
      TAOS_CHECK_EXIT(tSimpleHashPut(tmp, &slotId, sizeof(slotId), &cid, sizeof(cid)));
425,746!
3809
    }
3810
  }
3811
_exit:
90,936✔
3812
  if (code != TSDB_CODE_SUCCESS) {
90,936!
UNCOV
3813
    tSimpleHashCleanup(*ppInfo);
×
3814
    *ppInfo = NULL;
×
3815
  }
3816
  return code;
90,936✔
3817
}
3818

3819
int32_t tDeserializeSTriggerPullRequest(void* buf, int32_t bufLen, SSTriggerPullRequestUnion* pReq) {
28,860,054✔
3820
  SDecoder decoder = {0};
28,860,054✔
3821
  int32_t  code = TSDB_CODE_SUCCESS;
28,863,357✔
3822
  int32_t  lino = 0;
28,863,357✔
3823

3824
  tDecoderInit(&decoder, buf, bufLen);
28,863,357✔
3825
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
28,866,714!
3826

3827
  int32_t type = 0;
28,875,571✔
3828
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &type));
28,871,725!
3829
  SSTriggerPullRequest* pBase = &(pReq->base);
28,871,725✔
3830
  pBase->type = type;
28,868,973✔
3831
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->streamId));
57,746,850!
3832
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->readerTaskId));
57,744,673!
3833
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pBase->sessionId));
57,744,115!
3834

3835
  switch (type) {
28,873,999!
3836
    case STRIGGER_PULL_SET_TABLE: {
45,468✔
3837
      SSTriggerSetTableRequest* pRequest = &(pReq->setTableReq);
45,468✔
3838
      TAOS_CHECK_EXIT(decodeSetTableMapInfo(&decoder, &pRequest->uidInfoTrigger));
45,468!
3839
      TAOS_CHECK_EXIT(decodeSetTableMapInfo(&decoder, &pRequest->uidInfoCalc));
45,468!
3840
      break;
45,468✔
3841
    }
3842
    case STRIGGER_PULL_LAST_TS: {
227,626✔
3843
      break;
227,626✔
3844
    }
3845
    case STRIGGER_PULL_FIRST_TS: {
194,038✔
3846
      SSTriggerFirstTsRequest* pRequest = &(pReq->firstTsReq);
194,038✔
3847
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
388,076!
3848
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
388,076!
3849
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
388,076!
3850
      break;
194,038✔
3851
    }
3852
    case STRIGGER_PULL_TSDB_META: {
409,351✔
3853
      SSTriggerTsdbMetaRequest* pRequest = &(pReq->tsdbMetaReq);
409,351✔
3854
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
818,702!
3855
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->endTime));
818,702!
3856
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
818,702!
3857
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
818,702!
3858
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
818,702!
3859
      break;
409,351✔
3860
    }
UNCOV
3861
    case STRIGGER_PULL_TSDB_META_NEXT: {
×
UNCOV
3862
      break;
×
3863
    }
3864
    case STRIGGER_PULL_TSDB_TS_DATA: {
15,242✔
3865
      SSTriggerTsdbTsDataRequest* pRequest = &(pReq->tsdbTsDataReq);
15,242✔
3866
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->suid));
30,484!
3867
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
30,484!
3868
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
30,484!
3869
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
30,484!
3870
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
30,484!
3871
      break;
15,242✔
3872
    }
3873
    case STRIGGER_PULL_TSDB_TRIGGER_DATA: {
78,450✔
3874
      SSTriggerTsdbTriggerDataRequest* pRequest = &(pReq->tsdbTriggerDataReq);
78,450✔
3875
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->startTime));
156,900!
3876
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
156,900!
3877
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
156,900!
3878
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
156,900!
3879
      break;
78,450✔
3880
    }
3881
    case STRIGGER_PULL_TSDB_TRIGGER_DATA_NEXT: {
84,593✔
3882
      break;
84,593✔
3883
    }
3884
    case STRIGGER_PULL_TSDB_CALC_DATA: {
15,313,963✔
3885
      SSTriggerTsdbCalcDataRequest* pRequest = &(pReq->tsdbCalcDataReq);
15,313,963✔
3886
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
30,628,469!
3887
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
30,629,012!
3888
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
30,629,012!
3889
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
30,629,012!
3890
      break;
15,314,506✔
3891
    }
UNCOV
3892
    case STRIGGER_PULL_TSDB_CALC_DATA_NEXT: {
×
UNCOV
3893
      break;
×
3894
    }
3895
    case STRIGGER_PULL_TSDB_DATA: {
81,196✔
3896
      SSTriggerTsdbDataRequest* pRequest = &(pReq->tsdbDataReq);
81,196✔
3897
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->suid));
162,392!
3898
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
162,392!
3899
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->skey));
162,392!
3900
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ekey));
162,392!
3901
      TAOS_CHECK_EXIT(decodeColsArray(&decoder, &pRequest->cids));
81,196!
3902
      TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pRequest->order));
162,392!
3903
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ver));
162,392!
3904
      break;
81,196✔
3905
    }
UNCOV
3906
    case STRIGGER_PULL_TSDB_DATA_NEXT: {
×
3907
      break;
×
3908
    }
3909
    case STRIGGER_PULL_WAL_META_NEW: {
5,518,437✔
3910
      SSTriggerWalMetaNewRequest* pRequest = &(pReq->walMetaNewReq);
5,518,437✔
3911
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->lastVer));
11,037,440!
3912
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->ctime));
11,039,087!
3913
      break;
5,520,658✔
3914
    }
3915
    case STRIGGER_PULL_WAL_DATA_NEW:
2,236,141✔
3916
    case STRIGGER_PULL_WAL_CALC_DATA_NEW: {
3917
      SSTriggerWalDataNewRequest* pRequest = &(pReq->walDataNewReq);
2,236,141✔
3918
      int32_t                     nVersion = 0;
2,236,141✔
3919
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nVersion));
2,236,141!
3920
      pRequest->versions = taosArrayInit_s(sizeof(int64_t), nVersion);
2,236,141✔
3921
      for (int32_t i = 0; i < nVersion; i++) {
5,293,198✔
3922
        int64_t* pVer = TARRAY_GET_ELEM(pRequest->versions, i);
3,057,596✔
3923
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, pVer));
3,057,596!
3924
      }
3925
      int32_t nRanges = 0;
2,235,602✔
3926
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nRanges));
2,235,033!
3927
      pRequest->ranges = tSimpleHashInit(nRanges, taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT));
2,235,033✔
3928
      if (pRequest->ranges == NULL) {
2,234,494!
UNCOV
3929
        TAOS_CHECK_EXIT(terrno);
×
3930
      }
3931
      for (int32_t i = 0; i < nRanges; i++) {
2,731,453✔
3932
        uint64_t gid = 0;
495,866✔
3933
        int64_t pRange[2] = {0};
495,866✔
3934
        TAOS_CHECK_EXIT(tDecodeU64(&decoder, &gid));
495,866!
3935
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRange[0]));
495,866!
3936
        TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRange[1]));
495,866!
3937
        TAOS_CHECK_EXIT(tSimpleHashPut(pRequest->ranges, &gid, sizeof(gid), pRange, sizeof(pRange)));
495,866!
3938
      }
3939
      break;
2,235,587✔
3940
    }
3941
    case STRIGGER_PULL_WAL_META_DATA_NEW: {
3,918,634✔
3942
      SSTriggerWalMetaDataNewRequest* pRequest = &(pReq->walMetaDataNewReq);
3,918,634✔
3943
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->lastVer));
7,842,272!
3944
      break;
3,921,965✔
3945
    }
3946
    case STRIGGER_PULL_GROUP_COL_VALUE: {
351,567✔
3947
      SSTriggerGroupColValueRequest* pRequest = &(pReq->groupColValueReq);
351,567✔
3948
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->gid));
703,134!
3949
      break;
351,567✔
3950
    }
3951
    case STRIGGER_PULL_VTABLE_INFO: {
196,699✔
3952
      SSTriggerVirTableInfoRequest* pRequest = &(pReq->virTableInfoReq);
196,699✔
3953
      TAOS_CHECK_EXIT(decodeColsArray(&decoder, &pRequest->cids));
196,699!
3954
      break;
196,699✔
3955
    }
3956
    case STRIGGER_PULL_VTABLE_PSEUDO_COL: {
149,907✔
3957
      SSTriggerVirTablePseudoColRequest* pRequest = &(pReq->virTablePseudoColReq);
149,907✔
3958
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRequest->uid));
299,814!
3959
      TAOS_CHECK_EXIT(decodeColsArray(&decoder, &pRequest->cids));
149,907!
3960
      break;
149,907✔
3961
    }
3962
    case STRIGGER_PULL_OTABLE_INFO: {
45,468✔
3963
      SSTriggerOrigTableInfoRequest* pRequest = &(pReq->origTableInfoReq);
45,468✔
3964
      int32_t size = 0;
45,468✔
3965
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
45,468!
3966
      pRequest->cols = taosArrayInit(size, sizeof(OTableInfo));
45,468✔
3967
      if (pRequest->cols == NULL) {
45,468!
UNCOV
3968
        code = terrno;
×
UNCOV
3969
        uError("failed to allocate memory for cids, size: %d, errno: %d", size, code);
×
UNCOV
3970
        goto _exit;
×
3971
      }
3972
      for (int32_t i = 0; i < size; ++i) {
121,464✔
3973
        OTableInfo* oInfo = taosArrayReserve(pRequest->cols, 1);
75,996✔
3974
        if (oInfo == NULL) {
75,996!
UNCOV
3975
          code = terrno;
×
UNCOV
3976
          uError("failed to reserve memory for OTableInfo, size: %d, errno: %d", size, code);
×
UNCOV
3977
          goto _exit;
×
3978
        }
3979
        TAOS_CHECK_RETURN(tDecodeCStrTo(&decoder, oInfo->refTableName));
75,996!
3980
        TAOS_CHECK_RETURN(tDecodeCStrTo(&decoder, oInfo->refColName));
75,996!
3981
      }
3982
      break;
45,468✔
3983
    }
3984
    default: {
7,219✔
3985
      uError("unknown pull type %d", type);
7,219!
UNCOV
3986
      code = TSDB_CODE_INVALID_PARA;
×
UNCOV
3987
      break;
×
3988
    }
3989
  }
3990

3991
  tEndDecode(&decoder);
28,872,321✔
3992

3993
_exit:
28,869,539✔
3994
  tDecoderClear(&decoder);
28,874,520✔
3995
  return code;
28,860,046✔
3996
}
3997

3998
static int32_t tSerializeSTriggerCalcParam(SEncoder* pEncoder, SArray* pParams, bool ignoreNotificationInfo, bool full) {
39,852,898✔
3999
  int32_t size = full ? taosArrayGetSize(pParams) : 0;
39,852,898✔
4000
  int32_t code = 0;
39,852,916✔
4001
  int32_t lino = 0;
39,852,916✔
4002
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, size));
39,853,414!
4003
  for (int32_t i = 0; i < size; ++i) {
2,147,483,647✔
4004
    SSTriggerCalcParam* param = taosArrayGet(pParams, i);
2,147,483,647✔
4005
    if (param == NULL) {
2,147,483,647!
UNCOV
4006
      TAOS_CHECK_EXIT(terrno);
×
4007
    }
4008
    int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
2,147,483,647✔
4009
    if (pEncoder->data) {
2,147,483,647✔
4010
      TAOS_MEMCPY(pEncoder->data + pEncoder->pos, param, plainFieldSize);
1,967,002,578!
4011
    }
4012
    pEncoder->pos += plainFieldSize;
2,147,483,647✔
4013

4014
    if (!ignoreNotificationInfo) {
2,147,483,647✔
4015
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, param->notifyType));
104,415,308!
4016
      uint64_t len = (param->extraNotifyContent != NULL) ? strlen(param->extraNotifyContent) + 1 : 0;
52,207,585!
4017
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, (uint8_t*)param->extraNotifyContent, len));
104,622,041!
4018
    }
4019
  }
4020
_exit:
39,663,379✔
4021
  return code;
39,663,379✔
4022
}
4023

4024
void tDestroySSTriggerCalcParam(void* ptr) {
1,919,964,289✔
4025
  SSTriggerCalcParam* pParam = ptr;
1,919,964,289✔
4026
  if (pParam && pParam->extraNotifyContent != NULL) {
1,919,964,289!
4027
    taosMemoryFreeClear(pParam->extraNotifyContent);
109,636!
4028
  }
4029
  if (pParam && pParam->resultNotifyContent != NULL) {
1,919,976,392!
UNCOV
4030
    taosMemoryFreeClear(pParam->resultNotifyContent);
×
4031
  }
4032
}
1,920,377,632✔
4033

4034
void tDestroySStreamGroupValue(void* ptr) {
16,367,526✔
4035
  SStreamGroupValue* pValue = ptr;
16,367,526✔
4036
  if ((pValue != NULL) && (IS_VAR_DATA_TYPE(pValue->data.type) || pValue->data.type == TSDB_DATA_TYPE_DECIMAL)) {
16,367,526!
4037
    taosMemoryFreeClear(pValue->data.pData);
14,697,779!
4038
    pValue->data.nData = 0;
14,698,909✔
4039
  }
4040
}
16,368,082✔
4041

4042
static int32_t tDeserializeSTriggerCalcParam(SDecoder* pDecoder, SArray**ppParams, bool ignoreNotificationInfo) {
19,709,660✔
4043
  int32_t size = 0, code = 0, lino = 0;
19,709,660✔
4044
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &size));
19,709,660!
4045
  *ppParams = taosArrayInit(size, sizeof(SSTriggerCalcParam));
19,709,660✔
4046
  if (*ppParams == NULL) {
19,709,728!
UNCOV
4047
    TAOS_CHECK_EXIT(terrno);
×
4048
  }
4049
  for (int32_t i = 0; i < size; ++i) {
1,919,838,833✔
4050
    SSTriggerCalcParam* param = taosArrayReserve(*ppParams, 1);
1,900,214,539✔
4051
    if (param == NULL) {
1,899,385,409!
UNCOV
4052
      TAOS_CHECK_EXIT(terrno);
×
4053
    }
4054
    int64_t plainFieldSize = offsetof(SSTriggerCalcParam, notifyType);
1,899,385,409✔
4055
    TAOS_MEMCPY(param, pDecoder->data + pDecoder->pos, plainFieldSize);
1,899,385,409!
4056
    pDecoder->pos += plainFieldSize;
1,899,704,851✔
4057

4058
    if (!ignoreNotificationInfo) {
1,900,193,834✔
4059
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &param->notifyType));
52,458,408!
4060
      uint64_t len = 0;
26,228,182✔
4061
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&param->extraNotifyContent, &len));
52,446,144!
4062
    }
4063
  }
4064

4065
_exit:
19,676,180✔
4066
  return code;
19,710,239✔
4067
}
4068

4069
static int32_t tSerializeStriggerGroupColVals(SEncoder* pEncoder, SArray* pGroupColVals, int32_t vgId) {
40,558,877✔
4070
  int32_t code = TSDB_CODE_SUCCESS;
40,558,877✔
4071
  int32_t lino = 0;
40,558,877✔
4072

4073
  int32_t size = taosArrayGetSize(pGroupColVals);
40,558,877✔
4074
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, size));
40,558,759!
4075
  for (int32_t i = 0; i < size; ++i) {
70,930,069✔
4076
    SStreamGroupValue* pValue = taosArrayGet(pGroupColVals, i);
30,371,310✔
4077
    if (pValue == NULL) {
30,369,089!
UNCOV
4078
      TAOS_CHECK_EXIT(terrno);
×
4079
    }
4080
    TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pValue->isNull));
30,369,089!
4081
    if (pValue->isNull) {
30,366,309!
UNCOV
4082
      continue;
×
4083
    }
4084
    TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pValue->isTbname));
30,366,896!
4085
    if (pValue->isTbname) {
30,367,431!
4086
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pValue->uid));
27,004,424!
4087
      if (vgId != -1) { pValue->vgId = vgId; }
13,501,920✔
4088
      TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pValue->vgId));
27,002,706!
4089
    }
4090
    TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pValue->data.type));
60,733,540!
4091
    if (IS_VAR_DATA_TYPE(pValue->data.type)) {
30,368,414!
4092
      TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pValue->data.pData, pValue->data.nData));
55,566,721!
4093
    } else {
4094
      TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pValue->data.val));
5,173,590!
4095
    }
4096
  }
4097

4098
_exit:
40,558,759✔
4099
  return code;
40,558,759✔
4100
}
4101

4102
static int32_t tDeserializeStriggerGroupColVals(SDecoder* pDecoder, SArray** ppGroupColVals) {
20,062,139✔
4103
  int32_t code = TSDB_CODE_SUCCESS;
20,062,139✔
4104
  int32_t lino = 0;
20,062,139✔
4105
  int32_t size = 0;
20,062,139✔
4106

4107
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &size));
20,062,698!
4108
  taosArrayClearEx(*ppGroupColVals, tDestroySStreamGroupValue);
20,062,698✔
4109
  if (size > 0) {
20,062,698✔
4110
    if (*ppGroupColVals == NULL) {
9,327,738✔
4111
      *ppGroupColVals = taosArrayInit(size, sizeof(SStreamGroupValue));
8,975,862✔
4112
      if (*ppGroupColVals == NULL) {
8,975,862!
UNCOV
4113
        TAOS_CHECK_EXIT(terrno);
×
4114
      }
4115
    } else {
4116
      TAOS_CHECK_EXIT(taosArrayEnsureCap(*ppGroupColVals, size));
351,876!
4117
    }
4118
  }
4119
  for (int32_t i = 0; i < size; ++i) {
35,240,413✔
4120
    SStreamGroupValue* pValue = taosArrayReserve(*ppGroupColVals, 1);
15,178,251✔
4121
    if (pValue == NULL) {
15,178,805!
UNCOV
4122
      TAOS_CHECK_EXIT(terrno);
×
4123
    }
4124
    TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pValue->isNull));
15,178,805!
4125
    if (pValue->isNull) {
15,178,805!
UNCOV
4126
      continue;
×
4127
    }
4128
    TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pValue->isTbname));
15,178,805!
4129
    if (pValue->isTbname) {
15,178,805!
4130
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pValue->uid));
13,488,191!
4131
      TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pValue->vgId));
13,488,770!
4132
    }
4133
    TAOS_CHECK_EXIT(tDecodeI8(pDecoder, &pValue->data.type));
30,357,610!
4134
    if (IS_VAR_DATA_TYPE(pValue->data.type)) {
29,062,468!
4135
      uint64_t len = 0;
13,884,242✔
4136
      TAOS_CHECK_EXIT(tDecodeBinaryAlloc(pDecoder, (void**)&pValue->data.pData, &len));
27,769,063!
4137
      pValue->data.nData = len;
13,884,821✔
4138
    } else {
4139
      TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pValue->data.val));
2,587,968!
4140
    }
4141
  }
4142
_exit:
20,062,162✔
4143
  return code;
20,061,027✔
4144
}
4145

4146
int32_t tSerializeSStreamGroupInfo(void* buf, int32_t bufLen, const SStreamGroupInfo* gInfo, int32_t vgId) {
702,580✔
4147
  SEncoder encoder = {0};
702,580✔
4148
  int32_t  code = TSDB_CODE_SUCCESS;
702,580✔
4149
  int32_t  lino = 0;
702,580✔
4150
  int32_t  tlen = 0;
702,580✔
4151

4152
  tEncoderInit(&encoder, buf, bufLen);
702,580✔
4153
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
703,134!
4154

4155
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, gInfo->gInfo, vgId));
703,134!
4156

4157
  tEndEncode(&encoder);
702,580✔
4158

4159
_exit:
702,024✔
4160
  if (code != TSDB_CODE_SUCCESS) {
702,024!
UNCOV
4161
    tlen = code;
×
4162
  } else {
4163
    tlen = encoder.pos;
702,024✔
4164
  }
4165
  tEncoderClear(&encoder);
702,024✔
4166
  return tlen;
702,584✔
4167
}
4168

4169
int32_t tDeserializeSStreamGroupInfo(void* buf, int32_t bufLen, SStreamGroupInfo* gInfo) {
351,876✔
4170
  SDecoder decoder = {0};
351,876✔
4171
  int32_t  code = TSDB_CODE_SUCCESS;
351,876✔
4172
  int32_t  lino = 0;
351,876✔
4173
  int32_t  size = 0;
351,876✔
4174

4175
  tDecoderInit(&decoder, buf, bufLen);
351,876✔
4176
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
351,876!
4177

4178
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &gInfo->gInfo));
351,876!
4179

4180
  tEndDecode(&decoder);
351,876✔
4181

4182
_exit:
351,876✔
4183
  tDecoderClear(&decoder);
351,876✔
4184
  return code;
351,876✔
4185
}
4186

4187
int32_t tSerializeSTriggerCalcRequest(void* buf, int32_t bufLen, const SSTriggerCalcRequest* pReq) {
16,002,960✔
4188
  SEncoder encoder = {0};
16,002,960✔
4189
  int32_t  code = TSDB_CODE_SUCCESS;
16,002,960✔
4190
  int32_t  lino = 0;
16,002,960✔
4191
  int32_t  tlen = 0;
16,002,960✔
4192

4193
  tEncoderInit(&encoder, buf, bufLen);
16,002,960✔
4194
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
16,002,960!
4195

4196
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
32,005,361!
4197
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->runnerTaskId));
32,005,361!
4198
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
32,004,812!
4199
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->triggerType));
32,003,138!
4200
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->gid));
32,003,687!
4201

4202
  TAOS_CHECK_EXIT(tSerializeSTriggerCalcParam(&encoder, pReq->params, false, true));
16,002,401!
4203
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, pReq->groupColVals, -1));
16,002,404!
4204
  TAOS_CHECK_EXIT(tEncodeI8(&encoder, pReq->createTable));
32,004,243!
4205

4206
  tEndEncode(&encoder);
16,002,401✔
4207

4208
_exit:
16,002,411✔
4209
  if (code != TSDB_CODE_SUCCESS) {
16,002,411!
UNCOV
4210
    tlen = code;
×
4211
  } else {
4212
    tlen = encoder.pos;
16,002,411✔
4213
  }
4214
  tEncoderClear(&encoder);
16,002,411✔
4215
  return tlen;
16,002,411✔
4216
}
4217

4218
int32_t tDeserializeSTriggerCalcRequest(void* buf, int32_t bufLen, SSTriggerCalcRequest* pReq) {
8,001,468✔
4219
  SDecoder decoder = {0};
8,001,468✔
4220
  int32_t  code = TSDB_CODE_SUCCESS;
8,001,468✔
4221
  int32_t  lino = 0;
8,001,468✔
4222

4223
  tDecoderInit(&decoder, buf, bufLen);
8,001,468✔
4224
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
8,002,017!
4225

4226
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
16,004,034!
4227
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->runnerTaskId));
16,004,034!
4228
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
16,004,034!
4229
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->triggerType));
16,004,034!
4230
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->gid));
16,004,034!
4231

4232
  TAOS_CHECK_EXIT(tDeserializeSTriggerCalcParam(&decoder, &pReq->params, false));
8,002,017!
4233
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &pReq->groupColVals));
8,002,017!
4234
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pReq->createTable));
16,004,034!
4235

4236
  tEndDecode(&decoder);
8,002,017✔
4237

4238
_exit:
8,002,017✔
4239
  tDecoderClear(&decoder);
8,002,017✔
4240
  return code;
8,002,017✔
4241
}
4242

4243
void tDestroySTriggerCalcRequest(SSTriggerCalcRequest* pReq) {
10,645,415✔
4244
  if (pReq != NULL) {
10,645,415!
4245
    if (pReq->params != NULL) {
10,645,974✔
4246
      taosArrayDestroyEx(pReq->params, tDestroySSTriggerCalcParam);
8,190,263✔
4247
      pReq->params = NULL;
8,190,263✔
4248
    }
4249
    if (pReq->groupColVals != NULL) {
10,645,974✔
4250
      taosArrayDestroyEx(pReq->groupColVals, tDestroySStreamGroupValue);
645,097✔
4251
      pReq->groupColVals = NULL;
645,097✔
4252
    }
4253
    blockDataDestroy(pReq->pOutBlock);
10,645,415✔
4254
  }
4255
}
10,645,415✔
4256

4257
int32_t tSerializeSTriggerDropTableRequest(void* buf, int32_t bufLen, const SSTriggerDropRequest* pReq) {
1,166✔
4258
  SEncoder encoder = {0};
1,166✔
4259
  int32_t  code = TSDB_CODE_SUCCESS;
1,166✔
4260
  int32_t  lino = 0;
1,166✔
4261
  int32_t  tlen = 0;
1,166✔
4262

4263
  tEncoderInit(&encoder, buf, bufLen);
1,166✔
4264
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1,166!
4265

4266
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
2,332!
4267
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->runnerTaskId));
2,332!
4268
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
2,332!
4269
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->gid));
2,332!
4270

4271
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(&encoder, pReq->groupColVals, -1));
1,166!
4272

4273
  tEndEncode(&encoder);
1,166✔
4274

4275
_exit:
1,166✔
4276
  if (code != TSDB_CODE_SUCCESS) {
1,166!
UNCOV
4277
    tlen = code;
×
4278
  } else {
4279
    tlen = encoder.pos;
1,166✔
4280
  }
4281
  tEncoderClear(&encoder);
1,166✔
4282
  return tlen;
1,166✔
4283
}
4284

4285
int32_t tDeserializeSTriggerDropTableRequest(void* buf, int32_t bufLen, SSTriggerDropRequest* pReq) {
583✔
4286
  SDecoder decoder = {0};
583✔
4287
  int32_t  code = TSDB_CODE_SUCCESS;
583✔
4288
  int32_t  lino = 0;
583✔
4289

4290
  tDecoderInit(&decoder, buf, bufLen);
583✔
4291
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
583!
4292

4293
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
1,166!
4294
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->runnerTaskId));
1,166!
4295
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
1,166!
4296
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->gid));
1,166!
4297

4298
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(&decoder, &pReq->groupColVals));
583!
4299

4300
  tEndDecode(&decoder);
583✔
4301

4302
_exit:
583✔
4303
  tDecoderClear(&decoder);
583✔
4304
  return code;
583✔
4305
}
4306

4307
void tDestroySSTriggerDropRequest(SSTriggerDropRequest* pReq) {
583✔
4308
  if (pReq != NULL) {
583!
4309
    if (pReq->groupColVals != NULL) {
583!
4310
      taosArrayDestroyEx(pReq->groupColVals, tDestroySStreamGroupValue);
583✔
4311
      pReq->groupColVals = NULL;
583✔
4312
    }
4313
  }
4314
}
583✔
4315

4316
int32_t tSerializeSTriggerCtrlRequest(void* buf, int32_t bufLen, const SSTriggerCtrlRequest* pReq) {
32,903,502✔
4317
  SEncoder encoder = {0};
32,903,502✔
4318
  int32_t  code = TSDB_CODE_SUCCESS;
32,903,502✔
4319
  int32_t  lino = 0;
32,903,502✔
4320
  int32_t  tlen = 0;
32,903,502✔
4321

4322
  tEncoderInit(&encoder, buf, bufLen);
32,903,502✔
4323
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
32,903,502!
4324

4325
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->type));
65,806,207!
4326
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->streamId));
65,806,423!
4327
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->taskId));
65,807,004!
4328
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pReq->sessionId));
65,807,004!
4329

4330
  tEndEncode(&encoder);
32,903,502✔
4331

4332
_exit:
32,903,502✔
4333
  if (code != TSDB_CODE_SUCCESS) {
32,903,502!
UNCOV
4334
    tlen = code;
×
4335
  } else {
4336
    tlen = encoder.pos;
32,903,502✔
4337
  }
4338
  tEncoderClear(&encoder);
32,903,502✔
4339
  return tlen;
32,903,502✔
4340
}
4341

4342
int32_t tDeserializeSTriggerCtrlRequest(void* buf, int32_t bufLen, SSTriggerCtrlRequest* pReq) {
49,270,406✔
4343
  SDecoder decoder = {0};
49,270,406✔
4344
  int32_t  code = TSDB_CODE_SUCCESS;
49,273,186✔
4345
  int32_t  lino = 0;
49,273,186✔
4346

4347
  tDecoderInit(&decoder, buf, bufLen);
49,273,186✔
4348
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
49,261,019!
4349

4350
  int32_t type = 0;
49,301,039✔
4351
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &type));
49,303,776!
4352
  pReq->type = type;
49,303,776✔
4353
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->streamId));
98,620,352!
4354
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->taskId));
98,624,846!
4355
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pReq->sessionId));
98,616,272!
4356

4357
  tEndDecode(&decoder);
49,310,777✔
4358

4359
_exit:
49,291,375✔
4360
  tDecoderClear(&decoder);
49,295,820✔
4361
  return code;
49,270,851✔
4362
}
4363

4364
int32_t tSerializeStRtFuncInfo(SEncoder* pEncoder, const SStreamRuntimeFuncInfo* pInfo, bool full) {
23,850,414✔
4365
  int32_t code = 0, lino = 0;
23,850,414✔
4366
  TAOS_CHECK_EXIT(tSerializeSTriggerCalcParam(pEncoder, pInfo->pStreamPesudoFuncVals, true, full));
23,850,414!
4367
  TAOS_CHECK_EXIT(tSerializeStriggerGroupColVals(pEncoder, pInfo->pStreamPartColVals, -1));
23,851,531!
4368
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->curWindow.skey));
47,704,127!
4369
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->curWindow.ekey));
47,703,508!
4370
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->groupId));
47,704,070!
4371
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pInfo->curIdx));
47,704,140!
4372
  TAOS_CHECK_EXIT(tEncodeI64(pEncoder, pInfo->sessionId));
47,702,965!
4373
  TAOS_CHECK_EXIT(tEncodeBool(pEncoder, pInfo->withExternalWindow));
23,851,449!
4374
  TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pInfo->triggerType));
47,701,759!
4375
_exit:
23,850,877✔
4376
  return code;
23,850,877✔
4377
}
4378

4379
int32_t tDeserializeStRtFuncInfo(SDecoder* pDecoder, SStreamRuntimeFuncInfo* pInfo) {
11,707,643✔
4380
  int32_t code = 0, lino = 0;
11,707,643✔
4381
  int32_t size = 0;
11,707,643✔
4382
  TAOS_CHECK_EXIT(tDeserializeSTriggerCalcParam(pDecoder, &pInfo->pStreamPesudoFuncVals, true));
11,707,643!
4383
  TAOS_CHECK_EXIT(tDeserializeStriggerGroupColVals(pDecoder, &pInfo->pStreamPartColVals));
11,708,222!
4384
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->curWindow.skey));
23,414,771!
4385
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->curWindow.ekey));
23,415,282!
4386
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->groupId));
23,415,282!
4387
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pInfo->curIdx));
23,415,863!
4388
  TAOS_CHECK_EXIT(tDecodeI64(pDecoder, &pInfo->sessionId));
23,416,444!
4389
  TAOS_CHECK_EXIT(tDecodeBool(pDecoder, &pInfo->withExternalWindow));
11,708,222!
4390
  TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pInfo->triggerType));
23,415,933!
4391
_exit:
11,708,222✔
4392
  return code;
11,708,222✔
4393
}
4394

4395
void tDestroyStRtFuncInfo(SStreamRuntimeFuncInfo* pInfo){
16,736,917✔
4396
  if (pInfo == NULL) return;
16,736,917!
4397
  if (pInfo->pStreamPesudoFuncVals != NULL) {
16,736,917✔
4398
    taosArrayDestroyEx(pInfo->pStreamPesudoFuncVals, tDestroySSTriggerCalcParam);
12,060,548✔
4399
    pInfo->pStreamPesudoFuncVals = NULL;
12,060,548✔
4400
  }
4401
  if (pInfo->pStreamPartColVals != NULL) {
16,739,794✔
4402
    taosArrayDestroyEx(pInfo->pStreamPartColVals, tDestroySStreamGroupValue);
8,870,754✔
4403
    pInfo->pStreamPartColVals = NULL;
8,870,754✔
4404
  }
4405
}
4406

4407
int32_t tSerializeSStreamMsgVTableInfo(void* buf, int32_t bufLen, const SStreamMsgVTableInfo* pRsp){
393,398✔
4408
  SEncoder encoder = {0};
393,398✔
4409
  int32_t  code = TSDB_CODE_SUCCESS;
393,398✔
4410
  int32_t  lino = 0;
393,398✔
4411
  int32_t  tlen = 0;
393,398✔
4412

4413
  tEncoderInit(&encoder, buf, bufLen);
393,398✔
4414
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
393,398!
4415

4416
  int32_t size = taosArrayGetSize(pRsp->infos);
392,844!
4417
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
393,398!
4418
  for (int32_t i = 0; i < size; ++i) {
997,294✔
4419
    VTableInfo* info = taosArrayGet(pRsp->infos, i);
604,450✔
4420
    if (info == NULL) {
603,896!
UNCOV
4421
      TAOS_CHECK_EXIT(terrno);
×
4422
    }
4423
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, info->gId));
1,208,900!
4424
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, info->uid));
1,210,008!
4425
    TAOS_CHECK_EXIT(tEncodeSColRefWrapper(&encoder, &info->cols));
605,004!
4426
  }
4427

4428
  tEndEncode(&encoder);
392,844✔
4429

4430
_exit:
393,398✔
4431
  if (code != TSDB_CODE_SUCCESS) {
393,398!
UNCOV
4432
    tlen = code;
×
4433
  } else {
4434
    tlen = encoder.pos;
393,398✔
4435
  }
4436
  tEncoderClear(&encoder);
393,398✔
4437
  return tlen;
392,844✔
4438
}
4439

4440
int32_t tDeserializeSStreamMsgVTableInfo(void* buf, int32_t bufLen, SStreamMsgVTableInfo *vTableInfo){
196,699✔
4441
  SDecoder decoder = {0};
196,699✔
4442
  int32_t  code = TSDB_CODE_SUCCESS;
196,699✔
4443
  int32_t  lino = 0;
196,699✔
4444
  int32_t  size = 0;
196,699✔
4445

4446
  tDecoderInit(&decoder, buf, bufLen);
196,699✔
4447
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
196,699!
4448

4449
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &size));
196,699!
4450
  vTableInfo->infos = taosArrayInit(size, sizeof(VTableInfo));
196,699✔
4451
  if (vTableInfo->infos == NULL) {
196,699!
UNCOV
4452
    TAOS_CHECK_EXIT(terrno);
×
4453
  }
4454
  for (int32_t i = 0; i < size; ++i) {
499,201✔
4455
    VTableInfo* info = taosArrayReserve(vTableInfo->infos, 1);
302,502✔
4456
    if (info == NULL) {
302,502!
UNCOV
4457
      TAOS_CHECK_EXIT(terrno);
×
4458
    }
4459
    TAOS_CHECK_EXIT(tDecodeI64(&decoder, &info->gId));
605,004!
4460
    TAOS_CHECK_EXIT(tDecodeI64(&decoder, &info->uid));
605,004!
4461
    TAOS_CHECK_EXIT(tDecodeSColRefWrapperEx(&decoder, &info->cols, false));
302,502!
4462
  }
4463

4464
  tEndDecode(&decoder);
196,699✔
4465

4466
_exit:
196,699✔
4467
  tDecoderClear(&decoder);
196,699✔
4468
  return code;
196,699✔
4469
}
4470

4471

4472
void tDestroyVTableInfo(void *ptr) {
604,450✔
4473
  if (NULL == ptr) {
604,450!
UNCOV
4474
    return;
×
4475
  }
4476
  VTableInfo* pTable = (VTableInfo*)ptr;
604,450✔
4477
  taosMemoryFree(pTable->cols.pColRef);
604,450!
4478
}
4479

4480
void tDestroySStreamMsgVTableInfo(SStreamMsgVTableInfo *ptr) {
12,703,198✔
4481
  if (ptr == NULL) return;
12,703,198!
4482
  taosArrayDestroyEx(ptr->infos, tDestroyVTableInfo);
12,703,198✔
4483
  ptr->infos = NULL;
12,702,105✔
4484
}
4485

4486
int32_t tSerializeSStreamTsResponse(void* buf, int32_t bufLen, const SStreamTsResponse* pRsp) {
838,978✔
4487
  SEncoder encoder = {0};
838,978✔
4488
  int32_t  code = TSDB_CODE_SUCCESS;
841,120✔
4489
  int32_t  lino = 0;
841,120✔
4490
  int32_t  tlen = 0;
841,120✔
4491

4492
  tEncoderInit(&encoder, buf, bufLen);
841,120✔
4493
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
840,571!
4494

4495
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, pRsp->ver));
1,681,132!
4496
  int32_t size = taosArrayGetSize(pRsp->tsInfo);
840,012✔
4497
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, size));
839,997!
4498
  for (int32_t i = 0; i < size; ++i) {
1,449,775✔
4499
    STsInfo* tsInfo = taosArrayGet(pRsp->tsInfo, i);
610,312✔
4500
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, tsInfo->gId));
1,221,737!
4501
    TAOS_CHECK_EXIT(tEncodeI64(&encoder, tsInfo->ts));
1,220,654!
4502
  }
4503

4504
  tEndEncode(&encoder);
839,463✔
4505

4506
_exit:
837,776✔
4507
  if (code != TSDB_CODE_SUCCESS) {
837,776!
UNCOV
4508
    tlen = code;
×
4509
  } else {
4510
    tlen = encoder.pos;
837,776✔
4511
  }
4512
  tEncoderClear(&encoder);
837,776✔
4513
  return tlen;
838,429✔
4514
}
4515

4516
int32_t tDeserializeSStreamTsResponse(void* buf, int32_t bufLen, void *pBlock) {
422,148✔
4517
  SDecoder decoder = {0};
422,148✔
4518
  int32_t  code = TSDB_CODE_SUCCESS;
422,148✔
4519
  int32_t  lino = 0;
422,148✔
4520
  SSDataBlock *pResBlock = pBlock;
422,148✔
4521

4522
  tDecoderInit(&decoder, buf, bufLen);
422,148✔
4523
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
422,148!
4524

4525
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, (int64_t*)&pResBlock->info.id.groupId));
844,296!
4526
  int32_t numOfCols = 2;
422,148✔
4527
  if (pResBlock->pDataBlock == NULL) {
422,148!
4528
    pResBlock->pDataBlock = taosArrayInit_s(sizeof(SColumnInfoData), numOfCols);
422,148✔
4529
    if (pResBlock->pDataBlock == NULL) {
422,148!
UNCOV
4530
      TAOS_CHECK_EXIT(terrno);
×
4531
    }
4532
    for (int32_t i = 0; i< numOfCols; ++i) {
1,266,444✔
4533
      SColumnInfoData *pColInfoData = taosArrayGet(pResBlock->pDataBlock, i);
844,296✔
4534
      if (pColInfoData == NULL) {
844,296!
UNCOV
4535
        TAOS_CHECK_EXIT(terrno);
×
4536
      }
4537
      pColInfoData->info.type = TSDB_DATA_TYPE_BIGINT;
844,296✔
4538
      pColInfoData->info.bytes = sizeof(int64_t);
844,296✔
4539
    }
4540
  }
4541
  int32_t numOfRows = 0;
422,148✔
4542
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &numOfRows));
422,148!
4543
  TAOS_CHECK_EXIT(blockDataEnsureCapacity(pResBlock, numOfRows));
422,148!
4544
  for (int32_t i = 0; i < numOfRows; ++i) {
731,082✔
4545
    for (int32_t j = 0; j < numOfCols; ++j) {
926,802✔
4546
      SColumnInfoData *pColInfoData = taosArrayGet(pResBlock->pDataBlock, j);
617,868✔
4547
      if (pColInfoData == NULL) {
617,868!
UNCOV
4548
        TAOS_CHECK_EXIT(terrno);
×
4549
      }
4550
      int64_t value = 0;
617,868✔
4551
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &value));
617,868!
4552
      colDataSetInt64(pColInfoData, i, &value);
617,868✔
4553
    }
4554
  }
4555

4556
  pResBlock->info.dataLoad = 1;
422,148✔
4557
  pResBlock->info.rows = numOfRows;
422,148✔
4558

4559
  tEndDecode(&decoder);
422,148✔
4560

4561
_exit:
422,148✔
4562
  tDecoderClear(&decoder);
422,148✔
4563
  return code;
422,148✔
4564
}
4565

4566
static int32_t encodeData(SEncoder* encoder, void* pBlock, SSHashObj* indexHash) {
1,517,114✔
4567
  int32_t code = TSDB_CODE_SUCCESS;
1,517,114✔
4568
  int32_t lino = 0;
1,517,114✔
4569
  int32_t len = 0;
1,517,114✔
4570
  if (encoder->data == NULL){
1,517,114✔
4571
    len = blockGetEncodeSize(pBlock);
758,018✔
4572
  } else {
4573
    len = blockEncode(pBlock, (char*)(encoder->data + encoder->pos), encoder->size - encoder->pos, blockDataGetNumOfCols(pBlock));
757,998✔
4574
    if (len < 0) {
759,675!
UNCOV
4575
      TAOS_CHECK_EXIT(terrno);
×
4576
    }
4577
  }
4578
  encoder->pos += len;
1,519,350✔
4579

4580
  if (indexHash == NULL) {
1,519,350✔
4581
    goto _exit;
521,534✔
4582
  } 
4583
  
4584
  uint32_t pos = encoder->pos;
997,816✔
4585
  encoder->pos += sizeof(uint32_t); // reserve space for tables
997,816✔
4586
  int32_t tables = 0;
997,257✔
4587
  
4588
  void*   pe = NULL;
997,257✔
4589
  int32_t iter = 0;
997,257✔
4590
  while ((pe = tSimpleHashIterate(indexHash, pe, &iter)) != NULL) {
3,538,852✔
4591
    SStreamWalDataSlice* pInfo = (SStreamWalDataSlice*)pe;
2,541,605✔
4592
    if (pInfo->gId == -1){
2,541,605✔
4593
      continue;
1,299,615✔
4594
    }
4595
    int64_t uid = *(int64_t*)(tSimpleHashGetKey(pe, NULL));
1,244,216✔
4596
    TAOS_CHECK_EXIT(tEncodeI64(encoder, uid));
1,243,657!
4597
    TAOS_CHECK_EXIT(tEncodeU64(encoder, pInfo->gId));
2,487,314!
4598
    TAOS_CHECK_EXIT(tEncodeI32(encoder, pInfo->startRowIdx));
2,486,765!
4599
    TAOS_CHECK_EXIT(tEncodeI32(encoder, pInfo->numRows));
2,485,647!
4600
    tables++;
1,242,539✔
4601
  }
4602
  uint32_t tmpPos = encoder->pos;
996,701✔
4603
  encoder->pos = pos;
997,257✔
4604
  TAOS_CHECK_EXIT(tEncodeI32(encoder, tables));
996,698!
4605
  encoder->pos = tmpPos;
996,698✔
4606
_exit:
1,519,350✔
4607
  return code;
1,519,350✔
4608
}
4609
 
4610
int32_t tSerializeSStreamWalDataResponse(void* buf, int32_t bufLen, SSTriggerWalNewRsp* rsp, SSHashObj* indexHash) {
1,232,001✔
4611
  SEncoder encoder = {0};
1,232,001✔
4612
  int32_t  code = TSDB_CODE_SUCCESS;
1,232,001✔
4613
  int32_t  lino = 0;
1,232,001✔
4614
  int32_t  tlen = 0;
1,232,001✔
4615

4616
  tEncoderInit(&encoder, buf, bufLen);
1,232,001✔
4617
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1,232,560!
4618

4619
  if (rsp->dataBlock != NULL && ((SSDataBlock*)rsp->dataBlock)->info.rows > 0) {
1,232,560✔
4620
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, 1)); // has real data
997,816!
4621
    TAOS_CHECK_EXIT(encodeData(&encoder, rsp->dataBlock, indexHash));
997,816!
4622
  } else {
4623
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, 0));  // no real data
234,744!
4624
  }
4625

4626
  if (rsp->metaBlock != NULL && ((SSDataBlock*)rsp->metaBlock)->info.rows > 0) {
1,231,442✔
4627
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, 1)); // has metada
498,110!
4628
    TAOS_CHECK_EXIT(encodeData(&encoder, rsp->metaBlock, NULL));
498,110!
4629
  } else {
4630
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, 0));  // no meta data
732,214!
4631
  }
4632

4633
  if (rsp->deleteBlock != NULL && ((SSDataBlock*)rsp->deleteBlock)->info.rows > 0) {
1,230,863✔
4634
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, 1)); // has deletedata
21,140!
4635
    TAOS_CHECK_EXIT(encodeData(&encoder, rsp->deleteBlock, NULL));
21,140!
4636
  } else {
4637
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, 0));  // no delete data
1,208,605!
4638
  }
4639

4640
  if (rsp->dropBlock != NULL && ((SSDataBlock*)rsp->dropBlock)->info.rows > 0) {
1,229,745!
4641
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, 1)); // has drop table data
1,166!
4642
    TAOS_CHECK_EXIT(encodeData(&encoder, rsp->dropBlock, NULL));
1,166!
4643
  } else {
4644
    TAOS_CHECK_EXIT(tEncodeI8(&encoder, 0));  // no drop table data
1,228,040!
4645
  }
4646

4647
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, rsp->ver));
2,458,942!
4648
  TAOS_CHECK_EXIT(tEncodeI64(&encoder, rsp->verTime));
2,461,178!
4649
  tEndEncode(&encoder);
1,231,442✔
4650

4651
_exit:
1,230,843✔
4652
  if (code != TSDB_CODE_SUCCESS) {
1,231,422!
UNCOV
4653
    tlen = code;
×
4654
  } else {
4655
    tlen = encoder.pos;
1,231,422✔
4656
  }
4657
  tEncoderClear(&encoder);
1,231,422✔
4658
  return tlen;
1,230,344✔
4659
}
4660

4661
int32_t tDeserializeSStreamWalDataResponse(void* buf, int32_t bufLen, SSTriggerWalNewRsp* pRsp, SArray* pSlices){
616,898✔
4662
  SDecoder     decoder = {0};
616,898✔
4663
  int32_t      code = TSDB_CODE_SUCCESS;
616,898✔
4664
  int32_t      lino = 0;
616,898✔
4665
  SSDataBlock* pBlock = NULL;
616,898✔
4666

4667
  tDecoderInit(&decoder, buf, bufLen);
616,898✔
4668
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
616,898!
4669

4670
  // decode data block
4671
  int8_t hasData = false;
616,898✔
4672
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &hasData));
616,898!
4673
  pBlock = pRsp->dataBlock;
616,898✔
4674
  if (hasData) {
616,898✔
4675
    TAOS_CHECK_EXIT(pBlock != NULL ? TSDB_CODE_SUCCESS : TSDB_CODE_INVALID_PARA);
498,908!
4676
    const char* pEndPos = NULL;
498,908✔
4677
    TAOS_CHECK_EXIT(blockDecode(pBlock, (char*)decoder.data + decoder.pos, &pEndPos));
498,908!
4678
    decoder.pos = (uint8_t*)pEndPos - decoder.data;
498,908✔
4679

4680
    int32_t nSlices = 0;
498,908✔
4681
    TAOS_CHECK_EXIT(tDecodeI32(&decoder, &nSlices));
498,908!
4682
    TAOS_CHECK_EXIT(taosArrayEnsureCap(pSlices, nSlices));
498,908!
4683
    taosArrayClear(pSlices);
498,908✔
4684
    int64_t  uid = 0;
498,908✔
4685
    uint64_t gid = 0;
498,908✔
4686
    int32_t  startIdx = 0;
498,908✔
4687
    int32_t  numRows = 0;
498,908✔
4688
    for (int32_t i = 0; i < nSlices; i++) {
1,121,016✔
4689
      TAOS_CHECK_EXIT(tDecodeI64(&decoder, &uid));
622,108!
4690
      TAOS_CHECK_EXIT(tDecodeU64(&decoder, &gid));
622,108!
4691
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &startIdx));
622,108!
4692
      TAOS_CHECK_EXIT(tDecodeI32(&decoder, &numRows));
622,108!
4693
      int32_t endIdx = startIdx + numRows;
622,108✔
4694
      int64_t value[3] = {gid, uid, (int64_t)startIdx << 32 | endIdx};
622,108✔
4695
      void*   px = taosArrayPush(pSlices, value);
622,108✔
4696
      if (px == NULL) {
622,108!
UNCOV
4697
        code = terrno;
×
UNCOV
4698
        goto _exit;
×
4699
      }
4700
    }
4701
  } else if (pBlock != NULL) {
117,990✔
4702
    blockDataEmpty(pBlock);
6,130✔
4703
    taosArrayClear(pSlices);
6,130✔
4704
  }
4705

4706
  int8_t hasMeta = false;
616,898✔
4707
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &hasMeta));
616,898!
4708
  pBlock = pRsp->metaBlock;
616,898✔
4709
  if (hasMeta) {
616,898✔
4710
    TAOS_CHECK_EXIT(pBlock != NULL ? TSDB_CODE_SUCCESS : TSDB_CODE_INVALID_PARA);
250,232!
4711
    const char* pEndPos = NULL;
250,232✔
4712
    TAOS_CHECK_EXIT(blockDecode(pBlock, (char*)decoder.data + decoder.pos, &pEndPos));
250,232!
4713
    decoder.pos = (uint8_t*)pEndPos - decoder.data;
250,232✔
4714
  } else if (pBlock != NULL) {
366,666✔
4715
    blockDataEmpty(pBlock);
8,942✔
4716
  }
4717

4718
  int8_t hasDel = false;
616,898✔
4719
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &hasDel));
616,898!
4720
  pBlock = pRsp->deleteBlock;
616,898✔
4721
  if (hasDel) {
616,898✔
4722
    TAOS_CHECK_EXIT(pBlock != NULL ? TSDB_CODE_SUCCESS : TSDB_CODE_INVALID_PARA);
10,570!
4723
    const char* pEndPos = NULL;
10,570✔
4724
    TAOS_CHECK_EXIT(blockDecode(pBlock, (char*)decoder.data + decoder.pos, &pEndPos));
10,570!
4725
    decoder.pos = (uint8_t*)pEndPos - decoder.data;
10,570✔
4726
  } else if (pBlock != NULL) {
606,328✔
4727
    blockDataEmpty(pBlock);
248,604✔
4728
  }
4729

4730
  int8_t hasDrop = false;
616,898✔
4731
  TAOS_CHECK_EXIT(tDecodeI8(&decoder, &hasDrop));
616,898!
4732
  pBlock = pRsp->dropBlock;
616,898✔
4733
  if (hasDrop) {
616,898✔
4734
    TAOS_CHECK_EXIT(pBlock != NULL ? TSDB_CODE_SUCCESS : TSDB_CODE_INVALID_PARA);
583!
4735
    const char* pEndPos = NULL;
583✔
4736
    TAOS_CHECK_EXIT(blockDecode(pBlock, (char*)decoder.data + decoder.pos, &pEndPos));
583!
4737
    decoder.pos = (uint8_t*)pEndPos - decoder.data;
583✔
4738
  } else if (pBlock != NULL) {
616,315✔
4739
    blockDataEmpty(pBlock);
258,591✔
4740
  }
4741
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRsp->ver));
1,233,796!
4742
  TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRsp->verTime));
1,233,796!
4743

4744
  tEndDecode(&decoder);
616,898✔
4745

4746
_exit:
616,898✔
4747
  if (code != TSDB_CODE_SUCCESS) {
616,898!
UNCOV
4748
    uError("%s failed at line %d since %s", __func__, lino, tstrerror(code));
×
4749
  }
4750
  tDecoderClear(&decoder);
616,898✔
4751
  return code;
616,898✔
4752
}
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