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

taosdata / TDengine / #5075

17 May 2026 01:15AM UTC coverage: 73.406% (+0.1%) from 73.309%
#5075

push

travis-ci

web-flow
feat (TDgpt): Dynamic Model Synchronization Enhancements (#35344)

* refactor: do some internal refactor.

* fix: fix multiprocess sync issue.

* feat: add dynamic anomaly detection and forecasting services

* fix: log error message for undeploying model in exception handling

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: handle undeploy when model exists only on disk

Agent-Logs-Url: https://github.com/taosdata/TDengine/sessions/286aafa0-c3ce-4c27-b803-2707571e9dc1

Co-authored-by: hjxilinx <8252296+hjxilinx@users.noreply.github.com>

* fix: guard dynamic registry concurrent access

Agent-Logs-Url: https://github.com/taosdata/TDengine/sessions/5e4db858-6458-40f4-ac28-d1b1b7f97c18

Co-authored-by: hjxilinx <8252296+hjxilinx@users.noreply.github.com>

* fix: tighten service list locking scope

Agent-Logs-Url: https://github.com/taosdata/TDengine/sessions/5e4db858-6458-40f4-ac28-d1b1b7f97c18

Co-authored-by: hjxilinx <8252296+hjxilinx@users.noreply.github.com>

* fix: restore prophet support and update tests per review feedback

Agent-Logs-Url: https://github.com/taosdata/TDengine/sessions/92298ae1-7da6-4d07-b20e-101c7cd0b26b

Co-authored-by: hjxilinx <8252296+hjxilinx@users.noreply.github.com>

* fix: improve test name and move copy inside lock scope

Agent-Logs-Url: https://github.com/taosdata/TDengine/sessions/92298ae1-7da6-4d07-b20e-101c7cd0b26b

Co-authored-by: hjxilinx <8252296+hjxilinx@users.noreply.github.com>

* Potential fix for pull request finding

Co-au... (continued)

281727 of 383795 relevant lines covered (73.41%)

138555372.83 hits per line

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

79.3
/source/dnode/vnode/src/meta/metaEntry.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 "meta.h"
17
#include "osMemPool.h"
18
#include "osMemory.h"
19
#include "tencode.h"
20
#include "tmsg.h"
21

22
bool schemasHasTypeMod(const SSchema *pSchema, int32_t nCols) {
1,570,763,558✔
23
  for (int32_t i = 0; i < nCols; i++) {
2,147,483,647✔
24
    if (HAS_TYPE_MOD(pSchema + i)) {
2,147,483,647✔
25
      return true;
187,870,589✔
26
    }
27
  }
28
  return false;
1,379,362,318✔
29
}
30

31
static const SSchemaWrapper *metaGetEntryRowSchema(const SMetaEntry *pME) {
1,996,541,542✔
32
  if (pME == NULL) {
1,996,541,542✔
33
    return NULL;
×
34
  }
35

36
  if (pME->type == TSDB_SUPER_TABLE) {
1,996,541,542✔
37
    return &pME->stbEntry.schemaRow;
1,331,371,631✔
38
  }
39

40
  if (pME->type == TSDB_NORMAL_TABLE || pME->type == TSDB_VIRTUAL_NORMAL_TABLE) {
665,611,997✔
41
    return &pME->ntbEntry.schemaRow;
456,642,397✔
42
  }
43

44
  return NULL;
208,983,662✔
45
}
46

47
static int32_t metaGetEntryRowSchemaNum(const SMetaEntry *pME) {
230,924,846✔
48
  const SSchemaWrapper *pSchema = metaGetEntryRowSchema(pME);
230,924,846✔
49
  return pSchema == NULL ? 0 : pSchema->nCols;
230,970,038✔
50
}
51

52
static int32_t metaEncodeExtSchema(SEncoder* pCoder, const SMetaEntry* pME) {
235,542,140✔
53
  const SSchemaWrapper *pSchWrapper = metaGetEntryRowSchema(pME);
235,542,140✔
54
  bool                  hasTypeMods = false;
235,632,606✔
55

56
  if (pME->pExtSchemas == NULL || pSchWrapper == NULL) {
235,632,606✔
57
    return 0;
221,394,120✔
58
  }
59

60
  hasTypeMods = schemasHasTypeMod(pSchWrapper->pSchema, pSchWrapper->nCols);
14,270,245✔
61
  for (int32_t i = 0; i < pSchWrapper->nCols && hasTypeMods; ++i) {
1,632,545,047✔
62
    TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pME->pExtSchemas[i].typeMod));
2,147,483,647✔
63
  }
64
  return 0;
14,795,716✔
65
}
66

67
int meteEncodeColRefEntry(SEncoder *pCoder, const SMetaEntry *pME) {
2,250,096✔
68
  const SColRefWrapper *pw = &pME->colRef;
2,250,096✔
69
  TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pw->nCols));
4,501,552✔
70
  TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pw->version));
4,501,552✔
71
  uTrace("encode cols:%d", pw->nCols);
2,250,776✔
72

73
  for (int32_t i = 0; i < pw->nCols; i++) {
520,340,140✔
74
    SColRef *p = &pw->pColRef[i];
518,089,364✔
75
    TAOS_CHECK_RETURN(tEncodeI8(pCoder, p->hasRef));
1,036,178,728✔
76
    TAOS_CHECK_RETURN(tEncodeI16v(pCoder, p->id));
1,036,178,728✔
77
    if (p->hasRef) {
518,089,364✔
78
      TAOS_CHECK_RETURN(tEncodeCStr(pCoder, p->refDbName));
686,570,216✔
79
      TAOS_CHECK_RETURN(tEncodeCStr(pCoder, p->refTableName));
686,570,216✔
80
      TAOS_CHECK_RETURN(tEncodeCStr(pCoder, p->refColName));
686,570,216✔
81
    }
82
  }
83

84
  // Encode tag references
85
  TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pw->nTagRefs));
4,500,872✔
86
  for (int32_t i = 0; i < pw->nTagRefs; i++) {
2,250,096✔
87
    SColRef *p = &pw->pTagRef[i];
×
88
    TAOS_CHECK_RETURN(tEncodeI8(pCoder, p->hasRef));
×
89
    TAOS_CHECK_RETURN(tEncodeI16v(pCoder, p->id));
×
90
    if (p->hasRef) {
×
91
      TAOS_CHECK_RETURN(tEncodeCStr(pCoder, p->refDbName));
×
92
      TAOS_CHECK_RETURN(tEncodeCStr(pCoder, p->refTableName));
×
93
      TAOS_CHECK_RETURN(tEncodeCStr(pCoder, p->refColName));
×
94
    }
95
  }
