tcommon.h 7.8 KB
Newer Older
H
Haojun Liao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * This program is free software: you can use, redistribute, and/or modify
 * it under the terms of the GNU Affero General Public License, version 3
 * or later ("AGPL"), as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

S
Shengliang Guan 已提交
16 17
#ifndef _TD_COMMON_DEF_H_
#define _TD_COMMON_DEF_H_
H
Haojun Liao 已提交
18

H
Haojun Liao 已提交
19
#include "taosdef.h"
H
Haojun Liao 已提交
20
#include "tarray.h"
L
Liu Jicong 已提交
21
#include "tmsg.h"
22
#include "tvariant.h"
S
Shengliang Guan 已提交
23 24 25 26 27

#ifdef __cplusplus
extern "C" {
#endif

L
Liu Jicong 已提交
28
// TODO remove it
L
Liu Jicong 已提交
29 30
enum {
  TMQ_CONF__RESET_OFFSET__NONE = -3,
L
Liu Jicong 已提交
31 32
  TMQ_CONF__RESET_OFFSET__EARLIEAST = -2,
  TMQ_CONF__RESET_OFFSET__LATEST = -1,
L
Liu Jicong 已提交
33
};
L
Liu Jicong 已提交
34

L
Liu Jicong 已提交
35 36 37 38 39 40 41 42
// clang-format off
#define IS_META_MSG(x) ( \
     x == TDMT_VND_CREATE_STB     \
  || x == TDMT_VND_ALTER_STB      \
  || x == TDMT_VND_DROP_STB       \
  || x == TDMT_VND_CREATE_TABLE   \
  || x == TDMT_VND_ALTER_TABLE    \
  || x == TDMT_VND_DROP_TABLE     \
wmmhello's avatar
wmmhello 已提交
43
  || x == TDMT_VND_DELETE         \
L
Liu Jicong 已提交
44 45 46
)
// clang-format on

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
typedef struct {
  TSKEY    ts;
  uint64_t groupId;
} SWinKey;

static inline int SWinKeyCmpr(const void* pKey1, int kLen1, const void* pKey2, int kLen2) {
  SWinKey* pWin1 = (SWinKey*)pKey1;
  SWinKey* pWin2 = (SWinKey*)pKey2;

  if (pWin1->groupId > pWin2->groupId) {
    return 1;
  } else if (pWin1->groupId < pWin2->groupId) {
    return -1;
  }

  if (pWin1->ts > pWin2->ts) {
    return 1;
  } else if (pWin1->ts < pWin2->ts) {
    return -1;
  }

  return 0;
}

L
Liu Jicong 已提交
71
enum {
L
Liu Jicong 已提交
72 73
  TMQ_MSG_TYPE__DUMMY = 0,
  TMQ_MSG_TYPE__POLL_RSP,
L
Liu Jicong 已提交
74
  TMQ_MSG_TYPE__POLL_META_RSP,
L
Liu Jicong 已提交
75
  TMQ_MSG_TYPE__EP_RSP,
L
Liu Jicong 已提交
76
  TMQ_MSG_TYPE__END_RSP,
L
Liu Jicong 已提交
77 78
};

L
Liu Jicong 已提交
79 80 81
enum {
  STREAM_INPUT__DATA_SUBMIT = 1,
  STREAM_INPUT__DATA_BLOCK,
82
  STREAM_INPUT__MERGED_SUBMIT,
L
Liu Jicong 已提交
83
  STREAM_INPUT__TQ_SCAN,
L
Liu Jicong 已提交
84
  STREAM_INPUT__DATA_RETRIEVE,
L
Liu Jicong 已提交
85
  STREAM_INPUT__GET_RES,
L
Liu Jicong 已提交
86
  STREAM_INPUT__CHECKPOINT,
L
Liu Jicong 已提交
87
  STREAM_INPUT__DESTROY,
L
Liu Jicong 已提交
88 89
};

5
54liuyao 已提交
90 91 92
typedef enum EStreamType {
  STREAM_NORMAL = 1,
  STREAM_INVERT,
5
54liuyao 已提交
93
  STREAM_CLEAR,
5
54liuyao 已提交
94
  STREAM_INVALID,
5
54liuyao 已提交
95
  STREAM_GET_ALL,
96 97
  STREAM_DELETE_RESULT,
  STREAM_DELETE_DATA,
L
Liu Jicong 已提交
98
  STREAM_RETRIEVE,
L
Liu Jicong 已提交
99 100
  STREAM_PULL_DATA,
  STREAM_PULL_OVER,
5
54liuyao 已提交
101 102
} EStreamType;

103
typedef struct {
wmmhello's avatar
wmmhello 已提交
104
  SArray*   pGroupList;
wmmhello's avatar
wmmhello 已提交
105
  SArray*   pTableList;
L
Liu Jicong 已提交
106
  SHashObj* map;  // speedup acquire the tableQueryInfo by table uid
107
  bool      needSortTableByGroupId;
D
dapan1121 已提交
108
  uint64_t  suid;
wmmhello's avatar
wmmhello 已提交
109
} STableListInfo;
110

