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

taosdata / TDengine / #3798

31 Mar 2025 10:39AM UTC coverage: 9.424% (-20.9%) from 30.372%
#3798

push

travis-ci

happyguoxy
test:add test cases

21549 of 307601 branches covered (7.01%)

Branch coverage included in aggregate %.

36084 of 303967 relevant lines covered (11.87%)

58620.7 hits per line

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

0.0
/source/libs/parser/src/parInsertSml.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 "parInsertUtil.h"
17
#include "parInt.h"
18
#include "parToken.h"
19
#include "ttime.h"
20

21
int32_t qCreateSName(SName* pName, const char* pTableName, int32_t acctId, char* dbName, char* msgBuf,
×
22
                     int32_t msgBufLen) {
23
  SMsgBuf    msg = {.buf = msgBuf, .len = msgBufLen};
×
24
  SToken  sToken = {0};
×
25
  int      code  = TSDB_CODE_SUCCESS;
×
26
  int32_t  lino  = 0;
×
27

28
  NEXT_TOKEN(pTableName, sToken);
×
29
  TSDB_CHECK_CONDITION(sToken.n != 0, code, lino, end, TSDB_CODE_TSC_INVALID_OPERATION);
×
30
  code = insCreateSName(pName, &sToken, acctId, dbName, &msg);
×
31
  TSDB_CHECK_CODE(code, lino, end);
×
32
  NEXT_TOKEN(pTableName, sToken);
×
33
  TSDB_CHECK_CONDITION(sToken.n <= 0, code, lino, end, TSDB_CODE_TSC_INVALID_OPERATION);
×
34

35
end:
×
36
  if (code != 0){
×
37
    uError("%s failed at %d since %s", __func__, lino, tstrerror(code));
×
38
  }
39
  return TSDB_CODE_SUCCESS;
×
40
}
41

42
static int32_t smlBoundColumnData(SArray* cols, SBoundColInfo* pBoundInfo, SSchema* pSchema, bool isTag) {
×
43
  int      code = TSDB_CODE_SUCCESS;
×
44
  int32_t  lino = 0;
×
45
  bool* pUseCols = taosMemoryCalloc(pBoundInfo->numOfCols, sizeof(bool));
×
46
  TSDB_CHECK_NULL(pUseCols, code, lino, end, terrno);
×
47
  pBoundInfo->numOfBound = 0;
×
48
  int16_t lastColIdx = -1;  // last column found
×
49

50
  for (int i = 0; i < taosArrayGetSize(cols); ++i) {
×
51
    SSmlKv*  kv = taosArrayGet(cols, i);
×
52
    SToken   sToken = {.n = kv->keyLen, .z = (char*)kv->key};
×
53
    col_id_t t = lastColIdx + 1;
×
54
    col_id_t index = ((t == 0 && !isTag) ? 0 : insFindCol(&sToken, t, pBoundInfo->numOfCols, pSchema));
×
55
    uTrace("SML, index:%d, t:%d, ncols:%d", index, t, pBoundInfo->numOfCols);
×
56
    if (index < 0 && t > 0) {
×
57
      index = insFindCol(&sToken, 0, t, pSchema);
×
58
    }
59

60
    TSDB_CHECK_CONDITION(index >= 0, code, lino, end, TSDB_CODE_SML_INVALID_DATA);
×
61
    TSDB_CHECK_CONDITION(!pUseCols[index], code, lino, end, TSDB_CODE_SML_INVALID_DATA);
×
62

63
    lastColIdx = index;
×
64
    pUseCols[index] = true;
×
65
    pBoundInfo->pColIndex[pBoundInfo->numOfBound] = index;
×
66
    ++pBoundInfo->numOfBound;
×
67
  }
68

69
end:
×
70
  if (code != 0){
×
71
    uError("%s failed at %d since %s", __func__, lino, tstrerror(code));
×
72
  }
73
  taosMemoryFree(pUseCols);
×
74
  return code;
×
75
}
76

