diff --git a/source/libs/parser/src/parInsertSql.c b/source/libs/parser/src/parInsertSql.c index 6e1c599df4..13447acab3 100644 --- a/source/libs/parser/src/parInsertSql.c +++ b/source/libs/parser/src/parInsertSql.c @@ -1615,17 +1615,18 @@ static int32_t getStbRowValues(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pS } else if (pCols->pColIndex[i] == getTbnameSchemaIndex(pStbRowsCxt->pStbMeta)) { SColVal tbnameVal = COL_VAL_NONE(-1, TSDB_DATA_TYPE_BINARY); + tbnameVal.value.val = 0; code = parseValueToken(pCxt, ppSql, pToken, (SSchema*)tGetTbnameColumnSchema(), getTableInfo(pStbRowsCxt->pStbMeta).precision, &tbnameVal); - if (code == TSDB_CODE_SUCCESS && COL_VAL_IS_VALUE(&tbnameVal)) { + if (code == TSDB_CODE_SUCCESS && COL_VAL_IS_VALUE(&tbnameVal) && tbnameVal.value.nData>0) { tNameSetDbName(&pStbRowsCxt->ctbName, pStbRowsCxt->stbName.acctId, pStbRowsCxt->stbName.dbname, strlen(pStbRowsCxt->stbName.dbname)); char ctbName[TSDB_TABLE_NAME_LEN]; memcpy(ctbName, tbnameVal.value.pData, tbnameVal.value.nData); ctbName[tbnameVal.value.nData] = '\0'; tNameAddTbName(&pStbRowsCxt->ctbName, ctbName, tbnameVal.value.nData); bFoundTbName = true; - taosMemoryFreeClear(tbnameVal.value.pData); } + taosMemoryFreeClear(tbnameVal.value.pData); } if (code == TSDB_CODE_SUCCESS && i < pCols->numOfBound - 1) { @@ -2061,11 +2062,6 @@ static int32_t parseInsertStbClauseBottom(SInsertParseContext* pCxt, SVnodeModif code = parseDataClause(pCxt, pStmt, rowsDataCxt); } - if (code != TSDB_CODE_SUCCESS) { - destroyStbRowsDataContext(pStbRowsCxt); - taosMemoryFreeClear(pStbRowsCxt); - } - return code; } diff --git a/tests/script/tsim/insert/insert_stb.sim b/tests/script/tsim/insert/insert_stb.sim index cee209f4e1..afe1976c79 100644 --- a/tests/script/tsim/insert/insert_stb.sim +++ b/tests/script/tsim/insert/insert_stb.sim @@ -37,4 +37,10 @@ print $rows if $rows != 4 then return -1 endi + +sql_error insert into d2.st values(now, 1, 1) +sql_error insert into d2.st(ts, f) values(now, 1); +sql_error insert into d2.st(ts, f, tbname) values(now, 1); +sql_error insert into d2.st(ts, f, tbname) values(now, 1, ''); +sql_error insert into d2.st(ts, tbname) values(now, 1, 34) system sh/exec.sh -n dnode1 -s stop -x SIGINT