/* * Copyright (c) 2019 TAOS Data, Inc. * * 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 . */ #ifndef TDENGINE_CLIENTSTMT_H #define TDENGINE_CLIENTSTMT_H #ifdef __cplusplus extern "C" { #endif #include "catalog.h" typedef void STableDataBlocks; typedef enum { STMT_TYPE_INSERT = 1, STMT_TYPE_MULTI_INSERT, STMT_TYPE_QUERY, } STMT_TYPE; typedef enum { STMT_INIT = 1, STMT_PREPARE, STMT_SETTBNAME, STMT_SETTAGS, STMT_FETCH_TAG_FIELDS, STMT_FETCH_COL_FIELDS, STMT_BIND, STMT_BIND_COL, STMT_ADD_BATCH, STMT_EXECUTE, } STMT_STATUS; typedef struct SStmtTableCache { STableDataBlocks* pDataBlock; void* boundTags; } SStmtTableCache; typedef struct SStmtBindInfo { bool needParse; uint64_t tbUid; uint64_t tbSuid; int8_t tbType; void* boundTags; char* tbName; SName sname; } SStmtBindInfo; typedef struct SStmtExecInfo { SRequestObj* pRequest; SHashObj* pVgHash; SHashObj* pBlockHash; } SStmtExecInfo; typedef struct SStmtSQLInfo { STMT_TYPE type; STMT_STATUS status; bool autoCreate; uint64_t runTimes; SHashObj* pTableCache; //SHash SQuery* pQuery; char* sqlStr; int32_t sqlLen; } SStmtSQLInfo; typedef struct STscStmt { STscObj* taos; SCatalog* pCatalog; SStmtSQLInfo sql; SStmtExecInfo exec; SStmtBindInfo bInfo; } STscStmt; #define STMT_ERR_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; return _code; } } while (0) #define STMT_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; } return _code; } while (0) #define STMT_ERR_JRET(c) do { code = c; if (code != TSDB_CODE_SUCCESS) { terrno = code; goto _return; } } while (0) TAOS_STMT *stmtInit(TAOS *taos); int stmtClose(TAOS_STMT *stmt); int stmtExec(TAOS_STMT *stmt); const char *stmtErrstr(TAOS_STMT *stmt); int stmtAffectedRows(TAOS_STMT *stmt); int stmtPrepare(TAOS_STMT *stmt, const char *sql, unsigned long length); int stmtSetTbName(TAOS_STMT *stmt, const char *tbName); int stmtSetTbTags(TAOS_STMT *stmt, TAOS_BIND_v2 *tags); int stmtIsInsert(TAOS_STMT *stmt, int *insert); int stmtGetParamNum(TAOS_STMT *stmt, int *nums); int stmtAddBatch(TAOS_STMT *stmt); TAOS_RES *stmtUseResult(TAOS_STMT *stmt); int stmtBindBatch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind); #ifdef __cplusplus } #endif #endif // TDENGINE_CLIENTSTMT_H