taos.h 11.6 KB
Newer Older
H
hzcheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * 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/>.
 */

#ifndef TDENGINE_TAOS_H
#define TDENGINE_TAOS_H

H
Haojun Liao 已提交
19
#include <stdbool.h>
L
Liu Jicong 已提交
20
#include <stdint.h>
H
hzcheng 已提交
21 22 23 24 25

#ifdef __cplusplus
extern "C" {
#endif

S
Shengliang Guan 已提交
26 27 28
typedef void   TAOS;
typedef void   TAOS_STMT;
typedef void   TAOS_RES;
L
Liu Jicong 已提交
29
typedef void **TAOS_ROW;
L
Liu Jicong 已提交
30
typedef void   TAOS_SUB;
H
hzcheng 已提交
31

H
hzcheng 已提交
32
// Data type definition
L
Liu Jicong 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
#define TSDB_DATA_TYPE_NULL       0   // 1 bytes
#define TSDB_DATA_TYPE_BOOL       1   // 1 bytes
#define TSDB_DATA_TYPE_TINYINT    2   // 1 byte
#define TSDB_DATA_TYPE_SMALLINT   3   // 2 bytes
#define TSDB_DATA_TYPE_INT        4   // 4 bytes
#define TSDB_DATA_TYPE_BIGINT     5   // 8 bytes
#define TSDB_DATA_TYPE_FLOAT      6   // 4 bytes
#define TSDB_DATA_TYPE_DOUBLE     7   // 8 bytes
#define TSDB_DATA_TYPE_VARCHAR    8   // string, alias for varchar
#define TSDB_DATA_TYPE_TIMESTAMP  9   // 8 bytes
#define TSDB_DATA_TYPE_NCHAR      10  // unicode string
#define TSDB_DATA_TYPE_UTINYINT   11  // 1 byte
#define TSDB_DATA_TYPE_USMALLINT  12  // 2 bytes
#define TSDB_DATA_TYPE_UINT       13  // 4 bytes
#define TSDB_DATA_TYPE_UBIGINT    14  // 8 bytes
#define TSDB_DATA_TYPE_JSON       15  // json string
#define TSDB_DATA_TYPE_VARBINARY  16  // binary
#define TSDB_DATA_TYPE_DECIMAL    17  // decimal
#define TSDB_DATA_TYPE_BLOB       18  // binary
H
Haojun Liao 已提交
52
#define TSDB_DATA_TYPE_MEDIUMBLOB 19
L
Liu Jicong 已提交
53
#define TSDB_DATA_TYPE_BINARY     TSDB_DATA_TYPE_VARCHAR  // string
C
Cary Xu 已提交
54
#define TSDB_DATA_TYPE_MAX        20
H
hzcheng 已提交
55

H
hzcheng 已提交
56 57 58 59 60 61 62 63 64
typedef enum {
  TSDB_OPTION_LOCALE,
  TSDB_OPTION_CHARSET,
  TSDB_OPTION_TIMEZONE,
  TSDB_OPTION_CONFIGDIR,
  TSDB_OPTION_SHELL_ACTIVITY_TIMER,
  TSDB_MAX_OPTIONS
} TSDB_OPTION;

H
Haojun Liao 已提交
65 66
typedef enum {
  TSDB_SML_UNKNOWN_PROTOCOL = 0,
L
Liu Jicong 已提交
67 68 69
  TSDB_SML_LINE_PROTOCOL = 1,
  TSDB_SML_TELNET_PROTOCOL = 2,
  TSDB_SML_JSON_PROTOCOL = 3,
H
Haojun Liao 已提交
70 71 72 73 74 75 76 77 78 79 80 81
} TSDB_SML_PROTOCOL_TYPE;

typedef enum {
  TSDB_SML_TIMESTAMP_NOT_CONFIGURED = 0,
  TSDB_SML_TIMESTAMP_HOURS,
  TSDB_SML_TIMESTAMP_MINUTES,
  TSDB_SML_TIMESTAMP_SECONDS,
  TSDB_SML_TIMESTAMP_MILLI_SECONDS,
  TSDB_SML_TIMESTAMP_MICRO_SECONDS,
  TSDB_SML_TIMESTAMP_NANO_SECONDS,
} TSDB_SML_TIMESTAMP_TYPE;

S
slguan 已提交
82
typedef struct taosField {
L
Liu Jicong 已提交
83 84 85
  char    name[65];
  int8_t  type;
  int32_t bytes;
H
hzcheng 已提交
86 87
} TAOS_FIELD;

D
dapan1121 已提交
88 89 90 91 92 93 94 95
typedef struct TAOS_FIELD_E {
  char    name[65];
  int8_t  type;
  uint8_t precision;
  uint8_t scale;
  int32_t bytes;
} TAOS_FIELD_E;

96
#ifdef WINDOWS
97
#define DLL_EXPORT __declspec(dllexport)
98
#else
L
Liu Jicong 已提交
99
#define DLL_EXPORT
100
#endif
L
[#1054]  
lihui 已提交
101

H
Haojun Liao 已提交
102
typedef void (*__taos_async_fn_t)(void *param, TAOS_RES *res, int code);
103

D
dapan1121 已提交
104
typedef struct TAOS_MULTI_BIND {
L
Liu Jicong 已提交
105
  int       buffer_type;
L
Liu Jicong 已提交
106
  void     *buffer;
D
dapan1121 已提交
107
  uintptr_t buffer_length;
L
Liu Jicong 已提交
108 109
  int32_t  *length;
  char     *is_null;
L
Liu Jicong 已提交
110
  int       num;
D
dapan1121 已提交
111
} TAOS_MULTI_BIND;
D
fix bug  
dapan1121 已提交
112

113 114 115 116 117 118 119 120 121 122 123 124 125
typedef enum {
  SET_CONF_RET_SUCC = 0,
  SET_CONF_RET_ERR_PART = -1,
  SET_CONF_RET_ERR_INNER = -2,
  SET_CONF_RET_ERR_JSON_INVALID = -3,
  SET_CONF_RET_ERR_JSON_PARSE = -4,
  SET_CONF_RET_ERR_ONLY_ONCE = -5,
  SET_CONF_RET_ERR_TOO_LONG = -6
} SET_CONF_RET_CODE;

#define RET_MSG_LENGTH 1024
typedef struct setConfRet {
  SET_CONF_RET_CODE retCode;
L
Liu Jicong 已提交
126
  char              retMsg[RET_MSG_LENGTH];
127 128
} setConfRet;

H
Haojun Liao 已提交
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
DLL_EXPORT void        taos_cleanup(void);
DLL_EXPORT int         taos_options(TSDB_OPTION option, const void *arg, ...);
DLL_EXPORT setConfRet  taos_set_config(const char *config);
DLL_EXPORT int         taos_init(void);
DLL_EXPORT TAOS       *taos_connect(const char *ip, const char *user, const char *pass, const char *db, uint16_t port);
DLL_EXPORT TAOS       *taos_connect_auth(const char *ip, const char *user, const char *auth, const char *db, uint16_t port);
DLL_EXPORT void        taos_close(TAOS *taos);

const char            *taos_data_type(int type);

DLL_EXPORT TAOS_STMT  *taos_stmt_init(TAOS *taos);
DLL_EXPORT int         taos_stmt_prepare(TAOS_STMT *stmt, const char *sql, unsigned long length);
DLL_EXPORT int         taos_stmt_set_tbname_tags(TAOS_STMT *stmt, const char *name, TAOS_MULTI_BIND *tags);
DLL_EXPORT int         taos_stmt_set_tbname(TAOS_STMT *stmt, const char *name);
DLL_EXPORT int         taos_stmt_set_tags(TAOS_STMT *stmt, TAOS_MULTI_BIND *tags);
DLL_EXPORT int         taos_stmt_set_sub_tbname(TAOS_STMT *stmt, const char *name);
DLL_EXPORT int         taos_stmt_get_tag_fields(TAOS_STMT *stmt, int *fieldNum, TAOS_FIELD_E **fields);
DLL_EXPORT int         taos_stmt_get_col_fields(TAOS_STMT *stmt, int *fieldNum, TAOS_FIELD_E **fields);

DLL_EXPORT int         taos_stmt_is_insert(TAOS_STMT *stmt, int *insert);
DLL_EXPORT int         taos_stmt_num_params(TAOS_STMT *stmt, int *nums);
DLL_EXPORT int         taos_stmt_get_param(TAOS_STMT *stmt, int idx, int *type, int *bytes);
DLL_EXPORT int         taos_stmt_bind_param(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind);
DLL_EXPORT int         taos_stmt_bind_param_batch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind);
DLL_EXPORT int         taos_stmt_bind_single_param_batch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int colIdx);
DLL_EXPORT int         taos_stmt_add_batch(TAOS_STMT *stmt);
DLL_EXPORT int         taos_stmt_execute(TAOS_STMT *stmt);
DLL_EXPORT TAOS_RES   *taos_stmt_use_result(TAOS_STMT *stmt);
DLL_EXPORT int         taos_stmt_close(TAOS_STMT *stmt);
DLL_EXPORT char       *taos_stmt_errstr(TAOS_STMT *stmt);
DLL_EXPORT int         taos_stmt_affected_rows(TAOS_STMT *stmt);
DLL_EXPORT int         taos_stmt_affected_rows_once(TAOS_STMT *stmt);