96

97
  return 0;
2,250,096✔
98
}
99

100
static int32_t metaDecodeExtSchemas(SDecoder* pDecoder, SMetaEntry* pME) {
1,477,181,503✔
101
  bool                  hasExtSchema = false;
1,477,181,503✔
102
  const SSchemaWrapper* pSchWrapper = metaGetEntryRowSchema((const SMetaEntry*)pME);
1,477,181,503✔
103

104
  if (pSchWrapper == NULL) {
1,476,052,366✔
105
    return 0;
×
106
  }
107

108
  hasExtSchema = schemasHasTypeMod(pSchWrapper->pSchema, pSchWrapper->nCols);
1,476,052,366✔
109
  if (hasExtSchema && pSchWrapper->nCols > 0) {
1,476,978,800✔
110
    pME->pExtSchemas = (SExtSchema*)tDecoderMalloc(pDecoder, sizeof(SExtSchema) * pSchWrapper->nCols);
344,418,295✔
111
    if (pME->pExtSchemas == NULL) {
172,207,631✔
112
      return terrno;
×
113
    }
114

115
    for (int32_t i = 0; i < pSchWrapper->nCols && hasExtSchema; i++) {
2,147,483,647✔
116
      TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pME->pExtSchemas[i].typeMod));
2,147,483,647✔
117
    }
118
  } else {
119
    pME->pExtSchemas = NULL;
1,304,758,959✔
120
  }
121

122
  return 0;
1,477,194,252✔
123
}
124

125
SExtSchema* metaGetSExtSchema(const SMetaEntry *pME) {
53,091,974✔
126
  const SSchemaWrapper *pSchWrapper = metaGetEntryRowSchema(pME);
53,091,974✔
127
  bool                  hasTypeMods = false;
53,148,355✔
128

129
  if (pSchWrapper == NULL) {
53,148,355✔
130
    return NULL;
×
131
  }
132

133
  hasTypeMods = schemasHasTypeMod(pSchWrapper->pSchema, pSchWrapper->nCols);
53,148,355✔
134

135
  if (hasTypeMods) {
53,069,810✔
136
    SExtSchema *ret = taosMemoryMalloc(sizeof(SExtSchema) * pSchWrapper->nCols);
40,147✔
137
    if (ret != NULL) {
40,147✔
138
      memcpy(ret, pME->pExtSchemas, pSchWrapper->nCols * sizeof(SExtSchema));
40,147✔
139
    }
140
    return ret;
40,147✔
141
  }
142
  return NULL;
53,029,663✔
143
}
144

145
int32_t metaGetRsmaSchema(const SMetaEntry *pME, SSchemaRsma **rsmaSchema) {
30,895✔
146
  if (!rsmaSchema) return 0;
30,895✔
147
  if ((pME->type != TSDB_SUPER_TABLE) || !TABLE_IS_ROLLUP(pME->flags)) {  // only support super table
30,895✔
148
    *rsmaSchema = NULL;
×
149
    return 0;
×
150
  }
151

152
  const SRSmaParam *pParam = &pME->stbEntry.rsmaParam;
30,895✔
153
  const SSchema    *pSchema = pME->stbEntry.schemaRow.pSchema;
30,895✔
154
  int32_t           nCols = pME->stbEntry.schemaRow.nCols;
30,895✔
155

156
  *rsmaSchema = (SSchemaRsma *)taosMemoryMalloc(sizeof(SSchemaRsma));
30,895✔
157
  if (*rsmaSchema == NULL) {
30,895✔
158
    return terrno;
×
159
  }
160

161
  (*rsmaSchema)->funcIds = taosMemoryMalloc(sizeof(func_id_t) * nCols);
30,895✔
162
  if ((*rsmaSchema)->funcIds == NULL) {
30,895✔
163
    taosMemoryFree(*rsmaSchema);
×
164
    *rsmaSchema = NULL;
×
165
    return terrno;
×
166
  }
167

168
  (void)snprintf((*rsmaSchema)->tbName, TSDB_TABLE_NAME_LEN, "%s", pME->name);
30,895✔
169
  (*rsmaSchema)->tbUid = pME->uid;
30,895✔
170
  (*rsmaSchema)->tbType = pME->type;
30,895✔
171
  (*rsmaSchema)->interval[0] = pParam->interval[0];
30,895✔
172
  (*rsmaSchema)->interval[1] = pParam->interval[1];
30,895✔
173
  (*rsmaSchema)->nFuncs = nCols;
30,895✔
174

175
  func_id_t *pFuncIds = (*rsmaSchema)->funcIds;
30,895✔
176
  int32_t    i = 0, j = 0;
30,895✔
177
  for (i = 0; i < nCols; ++i) {
233,800✔
178
    while (j < pParam->nFuncs) {
369,070✔
179
      if (pParam->funcColIds[j] == pSchema[i].colId) {
354,040✔
180
        pFuncIds[i] = pParam->funcIds[j];
165,330✔
181
        break;
165,330✔
182
      }
183
      if (pParam->funcColIds[j] > pSchema[i].colId) {
188,710✔
184
        pFuncIds[i] = 36;  // use last if not specified, fmGetFuncId("last") = 36
37,575✔
185
        break;
37,575✔
186
      }
187
      ++j;
151,135✔
188
    }
189
    if (j >= pParam->nFuncs) {
217,935✔
190
      for (; i < nCols; ++i) {
30,060✔
191
        pFuncIds[i] = 36;  // use last if not specified, fmGetFuncId("last") = 36
15,030✔
192
      }
193
      break;
15,030✔
194
    }
195
  }
196
  pFuncIds[0] = 0;  // Primary TS column has no function
30,895✔
197

198
  return 0;
30,895✔
199
}
200

201
int meteDecodeColRefEntry(SDecoder *pDecoder, SMetaEntry *pME) {
70,457,798✔
202
  SColRefWrapper *pWrapper = &pME->colRef;
70,457,798✔
203
  TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pWrapper->nCols));
140,936,426✔
204
  if (pWrapper->nCols == 0) {
70,457,550✔
205
    return 0;
×
206
  }
207

208
  TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pWrapper->version));
140,923,155✔
209
  uDebug("decode cols:%d", pWrapper->nCols);
70,467,190✔
210
  pWrapper->pColRef = (SColRef *)tDecoderMalloc(pDecoder, pWrapper->nCols * sizeof(SColRef));
140,939,173✔
211
  if (pWrapper->pColRef == NULL) {
70,462,898✔
212
    return terrno;
×
213
  }
214