77
static int32_t smlMbsToUcs4(const char* mbs, size_t mbsLen, void** result, int32_t* resultLen, int32_t maxLen, void* charsetCxt){
×
78
  int      code = TSDB_CODE_SUCCESS;
×
79
  void*    pUcs4 = NULL;
×
80
  int32_t  lino = 0;
×
81
  pUcs4 = taosMemoryCalloc(1, maxLen);
×
82
  TSDB_CHECK_NULL(pUcs4, code, lino, end, terrno);
×
83
  TSDB_CHECK_CONDITION(taosMbsToUcs4(mbs, mbsLen, (TdUcs4*)pUcs4, maxLen, resultLen, charsetCxt), code, lino, end, terrno);
×
84
  *result = pUcs4;
×
85
  pUcs4 = NULL;
×
86

87
end:
×
88
  if (code != 0){
×
89
    uError("%s failed at %d since %s", __func__, lino, tstrerror(code));
×
90
  }
91
  taosMemoryFree(pUcs4);
×
92
  return code;
×
93
}
94
/**
95
 * @brief No json tag for schemaless
96
 *
97
 * @param cols
98
 * @param tags
99
 * @param pSchema
100
 * @param ppTag
101
 * @param msg
102
 * @return int32_t
103
 */
104
static int32_t smlBuildTagRow(SArray* cols, SBoundColInfo* tags, SSchema* pSchema, STag** ppTag, SArray** tagName,
×
105
                              SMsgBuf* msg, void* charsetCxt) {
106
  int      code = TSDB_CODE_SUCCESS;
×
107
  int32_t  lino = 0;
×
108
  SArray*  pTagArray = taosArrayInit(tags->numOfBound, sizeof(STagVal));
×
109
  TSDB_CHECK_NULL(pTagArray, code, lino, end, terrno);
×
110
  *tagName = taosArrayInit(8, TSDB_COL_NAME_LEN);
×
111
  TSDB_CHECK_NULL(*tagName, code, lino, end, terrno);
×
112

113
  for (int i = 0; i < tags->numOfBound; ++i) {
×
114
    SSchema* pTagSchema = &pSchema[tags->pColIndex[i]];
×
115
    SSmlKv*  kv = taosArrayGet(cols, i);
×
116
    TSDB_CHECK_NULL(kv, code, lino, end, terrno);
×
117
    bool cond = (kv->keyLen == strlen(pTagSchema->name) && memcmp(kv->key, pTagSchema->name, kv->keyLen) == 0 && kv->type == pTagSchema->type);
×
118
    TSDB_CHECK_CONDITION(cond, code, lino, end, TSDB_CODE_SML_INVALID_DATA);
×
119
    TSDB_CHECK_NULL(taosArrayPush(*tagName, pTagSchema->name), code, lino, end, terrno);
×
120
    STagVal val = {.cid = pTagSchema->colId, .type = pTagSchema->type};
×
121
    if (pTagSchema->type == TSDB_DATA_TYPE_BINARY || pTagSchema->type == TSDB_DATA_TYPE_VARBINARY ||
×
122
        pTagSchema->type == TSDB_DATA_TYPE_GEOMETRY) {
×
123
      val.pData = (uint8_t*)kv->value;
×
124
      val.nData = kv->length;
×
125
    } else if (pTagSchema->type == TSDB_DATA_TYPE_NCHAR) {
×
126
      code = smlMbsToUcs4(kv->value, kv->length, (void**)&val.pData, (int32_t*)&val.nData, kv->length * TSDB_NCHAR_SIZE, charsetCxt);
×
127
      TSDB_CHECK_CODE(code, lino, end);
×
128
    } else {
129
      (void)memcpy(&val.i64, &(kv->value), kv->length);
×
130
    }
131
    TSDB_CHECK_NULL(taosArrayPush(pTagArray, &val), code, lino, end, terrno);
×
132
  }
133
  code = tTagNew(pTagArray, 1, false, ppTag);
×
134

135
end:
×
136
  if (code != 0){
×
137
    uError("%s failed at %d since %s", __func__, lino, tstrerror(code));
×
138
  }
139
  for (int i = 0; i < taosArrayGetSize(pTagArray); ++i) {
×
140
    STagVal* p = (STagVal*)taosArrayGet(pTagArray, i);
×
141
    if (p->type == TSDB_DATA_TYPE_NCHAR) {
×
142
      taosMemoryFree(p->pData);
×
143
    }
144
  }
145
  taosArrayDestroy(pTagArray);
×
146
  return code;
×
147
}
148

