tcommon.h 6.2 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 29 30 31 32
enum {
  TMQ_CONF__RESET_OFFSET__LATEST = -1,
  TMQ_CONF__RESET_OFFSET__EARLIEAST = -2,
  TMQ_CONF__RESET_OFFSET__NONE = -3,
};
L
Liu Jicong 已提交
33

L
Liu Jicong 已提交
34
enum {
L
Liu Jicong 已提交
35 36
  TMQ_MSG_TYPE__DUMMY = 0,
  TMQ_MSG_TYPE__POLL_RSP,
L
Liu Jicong 已提交
37 38 39
  TMQ_MSG_TYPE__EP_RSP,
};

L
fix  
Liu Jicong 已提交
40 41 42 43 44 45 46 47
enum {
  STREAM_TRIGGER__AT_ONCE = 1,
  STREAM_TRIGGER__WINDOW_CLOSE,
  STREAM_TRIGGER__BY_COUNT,
  STREAM_TRIGGER__BY_BATCH_COUNT,
  STREAM_TRIGGER__BY_EVENT_TIME,
};

5
54liuyao 已提交
48 49 50
typedef enum EStreamType {
  STREAM_NORMAL = 1,
  STREAM_INVERT,
5
54liuyao 已提交
51
  STREAM_REPROCESS,
5
54liuyao 已提交
52 53 54
  STREAM_INVALID,
} EStreamType;

55
typedef struct {
wmmhello's avatar
wmmhello 已提交
56
  SArray*   pTableList;
L
Liu Jicong 已提交
57
  SHashObj* map;  // speedup acquire the tableQueryInfo by table uid
wmmhello's avatar
wmmhello 已提交
58
} STableListInfo;
59

60 61 62 63 64
typedef struct SColumnDataAgg {
  int16_t colId;
  int16_t maxIndex;
  int16_t minIndex;
  int16_t numOfNull;
65 66 67
  int64_t sum;
  int64_t max;
  int64_t min;
68 69 70
} SColumnDataAgg;

typedef struct SDataBlockInfo {
L
fix  
Liu Jicong 已提交
71 72 73
  STimeWindow window;
  int32_t     rows;
  int32_t     rowSize;
74 75 76 77 78
  int64_t     uid;      // the uid of table, from which current data block comes
  int64_t     blockId;  // block id, generated by physical planner
  uint64_t    groupId;  // no need to serialize
  int16_t     numOfCols;
  int16_t     hasVarCol;
79
  int32_t     capacity;
5
54liuyao 已提交
80
  EStreamType type;
81 82 83
} SDataBlockInfo;

typedef struct SSDataBlock {
84 85 86
  SColumnDataAgg** pBlockAgg;
  SArray*          pDataBlock;  // SArray<SColumnInfoData>
  SDataBlockInfo   info;
87 88
} SSDataBlock;

H
Haojun Liao 已提交
89
typedef struct SVarColAttr {
L
Liu Jicong 已提交
90
  int32_t* offset;    // start position for each entry in the list
H
Haojun Liao 已提交
91 92 93 94
  uint32_t length;    // used buffer size that contain the valid data
  uint32_t allocLen;  // allocated buffer size
} SVarColAttr;

95 96
// pBlockAgg->numOfNull == info.rows, all data are null
// pBlockAgg->numOfNull == 0, no data are null.
97
typedef struct SColumnInfoData {
L
Liu Jicong 已提交
98 99 100
  SColumnInfo info;     // TODO filter info needs to be removed
  bool        hasNull;  // if current column data has null value.
  char*       pData;    // the corresponding block data in memory
H
Haojun Liao 已提交
101
  union {
L
Liu Jicong 已提交
102
    char*       nullbitmap;  // bitmap, one bit for each item in the list
H
Haojun Liao 已提交
103 104
    SVarColAttr varmeta;
  };
105 106
} SColumnInfoData;

107
typedef struct SQueryTableDataCond {
108
  //STimeWindow  twindow;
109 110 111 112 113
  int32_t      order;  // desc|asc order to iterate the data block
  int32_t      numOfCols;
  SColumnInfo *colList;
  bool         loadExternalRows;  // load external rows or not
  int32_t      type;              // data block load type:
114 115
  int32_t      numOfTWindows;
  STimeWindow *twindows;
116 117
} SQueryTableDataCond;

H
Haojun Liao 已提交
118 119 120
void*   blockDataDestroy(SSDataBlock* pBlock);
int32_t tEncodeDataBlock(void** buf, const SSDataBlock* pBlock);
void*   tDecodeDataBlock(const void* buf, SSDataBlock* pBlock);
H
Haojun Liao 已提交
121

L
Liu Jicong 已提交
122
int32_t tEncodeDataBlocks(void** buf, const SArray* blocks);
L
Liu Jicong 已提交
123
void*   tDecodeDataBlocks(const void* buf, SArray** blocks);
L
fix  
Liu Jicong 已提交
124
void    colDataDestroy(SColumnInfoData* pColData);
L
Liu Jicong 已提交
125