215
  for (int i = 0; i < pWrapper->nCols; i++) {
1,209,139,942✔
216
    SColRef *p = &pWrapper->pColRef[i];
1,138,725,017✔
217
    TAOS_CHECK_RETURN(tDecodeI8(pDecoder, (int8_t *)&p->hasRef));
2,147,483,647✔
218
    TAOS_CHECK_RETURN(tDecodeI16v(pDecoder, &p->id));
2,147,483,647✔
219
    if (p->hasRef) {
1,138,762,373✔
220
      TAOS_CHECK_RETURN(tDecodeCStrTo(pDecoder, p->refDbName));
619,096,788✔
221
      TAOS_CHECK_RETURN(tDecodeCStrTo(pDecoder, p->refTableName));
619,088,852✔
222
      TAOS_CHECK_RETURN(tDecodeCStrTo(pDecoder, p->refColName));
619,113,478✔
223
    }
224
  }
225

226
  // Decode tag references (backward compatible)
227
  pWrapper->nTagRefs = 0;
70,336,183✔
228
  pWrapper->pTagRef = NULL;
70,499,724✔
229
  if (!tDecodeIsEnd(pDecoder)) {
70,490,319✔
230
    TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pWrapper->nTagRefs));
140,967,812✔
231
    if (pWrapper->nTagRefs > 0) {
70,476,295✔
232
      pWrapper->pTagRef = (SColRef *)tDecoderMalloc(pDecoder, pWrapper->nTagRefs * sizeof(SColRef));
×
233
      if (pWrapper->pTagRef == NULL) {
×
234
        return terrno;
×
235
      }
236

237
      for (int i = 0; i < pWrapper->nTagRefs; i++) {
×
238
        SColRef *p = &pWrapper->pTagRef[i];
×
239
        TAOS_CHECK_RETURN(tDecodeI8(pDecoder, (int8_t *)&p->hasRef));
×
240
        TAOS_CHECK_RETURN(tDecodeI16v(pDecoder, &p->id));
×
241
        if (p->hasRef) {
×
242
          TAOS_CHECK_RETURN(tDecodeCStrTo(pDecoder, p->refDbName));
×
243
          TAOS_CHECK_RETURN(tDecodeCStrTo(pDecoder, p->refTableName));
×
244
          TAOS_CHECK_RETURN(tDecodeCStrTo(pDecoder, p->refColName));
×
245
        }
246
      }
247
    }
248
  }
249

250
  return 0;
70,460,047✔
251
}
252

253
static FORCE_INLINE int32_t metatInitDefaultSColRefWrapper(SDecoder *pDecoder, SColRefWrapper *pRef,
254
                                                            SSchemaWrapper *pSchema) {
255
  pRef->nCols = pSchema->nCols;
×
256
  if ((pRef->pColRef = (SColRef *)tDecoderMalloc(pDecoder, pRef->nCols * sizeof(SColRef))) == NULL) {
×
257
    return terrno;
×
258
  }
259

260
  for (int32_t i = 0; i < pRef->nCols; i++) {
×
261
    SColRef  *pColRef = &pRef->pColRef[i];
×
262
    SSchema  *pColSchema = &pSchema->pSchema[i];
×
263
    pColRef->id = pColSchema->colId;
×
264
    pColRef->hasRef = false;
×
265
  }
266
  return 0;
×
267
}
268

269
static int32_t metaCloneColRef(const SColRefWrapper*pSrc, SColRefWrapper *pDst) {
1,404,866✔
270
  if (pSrc->nCols > 0) {
1,404,866✔
271
    pDst->nCols = pSrc->nCols;
1,404,866✔
272
    pDst->version = pSrc->version;
1,404,866✔
273
    pDst->pColRef = (SColRef*)taosMemoryCalloc(pSrc->nCols, sizeof(SColRef));
1,404,186✔
274
    if (NULL == pDst->pColRef) {
1,404,186✔
275
      return terrno;
×
276
    }
277
    memcpy(pDst->pColRef, pSrc->pColRef, pSrc->nCols * sizeof(SColRef));
1,404,866✔
278
  }
279
  return 0;
1,403,506✔
280
}
281

282
static int32_t metaEncodeComprEntryImpl(SEncoder *pCoder, SColCmprWrapper *pw) {
55,857,718✔
283
  int32_t code = 0;
55,857,718✔
284
  TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pw->nCols));
111,745,455✔
285
  TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pw->version));
111,939,339✔
286
  uTrace("encode cols:%d", pw->nCols);
56,051,602✔
287

288
  for (int32_t i = 0; i < pw->nCols; i++) {
2,147,483,647✔
289
    SColCmpr *p = &pw->pColCmpr[i];
2,147,483,647✔
290
    TAOS_CHECK_RETURN(tEncodeI16v(pCoder, p->id));
2,147,483,647✔
291
    TAOS_CHECK_RETURN(tEncodeU32(pCoder, p->alg));
2,147,483,647✔
292
  }
293
  return code;
56,145,357✔
294
}
295
int meteEncodeColCmprEntry(SEncoder *pCoder, const SMetaEntry *pME) {
55,766,632✔
296
  const SColCmprWrapper *pw = &pME->colCmpr;
55,766,632✔
297
  return metaEncodeComprEntryImpl(pCoder, (SColCmprWrapper *)pw);
55,808,098✔
298
}
299
int meteDecodeColCmprEntry(SDecoder *pDecoder, SMetaEntry *pME) {
1,477,263,528✔
300
  SColCmprWrapper *pWrapper = &pME->colCmpr;
1,477,263,528✔
301
  TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pWrapper->nCols));
2,147,483,647✔
302
  if (pWrapper->nCols == 0) {
1,477,378,235✔
303
    return 0;
×
304
  }
305

306
  TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pWrapper->version));
2,147,483,647✔
307
  uDebug("dencode cols:%d", pWrapper->nCols);
1,477,509,207✔
308
  pWrapper->pColCmpr = (SColCmpr *)tDecoderMalloc(pDecoder, pWrapper->nCols * sizeof(SColCmpr));
2,147,483,647✔
309
  if (pWrapper->pColCmpr == NULL) {
1,476,675,572✔
310
    return terrno;
×
311
  }
312

313
  for (int i = 0; i < pWrapper->nCols; i++) {
2,147,483,647✔
314
    SColCmpr *p = &pWrapper->pColCmpr[i];
2,147,483,647✔
315
    TAOS_CHECK_RETURN(tDecodeI16v(pDecoder, &p->id));
2,147,483,647✔
316
    TAOS_CHECK_RETURN(tDecodeU32(pDecoder, &p->alg));
2,147,483,647✔
317
  }
