stmt query
This commit is contained in:
parent
54dd9e3ca4
commit
15d7abf46f
|
@ -92,14 +92,14 @@ typedef struct taosField {
|
||||||
|
|
||||||
typedef void (*__taos_async_fn_t)(void *param, TAOS_RES *, int code);
|
typedef void (*__taos_async_fn_t)(void *param, TAOS_RES *, int code);
|
||||||
|
|
||||||
typedef struct TAOS_BIND_v2 {
|
typedef struct TAOS_MULTI_BIND {
|
||||||
int buffer_type;
|
int buffer_type;
|
||||||
void *buffer;
|
void *buffer;
|
||||||
int32_t buffer_length;
|
uintptr_t buffer_length;
|
||||||
int32_t *length;
|
int32_t *length;
|
||||||
char *is_null;
|
char *is_null;
|
||||||
int num;
|
int num;
|
||||||
} TAOS_BIND_v2;
|
} TAOS_MULTI_BIND;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SET_CONF_RET_SUCC = 0,
|
SET_CONF_RET_SUCC = 0,
|
||||||
|
@ -130,16 +130,16 @@ const char *taos_data_type(int type);
|
||||||
|
|
||||||
DLL_EXPORT TAOS_STMT *taos_stmt_init(TAOS *taos);
|
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_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_BIND_v2 *tags);
|
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_tbname(TAOS_STMT *stmt, const char *name);
|
||||||
DLL_EXPORT int taos_stmt_set_sub_tbname(TAOS_STMT *stmt, const char *name);
|
DLL_EXPORT int taos_stmt_set_sub_tbname(TAOS_STMT *stmt, const char *name);
|
||||||
|
|
||||||
DLL_EXPORT int taos_stmt_is_insert(TAOS_STMT *stmt, int *insert);
|
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_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_get_param(TAOS_STMT *stmt, int idx, int *type, int *bytes);
|
||||||
DLL_EXPORT int taos_stmt_bind_param(TAOS_STMT *stmt, TAOS_BIND_v2 *bind);
|
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_BIND_v2 *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_BIND_v2 *bind, int colIdx);
|
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_add_batch(TAOS_STMT *stmt);
|
||||||
DLL_EXPORT int taos_stmt_execute(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 TAOS_RES *taos_stmt_use_result(TAOS_STMT *stmt);
|
||||||
|
|
|
@ -88,11 +88,11 @@ int32_t qCloneStmtDataBlock(void** pDst, void* pSrc);
|
||||||
void qFreeStmtDataBlock(void* pDataBlock);
|
void qFreeStmtDataBlock(void* pDataBlock);
|
||||||
int32_t qRebuildStmtDataBlock(void** pDst, void* pSrc);
|
int32_t qRebuildStmtDataBlock(void** pDst, void* pSrc);
|
||||||
void qDestroyStmtDataBlock(void* pBlock);
|
void qDestroyStmtDataBlock(void* pBlock);
|
||||||
int32_t qBindStmtColsValue(void *pBlock, TAOS_BIND_v2 *bind, char *msgBuf, int32_t msgBufLen);
|
int32_t qBindStmtColsValue(void *pBlock, TAOS_MULTI_BIND *bind, char *msgBuf, int32_t msgBufLen);
|
||||||
int32_t qBindStmtSingleColValue(void *pBlock, TAOS_BIND_v2 *bind, char *msgBuf, int32_t msgBufLen, int32_t colIdx, int32_t rowNum);
|
int32_t qBindStmtSingleColValue(void *pBlock, TAOS_MULTI_BIND *bind, char *msgBuf, int32_t msgBufLen, int32_t colIdx, int32_t rowNum);
|
||||||
int32_t qBuildStmtColFields(void *pDataBlock, int32_t *fieldNum, TAOS_FIELD** fields);
|
int32_t qBuildStmtColFields(void *pDataBlock, int32_t *fieldNum, TAOS_FIELD** fields);
|
||||||
int32_t qBuildStmtTagFields(void *pBlock, void *boundTags, int32_t *fieldNum, TAOS_FIELD** fields);
|
int32_t qBuildStmtTagFields(void *pBlock, void *boundTags, int32_t *fieldNum, TAOS_FIELD** fields);
|
||||||
int32_t qBindStmtTagsValue(void *pBlock, void *boundTags, int64_t suid, SName *pName, TAOS_BIND_v2 *bind, char *msgBuf, int32_t msgBufLen);
|
int32_t qBindStmtTagsValue(void *pBlock, void *boundTags, int64_t suid, SName *pName, TAOS_MULTI_BIND *bind, char *msgBuf, int32_t msgBufLen);
|
||||||
void destroyBoundColumnInfo(void* pBoundInfo);
|
void destroyBoundColumnInfo(void* pBoundInfo);
|
||||||
int32_t qCreateSName(SName* pName, const char* pTableName, int32_t acctId, char* dbName, char *msgBuf, int32_t msgBufLen);
|
int32_t qCreateSName(SName* pName, const char* pTableName, int32_t acctId, char* dbName, char *msgBuf, int32_t msgBufLen);
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ int32_t qCreateQueryPlan(SPlanContext* pCxt, SQueryPlan** pPlan, SArray* pExecNo
|
||||||
// @pSource one execution location of this group of datasource subplans
|
// @pSource one execution location of this group of datasource subplans
|
||||||
int32_t qSetSubplanExecutionNode(SSubplan* pSubplan, int32_t groupId, SDownstreamSourceNode* pSource);
|
int32_t qSetSubplanExecutionNode(SSubplan* pSubplan, int32_t groupId, SDownstreamSourceNode* pSource);
|
||||||
|
|
||||||
int32_t qStmtBindParam(SQueryPlan* pPlan, TAOS_BIND_v2* pParams);
|
int32_t qStmtBindParam(SQueryPlan* pPlan, TAOS_MULTI_BIND* pParams, int32_t colIdx);
|
||||||
|
|
||||||
// Convert to subplan to string for the scheduler to send to the executor
|
// Convert to subplan to string for the scheduler to send to the executor
|
||||||
int32_t qSubPlanToString(const SSubplan* pSubplan, char** pStr, int32_t* pLen);
|
int32_t qSubPlanToString(const SSubplan* pSubplan, char** pStr, int32_t* pLen);
|
||||||
|
|
|
@ -306,6 +306,9 @@ int hbAddConnInfo(SAppHbMgr* pAppHbMgr, SClientHbKey connKey, void* key, void* v
|
||||||
void hbMgrInitMqHbRspHandle();
|
void hbMgrInitMqHbRspHandle();
|
||||||
|
|
||||||
SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, int32_t code, bool keepQuery);
|
SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, int32_t code, bool keepQuery);
|
||||||
|
int32_t getQueryPlan(SRequestObj* pRequest, SQuery* pQuery, SArray** pNodeList);
|
||||||
|
int32_t scheduleQuery(SRequestObj* pRequest, SQueryPlan* pDag, SArray* pNodeList);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,7 @@ typedef enum {
|
||||||
STMT_PREPARE,
|
STMT_PREPARE,
|
||||||
STMT_SETTBNAME,
|
STMT_SETTBNAME,
|
||||||
STMT_SETTAGS,
|
STMT_SETTAGS,
|
||||||
STMT_FETCH_TAG_FIELDS,
|
STMT_FETCH_FIELDS,
|
||||||
STMT_FETCH_COL_FIELDS,
|
|
||||||
STMT_BIND,
|
STMT_BIND,
|
||||||
STMT_BIND_COL,
|
STMT_BIND_COL,
|
||||||
STMT_ADD_BATCH,
|
STMT_ADD_BATCH,
|
||||||
|
@ -75,6 +74,8 @@ typedef struct SStmtSQLInfo {
|
||||||
SQuery* pQuery;
|
SQuery* pQuery;
|
||||||
char* sqlStr;
|
char* sqlStr;
|
||||||
int32_t sqlLen;
|
int32_t sqlLen;
|
||||||
|
SArray* nodeList;
|
||||||
|
SQueryPlan* pQueryPlan;
|
||||||
} SStmtSQLInfo;
|
} SStmtSQLInfo;
|
||||||
|
|
||||||
typedef struct STscStmt {
|
typedef struct STscStmt {
|
||||||
|
@ -87,6 +88,8 @@ typedef struct STscStmt {
|
||||||
SStmtBindInfo bInfo;
|
SStmtBindInfo bInfo;
|
||||||
} STscStmt;
|
} STscStmt;
|
||||||
|
|
||||||
|
#define STMT_STATUS_NE(S) (pStmt->sql.status != STMT_##S)
|
||||||
|
#define STMT_STATUS_EQ(S) (pStmt->sql.status == STMT_##S)
|
||||||
|
|
||||||
#define STMT_ERR_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; return _code; } } while (0)
|
#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_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; } return _code; } while (0)
|
||||||
|
@ -97,14 +100,15 @@ int stmtClose(TAOS_STMT *stmt);
|
||||||
int stmtExec(TAOS_STMT *stmt);
|
int stmtExec(TAOS_STMT *stmt);
|
||||||
const char *stmtErrstr(TAOS_STMT *stmt);
|
const char *stmtErrstr(TAOS_STMT *stmt);
|
||||||
int stmtAffectedRows(TAOS_STMT *stmt);
|
int stmtAffectedRows(TAOS_STMT *stmt);
|
||||||
|
int stmtAffectedRowsOnce(TAOS_STMT *stmt);
|
||||||
int stmtPrepare(TAOS_STMT *stmt, const char *sql, unsigned long length);
|
int stmtPrepare(TAOS_STMT *stmt, const char *sql, unsigned long length);
|
||||||
int stmtSetTbName(TAOS_STMT *stmt, const char *tbName);
|
int stmtSetTbName(TAOS_STMT *stmt, const char *tbName);
|
||||||
int stmtSetTbTags(TAOS_STMT *stmt, TAOS_BIND_v2 *tags);
|
int stmtSetTbTags(TAOS_STMT *stmt, TAOS_MULTI_BIND *tags);
|
||||||
int stmtIsInsert(TAOS_STMT *stmt, int *insert);
|
int stmtIsInsert(TAOS_STMT *stmt, int *insert);
|
||||||
int stmtGetParamNum(TAOS_STMT *stmt, int *nums);
|
int stmtGetParamNum(TAOS_STMT *stmt, int *nums);
|
||||||
int stmtAddBatch(TAOS_STMT *stmt);
|
int stmtAddBatch(TAOS_STMT *stmt);
|
||||||
TAOS_RES *stmtUseResult(TAOS_STMT *stmt);
|
TAOS_RES *stmtUseResult(TAOS_STMT *stmt);
|
||||||
int stmtBindBatch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind, int32_t colIdx);
|
int stmtBindBatch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int32_t colIdx);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -306,6 +306,11 @@ int32_t scheduleQuery(SRequestObj* pRequest, SQueryPlan* pDag, SArray* pNodeList
|
||||||
return pRequest->code;
|
return pRequest->code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t getQueryPlan(SRequestObj* pRequest, SQuery* pQuery, SArray** pNodeList) {
|
||||||
|
*pNodeList = taosArrayInit(4, sizeof(struct SQueryNodeAddr));
|
||||||
|
return getPlan(pRequest, pQuery, &pRequest->body.pDag, *pNodeList);
|
||||||
|
}
|
||||||
|
|
||||||
SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, int32_t code, bool keepQuery) {
|
SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, int32_t code, bool keepQuery) {
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
switch (pQuery->execMode) {
|
switch (pQuery->execMode) {
|
||||||
|
|
|
@ -603,7 +603,7 @@ int taos_stmt_prepare(TAOS_STMT *stmt, const char *sql, unsigned long length) {
|
||||||
return stmtPrepare(stmt, sql, length);
|
return stmtPrepare(stmt, sql, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
int taos_stmt_set_tbname_tags(TAOS_STMT *stmt, const char *name, TAOS_BIND_v2 *tags) {
|
int taos_stmt_set_tbname_tags(TAOS_STMT *stmt, const char *name, TAOS_MULTI_BIND *tags) {
|
||||||
if (stmt == NULL || name == NULL) {
|
if (stmt == NULL || name == NULL) {
|
||||||
tscError("NULL parameter for %s", __FUNCTION__);
|
tscError("NULL parameter for %s", __FUNCTION__);
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
@ -636,7 +636,7 @@ int taos_stmt_set_sub_tbname(TAOS_STMT *stmt, const char *name) {
|
||||||
return taos_stmt_set_tbname(stmt, name);
|
return taos_stmt_set_tbname(stmt, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int taos_stmt_bind_param(TAOS_STMT *stmt, TAOS_BIND_v2 *bind) {
|
int taos_stmt_bind_param(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind) {
|
||||||
if (stmt == NULL || bind == NULL) {
|
if (stmt == NULL || bind == NULL) {
|
||||||
tscError("NULL parameter for %s", __FUNCTION__);
|
tscError("NULL parameter for %s", __FUNCTION__);
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
@ -652,7 +652,7 @@ int taos_stmt_bind_param(TAOS_STMT *stmt, TAOS_BIND_v2 *bind) {
|
||||||
return stmtBindBatch(stmt, bind, -1);
|
return stmtBindBatch(stmt, bind, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int taos_stmt_bind_param_batch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind) {
|
int taos_stmt_bind_param_batch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind) {
|
||||||
if (stmt == NULL || bind == NULL) {
|
if (stmt == NULL || bind == NULL) {
|
||||||
tscError("NULL parameter for %s", __FUNCTION__);
|
tscError("NULL parameter for %s", __FUNCTION__);
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
@ -665,10 +665,18 @@ int taos_stmt_bind_param_batch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t insert = 0;
|
||||||
|
stmtIsInsert(stmt, &insert);
|
||||||
|
if (0 == insert && bind->num > 1) {
|
||||||
|
tscError("only one row data allowed for query");
|
||||||
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
return terrno;
|
||||||
|
}
|
||||||
|
|
||||||
return stmtBindBatch(stmt, bind, -1);
|
return stmtBindBatch(stmt, bind, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int taos_stmt_bind_single_param_batch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind, int colIdx) {
|
int taos_stmt_bind_single_param_batch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int colIdx) {
|
||||||
if (stmt == NULL || bind == NULL) {
|
if (stmt == NULL || bind == NULL) {
|
||||||
tscError("NULL parameter for %s", __FUNCTION__);
|
tscError("NULL parameter for %s", __FUNCTION__);
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
@ -680,6 +688,14 @@ int taos_stmt_bind_single_param_batch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind, int c
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t insert = 0;
|
||||||
|
stmtIsInsert(stmt, &insert);
|
||||||
|
if (0 == insert && bind->num > 1) {
|
||||||
|
tscError("only one row data allowed for query");
|
||||||
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
return terrno;
|
||||||
|
}
|
||||||
|
|
||||||
return stmtBindBatch(stmt, bind, colIdx);
|
return stmtBindBatch(stmt, bind, colIdx);
|
||||||
}
|
}
|
||||||
|
@ -748,6 +764,16 @@ int taos_stmt_affected_rows(TAOS_STMT *stmt) {
|
||||||
return stmtAffectedRows(stmt);
|
return stmtAffectedRows(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int taos_stmt_affected_rows_once(TAOS_STMT *stmt) {
|
||||||
|
if (stmt == NULL) {
|
||||||
|
tscError("NULL parameter for %s", __FUNCTION__);
|
||||||
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return stmtAffectedRowsOnce(stmt);
|
||||||
|
}
|
||||||
|
|
||||||
int taos_stmt_close(TAOS_STMT *stmt) {
|
int taos_stmt_close(TAOS_STMT *stmt) {
|
||||||
if (stmt == NULL) {
|
if (stmt == NULL) {
|
||||||
tscError("NULL parameter for %s", __FUNCTION__);
|
tscError("NULL parameter for %s", __FUNCTION__);
|
||||||
|
|
|
@ -5,14 +5,51 @@
|
||||||
#include "tdef.h"
|
#include "tdef.h"
|
||||||
|
|
||||||
int32_t stmtSwitchStatus(STscStmt* pStmt, STMT_STATUS newStatus) {
|
int32_t stmtSwitchStatus(STscStmt* pStmt, STMT_STATUS newStatus) {
|
||||||
|
int32_t code = 0;
|
||||||
|
|
||||||
switch (newStatus) {
|
switch (newStatus) {
|
||||||
case STMT_SETTBNAME:
|
case STMT_PREPARE:
|
||||||
break;
|
break;
|
||||||
|
case STMT_SETTBNAME:
|
||||||
|
if (STMT_STATUS_NE(PREPARE) && STMT_STATUS_NE(ADD_BATCH) && STMT_STATUS_NE(EXECUTE)) {
|
||||||
|
code = TSDB_CODE_TSC_STMT_API_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case STMT_SETTAGS:
|
||||||
|
if (STMT_STATUS_NE(SETTBNAME)) {
|
||||||
|
code = TSDB_CODE_TSC_STMT_API_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case STMT_FETCH_FIELDS:
|
||||||
|
if (STMT_STATUS_EQ(INIT)) {
|
||||||
|
code = TSDB_CODE_TSC_STMT_API_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case STMT_BIND:
|
||||||
|
if (STMT_STATUS_EQ(INIT) || STMT_STATUS_EQ(BIND_COL)) {
|
||||||
|
code = TSDB_CODE_TSC_STMT_API_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case STMT_BIND_COL:
|
||||||
|
if (STMT_STATUS_EQ(INIT) || STMT_STATUS_EQ(BIND)) {
|
||||||
|
code = TSDB_CODE_TSC_STMT_API_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case STMT_ADD_BATCH:
|
||||||
|
if (STMT_STATUS_NE(BIND) && STMT_STATUS_NE(BIND_COL) && STMT_STATUS_NE(FETCH_FIELDS)) {
|
||||||
|
code = TSDB_CODE_TSC_STMT_API_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case STMT_EXECUTE:
|
||||||
|
if (STMT_STATUS_NE(ADD_BATCH) && STMT_STATUS_NE(FETCH_FIELDS)) {
|
||||||
|
code = TSDB_CODE_TSC_STMT_API_ERROR;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
|
code = TSDB_CODE_TSC_APP_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//STMT_ERR_RET(TSDB_CODE_TSC_STMT_API_ERROR);
|
STMT_ERR_RET(code);
|
||||||
|
|
||||||
pStmt->sql.status = newStatus;
|
pStmt->sql.status = newStatus;
|
||||||
|
|
||||||
|
@ -69,15 +106,10 @@ int32_t stmtCacheBlock(STscStmt *pStmt) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t uid;
|
uint64_t uid = pStmt->bInfo.tbUid;
|
||||||
if (TSDB_CHILD_TABLE == pStmt->bInfo.tbType) {
|
uint64_t tuid = (TSDB_CHILD_TABLE == pStmt->bInfo.tbType) ? pStmt->bInfo.tbSuid : uid;
|
||||||
uid = pStmt->bInfo.tbSuid;
|
|
||||||
} else {
|
|
||||||
ASSERT(TSDB_NORMAL_TABLE == pStmt->bInfo.tbType);
|
|
||||||
uid = pStmt->bInfo.tbUid;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (taosHashGet(pStmt->sql.pTableCache, &uid, sizeof(uid))) {
|
if (taosHashGet(pStmt->sql.pTableCache, &tuid, sizeof(tuid))) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +123,7 @@ int32_t stmtCacheBlock(STscStmt *pStmt) {
|
||||||
.boundTags = pStmt->bInfo.boundTags,
|
.boundTags = pStmt->bInfo.boundTags,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (taosHashPut(pStmt->sql.pTableCache, &uid, sizeof(uid), &cache, sizeof(cache))) {
|
if (taosHashPut(pStmt->sql.pTableCache, &tuid, sizeof(tuid), &cache, sizeof(cache))) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,9 +181,11 @@ int32_t stmtCleanBindInfo(STscStmt* pStmt) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t stmtCleanExecInfo(STscStmt* pStmt, bool keepTable) {
|
int32_t stmtCleanExecInfo(STscStmt* pStmt, bool keepTable, bool freeRequest) {
|
||||||
taos_free_result(pStmt->exec.pRequest);
|
if (STMT_TYPE_QUERY != pStmt->sql.type || freeRequest) {
|
||||||
pStmt->exec.pRequest = NULL;
|
taos_free_result(pStmt->exec.pRequest);
|
||||||
|
pStmt->exec.pRequest = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void *pIter = taosHashIterate(pStmt->exec.pBlockHash, NULL);
|
void *pIter = taosHashIterate(pStmt->exec.pBlockHash, NULL);
|
||||||
while (pIter) {
|
while (pIter) {
|
||||||
|
@ -186,7 +220,9 @@ int32_t stmtCleanExecInfo(STscStmt* pStmt, bool keepTable) {
|
||||||
int32_t stmtCleanSQLInfo(STscStmt* pStmt) {
|
int32_t stmtCleanSQLInfo(STscStmt* pStmt) {
|
||||||
taosMemoryFree(pStmt->sql.sqlStr);
|
taosMemoryFree(pStmt->sql.sqlStr);
|
||||||
qDestroyQuery(pStmt->sql.pQuery);
|
qDestroyQuery(pStmt->sql.pQuery);
|
||||||
|
qDestroyQueryPlan(pStmt->sql.pQueryPlan);
|
||||||
|
taosArrayDestroy(pStmt->sql.nodeList);
|
||||||
|
|
||||||
void *pIter = taosHashIterate(pStmt->sql.pTableCache, NULL);
|
void *pIter = taosHashIterate(pStmt->sql.pTableCache, NULL);
|
||||||
while (pIter) {
|
while (pIter) {
|
||||||
SStmtTableCache* pCache = (SStmtTableCache*)pIter;
|
SStmtTableCache* pCache = (SStmtTableCache*)pIter;
|
||||||
|
@ -201,7 +237,7 @@ int32_t stmtCleanSQLInfo(STscStmt* pStmt) {
|
||||||
|
|
||||||
memset(&pStmt->sql, 0, sizeof(pStmt->sql));
|
memset(&pStmt->sql, 0, sizeof(pStmt->sql));
|
||||||
|
|
||||||
STMT_ERR_RET(stmtCleanExecInfo(pStmt, false));
|
STMT_ERR_RET(stmtCleanExecInfo(pStmt, false, true));
|
||||||
STMT_ERR_RET(stmtCleanBindInfo(pStmt));
|
STMT_ERR_RET(stmtCleanBindInfo(pStmt));
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -333,6 +369,13 @@ int stmtSetTbName(TAOS_STMT *stmt, const char *tbName) {
|
||||||
|
|
||||||
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_SETTBNAME));
|
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_SETTBNAME));
|
||||||
|
|
||||||
|
int32_t insert = 0;
|
||||||
|
stmtIsInsert(stmt, &insert);
|
||||||
|
if (0 == insert) {
|
||||||
|
tscError("set tb name not available for none insert statement");
|
||||||
|
STMT_ERR_RET(TSDB_CODE_TSC_STMT_API_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
if (NULL == pStmt->exec.pRequest) {
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
||||||
}
|
}
|
||||||
|
@ -349,7 +392,7 @@ int stmtSetTbName(TAOS_STMT *stmt, const char *tbName) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int stmtSetTbTags(TAOS_STMT *stmt, TAOS_BIND_v2 *tags) {
|
int stmtSetTbTags(TAOS_STMT *stmt, TAOS_MULTI_BIND *tags) {
|
||||||
STscStmt* pStmt = (STscStmt*)stmt;
|
STscStmt* pStmt = (STscStmt*)stmt;
|
||||||
|
|
||||||
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_SETTAGS));
|
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_SETTAGS));
|
||||||
|
@ -370,15 +413,7 @@ int stmtSetTbTags(TAOS_STMT *stmt, TAOS_BIND_v2 *tags) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t stmtFetchTagFields(TAOS_STMT *stmt, int32_t *fieldNum, TAOS_FIELD** fields) {
|
int32_t stmtFetchTagFields(STscStmt* pStmt, int32_t *fieldNum, TAOS_FIELD** fields) {
|
||||||
STscStmt* pStmt = (STscStmt*)stmt;
|
|
||||||
|
|
||||||
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_FETCH_TAG_FIELDS));
|
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STMT_TYPE_QUERY == pStmt->sql.type) {
|
if (STMT_TYPE_QUERY == pStmt->sql.type) {
|
||||||
tscError("invalid operation to get query tag fileds");
|
tscError("invalid operation to get query tag fileds");
|
||||||
STMT_ERR_RET(TSDB_CODE_TSC_STMT_API_ERROR);
|
STMT_ERR_RET(TSDB_CODE_TSC_STMT_API_ERROR);
|
||||||
|
@ -395,15 +430,7 @@ int32_t stmtFetchTagFields(TAOS_STMT *stmt, int32_t *fieldNum, TAOS_FIELD** fiel
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t stmtFetchColFields(TAOS_STMT *stmt, int32_t *fieldNum, TAOS_FIELD** fields) {
|
int32_t stmtFetchColFields(STscStmt* pStmt, int32_t *fieldNum, TAOS_FIELD** fields) {
|
||||||
STscStmt* pStmt = (STscStmt*)stmt;
|
|
||||||
|
|
||||||
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_FETCH_COL_FIELDS));
|
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STMT_TYPE_QUERY == pStmt->sql.type) {
|
if (STMT_TYPE_QUERY == pStmt->sql.type) {
|
||||||
tscError("invalid operation to get query column fileds");
|
tscError("invalid operation to get query column fileds");
|
||||||
STMT_ERR_RET(TSDB_CODE_TSC_STMT_API_ERROR);
|
STMT_ERR_RET(TSDB_CODE_TSC_STMT_API_ERROR);
|
||||||
|
@ -420,7 +447,7 @@ int32_t stmtFetchColFields(TAOS_STMT *stmt, int32_t *fieldNum, TAOS_FIELD** fiel
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int stmtBindBatch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind, int32_t colIdx) {
|
int stmtBindBatch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int32_t colIdx) {
|
||||||
STscStmt* pStmt = (STscStmt*)stmt;
|
STscStmt* pStmt = (STscStmt*)stmt;
|
||||||
|
|
||||||
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_BIND));
|
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_BIND));
|
||||||
|
@ -429,6 +456,11 @@ int stmtBindBatch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind, int32_t colIdx) {
|
||||||
pStmt->bInfo.needParse = false;
|
pStmt->bInfo.needParse = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pStmt->exec.pRequest && STMT_TYPE_QUERY == pStmt->sql.type && pStmt->sql.runTimes) {
|
||||||
|
taos_free_result(pStmt->exec.pRequest);
|
||||||
|
pStmt->exec.pRequest = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
if (NULL == pStmt->exec.pRequest) {
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
||||||
}
|
}
|
||||||
|
@ -437,6 +469,16 @@ int stmtBindBatch(TAOS_STMT *stmt, TAOS_BIND_v2 *bind, int32_t colIdx) {
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (STMT_TYPE_QUERY == pStmt->sql.type) {
|
||||||
|
if (NULL == pStmt->sql.pQueryPlan) {
|
||||||
|
STMT_ERR_RET(getQueryPlan(pStmt->exec.pRequest, pStmt->sql.pQuery, &pStmt->sql.nodeList));
|
||||||
|
pStmt->sql.pQueryPlan = pStmt->exec.pRequest->body.pDag;
|
||||||
|
pStmt->exec.pRequest->body.pDag = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
STMT_RET(qStmtBindParam(pStmt->sql.pQueryPlan, bind, colIdx));
|
||||||
|
}
|
||||||
|
|
||||||
STableDataBlocks **pDataBlock = (STableDataBlocks**)taosHashGet(pStmt->exec.pBlockHash, (const char*)&pStmt->bInfo.tbUid, sizeof(pStmt->bInfo.tbUid));
|
STableDataBlocks **pDataBlock = (STableDataBlocks**)taosHashGet(pStmt->exec.pBlockHash, (const char*)&pStmt->bInfo.tbUid, sizeof(pStmt->bInfo.tbUid));
|
||||||
if (NULL == pDataBlock) {
|
if (NULL == pDataBlock) {
|
||||||
tscError("table uid %" PRIx64 "not found in exec blockHash", pStmt->bInfo.tbUid);
|
tscError("table uid %" PRIx64 "not found in exec blockHash", pStmt->bInfo.tbUid);
|
||||||
|
@ -480,10 +522,13 @@ int stmtExec(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_EXECUTE));
|
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_EXECUTE));
|
||||||
|
|
||||||
STMT_ERR_RET(qBuildStmtOutput(pStmt->sql.pQuery, pStmt->exec.pVgHash, pStmt->exec.pBlockHash));
|
if (STMT_TYPE_QUERY == pStmt->sql.type) {
|
||||||
|
scheduleQuery(pStmt->exec.pRequest, pStmt->sql.pQueryPlan, pStmt->sql.nodeList);
|
||||||
launchQueryImpl(pStmt->exec.pRequest, pStmt->sql.pQuery, TSDB_CODE_SUCCESS, true);
|
} else {
|
||||||
|
STMT_ERR_RET(qBuildStmtOutput(pStmt->sql.pQuery, pStmt->exec.pVgHash, pStmt->exec.pBlockHash));
|
||||||
|
launchQueryImpl(pStmt->exec.pRequest, pStmt->sql.pQuery, TSDB_CODE_SUCCESS, true);
|
||||||
|
}
|
||||||
|
|
||||||
STMT_ERR_JRET(pStmt->exec.pRequest->code);
|
STMT_ERR_JRET(pStmt->exec.pRequest->code);
|
||||||
|
|
||||||
pStmt->exec.affectedRows = taos_affected_rows(pStmt->exec.pRequest);
|
pStmt->exec.affectedRows = taos_affected_rows(pStmt->exec.pRequest);
|
||||||
|
@ -491,7 +536,7 @@ int stmtExec(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
_return:
|
_return:
|
||||||
|
|
||||||
stmtCleanExecInfo(pStmt, (code ? false : true));
|
stmtCleanExecInfo(pStmt, (code ? false : true), false);
|
||||||
|
|
||||||
++pStmt->sql.runTimes;
|
++pStmt->sql.runTimes;
|
||||||
|
|
||||||
|
@ -523,6 +568,10 @@ int stmtAffectedRows(TAOS_STMT *stmt) {
|
||||||
return ((STscStmt*)stmt)->affectedRows;
|
return ((STscStmt*)stmt)->affectedRows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int stmtAffectedRowsOnce(TAOS_STMT *stmt) {
|
||||||
|
return ((STscStmt*)stmt)->exec.affectedRows;
|
||||||
|
}
|
||||||
|
|
||||||
int stmtIsInsert(TAOS_STMT *stmt, int *insert) {
|
int stmtIsInsert(TAOS_STMT *stmt, int *insert) {
|
||||||
STscStmt* pStmt = (STscStmt*)stmt;
|
STscStmt* pStmt = (STscStmt*)stmt;
|
||||||
|
|
||||||
|
@ -536,13 +585,38 @@ int stmtIsInsert(TAOS_STMT *stmt, int *insert) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int stmtGetParamNum(TAOS_STMT *stmt, int *nums) {
|
int stmtGetParamNum(TAOS_STMT *stmt, int *nums) {
|
||||||
STMT_ERR_RET(stmtFetchColFields(stmt, nums, NULL));
|
STscStmt* pStmt = (STscStmt*)stmt;
|
||||||
|
|
||||||
|
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_FETCH_FIELDS));
|
||||||
|
|
||||||
|
if (pStmt->bInfo.needParse) {
|
||||||
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (STMT_TYPE_QUERY == pStmt->sql.type) {
|
||||||
|
if (NULL == pStmt->sql.pQueryPlan) {
|
||||||
|
STMT_ERR_RET(getQueryPlan(pStmt->exec.pRequest, pStmt->sql.pQuery, &pStmt->sql.nodeList));
|
||||||
|
pStmt->sql.pQueryPlan = pStmt->exec.pRequest->body.pDag;
|
||||||
|
pStmt->exec.pRequest->body.pDag = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*nums = (pStmt->sql.pQueryPlan->pPlaceholderValues) ? pStmt->sql.pQueryPlan->pPlaceholderValues->length : 0;
|
||||||
|
} else {
|
||||||
|
STMT_ERR_RET(stmtFetchColFields(stmt, nums, NULL));
|
||||||
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS_RES *stmtUseResult(TAOS_STMT *stmt) {
|
TAOS_RES *stmtUseResult(TAOS_STMT *stmt) {
|
||||||
return NULL;
|
STscStmt* pStmt = (STscStmt*)stmt;
|
||||||
|
|
||||||
|
if (STMT_TYPE_QUERY != pStmt->sql.type) {
|
||||||
|
tscError("useResult only for query statement");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pStmt->exec.pRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1257,7 +1257,7 @@ int32_t qBuildStmtOutput(SQuery* pQuery, SHashObj* pVgHash, SHashObj* pBlockHash
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t qBindStmtTagsValue(void *pBlock, void *boundTags, int64_t suid, SName *pName, TAOS_BIND_v2 *bind, char *msgBuf, int32_t msgBufLen){
|
int32_t qBindStmtTagsValue(void *pBlock, void *boundTags, int64_t suid, SName *pName, TAOS_MULTI_BIND *bind, char *msgBuf, int32_t msgBufLen){
|
||||||
STableDataBlocks *pDataBlock = (STableDataBlocks *)pBlock;
|
STableDataBlocks *pDataBlock = (STableDataBlocks *)pBlock;
|
||||||
SMsgBuf pBuf = {.buf = msgBuf, .len = msgBufLen};
|
SMsgBuf pBuf = {.buf = msgBuf, .len = msgBufLen};
|
||||||
SParsedDataColInfo* tags = (SParsedDataColInfo*)boundTags;
|
SParsedDataColInfo* tags = (SParsedDataColInfo*)boundTags;
|
||||||
|
@ -1308,7 +1308,7 @@ int32_t qBindStmtTagsValue(void *pBlock, void *boundTags, int64_t suid, SName *p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t qBindStmtColsValue(void *pBlock, TAOS_BIND_v2 *bind, char *msgBuf, int32_t msgBufLen) {
|
int32_t qBindStmtColsValue(void *pBlock, TAOS_MULTI_BIND *bind, char *msgBuf, int32_t msgBufLen) {
|
||||||
STableDataBlocks *pDataBlock = (STableDataBlocks *)pBlock;
|
STableDataBlocks *pDataBlock = (STableDataBlocks *)pBlock;
|
||||||
SSchema* pSchema = getTableColumnSchema(pDataBlock->pTableMeta);
|
SSchema* pSchema = getTableColumnSchema(pDataBlock->pTableMeta);
|
||||||
int32_t extendedRowSize = getExtendedRowSize(pDataBlock);
|
int32_t extendedRowSize = getExtendedRowSize(pDataBlock);
|
||||||
|
@ -1382,7 +1382,7 @@ int32_t qBindStmtColsValue(void *pBlock, TAOS_BIND_v2 *bind, char *msgBuf, int32
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t qBindStmtSingleColValue(void *pBlock, TAOS_BIND_v2 *bind, char *msgBuf, int32_t msgBufLen, int32_t colIdx, int32_t rowNum) {
|
int32_t qBindStmtSingleColValue(void *pBlock, TAOS_MULTI_BIND *bind, char *msgBuf, int32_t msgBufLen, int32_t colIdx, int32_t rowNum) {
|
||||||
STableDataBlocks *pDataBlock = (STableDataBlocks *)pBlock;
|
STableDataBlocks *pDataBlock = (STableDataBlocks *)pBlock;
|
||||||
SSchema* pSchema = getTableColumnSchema(pDataBlock->pTableMeta);
|
SSchema* pSchema = getTableColumnSchema(pDataBlock->pTableMeta);
|
||||||
int32_t extendedRowSize = getExtendedRowSize(pDataBlock);
|
int32_t extendedRowSize = getExtendedRowSize(pDataBlock);
|
||||||
|
|
|
@ -101,8 +101,8 @@ int32_t qSetSubplanExecutionNode(SSubplan* subplan, int32_t groupId, SDownstream
|
||||||
return setSubplanExecutionNode(subplan->pNode, groupId, pSource);
|
return setSubplanExecutionNode(subplan->pNode, groupId, pSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t setValueByBindParam(SValueNode* pVal, TAOS_BIND_v2* pParam) {
|
static int32_t setValueByBindParam(SValueNode* pVal, TAOS_MULTI_BIND* pParam) {
|
||||||
if (1 == *(pParam->is_null)) {
|
if (pParam->is_null && 1 == *(pParam->is_null)) {
|
||||||
pVal->node.resType.type = TSDB_DATA_TYPE_NULL;
|
pVal->node.resType.type = TSDB_DATA_TYPE_NULL;
|
||||||
pVal->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_NULL].bytes;
|
pVal->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_NULL].bytes;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -168,11 +168,17 @@ static int32_t setValueByBindParam(SValueNode* pVal, TAOS_BIND_v2* pParam) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t qStmtBindParam(SQueryPlan* pPlan, TAOS_BIND_v2* pParams) {
|
int32_t qStmtBindParam(SQueryPlan* pPlan, TAOS_MULTI_BIND* pParams, int32_t colIdx) {
|
||||||
int32_t index = 0;
|
if (colIdx < 0) {
|
||||||
SNode* pNode = NULL;
|
int32_t index = 0;
|
||||||
FOREACH(pNode, pPlan->pPlaceholderValues) {
|
SNode* pNode = NULL;
|
||||||
setValueByBindParam((SValueNode*)pNode, pParams + index);
|
|
||||||
|
FOREACH(pNode, pPlan->pPlaceholderValues) {
|
||||||
|
setValueByBindParam((SValueNode*)pNode, pParams + index);
|
||||||
|
++index;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setValueByBindParam((SValueNode*)nodesListGetNode(pPlan->pPlaceholderValues, colIdx), pParams);
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void bindParam(int32_t val) {
|
void bindParam(int32_t val) {
|
||||||
TAOS_BIND_v2* pBind = pBindParams_ + paramNo_++;
|
TAOS_MULTI_BIND* pBind = pBindParams_ + paramNo_++;
|
||||||
pBind->buffer_type = TSDB_DATA_TYPE_INT;
|
pBind->buffer_type = TSDB_DATA_TYPE_INT;
|
||||||
pBind->num = 1;
|
pBind->num = 1;
|
||||||
pBind->buffer_length = sizeof(int32_t);
|
pBind->buffer_length = sizeof(int32_t);
|
||||||
|
@ -43,7 +43,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TAOS_BIND_v2* pBindParams_;
|
TAOS_MULTI_BIND* pBindParams_;
|
||||||
int32_t paramNo_;
|
int32_t paramNo_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3774,11 +3774,12 @@ bool filterExecute(SFilterInfo *info, SSDataBlock *pSrc, int8_t** p, SColumnData
|
||||||
SDataType type = {.type = TSDB_DATA_TYPE_BOOL, .bytes = sizeof(bool)};
|
SDataType type = {.type = TSDB_DATA_TYPE_BOOL, .bytes = sizeof(bool)};
|
||||||
output.columnData = createColumnInfoData(&type, pSrc->info.rows);
|
output.columnData = createColumnInfoData(&type, pSrc->info.rows);
|
||||||
|
|
||||||
*p = (int8_t *)output.columnData->pData;
|
|
||||||
SArray *pList = taosArrayInit(1, POINTER_BYTES);
|
SArray *pList = taosArrayInit(1, POINTER_BYTES);
|
||||||
taosArrayPush(pList, &pSrc);
|
taosArrayPush(pList, &pSrc);
|
||||||
|
|
||||||
FLT_ERR_RET(scalarCalculate(info->sclCtx.node, pList, &output));
|
FLT_ERR_RET(scalarCalculate(info->sclCtx.node, pList, &output));
|
||||||
|
*p = (int8_t *)output.columnData->pData;
|
||||||
|
|
||||||
taosArrayDestroy(pList);
|
taosArrayDestroy(pList);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ typedef struct {
|
||||||
char* binaryData;
|
char* binaryData;
|
||||||
char* isNull;
|
char* isNull;
|
||||||
int32_t* binaryLen;
|
int32_t* binaryLen;
|
||||||
TAOS_BIND_v2* pBind;
|
TAOS_MULTI_BIND* pBind;
|
||||||
char* sql;
|
char* sql;
|
||||||
int32_t* colTypes;
|
int32_t* colTypes;
|
||||||
int32_t colNum;
|
int32_t colNum;
|
||||||
|
@ -163,7 +163,7 @@ static int64_t taosGetTimestampUs() {
|
||||||
return (int64_t)systemTime.tv_sec * 1000000L + (int64_t)systemTime.tv_usec;
|
return (int64_t)systemTime.tv_sec * 1000000L + (int64_t)systemTime.tv_usec;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool colExists(TAOS_BIND_v2* pBind, int32_t dataType) {
|
bool colExists(TAOS_MULTI_BIND* pBind, int32_t dataType) {
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
if (0 == pBind[i].buffer_type) {
|
if (0 == pBind[i].buffer_type) {
|
||||||
|
@ -393,7 +393,7 @@ int32_t prepareData(BindData *data) {
|
||||||
data->colNum = 0;
|
data->colNum = 0;
|
||||||
data->colTypes = taosMemoryCalloc(30, sizeof(int32_t));
|
data->colTypes = taosMemoryCalloc(30, sizeof(int32_t));
|
||||||
data->sql = taosMemoryCalloc(1, 1024);
|
data->sql = taosMemoryCalloc(1, 1024);
|
||||||
data->pBind = taosMemoryCalloc((allRowNum/gCurCase->bindRowNum)*gCurCase->bindColNum, sizeof(TAOS_BIND_v2));
|
data->pBind = taosMemoryCalloc((allRowNum/gCurCase->bindRowNum)*gCurCase->bindColNum, sizeof(TAOS_MULTI_BIND));
|
||||||
data->tsData = taosMemoryMalloc(allRowNum * sizeof(int64_t));
|
data->tsData = taosMemoryMalloc(allRowNum * sizeof(int64_t));
|
||||||
data->boolData = taosMemoryMalloc(allRowNum * sizeof(bool));
|
data->boolData = taosMemoryMalloc(allRowNum * sizeof(bool));
|
||||||
data->tinyData = taosMemoryMalloc(allRowNum * sizeof(int8_t));
|
data->tinyData = taosMemoryMalloc(allRowNum * sizeof(int8_t));
|
||||||
|
@ -463,7 +463,7 @@ void destroyData(BindData *data) {
|
||||||
taosMemoryFree(data->colTypes);
|
taosMemoryFree(data->colTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t bpBindParam(TAOS_STMT *stmt, TAOS_BIND_v2 *bind) {
|
int32_t bpBindParam(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind) {
|
||||||
static int32_t n = 0;
|
static int32_t n = 0;
|
||||||
|
|
||||||
if (gCurCase->bindRowNum > 1) {
|
if (gCurCase->bindRowNum > 1) {
|
||||||
|
@ -951,7 +951,7 @@ int stmt_funcb_autoctb1(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -1164,7 +1164,7 @@ int stmt_funcb_autoctb2(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -1378,7 +1378,7 @@ int stmt_funcb_autoctb3(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -1569,7 +1569,7 @@ int stmt_funcb_autoctb4(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*5);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*5);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -1722,7 +1722,7 @@ int stmt_funcb_autoctb_e1(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -1911,7 +1911,7 @@ int stmt_funcb_autoctb_e2(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -2128,7 +2128,7 @@ int stmt_funcb_autoctb_e3(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -2343,7 +2343,7 @@ int stmt_funcb_autoctb_e4(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -2570,7 +2570,7 @@ int stmt_funcb_autoctb_e5(TAOS_STMT *stmt) {
|
||||||
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
int *lb = taosMemoryMalloc(10 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 1*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
|
||||||
|
|
||||||
// int one_null = 1;
|
// int one_null = 1;
|
||||||
int one_not_null = 0;
|
int one_not_null = 0;
|
||||||
|
@ -2791,7 +2791,7 @@ int stmt_funcb4(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 900000*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 900000*10);
|
||||||
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
|
|
||||||
|
@ -2950,7 +2950,7 @@ int stmt_funcb5(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
int *lb = taosMemoryMalloc(18000 * sizeof(int));
|
int *lb = taosMemoryMalloc(18000 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 3000*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 3000*10);
|
||||||
char* is_null = taosMemoryMalloc(sizeof(char) * 18000);
|
char* is_null = taosMemoryMalloc(sizeof(char) * 18000);
|
||||||
char* no_null = taosMemoryMalloc(sizeof(char) * 18000);
|
char* no_null = taosMemoryMalloc(sizeof(char) * 18000);
|
||||||
|
|
||||||
|
@ -3094,7 +3094,7 @@ int stmt_funcb_ssz1(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
int *lb = taosMemoryMalloc(30000 * sizeof(int));
|
int *lb = taosMemoryMalloc(30000 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 3000*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 3000*10);
|
||||||
char* no_null = taosMemoryMalloc(sizeof(int) * 200000);
|
char* no_null = taosMemoryMalloc(sizeof(int) * 200000);
|
||||||
|
|
||||||
for (int i = 0; i < 30000; ++i) {
|
for (int i = 0; i < 30000; ++i) {
|
||||||
|
@ -3185,7 +3185,7 @@ int stmt_funcb_s1(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 900000*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 900000*10);
|
||||||
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
|
|
||||||
|
@ -3347,7 +3347,7 @@ int stmt_funcb_sc1(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 900000*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 900000*10);
|
||||||
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
|
|
||||||
|
@ -3505,7 +3505,7 @@ int stmt_funcb_sc2(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 900000*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 900000*10);
|
||||||
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
|
|
||||||
|
@ -3665,7 +3665,7 @@ int stmt_funcb_sc3(TAOS_STMT *stmt) {
|
||||||
|
|
||||||
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
int *lb = taosMemoryMalloc(60 * sizeof(int));
|
||||||
|
|
||||||
TAOS_BIND_v2 *params = taosMemoryCalloc(1, sizeof(TAOS_BIND_v2) * 60*10);
|
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 60*10);
|
||||||
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* is_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
char* no_null = taosMemoryMalloc(sizeof(char) * 60);
|
||||||
|
|
||||||
|
@ -4147,6 +4147,7 @@ void prepare(TAOS *taos, int32_t colNum, int32_t *colList, int autoCreate) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
|
sleep(2); //TODO REMOVE IT
|
||||||
|
|
||||||
result = taos_query(taos, "use demo");
|
result = taos_query(taos, "use demo");
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
|
|
Loading…
Reference in New Issue