DLL_EXPORT TAOS_RES   *taos_query(TAOS *taos, const char *sql);

DLL_EXPORT TAOS_ROW    taos_fetch_row(TAOS_RES *res);
DLL_EXPORT int         taos_result_precision(TAOS_RES *res);  // get the time precision of result
DLL_EXPORT void        taos_free_result(TAOS_RES *res);
DLL_EXPORT int         taos_field_count(TAOS_RES *res);
DLL_EXPORT int         taos_num_fields(TAOS_RES *res);
DLL_EXPORT int         taos_affected_rows(TAOS_RES *res);
H
Haojun Liao 已提交
170

L
[#1054]  
lihui 已提交
171
DLL_EXPORT TAOS_FIELD *taos_fetch_fields(TAOS_RES *res);
L
Liu Jicong 已提交
172 173 174 175
DLL_EXPORT int         taos_select_db(TAOS *taos, const char *db);
DLL_EXPORT int         taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields);
DLL_EXPORT void        taos_stop_query(TAOS_RES *res);
DLL_EXPORT bool        taos_is_null(TAOS_RES *res, int32_t row, int32_t col);
176
DLL_EXPORT bool        taos_is_update_query(TAOS_RES *res);
L
Liu Jicong 已提交
177
DLL_EXPORT int         taos_fetch_block(TAOS_RES *res, TAOS_ROW *rows);
L
Liu Jicong 已提交
178 179
DLL_EXPORT int         taos_fetch_block_s(TAOS_RES *res, int *numOfRows, TAOS_ROW *rows);
DLL_EXPORT int         taos_fetch_raw_block(TAOS_RES *res, int *numOfRows, void **pData);
L
Liu Jicong 已提交
180
DLL_EXPORT int        *taos_get_column_data_offset(TAOS_RES *res, int columnIndex);
L
Liu Jicong 已提交
181
DLL_EXPORT int         taos_validate_sql(TAOS *taos, const char *sql);
H
Haojun Liao 已提交
182
DLL_EXPORT void        taos_reset_current_db(TAOS *taos);
H
hzcheng 已提交
183

H
Haojun Liao 已提交
184 185
DLL_EXPORT int        *taos_fetch_lengths(TAOS_RES *res);
DLL_EXPORT TAOS_ROW   *taos_result_block(TAOS_RES *res);
186

187 188
DLL_EXPORT const char *taos_get_server_info(TAOS *taos);
DLL_EXPORT const char *taos_get_client_info();
S
slguan 已提交
189

H
Haojun Liao 已提交
190
DLL_EXPORT const char *taos_errstr(TAOS_RES *tres);
L
Liu Jicong 已提交
191
DLL_EXPORT int         taos_errno(TAOS_RES *tres);
H
hzcheng 已提交
192

H
Haojun Liao 已提交
193 194 195 196
DLL_EXPORT void        taos_query_a(TAOS *taos, const char *sql, __taos_async_fn_t fp, void *param);
DLL_EXPORT void        taos_fetch_rows_a(TAOS_RES *res, __taos_async_fn_t fp, void *param);
DLL_EXPORT void        taos_fetch_raw_block_a(TAOS_RES* res, __taos_async_fn_t fp, void* param);
DLL_EXPORT const void *taos_get_raw_block(TAOS_RES* res);
H
hzcheng 已提交
197

198 199
// Shuduo: temporary enable for app build
#if 1
L
Liu Jicong 已提交
200 201 202
typedef void (*__taos_sub_fn_t)(TAOS_SUB *tsub, TAOS_RES *res, void *param, int code);
DLL_EXPORT TAOS_SUB *taos_subscribe(TAOS *taos, int restart, const char *topic, const char *sql, __taos_sub_fn_t fp,
                                    void *param, int interval);
