dataformat.h 5.4 KB
Newer Older
H
more  
hzcheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*
 * 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/>.
 */
H
hzcheng 已提交
15
#ifndef _TD_DATA_FORMAT_H_
H
more  
Hongze Cheng 已提交
16 17 18
#define _TD_DATA_FORMAT_H_

#include <stdint.h>
H
hzcheng 已提交
19
#include <stdlib.h>
H
hzcheng 已提交
20
#include <string.h>
H
more  
Hongze Cheng 已提交
21

H
hzcheng 已提交
22 23
#include "taosdef.h"

H
more  
hzcheng 已提交
24 25 26
#ifdef __cplusplus
extern "C" {
#endif
H
hzcheng 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

// ----------------- TSDB COLUMN DEFINITION
typedef struct {
  int8_t  type;    // Column type
  int16_t colId;   // column ID
  int32_t bytes;   // column bytes
  int32_t offset;  // point offset in a row data
} STColumn;

#define colType(col) ((col)->type)
#define colColId(col) ((col)->colId)
#define colBytes(col) ((col)->bytes)
#define colOffset(col) ((col)->offset)

#define colSetType(col, t) (colType(col) = (t))
#define colSetColId(col, id) (colColId(col) = (id))
#define colSetBytes(col, b) (colBytes(col) = (b))
#define colSetOffset(col, o) (colOffset(col) = (o))

STColumn *tdNewCol(int8_t type, int16_t colId, int16_t bytes);
void      tdFreeCol(STColumn *pCol);
void      tdColCpy(STColumn *dst, STColumn *src);
void      tdSetCol(STColumn *pCol, int8_t type, int16_t colId, int32_t bytes);

// ----------------- TSDB SCHEMA DEFINITION
typedef struct {
H
hzcheng 已提交
53 54
  int      numOfCols;  // Number of columns appended
  int      totalCols;  // Total columns allocated
H
hzcheng 已提交
55 56 57 58
  STColumn columns[];
} STSchema;

#define schemaNCols(s) ((s)->numOfCols)
H
hzcheng 已提交
59
#define schemaTCols(s) ((s)->totalCols)
H
hzcheng 已提交
60 61 62
#define schemaColAt(s, i) ((s)->columns + i)

STSchema *tdNewSchema(int32_t nCols);
H
hzcheng 已提交
63
int       tdSchemaAppendCol(STSchema *pSchema, int8_t type, int16_t colId, int16_t bytes);
H
hzcheng 已提交
64
STSchema *tdDupSchema(STSchema *pSchema);
H
hzcheng 已提交
65 66
void      tdFreeSchema(STSchema *pSchema);
void      tdUpdateSchema(STSchema *pSchema);
H
hzcheng 已提交
67

H
more  
Hongze Cheng 已提交
68 69
// ----------------- Data row structure

H
hzcheng 已提交
70
/* A data row, the format is like below:
H
hzcheng 已提交
71 72 73 74 75 76
 * +----------+---------+---------------------------------+---------------------------------+
 * | int32_t  | int32_t |                                 |                                 |
 * +----------+---------+---------------------------------+---------------------------------+
 * |   len    |  flen   |           First part            |             Second part         |
 * +----------+---------+---------------------------------+---------------------------------+
 * plen: first part length
H
hzcheng 已提交
77 78
 * len: the length including sizeof(row) + sizeof(len)
 * row: actual row data encoding
H
more  
Hongze Cheng 已提交
79
 */
H
hzcheng 已提交
80 81
typedef void *SDataRow;

H
hzcheng 已提交
82
#define TD_DATA_ROW_HEAD_SIZE (2 * sizeof(int32_t))
H
hzcheng 已提交
83

H
hzcheng 已提交
84
#define dataRowLen(r) (*(int32_t *)(r))
H
hzcheng 已提交
85
#define dataRowFLen(r) (*(int32_t *)((char *)(r) + sizeof(int32_t)))
H
hzcheng 已提交
86
#define dataRowTuple(r) ((char *)(r) + TD_DATA_ROW_HEAD_SIZE)
H
hzcheng 已提交
87
#define dataRowSetLen(r, l) (dataRowLen(r) = (l))
H
hzcheng 已提交
88
#define dataRowSetFLen(r, l) (dataRowFLen(r) = (l))
H
hzcheng 已提交
89
#define dataRowIdx(r, i) ((char *)(r) + i)
H
hzcheng 已提交
90
#define dataRowCpy(dst, r) memcpy((dst), (r), dataRowLen(r))
H
hzcheng 已提交
91
#define dataRowAt(r, idx) ((char *)(r) + (idx))
H
hzcheng 已提交
92

H
hzcheng 已提交
93
void     tdInitDataRow(SDataRow row, STSchema *pSchema);
H
hzcheng 已提交
94
int      tdMaxRowBytesFromSchema(STSchema *pSchema);
H
hzcheng 已提交
95
SDataRow tdNewDataRow(int32_t bytes, STSchema *pSchema);
H
hzcheng 已提交
96
SDataRow tdNewDataRowFromSchema(STSchema *pSchema);
H
hzcheng 已提交
97
void     tdFreeDataRow(SDataRow row);
H
hzcheng 已提交
98 99
int      tdAppendColVal(SDataRow row, void *value, STColumn *pCol);
void     tdDataRowReset(SDataRow row, STSchema *pSchema);
H
hzcheng 已提交
100
SDataRow tdDataRowDup(SDataRow row);
H
more  
Hongze Cheng 已提交
101 102

/* Data rows definition, the format of it is like below:
H
hzcheng 已提交
103 104 105 106 107
 * +---------+-----------------------+--------+-----------------------+
 * | int32_t |                       |        |                       |
 * +---------+-----------------------+--------+-----------------------+
 * |   len   |        SDataRow       |  ....  |        SDataRow       |
 * +---------+-----------------------+--------+-----------------------+
H
more  
Hongze Cheng 已提交
108
 */
H
hzcheng 已提交
109
typedef void *SDataRows;
H
more  
Hongze Cheng 已提交
110

H
hzcheng 已提交
111 112
#define TD_DATA_ROWS_HEAD_LEN sizeof(int32_t)

H
hzcheng 已提交
113 114 115 116
#define dataRowsLen(rs) (*(int32_t *)(rs))
#define dataRowsSetLen(rs, l) (dataRowsLen(rs) = (l))
#define dataRowsInit(rs) dataRowsSetLen(rs, sizeof(int32_t))

H
hzcheng 已提交
117 118 119 120 121 122 123 124 125 126 127 128
void tdDataRowsAppendRow(SDataRows rows, SDataRow row);

// Data rows iterator
typedef struct {
  int32_t totalLen;
  int32_t len;
  SDataRow row;
} SDataRowsIter;

void tdInitSDataRowsIter(SDataRows rows, SDataRowsIter *pIter);
SDataRow tdDataRowsNext(SDataRowsIter *pIter);

H
more  
Hongze Cheng 已提交
129 130 131 132 133 134 135
/* Data column definition
 * +---------+---------+-----------------------+
 * | int32_t | int32_t |                       |
 * +---------+---------+-----------------------+
 * |   len   | npoints |          data         |
 * +---------+---------+-----------------------+
 */
H
hzcheng 已提交
136
typedef char *SDataCol;
H
more  
Hongze Cheng 已提交
137 138 139 140 141 142 143 144

/* Data columns definition
 * +---------+---------+-----------------------+--------+-----------------------+
 * | int32_t | int32_t |                       |        |                       |
 * +---------+---------+-----------------------+--------+-----------------------+
 * |   len   | npoints |        SDataCol       |  ....  |        SDataCol       |
 * +---------+---------+-----------------------+--------+-----------------------+
 */
H
hzcheng 已提交
145
typedef char *SDataCols;
H
more  
Hongze Cheng 已提交
146

H
more  
hzcheng 已提交
147 148 149 150
#ifdef __cplusplus
}
#endif

H
hzcheng 已提交
151
#endif  // _TD_DATA_FORMAT_H_