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

taosdata / TDengine / #4783

09 Oct 2025 07:30AM UTC coverage: 58.457% (+0.2%) from 58.252%
#4783

push

travis-ci

web-flow
Merge pull request #33183 from taosdata/fix/sort-release-note

fix: replace DocCardList with SortedDocCardList in release notes

138849 of 302745 branches covered (45.86%)

Branch coverage included in aggregate %.

210224 of 294403 relevant lines covered (71.41%)

16945440.37 hits per line

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

77.78
/source/common/src/tcol.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

17
#include "tcol.h"
18
#include "tcompression.h"
19
#include "tutil.h"
20

21
const char* supportedEncode[] = {
22
    TSDB_COLUMN_ENCODE_SIMPLE8B, TSDB_COLUMN_ENCODE_XOR,      TSDB_COLUMN_ENCODE_RLE,
23
    TSDB_COLUMN_ENCODE_DELTAD,   TSDB_COLUMN_ENCODE_DISABLED, TSDB_COLUMN_ENCODE_BYTE_STREAM_SPLIT,
24
};
25

26
const char* supportedCompress[6] = {TSDB_COLUMN_COMPRESS_LZ4,  TSDB_COLUMN_COMPRESS_TSZ,
27
                                    TSDB_COLUMN_COMPRESS_XZ,   TSDB_COLUMN_COMPRESS_ZLIB,
28
                                    TSDB_COLUMN_COMPRESS_ZSTD, TSDB_COLUMN_COMPRESS_DISABLED};
29

30
const char* supportedLevel[3] = {TSDB_COLUMN_LEVEL_HIGH, TSDB_COLUMN_LEVEL_MEDIUM, TSDB_COLUMN_LEVEL_LOW};
31

32
const int supportedEncodeNum = sizeof(supportedEncode) / sizeof(char*);
33
const int supportedCompressNum = sizeof(supportedCompress) / sizeof(char*);
34
const int supportedLevelNum = sizeof(supportedLevel) / sizeof(char*);
35

36
uint8_t getDefaultEncode(uint8_t type) {
49,153✔
37
  switch (type) {
49,153!
38
    case TSDB_DATA_TYPE_NULL:
1,577✔
39
    case TSDB_DATA_TYPE_BOOL:
40
      return TSDB_COLVAL_ENCODE_RLE;
1,577✔
41
    case TSDB_DATA_TYPE_TINYINT:
32,992✔
42
    case TSDB_DATA_TYPE_SMALLINT:
43
    case TSDB_DATA_TYPE_INT:
44
    case TSDB_DATA_TYPE_BIGINT:
45
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
32,992✔
46
    case TSDB_DATA_TYPE_FLOAT:
4,686✔
47
    case TSDB_DATA_TYPE_DOUBLE:
48
      return TSDB_COLVAL_ENCODE_BYTE_STREAM_SPLIT;
4,686✔
49
    case TSDB_DATA_TYPE_VARCHAR:  // TSDB_DATA_TYPE_BINARY
2,021✔
50
      return TSDB_COLVAL_ENCODE_DISABLED;
2,021✔
51
    case TSDB_DATA_TYPE_TIMESTAMP:
2,455✔
52
      return TSDB_COLVAL_ENCODE_XOR;
2,455✔
53
    case TSDB_DATA_TYPE_NCHAR:
3,087✔
54
      return TSDB_COLVAL_ENCODE_DISABLED;
3,087✔
55
    case TSDB_DATA_TYPE_UTINYINT:
378✔
56
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
378✔
57
    case TSDB_DATA_TYPE_USMALLINT:
379✔
58
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
379✔
59
    case TSDB_DATA_TYPE_UINT:
405✔
60
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
405✔
61
    case TSDB_DATA_TYPE_UBIGINT:
402✔
62
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
402✔
63
    case TSDB_DATA_TYPE_JSON:
×
64
      return TSDB_COLVAL_ENCODE_DISABLED;
×
65
    case TSDB_DATA_TYPE_VARBINARY:
210✔
66
      return TSDB_COLVAL_ENCODE_DISABLED;
210✔
67
    case TSDB_DATA_TYPE_DECIMAL64:
367✔
68
    case TSDB_DATA_TYPE_DECIMAL:
69
      return TSDB_COLVAL_ENCODE_DISABLED;
367✔
70
    case TSDB_DATA_TYPE_BLOB:
1✔
71
      return TSDB_COLVAL_ENCODE_DISABLED;
1✔
72
    case TSDB_DATA_TYPE_MEDIUMBLOB:
×
73
      return TSDB_COLVAL_ENCODE_DISABLED;
×
74
    case TSDB_DATA_TYPE_GEOMETRY:
211✔
75
      return TSDB_COLVAL_ENCODE_DISABLED;
211✔
76

77
    case TSDB_DATA_TYPE_MAX:
×
78
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
×
79

80
    default:
×
81
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
×
82
  }
83
}
84
const char* getDefaultEncodeStr(uint8_t type) { return columnEncodeStr(getDefaultEncode(type)); }
36,343✔
85