318
  return 0;
1,479,249,371✔
319
}
320
static FORCE_INLINE int32_t metatInitDefaultSColCmprWrapper(SDecoder *pDecoder, SColCmprWrapper *pCmpr,
321
                                                            SSchemaWrapper *pSchema) {
322
  pCmpr->nCols = pSchema->nCols;
325,480✔
323

324
  if (pDecoder == NULL) {
325,480✔
325
    pCmpr->pColCmpr = taosMemoryCalloc(1, pCmpr->nCols * sizeof(SColCmpr));
325,480✔
326
  } else {
327
    pCmpr->pColCmpr = (SColCmpr *)tDecoderMalloc(pDecoder, pCmpr->nCols * sizeof(SColCmpr));
×
328
  }
329

330
  if (pCmpr->pColCmpr == NULL) {
325,480✔
331
    return terrno;
×
332
  }
333

334
  for (int32_t i = 0; i < pCmpr->nCols; i++) {
1,618,980✔
335
    SColCmpr *pColCmpr = &pCmpr->pColCmpr[i];
1,293,500✔
336
    SSchema  *pColSchema = &pSchema->pSchema[i];
1,293,500✔
337
    pColCmpr->id = pColSchema->colId;
1,293,500✔
338
    pColCmpr->alg = createDefaultColCmprByType(pColSchema->type);
1,293,500✔
339
  }
340
  return 0;
325,480✔
341
}
342

343
static int32_t metaCloneColCmpr(const SColCmprWrapper *pSrc, SColCmprWrapper *pDst) {
229,536,434✔
344
  if (pSrc->nCols > 0) {
229,536,434✔
345
    pDst->nCols = pSrc->nCols;
200,076,482✔
346
    pDst->version = pSrc->version;
200,086,738✔
347
    pDst->pColCmpr = (SColCmpr *)taosMemoryCalloc(pSrc->nCols, sizeof(SColCmpr));
200,068,020✔
348
    if (NULL == pDst->pColCmpr) {
200,023,877✔
349
      return terrno;
×
350
    }
351
    memcpy(pDst->pColCmpr, pSrc->pColCmpr, pSrc->nCols * sizeof(SColCmpr));
200,026,710✔
352
  }
353
  return 0;
229,575,578✔
354
}
355

356
static void metaCloneColRefFree(SColRefWrapper *pColRef) {
230,869,593✔
357
  if (pColRef) {
230,869,593✔
358
    taosMemoryFreeClear(pColRef->pColRef);
230,902,336✔
359
  }
360
}
230,913,069✔
361

362
static void metaCloneColCmprFree(SColCmprWrapper *pCmpr) {
230,880,626✔
363
  if (pCmpr) {
230,880,626✔
364
    taosMemoryFreeClear(pCmpr->pColCmpr);
230,907,120✔
365
  }
366
}
230,979,802✔
367

368
int metaEncodeEntry(SEncoder *pCoder, const SMetaEntry *pME) {
241,397,938✔
369
  TAOS_CHECK_RETURN(tStartEncode(pCoder));
241,397,938✔
370
  TAOS_CHECK_RETURN(tEncodeI64(pCoder, pME->version));
482,977,811✔
371
  TAOS_CHECK_RETURN(tEncodeI8(pCoder, pME->type));
482,941,808✔
372
  TAOS_CHECK_RETURN(tEncodeI64(pCoder, pME->uid));
482,919,849✔
373

374
  if (pME->type > 0) {
241,450,185✔
375
    if (pME->name == NULL) {
235,600,860✔
376
      return TSDB_CODE_INVALID_PARA;
×
377
    }
378

379
    TAOS_CHECK_RETURN(tEncodeCStr(pCoder, pME->name));
471,321,171✔
380

381
    if (pME->type == TSDB_SUPER_TABLE) {
235,723,731✔
382
      TAOS_CHECK_RETURN(tEncodeI8(pCoder, pME->flags));
61,436,507✔
383
      TAOS_CHECK_RETURN(tEncodeSSchemaWrapper(pCoder, &pME->stbEntry.schemaRow));
61,471,811✔
384
      TAOS_CHECK_RETURN(tEncodeSSchemaWrapper(pCoder, &pME->stbEntry.schemaTag));
61,507,282✔
385
      if (TABLE_IS_ROLLUP(pME->flags)) {
30,715,212✔
386
        TAOS_CHECK_RETURN(tEncodeSRSmaParam(pCoder, &pME->stbEntry.rsmaParam));
125,390✔
387
      }
388
    } else if (pME->type == TSDB_CHILD_TABLE || pME->type == TSDB_VIRTUAL_CHILD_TABLE) {
204,832,032✔
389
      TAOS_CHECK_RETURN(tEncodeI64(pCoder, pME->ctbEntry.btime));
357,232,853✔
390
      TAOS_CHECK_RETURN(tEncodeI32(pCoder, pME->ctbEntry.ttlDays));
357,247,608✔
391
      TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pME->ctbEntry.commentLen));
357,262,130✔
392
      if (pME->ctbEntry.commentLen > 0) {
178,640,777✔
393
        TAOS_CHECK_RETURN(tEncodeCStr(pCoder, pME->ctbEntry.comment));
32,592✔
394
      }
395
      TAOS_CHECK_RETURN(tEncodeI64(pCoder, pME->ctbEntry.suid));
357,246,262✔
396
      TAOS_CHECK_RETURN(tEncodeTag(pCoder, (const STag *)pME->ctbEntry.pTags));
178,621,439✔
397
    } else if (pME->type == TSDB_NORMAL_TABLE || pME->type == TSDB_VIRTUAL_NORMAL_TABLE) {
26,252,760✔
398
      TAOS_CHECK_RETURN(tEncodeI64(pCoder, pME->ntbEntry.btime));
52,505,520✔
399
      TAOS_CHECK_RETURN(tEncodeI32(pCoder, pME->ntbEntry.ttlDays));
52,505,520✔
400
      TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pME->ntbEntry.commentLen));
52,505,520✔
401
      if (pME->ntbEntry.commentLen > 0) {
26,252,760✔
402
        TAOS_CHECK_RETURN(tEncodeCStr(pCoder, pME->ntbEntry.comment));
46,688✔
403
      }
404
      TAOS_CHECK_RETURN(tEncodeI32v(pCoder, pME->ntbEntry.ncid));
52,505,520✔
405
      TAOS_CHECK_RETURN(tEncodeSSchemaWrapper(pCoder, &pME->ntbEntry.schemaRow));