weixin_48148422's avatar
weixin_48148422 已提交
203
DLL_EXPORT TAOS_RES *taos_consume(TAOS_SUB *tsub);
weixin_48148422's avatar
weixin_48148422 已提交
204
DLL_EXPORT void      taos_unsubscribe(TAOS_SUB *tsub, int keepProgress);
205
#endif
H
hzcheng 已提交
206

L
Liu Jicong 已提交
207
DLL_EXPORT int       taos_load_table_info(TAOS *taos, const char *tableNameList);
wmmhello's avatar
wmmhello 已提交
208
DLL_EXPORT TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int protocol, int precision);
L
Liu Jicong 已提交
209

L
Liu Jicong 已提交
210
/* --------------------------TMQ INTERFACE------------------------------- */
L
Liu Jicong 已提交
211

L
Liu Jicong 已提交
212
enum {
L
Liu Jicong 已提交
213
  TMQ_RESP_ERR__FAIL = -1,
L
Liu Jicong 已提交
214 215 216
  TMQ_RESP_ERR__SUCCESS = 0,
};

L
Liu Jicong 已提交
217
typedef int32_t tmq_resp_err_t;
L
Liu Jicong 已提交
218

L
Liu Jicong 已提交
219 220
typedef struct tmq_t                   tmq_t;
typedef struct tmq_topic_vgroup_t      tmq_topic_vgroup_t;
L
Liu Jicong 已提交
221 222
typedef struct tmq_topic_vgroup_list_t tmq_topic_vgroup_list_t;

L
Liu Jicong 已提交
223 224
typedef struct tmq_conf_t tmq_conf_t;
typedef struct tmq_list_t tmq_list_t;
L
Liu Jicong 已提交
225

L
Liu Jicong 已提交
226
typedef void(tmq_commit_cb(tmq_t *, tmq_resp_err_t, tmq_topic_vgroup_list_t *, void *param));
L
Liu Jicong 已提交
227

L
Liu Jicong 已提交
228
DLL_EXPORT tmq_list_t *tmq_list_new();
L
Liu Jicong 已提交
229
DLL_EXPORT int32_t     tmq_list_append(tmq_list_t *, const char *);
L
Liu Jicong 已提交
230
DLL_EXPORT void        tmq_list_destroy(tmq_list_t *);
L
Liu Jicong 已提交
231
DLL_EXPORT int32_t     tmq_list_get_size(const tmq_list_t *);
L
Liu Jicong 已提交
232
DLL_EXPORT char      **tmq_list_to_c_array(const tmq_list_t *);
L
Liu Jicong 已提交
233

L
Liu Jicong 已提交
234
DLL_EXPORT tmq_t *tmq_consumer_new(tmq_conf_t *conf, char *errstr, int32_t errstrLen);
L
Liu Jicong 已提交
235

L
Liu Jicong 已提交
236
DLL_EXPORT const char *tmq_err2str(tmq_resp_err_t);
L
Liu Jicong 已提交
237

L
Liu Jicong 已提交
238
/* ------------------------TMQ CONSUMER INTERFACE------------------------ */
L
Liu Jicong 已提交
239

L
Liu Jicong 已提交
240
DLL_EXPORT tmq_resp_err_t tmq_subscribe(tmq_t *tmq, const tmq_list_t *topic_list);
L
Liu Jicong 已提交
241 242
DLL_EXPORT tmq_resp_err_t tmq_unsubscribe(tmq_t *tmq);
DLL_EXPORT tmq_resp_err_t tmq_subscription(tmq_t *tmq, tmq_list_t **topics);
243 244 245 246

// timeout: -1 means infinitely waiting
DLL_EXPORT TAOS_RES *tmq_consumer_poll(tmq_t *tmq, int64_t timeout);

