convert TAOS_FIELD_E to TAOS_FIELD_ALL, to prevent modifications to the original API
This commit is contained in:
parent
aa3c79100b
commit
3895a7707a
|
@ -95,13 +95,21 @@ typedef struct taosField {
|
||||||
} TAOS_FIELD;
|
} TAOS_FIELD;
|
||||||
|
|
||||||
typedef struct TAOS_FIELD_E {
|
typedef struct TAOS_FIELD_E {
|
||||||
|
char name[65];
|
||||||
|
int8_t type;
|
||||||
|
uint8_t precision;
|
||||||
|
uint8_t scale;
|
||||||
|
int32_t bytes;
|
||||||
|
} TAOS_FIELD_E;
|
||||||
|
|
||||||
|
typedef struct TAOS_FIELD_ALL {
|
||||||
char name[65];
|
char name[65];
|
||||||
int8_t type;
|
int8_t type;
|
||||||
uint8_t precision;
|
uint8_t precision;
|
||||||
uint8_t scale;
|
uint8_t scale;
|
||||||
int32_t bytes;
|
int32_t bytes;
|
||||||
TAOS_FIELD_T field_type;
|
TAOS_FIELD_T field_type;
|
||||||
} TAOS_FIELD_E;
|
} TAOS_FIELD_ALL;
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
#define DLL_EXPORT __declspec(dllexport)
|
#define DLL_EXPORT __declspec(dllexport)
|
||||||
|
@ -233,8 +241,9 @@ DLL_EXPORT int taos_stmt2_exec(TAOS_STMT2 *stmt, int *affected_rows);
|
||||||
DLL_EXPORT int taos_stmt2_close(TAOS_STMT2 *stmt);
|
DLL_EXPORT int taos_stmt2_close(TAOS_STMT2 *stmt);
|
||||||
DLL_EXPORT int taos_stmt2_is_insert(TAOS_STMT2 *stmt, int *insert);
|
DLL_EXPORT int taos_stmt2_is_insert(TAOS_STMT2 *stmt, int *insert);
|
||||||
DLL_EXPORT int taos_stmt2_get_fields(TAOS_STMT2 *stmt, TAOS_FIELD_T field_type, int *count, TAOS_FIELD_E **fields);
|
DLL_EXPORT int taos_stmt2_get_fields(TAOS_STMT2 *stmt, TAOS_FIELD_T field_type, int *count, TAOS_FIELD_E **fields);
|
||||||
DLL_EXPORT int taos_stmt2_get_all_fields(TAOS_STMT2 *stmt, int *count, TAOS_FIELD_E **fields);
|
DLL_EXPORT int taos_stmt2_get_all_fields(TAOS_STMT2 *stmt, int *count, TAOS_FIELD_ALL **fields);
|
||||||
DLL_EXPORT void taos_stmt2_free_fields(TAOS_STMT2 *stmt, TAOS_FIELD_E *fields);
|
DLL_EXPORT void taos_stmt2_free_fields(TAOS_STMT2 *stmt, TAOS_FIELD_E *fields);
|
||||||
|
DLL_EXPORT void taos_stmt2_free_all_fields(TAOS_STMT2 *stmt, TAOS_FIELD_ALL *fields);
|
||||||
DLL_EXPORT TAOS_RES *taos_stmt2_result(TAOS_STMT2 *stmt);
|
DLL_EXPORT TAOS_RES *taos_stmt2_result(TAOS_STMT2 *stmt);
|
||||||
DLL_EXPORT char *taos_stmt2_error(TAOS_STMT2 *stmt);
|
DLL_EXPORT char *taos_stmt2_error(TAOS_STMT2 *stmt);
|
||||||
|
|
||||||
|
|
|
@ -222,6 +222,7 @@ int stmtSetTbTags2(TAOS_STMT2 *stmt, TAOS_STMT2_BIND *tags);
|
||||||
int stmtBindBatch2(TAOS_STMT2 *stmt, TAOS_STMT2_BIND *bind, int32_t colIdx);
|
int stmtBindBatch2(TAOS_STMT2 *stmt, TAOS_STMT2_BIND *bind, int32_t colIdx);
|
||||||
int stmtGetTagFields2(TAOS_STMT2 *stmt, int *nums, TAOS_FIELD_E **fields);
|
int stmtGetTagFields2(TAOS_STMT2 *stmt, int *nums, TAOS_FIELD_E **fields);
|
||||||
int stmtGetColFields2(TAOS_STMT2 *stmt, int *nums, TAOS_FIELD_E **fields);
|
int stmtGetColFields2(TAOS_STMT2 *stmt, int *nums, TAOS_FIELD_E **fields);
|
||||||
|
int stmtGetColFieldsALL2(TAOS_STMT2 *stmt, int *nums, TAOS_FIELD_ALL **fields);
|
||||||
int stmtGetParamNum2(TAOS_STMT2 *stmt, int *nums);
|
int stmtGetParamNum2(TAOS_STMT2 *stmt, int *nums);
|
||||||
int stmtGetParamTbName(TAOS_STMT2 *stmt, int *nums);
|
int stmtGetParamTbName(TAOS_STMT2 *stmt, int *nums);
|
||||||
int stmtIsInsert2(TAOS_STMT2 *stmt, int *insert);
|
int stmtIsInsert2(TAOS_STMT2 *stmt, int *insert);
|
||||||
|
|
|
@ -2102,14 +2102,14 @@ int taos_stmt2_get_fields(TAOS_STMT2 *stmt, TAOS_FIELD_T field_type, int *count,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int taos_stmt2_get_all_fields(TAOS_STMT2 *stmt, int *count, TAOS_FIELD_E **fields) {
|
int taos_stmt2_get_all_fields(TAOS_STMT2 *stmt, int *count, TAOS_FIELD_ALL **fields) {
|
||||||
if (stmt == NULL || count == NULL) {
|
if (stmt == NULL || count == NULL) {
|
||||||
tscError("NULL parameter for %s", __FUNCTION__);
|
tscError("NULL parameter for %s", __FUNCTION__);
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
return stmtGetColFields2(stmt, count, fields);
|
return stmtGetColFieldsALL2(stmt, count, fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
void taos_stmt2_free_fields(TAOS_STMT2 *stmt, TAOS_FIELD_E *fields) {
|
void taos_stmt2_free_fields(TAOS_STMT2 *stmt, TAOS_FIELD_E *fields) {
|
||||||
|
@ -2118,6 +2118,12 @@ void taos_stmt2_free_fields(TAOS_STMT2 *stmt, TAOS_FIELD_E *fields) {
|
||||||
taosMemoryFree(fields);
|
taosMemoryFree(fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DLL_EXPORT void taos_stmt2_free_all_fields(TAOS_STMT2 *stmt, TAOS_FIELD_ALL *fields) {
|
||||||
|
(void)stmt;
|
||||||
|
if (!fields) return;
|
||||||
|
taosMemoryFree(fields);
|
||||||
|
}
|
||||||
|
|
||||||
TAOS_RES *taos_stmt2_result(TAOS_STMT2 *stmt) {
|
TAOS_RES *taos_stmt2_result(TAOS_STMT2 *stmt) {
|
||||||
if (stmt == NULL) {
|
if (stmt == NULL) {
|
||||||
tscError("NULL parameter for %s", __FUNCTION__);
|
tscError("NULL parameter for %s", __FUNCTION__);
|
||||||
|
|
|
@ -1069,7 +1069,7 @@ static int stmtFetchColFields2(STscStmt2* pStmt, int32_t* fieldNum, TAOS_FIELD_E
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stmtFetchFields2(STscStmt2* pStmt, int32_t* fieldNum, TAOS_FIELD_E** fields) {
|
static int stmtFetchFields2(STscStmt2* pStmt, int32_t* fieldNum, TAOS_FIELD_ALL** fields) {
|
||||||
SBoundColInfo* tags = (SBoundColInfo*)pStmt->bInfo.boundTags;
|
SBoundColInfo* tags = (SBoundColInfo*)pStmt->bInfo.boundTags;
|
||||||
STableMeta* meta = ((SVnodeModifyOpStmt*)(pStmt->sql.pQuery->pRoot))->pTableMeta;
|
STableMeta* meta = ((SVnodeModifyOpStmt*)(pStmt->sql.pQuery->pRoot))->pTableMeta;
|
||||||
if (tags == NULL || meta == NULL || (meta->schema == NULL && tags->numOfBound != 0)) {
|
if (tags == NULL || meta == NULL || (meta->schema == NULL && tags->numOfBound != 0)) {
|
||||||
|
@ -1077,7 +1077,7 @@ static int stmtFetchFields2(STscStmt2* pStmt, int32_t* fieldNum, TAOS_FIELD_E**
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fields != NULL) {
|
if (fields != NULL) {
|
||||||
*fields = taosMemoryCalloc(tags->numOfBound, sizeof(TAOS_FIELD_E));
|
*fields = taosMemoryCalloc(tags->numOfBound, sizeof(TAOS_FIELD_ALL));
|
||||||
if (NULL == *fields) {
|
if (NULL == *fields) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
@ -1886,6 +1886,47 @@ int stmtGetColFields2(TAOS_STMT2* stmt, int* nums, TAOS_FIELD_E** fields) {
|
||||||
|
|
||||||
STMT_ERRI_JRET(stmtFetchColFields2(stmt, nums, fields));
|
STMT_ERRI_JRET(stmtFetchColFields2(stmt, nums, fields));
|
||||||
|
|
||||||
|
_return:
|
||||||
|
|
||||||
|
pStmt->errCode = preCode;
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
int stmtGetColFieldsALL2(TAOS_STMT2* stmt, int* nums, TAOS_FIELD_ALL** fields) {
|
||||||
|
int32_t code = 0;
|
||||||
|
STscStmt2* pStmt = (STscStmt2*)stmt;
|
||||||
|
int32_t preCode = pStmt->errCode;
|
||||||
|
|
||||||
|
STMT_DLOG_E("start to get col fields");
|
||||||
|
|
||||||
|
if (pStmt->errCode != TSDB_CODE_SUCCESS) {
|
||||||
|
return pStmt->errCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (STMT_TYPE_QUERY == pStmt->sql.type) {
|
||||||
|
STMT_ERRI_JRET(TSDB_CODE_TSC_STMT_API_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
STMT_ERRI_JRET(stmtSwitchStatus(pStmt, STMT_FETCH_FIELDS));
|
||||||
|
|
||||||
|
if (pStmt->bInfo.needParse && pStmt->sql.runTimes && pStmt->sql.type > 0 &&
|
||||||
|
STMT_TYPE_MULTI_INSERT != pStmt->sql.type) {
|
||||||
|
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;
|
||||||
|
STMT_ERR_RET(stmtCreateRequest(pStmt));
|
||||||
|
}
|
||||||
|
|
||||||
|
STMT_ERRI_JRET(stmtCreateRequest(pStmt));
|
||||||
|
|
||||||
|
if (pStmt->bInfo.needParse) {
|
||||||
|
STMT_ERRI_JRET(stmtParseSql(pStmt));
|
||||||
|
}
|
||||||
|
|
||||||
_return:
|
_return:
|
||||||
|
|
||||||
pStmt->errCode = preCode;
|
pStmt->errCode = preCode;
|
||||||
|
|
|
@ -885,7 +885,7 @@ _return:
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t buildBoundFields(int32_t numOfBound, int16_t* boundColumns, SSchema* pSchema, int32_t* fieldNum,
|
int32_t buildBoundFields(int32_t numOfBound, int16_t* boundColumns, SSchema* pSchema, int32_t* fieldNum,
|
||||||
TAOS_FIELD_E** fields, uint8_t timePrec, TAOS_FIELD_T fieldType) {
|
TAOS_FIELD_E** fields, uint8_t timePrec) {
|
||||||
if (fields != NULL) {
|
if (fields != NULL) {
|
||||||
*fields = taosMemoryCalloc(numOfBound, sizeof(TAOS_FIELD_E));
|
*fields = taosMemoryCalloc(numOfBound, sizeof(TAOS_FIELD_E));
|
||||||
if (NULL == *fields) {
|
if (NULL == *fields) {
|
||||||
|
@ -900,7 +900,6 @@ int32_t buildBoundFields(int32_t numOfBound, int16_t* boundColumns, SSchema* pSc
|
||||||
for (int32_t i = 0; i < numOfBound; ++i) {
|
for (int32_t i = 0; i < numOfBound; ++i) {
|
||||||
schema = &pSchema[boundColumns[i]];
|
schema = &pSchema[boundColumns[i]];
|
||||||
strcpy((*fields)[i].name, schema->name);
|
strcpy((*fields)[i].name, schema->name);
|
||||||
(*fields)[i].field_type = schema->type;
|
|
||||||
(*fields)[i].type = schema->type;
|
(*fields)[i].type = schema->type;
|
||||||
(*fields)[i].bytes = schema->bytes;
|
(*fields)[i].bytes = schema->bytes;
|
||||||
}
|
}
|
||||||
|
@ -930,7 +929,7 @@ int32_t qBuildStmtTagFields(void* pBlock, void* boundTags, int32_t* fieldNum, TA
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_CODE(buildBoundFields(tags->numOfBound, tags->pColIndex, pSchema, fieldNum, fields, 0, TAOS_FIELD_TAG));
|
CHECK_CODE(buildBoundFields(tags->numOfBound, tags->pColIndex, pSchema, fieldNum, fields, 0));
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -948,7 +947,7 @@ int32_t qBuildStmtColFields(void* pBlock, int32_t* fieldNum, TAOS_FIELD_E** fiel
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_CODE(buildBoundFields(pDataBlock->boundColsInfo.numOfBound, pDataBlock->boundColsInfo.pColIndex, pSchema,
|
CHECK_CODE(buildBoundFields(pDataBlock->boundColsInfo.numOfBound, pDataBlock->boundColsInfo.pColIndex, pSchema,
|
||||||
fieldNum, fields, pDataBlock->pMeta->tableInfo.precision, TAOS_FIELD_COL));
|
fieldNum, fields, pDataBlock->pMeta->tableInfo.precision));
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,8 @@ void do_stmt(TAOS *taos) {
|
||||||
"int, t2 binary(10))");
|
"int, t2 binary(10))");
|
||||||
|
|
||||||
TAOS_STMT2_OPTION option = {0};
|
TAOS_STMT2_OPTION option = {0};
|
||||||
TAOS_STMT2 *stmt = taos_stmt2_init(taos, &option);
|
TAOS_STMT2 *stmt = taos_stmt2_init(taos, &option);
|
||||||
const char *sql = "insert into db.stb(t1,t2,ts,b,tbname) values(?,?,?,?,?)";
|
const char *sql = "insert into db.stb(t1,t2,ts,b,tbname) values(?,?,?,?,?)";
|
||||||
|
|
||||||
int code = taos_stmt2_prepare(stmt, sql, 0);
|
int code = taos_stmt2_prepare(stmt, sql, 0);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
|
@ -35,19 +35,18 @@ void do_stmt(TAOS *taos) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fieldNum = 0;
|
int fieldNum = 0;
|
||||||
TAOS_FIELD_E *pFields = NULL;
|
TAOS_FIELD_ALL *pFields = NULL;
|
||||||
code = taos_stmt2_get_all_fields(stmt, &fieldNum, &pFields);
|
code = taos_stmt2_get_all_fields(stmt, &fieldNum, &pFields);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("failed get col,ErrCode: 0x%x, ErrMessage: %s.\n", code, taos_stmt2_error(stmt));
|
printf("failed get col,ErrCode: 0x%x, ErrMessage: %s.\n", code, taos_stmt2_error(stmt));
|
||||||
} else {
|
} else {
|
||||||
printf("col nums:%d\n", fieldNum);
|
printf("col nums:%d\n", fieldNum);
|
||||||
for(int i = 0; i < fieldNum; i++) {
|
for (int i = 0; i < fieldNum; i++) {
|
||||||
printf("field[%d]: %s,type:%d\n", i, pFields[i].name,pFields[i].field_type);
|
printf("field[%d]: %s,type:%d\n", i, pFields[i].name, pFields[i].field_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
taos_stmt2_close(stmt);
|
taos_stmt2_close(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue