From 54c1cf8063b88d41858c367c4de352615dab0d3f Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 28 Sep 2021 17:31:36 +0800 Subject: [PATCH] TD-6129 add tag-> where logic --- src/client/src/tscUtil.c | 1 + src/query/src/qFilter.c | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 8150c45ae7..ec9bacd6a4 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -73,6 +73,7 @@ int32_t converToStr(char *str, int type, void *buf, int32_t bufSize, int32_t *le case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: + case TSDB_DATA_TYPE_JSON: if (bufSize < 0) { tscError("invalid buf size"); return TSDB_CODE_TSC_INVALID_VALUE; diff --git a/src/query/src/qFilter.c b/src/query/src/qFilter.c index 7762714ffa..d280fcf5c7 100644 --- a/src/query/src/qFilter.c +++ b/src/query/src/qFilter.c @@ -3193,17 +3193,20 @@ int32_t filterSetJsonColFieldData(SFilterInfo *info, void *param, filer_get_col_ int filterJsonTypeConvert(SFilterInfo* info) { for(int i = 0; i < info->fields[FLD_TYPE_COLUMN].num; i++) { SSchema* schema = info->fields[FLD_TYPE_COLUMN].fields[i].desc; - if(schema->type == TSDB_DATA_TYPE_JSON && schema->colId != 0){ // schema->colId != 0 means not ? operation - - void* data = getJsonTagValue(info->pTable, schema->name, strlen(schema->name)); - if(data == NULL) return TSDB_CODE_QRY_JSON_KEY_NOT_EXIST; - int8_t type = *(char*)data; - assert(type > TSDB_DATA_TYPE_NULL && type < TSDB_DATA_TYPE_JSON); - schema->type = type; + if(schema->type == TSDB_DATA_TYPE_JSON){ + if(schema->colId != 0){ // schema->colId != 0 means not ? operation + void* data = getJsonTagValue(info->pTable, schema->name, strlen(schema->name)); + if(data == NULL) return TSDB_CODE_QRY_JSON_KEY_NOT_EXIST; + int8_t type = *(char*)data; + assert(type > TSDB_DATA_TYPE_NULL && type < TSDB_DATA_TYPE_JSON); + schema->type = type; + }else{ + schema->type = TSDB_DATA_TYPE_BINARY; + } } } for(int i = 0; i < info->unitNum; i++){ - if(info->units[i].compare.type == TSDB_DATA_TYPE_JSON && info->units[i].compare.optr == TSDB_RELATION_ARROW){ + if(info->units[i].compare.type == TSDB_DATA_TYPE_JSON){ SFilterField *colLeft = FILTER_UNIT_LEFT_FIELD(info, &info->units[i]); info->units[i].compare.type = FILTER_GET_COL_FIELD_TYPE(colLeft); @@ -3239,7 +3242,7 @@ int32_t filterInitFromTree(tExprNode* tree, void **pinfo, uint32_t options) { ERR_JRET(code); if(info->pTable){ - code = filterJsonTypeConvert(info); + code = filterJsonTypeConvert(info); // convert json type to other type to prepare for th next defination of compare function ERR_JRET(code); } -- GitLab