fix index bugf

This commit is contained in:
yihaoDeng 2022-07-30 10:30:58 +08:00
parent c0003de316
commit ac169b8d90
6 changed files with 106 additions and 93 deletions

View File

@ -260,7 +260,6 @@ typedef struct {
} \
} while (0)
// TODO: use varchar(0) to represent NULL type
#define IS_VAR_NULL_TYPE(_t, _b) ((_t) == TSDB_DATA_TYPE_VARCHAR && (_b) == 0)
#define IS_NULL_TYPE(_t) ((_t) == TSDB_DATA_TYPE_NULL)

View File

@ -95,7 +95,7 @@ typedef struct SMetaFltParam {
tb_uid_t suid;
int16_t cid;
int16_t type;
char *val;
void *val;
bool reverse;
int (*filterFunc)(void *a, void *b, int16_t type);

View File

@ -315,7 +315,8 @@ static int tagIdxKeyCmpr(const void *pKey1, int kLen1, const void *pKey2, int kL
return 1;
} else if (!pTagIdxKey1->isNull && !pTagIdxKey2->isNull) {
// all not NULL, compr tag vals
c = doCompare(pTagIdxKey1->data, pTagIdxKey2->data, pTagIdxKey1->type, 0);
__compar_fn_t func = getComparFunc(pTagIdxKey1->type, 0);
c = func(pTagIdxKey1->data, pTagIdxKey2->data);
if (c) return c;
}

View File

@ -386,13 +386,26 @@ static int32_t sifDoIndex(SIFParam *left, SIFParam *right, int8_t operType, SIFP
.filterFunc = filterFunc};
char buf[128] = {0};
float f = 0.0;
if (IS_VAR_DATA_TYPE(left->colValType)) {
if (!IS_VAR_DATA_TYPE(right->colValType)) {
NUM_TO_STRING(right->colValType, right->condValue, sizeof(buf), buf + VARSTR_HEADER_SIZE);
NUM_TO_STRING(right->colValType, right->condValue, sizeof(buf) - 2, buf + VARSTR_HEADER_SIZE);
varDataSetLen(buf, strlen(buf + VARSTR_HEADER_SIZE));
param.val = buf;
}
} else {
if (left->colValType == TSDB_DATA_TYPE_FLOAT) {
if (right->colValType == TSDB_DATA_TYPE_DOUBLE) {
f = GET_DOUBLE_VAL(right->condValue);
param.val = &f;
} else if (right->colValType == TSDB_DATA_TYPE_BIGINT) {
f = *(int64_t *)(right->condValue);
param.val = &f;
} else {
f = *(int32_t *)(right->condValue);
param.val = &f;
}
}
}
ret = metaFilterTableIds(arg->metaEx, &param, output->result);
}