Merge pull request #21542 from taosdata/fix/TD-24506
enh: stmt column length validation
This commit is contained in:
commit
1bea5a53c2
|
@ -145,7 +145,7 @@ int32_t tColDataCopy(SColData *pColDataFrom, SColData *pColData, xMallocFn xMall
|
||||||
extern void (*tColDataCalcSMA[])(SColData *pColData, int64_t *sum, int64_t *max, int64_t *min, int16_t *numOfNull);
|
extern void (*tColDataCalcSMA[])(SColData *pColData, int64_t *sum, int64_t *max, int64_t *min, int16_t *numOfNull);
|
||||||
|
|
||||||
// for stmt bind
|
// for stmt bind
|
||||||
int32_t tColDataAddValueByBind(SColData *pColData, TAOS_MULTI_BIND *pBind);
|
int32_t tColDataAddValueByBind(SColData *pColData, TAOS_MULTI_BIND *pBind, int32_t buffMaxLen);
|
||||||
void tColDataSortMerge(SArray *colDataArr);
|
void tColDataSortMerge(SArray *colDataArr);
|
||||||
|
|
||||||
// for raw block
|
// for raw block
|
||||||
|
|
|
@ -2503,7 +2503,7 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tColDataAddValueByBind(SColData *pColData, TAOS_MULTI_BIND *pBind) {
|
int32_t tColDataAddValueByBind(SColData *pColData, TAOS_MULTI_BIND *pBind, int32_t buffMaxLen) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
if (!(pBind->num == 1 && pBind->is_null && *pBind->is_null)) {
|
if (!(pBind->num == 1 && pBind->is_null && *pBind->is_null)) {
|
||||||
|
@ -2515,6 +2515,9 @@ int32_t tColDataAddValueByBind(SColData *pColData, TAOS_MULTI_BIND *pBind) {
|
||||||
if (pBind->is_null && pBind->is_null[i]) {
|
if (pBind->is_null && pBind->is_null[i]) {
|
||||||
code = tColDataAppendValueImpl[pColData->flag][CV_FLAG_NULL](pColData, NULL, 0);
|
code = tColDataAppendValueImpl[pColData->flag][CV_FLAG_NULL](pColData, NULL, 0);
|
||||||
if (code) goto _exit;
|
if (code) goto _exit;
|
||||||
|
} else if (pBind->length[i] > buffMaxLen) {
|
||||||
|
uError("var data length too big, len:%d, max:%d", pBind->length[i], buffMaxLen);
|
||||||
|
return TSDB_CODE_INVALID_PARA;
|
||||||
} else {
|
} else {
|
||||||
code = tColDataAppendValueImpl[pColData->flag][CV_FLAG_VALUE](
|
code = tColDataAppendValueImpl[pColData->flag][CV_FLAG_VALUE](
|
||||||
pColData, (uint8_t *)pBind->buffer + pBind->buffer_length * i, pBind->length[i]);
|
pColData, (uint8_t *)pBind->buffer + pBind->buffer_length * i, pBind->length[i]);
|
||||||
|
|
|
@ -266,7 +266,10 @@ int32_t qBindStmtColsValue(void* pBlock, TAOS_MULTI_BIND* bind, char* msgBuf, in
|
||||||
pBind = bind + c;
|
pBind = bind + c;
|
||||||
}
|
}
|
||||||
|
|
||||||
tColDataAddValueByBind(pCol, pBind);
|
code = tColDataAddValueByBind(pCol, pBind, IS_VAR_DATA_TYPE(pColSchema->type) ? pColSchema->bytes - VARSTR_HEADER_SIZE: -1);
|
||||||
|
if (code) {
|
||||||
|
goto _return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug("stmt all %d columns bind %d rows data", boundInfo->numOfBound, rowNum);
|
qDebug("stmt all %d columns bind %d rows data", boundInfo->numOfBound, rowNum);
|
||||||
|
@ -309,7 +312,7 @@ int32_t qBindStmtSingleColValue(void* pBlock, TAOS_MULTI_BIND* bind, char* msgBu
|
||||||
pBind = bind;
|
pBind = bind;
|
||||||
}
|
}
|
||||||
|
|
||||||
tColDataAddValueByBind(pCol, pBind);
|
tColDataAddValueByBind(pCol, pBind, IS_VAR_DATA_TYPE(pColSchema->type) ? pColSchema->bytes - VARSTR_HEADER_SIZE: -1);
|
||||||
|
|
||||||
qDebug("stmt col %d bind %d rows data", colIdx, rowNum);
|
qDebug("stmt col %d bind %d rows data", colIdx, rowNum);
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
|
|
||||||
int32_t shortColList[] = {TSDB_DATA_TYPE_TIMESTAMP, TSDB_DATA_TYPE_INT};
|
int32_t shortColList[] = {TSDB_DATA_TYPE_TIMESTAMP, TSDB_DATA_TYPE_INT};
|
||||||
int32_t fullColList[] = {TSDB_DATA_TYPE_TIMESTAMP, TSDB_DATA_TYPE_BOOL, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_UTINYINT, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_USMALLINT, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_UINT, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_UBIGINT, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_BINARY, TSDB_DATA_TYPE_NCHAR};
|
int32_t fullColList[] = {TSDB_DATA_TYPE_TIMESTAMP, TSDB_DATA_TYPE_BOOL, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_UTINYINT, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_USMALLINT, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_UINT, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_UBIGINT, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_BINARY, TSDB_DATA_TYPE_NCHAR};
|
||||||
int32_t bindColTypeList[] = {TSDB_DATA_TYPE_TIMESTAMP, TSDB_DATA_TYPE_INT};
|
int32_t bindColTypeList[] = {TSDB_DATA_TYPE_TIMESTAMP, TSDB_DATA_TYPE_NCHAR};
|
||||||
int32_t optrIdxList[] = {0, 7};
|
int32_t optrIdxList[] = {5, 11};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char* oper;
|
char* oper;
|
||||||
|
@ -123,6 +123,7 @@ int insertAUTOTest3(TAOS_STMT *stmt, TAOS *taos);
|
||||||
int queryColumnTest(TAOS_STMT *stmt, TAOS *taos);
|
int queryColumnTest(TAOS_STMT *stmt, TAOS *taos);
|
||||||
int queryMiscTest(TAOS_STMT *stmt, TAOS *taos);
|
int queryMiscTest(TAOS_STMT *stmt, TAOS *taos);
|
||||||
int insertNonExistsTb(TAOS_STMT *stmt, TAOS *taos);
|
int insertNonExistsTb(TAOS_STMT *stmt, TAOS *taos);
|
||||||
|
int insertVarLenErr(TAOS_STMT *stmt, TAOS *taos);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TTYPE_INSERT = 1,
|
TTYPE_INSERT = 1,
|
||||||
|
@ -190,6 +191,7 @@ CaseCfg gCase[] = {
|
||||||
{"query:SUBT-MISC", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, false, queryMiscTest, 10, 10, 1, 3, 0, 0, 1, 2},
|
{"query:SUBT-MISC", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, false, queryMiscTest, 10, 10, 1, 3, 0, 0, 1, 2},
|
||||||
|
|
||||||
{"query:NG-TBNEXISTS",tListLen(fullColList), fullColList, TTYPE_INSERT_NG,0, false, false, insertNonExistsTb, 10, 10, 1, 3, 0, 0, 1, -1},
|
{"query:NG-TBNEXISTS",tListLen(fullColList), fullColList, TTYPE_INSERT_NG,0, false, false, insertNonExistsTb, 10, 10, 1, 3, 0, 0, 1, -1},
|
||||||
|
{"query:NG-VARLENERR",tListLen(fullColList), fullColList, TTYPE_INSERT_NG,0, false, true, insertVarLenErr, 10, 10, 1, 3, 0, 0, 1, -1},
|
||||||
|
|
||||||
// {"query:SUBT-COLUMN", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, false, queryColumnTest, 1, 10, 1, 1, 0, 0, 1, 2},
|
// {"query:SUBT-COLUMN", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, false, queryColumnTest, 1, 10, 1, 1, 0, 0, 1, 2},
|
||||||
// {"query:SUBT-MISC", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, false, queryMiscTest, 2, 10, 1, 1, 0, 0, 1, 2},
|
// {"query:SUBT-MISC", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, false, queryMiscTest, 2, 10, 1, 1, 0, 0, 1, 2},
|
||||||
|
@ -319,7 +321,7 @@ CaseCtrl gCaseCtrl = { // query case with specified col&oper
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
CaseCtrl gCaseCtrl = { // query case with specified col&oper
|
CaseCtrl gCaseCtrl = { // query case with specified col&oper
|
||||||
.bindNullNum = 1,
|
.bindNullNum = 0,
|
||||||
.printCreateTblSql = true,
|
.printCreateTblSql = true,
|
||||||
.printQuerySql = true,
|
.printQuerySql = true,
|
||||||
.printStmtSql = true,
|
.printStmtSql = true,
|
||||||
|
@ -329,18 +331,19 @@ CaseCtrl gCaseCtrl = { // query case with specified col&oper
|
||||||
.bindTagNum = 0,
|
.bindTagNum = 0,
|
||||||
.bindRowNum = 0,
|
.bindRowNum = 0,
|
||||||
.bindColTypeNum = 0,
|
.bindColTypeNum = 0,
|
||||||
.bindColTypeList = NULL,
|
.bindColTypeList = bindColTypeList,
|
||||||
.optrIdxListNum = 0,
|
.optrIdxListNum = 0,
|
||||||
.optrIdxList = NULL,
|
.optrIdxList = optrIdxList,
|
||||||
.checkParamNum = false,
|
.checkParamNum = false,
|
||||||
.printRes = true,
|
.printRes = true,
|
||||||
.runTimes = 0,
|
.runTimes = 0,
|
||||||
.caseRunIdx = -1,
|
.caseRunIdx = -1,
|
||||||
//.optrIdxListNum = tListLen(optrIdxList),
|
.optrIdxListNum = tListLen(optrIdxList),
|
||||||
//.optrIdxList = optrIdxList,
|
.optrIdxList = optrIdxList,
|
||||||
//.bindColTypeNum = tListLen(bindColTypeList),
|
.bindColTypeNum = tListLen(bindColTypeList),
|
||||||
//.bindColTypeList = bindColTypeList,
|
.bindColTypeList = bindColTypeList,
|
||||||
.caseIdx = 8,
|
.caseRunIdx = -1,
|
||||||
|
.caseIdx = 24,
|
||||||
.caseNum = 1,
|
.caseNum = 1,
|
||||||
.caseRunNum = 1,
|
.caseRunNum = 1,
|
||||||
};
|
};
|
||||||
|
@ -1439,14 +1442,17 @@ void bpShowBindParam(TAOS_MULTI_BIND *bind, int32_t num) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t bpBindParam(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind) {
|
int32_t bpBindParam(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, bool expectFail) {
|
||||||
static int32_t n = 0;
|
static int32_t n = 0;
|
||||||
|
|
||||||
bpCheckColFields(stmt, bind);
|
if (!expectFail) {
|
||||||
|
bpCheckColFields(stmt, bind);
|
||||||
|
}
|
||||||
|
|
||||||
if (gCurCase->bindRowNum > 1) {
|
if (gCurCase->bindRowNum > 1) {
|
||||||
if (0 == (n++%2)) {
|
if (0 == (n++%2)) {
|
||||||
if (taos_stmt_bind_param_batch(stmt, bind)) {
|
if (taos_stmt_bind_param_batch(stmt, bind)) {
|
||||||
|
if (expectFail) return 0;
|
||||||
printf("!!!taos_stmt_bind_param_batch error:%s\n", taos_stmt_errstr(stmt));
|
printf("!!!taos_stmt_bind_param_batch error:%s\n", taos_stmt_errstr(stmt));
|
||||||
bpShowBindParam(bind, gCurCase->bindColNum);
|
bpShowBindParam(bind, gCurCase->bindColNum);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1454,6 +1460,7 @@ int32_t bpBindParam(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind) {
|
||||||
} else {
|
} else {
|
||||||
for (int32_t i = 0; i < gCurCase->bindColNum; ++i) {
|
for (int32_t i = 0; i < gCurCase->bindColNum; ++i) {
|
||||||
if (taos_stmt_bind_single_param_batch(stmt, bind+i, i)) {
|
if (taos_stmt_bind_single_param_batch(stmt, bind+i, i)) {
|
||||||
|
if (expectFail) continue;
|
||||||
printf("!!!taos_stmt_bind_single_param_batch %d error:%s\n", taos_stmt_errstr(stmt), i);
|
printf("!!!taos_stmt_bind_single_param_batch %d error:%s\n", taos_stmt_errstr(stmt), i);
|
||||||
bpShowBindParam(bind, gCurCase->bindColNum);
|
bpShowBindParam(bind, gCurCase->bindColNum);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1463,12 +1470,14 @@ int32_t bpBindParam(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind) {
|
||||||
} else {
|
} else {
|
||||||
if (0 == (n++%2)) {
|
if (0 == (n++%2)) {
|
||||||
if (taos_stmt_bind_param_batch(stmt, bind)) {
|
if (taos_stmt_bind_param_batch(stmt, bind)) {
|
||||||
|
if (expectFail) return 0;
|
||||||
printf("!!!taos_stmt_bind_param_batch error:%s\n", taos_stmt_errstr(stmt));
|
printf("!!!taos_stmt_bind_param_batch error:%s\n", taos_stmt_errstr(stmt));
|
||||||
bpShowBindParam(bind, gCurCase->bindColNum);
|
bpShowBindParam(bind, gCurCase->bindColNum);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (taos_stmt_bind_param(stmt, bind)) {
|
if (taos_stmt_bind_param(stmt, bind)) {
|
||||||
|
if (expectFail) return 0;
|
||||||
printf("!!!taos_stmt_bind_param error:%s\n", taos_stmt_errstr(stmt));
|
printf("!!!taos_stmt_bind_param error:%s\n", taos_stmt_errstr(stmt));
|
||||||
bpShowBindParam(bind, gCurCase->bindColNum);
|
bpShowBindParam(bind, gCurCase->bindColNum);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1531,7 +1540,7 @@ int insertMBSETest1(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t b = 0; b <bindTimes; ++b) {
|
for (int32_t b = 0; b <bindTimes; ++b) {
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1583,7 +1592,7 @@ int insertMBSETest2(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1641,7 +1650,7 @@ int insertMBMETest1(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t b = 0; b <bindTimes; ++b) {
|
for (int32_t b = 0; b <bindTimes; ++b) {
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1691,7 +1700,7 @@ int insertMBMETest2(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t b = 0; b <bindTimes; ++b) {
|
for (int32_t b = 0; b <bindTimes; ++b) {
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1759,7 +1768,7 @@ int insertMBMETest3(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1811,7 +1820,7 @@ int insertMBMETest4(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1872,7 +1881,7 @@ int insertMPMETest1(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t b = 0; b <bindTimes; ++b) {
|
for (int32_t b = 0; b <bindTimes; ++b) {
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1938,7 +1947,7 @@ int insertAUTOTest1(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t b = 0; b <bindTimes; ++b) {
|
for (int32_t b = 0; b <bindTimes; ++b) {
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2005,7 +2014,7 @@ int insertAUTOTest2(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
if (gCaseCtrl.checkParamNum) {
|
if (gCaseCtrl.checkParamNum) {
|
||||||
bpCheckParamNum(stmt);
|
bpCheckParamNum(stmt);
|
||||||
}
|
}
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2065,7 +2074,7 @@ int insertAUTOTest3(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
bpCheckParamNum(stmt);
|
bpCheckParamNum(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2119,7 +2128,7 @@ int queryColumnTest(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
bpCheckParamNum(stmt);
|
bpCheckParamNum(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bpBindParam(stmt, data.pBind + n * gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + n * gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2167,7 +2176,7 @@ int queryMiscTest(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
bpCheckParamNum(stmt);
|
bpCheckParamNum(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bpBindParam(stmt, data.pBind + n * gCurCase->bindColNum)) {
|
if (bpBindParam(stmt, data.pBind + n * gCurCase->bindColNum, false)) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2234,6 +2243,42 @@ int insertNonExistsTb(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bpAddWrongVarBuffLen(TAOS_MULTI_BIND* pBind) {
|
||||||
|
for (int32_t i = 0; i < gCurCase->bindColNum; ++i) {
|
||||||
|
if (pBind[i].buffer_type == TSDB_DATA_TYPE_BINARY || pBind[i].buffer_type == TSDB_DATA_TYPE_NCHAR) {
|
||||||
|
*pBind[i].length += 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int insertVarLenErr(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
|
BindData data = {0};
|
||||||
|
prepareInsertData(&data);
|
||||||
|
|
||||||
|
int code = taos_stmt_prepare(stmt, data.sql, 0);
|
||||||
|
if (code != 0){
|
||||||
|
printf("!!!failed to execute taos_stmt_prepare. error:%s\n", taos_stmt_errstr(stmt));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bpCheckIsInsert(stmt, 1);
|
||||||
|
|
||||||
|
code = bpSetTableNameTags(&data, 0, "t0", stmt);
|
||||||
|
if (code != 0){
|
||||||
|
printf("!!!taos_stmt_set_tbname error:%s\n", taos_stmt_errstr(stmt));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bpAddWrongVarBuffLen(data.pBind);
|
||||||
|
|
||||||
|
if (bpBindParam(stmt, data.pBind, true)) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
destroyData(&data);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int errorSQLTest1(TAOS_STMT *stmt, TAOS *taos) {
|
int errorSQLTest1(TAOS_STMT *stmt, TAOS *taos) {
|
||||||
|
|
Loading…
Reference in New Issue