H
Hongze Cheng 已提交
111
#pragma pack(push, 1)
112 113 114
typedef struct SColumnDataAgg {
  int16_t colId;
  int16_t numOfNull;
115 116 117
  int64_t sum;
  int64_t max;
  int64_t min;
118
} SColumnDataAgg;
H
Hongze Cheng 已提交
119
#pragma pack(pop)
120 121

typedef struct SDataBlockInfo {
L
fix  
Liu Jicong 已提交
122
  STimeWindow window;
123
  int32_t     rows;  // todo hide this attribute
L
fix  
Liu Jicong 已提交
124
  int32_t     rowSize;
125
  uint64_t    uid;      // the uid of table, from which current data block comes
126
  uint16_t    blockId;  // block id, generated by physical planner
127 128
  uint64_t    groupId;  // no need to serialize
  int16_t     hasVarCol;
129
  uint32_t    capacity;
L
Liu Jicong 已提交
130
  // TODO: optimize and remove following
131 132 133 134 135 136
  int64_t     version;    // used for stream, and need serialization
  int64_t     ts;         // used for stream, and need serialization
  int32_t     childId;    // used for stream, do not serialize
  EStreamType type;       // used for stream, do not serialize
  STimeWindow calWin;     // used for stream, do not serialize
  TSKEY       watermark;  // used for stream
137 138 139
} SDataBlockInfo;

typedef struct SSDataBlock {
140 141 142
  SColumnDataAgg** pBlockAgg;
  SArray*          pDataBlock;  // SArray<SColumnInfoData>
  SDataBlockInfo   info;
143 144
} SSDataBlock;

L
Liu Jicong 已提交
145 146 147 148 149 150 151
enum {
  FETCH_TYPE__DATA = 1,
  FETCH_TYPE__META,
  FETCH_TYPE__NONE,
};

typedef struct {
L
Liu Jicong 已提交
152 153
  int8_t       fetchType;
  STqOffsetVal offset;
L
Liu Jicong 已提交
154 155 156 157 158 159
  union {
    SSDataBlock data;
    void*       meta;
  };
} SFetchRet;

H
Haojun Liao 已提交
160
typedef struct SVarColAttr {
L
Liu Jicong 已提交
161
  int32_t* offset;    // start position for each entry in the list
H
Haojun Liao 已提交
162 163 164 165
  uint32_t length;    // used buffer size that contain the valid data
  uint32_t allocLen;  // allocated buffer size
} SVarColAttr;

166 167
// pBlockAgg->numOfNull == info.rows, all data are null
// pBlockAgg->numOfNull == 0, no data are null.
168
typedef struct SColumnInfoData {
169
  SColumnInfo info;     // column info
L
Liu Jicong 已提交
170 171
  bool        hasNull;  // if current column data has null value.
  char*       pData;    // the corresponding block data in memory
H
Haojun Liao 已提交
172
  union {
L
Liu Jicong 已提交
173
    char*       nullbitmap;  // bitmap, one bit for each item in the list
H
Haojun Liao 已提交
174 175
    SVarColAttr varmeta;
  };
176 177
} SColumnInfoData;

178
typedef struct SQueryTableDataCond {
H
more  
Hongze Cheng 已提交
179
  uint64_t     suid;
180 181
  int32_t      order;  // desc|asc order to iterate the data block
  int32_t      numOfCols;
H
more  
Hongze Cheng 已提交
182
  SColumnInfo* colList;
L
Liu Jicong 已提交
183
  int32_t      type;  // data block load type:
H
Haojun Liao 已提交
184 185 186
  STimeWindow  twindows;
  int64_t      startVersion;
  int64_t      endVersion;
187 188
} SQueryTableDataCond;

H
Haojun Liao 已提交
189 190
int32_t tEncodeDataBlock(void** buf, const SSDataBlock* pBlock);
void*   tDecodeDataBlock(const void* buf, SSDataBlock* pBlock);
H
Haojun Liao 已提交
191

L
Liu Jicong 已提交
192
int32_t tEncodeDataBlocks(void** buf, const SArray* blocks);
L
Liu Jicong 已提交
193
void*   tDecodeDataBlocks(const void* buf, SArray** blocks);
L
fix  
Liu Jicong 已提交
194
void    colDataDestroy(SColumnInfoData* pColData);
L
Liu Jicong 已提交
195

196 197
//======================================================================================================================
// the following structure shared by parser and executor
198
typedef struct SColumn {
H
Haojun Liao 已提交
199 200 201 202 203
  union {
    uint64_t uid;
    int64_t  dataBlockId;
  };

H
Haojun Liao 已提交
204 205
  int16_t colId;
  int16_t slotId;
H
Haojun Liao 已提交
206

H
Haojun Liao 已提交
207 208
  char    name[TSDB_COL_NAME_LEN];
  int8_t  flag;  // column type: normal column, tag, or user-input column (integer/float/string)
H
Haojun Liao 已提交
209 210 211 212
  int16_t type;
  int32_t bytes;
  uint8_t precision;
  uint8_t scale;
213 214
} SColumn;

H
Haojun Liao 已提交
215
typedef struct STableBlockDistInfo {
216
  uint32_t rowSize;
L
Liu Jicong 已提交
217 218
  uint16_t numOfFiles;
  uint32_t numOfTables;
219
  uint32_t numOfBlocks;
L
Liu Jicong 已提交
220 221 222 223
  uint64_t totalSize;
  uint64_t totalRows;
  int32_t  maxRows;
  int32_t  minRows;
224 225
  int32_t  defMinRows;
  int32_t  defMaxRows;
L
Liu Jicong 已提交
226
  int32_t  firstSeekTimeUs;
227
  uint32_t numOfInmemRows;
L
Liu Jicong 已提交
228
  uint32_t numOfSmallBlocks;
229
  int32_t  blockRowsHisto[20];
H
Haojun Liao 已提交
230
} STableBlockDistInfo;
231

232 233 234
int32_t tSerializeBlockDistInfo(void* buf, int32_t bufLen, const STableBlockDistInfo* pInfo);
int32_t tDeserializeBlockDistInfo(void* buf, int32_t bufLen, STableBlockDistInfo* pInfo);

G
Ganlin Zhao 已提交
235
enum {
H
Haojun Liao 已提交
236
  FUNC_PARAM_TYPE_VALUE = 0x1,
L
Liu Jicong 已提交
237
  FUNC_PARAM_TYPE_COLUMN = 0x2,
G
Ganlin Zhao 已提交
238 239
};

H
Haojun Liao 已提交
240 241
typedef struct SFunctParam {
  int32_t  type;
L
Liu Jicong 已提交
242
  SColumn* pCol;
H
Haojun Liao 已提交
243 244
  SVariant param;
} SFunctParam;
H
Haojun Liao 已提交
245

H
Haojun Liao 已提交
246
// the structure for sql function in select clause
H
Haojun Liao 已提交
247 248
typedef struct SResSchame {
  int8_t  type;
249
  int32_t slotId;
H
Haojun Liao 已提交
250 251 252 253 254 255
  int32_t bytes;
  int32_t precision;
  int32_t scale;
  char    name[TSDB_COL_NAME_LEN];
} SResSchema;

H
Haojun Liao 已提交
256
typedef struct SExprBasicInfo {
H
Haojun Liao 已提交
257
  SResSchema   resSchema;
H
Haojun Liao 已提交
258
  int16_t      numOfParams;  // argument value of each function
L
Liu Jicong 已提交
259
  SFunctParam* pParam;
H
Haojun Liao 已提交
260
} SExprBasicInfo;
261 262

typedef struct SExprInfo {
L
Liu Jicong 已提交
263 264
  struct SExprBasicInfo base;
  struct tExprNode*     pExpr;
265 266
} SExprInfo;

wmmhello's avatar
wmmhello 已提交
267
typedef struct {
H
more  
Hongze Cheng 已提交
268 269 270 271
  const char* key;
  int32_t     keyLen;
  uint8_t     type;
  union {
wmmhello's avatar
wmmhello 已提交
272
    const char* value;
wmmhello's avatar
wmmhello 已提交
273 274 275 276
    int64_t     i;
    uint64_t    u;
    double      d;
    float       f;
wmmhello's avatar
wmmhello 已提交
277
  };
H
more  
Hongze Cheng 已提交
278
  int32_t length;
wmmhello's avatar
wmmhello 已提交
279 280
} SSmlKv;

L
Liu Jicong 已提交
281
#define QUERY_ASC_FORWARD_STEP  1
282 283 284 285
#define QUERY_DESC_FORWARD_STEP -1

#define GET_FORWARD_DIRECTION_FACTOR(ord) (((ord) == TSDB_ORDER_ASC) ? QUERY_ASC_FORWARD_STEP : QUERY_DESC_FORWARD_STEP)

H
more  
Hongze Cheng 已提交
286
#define SORT_QSORT_T              0x1
287 288 289 290 291 292 293 294 295
#define SORT_SPILLED_MERGE_SORT_T 0x2
typedef struct SSortExecInfo {
  int32_t sortMethod;
  int32_t sortBuffer;
  int32_t loops;       // loop count
  int32_t writeBytes;  // write io bytes
  int32_t readBytes;   // read io bytes
} SSortExecInfo;

296 297 298 299 300 301 302 303 304
// stream special block column

#define START_TS_COLUMN_INDEX           0
#define END_TS_COLUMN_INDEX             1
#define UID_COLUMN_INDEX                2
#define GROUPID_COLUMN_INDEX            3
#define CALCULATE_START_TS_COLUMN_INDEX 4
#define CALCULATE_END_TS_COLUMN_INDEX   5

H
Haojun Liao 已提交
305 306 307 308
#ifdef __cplusplus
}
#endif

L
Liu Jicong 已提交
309
#endif /*_TD_COMMON_DEF_H_*/