52,505,520✔
406
    } else if (pME->type == TSDB_TSMA_TABLE) {
×
407
      TAOS_CHECK_RETURN(tEncodeTSma(pCoder, pME->smaEntry.tsma));
×
408
    } else {
409
      metaError("meta/entry: invalide table type: %" PRId8 " encode failed.", pME->type);
×
410
      return TSDB_CODE_INVALID_PARA;
×
411
    }
412
    if (pME->type == TSDB_VIRTUAL_NORMAL_TABLE || pME->type == TSDB_VIRTUAL_CHILD_TABLE) {
235,590,817✔
413
      TAOS_CHECK_RETURN(meteEncodeColRefEntry(pCoder, pME));
2,455,464✔
414
    } else {
415
      if (pME->type == TSDB_SUPER_TABLE && TABLE_IS_COL_COMPRESSED(pME->flags)) {
233,318,207✔
416
        TAOS_CHECK_RETURN(meteEncodeColCmprEntry(pCoder, pME));
30,803,439✔
417
      } else if (pME->type == TSDB_NORMAL_TABLE) {
202,578,526✔
418
        if (pME->colCmpr.nCols != 0) {
25,319,784✔
419
          TAOS_CHECK_RETURN(meteEncodeColCmprEntry(pCoder, pME));
24,994,304✔
420
        } else {
421
          metaWarn("meta/entry: failed to get compress cols, type:%d", pME->type);
325,480✔
422
          SColCmprWrapper colCmprs = {0};
325,480✔
423
          int32_t code = metatInitDefaultSColCmprWrapper(NULL, &colCmprs, (SSchemaWrapper *)&pME->ntbEntry.schemaRow);
325,480✔
424
          if (code != 0) {
325,480✔
425
            taosMemoryFree(colCmprs.pColCmpr);
×
426
            TAOS_CHECK_RETURN(code);
×
427
          }
428
          code = metaEncodeComprEntryImpl(pCoder, &colCmprs);
325,480✔
429
          taosMemoryFree(colCmprs.pColCmpr);
325,480✔
430
          TAOS_CHECK_RETURN(code);
325,480✔
431
        }
432
      }
433
    }
434
    TAOS_CHECK_RETURN(metaEncodeExtSchema(pCoder, pME));
235,687,630✔
435
  }
436
  if (pME->type == TSDB_SUPER_TABLE) {
241,457,421✔
437
    TAOS_CHECK_RETURN(tEncodeI64(pCoder, pME->stbEntry.keep));
61,380,039✔
438
    TAOS_CHECK_RETURN(tEncodeI64v(pCoder, pME->stbEntry.ownerId));
61,299,299✔
439
    TAOS_CHECK_RETURN(tEncodeI8(pCoder, pME->stbEntry.securityLevel));
61,208,387✔
440
  } else if (pME->type == TSDB_NORMAL_TABLE) {
210,625,641✔
441
    TAOS_CHECK_RETURN(tEncodeI64(pCoder, pME->ntbEntry.ownerId));
50,639,568✔
442
  }
443

444
  tEndEncode(pCoder);
241,205,667✔
445
  return 0;
241,233,276✔
446
}
447

