fix: memory leak in parse tag & fix windows error
This commit is contained in:
parent
d6399cafc3
commit
113250daef
|
@ -3114,7 +3114,7 @@ int32_t taos_write_raw_data(TAOS *taos, TAOS_RES *msg){
|
||||||
int32_t offset = 0;
|
int32_t offset = 0;
|
||||||
for (int32_t k = 0; k < pSW->nCols; k++) {
|
for (int32_t k = 0; k < pSW->nCols; k++) {
|
||||||
const SSchema* pColumn = &pSW->pSchema[k];
|
const SSchema* pColumn = &pSW->pSchema[k];
|
||||||
void *data = rspObj->resInfo.row[k];
|
char *data = rspObj->resInfo.row[k];
|
||||||
if (!data) {
|
if (!data) {
|
||||||
tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NULL, NULL, false, offset, k);
|
tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NULL, NULL, false, offset, k);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -899,7 +899,7 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
|
||||||
if (pToken->n + VARSTR_HEADER_SIZE > pSchema->bytes) {
|
if (pToken->n + VARSTR_HEADER_SIZE > pSchema->bytes) {
|
||||||
return generateSyntaxErrMsg(pMsgBuf, TSDB_CODE_PAR_VALUE_TOO_LONG, pSchema->name);
|
return generateSyntaxErrMsg(pMsgBuf, TSDB_CODE_PAR_VALUE_TOO_LONG, pSchema->name);
|
||||||
}
|
}
|
||||||
val->pData = pToken->z;
|
val->pData = strdup(pToken->z);
|
||||||
val->nData = pToken->n;
|
val->nData = pToken->n;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -965,10 +965,9 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchema* pTagSchema = &pSchema[pCxt->tags.boundColumns[i]];
|
SSchema* pTagSchema = &pSchema[pCxt->tags.boundColumns[i]];
|
||||||
char* tmpTokenBuf = taosMemoryCalloc(1, sToken.n); // todo this can be optimize with parse column
|
char tmpTokenBuf[TSDB_MAX_BYTES_PER_ROW] = {0}; // todo this can be optimize with parse column
|
||||||
code = checkAndTrimValue(&sToken, tmpTokenBuf, &pCxt->msg);
|
code = checkAndTrimValue(&sToken, tmpTokenBuf, &pCxt->msg);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
taosMemoryFree(tmpTokenBuf);
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -978,7 +977,6 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
|
||||||
if (pTagSchema->type == TSDB_DATA_TYPE_JSON) {
|
if (pTagSchema->type == TSDB_DATA_TYPE_JSON) {
|
||||||
if (sToken.n > (TSDB_MAX_JSON_TAG_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
if (sToken.n > (TSDB_MAX_JSON_TAG_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
||||||
code = buildSyntaxErrMsg(&pCxt->msg, "json string too long than 4095", sToken.z);
|
code = buildSyntaxErrMsg(&pCxt->msg, "json string too long than 4095", sToken.z);
|
||||||
taosMemoryFree(tmpTokenBuf);
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (isNullStr(&sToken)) {
|
if (isNullStr(&sToken)) {
|
||||||
|
@ -986,7 +984,6 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
|
||||||
} else {
|
} else {
|
||||||
code = parseJsontoTagData(sToken.z, pTagVals, &pTag, &pCxt->msg);
|
code = parseJsontoTagData(sToken.z, pTagVals, &pTag, &pCxt->msg);
|
||||||
}
|
}
|
||||||
taosMemoryFree(tmpTokenBuf);
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -995,12 +992,9 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
|
||||||
STagVal val = {0};
|
STagVal val = {0};
|
||||||
code = parseTagToken(&pCxt->pSql, &sToken, pTagSchema, precision, &val, &pCxt->msg);
|
code = parseTagToken(&pCxt->pSql, &sToken, pTagSchema, precision, &val, &pCxt->msg);
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
taosMemoryFree(tmpTokenBuf);
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (pTagSchema->type != TSDB_DATA_TYPE_BINARY) {
|
|
||||||
taosMemoryFree(tmpTokenBuf);
|
|
||||||
}
|
|
||||||
taosArrayPush(pTagVals, &val);
|
taosArrayPush(pTagVals, &val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1019,7 +1013,7 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
|
||||||
end:
|
end:
|
||||||
for (int i = 0; i < taosArrayGetSize(pTagVals); ++i) {
|
for (int i = 0; i < taosArrayGetSize(pTagVals); ++i) {
|
||||||
STagVal* p = (STagVal*)taosArrayGet(pTagVals, i);
|
STagVal* p = (STagVal*)taosArrayGet(pTagVals, i);
|
||||||
if (p->type == TSDB_DATA_TYPE_NCHAR) {
|
if (IS_VAR_DATA_TYPE(p->type)) {
|
||||||
taosMemoryFree(p->pData);
|
taosMemoryFree(p->pData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue