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

taosdata / TDengine / #4131

20 May 2025 07:22AM UTC coverage: 63.096% (+0.7%) from 62.384%
#4131

push

travis-ci

web-flow
docs(datain): add topic meta options docs in tmq (#31147)

157751 of 318088 branches covered (49.59%)

Branch coverage included in aggregate %.

243052 of 317143 relevant lines covered (76.64%)

18743283.33 hits per line

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

86.43
/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[5] = {TSDB_COLUMN_ENCODE_SIMPLE8B, TSDB_COLUMN_ENCODE_XOR, TSDB_COLUMN_ENCODE_RLE,
22
                                  TSDB_COLUMN_ENCODE_DELTAD, TSDB_COLUMN_ENCODE_DISABLED};
23

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

28
const char* supportedLevel[3] = {TSDB_COLUMN_LEVEL_HIGH, TSDB_COLUMN_LEVEL_MEDIUM, TSDB_COLUMN_LEVEL_LOW};
29

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

34
uint8_t getDefaultEncode(uint8_t type) {
491,149✔
35
  switch (type) {
491,149!
36
    case TSDB_DATA_TYPE_NULL:
27,873✔
37
    case TSDB_DATA_TYPE_BOOL:
38
      return TSDB_COLVAL_ENCODE_RLE;
27,873✔
39
    case TSDB_DATA_TYPE_TINYINT:
239,319✔
40
    case TSDB_DATA_TYPE_SMALLINT:
41
    case TSDB_DATA_TYPE_INT:
42
    case TSDB_DATA_TYPE_BIGINT:
43
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
239,319✔
44
    case TSDB_DATA_TYPE_FLOAT:
62,929✔
45
    case TSDB_DATA_TYPE_DOUBLE:
46
      return TSDB_COLVAL_ENCODE_DELTAD;
62,929✔
47
    case TSDB_DATA_TYPE_VARCHAR:  // TSDB_DATA_TYPE_BINARY
66,961✔
48
      return TSDB_COLVAL_ENCODE_DISABLED;
66,961✔
49
    case TSDB_DATA_TYPE_TIMESTAMP:
38,730✔
50
      return TSDB_COLVAL_ENCODE_XOR;
38,730✔
51
    case TSDB_DATA_TYPE_NCHAR:
43,961✔
52
      return TSDB_COLVAL_ENCODE_DISABLED;
43,961✔
53
    case TSDB_DATA_TYPE_UTINYINT:
3,203✔
54
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
3,203✔
55
    case TSDB_DATA_TYPE_USMALLINT:
2,144✔
56
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
2,144✔
57
    case TSDB_DATA_TYPE_UINT:
2,198✔
58
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
2,198✔
59
    case TSDB_DATA_TYPE_UBIGINT:
2,344✔
60
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
2,344✔
61
    case TSDB_DATA_TYPE_JSON:
×
62
      return TSDB_COLVAL_ENCODE_DISABLED;
×
63
    case TSDB_DATA_TYPE_VARBINARY:
537✔
64
      return TSDB_COLVAL_ENCODE_DISABLED;
537✔
65
    case TSDB_DATA_TYPE_DECIMAL64:
452✔
66
    case TSDB_DATA_TYPE_DECIMAL:
67
      return TSDB_COLVAL_ENCODE_DISABLED;
452✔
68
    case TSDB_DATA_TYPE_BLOB:
×
69
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
×
70
    case TSDB_DATA_TYPE_MEDIUMBLOB:
516✔
71
    case TSDB_DATA_TYPE_GEOMETRY:
72
      return TSDB_COLVAL_ENCODE_DISABLED;
516✔
73

74
    case TSDB_DATA_TYPE_MAX:
×
75
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
×
76

77
    default:
×
78
      return TSDB_COLVAL_ENCODE_SIMPLE8B;
×
79
  }
80
}
81
const char* getDefaultEncodeStr(uint8_t type) { return columnEncodeStr(getDefaultEncode(type)); }
459,255✔
82

83
uint16_t getDefaultCompress(uint8_t type) {
489,433✔
84
  switch (type) {
489,433!
85
    case TSDB_DATA_TYPE_NULL:
×
86
      return TSDB_COLVAL_COMPRESS_LZ4;
×
87
    case TSDB_DATA_TYPE_BOOL:
27,869✔
88
      return TSDB_COLVAL_COMPRESS_ZSTD;
27,869✔
89
    case TSDB_DATA_TYPE_TINYINT:
48,589✔
90
    case TSDB_DATA_TYPE_SMALLINT:
91
      return TSDB_COLVAL_COMPRESS_ZLIB;
48,589✔
92
    case TSDB_DATA_TYPE_INT:
189,115✔
93
    case TSDB_DATA_TYPE_BIGINT:
94
      return TSDB_COLVAL_COMPRESS_LZ4;
189,115✔
95
    case TSDB_DATA_TYPE_FLOAT:
62,927✔
96
    case TSDB_DATA_TYPE_DOUBLE:
97
      return TSDB_COLVAL_COMPRESS_LZ4;
62,927✔
98
    case TSDB_DATA_TYPE_VARCHAR:  // TSDB_DATA_TYPE_BINARY
66,954✔
99
      return TSDB_COLVAL_COMPRESS_ZSTD;
66,954✔
100
    case TSDB_DATA_TYPE_TIMESTAMP:
38,716✔
101
      return TSDB_COLVAL_COMPRESS_LZ4;
38,716✔
102
    case TSDB_DATA_TYPE_NCHAR:
43,957✔
103
      return TSDB_COLVAL_COMPRESS_ZSTD;
43,957✔
104
    case TSDB_DATA_TYPE_UTINYINT:
5,343✔
105
    case TSDB_DATA_TYPE_USMALLINT:
106
      return TSDB_COLVAL_COMPRESS_ZLIB;
5,343✔
107
    case TSDB_DATA_TYPE_UINT:
4,536✔
108
    case TSDB_DATA_TYPE_UBIGINT:
109
      return TSDB_COLVAL_COMPRESS_LZ4;
4,536✔
110
    case TSDB_DATA_TYPE_JSON:
×
111
      return TSDB_COLVAL_COMPRESS_LZ4;
×
112
    case TSDB_DATA_TYPE_VARBINARY:
535✔
113
      return TSDB_COLVAL_COMPRESS_ZSTD;
535✔
114
    case TSDB_DATA_TYPE_DECIMAL64:
382✔
115
    case TSDB_DATA_TYPE_DECIMAL:
116
      return TSDB_COLVAL_COMPRESS_ZSTD;
382✔
117
    case TSDB_DATA_TYPE_BLOB:
×
118
      return TSDB_COLVAL_COMPRESS_LZ4;
×
119
    case TSDB_DATA_TYPE_MEDIUMBLOB:
×
120
      return TSDB_COLVAL_COMPRESS_LZ4;
×
121
    case TSDB_DATA_TYPE_GEOMETRY:
516✔
122
      return TSDB_COLVAL_COMPRESS_LZ4;
516✔
123
    case TSDB_DATA_TYPE_MAX:
×
124
      return TSDB_COLVAL_COMPRESS_LZ4;
×
125
    default:
×
126
      return TSDB_COLVAL_COMPRESS_LZ4;
×
127
  }
128
}
129
const char* getDefaultCompressStr(uint8_t type) { return columnCompressStr(getDefaultCompress(type)); }
457,531✔
130

131
uint8_t     getDefaultLevel(uint8_t type) { return TSDB_COLVAL_LEVEL_MEDIUM; }
489,497✔
132
const char* getDefaultLevelStr(uint8_t type) { return columnLevelStr(getDefaultLevel(type)); }
457,594✔
133

134
const char* columnEncodeStr(uint8_t type) {
9,892,100✔
135
  const char* encode = NULL;
9,892,100✔
136
  switch (type) {
9,892,100!
137
    case TSDB_COLVAL_ENCODE_SIMPLE8B:
5,056,688✔
138
      encode = TSDB_COLUMN_ENCODE_SIMPLE8B;
5,056,688✔
139
      break;
5,056,688✔
140
    case TSDB_COLVAL_ENCODE_XOR:
1,596,477✔
141
      encode = TSDB_COLUMN_ENCODE_XOR;
1,596,477✔
142
      break;
1,596,477✔
143
    case TSDB_COLVAL_ENCODE_RLE:
461,430✔
144
      encode = TSDB_COLUMN_ENCODE_RLE;
461,430✔
145
      break;
461,430✔
146
    case TSDB_COLVAL_ENCODE_DELTAD:
1,492,937✔
147
      encode = TSDB_COLUMN_ENCODE_DELTAD;
1,492,937✔
148
      break;
1,492,937✔
149
    case TSDB_COLVAL_ENCODE_DISABLED:
1,285,331✔
150
      encode = TSDB_COLUMN_ENCODE_DISABLED;
1,285,331✔
151
      break;
1,285,331✔
152
    default:
×
153
      encode = TSDB_COLUMN_ENCODE_UNKNOWN;
×
154
      break;
×
155
  }
156
  return encode;
9,892,100✔
157
}
158

159
const char* columnCompressStr(uint16_t type) {
9,889,668✔
160
  const char* compress = NULL;
9,889,668✔
161
  switch (type) {
9,889,668!
162
    case TSDB_COLVAL_COMPRESS_LZ4:
7,149,311✔
163
      compress = TSDB_COLUMN_COMPRESS_LZ4;
7,149,311✔
164
      break;
7,149,311✔
165
    case TSDB_COLVAL_COMPRESS_TSZ:
220✔
166
      compress = TSDB_COLUMN_COMPRESS_TSZ;
220✔
167
      break;
220✔
168
    case TSDB_COLVAL_COMPRESS_XZ:
6✔
169
      compress = TSDB_COLUMN_COMPRESS_XZ;
6✔
170
      break;
6✔
171
    case TSDB_COLVAL_COMPRESS_ZLIB:
995,228✔
172
      compress = TSDB_COLUMN_COMPRESS_ZLIB;
995,228✔
173
      break;
995,228✔
174
    case TSDB_COLVAL_COMPRESS_ZSTD:
1,745,747✔
175
      compress = TSDB_COLUMN_COMPRESS_ZSTD;
1,745,747✔
176
      break;
1,745,747✔
177
    case TSDB_COLVAL_COMPRESS_DISABLED:
6✔
178
      compress = TSDB_COLUMN_COMPRESS_DISABLED;
6✔
179
      break;
6✔
180
    default:
×
181
      compress = TSDB_COLUMN_COMPRESS_UNKNOWN;
×
182
      break;
×
183
  }
184
  return compress;
9,889,668✔
185
}
186

187
uint8_t columnLevelVal(const char* level) {
463,022✔
188
  if (level == NULL) return TSDB_COLVAL_LEVEL_NOCHANGE;
463,022!
189
  uint8_t l = TSDB_COLVAL_LEVEL_MEDIUM;
463,022✔
190
  if (0 == strcmp(level, "h") || 0 == strcmp(level, TSDB_COLUMN_LEVEL_HIGH)) {
463,022✔
191
    l = TSDB_COLVAL_LEVEL_HIGH;
1,720✔
192
  } else if (0 == strcmp(level, "m") || 0 == strcmp(level, TSDB_COLUMN_LEVEL_MEDIUM)) {
461,302✔
193
    l = TSDB_COLVAL_LEVEL_MEDIUM;
460,909✔
194
  } else if (0 == strcmp(level, "l") || 0 == strcmp(level, TSDB_COLUMN_LEVEL_LOW)) {
393✔
195
    l = TSDB_COLVAL_LEVEL_LOW;
308✔
196
  } else {
197
    l = TSDB_COLVAL_LEVEL_NOCHANGE;
85✔
198
  }
199
  return l;
463,022✔
200
}
201

202
uint16_t columnCompressVal(const char* compress) {
463,120✔
203
  if (compress == NULL) return TSDB_COLVAL_COMPRESS_NOCHANGE;
463,120!
204
  uint16_t c = TSDB_COLVAL_COMPRESS_LZ4;
463,120✔
205
  if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_LZ4)) {
463,120✔
206
    c = TSDB_COLVAL_COMPRESS_LZ4;
281,343✔
207
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_TSZ)) {
181,777✔
208
    c = TSDB_COLVAL_COMPRESS_TSZ;
25✔
209
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_XZ)) {
181,752✔
210
    c = TSDB_COLVAL_COMPRESS_XZ;
184✔
211
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_ZLIB)) {
181,568✔
212
    c = TSDB_COLVAL_COMPRESS_ZLIB;
49,651✔
213
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_ZSTD)) {
131,917✔
214
    c = TSDB_COLVAL_COMPRESS_ZSTD;
131,617✔
215
  } else if (0 == strcmp(compress, TSDB_COLUMN_COMPRESS_DISABLED)) {
300✔
216
    c = TSDB_COLVAL_COMPRESS_DISABLED;
185✔
217
  } else {
218
    c = TSDB_COLVAL_COMPRESS_NOCHANGE;
115✔
219
  }