448
int metaDecodeEntryImpl(SDecoder *pCoder, SMetaEntry *pME, bool headerOnly) {
2,147,483,647✔
449
  TAOS_CHECK_RETURN(tStartDecode(pCoder));
2,147,483,647✔
450
  TAOS_CHECK_RETURN(tDecodeI64(pCoder, &pME->version));
2,147,483,647✔
451
  TAOS_CHECK_RETURN(tDecodeI8(pCoder, &pME->type));
2,147,483,647✔
452
  TAOS_CHECK_RETURN(tDecodeI64(pCoder, &pME->uid));
2,147,483,647✔
453

454
  if (headerOnly) {
2,147,483,647✔
455
    tEndDecode(pCoder);
438,058✔
456
    return 0;
438,058✔
457
  }
458

459
  if (pME->type > 0) {
2,147,483,647✔
460
    TAOS_CHECK_RETURN(tDecodeCStr(pCoder, &pME->name));
2,147,483,647✔
461

462
    if (pME->type == TSDB_SUPER_TABLE) {
2,147,483,647✔
463
      TAOS_CHECK_RETURN(tDecodeI8(pCoder, &pME->flags));
2,143,533,028✔
464
      TAOS_CHECK_RETURN(tDecodeSSchemaWrapperEx(pCoder, &pME->stbEntry.schemaRow));
2,144,653,541✔
465
      TAOS_CHECK_RETURN(tDecodeSSchemaWrapperEx(pCoder, &pME->stbEntry.schemaTag));
2,144,502,358✔
466
      if (TABLE_IS_ROLLUP(pME->flags)) {
1,072,013,455✔
467
        TAOS_CHECK_RETURN(tDecodeSRSmaParam(pCoder, &pME->stbEntry.rsmaParam));
384,383✔
468
      }
469
    } else if (pME->type == TSDB_CHILD_TABLE || pME->type == TSDB_VIRTUAL_CHILD_TABLE) {
1,474,788,972✔
470
      TAOS_CHECK_RETURN(tDecodeI64(pCoder, &pME->ctbEntry.btime));
2,115,738,637✔
471
      TAOS_CHECK_RETURN(tDecodeI32(pCoder, &pME->ctbEntry.ttlDays));
2,116,341,448✔
472
      TAOS_CHECK_RETURN(tDecodeI32v(pCoder, &pME->ctbEntry.commentLen));
2,115,321,107✔
473
      if (pME->ctbEntry.commentLen > 0) {
1,057,159,350✔
474
        TAOS_CHECK_RETURN(tDecodeCStr(pCoder, &pME->ctbEntry.comment));
56,382✔
475
      }
476
      TAOS_CHECK_RETURN(tDecodeI64(pCoder, &pME->ctbEntry.suid));
2,115,557,603✔
477
      TAOS_CHECK_RETURN(tDecodeTag(pCoder, (STag **)&pME->ctbEntry.pTags));
1,058,207,285✔
478
    } else if (pME->type == TSDB_NORMAL_TABLE || pME->type == TSDB_VIRTUAL_NORMAL_TABLE) {
417,799,897✔
479
      TAOS_CHECK_RETURN(tDecodeI64(pCoder, &pME->ntbEntry.btime));
836,336,791✔
480
      TAOS_CHECK_RETURN(tDecodeI32(pCoder, &pME->ntbEntry.ttlDays));
836,626,743✔
481
      TAOS_CHECK_RETURN(tDecodeI32v(pCoder, &pME->ntbEntry.commentLen));
836,311,723✔
482
      if (pME->ntbEntry.commentLen > 0) {
417,992,261✔
483
        TAOS_CHECK_RETURN(tDecodeCStr(pCoder, &pME->ntbEntry.comment));
85,890✔
484
      }
485
      TAOS_CHECK_RETURN(tDecodeI32v(pCoder, &pME->ntbEntry.ncid));
835,989,339✔
486
      TAOS_CHECK_RETURN(tDecodeSSchemaWrapperEx(pCoder, &pME->ntbEntry.schemaRow));
836,374,802✔
487
    } else if (pME->type == TSDB_TSMA_TABLE) {
×
488
      pME->smaEntry.tsma = tDecoderMalloc(pCoder, sizeof(STSma));
×
489
      if (!pME->smaEntry.tsma) {
×
490
        return terrno;
×
491
      }
492
      TAOS_CHECK_RETURN(tDecodeTSma(pCoder, pME->smaEntry.tsma, true));
×
493
    } else {
494
      metaError("meta/entry: invalide table type: %" PRId8 " decode failed.", pME->type);
×
495
      return TSDB_CODE_INVALID_PARA;
×
496
    }
497
    if (pME->type == TSDB_SUPER_TABLE) {
2,147,483,647✔
498
      if (TABLE_IS_COL_COMPRESSED(pME->flags)) {
1,072,340,509✔
499
        TAOS_CHECK_RETURN(meteDecodeColCmprEntry(pCoder, pME));
1,072,150,323✔
500

501
        if (pME->colCmpr.nCols == 0) {
1,072,578,537✔
502
          TAOS_CHECK_RETURN(metatInitDefaultSColCmprWrapper(pCoder, &pME->colCmpr, &pME->stbEntry.schemaRow));
×
503
        }
504
      } else {
505
        TAOS_CHECK_RETURN(metatInitDefaultSColCmprWrapper(pCoder, &pME->colCmpr, &pME->stbEntry.schemaRow));
×
506
        TABLE_SET_COL_COMPRESSED(pME->flags);
×
507
      }
508
    } else if (pME->type == TSDB_NORMAL_TABLE) {
1,474,909,660✔
509
      if (!tDecodeIsEnd(pCoder)) {
406,334,950✔
510
        uDebug("set type: %d, tableName:%s", pME->type, pME->name);
406,341,010✔
511
        TAOS_CHECK_RETURN(meteDecodeColCmprEntry(pCoder, pME));
406,341,557✔
512
        if (pME->colCmpr.nCols == 0) {
406,526,223✔
513
          TAOS_CHECK_RETURN(metatInitDefaultSColCmprWrapper(pCoder, &pME->colCmpr, &pME->ntbEntry.schemaRow));
×
514
        }
515
      } else {
516
        uDebug("set default type: %d, tableName:%s", pME->type, pME->name);
22✔
517
        TAOS_CHECK_RETURN(metatInitDefaultSColCmprWrapper(pCoder, &pME->colCmpr, &pME->ntbEntry.schemaRow));
22✔
518
      }
519
      TABLE_SET_COL_COMPRESSED(pME->flags);
406,359,007✔
520
    } else if (pME->type == TSDB_VIRTUAL_NORMAL_TABLE || pME->type == TSDB_VIRTUAL_CHILD_TABLE) {
1,068,648,137✔
521
      if (!tDecodeIsEnd(pCoder)) {
70,480,540✔
522
        uDebug("set type: %d, tableName:%s", pME->type, pME->name);
70,479,502✔
523
        TAOS_CHECK_RETURN(meteDecodeColRefEntry(pCoder, pME));
70,479,502✔
524
      } else {
525
        uDebug("set default type: %d, tableName:%s", pME->type, pME->name);
1,198✔
526
        if (pME->type == TSDB_VIRTUAL_NORMAL_TABLE) {
1,198✔
527
           TAOS_CHECK_RETURN(metatInitDefaultSColRefWrapper(pCoder, &pME->colRef, &pME->ntbEntry.schemaRow));
×
528
        }
529
      }
530
    }
531
    if (!tDecodeIsEnd(pCoder)) {
2,147,483,647✔
532
      TAOS_CHECK_RETURN(metaDecodeExtSchemas(pCoder, pME));
1,478,471,491✔
533
    } else {
534
      pME->pExtSchemas = NULL;
1,069,043,347✔
535
    }
536
  }
537
  if (pME->type == TSDB_SUPER_TABLE) {
2,147,483,647✔
538
    if (!tDecodeIsEnd(pCoder)) {
1,069,414,312✔
539
      TAOS_CHECK_RETURN(tDecodeI64(pCoder, &pME->stbEntry.keep));
2,142,557,340✔
540
    }
541
    if (!tDecodeIsEnd(pCoder)) {
1,071,137,900✔
542
      TAOS_CHECK_RETURN(tDecodeI64v(pCoder, &pME->stbEntry.ownerId));
2,142,702,441✔
543
    }
544
    if (!tDecodeIsEnd(pCoder)) {
1,070,718,484✔
545
      TAOS_CHECK_RETURN(tDecodeI8(pCoder, &pME->stbEntry.securityLevel));
2,142,563,393✔
546
    }
547
  } else if (pME->type == TSDB_NORMAL_TABLE) {
1,474,314,200✔
548
    if (!tDecodeIsEnd(pCoder)) {
406,073,948✔
549
      TAOS_CHECK_RETURN(tDecodeI64(pCoder, &pME->ntbEntry.ownerId));
812,422,616✔
550
    }
551
  }
552

553

554
  tEndDecode(pCoder);
2,147,483,647✔
555
  return 0;
2,147,483,647✔
556
}
557

558
int metaDecodeEntry(SDecoder *pCoder, SMetaEntry *pME) { return metaDecodeEntryImpl(pCoder, pME, false); }
2,147,483,647✔
559

560
static int32_t metaCloneSchema(const SSchemaWrapper *pSrc, SSchemaWrapper *pDst) {
391,065,548✔
561
  if (pSrc == NULL || pDst == NULL) {
391,065,548✔
562
    return TSDB_CODE_INVALID_PARA;
×
563
  }
564

565
  pDst->nCols = pSrc->nCols;
391,140,218✔
566
  pDst->version = pSrc->version;
391,133,694✔
567
  pDst->pSchema = (SSchema *)taosMemoryMalloc(pSrc->nCols * sizeof(SSchema));
391,183,953✔
568
  if (pDst->pSchema == NULL) {
390,952,155✔
569
    return terrno;
×
570
  }
571
  memcpy(pDst->pSchema, pSrc->pSchema, pSrc->nCols * sizeof(SSchema));
390,972,293✔
572
  return TSDB_CODE_SUCCESS;
391,208,212✔
573
}
574

575
static int32_t metaCloneRsmaParam(const SRSmaParam *pSrc, SRSmaParam *pDst) {
84,741✔
576
  if (pSrc == NULL || pDst == NULL) {
84,741✔
577
    return TSDB_CODE_INVALID_PARA;
×
578
  }
579
  memcpy(pDst, pSrc, sizeof(SRSmaParam));
84,741✔
580
  pDst->name = tstrdup(pSrc->name);
84,741✔
581
  if (pDst->name == NULL) {
84,741✔
582
    return terrno;
×
583
  }
584
  if (pSrc->nFuncs > 0) {
84,741✔
585
    pDst->nFuncs = pSrc->nFuncs;
84,741✔
586
    pDst->funcColIds = (col_id_t *)taosMemoryMalloc(pSrc->nFuncs * sizeof(col_id_t));
84,741✔
587
    if (pDst->funcColIds == NULL) {
84,741✔
588
      return terrno;
×
589
    }
590
    memcpy(pDst->funcColIds, pSrc->funcColIds, pSrc->nFuncs * sizeof(col_id_t));
84,741✔
591

592
    pDst->funcIds = (func_id_t *)taosMemoryMalloc(pSrc->nFuncs * sizeof(func_id_t));
84,741✔
593
    if (pDst->funcIds == NULL) {
84,741✔
594
      return terrno;
×
595
    }
596
    memcpy(pDst->funcIds, pSrc->funcIds, pSrc->nFuncs * sizeof(func_id_t));
84,741✔
597
  } else {
598
    pDst->nFuncs = 0;
×
599
    pDst->funcColIds = NULL;
×
600
    pDst->funcIds = NULL;
×
601
  }
602

603
  return TSDB_CODE_SUCCESS;
84,741✔
604
}
605

606
static void metaCloneSchemaFree(SSchemaWrapper *pSchema) {
391,061,210✔
607
  if (pSchema) {
391,061,210✔
608
    taosMemoryFreeClear(pSchema->pSchema);
391,104,926✔
609
  }
610
}
391,099,626✔
611

612
/**
613
 * @param type 0x01 free name
614
 */
615
void metaFreeRsmaParam(SRSmaParam *pParam, int8_t type) {
129,555✔
616
  if (pParam) {
129,555✔
617
    if ((type & 0x01)) {
129,555✔
618
      taosMemoryFreeClear(pParam->name);
129,555✔
619
    }
620
    taosMemoryFreeClear(pParam->funcColIds);
130,390✔
621
    taosMemoryFreeClear(pParam->funcIds);
129,555✔
622
  }
623
}
129,555✔
624

625
void metaCloneEntryFree(SMetaEntry **ppEntry) {
230,984,826✔
626
  if (ppEntry == NULL || *ppEntry == NULL) {
230,984,826✔
627
    return;
90,420✔
628
  }
629

630
  taosMemoryFreeClear((*ppEntry)->name);
230,913,691✔
631

632
  if ((*ppEntry)->type < 0) {
230,972,164✔
633
    taosMemoryFreeClear(*ppEntry);
×
634
    return;
×
635
  }
636

637
  if (TSDB_SUPER_TABLE == (*ppEntry)->type) {
230,858,266✔
638
    metaCloneSchemaFree(&(*ppEntry)->stbEntry.schemaRow);
190,544,527✔
639
    metaCloneSchemaFree(&(*ppEntry)->stbEntry.schemaTag);
190,542,522✔
640
    if (TABLE_IS_ROLLUP((*ppEntry)->flags)) {
190,535,639✔
641
      metaFreeRsmaParam(&(*ppEntry)->stbEntry.rsmaParam, 1);
129,555✔
642
    }
643
  } else if (TSDB_CHILD_TABLE == (*ppEntry)->type || TSDB_VIRTUAL_CHILD_TABLE == (*ppEntry)->type) {
40,399,122✔
644
    taosMemoryFreeClear((*ppEntry)->ctbEntry.comment);
30,350,836✔
645
    taosMemoryFreeClear((*ppEntry)->ctbEntry.pTags);
30,345,067✔
646
  } else if (TSDB_NORMAL_TABLE == (*ppEntry)->type || TSDB_VIRTUAL_NORMAL_TABLE == (*ppEntry)->type) {
10,053,538✔
647
    metaCloneSchemaFree(&(*ppEntry)->ntbEntry.schemaRow);
10,053,538✔
648
    taosMemoryFreeClear((*ppEntry)->ntbEntry.comment);
10,053,538✔
649
  } else {
650
    return;
×
651
  }
652
  metaCloneColCmprFree(&(*ppEntry)->colCmpr);
230,936,062✔
653
  taosMemoryFreeClear((*ppEntry)->pExtSchemas);
230,924,769✔
654
  metaCloneColRefFree(&(*ppEntry)->colRef);
230,941,406✔
655

656
  taosMemoryFreeClear(*ppEntry);
230,885,444✔
657
  return;
230,903,581✔
658
}
659

