From 222286c5cb795e308419d961f7cb1b9d24e041a5 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 1 Dec 2021 14:29:58 +0800 Subject: [PATCH] enable different value type of the same key in json --- src/client/src/tscUtil.c | 30 ++++++++++-------------------- src/query/src/qFilter.c | 4 ++-- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index b443f1f5b1..49248d335e 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -5697,26 +5697,16 @@ int8_t jsonType2DbType(double data, int jsonType){ } void* getJsonTagValue(STable* pTable, char* key, int32_t keyLen, int16_t* retColId){ - if(TABLE_TYPE(pTable) == TSDB_CHILD_TABLE){ - STable* superTable= pTable->pSuper; - SArray** data = (SArray**)taosHashGet(superTable->jsonKeyMap, key, keyLen); - if(data == NULL) return NULL; - JsonMapValue jmvalue = {pTable, 0}; - JsonMapValue* p = taosArraySearch(*data, &jmvalue, tsdbCompareJsonMapValue, TD_EQ); - if (p == NULL) return NULL; - int16_t colId = p->colId + 1; - if(retColId) *retColId = p->colId; - return tdGetKVRowValOfCol(pTable->tagVal, colId); - }else if(TABLE_TYPE(pTable) == TSDB_SUPER_TABLE){ - SArray** data = (SArray**)taosHashGet(pTable->jsonKeyMap, key, keyLen); - if(data == NULL) return NULL; - if(taosArrayGetSize(*data) == 0) return NULL; - JsonMapValue* p = taosArrayGet(*data, 0); - int16_t colId = p->colId + 1; - if(retColId) *retColId = p->colId; - return tdGetKVRowValOfCol(((STable*)(p->table))->tagVal, colId); - } - return NULL; + assert(TABLE_TYPE(pTable) == TSDB_CHILD_TABLE); + STable* superTable= pTable->pSuper; + SArray** data = (SArray**)taosHashGet(superTable->jsonKeyMap, key, keyLen); + if(data == NULL) return NULL; + JsonMapValue jmvalue = {pTable, 0}; + JsonMapValue* p = taosArraySearch(*data, &jmvalue, tsdbCompareJsonMapValue, TD_EQ); + if (p == NULL) return NULL; + int16_t colId = p->colId + 1; + if(retColId) *retColId = p->colId; + return tdGetKVRowValOfCol(pTable->tagVal, colId); } // get key from json->'key' diff --git a/src/query/src/qFilter.c b/src/query/src/qFilter.c index b92953a506..d0eb45a150 100644 --- a/src/query/src/qFilter.c +++ b/src/query/src/qFilter.c @@ -2951,7 +2951,7 @@ static FORCE_INLINE bool filterExecuteImplIsNull(void *pinfo, int32_t numOfRows, uint32_t uidx = info->groups[0].unitIdxs[0]; void *colData = (char *)info->cunits[uidx].colData + info->cunits[uidx].dataSize * i; if(info->cunits[uidx].dataType == TSDB_DATA_TYPE_JSON){ - colData += CHAR_BYTES; + if(colData) colData += CHAR_BYTES; } (*p)[i] = ((colData == NULL) || isNull(colData, info->cunits[uidx].dataType)); if ((*p)[i] == 0) { @@ -2977,7 +2977,7 @@ static FORCE_INLINE bool filterExecuteImplNotNull(void *pinfo, int32_t numOfRows uint32_t uidx = info->groups[0].unitIdxs[0]; void *colData = (char *)info->cunits[uidx].colData + info->cunits[uidx].dataSize * i; if(info->cunits[uidx].dataType == TSDB_DATA_TYPE_JSON){ - colData += CHAR_BYTES; + if(colData) colData += CHAR_BYTES; } (*p)[i] = ((colData != NULL) && !isNull(colData, info->cunits[uidx].dataType)); if ((*p)[i] == 0) { -- GitLab