86
uint16_t getDefaultCompress(uint8_t type) {
48,843✔
87
  switch (type) {
48,843!
88
    case TSDB_DATA_TYPE_NULL:
×
89
      return TSDB_COLVAL_COMPRESS_LZ4;
×
90
    case TSDB_DATA_TYPE_BOOL:
1,578✔
91
      return TSDB_COLVAL_COMPRESS_ZSTD;
1,578✔
92
    case TSDB_DATA_TYPE_TINYINT:
2,854✔
93
    case TSDB_DATA_TYPE_SMALLINT:
94
      return TSDB_COLVAL_COMPRESS_ZLIB;
2,854✔
95
    case TSDB_DATA_TYPE_INT:
29,818✔
96
    case TSDB_DATA_TYPE_BIGINT:
97
      return TSDB_COLVAL_COMPRESS_LZ4;
29,818✔
98
    case TSDB_DATA_TYPE_FLOAT:
4,683✔
99
    case TSDB_DATA_TYPE_DOUBLE:
100
      return TSDB_COLVAL_COMPRESS_LZ4;
4,683✔
101
    case TSDB_DATA_TYPE_VARCHAR:  // TSDB_DATA_TYPE_BINARY
2,023✔
102
      return TSDB_COLVAL_COMPRESS_ZSTD;
2,023✔
103
    case TSDB_DATA_TYPE_TIMESTAMP:
2,451✔
104
      return TSDB_COLVAL_COMPRESS_LZ4;
2,451✔
105
    case TSDB_DATA_TYPE_NCHAR:
3,087✔
106
      return TSDB_COLVAL_COMPRESS_ZSTD;
3,087✔
107
    case TSDB_DATA_TYPE_UTINYINT:
757✔
108
    case TSDB_DATA_TYPE_USMALLINT:
109
      return TSDB_COLVAL_COMPRESS_ZLIB;
757✔
110
    case TSDB_DATA_TYPE_UINT:
807✔
111
    case TSDB_DATA_TYPE_UBIGINT:
112
      return TSDB_COLVAL_COMPRESS_LZ4;
807✔
113
    case TSDB_DATA_TYPE_JSON:
×
114
      return TSDB_COLVAL_COMPRESS_LZ4;
×
115
    case TSDB_DATA_TYPE_VARBINARY:
210✔
116
      return TSDB_COLVAL_COMPRESS_ZSTD;
210✔
117
    case TSDB_DATA_TYPE_DECIMAL64:
367✔
118
    case TSDB_DATA_TYPE_DECIMAL:
119
      return TSDB_COLVAL_COMPRESS_ZSTD;
367✔
120
    case TSDB_DATA_TYPE_BLOB:
1✔
121
      return TSDB_COLVAL_COMPRESS_LZ4;
1✔
122
    case TSDB_DATA_TYPE_MEDIUMBLOB:
×
123
      return TSDB_COLVAL_COMPRESS_LZ4;
×
124
    case TSDB_DATA_TYPE_GEOMETRY:
211✔
125
      return TSDB_COLVAL_COMPRESS_LZ4;
211✔
126
    case TSDB_DATA_TYPE_MAX:
×
127
      return TSDB_COLVAL_COMPRESS_LZ4;
×
128
    default:
×
129
      return TSDB_COLVAL_COMPRESS_LZ4;
×
130
  }
131
}
132
const char* getDefaultCompressStr(uint8_t type) { return columnCompressStr(getDefaultCompress(type)); }
36,024✔
133