149
int32_t smlInitTableDataCtx(SQuery* query, STableMeta* pTableMeta, STableDataCxt** cxt) {
×
150
  int      ret = TSDB_CODE_SUCCESS;
×
151
  int32_t  lino = 0;
×
152
  SVCreateTbReq* pCreateTbReq = NULL;
×
153
  ret = insGetTableDataCxt(((SVnodeModifyOpStmt*)(query->pRoot))->pTableBlockHashObj, &pTableMeta->uid,
×
154
                                          sizeof(pTableMeta->uid), pTableMeta, &pCreateTbReq, cxt, false, false);
155
  TSDB_CHECK_CODE(ret, lino, end);
×
156
  ret = initTableColSubmitData(*cxt);
×
157
  TSDB_CHECK_CODE(ret, lino, end);
×
158

159
end:
×
160
  if (ret != 0){
×
161
    uError("%s failed at %d since %s", __func__, lino, tstrerror(ret));
×
162
  }
163
  return ret;
×
164
}
165

166
void clearColValArraySml(SArray* pCols) {
×
167
  int32_t num = taosArrayGetSize(pCols);
×
168
  for (int32_t i = 0; i < num; ++i) {
×
169
    SColVal* pCol = taosArrayGet(pCols, i);
×
170
    if (TSDB_DATA_TYPE_NCHAR == pCol->value.type || TSDB_DATA_TYPE_GEOMETRY == pCol->value.type ||
×
171
        TSDB_DATA_TYPE_VARBINARY == pCol->value.type) {
×
172
      taosMemoryFreeClear(pCol->value.pData);
×
173
    }
174
    pCol->flag = CV_FLAG_NONE;
×
175
    pCol->value.val = 0;
×
176
  }
177
}
×
178

179
int32_t smlBuildRow(STableDataCxt* pTableCxt) {
×
180
  int      ret = TSDB_CODE_SUCCESS;
×
181
  int32_t  lino = 0;
×
182
  SRow**   pRow = taosArrayReserve(pTableCxt->pData->aRowP, 1);
×
183
  TSDB_CHECK_NULL(pRow, ret, lino, end, terrno);
×
184
  ret = tRowBuild(pTableCxt->pValues, pTableCxt->pSchema, pRow);
×
185
  TSDB_CHECK_CODE(ret, lino, end);
×
186
  SRowKey key;
187
  tRowGetKey(*pRow, &key);
×
188
  insCheckTableDataOrder(pTableCxt, &key);
×
189
end:
×
190
  if (ret != 0){
×
191
    uError("%s failed at %d since %s", __func__, lino, tstrerror(ret));
×
192
  }
193
  return ret;
×
194
}
195

196
int32_t smlBuildCol(STableDataCxt* pTableCxt, SSchema* schema, void* data, int32_t index, void* charsetCxt) {
×
197
  int      ret = TSDB_CODE_SUCCESS;
×
198
  int32_t  lino = 0;
×
199
  SSchema* pColSchema = schema + index;
×
200
  SColVal* pVal = taosArrayGet(pTableCxt->pValues, index);
×
201
  TSDB_CHECK_NULL(pVal, ret, lino, end, TSDB_CODE_SUCCESS);
×
202
  SSmlKv*  kv = (SSmlKv*)data;
×
203
  if (kv->keyLen != strlen(pColSchema->name) || memcmp(kv->key, pColSchema->name, kv->keyLen) != 0 ||
×
204
      kv->type != pColSchema->type) {
×
205
    ret = TSDB_CODE_SML_INVALID_DATA;
×
206
    char* tmp = taosMemoryCalloc(kv->keyLen + 1, 1);
×
207
    TSDB_CHECK_NULL(tmp, ret, lino, end, terrno);
×
208
    (void)memcpy(tmp, kv->key, kv->keyLen);
×
209
    uInfo("SML data(name:%s type:%s) is not same like the db data(name:%s type:%s)", tmp, tDataTypes[kv->type].name,
×
210
          pColSchema->name, tDataTypes[pColSchema->type].name);
211
    taosMemoryFree(tmp);
×
212
    goto end;
×
213
  }
214
  if (kv->type == TSDB_DATA_TYPE_NCHAR) {
×
215
    ret = smlMbsToUcs4(kv->value, kv->length, (void**)&pVal->value.pData, &pVal->value.nData, pColSchema->bytes - VARSTR_HEADER_SIZE, charsetCxt);
×
216
    TSDB_CHECK_CODE(ret, lino, end);
×
217
  } else if (kv->type == TSDB_DATA_TYPE_BINARY) {
×
218
    pVal->value.nData = kv->length;
×
219
    pVal->value.pData = (uint8_t*)kv->value;
×
220
  } else if (kv->type == TSDB_DATA_TYPE_GEOMETRY || kv->type == TSDB_DATA_TYPE_VARBINARY) {
×
221
    pVal->value.nData = kv->length;
×
222
    pVal->value.pData = taosMemoryMalloc(kv->length);
×
223
    TSDB_CHECK_NULL(pVal->value.pData, ret, lino, end, terrno);
×
224

225
    (void)memcpy(pVal->value.pData, (uint8_t*)kv->value, kv->length);
×
226
  } else {
227
    valueSetDatum(&pVal->value, kv->type, &(kv->value), kv->length);
×
228
  }
229
  pVal->flag = CV_FLAG_VALUE;
×
230

231
end:
×
232
  if (ret != 0){
×
233
    uError("%s failed at %d since %s", __func__, lino, tstrerror(ret));
×
234
  }
235
  return ret;
×
236
}
237

