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

taosdata / TDengine / #4688

26 Aug 2025 02:05PM UTC coverage: 56.997% (-0.9%) from 57.894%
#4688

push

travis-ci

web-flow
fix: modify the prompt language of the taos-shell (#32758)

* fix: modify prompt language

* fix: add shell test case

* fix: modify comments

* fix: modify test case for TDengine TSDB

130660 of 292423 branches covered (44.68%)

Branch coverage included in aggregate %.

16 of 17 new or added lines in 2 files covered. (94.12%)

9459 existing lines in 157 files now uncovered.

198294 of 284715 relevant lines covered (69.65%)

4532552.29 hits per line

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

75.68
/source/util/src/tarray.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
#define _DEFAULT_SOURCE
17
#include "tarray.h"
18
#include "tcoding.h"
19

20
// todo refactor API
21
#define BOUNDARY_SIZE         1024 * 1024 * 1024  // 1G
22
#define BOUNDARY_SMALL_FACTOR 1.2
23
#define BOUNDARY_BIG_FACTOR   2
24

25
SArray* taosArrayInit(size_t size, size_t elemSize) {
106,315,282✔
26
  if (elemSize == 0) {
106,315,282!
UNCOV
27
    terrno = TSDB_CODE_INVALID_PARA;
×
UNCOV
28
    return NULL;
×
29
  }
30

31
  if (size < TARRAY_MIN_SIZE) {
106,315,282✔
32
    size = TARRAY_MIN_SIZE;
32,772,569✔
33
  }
34

35
  SArray* pArray = taosMemoryMalloc(sizeof(SArray));
106,315,282!
36
  if (pArray == NULL) {
106,302,183!
37
    return NULL;
×
38
  }
39

40
  pArray->size = 0;
106,302,183✔
41
  pArray->pData = taosMemoryCalloc(size, elemSize);
106,302,183!
42
  if (pArray->pData == NULL) {
106,372,876!
43
    taosMemoryFree(pArray);
×
44
    return NULL;
×
45
  }
46

47
  pArray->capacity = size;
106,372,876✔
48
  pArray->elemSize = elemSize;
106,372,876✔
49
  return pArray;
106,372,876✔
50
}
51

52
SArray* taosArrayInit_s(size_t elemSize, size_t initialSize) {
366,819✔
53
  SArray* pArray = taosMemoryMalloc(sizeof(SArray));
366,819!
54
  if (pArray == NULL) {
366,822!
55
    return NULL;
×
56
  }
57

58
  pArray->size = initialSize;
366,822✔
59
  pArray->pData = taosMemoryCalloc(initialSize, elemSize);
366,822!
60
  if (pArray->pData == NULL) {
366,824!
61
    taosMemoryFree(pArray);
×
62
    return NULL;
×
63
  }
64

65
  pArray->capacity = initialSize;
366,824✔
66
  pArray->elemSize = elemSize;
366,824✔
67
  return pArray;
366,824✔
68
}
69

70
static int32_t taosArrayResize(SArray* pArray) {
14✔
71
  size_t size = pArray->capacity;
14✔
72
  size = (size << 1u);
14✔
73

74
  void* tmp = taosMemoryRealloc(pArray->pData, size * pArray->elemSize);
14!
75
  if (tmp == NULL) {  // reallocate failed, the original buffer remains
14!
76
    return terrno;
×
77
  }
78

79
  pArray->pData = tmp;
14✔
80
  pArray->capacity = size;
14✔
81

82
  return 0;
14✔
83
}
84

85
int32_t taosArrayEnsureCap(SArray* pArray, size_t newCap) {
1,264,167,621✔
86
  if (newCap > pArray->capacity) {
1,264,167,621✔
87
    float factor = BOUNDARY_BIG_FACTOR;
6,311,306✔
88
    if (newCap * pArray->elemSize > BOUNDARY_SIZE) {
6,311,306!
89
      factor = BOUNDARY_SMALL_FACTOR;
×
90
    }
91

92
    size_t tsize = (pArray->capacity * factor);
6,311,306✔
93
    while (newCap > tsize) {
6,398,349✔
94
      size_t newSize = (tsize * factor);
87,043✔
95
      tsize = (newSize == tsize) ? (tsize + 2) : newSize;
87,043!
96
    }
97

98
    char* p = taosMemoryRealloc(pArray->pData, tsize * pArray->elemSize);
6,311,306✔
99
    if (p == NULL) {
6,312,309!
100
      return terrno;
×
101
    }
102

103
    pArray->pData = p;
6,312,309✔
104
    pArray->capacity = tsize;
6,312,309✔
105
  }
106
  return 0;
1,264,168,624✔
107
}
108

109
void* taosArrayAddBatch(SArray* pArray, const void* pData, int32_t nEles) {
1,046,643,335✔
110
  if (pData == NULL) {
1,046,643,335!
UNCOV
111
    terrno = TSDB_CODE_INVALID_PARA;
×
UNCOV
112
    return NULL;
×
113
  }
114

115
  int32_t code = taosArrayEnsureCap(pArray, pArray->size + nEles);
1,046,643,335✔
116
  if (code) {
1,047,622,673!
117
    terrno = code;
×
118
    return NULL;
×
119
  }
120

121
  void* dst = TARRAY_GET_ELEM(pArray, pArray->size);
1,052,338,230✔
122
  memcpy(dst, pData, pArray->elemSize * nEles);
1,052,338,230✔
123

124
  pArray->size += nEles;
1,052,338,230✔
125
  return dst;
1,052,338,230✔
126
}
127

128
void taosArrayRemoveDuplicate(SArray* pArray, __compar_fn_t comparFn, void (*fp)(void*)) {
26,971✔
129
  size_t size = pArray->size;
26,971✔
130
  if (size <= 1) {
26,971✔
131
    return;
22,405✔
132
  }
133

134
  int32_t pos = 0;
4,566✔
135
  for (int32_t i = 1; i < size; ++i) {
76,554✔
136
    char* p1 = taosArrayGet(pArray, pos);
71,996✔
137
    char* p2 = taosArrayGet(pArray, i);
71,996✔
138

139
    if (comparFn(p1, p2) == 0) {
71,996✔
140
      // do nothing
141
    } else {
142
      if (pos + 1 != i) {
71,666✔
143
        void* p = taosArrayGet(pArray, pos + 1);
351✔
144
        if (fp != NULL) {
351!
UNCOV
145
          fp(p);
×
146
        }
147

148
        taosArraySet(pArray, pos + 1, p2);
351✔
149
        memset(TARRAY_GET_ELEM(pArray, i), 0, pArray->elemSize);
351✔
150
        pos += 1;
351✔
151
      } else {
152
        pos += 1;
71,315✔
153
      }
154
    }
155
  }
156

157
  if (fp != NULL) {
4,558✔
158
    for (int32_t i = pos + 1; i < pArray->size; ++i) {
23!
UNCOV
159
      void* p = taosArrayGet(pArray, i);
×
UNCOV
160
      fp(p);
×
161
    }
162
  }
163

164
  pArray->size = pos + 1;
4,578✔
165
}
166

167
void* taosArrayAddAll(SArray* pArray, const SArray* pInput) {
259,967✔
168
  if (pInput) {
259,967✔
169
    return taosArrayAddBatch(pArray, pInput->pData, (int32_t)taosArrayGetSize(pInput));
255,953✔
170
  } else {
171
    terrno = TSDB_CODE_INVALID_PARA;
4,014✔
172
    return NULL;
4,059✔
173
  }
174
}
175

176
void* taosArrayReserve(SArray* pArray, int32_t num) {
215,755,589✔
177
  int32_t code = taosArrayEnsureCap(pArray, pArray->size + num);
215,755,589✔
178
  if (code) {
215,672,723!
179
    terrno = code;
×
180
    return NULL;
×
181
  }
182

183
  void* dst = TARRAY_GET_ELEM(pArray, pArray->size);
215,735,957✔
184
  pArray->size += num;
215,735,957✔
185

186
  memset(dst, 0, num * pArray->elemSize);
215,735,957✔
187

188
  return dst;
215,735,957✔
189
}
190

191
void* taosArrayPop(SArray* pArray) {
5,706,143✔
192
  if (pArray->size == 0) {
5,706,143✔
193
    return NULL;
70,613✔
194
  }
195

196
  pArray->size -= 1;
5,635,530✔
197
  return TARRAY_GET_ELEM(pArray, pArray->size);
5,635,530✔
198
}
199

200
void* taosArrayGet(const SArray* pArray, size_t index) {
2,147,483,647✔
201
  if (NULL == pArray) {
2,147,483,647✔
202
    terrno = TSDB_CODE_INVALID_PARA;
50✔
203
    uError("failed to return value from array of null ptr");
50!
204
    return NULL;
50✔
205
  }
206

207
  if (index >= pArray->size) {
2,147,483,647✔
208
    uError("index is out of range, current:%" PRIzu " max:%" PRIzu, index, pArray->size);
1,583!
209
    terrno = TSDB_CODE_OUT_OF_RANGE;
1,583✔
210
    return NULL;
1,583✔
211
  }
212

213
  return TARRAY_GET_ELEM(pArray, index);
2,147,483,647✔
214
}
215

216
void* taosArrayGetP(const SArray* pArray, size_t index) {
172,262,124✔
217
  void** p = taosArrayGet(pArray, index);
172,262,124✔
218
  if (p == NULL) {
172,883,994!
UNCOV
219
    return NULL;
×
220
  }
221
  return *p;
172,883,994✔
222
}
223

224
void* taosArrayGetLast(const SArray* pArray) {
57,584,402✔
225
  if (pArray->size == 0) {
57,584,402✔
226
    terrno = TSDB_CODE_INVALID_PARA;
12,138✔
227
    return NULL;
12,138✔
228
  }
229

230
  return TARRAY_GET_ELEM(pArray, pArray->size - 1);
57,572,264✔
231
}
232

233
size_t taosArrayGetSize(const SArray* pArray) {
2,147,483,647✔
234
  if (pArray == NULL) {
2,147,483,647✔
235
    return 0;
32,822,586✔
236
  }
237
  return TARRAY_SIZE(pArray);
2,147,483,647✔
238
}
239

240
void* taosArrayInsert(SArray* pArray, size_t index, const void* pData) {
208,206✔
241
  if (pArray == NULL || pData == NULL) {
208,206!
242
    terrno = TSDB_CODE_INVALID_PARA;
×
UNCOV
243
    return NULL;
×
244
  }
245

246
  if (index >= pArray->size) {
208,219✔
247
    return taosArrayPush(pArray, pData);
183,009✔
248
  }
249

250
  if (pArray->size >= pArray->capacity) {
25,220✔
251
    int32_t ret = taosArrayResize(pArray);
14✔
252
    if (ret < 0) {
14!
253
      terrno = ret;
×
254
      return NULL;
×
255
    }
256
  }
257

258
  void* dst = TARRAY_GET_ELEM(pArray, index);
25,220✔
259

260
  int32_t remain = (int32_t)(pArray->size - index);
25,220✔
261
  memmove((char*)dst + pArray->elemSize, (char*)dst, pArray->elemSize * remain);
25,220✔
262
  memcpy(dst, pData, pArray->elemSize);
25,220✔
263

264
  pArray->size += 1;
25,220✔
265

266
  return dst;
25,220✔
267
}
268

269
void taosArraySet(SArray* pArray, size_t index, void* pData) {
57,959,163✔
270
  if (index < pArray->size) {
57,959,163!
271
    memcpy(TARRAY_GET_ELEM(pArray, index), pData, pArray->elemSize);
57,961,161✔
272
  }
273
}
57,959,163✔
274

275
void taosArrayPopFrontBatch(SArray* pArray, size_t cnt) {
23,828✔
276
  if (cnt > pArray->size) {
23,828!
UNCOV
277
    cnt = pArray->size;
×
278
  }
279

280
  pArray->size = pArray->size - cnt;
23,828✔
281
  if (pArray->size == 0 || cnt == 0) {
23,828✔
282
    return;
23,155✔
283
  }
284
  memmove(pArray->pData, (char*)pArray->pData + cnt * pArray->elemSize, pArray->size * pArray->elemSize);
673✔
285
}
286

287
void taosArrayPopTailBatch(SArray* pArray, size_t cnt) {
18,220✔
288
  if (cnt >= pArray->size) {
18,220✔
289
    cnt = pArray->size;
18,197✔
290
  }
291

292
  pArray->size = pArray->size - cnt;
18,220✔
293
}
18,220✔
294

295
void taosArrayRemove(SArray* pArray, size_t index) {
2,216,507✔
296
  if (!(index < pArray->size)) {
2,216,507!
297
    return;
×
298
  }
299

300
  if (index == pArray->size - 1) {
2,216,507✔
301
    void* t = taosArrayPop(pArray);
701,128✔
302
    return;
701,127✔
303
  }
304

305
  size_t remain = pArray->size - index - 1;
1,515,379✔
306
  memmove((char*)pArray->pData + index * pArray->elemSize, (char*)pArray->pData + (index + 1) * pArray->elemSize,
1,515,379✔
307
          remain * pArray->elemSize);
1,515,379✔
308
  pArray->size -= 1;
1,515,379✔
309
}
310

311
void taosArrayRemoveBatch(SArray* pArray, size_t index, size_t num, FDelete fp) {
155,990✔
312
  if(num == 0) {
155,990!
313
    return;
×
314
  }
315
  if (index + num <= pArray->size) {
155,990!
316
    if (fp) {
155,993!
317
      for (int32_t i = 0; i < num; i++) {
366,963✔
318
        fp(taosArrayGet(pArray, index + i));
210,968✔
319
      }
320
    }
321

322
    memmove((char*)pArray->pData + index * pArray->elemSize, (char*)pArray->pData + (index + num) * pArray->elemSize,
155,993✔
323
            (pArray->size - index - num) * pArray->elemSize);
155,993✔
324
    pArray->size -= num;
155,993✔
325
  }
326
}
327

UNCOV
328
SArray* taosArrayFromList(const void* src, size_t size, size_t elemSize) {
×
UNCOV
329
  if (elemSize <= 0) {
×
330
    terrno = TSDB_CODE_INVALID_PARA;
×
331
    return NULL;
×
332
  }
333

UNCOV
334
  SArray* pDst = taosArrayInit(size, elemSize);
×
UNCOV
335
  if (pDst) {
×
UNCOV
336
    memcpy(pDst->pData, src, elemSize * size);
×
UNCOV
337
    pDst->size = size;
×
338
  }
339

UNCOV
340
  return pDst;
×
341
}
342

343
SArray* taosArrayDup(const SArray* pSrc, __array_item_dup_fn_t fn) {
736,250✔
344
  if (NULL == pSrc) {
736,250✔
345
    terrno = TSDB_CODE_INVALID_PARA;
5,941✔
346
    return NULL;
5,941✔
347
  }
348

349
  if (pSrc->size == 0) {  // empty array list
730,309✔
350
    return taosArrayInit(8, pSrc->elemSize);
47,702✔
351
  }
352

353
  SArray* dst = taosArrayInit(pSrc->size, pSrc->elemSize);
682,607✔
354

355
  if (dst) {
682,474!
356
    if (fn == NULL) {
682,486✔
357
      memcpy(dst->pData, pSrc->pData, pSrc->elemSize * pSrc->size);
681,483✔
358
    } else {
359
      for (int32_t i = 0; i < pSrc->size; ++i) {
2,914✔
360
        void* p = fn(taosArrayGetP(pSrc, i));
1,720✔
361
        memcpy(((char*)dst->pData) + i * dst->elemSize, &p, dst->elemSize);
1,911✔
362
      }
363
    }
364

365
    dst->size = pSrc->size;
682,677✔
366
  }
367

368
  return dst;
682,665✔
369
}
370

371
void taosArrayClear(SArray* pArray) {
114,797,332✔
372
  if (pArray == NULL) return;
114,797,332✔
373
  pArray->size = 0;
94,819,213✔
374
}
375

376
void taosArrayClearEx(SArray* pArray, void (*fp)(void*)) {
353,611✔
377
  if (pArray == NULL) return;
353,611✔
378
  if (fp == NULL) {
327,524!
UNCOV
379
    pArray->size = 0;
×
UNCOV
380
    return;
×
381
  }
382

383
  for (int32_t i = 0; i < pArray->size; ++i) {
842,620✔
384
    fp(TARRAY_GET_ELEM(pArray, i));
515,087✔
385
  }
386

387
  pArray->size = 0;
327,533✔
388
}
389
void taosArrayClearP(SArray* pArray, void (*fp)(void*)) {
7,955✔
390
  // if (pArray == NULL) return;
391
  // if (fp == NULL) {
392
  //   pArray->size = 0;
393
  //   return;
394
  // }
395

396
  // for (int32_t i = 0; i < pArray->size; ++i) {
397
  //   fp(TARRAY_GET_ELEM(pArray, i));
398
  // }
399
  if (pArray) {
7,955!
400
    if (NULL == fp) {
7,955✔
401
      for (int32_t i = 0; i < pArray->size; i++) {
862✔
402
        taosMemoryFree(*(void**)TARRAY_GET_ELEM(pArray, i));
6!
403
      }
404
    } else {
405
      for (int32_t i = 0; i < pArray->size; i++) {
36,361✔
406
        fp(*(void**)TARRAY_GET_ELEM(pArray, i));
29,262✔
407
      }
408
    }
409
  }
410
  taosArrayClear(pArray);
7,955✔
411
}
7,954✔
412

413
void taosArrayDestroy(SArray* pArray) {
167,813,196✔
414
  if (pArray) {
167,813,196✔
415
    taosMemoryFree(pArray->pData);
106,745,199!
416
    taosMemoryFree(pArray);
106,811,851!
417
  }
418
}
167,837,273✔
419

420
void taosArrayDestroyP(SArray* pArray, FDelete fp) {
1,806,365✔
421
  if (pArray) {
1,806,365✔
422
    if (NULL == fp) {
1,529,243✔
423
      for (int32_t i = 0; i < pArray->size; i++) {
3,045,401✔
424
        taosMemoryFree(*(void**)TARRAY_GET_ELEM(pArray, i));
1,746,752!
425
      }
426
    } else {
427
      for (int32_t i = 0; i < pArray->size; i++) {
767,205✔
428
        fp(*(void**)TARRAY_GET_ELEM(pArray, i));
536,628✔
429
      }
430
    }
431
    taosArrayDestroy(pArray);
1,529,226✔
432
  }
433
}
1,806,423✔
434

435
void taosArrayDestroyEx(SArray* pArray, FDelete fp) {
14,457,213✔
436
  if (pArray == NULL) {
14,457,213✔
437
    return;
3,772,854✔
438
  }
439

440
  if (fp == NULL) {
10,684,359✔
441
    taosArrayDestroy(pArray);
18,781✔
442
    return;
18,783✔
443
  }
444

445
  for (int32_t i = 0; i < pArray->size; ++i) {
92,372,709✔
446
    fp(TARRAY_GET_ELEM(pArray, i));
81,710,083✔
447
  }
448

449
  taosArrayDestroy(pArray);
10,662,626✔
450
}
451

452
void taosArraySort(SArray* pArray, __compar_fn_t compar) {
1,085,420✔
453
  taosSort(pArray->pData, pArray->size, pArray->elemSize, compar);
1,085,420✔
454
}
1,085,471✔
455

456
int32_t taosArrayMSort(SArray* pArray, __compar_fn_t compar) {
4,215✔
457
  return taosMergeSort(pArray->pData, pArray->size, pArray->elemSize, compar);
4,215✔
458
}
459

460
void* taosArraySearch(const SArray* pArray, const void* key, __compar_fn_t comparFn, int32_t flags) {
3,100,545✔
461
  return taosbsearch(key, pArray->pData, pArray->size, pArray->elemSize, comparFn, flags);
3,100,545✔
462
}
463

464
int32_t taosArraySearchIdx(const SArray* pArray, const void* key, __compar_fn_t comparFn, int32_t flags) {
2,688,630✔
465
  void* item = taosArraySearch(pArray, key, comparFn, flags);
2,688,630✔
466
  return item == NULL ? -1 : (int32_t)((char*)item - (char*)pArray->pData) / pArray->elemSize;
2,688,931✔
467
}
468

469
#ifdef BUILD_NO_CALL
470
static int32_t taosArrayPartition(SArray* pArray, int32_t i, int32_t j, __ext_compar_fn_t fn, const void* userData) {
471
  void* key = taosArrayGetP(pArray, i);
472
  while (i < j) {
473
    while (i < j && fn(taosArrayGetP(pArray, j), key, userData) >= 0) {
474
      j--;
475
    }
476
    if (i < j) {
477
      void* a = taosArrayGetP(pArray, j);
478
      taosArraySet(pArray, i, &a);
479
    }
480
    while (i < j && fn(taosArrayGetP(pArray, i), key, userData) <= 0) {
481
      i++;
482
    }
483
    if (i < j) {
484
      void* a = taosArrayGetP(pArray, i);
485
      taosArraySet(pArray, j, &a);
486
    }
487
  }
488
  taosArraySet(pArray, i, &key);
489
  return i;
490
}
491

492
static void taosArrayQuicksortImpl(SArray* pArray, int32_t low, int32_t high, __ext_compar_fn_t fn, const void* param) {
493
  if (low < high) {
494
    int32_t idx = taosArrayPartition(pArray, low, high, fn, param);
495
    taosArrayQuicksortImpl(pArray, low, idx - 1, fn, param);
496
    taosArrayQuicksortImpl(pArray, idx + 1, high, fn, param);
497
  }
498
}
499

500
static void taosArrayQuickSort(SArray* pArray, __ext_compar_fn_t fn, const void* param) {
501
  if (pArray->size <= 1) {
502
    return;
503
  }
504
  taosArrayQuicksortImpl(pArray, 0, (int32_t)(taosArrayGetSize(pArray) - 1), fn, param);
505
}
506

507
static void taosArrayInsertSort(SArray* pArray, __ext_compar_fn_t fn, const void* param) {
508
  if (pArray->size <= 1) {
509
    return;
510
  }
511

512
  for (int32_t i = 1; i <= pArray->size - 1; ++i) {
513
    for (int32_t j = i; j > 0; --j) {
514
      if (fn(taosArrayGetP(pArray, j), taosArrayGetP(pArray, j - 1), param) == -1) {
515
        void* a = taosArrayGetP(pArray, j);
516
        void* b = taosArrayGetP(pArray, j - 1);
517
        taosArraySet(pArray, j - 1, &a);
518
        taosArraySet(pArray, j, &b);
519
      } else {
520
        break;
521
      }
522
    }
523
  }
524
}
525
#endif
526

527
int32_t taosEncodeArray(void** buf, const SArray* pArray, FEncode encode) {
3,802✔
528
  int32_t tlen = 0;
3,802✔
529
  int32_t sz = pArray->size;
3,802✔
530
  tlen += taosEncodeFixedI32(buf, sz);
3,802✔
531
  for (int32_t i = 0; i < sz; i++) {
10,116✔
532
    void* data = taosArrayGetP(pArray, i);
6,314✔
533
    tlen += encode(buf, data);
6,314✔
534
  }
535
  return tlen;
3,802✔
536
}
537

538
void* taosDecodeArray(const void* buf, SArray** pArray, FDecode decode, int32_t dataSz, int8_t sver) {
1,467!
539
  int32_t sz;
540
  buf = taosDecodeFixedI32(buf, &sz);
1,467✔
541
  *pArray = taosArrayInit(sz, sizeof(void*));
1,467✔
542
  if (*pArray == NULL) {
1,467!
543
    return NULL;
×
544
  }
545
  for (int32_t i = 0; i < sz; i++) {
4,321✔
546
    void* data = taosMemoryCalloc(1, dataSz);
2,854!
547
    if (data == NULL) {
2,854!
548
      return NULL;
×
549
    }
550

551
    buf = decode(buf, data, sver);
2,854✔
552

553
    if (taosArrayPush(*pArray, &data) == NULL) {
5,708!
554
      taosMemoryFree(data);
×
555
      return NULL;
×
556
    }
557
  }
558
  return (void*)buf;
1,467✔
559
}
560

561
// todo remove it
562
// order array<type *>
UNCOV
563
int32_t taosArraySortPWithExt(SArray* pArray, __ext_compar_fn_t fn, const void* param) {
×
UNCOV
564
  return taosqsort(pArray->pData, pArray->size, pArray->elemSize, param, fn);
×
565
}
566

567
void taosArraySwap(SArray* a, SArray* b) {
×
568
  if (a == NULL || b == NULL) return;
×
569
  size_t t = a->size;
×
570
  a->size = b->size;
×
571
  b->size = t;
×
572

573
  uint32_t cap = a->capacity;
×
574
  a->capacity = b->capacity;
×
575
  b->capacity = cap;
×
576

577
  uint32_t elem = a->elemSize;
×
578
  a->elemSize = b->elemSize;
×
579
  b->elemSize = elem;
×
580

581
  void* data = a->pData;
×
582
  a->pData = b->pData;
×
583
  b->pData = data;
×
584
}
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