fix:[TD-31965] code rewrite if error happen

This commit is contained in:
wangmm0220 2024-09-13 18:22:42 +08:00
parent 251b0f59d5
commit 98413626aa
1 changed files with 15 additions and 24 deletions

View File

@ -2912,6 +2912,8 @@ int32_t filterRewrite(SFilterInfo *info, SFilterGroupCtx **gRes, int32_t gResNum
uint32_t uidx = 0; uint32_t uidx = 0;
uint32_t code = TSDB_CODE_SUCCESS; uint32_t code = TSDB_CODE_SUCCESS;
SArray *group = taosArrayInit(FILTER_DEFAULT_GROUP_SIZE, sizeof(SFilterGroup)); SArray *group = taosArrayInit(FILTER_DEFAULT_GROUP_SIZE, sizeof(SFilterGroup));
SFilterGroup ng = {0};
if (group == NULL) { if (group == NULL) {
FLT_ERR_JRET(terrno); FLT_ERR_JRET(terrno);
} }
@ -2927,11 +2929,8 @@ int32_t filterRewrite(SFilterInfo *info, SFilterGroupCtx **gRes, int32_t gResNum
for (int32_t i = 0; i < gResNum; ++i) { for (int32_t i = 0; i < gResNum; ++i) {
res = gRes[i]; res = gRes[i];
optr = (res->colNum > 1) ? LOGIC_COND_TYPE_AND : LOGIC_COND_TYPE_OR; optr = (res->colNum > 1) ? LOGIC_COND_TYPE_AND : LOGIC_COND_TYPE_OR;
SFilterGroup ng = {0};
for (uint32_t m = 0; m < res->colNum; ++m) { for (uint32_t m = 0; m < res->colNum; ++m) {
colInfo = &res->colInfo[res->colIdx[m]]; colInfo = &res->colInfo[res->colIdx[m]];
if (FILTER_NO_MERGE_DATA_TYPE(colInfo->dataType)) { if (FILTER_NO_MERGE_DATA_TYPE(colInfo->dataType)) {
@ -2944,28 +2943,16 @@ int32_t filterRewrite(SFilterInfo *info, SFilterGroupCtx **gRes, int32_t gResNum
for (int32_t n = 0; n < usize; ++n) { for (int32_t n = 0; n < usize; ++n) {
SFilterUnit *u = (SFilterUnit *)taosArrayGetP((SArray *)colInfo->info, n); SFilterUnit *u = (SFilterUnit *)taosArrayGetP((SArray *)colInfo->info, n);
if (NULL == u) { if (NULL == u) {
code = TSDB_CODE_OUT_OF_RANGE; FLT_ERR_JRET(TSDB_CODE_OUT_OF_RANGE);
break;
} }
code = filterAddUnitFromUnit(info, &oinfo, u, &uidx); code = filterAddUnitFromUnit(info, &oinfo, u, &uidx);
if (TSDB_CODE_SUCCESS != code) { FLT_ERR_JRET(code);
break;
}
code = filterAddUnitToGroup(&ng, uidx); code = filterAddUnitToGroup(&ng, uidx);
if (TSDB_CODE_SUCCESS != code) { FLT_ERR_JRET(code);
break;
}
}
if (TSDB_CODE_SUCCESS != code) {
break;
} }
continue; continue;
} }
if (TSDB_CODE_SUCCESS != code) {
filterFreeGroup((void*)&ng);
FLT_ERR_JRET(code);
}
if (colInfo->type != RANGE_TYPE_MR_CTX) { if (colInfo->type != RANGE_TYPE_MR_CTX) {
fltError("filterRewrite get invalid col type : %d", colInfo->type); fltError("filterRewrite get invalid col type : %d", colInfo->type);
@ -2973,24 +2960,28 @@ int32_t filterRewrite(SFilterInfo *info, SFilterGroupCtx **gRes, int32_t gResNum
} }
code = filterAddGroupUnitFromCtx(info, &oinfo, colInfo->info, res->colIdx[m], &ng, optr, group); code = filterAddGroupUnitFromCtx(info, &oinfo, colInfo->info, res->colIdx[m], &ng, optr, group);
if (TSDB_CODE_SUCCESS != code) { FLT_ERR_JRET(code);
filterFreeGroup((void*)&ng);
FLT_ERR_JRET(code);
}
} }
if (ng.unitNum > 0) { if (ng.unitNum > 0) {
if (NULL == taosArrayPush(group, &ng)) { if (NULL == taosArrayPush(group, &ng)) {
filterFreeGroup((void*)&ng);
FLT_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); FLT_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY);
} }
ng = (SFilterGroup){0};
} }
} }
FLT_ERR_JRET(filterConvertGroupFromArray(info, group)); FLT_ERR_JRET(filterConvertGroupFromArray(info, group));
_return:
taosArrayDestroy(group); taosArrayDestroy(group);
filterFreeInfo(&oinfo);
return 0;
_return:
filterFreeGroup((void*)&ng);
taosArrayDestroyEx(group, filterFreeGroup);
filterFreeInfo(&oinfo); filterFreeInfo(&oinfo);
FLT_RET(code); FLT_RET(code);