L
Liu Jicong 已提交
126 127 128 129
static FORCE_INLINE void blockDestroyInner(SSDataBlock* pBlock) {
  int32_t numOfOutput = taosArrayGetSize(pBlock->pDataBlock);
  for (int32_t i = 0; i < numOfOutput; ++i) {
    SColumnInfoData* pColInfoData = (SColumnInfoData*)taosArrayGet(pBlock->pDataBlock, i);
130
    colDataDestroy(pColInfoData);
L
Liu Jicong 已提交
131
  }
L
Liu Jicong 已提交
132 133

  taosArrayDestroy(pBlock->pDataBlock);
wafwerar's avatar
wafwerar 已提交
134
  taosMemoryFreeClear(pBlock->pBlockAgg);
L
Liu Jicong 已提交
135 136
}

L
Liu Jicong 已提交
137 138
static FORCE_INLINE void tDeleteSSDataBlock(SSDataBlock* pBlock) { blockDestroyInner(pBlock); }

139 140
//======================================================================================================================
// the following structure shared by parser and executor
141
typedef struct SColumn {
H
Haojun Liao 已提交
142 143 144 145 146
  union {
    uint64_t uid;
    int64_t  dataBlockId;
  };

H
Haojun Liao 已提交
147 148
  int16_t colId;
  int16_t slotId;
H
Haojun Liao 已提交
149

H
Haojun Liao 已提交
150 151
  char    name[TSDB_COL_NAME_LEN];
  int8_t  flag;  // column type: normal column, tag, or user-input column (integer/float/string)
H
Haojun Liao 已提交
152 153 154 155
  int16_t type;
  int32_t bytes;
  uint8_t precision;
  uint8_t scale;
156 157
} SColumn;

H
Haojun Liao 已提交
158
typedef struct STableBlockDistInfo {
L
Liu Jicong 已提交
159 160 161 162 163 164 165 166 167 168 169
  uint16_t rowSize;
  uint16_t numOfFiles;
  uint32_t numOfTables;
  uint64_t totalSize;
  uint64_t totalRows;
  int32_t  maxRows;
  int32_t  minRows;
  int32_t  firstSeekTimeUs;
  uint32_t numOfRowsInMemTable;
  uint32_t numOfSmallBlocks;
  SArray*  dataBlockInfos;
H
Haojun Liao 已提交
170
} STableBlockDistInfo;
171

G
Ganlin Zhao 已提交
172
enum {
H
Haojun Liao 已提交
173
  FUNC_PARAM_TYPE_VALUE = 0x1,
L
Liu Jicong 已提交
174
  FUNC_PARAM_TYPE_COLUMN = 0x2,
G
Ganlin Zhao 已提交
175 176
};

H
Haojun Liao 已提交
177 178
typedef struct SFunctParam {
  int32_t  type;
L
Liu Jicong 已提交
179
  SColumn* pCol;
H
Haojun Liao 已提交
180 181
  SVariant param;
} SFunctParam;
H
Haojun Liao 已提交
182

H
Haojun Liao 已提交
183
// the structure for sql function in select clause
H
Haojun Liao 已提交
184 185
typedef struct SResSchame {
  int8_t  type;
186
  int32_t slotId;
H
Haojun Liao 已提交
187 188 189 190 191 192
  int32_t bytes;
  int32_t precision;
  int32_t scale;
  char    name[TSDB_COL_NAME_LEN];
} SResSchema;

H
Haojun Liao 已提交
193
typedef struct SExprBasicInfo {
H
Haojun Liao 已提交
194
  SResSchema   resSchema;
H
Haojun Liao 已提交
195
  int16_t      numOfParams;  // argument value of each function
L
Liu Jicong 已提交
196
  SFunctParam* pParam;
H
Haojun Liao 已提交
197
} SExprBasicInfo;
198 199

typedef struct SExprInfo {
L
Liu Jicong 已提交
200 201
  struct SExprBasicInfo base;
  struct tExprNode*     pExpr;
202 203
} SExprInfo;

wmmhello's avatar
wmmhello 已提交
204
typedef struct {
wmmhello's avatar
wmmhello 已提交
205 206 207
  const char*   key;
  int32_t       keyLen;
  uint8_t       type;
wmmhello's avatar
wmmhello 已提交
208 209
  union{
    const char* value;
wmmhello's avatar
wmmhello 已提交
210 211 212 213
    int64_t     i;
    uint64_t    u;
    double      d;
    float       f;
wmmhello's avatar
wmmhello 已提交
214
  };
wmmhello's avatar
wmmhello 已提交
215
  int32_t       length;
wmmhello's avatar
wmmhello 已提交
216 217
} SSmlKv;

L
Liu Jicong 已提交
218
#define QUERY_ASC_FORWARD_STEP  1
219 220 221 222
#define QUERY_DESC_FORWARD_STEP -1

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

223 224 225 226 227 228 229 230 231 232
#define SORT_QSORT_T 0x1
#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;

H
Haojun Liao 已提交
233 234 235 236
#ifdef __cplusplus
}
#endif

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