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

taosdata / TDengine / #3534

21 Nov 2024 07:36AM UTC coverage: 60.825% (+2.0%) from 58.848%
#3534

push

travis-ci

web-flow
Merge pull request #28810 from taosdata/ehn/add-sync-heartbeat-sent-time-to-log

ehn:add-sync-heartbeat-sent-time-to-log

120023 of 252376 branches covered (47.56%)

Branch coverage included in aggregate %.

43 of 47 new or added lines in 3 files covered. (91.49%)

2254 existing lines in 162 files now uncovered.

200876 of 275203 relevant lines covered (72.99%)

16110754.39 hits per line

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

59.54
/source/common/src/ttypes.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 "ttypes.h"
18
#include "tcompression.h"
19

20
const int32_t TYPE_BYTES[21] = {
21
    -1,                      // TSDB_DATA_TYPE_NULL
22
    CHAR_BYTES,              // TSDB_DATA_TYPE_BOOL
23
    CHAR_BYTES,              // TSDB_DATA_TYPE_TINYINT
24
    SHORT_BYTES,             // TSDB_DATA_TYPE_SMALLINT
25
    INT_BYTES,               // TSDB_DATA_TYPE_INT
26
    sizeof(int64_t),         // TSDB_DATA_TYPE_BIGINT
27
    FLOAT_BYTES,             // TSDB_DATA_TYPE_FLOAT
28
    DOUBLE_BYTES,            // TSDB_DATA_TYPE_DOUBLE
29
    sizeof(VarDataOffsetT),  // TSDB_DATA_TYPE_BINARY
30
    sizeof(TSKEY),           // TSDB_DATA_TYPE_TIMESTAMP
31
    sizeof(VarDataOffsetT),  // TSDB_DATA_TYPE_NCHAR
32
    CHAR_BYTES,              // TSDB_DATA_TYPE_UTINYINT
33
    SHORT_BYTES,             // TSDB_DATA_TYPE_USMALLINT
34
    INT_BYTES,               // TSDB_DATA_TYPE_UINT
35
    sizeof(uint64_t),        // TSDB_DATA_TYPE_UBIGINT
36
    TSDB_MAX_JSON_TAG_LEN,   // TSDB_DATA_TYPE_JSON
37
    sizeof(VarDataOffsetT),  // TSDB_DATA_TYPE_VARBINARY
38
    TSDB_MAX_TAGS_LEN,       // TSDB_DATA_TYPE_DECIMAL: placeholder, not implemented
39
    TSDB_MAX_TAGS_LEN,       // TSDB_DATA_TYPE_BLOB: placeholder, not implemented
40
    TSDB_MAX_TAGS_LEN,       // TSDB_DATA_TYPE_MEDIUMBLOB: placeholder, not implemented
41
    sizeof(VarDataOffsetT),  // TSDB_DATA_TYPE_GEOMETRY
42
};
43

