Coverage Report

Created: 2026-10-17 07:12

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/tdengine/include/common/tcommon.h
Line
Count
Source
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
#ifndef _TD_COMMON_DEF_H_
17
#define _TD_COMMON_DEF_H_
18
19
#include "tarray.h"
20
#include "tmsg.h"
21
#include "tvariant.h"
22
23
#ifdef __cplusplus
24
extern "C" {
25
#endif
26
27
// clang-format off
28
#define IS_META_MSG(x) ( \
29
     x == TDMT_VND_CREATE_STB     \
30
  || x == TDMT_VND_ALTER_STB      \
31
  || x == TDMT_VND_DROP_STB       \
32
  || x == TDMT_VND_CREATE_TABLE   \
33
  || x == TDMT_VND_ALTER_TABLE    \
34
  || x == TDMT_VND_DROP_TABLE     \
35
  || x == TDMT_VND_DELETE         \
36
  || x == TDMT_VND_TXN_COMMIT     \
37
  || x == TDMT_VND_TXN_ROLLBACK   \
38
)
39
// clang-format on
40
41
typedef bool (*state_key_cmpr_fn)(void* pKey1, void* pKey2);
42
43
typedef struct STableKeyInfo {
44
  uint64_t uid;
45
  uint64_t groupId;
46
  uint64_t baseGId;
47
} STableKeyInfo;
48
49
typedef struct SWinKey {
50
  uint64_t groupId;
51
  TSKEY    ts;
52
  int32_t  numInGroup;
53
} SWinKey;
54
55
typedef struct SSessionKey {
56
  STimeWindow win;
57
  uint64_t    groupId;
58
} SSessionKey;
59
60
typedef int64_t COUNT_TYPE;
61
62
typedef struct SVersionRange {
63
  int64_t minVer;
64
  int64_t maxVer;
65
} SVersionRange;
66
67
0
static inline int winKeyCmprImpl(const void* pKey1, const void* pKey2) {
68
0
  SWinKey* pWin1 = (SWinKey*)pKey1;
69
0
  SWinKey* pWin2 = (SWinKey*)pKey2;
70
0
71
0
  if (pWin1->groupId > pWin2->groupId) {
72
0
    return 1;
73
0
  } else if (pWin1->groupId < pWin2->groupId) {
74
0
    return -1;
75
0
  }
76
0
77
0
  if (pWin1->ts > pWin2->ts) {
78
0
    return 1;
79
0
  } else if (pWin1->ts < pWin2->ts) {
80
0
    return -1;
81
0
  }
82
0
83
0
  return 0;
84
0
}
Unexecuted instantiation: sql-fuzzer.c:winKeyCmprImpl
Unexecuted instantiation: parser.c:winKeyCmprImpl
Unexecuted instantiation: parTranslater.c:winKeyCmprImpl
Unexecuted instantiation: parUtil.c:winKeyCmprImpl
Unexecuted instantiation: parAstParser.c:winKeyCmprImpl
Unexecuted instantiation: parAuthenticator.c:winKeyCmprImpl
Unexecuted instantiation: parCalcConst.c:winKeyCmprImpl
Unexecuted instantiation: parInsertSql.c:winKeyCmprImpl
Unexecuted instantiation: parInsertUtil.c:winKeyCmprImpl
Unexecuted instantiation: taos_lemon_sql.tab.c:winKeyCmprImpl
Unexecuted instantiation: parAstCreater.c:winKeyCmprImpl
Unexecuted instantiation: parInsertSml.c:winKeyCmprImpl
Unexecuted instantiation: planLogicCreater.c:winKeyCmprImpl
Unexecuted instantiation: planOptimizer.c:winKeyCmprImpl
Unexecuted instantiation: planPhysiCreater.c:winKeyCmprImpl
Unexecuted instantiation: planSpliter.c:winKeyCmprImpl
Unexecuted instantiation: planUtil.c:winKeyCmprImpl
Unexecuted instantiation: planValidator.c:winKeyCmprImpl
Unexecuted instantiation: catalog.c:winKeyCmprImpl
Unexecuted instantiation: ctgAsync.c:winKeyCmprImpl
Unexecuted instantiation: ctgCache.c:winKeyCmprImpl
Unexecuted instantiation: ctgDbg.c:winKeyCmprImpl
Unexecuted instantiation: ctgRemote.c:winKeyCmprImpl
Unexecuted instantiation: ctgRent.c:winKeyCmprImpl
Unexecuted instantiation: ctgUtil.c:winKeyCmprImpl
Unexecuted instantiation: extConnector.c:winKeyCmprImpl
Unexecuted instantiation: functionMgt.c:winKeyCmprImpl
Unexecuted instantiation: tudf.c:winKeyCmprImpl
Unexecuted instantiation: builtins.c:winKeyCmprImpl
Unexecuted instantiation: builtinsimpl.c:winKeyCmprImpl
Unexecuted instantiation: thistogram.c:winKeyCmprImpl
Unexecuted instantiation: tpercentile.c:winKeyCmprImpl
Unexecuted instantiation: tavgfunction.c:winKeyCmprImpl
Unexecuted instantiation: tminmax.c:winKeyCmprImpl
Unexecuted instantiation: tminmaxavx.c:winKeyCmprImpl
Unexecuted instantiation: filter.c:winKeyCmprImpl
Unexecuted instantiation: scalar.c:winKeyCmprImpl
Unexecuted instantiation: sclfunc.c:winKeyCmprImpl
Unexecuted instantiation: sclvector.c:winKeyCmprImpl
Unexecuted instantiation: nodesCloneFuncs.c:winKeyCmprImpl
Unexecuted instantiation: nodesCodeFuncs.c:winKeyCmprImpl
Unexecuted instantiation: nodesEqualFuncs.c:winKeyCmprImpl
Unexecuted instantiation: nodesMsgFuncs.c:winKeyCmprImpl
Unexecuted instantiation: nodesUtilFuncs.c:winKeyCmprImpl
Unexecuted instantiation: extTypeMap.c:winKeyCmprImpl
Unexecuted instantiation: geomFunc.c:winKeyCmprImpl
Unexecuted instantiation: tdigest.c:winKeyCmprImpl
Unexecuted instantiation: tlog.c:winKeyCmprImpl
Unexecuted instantiation: tdatablock.c:winKeyCmprImpl
Unexecuted instantiation: tdataformat.c:winKeyCmprImpl
Unexecuted instantiation: tmisce.c:winKeyCmprImpl
Unexecuted instantiation: tname.c:winKeyCmprImpl
Unexecuted instantiation: ttime.c:winKeyCmprImpl
Unexecuted instantiation: streamMsg.c:winKeyCmprImpl
85
86
0
static inline int winKeyCmpr(const void* pKey1, int kLen1, const void* pKey2, int kLen2) {
87
0
  return winKeyCmprImpl(pKey1, pKey2);
88
0
}
Unexecuted instantiation: sql-fuzzer.c:winKeyCmpr
Unexecuted instantiation: parser.c:winKeyCmpr
Unexecuted instantiation: parTranslater.c:winKeyCmpr
Unexecuted instantiation: parUtil.c:winKeyCmpr
Unexecuted instantiation: parAstParser.c:winKeyCmpr
Unexecuted instantiation: parAuthenticator.c:winKeyCmpr
Unexecuted instantiation: parCalcConst.c:winKeyCmpr
Unexecuted instantiation: parInsertSql.c:winKeyCmpr
Unexecuted instantiation: parInsertUtil.c:winKeyCmpr
Unexecuted instantiation: taos_lemon_sql.tab.c:winKeyCmpr
Unexecuted instantiation: parAstCreater.c:winKeyCmpr
Unexecuted instantiation: parInsertSml.c:winKeyCmpr
Unexecuted instantiation: planLogicCreater.c:winKeyCmpr
Unexecuted instantiation: planOptimizer.c:winKeyCmpr
Unexecuted instantiation: planPhysiCreater.c:winKeyCmpr
Unexecuted instantiation: planSpliter.c:winKeyCmpr
Unexecuted instantiation: planUtil.c:winKeyCmpr
Unexecuted instantiation: planValidator.c:winKeyCmpr
Unexecuted instantiation: catalog.c:winKeyCmpr
Unexecuted instantiation: ctgAsync.c:winKeyCmpr
Unexecuted instantiation: ctgCache.c:winKeyCmpr
Unexecuted instantiation: ctgDbg.c:winKeyCmpr
Unexecuted instantiation: ctgRemote.c:winKeyCmpr
Unexecuted instantiation: ctgRent.c:winKeyCmpr
Unexecuted instantiation: ctgUtil.c:winKeyCmpr
Unexecuted instantiation: extConnector.c:winKeyCmpr
Unexecuted instantiation: functionMgt.c:winKeyCmpr
Unexecuted instantiation: tudf.c:winKeyCmpr
Unexecuted instantiation: builtins.c:winKeyCmpr
Unexecuted instantiation: builtinsimpl.c:winKeyCmpr
Unexecuted instantiation: thistogram.c:winKeyCmpr
Unexecuted instantiation: tpercentile.c:winKeyCmpr
Unexecuted instantiation: tavgfunction.c:winKeyCmpr
Unexecuted instantiation: tminmax.c:winKeyCmpr
Unexecuted instantiation: tminmaxavx.c:winKeyCmpr
Unexecuted instantiation: filter.c:winKeyCmpr
Unexecuted instantiation: scalar.c:winKeyCmpr
Unexecuted instantiation: sclfunc.c:winKeyCmpr
Unexecuted instantiation: sclvector.c:winKeyCmpr
Unexecuted instantiation: nodesCloneFuncs.c:winKeyCmpr
Unexecuted instantiation: nodesCodeFuncs.c:winKeyCmpr
Unexecuted instantiation: nodesEqualFuncs.c:winKeyCmpr
Unexecuted instantiation: nodesMsgFuncs.c:winKeyCmpr
Unexecuted instantiation: nodesUtilFuncs.c:winKeyCmpr
Unexecuted instantiation: extTypeMap.c:winKeyCmpr
Unexecuted instantiation: geomFunc.c:winKeyCmpr
Unexecuted instantiation: tdigest.c:winKeyCmpr
Unexecuted instantiation: tlog.c:winKeyCmpr
Unexecuted instantiation: tdatablock.c:winKeyCmpr
Unexecuted instantiation: tdataformat.c:winKeyCmpr
Unexecuted instantiation: tmisce.c:winKeyCmpr
Unexecuted instantiation: tname.c:winKeyCmpr
Unexecuted instantiation: ttime.c:winKeyCmpr
Unexecuted instantiation: streamMsg.c:winKeyCmpr
89
90
typedef struct {
91
  uint64_t groupId;
92
  TSKEY    ts;
93
  int32_t  exprIdx;
94
} STupleKey;
95
96
0
static inline int STupleKeyCmpr(const void* pKey1, int kLen1, const void* pKey2, int kLen2) {
97
0
  STupleKey* pTuple1 = (STupleKey*)pKey1;
98
0
  STupleKey* pTuple2 = (STupleKey*)pKey2;
99
0
100
0
  if (pTuple1->groupId > pTuple2->groupId) {
101
0
    return 1;
102
0
  } else if (pTuple1->groupId < pTuple2->groupId) {
103
0
    return -1;
104
0
  }
105
0
106
0
  if (pTuple1->ts > pTuple2->ts) {
107
0
    return 1;
108
0
  } else if (pTuple1->ts < pTuple2->ts) {
109
0
    return -1;
110
0
  }
111
0
112
0
  if (pTuple1->exprIdx > pTuple2->exprIdx) {
113
0
    return 1;
114
0
  } else if (pTuple1->exprIdx < pTuple2->exprIdx) {
115
0
    return -1;
116
0
  }
117
0
118
0
  return 0;
119
0
}
Unexecuted instantiation: sql-fuzzer.c:STupleKeyCmpr
Unexecuted instantiation: parser.c:STupleKeyCmpr
Unexecuted instantiation: parTranslater.c:STupleKeyCmpr
Unexecuted instantiation: parUtil.c:STupleKeyCmpr
Unexecuted instantiation: parAstParser.c:STupleKeyCmpr
Unexecuted instantiation: parAuthenticator.c:STupleKeyCmpr
Unexecuted instantiation: parCalcConst.c:STupleKeyCmpr
Unexecuted instantiation: parInsertSql.c:STupleKeyCmpr
Unexecuted instantiation: parInsertUtil.c:STupleKeyCmpr
Unexecuted instantiation: taos_lemon_sql.tab.c:STupleKeyCmpr
Unexecuted instantiation: parAstCreater.c:STupleKeyCmpr
Unexecuted instantiation: parInsertSml.c:STupleKeyCmpr
Unexecuted instantiation: planLogicCreater.c:STupleKeyCmpr
Unexecuted instantiation: planOptimizer.c:STupleKeyCmpr
Unexecuted instantiation: planPhysiCreater.c:STupleKeyCmpr
Unexecuted instantiation: planSpliter.c:STupleKeyCmpr
Unexecuted instantiation: planUtil.c:STupleKeyCmpr
Unexecuted instantiation: planValidator.c:STupleKeyCmpr
Unexecuted instantiation: catalog.c:STupleKeyCmpr
Unexecuted instantiation: ctgAsync.c:STupleKeyCmpr
Unexecuted instantiation: ctgCache.c:STupleKeyCmpr
Unexecuted instantiation: ctgDbg.c:STupleKeyCmpr
Unexecuted instantiation: ctgRemote.c:STupleKeyCmpr
Unexecuted instantiation: ctgRent.c:STupleKeyCmpr
Unexecuted instantiation: ctgUtil.c:STupleKeyCmpr
Unexecuted instantiation: extConnector.c:STupleKeyCmpr
Unexecuted instantiation: functionMgt.c:STupleKeyCmpr
Unexecuted instantiation: tudf.c:STupleKeyCmpr
Unexecuted instantiation: builtins.c:STupleKeyCmpr
Unexecuted instantiation: builtinsimpl.c:STupleKeyCmpr
Unexecuted instantiation: thistogram.c:STupleKeyCmpr
Unexecuted instantiation: tpercentile.c:STupleKeyCmpr
Unexecuted instantiation: tavgfunction.c:STupleKeyCmpr
Unexecuted instantiation: tminmax.c:STupleKeyCmpr
Unexecuted instantiation: tminmaxavx.c:STupleKeyCmpr
Unexecuted instantiation: filter.c:STupleKeyCmpr
Unexecuted instantiation: scalar.c:STupleKeyCmpr
Unexecuted instantiation: sclfunc.c:STupleKeyCmpr
Unexecuted instantiation: sclvector.c:STupleKeyCmpr
Unexecuted instantiation: nodesCloneFuncs.c:STupleKeyCmpr
Unexecuted instantiation: nodesCodeFuncs.c:STupleKeyCmpr
Unexecuted instantiation: nodesEqualFuncs.c:STupleKeyCmpr
Unexecuted instantiation: nodesMsgFuncs.c:STupleKeyCmpr
Unexecuted instantiation: nodesUtilFuncs.c:STupleKeyCmpr
Unexecuted instantiation: extTypeMap.c:STupleKeyCmpr
Unexecuted instantiation: geomFunc.c:STupleKeyCmpr
Unexecuted instantiation: tdigest.c:STupleKeyCmpr
Unexecuted instantiation: tlog.c:STupleKeyCmpr
Unexecuted instantiation: tdatablock.c:STupleKeyCmpr
Unexecuted instantiation: tdataformat.c:STupleKeyCmpr
Unexecuted instantiation: tmisce.c:STupleKeyCmpr
Unexecuted instantiation: tname.c:STupleKeyCmpr
Unexecuted instantiation: ttime.c:STupleKeyCmpr
Unexecuted instantiation: streamMsg.c:STupleKeyCmpr
120
121
enum {
122
  TMQ_MSG_TYPE__POLL_DATA_RSP = 0,
123
  TMQ_MSG_TYPE__POLL_META_RSP,
124
  TMQ_MSG_TYPE__EP_RSP,
125
  TMQ_MSG_TYPE__POLL_DATA_META_RSP,
126
  TMQ_MSG_TYPE__WALINFO_RSP,
127
  TMQ_MSG_TYPE__POLL_BATCH_META_RSP,
128
  TMQ_MSG_TYPE__POLL_RAW_DATA_RSP,
129
};
130
131
static const char* const tmqMsgTypeStr[] = {
132
    "data", "meta", "ask ep", "meta data", "wal info", "batch meta", "raw data"
133
};
134
135
enum {
136
  STREAM_INPUT__DATA_SUBMIT = 1,
137
  STREAM_INPUT__DATA_BLOCK,
138
  STREAM_INPUT__MERGED_SUBMIT,
139
  STREAM_INPUT__RECALCULATE,
140
  STREAM_INPUT__DATA_RETRIEVE,
141
  STREAM_INPUT__GET_RES,
142
  STREAM_INPUT__CHECKPOINT,
143
  STREAM_INPUT__CHECKPOINT_TRIGGER,
144
  STREAM_INPUT__TRANS_STATE,
145
  STREAM_INPUT__REF_DATA_BLOCK,
146
  STREAM_INPUT__DESTROY,
147
};
148
149
#pragma pack(push, 1)
150
typedef struct SColumnDataAgg {
151
  int32_t colId;
152
  int16_t numOfNull;
153
  union {
154
    struct {
155
      int64_t sum;
156
      int64_t max;
157
      int64_t min;
158
    };
159
    struct {
160
      uint64_t decimal128Sum[2];
161
      uint64_t decimal128Max[2];
162
      uint64_t decimal128Min[2];
163
      uint8_t  overflow;
164
    };
165
  };
166
} SColumnDataAgg;
167
#pragma pack(pop)
168
169
0
#define DECIMAL_AGG_FLAG 0x80000000
170
171
#define COL_AGG_GET_SUM_PTR(pAggs, dataType) \
172
  (!IS_DECIMAL_TYPE(dataType) ? (void*)&pAggs->sum : (void*)pAggs->decimal128Sum)
