提交 079e063b 编写于 作者: W wpan

add test case

上级 f4974fd8
...@@ -586,7 +586,7 @@ void convertFilterSetFromBinary(void **q, const char *buf, int32_t len, uint32_t ...@@ -586,7 +586,7 @@ void convertFilterSetFromBinary(void **q, const char *buf, int32_t len, uint32_t
if (bufLen < t) { if (bufLen < t) {
tmp = realloc(tmp, t * TSDB_NCHAR_SIZE); tmp = realloc(tmp, t * TSDB_NCHAR_SIZE);
bufLen = t; bufLen = (int32_t)t;
} }
switch (tType) { switch (tType) {
......
...@@ -51,14 +51,11 @@ enum { ...@@ -51,14 +51,11 @@ enum {
}; };
enum { enum {
RA_EXCLUDE = 1, RANGE_FLG_EXCLUDE = 1,
RA_INCLUDE = 2, RANGE_FLG_INCLUDE = 2,
RA_NULL = 4, RANGE_FLG_NULL = 4,
}; };
#define RA_EMPTY (RA_EXCLUDE|RA_INCLUDE)
#define RA_ALL (RA_EXCLUDE|RA_INCLUDE)
enum { enum {
FI_OPTION_NO_REWRITE = 1, FI_OPTION_NO_REWRITE = 1,
FI_OPTION_TIMESTAMP = 2, FI_OPTION_TIMESTAMP = 2,
...@@ -232,7 +229,7 @@ typedef struct SFilterInfo { ...@@ -232,7 +229,7 @@ typedef struct SFilterInfo {
#define SIMPLE_COPY_VALUES(dst, src) *((int64_t *)dst) = *((int64_t *)src) #define SIMPLE_COPY_VALUES(dst, src) *((int64_t *)dst) = *((int64_t *)src)
#define FILTER_PACKAGE_UNIT_HASH_KEY(v, optr, idx1, idx2) do { char *_t = (char *)v; _t[0] = optr; *(uint16_t *)(_t + 1) = idx1; *(uint16_t *)(_t + 3) = idx2; } while (0) #define FILTER_PACKAGE_UNIT_HASH_KEY(v, optr, idx1, idx2) do { char *_t = (char *)v; _t[0] = optr; *(uint16_t *)(_t + 1) = idx1; *(uint16_t *)(_t + 3) = idx2; } while (0)
#define FILTER_GREATER(cr,sflag,eflag) ((cr > 0) || ((cr == 0) && (FILTER_GET_FLAG(sflag,RA_EXCLUDE) || FILTER_GET_FLAG(eflag,RA_EXCLUDE)))) #define FILTER_GREATER(cr,sflag,eflag) ((cr > 0) || ((cr == 0) && (FILTER_GET_FLAG(sflag,RANGE_FLG_EXCLUDE) || FILTER_GET_FLAG(eflag,RANGE_FLG_EXCLUDE))))
#define FILTER_COPY_RA(dst, src) do { (dst)->sflag = (src)->sflag; (dst)->eflag = (src)->eflag; (dst)->s = (src)->s; (dst)->e = (src)->e; } while (0) #define FILTER_COPY_RA(dst, src) do { (dst)->sflag = (src)->sflag; (dst)->eflag = (src)->eflag; (dst)->s = (src)->s; (dst)->e = (src)->e; } while (0)
#define RESET_RANGE(ctx, r) do { (r)->next = (ctx)->rf; (ctx)->rf = r; } while (0) #define RESET_RANGE(ctx, r) do { (r)->next = (ctx)->rf; (ctx)->rf = r; } while (0)
...@@ -243,11 +240,11 @@ typedef struct SFilterInfo { ...@@ -243,11 +240,11 @@ typedef struct SFilterInfo {
#define ERR_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { return _code; } } while (0) #define ERR_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { return _code; } } while (0)
#define ERR_LRET(c,...) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { qError(__VA_ARGS__); return _code; } } while (0) #define ERR_LRET(c,...) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { qError(__VA_ARGS__); return _code; } } while (0)
#define ERR_JRET(c) do { code = c; if (code != TSDB_CODE_SUCCESS) { goto _err_return; } } while (0) #define ERR_JRET(c) do { code = c; if (code != TSDB_CODE_SUCCESS) { goto _return; } } while (0)
#define CHK_RETV(c) do { if (c) { return; } } while (0) #define CHK_RETV(c) do { if (c) { return; } } while (0)
#define CHK_RET(c, r) do { if (c) { return r; } } while (0) #define CHK_RET(c, r) do { if (c) { return r; } } while (0)
#define CHK_JMP(c) do { if (c) { goto _err_return; } } while (0) #define CHK_JMP(c) do { if (c) { goto _return; } } while (0)
#define CHK_LRETV(c,...) do { if (c) { qError(__VA_ARGS__); return; } } while (0) #define CHK_LRETV(c,...) do { if (c) { qError(__VA_ARGS__); return; } } while (0)
#define CHK_LRET(c, r,...) do { if (c) { qError(__VA_ARGS__); return r; } } while (0) #define CHK_LRET(c, r,...) do { if (c) { qError(__VA_ARGS__); return r; } } while (0)
...@@ -291,15 +288,10 @@ typedef int32_t(*filter_desc_compare_func)(const void *, const void *); ...@@ -291,15 +288,10 @@ typedef int32_t(*filter_desc_compare_func)(const void *, const void *);
extern int32_t filterInitFromTree(tExprNode* tree, SFilterInfo **pinfo, uint32_t options); extern int32_t filterInitFromTree(tExprNode* tree, SFilterInfo **pinfo, uint32_t options);
extern bool filterExecute(SFilterInfo *info, int32_t numOfRows, int8_t* p); extern bool filterExecute(SFilterInfo *info, int32_t numOfRows, int8_t* p);
extern int32_t filterSetColFieldData(SFilterInfo *info, int16_t colId, void *data); extern int32_t filterSetColFieldData(SFilterInfo *info, int16_t colId, void *data);
extern void* filterInitRangeCtx(int32_t type, int32_t options);
extern int32_t filterGetRangeNum(void* h, int32_t* num);
extern int32_t filterGetRangeRes(void* h, SFilterRange *ra);
extern int32_t filterFreeRangeCtx(void* h);
extern int32_t filterGetTimeRange(SFilterInfo *info, STimeWindow *win); extern int32_t filterGetTimeRange(SFilterInfo *info, STimeWindow *win);
extern int32_t filterConverNcharColumns(SFilterInfo* pFilterInfo, int32_t rows, bool *gotNchar); extern int32_t filterConverNcharColumns(SFilterInfo* pFilterInfo, int32_t rows, bool *gotNchar);
extern int32_t filterFreeNcharColumns(SFilterInfo* pFilterInfo); extern int32_t filterFreeNcharColumns(SFilterInfo* pFilterInfo);
extern void filterFreeInfo(SFilterInfo *info); extern void filterFreeInfo(SFilterInfo *info);
extern bool filterIsEmptyRes(SFilterInfo *info);
extern bool filterRangeExecute(SFilterInfo *info, SDataStatis *pDataStatis, int32_t numOfCols, int32_t numOfRows); extern bool filterRangeExecute(SFilterInfo *info, SDataStatis *pDataStatis, int32_t numOfCols, int32_t numOfRows);
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -83,31 +83,31 @@ bool filterRangeCompie (const void *minv, const void *maxv, const void *minr, co ...@@ -83,31 +83,31 @@ bool filterRangeCompie (const void *minv, const void *maxv, const void *minr, co
} }
rangeCompFunc filterGetRangeCompFunc(char sflag, char eflag) { rangeCompFunc filterGetRangeCompFunc(char sflag, char eflag) {
if (FILTER_GET_FLAG(sflag, RA_NULL)) { if (FILTER_GET_FLAG(sflag, RANGE_FLG_NULL)) {
if (FILTER_GET_FLAG(eflag, RA_EXCLUDE)) { if (FILTER_GET_FLAG(eflag, RANGE_FLG_EXCLUDE)) {
return filterRangeCompLe; return filterRangeCompLe;
} }
return filterRangeCompLi; return filterRangeCompLi;
} }
if (FILTER_GET_FLAG(eflag, RA_NULL)) { if (FILTER_GET_FLAG(eflag, RANGE_FLG_NULL)) {
if (FILTER_GET_FLAG(sflag, RA_EXCLUDE)) { if (FILTER_GET_FLAG(sflag, RANGE_FLG_EXCLUDE)) {
return filterRangeCompGe; return filterRangeCompGe;
} }
return filterRangeCompGi; return filterRangeCompGi;
} }
if (FILTER_GET_FLAG(sflag, RA_EXCLUDE)) { if (FILTER_GET_FLAG(sflag, RANGE_FLG_EXCLUDE)) {
if (FILTER_GET_FLAG(eflag, RA_EXCLUDE)) { if (FILTER_GET_FLAG(eflag, RANGE_FLG_EXCLUDE)) {
return filterRangeCompee; return filterRangeCompee;
} }
return filterRangeCompei; return filterRangeCompei;
} }
if (FILTER_GET_FLAG(eflag, RA_EXCLUDE)) { if (FILTER_GET_FLAG(eflag, RANGE_FLG_EXCLUDE)) {
return filterRangeCompie; return filterRangeCompie;
} }
...@@ -207,22 +207,22 @@ int32_t filterReuseRangeCtx(SFilterRangeCtx *ctx, int32_t type, int32_t options) ...@@ -207,22 +207,22 @@ int32_t filterReuseRangeCtx(SFilterRangeCtx *ctx, int32_t type, int32_t options)
int32_t filterConvertRange(SFilterRangeCtx *cur, SFilterRange *ra, bool *notNull) { int32_t filterConvertRange(SFilterRangeCtx *cur, SFilterRange *ra, bool *notNull) {
if (!FILTER_GET_FLAG(ra->sflag, RA_NULL)) { if (!FILTER_GET_FLAG(ra->sflag, RANGE_FLG_NULL)) {
int32_t sr = cur->pCompareFunc(&ra->s, getDataMin(cur->type)); int32_t sr = cur->pCompareFunc(&ra->s, getDataMin(cur->type));
if (sr == 0) { if (sr == 0) {
FILTER_SET_FLAG(ra->sflag, RA_NULL); FILTER_SET_FLAG(ra->sflag, RANGE_FLG_NULL);
} }
} }
if (!FILTER_GET_FLAG(ra->eflag, RA_NULL)) { if (!FILTER_GET_FLAG(ra->eflag, RANGE_FLG_NULL)) {
int32_t er = cur->pCompareFunc(&ra->e, getDataMax(cur->type)); int32_t er = cur->pCompareFunc(&ra->e, getDataMax(cur->type));
if (er == 0) { if (er == 0) {
FILTER_SET_FLAG(ra->eflag, RA_NULL); FILTER_SET_FLAG(ra->eflag, RANGE_FLG_NULL);
} }
} }
if (FILTER_GET_FLAG(ra->sflag, RA_NULL) && FILTER_GET_FLAG(ra->eflag, RA_NULL)) { if (FILTER_GET_FLAG(ra->sflag, RANGE_FLG_NULL) && FILTER_GET_FLAG(ra->eflag, RANGE_FLG_NULL)) {
*notNull = true; *notNull = true;
} else { } else {
*notNull = false; *notNull = false;
...@@ -396,12 +396,12 @@ int32_t filterAddRangeImpl(void* h, SFilterRange* ra, int32_t optr) { ...@@ -396,12 +396,12 @@ int32_t filterAddRangeImpl(void* h, SFilterRange* ra, int32_t optr) {
int32_t filterAddRange(void* h, SFilterRange* ra, int32_t optr) { int32_t filterAddRange(void* h, SFilterRange* ra, int32_t optr) {
SFilterRangeCtx *ctx = (SFilterRangeCtx *)h; SFilterRangeCtx *ctx = (SFilterRangeCtx *)h;
if (FILTER_GET_FLAG(ra->sflag, RA_NULL)) { if (FILTER_GET_FLAG(ra->sflag, RANGE_FLG_NULL)) {
SIMPLE_COPY_VALUES(&ra->s, getDataMin(ctx->type)); SIMPLE_COPY_VALUES(&ra->s, getDataMin(ctx->type));
//FILTER_CLR_FLAG(ra->sflag, RA_NULL); //FILTER_CLR_FLAG(ra->sflag, RA_NULL);
} }
if (FILTER_GET_FLAG(ra->eflag, RA_NULL)) { if (FILTER_GET_FLAG(ra->eflag, RANGE_FLG_NULL)) {
SIMPLE_COPY_VALUES(&ra->e, getDataMax(ctx->type)); SIMPLE_COPY_VALUES(&ra->e, getDataMax(ctx->type));
//FILTER_CLR_FLAG(ra->eflag, RA_NULL); //FILTER_CLR_FLAG(ra->eflag, RA_NULL);
} }
...@@ -597,8 +597,6 @@ int32_t filterFreeRangeCtx(void* h) { ...@@ -597,8 +597,6 @@ int32_t filterFreeRangeCtx(void* h) {
int32_t filterDetachCnfGroup(SFilterGroup *gp1, SFilterGroup *gp2, SArray* group) { int32_t filterDetachCnfGroup(SFilterGroup *gp1, SFilterGroup *gp2, SArray* group) {
SFilterGroup gp = {0}; SFilterGroup gp = {0};
//TODO CHECK DUP
gp.unitNum = gp1->unitNum + gp2->unitNum; gp.unitNum = gp1->unitNum + gp2->unitNum;
gp.unitIdxs = calloc(gp.unitNum, sizeof(*gp.unitIdxs)); gp.unitIdxs = calloc(gp.unitNum, sizeof(*gp.unitIdxs));
memcpy(gp.unitIdxs, gp1->unitIdxs, gp1->unitNum * sizeof(*gp.unitIdxs)); memcpy(gp.unitIdxs, gp1->unitIdxs, gp1->unitNum * sizeof(*gp.unitIdxs));
...@@ -781,7 +779,7 @@ int32_t filterAddUnit(SFilterInfo *info, uint8_t optr, SFilterFieldId *left, SFi ...@@ -781,7 +779,7 @@ int32_t filterAddUnit(SFilterInfo *info, uint8_t optr, SFilterFieldId *left, SFi
SFilterField *val = FILTER_UNIT_RIGHT_FIELD(info, u); SFilterField *val = FILTER_UNIT_RIGHT_FIELD(info, u);
assert(FILTER_GET_FLAG(val->flag, FLD_TYPE_VALUE)); assert(FILTER_GET_FLAG(val->flag, FLD_TYPE_VALUE));
} else { } else {
assert(optr == TSDB_RELATION_ISNULL || optr == TSDB_RELATION_NOTNULL); assert(optr == TSDB_RELATION_ISNULL || optr == TSDB_RELATION_NOTNULL || optr == FILTER_DUMMY_EMPTY_OPTR);
} }
SFilterField *col = FILTER_UNIT_LEFT_FIELD(info, u); SFilterField *col = FILTER_UNIT_LEFT_FIELD(info, u);
...@@ -917,7 +915,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -917,7 +915,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
continue; continue;
} }
goto _err_return; goto _return;
} }
pvar = &val; pvar = &val;
t = sizeof(val); t = sizeof(val);
...@@ -932,7 +930,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -932,7 +930,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
continue; continue;
} }
goto _err_return; goto _return;
} }
pvar = &val; pvar = &val;
t = sizeof(val); t = sizeof(val);
...@@ -947,7 +945,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -947,7 +945,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
continue; continue;
} }
goto _err_return; goto _return;
} }
pvar = &val; pvar = &val;
t = sizeof(val); t = sizeof(val);
...@@ -957,7 +955,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -957,7 +955,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
case TSDB_DATA_TYPE_UBIGINT: case TSDB_DATA_TYPE_UBIGINT:
case TSDB_DATA_TYPE_BIGINT: { case TSDB_DATA_TYPE_BIGINT: {
if (tVariantDump(&tmpVar, (char *)&val, tType, false)) { if (tVariantDump(&tmpVar, (char *)&val, tType, false)) {
goto _err_return; goto _return;
} }
pvar = &val; pvar = &val;
t = sizeof(val); t = sizeof(val);
...@@ -965,7 +963,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -965,7 +963,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
} }
case TSDB_DATA_TYPE_DOUBLE: { case TSDB_DATA_TYPE_DOUBLE: {
if (tVariantDump(&tmpVar, (char *)&val, tType, false)) { if (tVariantDump(&tmpVar, (char *)&val, tType, false)) {
goto _err_return; goto _return;
} }
pvar = &val; pvar = &val;
t = sizeof(val); t = sizeof(val);
...@@ -979,7 +977,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -979,7 +977,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
continue; continue;
} }
goto _err_return; goto _return;
} }
pvar = &val; pvar = &val;
t = sizeof(val); t = sizeof(val);
...@@ -987,7 +985,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -987,7 +985,7 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
} }
case TSDB_DATA_TYPE_BINARY: { case TSDB_DATA_TYPE_BINARY: {
if (tVariantDump(&tmpVar, tmp, tType, true)) { if (tVariantDump(&tmpVar, tmp, tType, true)) {
goto _err_return; goto _return;
} }
t = varDataLen(tmp); t = varDataLen(tmp);
pvar = varDataVal(tmp); pvar = varDataVal(tmp);
...@@ -995,14 +993,14 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -995,14 +993,14 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
} }
case TSDB_DATA_TYPE_NCHAR: { case TSDB_DATA_TYPE_NCHAR: {
if (tVariantDump(&tmpVar, tmp, tType, true)) { if (tVariantDump(&tmpVar, tmp, tType, true)) {
goto _err_return; goto _return;
} }
t = varDataLen(tmp); t = varDataLen(tmp);
pvar = varDataVal(tmp); pvar = varDataVal(tmp);
break; break;
} }
default: default:
goto _err_return; goto _return;
} }
taosHashPut(pObj, (char *)pvar, t, &dummy, sizeof(dummy)); taosHashPut(pObj, (char *)pvar, t, &dummy, sizeof(dummy));
...@@ -1010,12 +1008,10 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3 ...@@ -1010,12 +1008,10 @@ int32_t filterConvertSetFromBinary(void **q, const char *buf, int32_t len, uint3
memset(&tmpVar, 0, sizeof(tmpVar)); memset(&tmpVar, 0, sizeof(tmpVar));
} }
CHK_JMP(taosHashGetSize(pObj) <= 0);
*q = (void *)pObj; *q = (void *)pObj;
pObj = NULL; pObj = NULL;
_err_return: _return:
tVariantDestroy(&tmpVar); tVariantDestroy(&tmpVar);
taosHashCleanup(pObj); taosHashCleanup(pObj);
tfree(tmp); tfree(tmp);
...@@ -1040,6 +1036,18 @@ int32_t filterAddGroupUnitFromNode(SFilterInfo *info, tExprNode* tree, SArray *g ...@@ -1040,6 +1036,18 @@ int32_t filterAddGroupUnitFromNode(SFilterInfo *info, tExprNode* tree, SArray *g
filterConvertSetFromBinary((void **)&data, var->pz, var->nLen, type); filterConvertSetFromBinary((void **)&data, var->pz, var->nLen, type);
CHK_LRET(data == NULL, TSDB_CODE_QRY_APP_ERROR, "failed to convert in param"); CHK_LRET(data == NULL, TSDB_CODE_QRY_APP_ERROR, "failed to convert in param");
if (taosHashGetSize((SHashObj *)data) <= 0) {
filterAddUnit(info, FILTER_DUMMY_EMPTY_OPTR, &left, NULL, &uidx);
SFilterGroup fgroup = {0};
filterAddUnitToGroup(&fgroup, uidx);
taosArrayPush(group, &fgroup);
taosHashCleanup(data);
return TSDB_CODE_SUCCESS;
}
void *p = taosHashIterate((SHashObj *)data, NULL); void *p = taosHashIterate((SHashObj *)data, NULL);
while(p) { while(p) {
void *key = taosHashGetDataKey((SHashObj *)data, p); void *key = taosHashGetDataKey((SHashObj *)data, p);
...@@ -1155,9 +1163,9 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan ...@@ -1155,9 +1163,9 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan
SFilterRange *ra = &ctx->rs->ra; SFilterRange *ra = &ctx->rs->ra;
assert(!((FILTER_GET_FLAG(ra->sflag, RA_NULL)) && (FILTER_GET_FLAG(ra->eflag, RA_NULL)))); assert(!((FILTER_GET_FLAG(ra->sflag, RANGE_FLG_NULL)) && (FILTER_GET_FLAG(ra->eflag, RANGE_FLG_NULL))));
if ((!FILTER_GET_FLAG(ra->sflag, RA_NULL)) && (!FILTER_GET_FLAG(ra->eflag, RA_NULL))) { if ((!FILTER_GET_FLAG(ra->sflag, RANGE_FLG_NULL)) && (!FILTER_GET_FLAG(ra->eflag, RANGE_FLG_NULL))) {
__compar_fn_t func = getComparFunc(type, 0); __compar_fn_t func = getComparFunc(type, 0);
if (func(&ra->s, &ra->e) == 0) { if (func(&ra->s, &ra->e) == 0) {
void *data = malloc(sizeof(int64_t)); void *data = malloc(sizeof(int64_t));
...@@ -1169,19 +1177,19 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan ...@@ -1169,19 +1177,19 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan
} }
} }
if (!FILTER_GET_FLAG(ra->sflag, RA_NULL)) { if (!FILTER_GET_FLAG(ra->sflag, RANGE_FLG_NULL)) {
void *data = malloc(sizeof(int64_t)); void *data = malloc(sizeof(int64_t));
SIMPLE_COPY_VALUES(data, &ra->s); SIMPLE_COPY_VALUES(data, &ra->s);
filterAddField(dst, NULL, &data, FLD_TYPE_VALUE, &right, tDataTypes[type].bytes, true); filterAddField(dst, NULL, &data, FLD_TYPE_VALUE, &right, tDataTypes[type].bytes, true);
filterAddUnit(dst, FILTER_GET_FLAG(ra->sflag, RA_EXCLUDE) ? TSDB_RELATION_GREATER : TSDB_RELATION_GREATER_EQUAL, &left, &right, &uidx); filterAddUnit(dst, FILTER_GET_FLAG(ra->sflag, RANGE_FLG_EXCLUDE) ? TSDB_RELATION_GREATER : TSDB_RELATION_GREATER_EQUAL, &left, &right, &uidx);
filterAddUnitToGroup(g, uidx); filterAddUnitToGroup(g, uidx);
} }
if (!FILTER_GET_FLAG(ra->eflag, RA_NULL)) { if (!FILTER_GET_FLAG(ra->eflag, RANGE_FLG_NULL)) {
void *data = malloc(sizeof(int64_t)); void *data = malloc(sizeof(int64_t));
SIMPLE_COPY_VALUES(data, &ra->e); SIMPLE_COPY_VALUES(data, &ra->e);
filterAddField(dst, NULL, &data, FLD_TYPE_VALUE, &right, tDataTypes[type].bytes, true); filterAddField(dst, NULL, &data, FLD_TYPE_VALUE, &right, tDataTypes[type].bytes, true);
filterAddUnit(dst, FILTER_GET_FLAG(ra->eflag, RA_EXCLUDE) ? TSDB_RELATION_LESS : TSDB_RELATION_LESS_EQUAL, &left, &right, &uidx); filterAddUnit(dst, FILTER_GET_FLAG(ra->eflag, RANGE_FLG_EXCLUDE) ? TSDB_RELATION_LESS : TSDB_RELATION_LESS_EQUAL, &left, &right, &uidx);
filterAddUnitToGroup(g, uidx); filterAddUnitToGroup(g, uidx);
} }
...@@ -1221,7 +1229,7 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan ...@@ -1221,7 +1229,7 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan
while (r) { while (r) {
memset(g, 0, sizeof(*g)); memset(g, 0, sizeof(*g));
if ((!FILTER_GET_FLAG(r->ra.sflag, RA_NULL)) &&(!FILTER_GET_FLAG(r->ra.eflag, RA_NULL))) { if ((!FILTER_GET_FLAG(r->ra.sflag, RANGE_FLG_NULL)) &&(!FILTER_GET_FLAG(r->ra.eflag, RANGE_FLG_NULL))) {
__compar_fn_t func = getComparFunc(type, 0); __compar_fn_t func = getComparFunc(type, 0);
if (func(&r->ra.s, &r->ra.e) == 0) { if (func(&r->ra.s, &r->ra.e) == 0) {
void *data = malloc(sizeof(int64_t)); void *data = malloc(sizeof(int64_t));
...@@ -1237,19 +1245,19 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan ...@@ -1237,19 +1245,19 @@ int32_t filterAddGroupUnitFromCtx(SFilterInfo *dst, SFilterInfo *src, SFilterRan
} }
} }
if (!FILTER_GET_FLAG(r->ra.sflag, RA_NULL)) { if (!FILTER_GET_FLAG(r->ra.sflag, RANGE_FLG_NULL)) {
void *data = malloc(sizeof(int64_t)); void *data = malloc(sizeof(int64_t));
SIMPLE_COPY_VALUES(data, &r->ra.s); SIMPLE_COPY_VALUES(data, &r->ra.s);
filterAddField(dst, NULL, &data, FLD_TYPE_VALUE, &right, tDataTypes[type].bytes, true); filterAddField(dst, NULL, &data, FLD_TYPE_VALUE, &right, tDataTypes[type].bytes, true);
filterAddUnit(dst, FILTER_GET_FLAG(r->ra.sflag, RA_EXCLUDE) ? TSDB_RELATION_GREATER : TSDB_RELATION_GREATER_EQUAL, &left, &right, &uidx); filterAddUnit(dst, FILTER_GET_FLAG(r->ra.sflag, RANGE_FLG_EXCLUDE) ? TSDB_RELATION_GREATER : TSDB_RELATION_GREATER_EQUAL, &left, &right, &uidx);
filterAddUnitToGroup(g, uidx); filterAddUnitToGroup(g, uidx);
} }
if (!FILTER_GET_FLAG(r->ra.eflag, RA_NULL)) { if (!FILTER_GET_FLAG(r->ra.eflag, RANGE_FLG_NULL)) {
void *data = malloc(sizeof(int64_t)); void *data = malloc(sizeof(int64_t));
SIMPLE_COPY_VALUES(data, &r->ra.e); SIMPLE_COPY_VALUES(data, &r->ra.e);
filterAddField(dst, NULL, &data, FLD_TYPE_VALUE, &right, tDataTypes[type].bytes, true); filterAddField(dst, NULL, &data, FLD_TYPE_VALUE, &right, tDataTypes[type].bytes, true);
filterAddUnit(dst, FILTER_GET_FLAG(r->ra.eflag, RA_EXCLUDE) ? TSDB_RELATION_LESS : TSDB_RELATION_LESS_EQUAL, &left, &right, &uidx); filterAddUnit(dst, FILTER_GET_FLAG(r->ra.eflag, RANGE_FLG_EXCLUDE) ? TSDB_RELATION_LESS : TSDB_RELATION_LESS_EQUAL, &left, &right, &uidx);
filterAddUnitToGroup(g, uidx); filterAddUnitToGroup(g, uidx);
} }
...@@ -1311,7 +1319,7 @@ int32_t filterTreeToGroup(tExprNode* tree, SFilterInfo *info, SArray* group) { ...@@ -1311,7 +1319,7 @@ int32_t filterTreeToGroup(tExprNode* tree, SFilterInfo *info, SArray* group) {
code = filterAddGroupUnitFromNode(info, tree, group); code = filterAddGroupUnitFromNode(info, tree, group);
_err_return: _return:
taosArrayDestroyEx(leftGroup, filterFreeGroup); taosArrayDestroyEx(leftGroup, filterFreeGroup);
taosArrayDestroyEx(rightGroup, filterFreeGroup); taosArrayDestroyEx(rightGroup, filterFreeGroup);
...@@ -1410,20 +1418,20 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options) ...@@ -1410,20 +1418,20 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options)
while (r) { while (r) {
char str[256] = {0}; char str[256] = {0};
int32_t tlen = 0; int32_t tlen = 0;
if (FILTER_GET_FLAG(r->ra.sflag, RA_NULL)) { if (FILTER_GET_FLAG(r->ra.sflag, RANGE_FLG_NULL)) {
strcat(str,"(NULL)"); strcat(str,"(NULL)");
} else { } else {
FILTER_GET_FLAG(r->ra.sflag, RA_EXCLUDE) ? strcat(str,"(") : strcat(str,"["); FILTER_GET_FLAG(r->ra.sflag, RANGE_FLG_EXCLUDE) ? strcat(str,"(") : strcat(str,"[");
converToStr(str + strlen(str), ctx->type, &r->ra.s, tlen > 32 ? 32 : tlen, &tlen); converToStr(str + strlen(str), ctx->type, &r->ra.s, tlen > 32 ? 32 : tlen, &tlen);
FILTER_GET_FLAG(r->ra.sflag, RA_EXCLUDE) ? strcat(str,")") : strcat(str,"]"); FILTER_GET_FLAG(r->ra.sflag, RANGE_FLG_EXCLUDE) ? strcat(str,")") : strcat(str,"]");
} }
strcat(str, " - "); strcat(str, " - ");
if (FILTER_GET_FLAG(r->ra.eflag, RA_NULL)) { if (FILTER_GET_FLAG(r->ra.eflag, RANGE_FLG_NULL)) {
strcat(str, "(NULL)"); strcat(str, "(NULL)");
} else { } else {
FILTER_GET_FLAG(r->ra.eflag, RA_EXCLUDE) ? strcat(str,"(") : strcat(str,"["); FILTER_GET_FLAG(r->ra.eflag, RANGE_FLG_EXCLUDE) ? strcat(str,"(") : strcat(str,"[");
converToStr(str + strlen(str), ctx->type, &r->ra.e, tlen > 32 ? 32 : tlen, &tlen); converToStr(str + strlen(str), ctx->type, &r->ra.e, tlen > 32 ? 32 : tlen, &tlen);
FILTER_GET_FLAG(r->ra.eflag, RA_EXCLUDE) ? strcat(str,")") : strcat(str,"]"); FILTER_GET_FLAG(r->ra.eflag, RANGE_FLG_EXCLUDE) ? strcat(str,")") : strcat(str,"]");
} }
qDebug("range: %s", str); qDebug("range: %s", str);
...@@ -1577,7 +1585,7 @@ int32_t filterInitValFieldData(SFilterInfo *info) { ...@@ -1577,7 +1585,7 @@ int32_t filterInitValFieldData(SFilterInfo *info) {
for (uint16_t i = 0; i < info->unitNum; ++i) { for (uint16_t i = 0; i < info->unitNum; ++i) {
SFilterUnit* unit = &info->units[i]; SFilterUnit* unit = &info->units[i];
if (unit->right.type != FLD_TYPE_VALUE) { if (unit->right.type != FLD_TYPE_VALUE) {
assert(unit->compare.optr == TSDB_RELATION_ISNULL || unit->compare.optr == TSDB_RELATION_NOTNULL); assert(unit->compare.optr == TSDB_RELATION_ISNULL || unit->compare.optr == TSDB_RELATION_NOTNULL || unit->compare.optr == FILTER_DUMMY_EMPTY_OPTR);
continue; continue;
} }
...@@ -1641,7 +1649,6 @@ int32_t filterInitValFieldData(SFilterInfo *info) { ...@@ -1641,7 +1649,6 @@ int32_t filterInitValFieldData(SFilterInfo *info) {
} }
bool filterDoCompare(SFilterUnit *unit, void *left, void *right) { bool filterDoCompare(SFilterUnit *unit, void *left, void *right) {
int32_t ret = unit->compare.pCompareFunc(left, right); int32_t ret = unit->compare.pCompareFunc(left, right);
...@@ -1689,21 +1696,21 @@ int32_t filterAddUnitRange(SFilterInfo *info, SFilterUnit* u, SFilterRangeCtx *c ...@@ -1689,21 +1696,21 @@ int32_t filterAddUnitRange(SFilterInfo *info, SFilterUnit* u, SFilterRangeCtx *c
switch (uoptr) { switch (uoptr) {
case TSDB_RELATION_GREATER: case TSDB_RELATION_GREATER:
SIMPLE_COPY_VALUES(&ra.s, val); SIMPLE_COPY_VALUES(&ra.s, val);
FILTER_SET_FLAG(ra.sflag, RA_EXCLUDE); FILTER_SET_FLAG(ra.sflag, RANGE_FLG_EXCLUDE);
FILTER_SET_FLAG(ra.eflag, RA_NULL); FILTER_SET_FLAG(ra.eflag, RANGE_FLG_NULL);
break; break;
case TSDB_RELATION_GREATER_EQUAL: case TSDB_RELATION_GREATER_EQUAL:
SIMPLE_COPY_VALUES(&ra.s, val); SIMPLE_COPY_VALUES(&ra.s, val);
FILTER_SET_FLAG(ra.eflag, RA_NULL); FILTER_SET_FLAG(ra.eflag, RANGE_FLG_NULL);
break; break;
case TSDB_RELATION_LESS: case TSDB_RELATION_LESS:
SIMPLE_COPY_VALUES(&ra.e, val); SIMPLE_COPY_VALUES(&ra.e, val);
FILTER_SET_FLAG(ra.eflag, RA_EXCLUDE); FILTER_SET_FLAG(ra.eflag, RANGE_FLG_EXCLUDE);
FILTER_SET_FLAG(ra.sflag, RA_NULL); FILTER_SET_FLAG(ra.sflag, RANGE_FLG_NULL);
break; break;
case TSDB_RELATION_LESS_EQUAL: case TSDB_RELATION_LESS_EQUAL:
SIMPLE_COPY_VALUES(&ra.e, val); SIMPLE_COPY_VALUES(&ra.e, val);
FILTER_SET_FLAG(ra.sflag, RA_NULL); FILTER_SET_FLAG(ra.sflag, RANGE_FLG_NULL);
break; break;
case TSDB_RELATION_NOT_EQUAL: case TSDB_RELATION_NOT_EQUAL:
assert(type == TSDB_DATA_TYPE_BOOL); assert(type == TSDB_DATA_TYPE_BOOL);
...@@ -1754,7 +1761,7 @@ int32_t filterCompareRangeCtx(SFilterRangeCtx *ctx1, SFilterRangeCtx *ctx2, bool ...@@ -1754,7 +1761,7 @@ int32_t filterCompareRangeCtx(SFilterRangeCtx *ctx1, SFilterRangeCtx *ctx2, bool
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
_err_return: _return:
*equal = false; *equal = false;
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
...@@ -1785,14 +1792,13 @@ int32_t filterMergeUnits(SFilterInfo *info, SFilterGroupCtx* gRes, uint16_t colI ...@@ -1785,14 +1792,13 @@ int32_t filterMergeUnits(SFilterInfo *info, SFilterGroupCtx* gRes, uint16_t colI
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
_err_return: _return:
*empty = true; *empty = true;
filterFreeRangeCtx(ctx); filterFreeRangeCtx(ctx);
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
...@@ -2033,7 +2039,7 @@ int32_t filterMergeTwoGroups(SFilterInfo *info, SFilterGroupCtx** gRes1, SFilter ...@@ -2033,7 +2039,7 @@ int32_t filterMergeTwoGroups(SFilterInfo *info, SFilterGroupCtx** gRes1, SFilter
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
_err_return: _return:
if (colCtxs) { if (colCtxs) {
if (taosArrayGetSize(colCtxs) > 0) { if (taosArrayGetSize(colCtxs) > 0) {
...@@ -2129,7 +2135,7 @@ int32_t filterMergeGroups(SFilterInfo *info, SFilterGroupCtx** gRes, int32_t *gR ...@@ -2129,7 +2135,7 @@ int32_t filterMergeGroups(SFilterInfo *info, SFilterGroupCtx** gRes, int32_t *gR
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
_err_return: _return:
FILTER_SET_FLAG(info->status, FI_STATUS_ALL); FILTER_SET_FLAG(info->status, FI_STATUS_ALL);
...@@ -2303,7 +2309,7 @@ int32_t filterGenerateColRange(SFilterInfo *info, SFilterGroupCtx** gRes, int32_ ...@@ -2303,7 +2309,7 @@ int32_t filterGenerateColRange(SFilterInfo *info, SFilterGroupCtx** gRes, int32_
} }
} }
_err_return: _return:
tfree(idxNum); tfree(idxNum);
tfree(idxs); tfree(idxs);
...@@ -2492,7 +2498,7 @@ int32_t filterInitFromTree(tExprNode* tree, SFilterInfo **pinfo, uint32_t option ...@@ -2492,7 +2498,7 @@ int32_t filterInitFromTree(tExprNode* tree, SFilterInfo **pinfo, uint32_t option
return code; return code;
_err_return: _return:
qInfo("No filter, code:%d", code); qInfo("No filter, code:%d", code);
taosArrayDestroy(group); taosArrayDestroy(group);
...@@ -2667,7 +2673,7 @@ int32_t filterGetTimeRange(SFilterInfo *info, STimeWindow *win) { ...@@ -2667,7 +2673,7 @@ int32_t filterGetTimeRange(SFilterInfo *info, STimeWindow *win) {
qDebug("qFilter time range:[%"PRId64 "]-[%"PRId64 "]", win->skey, win->ekey); qDebug("qFilter time range:[%"PRId64 "]-[%"PRId64 "]", win->skey, win->ekey);
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
_err_return: _return:
*win = TSWINDOW_DESC_INITIALIZER; *win = TSWINDOW_DESC_INITIALIZER;
...@@ -2704,41 +2710,10 @@ int32_t filterConverNcharColumns(SFilterInfo* info, int32_t rows, bool *gotNchar ...@@ -2704,41 +2710,10 @@ int32_t filterConverNcharColumns(SFilterInfo* info, int32_t rows, bool *gotNchar
} }
} }
#if 0
for (int32_t i = 0; i < numOfFilterCols; ++i) {
if (pFilterInfo[i].info.type == TSDB_DATA_TYPE_NCHAR) {
pFilterInfo[i].pData2 = pFilterInfo[i].pData;
pFilterInfo[i].pData = malloc(rows * pFilterInfo[i].info.bytes);
int32_t bufSize = pFilterInfo[i].info.bytes - VARSTR_HEADER_SIZE;
for (int32_t j = 0; j < rows; ++j) {
char* dst = (char *)pFilterInfo[i].pData + j * pFilterInfo[i].info.bytes;
char* src = (char *)pFilterInfo[i].pData2 + j * pFilterInfo[i].info.bytes;
int32_t len = 0;
taosMbsToUcs4(varDataVal(src), varDataLen(src), varDataVal(dst), bufSize, &len);
varDataLen(dst) = len;
}
*gotNchar = true;
}
}
#endif
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
int32_t filterFreeNcharColumns(SFilterInfo* info) { int32_t filterFreeNcharColumns(SFilterInfo* info) {
#if 0
for (int32_t i = 0; i < numOfFilterCols; ++i) {
if (pFilterInfo[i].info.type == TSDB_DATA_TYPE_NCHAR) {
if (pFilterInfo[i].pData2) {
tfree(pFilterInfo[i].pData);
pFilterInfo[i].pData = pFilterInfo[i].pData2;
pFilterInfo[i].pData2 = NULL;
}
}
}
#endif
for (uint16_t i = 0; i < info->fields[FLD_TYPE_COLUMN].num; ++i) { for (uint16_t i = 0; i < info->fields[FLD_TYPE_COLUMN].num; ++i) {
SFilterField* fi = &info->fields[FLD_TYPE_COLUMN].fields[i]; SFilterField* fi = &info->fields[FLD_TYPE_COLUMN].fields[i];
int32_t type = FILTER_GET_COL_FIELD_TYPE(fi); int32_t type = FILTER_GET_COL_FIELD_TYPE(fi);
......
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
#pragma GCC diagnostic ignored "-Wunused-variable" #pragma GCC diagnostic ignored "-Wunused-variable"
extern "C" { extern "C" {
extern void* filterInitRangeCtx(int32_t type, int32_t options);
extern int32_t filterGetRangeNum(void* h, int32_t* num);
extern int32_t filterGetRangeRes(void* h, SFilterRange *ra);
extern int32_t filterFreeRangeCtx(void* h);
extern int32_t filterAddRange(void* h, SFilterRange* ra, int32_t optr); extern int32_t filterAddRange(void* h, SFilterRange* ra, int32_t optr);
} }
......
...@@ -1865,9 +1865,23 @@ if $rows != 28 then ...@@ -1865,9 +1865,23 @@ if $rows != 28 then
return -1 return -1
endi endi
sql select * from stb1 where c5 in (-9999999999); sql select * from stb1 where c5 in (-9999999999);
#sql select * from stb1 where c5 in (9999999999); if $rows != 0 then
#sql select * from stb1 where c5 in (-9999999999,3,4,9999999999); return -1
endi
sql select * from stb1 where c5 in (9999999999);
if $rows != 0 then
return -1
endi
sql select * from stb1 where c5 in (-9999999999,3,4,9999999999);
if $rows != 2 then
return -1
endi
if $data00 != @21-05-05 18:19:02.000@ then
return -1
endi
if $data10 != @21-05-05 18:19:03.000@ then
return -1
endi
sql select * from stb3 where c1 > 3 and c1 < 2; sql select * from stb3 where c1 > 3 and c1 < 2;
if $rows != 0 then if $rows != 0 then
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册