238
int32_t smlBindData(SQuery* query, bool dataFormat, SArray* tags, SArray* colsSchema, SArray* cols,
×
239
                    STableMeta* pTableMeta, char* tableName, const char* sTableName, int32_t sTableNameLen, int32_t ttl,
240
                    char* msgBuf, int32_t msgBufLen, void* charsetCxt) {
241
  int32_t lino = 0;
×
242
  int32_t ret = 0;
×
243
  SMsgBuf pBuf = {.buf = msgBuf, .len = msgBufLen};
×
244

245
  SSchema*       pTagsSchema = getTableTagSchema(pTableMeta);
×
246
  SBoundColInfo  bindTags = {0};
×
247
  SVCreateTbReq* pCreateTblReq = NULL;
×
248
  SArray*        tagName = NULL;
×
249

250
  ret = insInitBoundColsInfo(getNumOfTags(pTableMeta), &bindTags);
×
251
  TSDB_CHECK_CODE(ret, lino, end);
×
252

253
  ret = smlBoundColumnData(tags, &bindTags, pTagsSchema, true);
×
254
  TSDB_CHECK_CODE(ret, lino, end);
×
255

256
  STag* pTag = NULL;
×
257
  ret = smlBuildTagRow(tags, &bindTags, pTagsSchema, &pTag, &tagName, &pBuf, charsetCxt);
×
258
  TSDB_CHECK_CODE(ret, lino, end);
×
259

260
  pCreateTblReq = taosMemoryCalloc(1, sizeof(SVCreateTbReq));
×
261
  TSDB_CHECK_NULL(pCreateTblReq, ret, lino, end, terrno);
×
262

263
  ret = insBuildCreateTbReq(pCreateTblReq, tableName, pTag, pTableMeta->suid, NULL, tagName,
×
264
                            pTableMeta->tableInfo.numOfTags, ttl);
×
265
  TSDB_CHECK_CODE(ret, lino, end);
×
266

267
  pCreateTblReq->ctb.stbName = taosMemoryCalloc(1, sTableNameLen + 1);
×
268
  TSDB_CHECK_NULL(pCreateTblReq->ctb.stbName, ret, lino, end, terrno);
×
269

270
  (void)memcpy(pCreateTblReq->ctb.stbName, sTableName, sTableNameLen);
×
271

272
  if (dataFormat) {
×
273
    STableDataCxt** pTableCxt = (STableDataCxt**)taosHashGet(((SVnodeModifyOpStmt*)(query->pRoot))->pTableBlockHashObj,
×
274
                                                             &pTableMeta->uid, sizeof(pTableMeta->uid));
×
275
    TSDB_CHECK_NULL(pTableCxt, ret, lino, end, TSDB_CODE_TSC_INVALID_OPERATION);
×
276
    (*pTableCxt)->pData->flags |= SUBMIT_REQ_AUTO_CREATE_TABLE;
×
277
    (*pTableCxt)->pData->pCreateTbReq = pCreateTblReq;
×
278
    (*pTableCxt)->pMeta->uid = pTableMeta->uid;
×
279
    (*pTableCxt)->pMeta->vgId = pTableMeta->vgId;
×
280
    pCreateTblReq = NULL;
×
281
    goto end;
×
282
  }
283

284
  STableDataCxt* pTableCxt = NULL;
×
285
  ret = insGetTableDataCxt(((SVnodeModifyOpStmt*)(query->pRoot))->pTableBlockHashObj, &pTableMeta->uid,
×
286
                           sizeof(pTableMeta->uid), pTableMeta, &pCreateTblReq, &pTableCxt, false, false);
287
  TSDB_CHECK_CODE(ret, lino, end);
×
288

289
  SSchema* pSchema = getTableColumnSchema(pTableMeta);
×
290
  ret = smlBoundColumnData(colsSchema, &pTableCxt->boundColsInfo, pSchema, false);
×
291
  TSDB_CHECK_CODE(ret, lino, end);
×
292

293
  ret = initTableColSubmitData(pTableCxt);
×
294
  TSDB_CHECK_CODE(ret, lino, end);
×
295

296
  int32_t rowNum = taosArrayGetSize(cols);
×
297
  TSDB_CHECK_CONDITION(rowNum > 0, ret, lino, end, TSDB_CODE_TSC_INVALID_OPERATION);
×
298

299
  for (int32_t r = 0; r < rowNum; ++r) {
×
300
    void* rowData = taosArrayGetP(cols, r);
×
301
    TSDB_CHECK_NULL(rowData, ret, lino, end, terrno);
×
302

303
    // 1. set the parsed value from sql string
304
    for (int c = 0; c < pTableCxt->boundColsInfo.numOfBound; ++c) {
×
305
      SSchema* pColSchema = &pSchema[pTableCxt->boundColsInfo.pColIndex[c]];
×
306
      SColVal* pVal = taosArrayGet(pTableCxt->pValues, pTableCxt->boundColsInfo.pColIndex[c]);
×
307
      TSDB_CHECK_NULL(pVal, ret, lino, end, terrno);
×
308
      void**   p = taosHashGet(rowData, pColSchema->name, strlen(pColSchema->name));
×
309
      if (p == NULL) {
×
310
        continue;
×
311
      }
312
      SSmlKv* kv = *(SSmlKv**)p;
×
313
      TSDB_CHECK_CONDITION(kv->type == pColSchema->type, ret, lino, end, TSDB_CODE_TSC_INVALID_OPERATION);
×
314

315
      if (pColSchema->type == TSDB_DATA_TYPE_TIMESTAMP) {
×
316
        kv->i = convertTimePrecision(kv->i, TSDB_TIME_PRECISION_NANO, pTableMeta->tableInfo.precision);
×
317
      }
318
      if (kv->type == TSDB_DATA_TYPE_NCHAR) {
×
319
        ret = smlMbsToUcs4(kv->value, kv->length, (void**)&pVal->value.pData, (int32_t*)&pVal->value.nData, pColSchema->bytes - VARSTR_HEADER_SIZE, charsetCxt);
×
320
        TSDB_CHECK_CODE(ret, lino, end);
×
321
      } else if (kv->type == TSDB_DATA_TYPE_BINARY) {
×
322
        pVal->value.nData = kv->length;
×
323
        pVal->value.pData = (uint8_t*)kv->value;
×
324
      } else if (kv->type == TSDB_DATA_TYPE_GEOMETRY || kv->type == TSDB_DATA_TYPE_VARBINARY) {
×
325
        pVal->value.nData = kv->length;
×
326
        pVal->value.pData = taosMemoryMalloc(kv->length);
×
327
        TSDB_CHECK_NULL(pVal->value.pData, ret, lino, end, terrno);
×
328
        (void)memcpy(pVal->value.pData, (uint8_t*)kv->value, kv->length);
×
329
      } else {
330
        valueSetDatum(&pVal->value, kv->type, &(kv->value), kv->length);
×
331
      }
332
      pVal->flag = CV_FLAG_VALUE;
×
333
    }
334

335
    SRow** pRow = taosArrayReserve(pTableCxt->pData->aRowP, 1);
×
336
    TSDB_CHECK_NULL(pRow, ret, lino, end, terrno);
×
337
    ret = tRowBuild(pTableCxt->pValues, pTableCxt->pSchema, pRow);
×
338
    TSDB_CHECK_CODE(ret, lino, end);
×
339
    SRowKey key = {0};
×
340
    tRowGetKey(*pRow, &key);
×
341
    insCheckTableDataOrder(pTableCxt, &key);
×
342
    clearColValArraySml(pTableCxt->pValues);
×
343
  }
344

345
end:
×
346
  if (ret != 0){
×
347
    uError("%s failed at %d since %s", __func__, lino, tstrerror(ret));
×
348
    ret = buildInvalidOperationMsg(&pBuf, tstrerror(ret));
×
349
  }
350
  insDestroyBoundColInfo(&bindTags);
×
351
  tdDestroySVCreateTbReq(pCreateTblReq);
×
352
  taosMemoryFree(pCreateTblReq);
×
353
  taosArrayDestroy(tagName);
×
354
  return ret;
×
355
}
356