173
174
#define COL_AGG_GET_MAX_PTR(pAggs, dataType) \
175
  (!IS_DECIMAL_TYPE(dataType) ? (void*)&pAggs->max : (void*)pAggs->decimal128Max)
176
177
#define COL_AGG_GET_MIN_PTR(pAggs, dataType) \
178
  (!IS_DECIMAL_TYPE(dataType) ? (void*)&pAggs->min : (void*)pAggs->decimal128Min)
179
180
typedef struct SBlockID {
181
  // The uid of table, from which current data block comes. And it is always 0, if current block is the
182
  // result of calculation.
183
  uint64_t uid;
184
185
  // Block id, acquired and assigned from executor, which created according to the hysical planner. Block id is used
186
  // to mark the stage of exec task.
187
  int64_t  blockId;
188
189
  // Generated by group/partition by [value|tags]. Created and assigned by table-scan operator, group-by operator,
190
  // and partition by operator.
191
  uint64_t groupId;
192
193
  // Base group id for stream group generated by trigger
194
  uint64_t baseGId;
195
} SBlockID;
196
197
typedef struct SPkInfo {
198
  int8_t  type;
199
  int32_t bytes;
200
  union {
201
    int64_t  val;
202
    uint8_t* pData;
203
  } skey;
204
  union {
205
    int64_t  val;
206
    uint8_t* pData;
207
  } ekey;
208
} SPkInfo;
209
210
typedef struct SDataBlockInfo {
211
  STimeWindow window;
212
  int32_t     rowSize;
213
  uint32_t    capacity;
214
  int64_t     rows;  // todo hide this attribute
215
  SBlockID    id;
216
  int16_t     hasVarCol;
217
  int16_t     dataLoad;  // denote if the data is loaded or not
218
  uint8_t     scanFlag;
219
  bool        blankFill;
220
  SValue      pks[2];
221
  SColumnDataAgg* pBlockAgg;  // borrowed block SMA for dynamic aggregate pruning; do not serialize or copy
222
223
  // TODO: optimize and remove following
224
  int64_t     version;    // used for stream, and need serialization
225
  int32_t     childId;    // used for stream, do not serialize
226
  STimeWindow calWin;     // used for stream, do not serialize
227
  TSKEY       watermark;  // used for stream
228
229
  char parTbName[TSDB_TABLE_NAME_LEN];  // used for stream partition
230
} SDataBlockInfo;
231
232
typedef struct SSDataBlock {
233
  SColumnDataAgg* pBlockAgg;
234
  SArray*         pDataBlock;  // SArray<SColumnInfoData>
235
  SDataBlockInfo  info;
236
} SSDataBlock;
237
238
typedef struct SVarColAttr {
239
  int32_t* offset;    // start position for each entry in the list
240
  uint32_t length;    // used buffer size that contain the valid data
241
  uint32_t allocLen;  // allocated buffer size
242
} SVarColAttr;
243
244
// pBlockAgg->numOfNull == info.rows, all data are null
245
// pBlockAgg->numOfNull == 0, no data are null.
246
typedef struct SColumnInfoData {
247
  char* pData;  // the corresponding block data in memory
248
  union {
249
    char*       nullbitmap;  // bitmap, one bit for each item in the list
250
    SVarColAttr varmeta;
251
  };
252
  SColumnInfo info;        // column info
253
  bool        hasNull;     // if current column data has null value.
254
  bool        reassigned;  // if current column data is reassigned.
255
} SColumnInfoData;
256
257
typedef struct SQueryTableDataCond {
258
  uint64_t     suid;
259
  int32_t      order;  // desc|asc order to iterate the data block
260
  int32_t      numOfCols;
261
  SColumnInfo* colList;
262
  int32_t*     pSlotList;  // the column output destation slot, and it may be null
263
  int32_t      type;       // data block load type:
264
  bool         skipRollup;
265
  STimeWindow  twindows;
266
  STimeWindow  extTwindows[2];
267
  int64_t      startVersion;
268
  int64_t      endVersion;
269
  bool         notLoadData;  // response the actual data, not only the rows in the attribute of info.row of ssdatablock
270
  bool         cacheSttStatis;
271
} SQueryTableDataCond;
272
273
int32_t tEncodeDataBlock(void** buf, const SSDataBlock* pBlock);
274
void*   tDecodeDataBlock(const void* buf, SSDataBlock* pBlock);
275
276
void colDataDestroy(SColumnInfoData* pColData);
277
278
//======================================================================================================================
279
// the following structure shared by parser and executor
280
typedef struct SColumn {
281
  union {
282
    uint64_t uid;
283
    int64_t  dataBlockId;
284
  };
285
286
  int16_t colId;
287
  int16_t slotId;
288
289
  char    name[TSDB_COL_NAME_LEN];
290
  int16_t colType;  // column type: normal column, tag, or window column
291
  int16_t type;
292
  int32_t bytes;
293
  uint8_t precision;
294
  uint8_t scale;
295
} SColumn;
296
297
typedef struct STableBlockDistInfo {
298
  uint32_t rowSize;
299
  uint16_t numOfFiles;
300
  uint32_t numOfTables;
301
  uint32_t numOfBlocks;
302
  uint64_t totalSize;
303
  uint64_t totalRows;
304
  int32_t  maxRows;
305
  int32_t  minRows;
306
  int32_t  defMinRows;
307
  int32_t  defMaxRows;
308
  int32_t  firstSeekTimeUs;
309
  uint32_t numOfInmemRows;
310
  uint32_t numOfSttRows;
311
  uint32_t numOfVgroups;
312
  int32_t  blockRowsHisto[20];
313
  int32_t  blockRowsHistoFixed[8];  // buckets: ≤64, ≤128, ≤256, ≤512, ≤1024, ≤2048, ≤4096, >4096
314
} STableBlockDistInfo;
315
316
int32_t tSerializeBlockDistInfo(void* buf, int32_t bufLen, const STableBlockDistInfo* pInfo);
317
int32_t tDeserializeBlockDistInfo(void* buf, int32_t bufLen, STableBlockDistInfo* pInfo);
318
319
typedef struct SDBBlockUsageInfo {
320
  uint64_t dataInDiskSize;
321
  uint64_t walInDiskSize;
322
  uint64_t rawDataSize;
323
} SDBBlockUsageInfo;
324
325
int32_t tSerializeBlockDbUsage(void* buf, int32_t bufLen, const SDBBlockUsageInfo* pInfo);
326
int32_t tDeserializeBlockDbUsage(void* buf, int32_t bufLen, SDBBlockUsageInfo* pInfo);
327
328
enum {
329
  FUNC_PARAM_TYPE_VALUE = 0x1,
330
  FUNC_PARAM_TYPE_COLUMN = 0x2,
331
};
332
333
typedef struct SFunctParam {
334
  int32_t  type;
335
  SColumn* pCol;
336
  SVariant param;
337
} SFunctParam;
338
339
// the structure for sql function in select clause
340
typedef struct SResSchame {
341
  int8_t  type;
342
  int32_t slotId;
343
  int32_t bytes;
344
  int32_t precision;
345
  int32_t scale;
346
  char    name[TSDB_COL_NAME_LEN];
347
} SResSchema;
348
349
typedef struct SAggSupporter  SAggSupporter;
350
typedef struct SExprSupp      SExprSupp;
351
typedef struct SGroupResInfo  SGroupResInfo;
352
typedef struct SResultRow     SResultRow;
353
typedef struct SResultRowInfo SResultRowInfo;
354
typedef struct SExecTaskInfo  SExecTaskInfo;
355
typedef struct SRollupCtx {
356
  void*           pTsdb;     // STsdb*
357
  void*           pTargets;  // SNodeList*
358
  void*           pBuf;
359
  SExprSupp*      exprSup;
360
  SAggSupporter*  aggSup;
361
  SResultRow*     resultRow;
362
  SResultRowInfo* resultRowInfo;
363
  SGroupResInfo*  pGroupResInfo;
364
  SExecTaskInfo*  pTaskInfo;
365
  SSDataBlock*    pInputBlock;  // input data block for rollup
366
  SSDataBlock*    pResBlock;    // result data block for rollup
367
  SArray*         pColValArr;   // used the generate the aggregate row
368
  int32_t         rowSize;
369
  int32_t         maxBufRows;    // max buffer rows for aggregation
370
  int64_t         winTotalRows;  // number of total rows for current window
371
  int64_t         winStartTs;    // start timestamp of current window
372
} SRollupCtx;
373
374
typedef struct {
375
  const char* key;
376
  size_t      keyLen;
377
  uint8_t     type;
378
  union {
379
    const char* value;
380
    int64_t     i;
381
    uint64_t    u;
382
    double      d;
383
    float       f;
384
  };
385
  size_t length;
386
  bool   keyEscaped;
387
  bool   valueEscaped;
388
} SSmlKv;
389
390
0
#define QUERY_ASC_FORWARD_STEP  1
391
0
#define QUERY_DESC_FORWARD_STEP -1
392
393
0
#define GET_FORWARD_DIRECTION_FACTOR(ord) (((ord) != TSDB_ORDER_DESC) ? QUERY_ASC_FORWARD_STEP : QUERY_DESC_FORWARD_STEP)
394
395
#define SORT_QSORT_T              0x1
396
#define SORT_SPILLED_MERGE_SORT_T 0x2
397
typedef struct SSortExecInfo {
398
  int32_t sortMethod;
399
  int32_t sortBuffer;
400
  int32_t loops;       // loop count
401
  int32_t writeBytes;  // write io bytes
402
  int32_t readBytes;   // read io bytes
403
} SSortExecInfo;
404
405
typedef struct SExchangeExplainInfo {
406
  int8_t   mode;          // 0: concurrent, 1: sequential
407
  int32_t  numSources;
408
  double   avgFetchTimes;
409
  uint64_t maxFetchTimes;
410
  double   avgFetchRows;
411
  uint64_t maxFetchRows;
412
  double   avgFetchCost;  // us
413
  int64_t  maxFetchCost;  // us
414
} SExchangeExplainInfo;
415
416
typedef struct SNonSortExecInfo {
417
  int32_t blkNums;
418
} SNonSortExecInfo;
419
420
typedef struct SFederatedScanExplainInfo {
421
  int64_t fetchedRows;
422
  int64_t fetchBlockCount;
423
  int64_t elapsedTimeUs;
424
} SFederatedScanExplainInfo;
425
426
typedef struct STUidTagInfo {
427
  char*    name;
428
  uint64_t uid;
429
  void*    pTagVal;
430
} STUidTagInfo;
431
432
// stream special block column
433
434
#define START_TS_COLUMN_INDEX           0
435
#define END_TS_COLUMN_INDEX             1
436
#define UID_COLUMN_INDEX                2
437
#define GROUPID_COLUMN_INDEX            3
438
#define CALCULATE_START_TS_COLUMN_INDEX 4
439
#define CALCULATE_END_TS_COLUMN_INDEX   5
440
#define TABLE_NAME_COLUMN_INDEX         6
441
#define PRIMARY_KEY_COLUMN_INDEX        7
442
443
//steam get result block column
444
#define DATA_TS_COLUMN_INDEX            0
445
#define DATA_VERSION_COLUMN_INDEX       1
446
447
// stream create table block column
448
#define UD_TABLE_NAME_COLUMN_INDEX 0
449
#define UD_GROUPID_COLUMN_INDEX    1
450
#define UD_TAG_COLUMN_INDEX        2
451
452
// stream notify event block column
453
#define NOTIFY_EVENT_STR_COLUMN_INDEX 0
454
455
int32_t taosGenCrashJsonMsg(int signum, char** pMsg, int64_t clusterId, int64_t startTime);
456
457
#define SHOW_VAR_PRIV_SYSTEM   0x01
458
#define SHOW_VAR_PRIV_SECURITY 0x02
459
#define SHOW_VAR_PRIV_AUDIT    0x04
460
#define SHOW_VAR_PRIV_DEBUG    0x08
461
#define SHOW_VAR_PRIV_ALL (SHOW_VAR_PRIV_SYSTEM | SHOW_VAR_PRIV_SECURITY | SHOW_VAR_PRIV_AUDIT | SHOW_VAR_PRIV_DEBUG)
462
463
int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol, char* likePattern, uint8_t showPrivMask);
464
465
0
#define TSMA_RES_STB_POSTFIX          "_tsma_res_stb_"
466
0
#define MD5_OUTPUT_LEN                32
467
0
#define TSMA_RES_STB_EXTRA_COLUMN_NUM 4  // 3 columns: _wstart, _wend, _wduration, 1 tag: tbname
468
469
0
static inline bool isTsmaResSTb(const char* stbName) {
470
0
  static bool showTsmaTables = true;
471
0
  if (showTsmaTables) return false;
472
0
  const char* pos = strstr(stbName, TSMA_RES_STB_POSTFIX);
473
0
  if (pos && strlen(stbName) == (pos - stbName) + strlen(TSMA_RES_STB_POSTFIX)) {
474
0
    return true;
475
0
  }
476
0
  return false;
477
0
}
Unexecuted instantiation: sql-fuzzer.c:isTsmaResSTb
Unexecuted instantiation: parser.c:isTsmaResSTb
Unexecuted instantiation: parTranslater.c:isTsmaResSTb
Unexecuted instantiation: parUtil.c:isTsmaResSTb
Unexecuted instantiation: parAstParser.c:isTsmaResSTb
Unexecuted instantiation: parAuthenticator.c:isTsmaResSTb
Unexecuted instantiation: parCalcConst.c:isTsmaResSTb
Unexecuted instantiation: parInsertSql.c:isTsmaResSTb
Unexecuted instantiation: parInsertUtil.c:isTsmaResSTb
Unexecuted instantiation: taos_lemon_sql.tab.c:isTsmaResSTb
Unexecuted instantiation: parAstCreater.c:isTsmaResSTb
Unexecuted instantiation: parInsertSml.c:isTsmaResSTb
Unexecuted instantiation: planLogicCreater.c:isTsmaResSTb
Unexecuted instantiation: planOptimizer.c:isTsmaResSTb
Unexecuted instantiation: planPhysiCreater.c:isTsmaResSTb
Unexecuted instantiation: planSpliter.c:isTsmaResSTb
Unexecuted instantiation: planUtil.c:isTsmaResSTb
Unexecuted instantiation: planValidator.c:isTsmaResSTb
Unexecuted instantiation: catalog.c:isTsmaResSTb
Unexecuted instantiation: ctgAsync.c:isTsmaResSTb
Unexecuted instantiation: ctgCache.c:isTsmaResSTb
Unexecuted instantiation: ctgDbg.c:isTsmaResSTb
Unexecuted instantiation: ctgRemote.c:isTsmaResSTb
Unexecuted instantiation: ctgRent.c:isTsmaResSTb
Unexecuted instantiation: ctgUtil.c:isTsmaResSTb
Unexecuted instantiation: extConnector.c:isTsmaResSTb
Unexecuted instantiation: functionMgt.c:isTsmaResSTb
Unexecuted instantiation: tudf.c:isTsmaResSTb
Unexecuted instantiation: builtins.c:isTsmaResSTb
Unexecuted instantiation: builtinsimpl.c:isTsmaResSTb
Unexecuted instantiation: thistogram.c:isTsmaResSTb
Unexecuted instantiation: tpercentile.c:isTsmaResSTb
Unexecuted instantiation: tavgfunction.c:isTsmaResSTb
Unexecuted instantiation: tminmax.c:isTsmaResSTb
Unexecuted instantiation: tminmaxavx.c:isTsmaResSTb
Unexecuted instantiation: filter.c:isTsmaResSTb
Unexecuted instantiation: scalar.c:isTsmaResSTb
Unexecuted instantiation: sclfunc.c:isTsmaResSTb
Unexecuted instantiation: sclvector.c:isTsmaResSTb
Unexecuted instantiation: nodesCloneFuncs.c:isTsmaResSTb
Unexecuted instantiation: nodesCodeFuncs.c:isTsmaResSTb
Unexecuted instantiation: nodesEqualFuncs.c:isTsmaResSTb
Unexecuted instantiation: nodesMsgFuncs.c:isTsmaResSTb
Unexecuted instantiation: nodesUtilFuncs.c:isTsmaResSTb
Unexecuted instantiation: extTypeMap.c:isTsmaResSTb
Unexecuted instantiation: geomFunc.c:isTsmaResSTb
Unexecuted instantiation: tdigest.c:isTsmaResSTb
Unexecuted instantiation: tlog.c:isTsmaResSTb
Unexecuted instantiation: tdatablock.c:isTsmaResSTb
Unexecuted instantiation: tdataformat.c:isTsmaResSTb
Unexecuted instantiation: tmisce.c:isTsmaResSTb
Unexecuted instantiation: tname.c:isTsmaResSTb
Unexecuted instantiation: ttime.c:isTsmaResSTb
Unexecuted instantiation: streamMsg.c:isTsmaResSTb
478
479
0
static inline STypeMod typeGetTypeModFromColInfo(const SColumnInfo* pCol) {
480
0
  return typeGetTypeMod(pCol->type, pCol->precision, pCol->scale, pCol->bytes);
481
0
}
Unexecuted instantiation: sql-fuzzer.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parser.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parTranslater.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parUtil.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parAstParser.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parAuthenticator.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parCalcConst.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parInsertSql.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parInsertUtil.c:typeGetTypeModFromColInfo
Unexecuted instantiation: taos_lemon_sql.tab.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parAstCreater.c:typeGetTypeModFromColInfo
Unexecuted instantiation: parInsertSml.c:typeGetTypeModFromColInfo
Unexecuted instantiation: planLogicCreater.c:typeGetTypeModFromColInfo
Unexecuted instantiation: planOptimizer.c:typeGetTypeModFromColInfo
Unexecuted instantiation: planPhysiCreater.c:typeGetTypeModFromColInfo
Unexecuted instantiation: planSpliter.c:typeGetTypeModFromColInfo
Unexecuted instantiation: planUtil.c:typeGetTypeModFromColInfo
Unexecuted instantiation: planValidator.c:typeGetTypeModFromColInfo
Unexecuted instantiation: catalog.c:typeGetTypeModFromColInfo
Unexecuted instantiation: ctgAsync.c:typeGetTypeModFromColInfo
Unexecuted instantiation: ctgCache.c:typeGetTypeModFromColInfo
Unexecuted instantiation: ctgDbg.c:typeGetTypeModFromColInfo
Unexecuted instantiation: ctgRemote.c:typeGetTypeModFromColInfo
Unexecuted instantiation: ctgRent.c:typeGetTypeModFromColInfo
Unexecuted instantiation: ctgUtil.c:typeGetTypeModFromColInfo
Unexecuted instantiation: extConnector.c:typeGetTypeModFromColInfo
Unexecuted instantiation: functionMgt.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tudf.c:typeGetTypeModFromColInfo
Unexecuted instantiation: builtins.c:typeGetTypeModFromColInfo
Unexecuted instantiation: builtinsimpl.c:typeGetTypeModFromColInfo
Unexecuted instantiation: thistogram.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tpercentile.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tavgfunction.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tminmax.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tminmaxavx.c:typeGetTypeModFromColInfo
Unexecuted instantiation: filter.c:typeGetTypeModFromColInfo
Unexecuted instantiation: scalar.c:typeGetTypeModFromColInfo
Unexecuted instantiation: sclfunc.c:typeGetTypeModFromColInfo
Unexecuted instantiation: sclvector.c:typeGetTypeModFromColInfo
Unexecuted instantiation: nodesCloneFuncs.c:typeGetTypeModFromColInfo
Unexecuted instantiation: nodesCodeFuncs.c:typeGetTypeModFromColInfo
Unexecuted instantiation: nodesEqualFuncs.c:typeGetTypeModFromColInfo
Unexecuted instantiation: nodesMsgFuncs.c:typeGetTypeModFromColInfo
Unexecuted instantiation: nodesUtilFuncs.c:typeGetTypeModFromColInfo
Unexecuted instantiation: extTypeMap.c:typeGetTypeModFromColInfo
Unexecuted instantiation: geomFunc.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tdigest.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tlog.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tdatablock.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tdataformat.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tmisce.c:typeGetTypeModFromColInfo
Unexecuted instantiation: tname.c:typeGetTypeModFromColInfo
Unexecuted instantiation: ttime.c:typeGetTypeModFromColInfo
Unexecuted instantiation: streamMsg.c:typeGetTypeModFromColInfo
482
483
0
static inline STypeMod typeGetTypeModFromCol(const SColumn* pCol) {
484
0
  return typeGetTypeMod(pCol->type, pCol->precision, pCol->scale, pCol->bytes);
485
0
}
Unexecuted instantiation: sql-fuzzer.c:typeGetTypeModFromCol
Unexecuted instantiation: parser.c:typeGetTypeModFromCol
Unexecuted instantiation: parTranslater.c:typeGetTypeModFromCol
Unexecuted instantiation: parUtil.c:typeGetTypeModFromCol
Unexecuted instantiation: parAstParser.c:typeGetTypeModFromCol
Unexecuted instantiation: parAuthenticator.c:typeGetTypeModFromCol
Unexecuted instantiation: parCalcConst.c:typeGetTypeModFromCol
Unexecuted instantiation: parInsertSql.c:typeGetTypeModFromCol
Unexecuted instantiation: parInsertUtil.c:typeGetTypeModFromCol
Unexecuted instantiation: taos_lemon_sql.tab.c:typeGetTypeModFromCol
Unexecuted instantiation: parAstCreater.c:typeGetTypeModFromCol
Unexecuted instantiation: parInsertSml.c:typeGetTypeModFromCol
Unexecuted instantiation: planLogicCreater.c:typeGetTypeModFromCol
Unexecuted instantiation: planOptimizer.c:typeGetTypeModFromCol
Unexecuted instantiation: planPhysiCreater.c:typeGetTypeModFromCol
Unexecuted instantiation: planSpliter.c:typeGetTypeModFromCol
Unexecuted instantiation: planUtil.c:typeGetTypeModFromCol
Unexecuted instantiation: planValidator.c:typeGetTypeModFromCol
Unexecuted instantiation: catalog.c:typeGetTypeModFromCol
Unexecuted instantiation: ctgAsync.c:typeGetTypeModFromCol
Unexecuted instantiation: ctgCache.c:typeGetTypeModFromCol
Unexecuted instantiation: ctgDbg.c:typeGetTypeModFromCol
Unexecuted instantiation: ctgRemote.c:typeGetTypeModFromCol
Unexecuted instantiation: ctgRent.c:typeGetTypeModFromCol
Unexecuted instantiation: ctgUtil.c:typeGetTypeModFromCol
Unexecuted instantiation: extConnector.c:typeGetTypeModFromCol
Unexecuted instantiation: functionMgt.c:typeGetTypeModFromCol
Unexecuted instantiation: tudf.c:typeGetTypeModFromCol
Unexecuted instantiation: builtins.c:typeGetTypeModFromCol
Unexecuted instantiation: builtinsimpl.c:typeGetTypeModFromCol
Unexecuted instantiation: thistogram.c:typeGetTypeModFromCol
Unexecuted instantiation: tpercentile.c:typeGetTypeModFromCol
Unexecuted instantiation: tavgfunction.c:typeGetTypeModFromCol
Unexecuted instantiation: tminmax.c:typeGetTypeModFromCol
Unexecuted instantiation: tminmaxavx.c:typeGetTypeModFromCol
Unexecuted instantiation: filter.c:typeGetTypeModFromCol
Unexecuted instantiation: scalar.c:typeGetTypeModFromCol
Unexecuted instantiation: sclfunc.c:typeGetTypeModFromCol
Unexecuted instantiation: sclvector.c:typeGetTypeModFromCol
Unexecuted instantiation: nodesCloneFuncs.c:typeGetTypeModFromCol
Unexecuted instantiation: nodesCodeFuncs.c:typeGetTypeModFromCol
Unexecuted instantiation: nodesEqualFuncs.c:typeGetTypeModFromCol
Unexecuted instantiation: nodesMsgFuncs.c:typeGetTypeModFromCol
Unexecuted instantiation: nodesUtilFuncs.c:typeGetTypeModFromCol
Unexecuted instantiation: extTypeMap.c:typeGetTypeModFromCol
Unexecuted instantiation: geomFunc.c:typeGetTypeModFromCol
Unexecuted instantiation: tdigest.c:typeGetTypeModFromCol
Unexecuted instantiation: tlog.c:typeGetTypeModFromCol
Unexecuted instantiation: tdatablock.c:typeGetTypeModFromCol
Unexecuted instantiation: tdataformat.c:typeGetTypeModFromCol
Unexecuted instantiation: tmisce.c:typeGetTypeModFromCol
Unexecuted instantiation: tname.c:typeGetTypeModFromCol
Unexecuted instantiation: ttime.c:typeGetTypeModFromCol
Unexecuted instantiation: streamMsg.c:typeGetTypeModFromCol
486
487
/**
488
  @brief Calculate the absolute difference between two int64_t values,
489
         and return the result as uint64_t.
490
  @note This function utilizes the rule of unsigned integer arithmetic (always
491
  mod calculation) to avoid the overflow of the difference calculation and
492
  absolute calculation.
493
  For example, if a = INT64_MIN(-2^63) and b = 1, the difference b - a is
494
  1 - (-2^63), which is bigger than INT64_MAX(2^63 - 1) and overflow.
495
  But if we transfer them to unsigned integer: (uint64_t)a = 2^63,
496
  (uint64_t)b = 1. The result is 1 - 2^63 which will be calculated as
497
  1 - 2^63 + 2^64 = 2^64 - 2^63 + 1 = 2^63 + 1, which is not overflow and
498
  correct.
499
*/
500
0
static inline uint64_t safe_abs_diff_i64(int64_t a, int64_t b) {
501
0
  uint64_t ua = (uint64_t)a;
502
0
  uint64_t ub = (uint64_t)b;
503
0
  return a > b ? ua - ub : ub - ua;
504
0
}
Unexecuted instantiation: sql-fuzzer.c:safe_abs_diff_i64
Unexecuted instantiation: parser.c:safe_abs_diff_i64
Unexecuted instantiation: parTranslater.c:safe_abs_diff_i64
Unexecuted instantiation: parUtil.c:safe_abs_diff_i64
Unexecuted instantiation: parAstParser.c:safe_abs_diff_i64
Unexecuted instantiation: parAuthenticator.c:safe_abs_diff_i64
Unexecuted instantiation: parCalcConst.c:safe_abs_diff_i64
Unexecuted instantiation: parInsertSql.c:safe_abs_diff_i64
Unexecuted instantiation: parInsertUtil.c:safe_abs_diff_i64
Unexecuted instantiation: taos_lemon_sql.tab.c:safe_abs_diff_i64
Unexecuted instantiation: parAstCreater.c:safe_abs_diff_i64
Unexecuted instantiation: parInsertSml.c:safe_abs_diff_i64
Unexecuted instantiation: planLogicCreater.c:safe_abs_diff_i64
Unexecuted instantiation: planOptimizer.c:safe_abs_diff_i64
Unexecuted instantiation: planPhysiCreater.c:safe_abs_diff_i64
Unexecuted instantiation: planSpliter.c:safe_abs_diff_i64
Unexecuted instantiation: planUtil.c:safe_abs_diff_i64
Unexecuted instantiation: planValidator.c:safe_abs_diff_i64
Unexecuted instantiation: catalog.c:safe_abs_diff_i64
Unexecuted instantiation: ctgAsync.c:safe_abs_diff_i64
Unexecuted instantiation: ctgCache.c:safe_abs_diff_i64
Unexecuted instantiation: ctgDbg.c:safe_abs_diff_i64
Unexecuted instantiation: ctgRemote.c:safe_abs_diff_i64
Unexecuted instantiation: ctgRent.c:safe_abs_diff_i64
Unexecuted instantiation: ctgUtil.c:safe_abs_diff_i64
Unexecuted instantiation: extConnector.c:safe_abs_diff_i64
Unexecuted instantiation: functionMgt.c:safe_abs_diff_i64
Unexecuted instantiation: tudf.c:safe_abs_diff_i64
Unexecuted instantiation: builtins.c:safe_abs_diff_i64
Unexecuted instantiation: builtinsimpl.c:safe_abs_diff_i64
Unexecuted instantiation: thistogram.c:safe_abs_diff_i64
Unexecuted instantiation: tpercentile.c:safe_abs_diff_i64
Unexecuted instantiation: tavgfunction.c:safe_abs_diff_i64
Unexecuted instantiation: tminmax.c:safe_abs_diff_i64
Unexecuted instantiation: tminmaxavx.c:safe_abs_diff_i64
Unexecuted instantiation: filter.c:safe_abs_diff_i64
Unexecuted instantiation: scalar.c:safe_abs_diff_i64
Unexecuted instantiation: sclfunc.c:safe_abs_diff_i64
Unexecuted instantiation: sclvector.c:safe_abs_diff_i64
Unexecuted instantiation: nodesCloneFuncs.c:safe_abs_diff_i64
Unexecuted instantiation: nodesCodeFuncs.c:safe_abs_diff_i64
Unexecuted instantiation: nodesEqualFuncs.c:safe_abs_diff_i64
Unexecuted instantiation: nodesMsgFuncs.c:safe_abs_diff_i64
Unexecuted instantiation: nodesUtilFuncs.c:safe_abs_diff_i64
Unexecuted instantiation: extTypeMap.c:safe_abs_diff_i64
Unexecuted instantiation: geomFunc.c:safe_abs_diff_i64
Unexecuted instantiation: tdigest.c:safe_abs_diff_i64
Unexecuted instantiation: tlog.c:safe_abs_diff_i64
Unexecuted instantiation: tdatablock.c:safe_abs_diff_i64
Unexecuted instantiation: tdataformat.c:safe_abs_diff_i64
Unexecuted instantiation: tmisce.c:safe_abs_diff_i64
Unexecuted instantiation: tname.c:safe_abs_diff_i64
Unexecuted instantiation: ttime.c:safe_abs_diff_i64
Unexecuted instantiation: streamMsg.c:safe_abs_diff_i64
505
506
#ifdef __cplusplus
507
}
508
#endif
509
510
#endif /*_TD_COMMON_DEF_H_*/