diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 8150c45ae77647b039b3ad60d55427388d9a3fd5..ec9bacd6a4da93abba3480953b9925f8634056af 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 7762714ffa9c5301ccb7b5d3c28a65ea3277a7c0..d280fcf5c7e11d47ed416b24efdac7a94ea70cf2 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); }