357
int32_t smlInitHandle(SQuery** query) {
×
358
  int32_t lino = 0;
×
359
  int32_t code = 0;
×
360
  SQuery* pQuery = NULL;
×
361
  SVnodeModifyOpStmt* stmt = NULL;
×
362
  TSDB_CHECK_NULL(query, code, lino, end, TSDB_CODE_INVALID_PARA);
×
363

364
  *query = NULL;
×
365
  code = nodesMakeNode(QUERY_NODE_QUERY, (SNode**)&pQuery);
×
366
  TSDB_CHECK_CODE(code, lino, end);
×
367
  pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE;
×
368
  pQuery->haveResultSet = false;
×
369
  pQuery->msgType = TDMT_VND_SUBMIT;
×
370
  code = nodesMakeNode(QUERY_NODE_VNODE_MODIFY_STMT, (SNode**)&stmt);
×
371
  TSDB_CHECK_CODE(code, lino, end);
×
372
  stmt->pTableBlockHashObj = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK);
×
373
  TSDB_CHECK_NULL(stmt->pTableBlockHashObj, code, lino, end, terrno);
×
374
  stmt->freeHashFunc = insDestroyTableDataCxtHashMap;
×
375
  stmt->freeArrayFunc = insDestroyVgroupDataCxtList;