660
int32_t metaCloneEntry(const SMetaEntry *pEntry, SMetaEntry **ppEntry) {
230,887,754✔
661
  int32_t code = TSDB_CODE_SUCCESS;
230,887,754✔
662

663
  if (NULL == pEntry || NULL == ppEntry) {
230,887,754✔
664
    return TSDB_CODE_INVALID_PARA;
×
665
  }
666

667
  *ppEntry = (SMetaEntry *)taosMemoryCalloc(1, sizeof(SMetaEntry));
230,979,440✔
668
  if (NULL == *ppEntry) {
230,855,480✔
669
    return terrno;
×
670
  }
671

672
  (*ppEntry)->version = pEntry->version;
230,875,045✔
673
  (*ppEntry)->type = pEntry->type;
230,892,040✔
674
  (*ppEntry)->uid = pEntry->uid;
230,945,794✔
675

676
  if (pEntry->type < 0) {
230,932,513✔
677
    return TSDB_CODE_SUCCESS;
×
678
  }
679

680
  if (pEntry->name) {
230,935,965✔
681
    (*ppEntry)->name = tstrdup(pEntry->name);
230,941,328✔
682
    if (NULL == (*ppEntry)->name) {
230,975,701✔
683
      code = terrno;
×
684
      metaCloneEntryFree(ppEntry);
×
685
      return code;
×
686
    }
687
  }
688

689
  if (pEntry->type == TSDB_SUPER_TABLE) {
230,889,175✔
690
    (*ppEntry)->flags = pEntry->flags;
190,523,166✔
691

692
    code = metaCloneSchema(&pEntry->stbEntry.schemaRow, &(*ppEntry)->stbEntry.schemaRow);
190,543,909✔
693
    if (code) {
190,578,131✔
694
      metaCloneEntryFree(ppEntry);
×
695
      return code;
×
696
    }
697

698
    code = metaCloneSchema(&pEntry->stbEntry.schemaTag, &(*ppEntry)->stbEntry.schemaTag);
190,578,131✔
699
    if (code) {
190,617,360✔
700
      metaCloneEntryFree(ppEntry);
×
701
      return code;
×
702
    }
703
    if (TABLE_IS_ROLLUP(pEntry->flags)) {
190,617,360✔
704
      code = metaCloneRsmaParam(&pEntry->stbEntry.rsmaParam, &(*ppEntry)->stbEntry.rsmaParam);
84,741✔
705
      if (code) {
84,741✔
706
        metaCloneEntryFree(ppEntry);
×
707
        return code;
×
708
      }
709
    }
710
    (*ppEntry)->stbEntry.keep = pEntry->stbEntry.keep;
190,619,249✔
711
    (*ppEntry)->stbEntry.ownerId = pEntry->stbEntry.ownerId;
190,599,344✔
712
  } else if (pEntry->type == TSDB_CHILD_TABLE || pEntry->type == TSDB_VIRTUAL_CHILD_TABLE) {
40,399,886✔
713
    (*ppEntry)->ctbEntry.btime = pEntry->ctbEntry.btime;
30,344,778✔
714
    (*ppEntry)->ctbEntry.ttlDays = pEntry->ctbEntry.ttlDays;
30,345,503✔
715
    (*ppEntry)->ctbEntry.suid = pEntry->ctbEntry.suid;
30,346,407✔
716

717
    // comment
718
    (*ppEntry)->ctbEntry.commentLen = pEntry->ctbEntry.commentLen;
30,346,278✔
719
    if (pEntry->ctbEntry.commentLen > 0) {
30,347,123✔
720
      (*ppEntry)->ctbEntry.comment = taosMemoryMalloc(pEntry->ctbEntry.commentLen + 1);
9,627✔
721
      if (NULL == (*ppEntry)->ctbEntry.comment) {
9,627✔
722
        code = terrno;
×
723
        metaCloneEntryFree(ppEntry);
×
724
        return code;
×
725
      }
726
      memcpy((*ppEntry)->ctbEntry.comment, pEntry->ctbEntry.comment, pEntry->ctbEntry.commentLen + 1);
9,627✔
727
    }
728

729
    // tags
730
    STag *pTags = (STag *)pEntry->ctbEntry.pTags;
30,347,408✔
731
    (*ppEntry)->ctbEntry.pTags = taosMemoryCalloc(1, pTags->len);
30,345,598✔
732
    if (NULL == (*ppEntry)->ctbEntry.pTags) {
30,350,028✔
733
      code = terrno;
×
734
      metaCloneEntryFree(ppEntry);
×
735
      return code;
×
736
    }
737
    memcpy((*ppEntry)->ctbEntry.pTags, pEntry->ctbEntry.pTags, pTags->len);
30,350,778✔
738
  } else if (pEntry->type == TSDB_NORMAL_TABLE || pEntry->type == TSDB_VIRTUAL_NORMAL_TABLE) {
10,053,538✔
739
    (*ppEntry)->ntbEntry.btime = pEntry->ntbEntry.btime;
10,053,538✔
740
    (*ppEntry)->ntbEntry.ttlDays = pEntry->ntbEntry.ttlDays;
10,053,538✔
741
    (*ppEntry)->ntbEntry.ncid = pEntry->ntbEntry.ncid;
10,053,538✔
742
    (*ppEntry)->ntbEntry.ownerId = pEntry->ntbEntry.ownerId;
10,053,538✔
743

744
    // schema
745
    code = metaCloneSchema(&pEntry->ntbEntry.schemaRow, &(*ppEntry)->ntbEntry.schemaRow);
10,053,538✔
746
    if (code) {
10,053,538✔
747
      metaCloneEntryFree(ppEntry);
×
748
      return code;
×
749
    }
750

751
    // comment
752
    (*ppEntry)->ntbEntry.commentLen = pEntry->ntbEntry.commentLen;
10,053,538✔
753
    if (pEntry->ntbEntry.commentLen > 0) {
10,053,538✔
754
      (*ppEntry)->ntbEntry.comment = taosMemoryMalloc(pEntry->ntbEntry.commentLen + 1);
14,451✔
755
      if (NULL == (*ppEntry)->ntbEntry.comment) {
14,451✔
756
        code = terrno;
×
757
        metaCloneEntryFree(ppEntry);
×
758
        return code;
×
759
      }
760
      memcpy((*ppEntry)->ntbEntry.comment, pEntry->ntbEntry.comment, pEntry->ntbEntry.commentLen + 1);
14,451✔
761
    }
762
  } else {
763
    return TSDB_CODE_INVALID_PARA;
×
764
  }
765

766
  if (pEntry->type == TSDB_VIRTUAL_NORMAL_TABLE || pEntry->type == TSDB_VIRTUAL_CHILD_TABLE) {
230,950,119✔
767
    code = metaCloneColRef(&pEntry->colRef, &(*ppEntry)->colRef);
1,389,878✔
768
    if (code) {
1,404,186✔
769
      metaCloneEntryFree(ppEntry);
×
770
      return code;
×
771
    }
772
  } else {
773
    code = metaCloneColCmpr(&pEntry->colCmpr, &(*ppEntry)->colCmpr);
229,545,622✔
774
    if (code) {
229,546,207✔
775
      metaCloneEntryFree(ppEntry);
×
776
      return code;
×
777
    }
778
  }
779
  int32_t numOfExtSchema = metaGetEntryRowSchemaNum(pEntry);
230,950,393✔
780
  if (pEntry->pExtSchemas && numOfExtSchema > 0) {
230,966,211✔
781
    (*ppEntry)->pExtSchemas = taosMemoryCalloc(numOfExtSchema, sizeof(SExtSchema));
11,340,785✔
782
    if (!(*ppEntry)->pExtSchemas) {
11,334,893✔
783
      code = terrno;
×
784
      metaCloneEntryFree(ppEntry);
×
785
      return code;
×
786
    }
787
    memcpy((*ppEntry)->pExtSchemas, pEntry->pExtSchemas, sizeof(SExtSchema) * numOfExtSchema);
11,329,786✔
788
  }
789

790
  return code;
230,901,779✔
791
}
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