220
  return c;
463,120✔
221
}
222

223
uint8_t columnEncodeVal(const char* encode) {
461,485✔
224
  if (encode == NULL) return TSDB_COLVAL_ENCODE_NOCHANGE;
461,485!
225
  uint8_t e = TSDB_COLVAL_ENCODE_SIMPLE8B;
461,485✔
226
  if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_SIMPLE8B)) {
461,485✔
227
    e = TSDB_COLVAL_ENCODE_SIMPLE8B;
238,235✔
228
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_XOR)) {
223,250✔
229
    e = TSDB_COLVAL_ENCODE_XOR;
35,713✔
230
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_RLE)) {
187,537✔
231
    e = TSDB_COLVAL_ENCODE_RLE;
22,903✔
232
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_DELTAD)) {
164,634✔
233
    e = TSDB_COLVAL_ENCODE_DELTAD;
56,984✔
234
  } else if (0 == strcmp(encode, TSDB_COLUMN_ENCODE_DISABLED)) {
107,650✔
235
    e = TSDB_COLVAL_ENCODE_DISABLED;
107,506✔
236
  } else {
237
    e = TSDB_COLVAL_ENCODE_NOCHANGE;
144✔
238
  }
239
  return e;
461,485✔
240
}
241

242
const char* columnLevelStr(uint8_t type) {
9,889,375✔
243
  const char* level = NULL;
9,889,375✔
244
  switch (type) {
9,889,375!
245
    case TSDB_COLVAL_LEVEL_HIGH:
544✔
246
      level = TSDB_COLUMN_LEVEL_HIGH;
544✔
247
      break;
544✔
248
    case TSDB_COLVAL_LEVEL_MEDIUM:
9,888,313✔
249
      level = TSDB_COLUMN_LEVEL_MEDIUM;
9,888,313✔
250
      break;
9,888,313✔
251
    case TSDB_COLVAL_LEVEL_LOW:
534✔
252
      level = TSDB_COLUMN_LEVEL_LOW;
534✔
253
      break;
534✔
254
    default:
×
255
      level = TSDB_COLUMN_LEVEL_UNKNOWN;
×
256
      break;
×
257
  }
258
  return level;
9,889,375✔
259
}
260