44
tDataTypeDescriptor tDataTypes[TSDB_DATA_TYPE_MAX] = {
45
    {TSDB_DATA_TYPE_NULL, 6, 1, "NOTYPE", 0, 0, NULL, NULL},
46
    {TSDB_DATA_TYPE_BOOL, 4, CHAR_BYTES, "BOOL", false, true, tsCompressBool, tsDecompressBool},
47
    {TSDB_DATA_TYPE_TINYINT, 7, CHAR_BYTES, "TINYINT", INT8_MIN, INT8_MAX, tsCompressTinyint, tsDecompressTinyint},
48
    {TSDB_DATA_TYPE_SMALLINT, 8, SHORT_BYTES, "SMALLINT", INT16_MIN, INT16_MAX, tsCompressSmallint,
49
     tsDecompressSmallint},
50
    {TSDB_DATA_TYPE_INT, 3, INT_BYTES, "INT", INT32_MIN, INT32_MAX, tsCompressInt, tsDecompressInt},
51
    {TSDB_DATA_TYPE_BIGINT, 6, LONG_BYTES, "BIGINT", INT64_MIN, INT64_MAX, tsCompressBigint, tsDecompressBigint},
52
    {TSDB_DATA_TYPE_FLOAT, 5, FLOAT_BYTES, "FLOAT", 0, 0, tsCompressFloat, tsDecompressFloat},
53
    {TSDB_DATA_TYPE_DOUBLE, 6, DOUBLE_BYTES, "DOUBLE", 0, 0, tsCompressDouble, tsDecompressDouble},
54
    {TSDB_DATA_TYPE_VARCHAR, 6, 1, "VARCHAR", 0, 0, tsCompressString, tsDecompressString},
55
    {TSDB_DATA_TYPE_TIMESTAMP, 9, LONG_BYTES, "TIMESTAMP", INT64_MIN, INT64_MAX, tsCompressTimestamp,
56
     tsDecompressTimestamp},
57
    {TSDB_DATA_TYPE_NCHAR, 5, 1, "NCHAR", 0, 0, tsCompressString, tsDecompressString},
58
    {TSDB_DATA_TYPE_UTINYINT, 16, CHAR_BYTES, "TINYINT UNSIGNED", 0, UINT8_MAX, tsCompressTinyint, tsDecompressTinyint},
59
    {TSDB_DATA_TYPE_USMALLINT, 17, SHORT_BYTES, "SMALLINT UNSIGNED", 0, UINT16_MAX, tsCompressSmallint,
60
     tsDecompressSmallint},
61
    {TSDB_DATA_TYPE_UINT, 12, INT_BYTES, "INT UNSIGNED", 0, UINT32_MAX, tsCompressInt, tsDecompressInt},
62
    {TSDB_DATA_TYPE_UBIGINT, 15, LONG_BYTES, "BIGINT UNSIGNED", 0, UINT64_MAX, tsCompressBigint, tsDecompressBigint},
63
    {TSDB_DATA_TYPE_JSON, 4, TSDB_MAX_JSON_TAG_LEN, "JSON", 0, 0, tsCompressString, tsDecompressString},
64
    {TSDB_DATA_TYPE_VARBINARY, 9, 1, "VARBINARY", 0, 0, tsCompressString,
65
     tsDecompressString},                                                // placeholder, not implemented
66
    {TSDB_DATA_TYPE_DECIMAL, 7, 1, "DECIMAL", 0, 0, NULL, NULL},         // placeholder, not implemented
67
    {TSDB_DATA_TYPE_BLOB, 4, 1, "BLOB", 0, 0, NULL, NULL},               // placeholder, not implemented
68
    {TSDB_DATA_TYPE_MEDIUMBLOB, 10, 1, "MEDIUMBLOB", 0, 0, NULL, NULL},  // placeholder, not implemented
69
    {TSDB_DATA_TYPE_GEOMETRY, 8, 1, "GEOMETRY", 0, 0, tsCompressString, tsDecompressString},
70
};
71

72
tDataTypeCompress tDataCompress[TSDB_DATA_TYPE_MAX] = {
73
    {TSDB_DATA_TYPE_NULL, 6, 1, "NOTYPE", 0, 0, NULL, NULL},
74
    {TSDB_DATA_TYPE_BOOL, 4, CHAR_BYTES, "BOOL", false, true, tsCompressBool2, tsDecompressBool2},
75
    {TSDB_DATA_TYPE_TINYINT, 7, CHAR_BYTES, "TINYINT", INT8_MIN, INT8_MAX, tsCompressTinyint2, tsDecompressTinyint2},
76
    {TSDB_DATA_TYPE_SMALLINT, 8, SHORT_BYTES, "SMALLINT", INT16_MIN, INT16_MAX, tsCompressSmallint2,
77
     tsDecompressSmallint2},
78
    {TSDB_DATA_TYPE_INT, 3, INT_BYTES, "INT", INT32_MIN, INT32_MAX, tsCompressInt2, tsDecompressInt2},
79
    {TSDB_DATA_TYPE_BIGINT, 6, LONG_BYTES, "BIGINT", INT64_MIN, INT64_MAX, tsCompressBigint2, tsDecompressBigint2},
80
    {TSDB_DATA_TYPE_FLOAT, 5, FLOAT_BYTES, "FLOAT", 0, 0, tsCompressFloat2, tsDecompressFloat2},
81
    {TSDB_DATA_TYPE_DOUBLE, 6, DOUBLE_BYTES, "DOUBLE", 0, 0, tsCompressDouble2, tsDecompressDouble2},
82
    {TSDB_DATA_TYPE_VARCHAR, 6, 1, "VARCHAR", 0, 0, tsCompressString2, tsDecompressString2},
83
    {TSDB_DATA_TYPE_TIMESTAMP, 9, LONG_BYTES, "TIMESTAMP", INT64_MIN, INT64_MAX, tsCompressTimestamp2,
84
     tsDecompressTimestamp2},
85
    {TSDB_DATA_TYPE_NCHAR, 5, 1, "NCHAR", 0, 0, tsCompressString2, tsDecompressString2},
86
    {TSDB_DATA_TYPE_UTINYINT, 16, CHAR_BYTES, "TINYINT UNSIGNED", 0, UINT8_MAX, tsCompressTinyint2,
87
     tsDecompressTinyint2},
88
    {TSDB_DATA_TYPE_USMALLINT, 17, SHORT_BYTES, "SMALLINT UNSIGNED", 0, UINT16_MAX, tsCompressSmallint2,
89
     tsDecompressSmallint2},
90
    {TSDB_DATA_TYPE_UINT, 12, INT_BYTES, "INT UNSIGNED", 0, UINT32_MAX, tsCompressInt2, tsDecompressInt2},
91
    {TSDB_DATA_TYPE_UBIGINT, 15, LONG_BYTES, "BIGINT UNSIGNED", 0, UINT64_MAX, tsCompressBigint2, tsDecompressBigint2},
92
    {TSDB_DATA_TYPE_JSON, 4, TSDB_MAX_JSON_TAG_LEN, "JSON", 0, 0, tsCompressString2, tsDecompressString2},
93
    {TSDB_DATA_TYPE_VARBINARY, 9, 1, "VARBINARY", 0, 0, tsCompressString2,
94
     tsDecompressString2},                                               // placeholder, not implemented
95
    {TSDB_DATA_TYPE_DECIMAL, 7, 1, "DECIMAL", 0, 0, NULL, NULL},         // placeholder, not implemented
96
    {TSDB_DATA_TYPE_BLOB, 4, 1, "BLOB", 0, 0, NULL, NULL},               // placeholder, not implemented
97
    {TSDB_DATA_TYPE_MEDIUMBLOB, 10, 1, "MEDIUMBLOB", 0, 0, NULL, NULL},  // placeholder, not implemented
98
    {TSDB_DATA_TYPE_GEOMETRY, 8, 1, "GEOMETRY", 0, 0, tsCompressString2, tsDecompressString2},
99

100
};
101