134
uint8_t     getDefaultLevel(uint8_t type) { return TSDB_COLVAL_LEVEL_MEDIUM; }
48,835✔
135
const char* getDefaultLevelStr(uint8_t type) { return columnLevelStr(getDefaultLevel(type)); }
36,024✔
136

137
const char* columnEncodeStr(uint8_t type) {
2,674,485✔
138
  const char* encode = NULL;
2,674,485✔
139
  switch (type) {
2,674,485!
140
    case TSDB_COLVAL_ENCODE_SIMPLE8B:
1,411,475✔
141
      encode = TSDB_COLUMN_ENCODE_SIMPLE8B;
1,411,475✔
142
      break;
1,411,475✔
143
    case TSDB_COLVAL_ENCODE_XOR:
539,153✔
144
      encode = TSDB_COLUMN_ENCODE_XOR;
539,153✔
145
      break;
539,153✔
146
    case TSDB_COLVAL_ENCODE_RLE:
47,865✔
147
      encode = TSDB_COLUMN_ENCODE_RLE;
47,865✔
148
      break;
47,865✔
149
    case TSDB_COLVAL_ENCODE_DELTAD:
6,910✔
150
      encode = TSDB_COLUMN_ENCODE_DELTAD;
6,910✔
151
      break;
6,910✔
152
    case TSDB_COLVAL_ENCODE_DISABLED:
128,591✔
153
      encode = TSDB_COLUMN_ENCODE_DISABLED;
128,591✔
154
      break;
128,591✔
155
    case TSDB_COLVAL_ENCODE_BYTE_STREAM_SPLIT:
540,669✔
156
      encode = TSDB_COLUMN_ENCODE_BYTE_STREAM_SPLIT;
540,669✔
157
      break;
540,669✔
158
    default:
×
159
      encode = TSDB_COLUMN_ENCODE_UNKNOWN;
×
160
      break;
×
161
  }
162
  return encode;
2,674,485✔
163
}
164

165
const char* columnCompressStr(uint16_t type) {
2,673,999✔
166
  const char* compress = NULL;
2,673,999✔
167
  switch (type) {
2,673,999!
168
    case TSDB_COLVAL_COMPRESS_LZ4:
2,338,196✔
169
      compress = TSDB_COLUMN_COMPRESS_LZ4;
2,338,196✔
170
      break;
2,338,196✔
171
    case TSDB_COLVAL_COMPRESS_TSZ:
1,829✔
172
      compress = TSDB_COLUMN_COMPRESS_TSZ;
1,829✔
173
      break;
1,829✔
174
    case TSDB_COLVAL_COMPRESS_XZ:
×
175
      compress = TSDB_COLUMN_COMPRESS_XZ;
×
176
      break;
×
177
    case TSDB_COLVAL_COMPRESS_ZLIB:
158,476✔
178
      compress = TSDB_COLUMN_COMPRESS_ZLIB;
158,476✔
179
      break;
158,476✔
180
    case TSDB_COLVAL_COMPRESS_ZSTD:
175,594✔
181
      compress = TSDB_COLUMN_COMPRESS_ZSTD;
175,594✔
182
      break;
175,594✔
183
    case TSDB_COLVAL_COMPRESS_DISABLED:
10✔
184
      compress = TSDB_COLUMN_COMPRESS_DISABLED;
10✔
185
      break;
10✔
186
    default:
×
187
      compress = TSDB_COLUMN_COMPRESS_UNKNOWN;
×
188
      break;
×
189
  }
190
  return compress;
2,673,999✔
191
}
192

193
uint8_t columnLevelVal(const char* level) {
37,674✔
194
  if (level == NULL) return TSDB_COLVAL_LEVEL_NOCHANGE;
37,674!
195
  uint8_t l = TSDB_COLVAL_LEVEL_MEDIUM;
37,674✔
196
  if (0 == strcmp(level, "h") || 0 == strcmp(level, TSDB_COLUMN_LEVEL_HIGH)) {
37,674!
197
    l = TSDB_COLVAL_LEVEL_HIGH;
×
198
  } else if (0 == strcmp(level, "m") || 0 == strcmp(level, TSDB_COLUMN_LEVEL_MEDIUM)) {
37,674!
199
    l = TSDB_COLVAL_LEVEL_MEDIUM;
37,029✔
200
  } else if (0 == strcmp(level, "l") || 0 == strcmp(level, TSDB_COLUMN_LEVEL_LOW)) {
645!
201
    l = TSDB_COLVAL_LEVEL_LOW;
×
202
  } else {
203
    l = TSDB_COLVAL_LEVEL_NOCHANGE;
645✔
204
  }
205
  return l;
37,674✔
206
}
207

208
uint16_t columnCompressVal(const char* compress) {
37,675✔
209
  if (compress == NULL) return TSDB_COLVAL_COMPRESS_NOCHANGE;
37,675!
210
  uint16_t c = TSDB_COLVAL_COMPRESS_LZ4;
37,675✔
211
  if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_LZ4)) {
37,675✔
212
    c = TSDB_COLVAL_COMPRESS_LZ4;
28,261✔
213
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_TSZ)) {
9,414!
214
    c = TSDB_COLVAL_COMPRESS_TSZ;
×
215
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_XZ)) {
9,414!
216
    c = TSDB_COLVAL_COMPRESS_XZ;
×
217
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_ZLIB)) {
9,414✔
218
    c = TSDB_COLVAL_COMPRESS_ZLIB;
3,218✔
219
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_ZSTD)) {
6,196✔
220
    c = TSDB_COLVAL_COMPRESS_ZSTD;
5,551✔
221
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_DISABLED)) {
645!
222
    c = TSDB_COLVAL_COMPRESS_DISABLED;
×
223
  } else {
224
    c = TSDB_COLVAL_COMPRESS_NOCHANGE;
645✔
225
  }
226
  return c;
37,675✔
227
}
228

229
uint8_t columnEncodeVal(const char* encode) {
37,356✔
230
  if (encode == NULL) return TSDB_COLVAL_ENCODE_NOCHANGE;
37,356!
231
  uint8_t e = TSDB_COLVAL_ENCODE_SIMPLE8B;
37,356✔
232
  if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_SIMPLE8B)) {
37,356✔
233
    e = TSDB_COLVAL_ENCODE_SIMPLE8B;
26,226✔
234
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_XOR)) {
11,130✔
235
    e = TSDB_COLVAL_ENCODE_XOR;
1,158✔
236
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_RLE)) {
9,972✔
237
    e = TSDB_COLVAL_ENCODE_RLE;
1,473✔
238
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_DELTAD)) {
8,499✔
239
    e = TSDB_COLVAL_ENCODE_DELTAD;
162✔
240
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_DISABLED)) {
8,337✔
241
    e = TSDB_COLVAL_ENCODE_DISABLED;
4,288✔
242
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_BYTE_STREAM_SPLIT)) {
4,049✔
243
    e = TSDB_COLVAL_ENCODE_BYTE_STREAM_SPLIT;
3,404✔
244
  } else {
245
    e = TSDB_COLVAL_ENCODE_NOCHANGE;
645✔
246
  }
247
  return e;
37,356✔
248
}
249

250
const char* columnLevelStr(uint8_t type) {
2,673,921✔
251
  const char* level = NULL;
2,673,921✔
252
  switch (type) {
2,673,921!
253
    case TSDB_COLVAL_LEVEL_HIGH:
1,618✔
254
      level = TSDB_COLUMN_LEVEL_HIGH;
1,618✔
255
      break;
1,618✔
256
    case TSDB_COLVAL_LEVEL_MEDIUM:
2,661,854✔
257
      level = TSDB_COLUMN_LEVEL_MEDIUM;
2,661,854✔
258
      break;
2,661,854✔
259
    case TSDB_COLVAL_LEVEL_LOW:
10,452✔
260
      level = TSDB_COLUMN_LEVEL_LOW;
10,452✔
261
      break;
10,452✔
262
    default:
×
263
      level = TSDB_COLUMN_LEVEL_UNKNOWN;
×
264
      break;
×
265
  }
266
  return level;
2,673,921✔
267
}
268

269
bool checkColumnEncode(char encode[TSDB_CL_COMPRESS_OPTION_LEN]) {
189✔
270
  if (0 == strlen(encode)) return true;
189!
271
  TAOS_UNUSED(strtolower(encode, encode));
189✔
272
  for (int i = 0; i < supportedEncodeNum; ++i) {
622!
273
    if (0 == strcmp((const char*)encode, supportedEncode[i])) {
622✔
274
      return true;
189✔
275
    }
276
  }
277
  return false;
×
278
}
279
bool checkColumnEncodeOrSetDefault(uint8_t type, char encode[TSDB_CL_COMPRESS_OPTION_LEN]) {
36,532✔
280
  if (0 == strlen(encode)) {
36,532✔
281
    tstrncpy(encode, getDefaultEncodeStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
36,343✔
282
    return true;
36,343✔
283
  }
284
  return checkColumnEncode(encode) && validColEncode(type, columnEncodeVal(encode));
189!
285
}
286
bool checkColumnCompress(char compress[TSDB_CL_COMPRESS_OPTION_LEN]) {
508✔
287
  if (0 == strlen(compress)) return true;
508!
288
  TAOS_UNUSED(strtolower(compress, compress));
508✔
289
  for (int i = 0; i < supportedCompressNum; ++i) {
763!
290
    if (0 == strcmp((const char*)compress, supportedCompress[i])) {
763✔
291
      return true;
508✔
292
    }
293
  }
294
  return false;
×
295
}
296
bool checkColumnCompressOrSetDefault(uint8_t type, char compress[TSDB_CL_COMPRESS_OPTION_LEN]) {
36,532✔
297
  if (0 == strlen(compress)) {
36,532✔
298
    tstrncpy(compress, getDefaultCompressStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
36,024✔
299
    return true;
36,024✔
300
  }
301

302
  return checkColumnCompress(compress) && validColCompress(type, columnCompressVal(compress));
508!
303
}
304
bool checkColumnLevel(char level[TSDB_CL_COMPRESS_OPTION_LEN]) {
508✔
305
  if (0 == strlen(level)) return true;
508!
306
  TAOS_UNUSED(strtolower(level, level));
508✔
307
  if (1 == strlen(level)) {
508!
308
    if ('h' == level[0] || 'm' == level[0] || 'l' == level[0]) return true;
×
309
  } else {
310
    for (int i = 0; i < supportedLevelNum; ++i) {
1,016!
311
      if (0 == strcmp((const char*)level, supportedLevel[i])) {
1,016✔
312
        return true;
508✔
313
      }
314
    }
315
  }
316
  return false;
×
317
}
318
bool checkColumnLevelOrSetDefault(uint8_t type, char level[TSDB_CL_COMPRESS_OPTION_LEN]) {
36,532✔
319
  if (0 == strlen(level)) {
36,532✔
320
    tstrncpy(level, getDefaultLevelStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
36,024✔
321
    return true;
36,024✔
322
  }
323
  return checkColumnLevel(level) && validColCompressLevel(type, columnLevelVal(level));
508!
324
}
325

326
void setColEncode(uint32_t* compress, uint8_t l1) {
38,815✔
327
  *compress &= 0x00FFFFFF;
38,815✔
328
  *compress |= (l1 << 24);
38,815✔
329
  return;
38,815✔
330
}
331
void setColCompress(uint32_t* compress, uint16_t l2) {
38,805✔
332
  *compress &= 0xFF0000FF;
38,805✔
333
  *compress |= (l2 << 8);
38,805✔
334
  return;
38,805✔
335
}
336
void setColLevel(uint32_t* compress, uint8_t level) {
38,792✔
337
  *compress &= 0xFFFFFF00;
38,792✔
338
  *compress |= level;
38,792✔
339
  return;
38,792✔
340
}
341

342
int32_t setColCompressByOption(uint8_t type, uint8_t encode, uint16_t compressType, uint8_t level, bool check,
9,700✔
343
                               uint32_t* compress) {
344
  if (compress == NULL) return TSDB_CODE_TSC_ENCODE_PARAM_ERROR;
9,700!
345
  if (check && !validColEncode(type, encode)) return TSDB_CODE_TSC_ENCODE_PARAM_ERROR;
9,700!
346
  setColEncode(compress, encode);
9,700✔
347

348
  if (compressType == TSDB_COLVAL_COMPRESS_DISABLED) {
9,700!
349
    setColCompress(compress, compressType);
×
350
    setColLevel(compress, TSDB_COLVAL_LEVEL_DISABLED);
×
351
  } else {
352
    if (check && !validColCompress(type, compressType)) return TSDB_CODE_TSC_COMPRESS_PARAM_ERROR;
9,700!
353
    setColCompress(compress, compressType);
9,700✔
354

355
    if (check && !validColCompressLevel(type, level)) return TSDB_CODE_TSC_COMPRESS_LEVEL_ERROR;
9,700!
356
    setColLevel(compress, level);
9,700✔
357
  }
358
  return TSDB_CODE_SUCCESS;
9,699✔
359
}
360

361
bool withExtSchema(uint8_t tableType) {
12,228,683✔
362
  return TSDB_SUPER_TABLE == tableType || TSDB_NORMAL_TABLE == tableType || TSDB_CHILD_TABLE == tableType;
12,228,683✔
363
}
364

365
bool hasRefCol(uint8_t tableType) {
28,340,631✔
366
  return TSDB_VIRTUAL_NORMAL_TABLE == tableType || TSDB_VIRTUAL_CHILD_TABLE == tableType;
28,340,631!
367
}
368

369
int8_t validColCompressLevel(uint8_t type, uint8_t level) {
10,372✔
370
  if (level == TSDB_COLVAL_LEVEL_DISABLED) return 1;
10,372✔
371
  if (level < TSDB_COLVAL_LEVEL_NOCHANGE || level > TSDB_COLVAL_LEVEL_HIGH) {
10,368!
372
    return 0;
×
373
  }
374
  return 1;
10,368✔
375
}
376
int8_t validColCompress(uint8_t type, uint8_t l2) {
10,374✔
377
  if (l2 > TSDB_COLVAL_COMPRESS_XZ && l2 < TSDB_COLVAL_COMPRESS_DISABLED) {
10,374!
378
    return 0;
×
379
  }
380
  if (l2 == TSDB_COLVAL_COMPRESS_TSZ) {
10,374✔
381
    if (type == TSDB_DATA_TYPE_FLOAT || type == TSDB_DATA_TYPE_DOUBLE) {
10✔
382
      return 1;
8✔
383
    } else {
384
      return 0;
2✔
385
    }
386
  }
387
  return 1;
10,364✔
388
}
389

390
//
391
// | --------type----------|----- supported encode ----|
392
// |tinyint/smallint/int/bigint/utinyint/usmallinit/uint/ubiginint| simple8b |
393
// | timestamp/bigint/ubigint | delta-i  |
394
// | bool  |  bit-packing   |
395
// | float/double | delta-d/byte-stream-split |
396
//
397
int8_t validColEncode(uint8_t type, uint8_t l1) {
10,057✔
398
  if (l1 == TSDB_COLVAL_ENCODE_NOCHANGE) {
10,057✔
399
    return 1;
153✔
400
  }
401
  if (l1 == TSDB_COLVAL_ENCODE_DISABLED) {
9,904✔
402
    return 1;
1,987✔
403
  }
404
  if (type == TSDB_DATA_TYPE_BOOL) {
7,917✔
405
    return TSDB_COLVAL_ENCODE_RLE == l1 ? 1 : 0;
192✔
406
  } else if (type >= TSDB_DATA_TYPE_TINYINT && type <= TSDB_DATA_TYPE_INT) {
7,725!
407
    return TSDB_COLVAL_ENCODE_SIMPLE8B == l1 ? 1 : 0;
5,908✔
408
  } else if (type == TSDB_DATA_TYPE_BIGINT) {
1,817✔
409
    return TSDB_COLVAL_ENCODE_SIMPLE8B == l1 || TSDB_COLVAL_ENCODE_XOR == l1 ? 1 : 0;
209!
410
  } else if (type == TSDB_DATA_TYPE_FLOAT || type == TSDB_DATA_TYPE_DOUBLE) {
1,608✔
411
    return (l1 == TSDB_COLVAL_ENCODE_DELTAD || l1 == TSDB_COLVAL_ENCODE_BYTE_STREAM_SPLIT) ? 1 : 0;
557!
412
  } else if ((type == TSDB_DATA_TYPE_VARCHAR || type == TSDB_DATA_TYPE_NCHAR) || type == TSDB_DATA_TYPE_JSON ||
1,051!
413
             type == TSDB_DATA_TYPE_VARBINARY || type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_GEOMETRY ||
1,051!
414
             type == TSDB_DATA_TYPE_BLOB || type == TSDB_DATA_TYPE_MEDIUMBLOB) {
1,051!
415
    return l1 == TSDB_COLVAL_ENCODE_DISABLED ? 1 : 0;
×
416
    // if (l1 >= TSDB_COLVAL_ENCODE_NOCHANGE || l1 <= TSDB_COLVAL_ENCODE_DELTAD) {
417
    //   return 1;
418
    // } else if (l1 == TSDB_COLVAL_ENCODE_DISABLED) {
419
    //   return 1;
420
    // } else {
421
    //   return 0;
422
    // }
423
  } else if (type == TSDB_DATA_TYPE_TIMESTAMP) {
1,051✔
424
    return TSDB_COLVAL_ENCODE_XOR == l1 ? 1 : 0;
421✔
425
  } else if (type >= TSDB_DATA_TYPE_UTINYINT && type <= TSDB_DATA_TYPE_UINT) {
630!
426
    return TSDB_COLVAL_ENCODE_SIMPLE8B == l1 ? 1 : 0;
471✔
427
  } else if (type == TSDB_DATA_TYPE_UBIGINT) {
159!
428
    return TSDB_COLVAL_ENCODE_SIMPLE8B == l1 || TSDB_COLVAL_ENCODE_XOR == l1 ? 1 : 0;
159!
429
  } else if (type == TSDB_DATA_TYPE_GEOMETRY) {
×
430
    return 1;
×
431
  } else if (type == TSDB_DATA_TYPE_DECIMAL64 || type == TSDB_DATA_TYPE_DECIMAL) {
×
432
    return l1 == TSDB_COLVAL_ENCODE_DISABLED ? 1 : 0;
×
433
  }
434
  return 0;
×
435
}
436

437
uint32_t createDefaultColCmprByType(uint8_t type) {
11,176✔
438
  uint32_t ret = 0;
11,176✔
439
  uint8_t  encode = getDefaultEncode(type);
11,176✔
440
  uint8_t  compress = getDefaultCompress(type);
11,175✔
441
  uint8_t  lvl = getDefaultLevel(type);
11,175✔
442

443
  SET_COMPRESS(encode, compress, lvl, ret);
11,175✔
444
  return ret;
11,175✔
445
}
446
int32_t validColCmprByType(uint8_t type, uint32_t cmpr) {
168✔
447
  DEFINE_VAR(cmpr);
168✔
448
  if (!validColEncode(type, l1)) {
168✔
449
    return TSDB_CODE_TSC_ENCODE_PARAM_ERROR;
2✔
450
  }
451
  if (!validColCompress(type, l2)) {
166✔
452
    return TSDB_CODE_TSC_COMPRESS_PARAM_ERROR;
2✔
453
  }
454

455
  if (!validColCompressLevel(type, lvl)) {
164!
456
    return TSDB_CODE_TSC_COMPRESS_LEVEL_ERROR;
×
457
  }
458
  return TSDB_CODE_SUCCESS;
164✔
459
}
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