improve performance

This commit is contained in:
wpan 2021-08-05 08:52:36 +08:00
parent d60212302b
commit d86f582a25
1 changed files with 21 additions and 12 deletions

View File

@ -2498,20 +2498,27 @@ static FORCE_INLINE bool filterExecuteImplNotNull(void *pinfo, int32_t numOfRows
bool filterExecuteImplRange(void *pinfo, int32_t numOfRows, int8_t* p) { bool filterExecuteImplRange(void *pinfo, int32_t numOfRows, int8_t* p) {
SFilterInfo *info = (SFilterInfo *)pinfo; SFilterInfo *info = (SFilterInfo *)pinfo;
bool all = true; bool all = true;
uint16_t dataSize = info->cunits[0].dataSize;
char *colData = (char *)info->cunits[0].colData;
rangeCompFunc rfunc = info->cunits[0].rfunc;
void *valData = info->cunits[0].valData;
void *valData2 = info->cunits[0].valData2;
__compar_fn_t func = info->cunits[0].func;
for (int32_t i = 0; i < numOfRows; ++i) { for (int32_t i = 0; i < numOfRows; ++i) {
uint16_t uidx = info->groups[0].unitIdxs[0]; if (isNull(colData, info->cunits[0].dataType)) {
void *colData = (char *)info->cunits[uidx].colData + info->cunits[uidx].dataSize * i;
if (isNull(colData, info->cunits[uidx].dataType)) {
all = false; all = false;
colData += dataSize;
continue; continue;
} }
p[i] = (*info->cunits[uidx].rfunc)(colData, colData, info->cunits[uidx].valData, info->cunits[uidx].valData2, info->cunits[uidx].func); p[i] = (*rfunc)(colData, colData, valData, valData2, func);
if (p[i] == 0) { if (p[i] == 0) {
all = false; all = false;
} }
colData += dataSize;
} }
return all; return all;
@ -2548,26 +2555,28 @@ bool filterExecuteImpl(void *pinfo, int32_t numOfRows, int8_t* p) {
//FILTER_UNIT_CLR_F(info); //FILTER_UNIT_CLR_F(info);
for (uint32_t g = 0; g < info->groupNum; ++g) { for (uint32_t g = 0; g < info->groupNum; ++g) {
for (uint32_t u = 0; u < info->groups[g].unitNum; ++u) { SFilterGroup *group = &info->groups[g];
uint16_t uidx = info->groups[g].unitIdxs[u]; for (uint32_t u = 0; u < group->unitNum; ++u) {
void *colData = (char *)info->cunits[uidx].colData + info->cunits[uidx].dataSize * i; uint16_t uidx = group->unitIdxs[u];
SFilterComUnit *cunit = &info->cunits[uidx];
void *colData = (char *)cunit->colData + cunit->dataSize * i;
//if (FILTER_UNIT_GET_F(info, uidx)) { //if (FILTER_UNIT_GET_F(info, uidx)) {
// p[i] = FILTER_UNIT_GET_R(info, uidx); // p[i] = FILTER_UNIT_GET_R(info, uidx);
//} else { //} else {
uint8_t optr = info->cunits[uidx].optr; uint8_t optr = cunit->optr;
if (isNull(colData, info->cunits[uidx].dataType)) { if (isNull(colData, cunit->dataType)) {
p[i] = optr == TSDB_RELATION_ISNULL ? true : false; p[i] = optr == TSDB_RELATION_ISNULL ? true : false;
} else { } else {
if (optr == TSDB_RELATION_NOTNULL) { if (optr == TSDB_RELATION_NOTNULL) {
p[i] = 1; p[i] = 1;
} else if (optr == TSDB_RELATION_ISNULL) { } else if (optr == TSDB_RELATION_ISNULL) {
p[i] = 0; p[i] = 0;
} else if (info->cunits[uidx].rfunc) { } else if (cunit->rfunc) {
p[i] = (*info->cunits[uidx].rfunc)(colData, colData, info->cunits[uidx].valData, info->cunits[uidx].valData2, info->cunits[uidx].func); p[i] = (*cunit->rfunc)(colData, colData, cunit->valData, cunit->valData2, cunit->func);
} else { } else {
p[i] = filterDoCompare(info->cunits[uidx].func, info->cunits[uidx].optr, colData, info->cunits[uidx].valData); p[i] = filterDoCompare(cunit->func, cunit->optr, colData, cunit->valData);
} }
//FILTER_UNIT_SET_R(info, uidx, p[i]); //FILTER_UNIT_SET_R(info, uidx, p[i]);