L
Liu Jicong 已提交
247
DLL_EXPORT tmq_resp_err_t tmq_consumer_close(tmq_t *tmq);
L
Liu Jicong 已提交
248
DLL_EXPORT tmq_resp_err_t tmq_commit_sync(tmq_t *tmq, const tmq_topic_vgroup_list_t *offsets);
L
Liu Jicong 已提交
249 250
DLL_EXPORT void tmq_commit_async(tmq_t *tmq, const tmq_topic_vgroup_list_t *offsets, tmq_commit_cb *cb, void *param);

L
Liu Jicong 已提交
251
#if 0
L
Liu Jicong 已提交
252
DLL_EXPORT tmq_resp_err_t tmq_commit(tmq_t *tmq, const tmq_topic_vgroup_list_t *offsets, int32_t async);
L
Liu Jicong 已提交
253
DLL_EXPORT tmq_resp_err_t tmq_seek(tmq_t *tmq, const tmq_topic_vgroup_t *offset);
L
Liu Jicong 已提交
254
#endif
L
Liu Jicong 已提交
255

L
Liu Jicong 已提交
256 257 258 259 260 261 262 263 264 265
/* ----------------------TMQ CONFIGURATION INTERFACE---------------------- */

enum tmq_conf_res_t {
  TMQ_CONF_UNKNOWN = -2,
  TMQ_CONF_INVALID = -1,
  TMQ_CONF_OK = 0,
};

typedef enum tmq_conf_res_t tmq_conf_res_t;

L
Liu Jicong 已提交
266
DLL_EXPORT tmq_conf_t    *tmq_conf_new();
L
Liu Jicong 已提交
267
DLL_EXPORT tmq_conf_res_t tmq_conf_set(tmq_conf_t *conf, const char *key, const char *value);
L
Liu Jicong 已提交
268
DLL_EXPORT void           tmq_conf_destroy(tmq_conf_t *conf);
L
Liu Jicong 已提交
269
DLL_EXPORT void           tmq_conf_set_auto_commit_cb(tmq_conf_t *conf, tmq_commit_cb *cb, void *param);
L
Liu Jicong 已提交
270

L
Liu Jicong 已提交
271
/* -------------------------TMQ MSG HANDLE INTERFACE---------------------- */
272

L
Liu Jicong 已提交
273
DLL_EXPORT const char *tmq_get_topic_name(TAOS_RES *res);
L
Liu Jicong 已提交
274
DLL_EXPORT const char *tmq_get_db_name(TAOS_RES *res);
L
Liu Jicong 已提交
275
DLL_EXPORT int32_t     tmq_get_vgroup_id(TAOS_RES *res);
L
Liu Jicong 已提交
276
DLL_EXPORT const char *tmq_get_table_name(TAOS_RES *res);
L
Liu Jicong 已提交
277

L
Liu Jicong 已提交
278
#if 0
L
Liu Jicong 已提交
279 280
DLL_EXPORT int64_t     tmq_get_request_offset(tmq_message_t *message);
DLL_EXPORT int64_t     tmq_get_response_offset(tmq_message_t *message);
L
Liu Jicong 已提交
281
#endif
L
Liu Jicong 已提交
282

L
Liu Jicong 已提交
283
/* ------------------------------ TMQ END -------------------------------- */
L
Liu Jicong 已提交
284

L
Liu Jicong 已提交
285
#if 1  // Shuduo: temporary enable for app build
L
Liu Jicong 已提交
286
typedef void (*TAOS_SUBSCRIBE_CALLBACK)(TAOS_SUB *tsub, TAOS_RES *res, void *param, int code);
L
Liu Jicong 已提交
287
#endif
288

S
Shengliang Guan 已提交
289 290 291 292 293 294 295 296 297 298
typedef enum {
  TSDB_SRV_STATUS_UNAVAILABLE = 0,
  TSDB_SRV_STATUS_NETWORK_OK = 1,
  TSDB_SRV_STATUS_SERVICE_OK = 2,
  TSDB_SRV_STATUS_SERVICE_DEGRADED = 3,
  TSDB_SRV_STATUS_EXTING = 4,
} TSDB_SERVER_STATUS;

DLL_EXPORT TSDB_SERVER_STATUS taos_check_server_status(const char *fqdn, int port, char *details, int maxlen);

H
hzcheng 已提交
299 300 301 302 303
#ifdef __cplusplus
}
#endif

#endif