102
static float  floatMin = -FLT_MAX, floatMax = FLT_MAX;
103
static double doubleMin = -DBL_MAX, doubleMax = DBL_MAX;
104

105
FORCE_INLINE void *getDataMin(int32_t type, void *value) {
3,989,739✔
106
  switch (type) {
3,989,739✔
107
    case TSDB_DATA_TYPE_FLOAT:
16,282✔
108
      *(float *)value = floatMin;
16,282✔
109
      break;
16,282✔
110
    case TSDB_DATA_TYPE_DOUBLE:
996,784✔
111
      *(double *)value = doubleMin;
996,784✔
112
      break;
996,784✔
113
    default:
2,976,673✔
114
      *(int64_t *)value = tDataTypes[type].minValue;
2,976,673✔
115
      break;
2,976,673✔
116
  }
117

118
  return value;
3,989,739✔
119
}
120

121
FORCE_INLINE void *getDataMax(int32_t type, void *value) {
4,315,079✔
122
  switch (type) {
4,315,079✔
123
    case TSDB_DATA_TYPE_FLOAT:
17,170✔
124
      *(float *)value = floatMax;
17,170✔
125
      break;
17,170✔
126
    case TSDB_DATA_TYPE_DOUBLE:
951,774✔
127
      *(double *)value = doubleMax;
951,774✔
128
      break;
951,774✔
129
    default:
3,346,135✔
130
      *(int64_t *)value = tDataTypes[type].maxValue;
3,346,135✔
131
      break;
3,346,135✔
132
  }
133

134
  return value;
4,315,079✔
135
}
136

137
bool isValidDataType(int32_t type) { return type >= TSDB_DATA_TYPE_NULL && type < TSDB_DATA_TYPE_MAX; }
1,369,130!
138

139
#define POINTER_SHIFT(p, b) ((void *)((char *)(p) + (b)))
140