×
376

377
  pQuery->pRoot = (SNode*)stmt;
×
378
  *query = pQuery;
×
379
  return code;
×
380

381
end:
×
382
  if (code != 0) {
×
383
    uError("%s failed at %d since %s", __func__, lino, tstrerror(code));
×
384
  }
385
  nodesDestroyNode((SNode*)stmt);
×
386
  qDestroyQuery(pQuery);
×
387
  return code;
×
388
}
389

390
int32_t smlBuildOutput(SQuery* handle, SHashObj* pVgHash) {
×
391
  int32_t lino = 0;
×
392
  int32_t code = 0;
×
393

394
  SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)(handle)->pRoot;
×
395
  code = insMergeTableDataCxt(pStmt->pTableBlockHashObj, &pStmt->pVgDataBlocks, true);
×
396
  TSDB_CHECK_CODE(code, lino, end);
×
397
  code = insBuildVgDataBlocks(pVgHash, pStmt->pVgDataBlocks, &pStmt->pDataBlocks, false);
×
398
  TSDB_CHECK_CODE(code, lino, end);
×
399

400
end:
×
401
  if (code != 0) {
×
402
    uError("%s failed at %d since %s", __func__, lino, tstrerror(code));
×
403
  }
404
  return code;
×
405
}
406

407
int32_t smlBuildOutputRaw(SQuery* handle, SHashObj* pVgHash) {
×
408
  int32_t lino = 0;
×
409
  int32_t code = 0;
×
410

411
  SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)(handle)->pRoot;
×
412
  code = insBuildVgDataBlocks(pVgHash, pStmt->pVgDataBlocks, &pStmt->pDataBlocks, false);
×
413
  TSDB_CHECK_CODE(code, lino, end);
×
414

415
  end:
×
416
  if (code != 0) {
×
417
    uError("%s failed at %d since %s", __func__, lino, tstrerror(code));
×
418
  }
419
  return code;
×
420
}
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