261
bool checkColumnEncode(char encode[TSDB_CL_COMPRESS_OPTION_LEN]) {
2,251✔
262
  if (0 == strlen(encode)) return true;
2,251✔
263
  TAOS_UNUSED(strtolower(encode, encode));
2,164✔
264
  for (int i = 0; i < supportedEncodeNum; ++i) {
3,478✔
265
    if (0 == strcmp((const char*)encode, supportedEncode[i])) {
3,461✔
266
      return true;
2,146✔
267
    }
268
  }
269
  return false;
17✔
270
}
271
bool checkColumnEncodeOrSetDefault(uint8_t type, char encode[TSDB_CL_COMPRESS_OPTION_LEN]) {
461,411✔
272
  if (0 == strlen(encode)) {
461,411✔
273
    tstrncpy(encode, getDefaultEncodeStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
459,255✔
274
    return true;
459,252✔
275
  }
276
  return checkColumnEncode(encode) && validColEncode(type, columnEncodeVal(encode));
2,156✔
277
}
278
bool checkColumnCompress(char compress[TSDB_CL_COMPRESS_OPTION_LEN]) {
3,892✔
279
  if (0 == strlen(compress)) return true;
3,892✔
280
  TAOS_UNUSED(strtolower(compress, compress));
3,831✔
281
  for (int i = 0; i < supportedCompressNum; ++i) {
9,160✔
282
    if (0 == strcmp((const char*)compress, supportedCompress[i])) {
9,142✔
283
      return true;
3,812✔
284
    }
285
  }
286
  return false;
18✔
287
}
288
bool checkColumnCompressOrSetDefault(uint8_t type, char compress[TSDB_CL_COMPRESS_OPTION_LEN]) {
461,330✔
289
  if (0 == strlen(compress)) {
461,330✔
290
    tstrncpy(compress, getDefaultCompressStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
457,531✔
291
    return true;
457,529✔
292
  }
293

294
  return checkColumnCompress(compress) && validColCompress(type, columnCompressVal(compress));
3,799✔
295
}
296
bool checkColumnLevel(char level[TSDB_CL_COMPRESS_OPTION_LEN]) {
3,792✔
297
  if (0 == strlen(level)) return true;
3,792✔
298
  TAOS_UNUSED(strtolower(level, level));
3,766✔
299
  if (1 == strlen(level)) {
3,766✔
300
    if ('h' == level[0] || 'm' == level[0] || 'l' == level[0]) return true;
19✔
301
  } else {
302
    for (int i = 0; i < supportedLevelNum; ++i) {
6,834✔
303
      if (0 == strcmp((const char*)level, supportedLevel[i])) {
6,815✔
304
        return true;
3,728✔
305
      }
306
    }
307
  }
308
  return false;
21✔
309
}
310
bool checkColumnLevelOrSetDefault(uint8_t type, char level[TSDB_CL_COMPRESS_OPTION_LEN]) {
461,295✔
311
  if (0 == strlen(level)) {
461,295✔
312
    tstrncpy(level, getDefaultLevelStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
457,596✔
313
    return true;
457,591✔
314
  }
315
  return checkColumnLevel(level) && validColCompressLevel(type, columnLevelVal(level));
3,699!
316
}
317

318
void setColEncode(uint32_t* compress, uint8_t l1) {
467,821✔
319
  *compress &= 0x00FFFFFF;
467,821✔
320
  *compress |= (l1 << 24);
467,821✔
321
  return;
467,821✔
322
}
323
void setColCompress(uint32_t* compress, uint16_t l2) {
467,810✔
324
  *compress &= 0xFF0000FF;
467,810✔
325
  *compress |= (l2 << 8);
467,810✔
326
  return;
467,810✔
327
}
328
void setColLevel(uint32_t* compress, uint8_t level) {
467,808✔
329
  *compress &= 0xFFFFFF00;
467,808✔
330
  *compress |= level;
467,808✔
331
  return;
467,808✔
332
}
333

334
int32_t setColCompressByOption(uint8_t type, uint8_t encode, uint16_t compressType, uint8_t level, bool check,
227,529✔
335
                               uint32_t* compress) {
336
  if (compress == NULL) return TSDB_CODE_TSC_ENCODE_PARAM_ERROR;
227,529!
337
  if (check && !validColEncode(type, encode)) return TSDB_CODE_TSC_ENCODE_PARAM_ERROR;
227,529!
338
  setColEncode(compress, encode);
227,530✔
339

340
  if (compressType == TSDB_COLVAL_COMPRESS_DISABLED) {
227,531✔
341
    setColCompress(compress, compressType);
49✔
342
    setColLevel(compress, TSDB_COLVAL_LEVEL_DISABLED);
49✔
343
  } else {
344
    if (check && !validColCompress(type, compressType)) return TSDB_CODE_TSC_COMPRESS_PARAM_ERROR;
227,482✔
345
    setColCompress(compress, compressType);
227,481✔
346

347
    if (check && !validColCompressLevel(type, level)) return TSDB_CODE_TSC_COMPRESS_LEVEL_ERROR;
227,481!
348
    setColLevel(compress, level);
227,481✔
349
  }
350
  return TSDB_CODE_SUCCESS;
227,530✔
351
}
352

353
bool withExtSchema(uint8_t tableType) {
17,755,105✔
354
  return TSDB_SUPER_TABLE == tableType || TSDB_NORMAL_TABLE == tableType || TSDB_CHILD_TABLE == tableType;
17,755,105✔
355
}
356

357
bool hasRefCol(uint8_t tableType) {
37,556,007✔
358
  return TSDB_VIRTUAL_NORMAL_TABLE == tableType || TSDB_VIRTUAL_CHILD_TABLE == tableType;
37,556,007✔
359
}
360

361
int8_t validColCompressLevel(uint8_t type, uint8_t level) {
230,906✔
362
  if (level == TSDB_COLVAL_LEVEL_DISABLED) return 1;
230,906✔
363
  if (level < TSDB_COLVAL_LEVEL_NOCHANGE || level > TSDB_COLVAL_LEVEL_HIGH) {
230,904!
364
    return 0;
×
365
  }
366
  return 1;
230,904✔
367
}
368
int8_t validColCompress(uint8_t type, uint8_t l2) {
231,008✔
369
  if (l2 > TSDB_COLVAL_COMPRESS_XZ && l2 < TSDB_COLVAL_COMPRESS_DISABLED) {
231,008!
370
    return 0;
×
371
  }
372
  if (l2 == TSDB_COLVAL_COMPRESS_TSZ) {
231,008✔
373
    if (type == TSDB_DATA_TYPE_FLOAT || type == TSDB_DATA_TYPE_DOUBLE) {
22✔
374
      return 1;
3✔
375
    } else {
376
      return 0;
19✔
377
    }
378
  }
379
  return 1;
230,986✔
380
}
381

382
//
383
// | --------type----------|----- supported encode ----|
384
// |tinyint/smallint/int/bigint/utinyint/usmallinit/uint/ubiginint| simple8b |
385
// | timestamp/bigint/ubigint | delta-i  |
386
// | bool  |  bit-packing   |
387
// | flout/double | delta-d |
388
//
389
int8_t validColEncode(uint8_t type, uint8_t l1) {
229,369✔
390
  if (l1 == TSDB_COLVAL_ENCODE_NOCHANGE) {
229,369✔
391
    return 1;
32✔
392
  }
393
  if (l1 == TSDB_COLVAL_ENCODE_DISABLED) {
229,337✔
394
    return 1;
65,380✔
395
  }
396
  if (type == TSDB_DATA_TYPE_BOOL) {
163,957✔
397
    return TSDB_COLVAL_ENCODE_RLE == l1 ? 1 : 0;
9,424✔
398
  } else if (type >= TSDB_DATA_TYPE_TINYINT && type <= TSDB_DATA_TYPE_INT) {
154,533!
399
    return TSDB_COLVAL_ENCODE_SIMPLE8B == l1 ? 1 : 0;
71,339✔
400
  } else if (type == TSDB_DATA_TYPE_BIGINT) {
83,194✔
401
    return TSDB_COLVAL_ENCODE_SIMPLE8B == l1 || TSDB_COLVAL_ENCODE_XOR == l1 ? 1 : 0;
26,024✔
402
  } else if (type >= TSDB_DATA_TYPE_FLOAT && type <= TSDB_DATA_TYPE_DOUBLE) {
57,170!
403
    return TSDB_COLVAL_ENCODE_DELTAD == l1 ? 1 : 0;
28,252✔
404
  } else if ((type == TSDB_DATA_TYPE_VARCHAR || type == TSDB_DATA_TYPE_NCHAR) || type == TSDB_DATA_TYPE_JSON ||
28,918!
405
             type == TSDB_DATA_TYPE_VARBINARY || type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_GEOMETRY) {
28,918!
406
    return l1 == TSDB_COLVAL_ENCODE_DISABLED ? 1 : 0;
×
407
    // if (l1 >= TSDB_COLVAL_ENCODE_NOCHANGE || l1 <= TSDB_COLVAL_ENCODE_DELTAD) {
408
    //   return 1;
409
    // } else if (l1 == TSDB_COLVAL_ENCODE_DISABLED) {
410
    //   return 1;
411
    // } else {
412
    //   return 0;
413
    // }
414
  } else if (type == TSDB_DATA_TYPE_TIMESTAMP) {
28,919✔
415
    return TSDB_COLVAL_ENCODE_XOR == l1 ? 1 : 0;
25,120✔
416
  } else if (type >= TSDB_DATA_TYPE_UTINYINT && type <= TSDB_DATA_TYPE_UINT) {
3,799!
417
    return TSDB_COLVAL_ENCODE_SIMPLE8B == l1 ? 1 : 0;
2,774✔
418
  } else if (type == TSDB_DATA_TYPE_UBIGINT) {
1,025✔
419
    return TSDB_COLVAL_ENCODE_SIMPLE8B == l1 || TSDB_COLVAL_ENCODE_XOR == l1 ? 1 : 0;
965!
420
  } else if (type == TSDB_DATA_TYPE_GEOMETRY) {
60!
421
    return 1;
×
422
  } else if (type == TSDB_DATA_TYPE_DECIMAL64 || type == TSDB_DATA_TYPE_DECIMAL) {
60!
423
    return l1 == TSDB_COLVAL_ENCODE_DISABLED ? 1 : 0;
60✔
424
  }
425
  return 0;
×
426
}
427

428
uint32_t createDefaultColCmprByType(uint8_t type) {
23,434✔
429
  uint32_t ret = 0;
23,434✔
430
  uint8_t  encode = getDefaultEncode(type);
23,434✔
431
  uint8_t  compress = getDefaultCompress(type);
23,434✔
432
  uint8_t  lvl = getDefaultLevel(type);
23,434✔
433

434
  SET_COMPRESS(encode, compress, lvl, ret);
23,434✔
435
  return ret;
23,434✔
436
}
437
int32_t validColCmprByType(uint8_t type, uint32_t cmpr) {
26✔
438
  DEFINE_VAR(cmpr);
26✔
439
  if (!validColEncode(type, l1)) {
26!
440
    return TSDB_CODE_TSC_ENCODE_PARAM_ERROR;
×
441
  }
442
  if (!validColCompress(type, l2)) {
26✔
443
    return TSDB_CODE_TSC_COMPRESS_PARAM_ERROR;
1✔
444
  }
445

446
  if (!validColCompressLevel(type, lvl)) {
25!
447
    return TSDB_CODE_TSC_COMPRESS_LEVEL_ERROR;
×
448
  }
449
  return TSDB_CODE_SUCCESS;
25✔
450
}
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