141
void assignVal(char *val, const char *src, int32_t len, int32_t type) {
33,197,160✔
142
  switch (type) {
33,197,160!
143
    case TSDB_DATA_TYPE_BOOL:
2,588,255✔
144
    case TSDB_DATA_TYPE_TINYINT:
145
    case TSDB_DATA_TYPE_UTINYINT:
146
      *((int8_t *)val) = GET_INT8_VAL(src);
2,588,255✔
147
      break;
2,588,255✔
148
    case TSDB_DATA_TYPE_SMALLINT:
376,956✔
149
    case TSDB_DATA_TYPE_USMALLINT:
150
      *((int16_t *)val) = GET_INT16_VAL(src);
376,956✔
151
      break;
376,956✔
152
    case TSDB_DATA_TYPE_INT:
1,753,623✔
153
    case TSDB_DATA_TYPE_UINT:
154
      *((int32_t *)val) = GET_INT32_VAL(src);
1,753,623✔
155
      break;
1,753,623✔
156

157
    case TSDB_DATA_TYPE_FLOAT:
27,861✔
158
      SET_FLOAT_VAL(val, GET_FLOAT_VAL(src));
27,861✔
159
      break;
27,861✔
160
    case TSDB_DATA_TYPE_DOUBLE:
461,046✔
161
      SET_DOUBLE_VAL(val, GET_DOUBLE_VAL(src));
461,046✔
162
      break;
461,046✔
163
    case TSDB_DATA_TYPE_BIGINT:
802,920✔
164
    case TSDB_DATA_TYPE_UBIGINT:
165
    case TSDB_DATA_TYPE_TIMESTAMP:
166
      *((int64_t *)val) = GET_INT64_VAL(src);
802,920✔
167
      break;
802,920✔
168
    case TSDB_DATA_TYPE_BINARY:
26,890,901✔
169
    case TSDB_DATA_TYPE_VARBINARY:
170
    case TSDB_DATA_TYPE_GEOMETRY:
171
      varDataCopy(val, src);
26,890,901✔
172
      break;
26,890,901✔
173
    case TSDB_DATA_TYPE_NCHAR:
299,213✔
174
      varDataCopy(val, src);
299,213✔
175
      break;
299,213✔
UNCOV
176
    default: {
×
UNCOV
177
      if (len > 0) {
×
178
        (void)memcpy(val, src, len);
×
179
      }
180

UNCOV
181
      break;
×
182
    }
183
  }
184
}
33,197,160✔
185

186
int32_t operateVal(void *dst, void *s1, void *s2, int32_t optr, int32_t type) {
70✔
187
  if (optr == OP_TYPE_ADD) {
70!
188
    switch (type) {
70!
189
      case TSDB_DATA_TYPE_TINYINT:
×
190
        *((int8_t *)dst) = GET_INT8_VAL(s1) + GET_INT8_VAL(s2);
×
191
        break;
×
192
      case TSDB_DATA_TYPE_UTINYINT:
×
193
        *((uint8_t *)dst) = GET_UINT8_VAL(s1) + GET_UINT8_VAL(s2);
×
194
        break;
×
195
      case TSDB_DATA_TYPE_SMALLINT:
×
196
        *((int16_t *)dst) = GET_INT16_VAL(s1) + GET_INT16_VAL(s2);
×
197
        break;
×
198
      case TSDB_DATA_TYPE_USMALLINT:
×
199
        *((uint16_t *)dst) = GET_UINT16_VAL(s1) + GET_UINT16_VAL(s2);
×
200
        break;
×
201
      case TSDB_DATA_TYPE_INT:
×
202
        *((int32_t *)dst) = GET_INT32_VAL(s1) + GET_INT32_VAL(s2);
×
203
        break;
×
204
      case TSDB_DATA_TYPE_UINT:
×
205
        *((uint32_t *)dst) = GET_UINT32_VAL(s1) + GET_UINT32_VAL(s2);
×
206
        break;
×
207
      case TSDB_DATA_TYPE_BIGINT:
×
208
        *((int64_t *)dst) = GET_INT64_VAL(s1) + GET_INT64_VAL(s2);
×
209
        break;
×
210
      case TSDB_DATA_TYPE_UBIGINT:
×
211
        *((uint64_t *)dst) = GET_UINT64_VAL(s1) + GET_UINT64_VAL(s2);
×
212
        break;
×
213
      case TSDB_DATA_TYPE_TIMESTAMP:
70✔
214
        *((int64_t *)dst) = GET_INT64_VAL(s1) + GET_INT64_VAL(s2);
70✔
215
        break;
70✔
216
      case TSDB_DATA_TYPE_FLOAT:
×
217
        SET_FLOAT_VAL(dst, GET_FLOAT_VAL(s1) + GET_FLOAT_VAL(s2));
×
218
        break;
×
219
      case TSDB_DATA_TYPE_DOUBLE:
×
220
        SET_DOUBLE_VAL(dst, GET_DOUBLE_VAL(s1) + GET_DOUBLE_VAL(s2));
×
221
        break;
×
222
      default: {
×
223
        return -1;
×
224
      }
225
    }
226
  } else {
227
    return -1;
×
228
  }
229

230
  return 0;
70✔
231
}
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