From 748b9741ed46d526040fad0cb09cf8cd0e284867 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Sun, 17 Oct 2021 01:58:38 +0800 Subject: [PATCH] TD-6129 support null true false for json tag --- src/client/src/tscUtil.c | 12 ++++++++---- src/tsdb/src/tsdbMeta.c | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 3ae9a2b244..d0121f0639 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -5256,7 +5256,7 @@ char* parseTagDatatoJson(void *p){ continue; } if (j == 2){ - if(*(uint8_t*)val == TSDB_DATA_JSON_NULL) goto end; + if(*(uint8_t*)(val+CHAR_BYTES) == TSDB_DATA_JSON_NULL) goto end; continue; } if (j%2 == 1) { // json key encode by binary @@ -5318,6 +5318,7 @@ end: } int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, int16_t startColId){ + uint8_t nullTypeVal[CHAR_BYTES + CHAR_BYTES] = {0}; uint8_t jsonNULL = TSDB_DATA_JSON_NULL; int jsonIndex = startColId + 1; char nullTypeKey[VARSTR_HEADER_SIZE + CHAR_BYTES] = {0}; @@ -5325,11 +5326,13 @@ int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, in *(uint8_t*)(varDataVal(nullTypeKey)) = jsonNULL; tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_NCHAR, nullTypeKey, false); // add json null type if (strtrim(json) == 0 || strcasecmp(json, "null") == 0){ - tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_JSON, &jsonNULL, false); // add json null value + nullTypeVal[1] = jsonNULL; + tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_JSON, &nullTypeVal, true); // add json null value return TSDB_CODE_SUCCESS; } int8_t jsonNotNull = TSDB_DATA_JSON_NOT_NULL; - tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_JSON, &jsonNotNull, false); // add json type + nullTypeVal[1] = jsonNotNull; + tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_JSON, &nullTypeVal, true); // add json type cJSON *root = cJSON_Parse(json); if (root == NULL){ @@ -5415,7 +5418,8 @@ int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, in } if(taosHashGetSize(keyHash) == 0){ // set json NULL true - memcpy(POINTER_SHIFT(kvRowBuilder->buf, kvRowBuilder->pColIdx[2].offset), &jsonNULL, CHAR_BYTES); + nullTypeVal[1] = jsonNULL; + memcpy(POINTER_SHIFT(kvRowBuilder->buf, kvRowBuilder->pColIdx[2].offset), &nullTypeVal, CHAR_BYTES + CHAR_BYTES); } end: diff --git a/src/tsdb/src/tsdbMeta.c b/src/tsdb/src/tsdbMeta.c index c6084e4919..9f5b813ac7 100644 --- a/src/tsdb/src/tsdbMeta.c +++ b/src/tsdb/src/tsdbMeta.c @@ -1116,7 +1116,7 @@ static int tsdbAddTableIntoIndex(STsdbMeta *pMeta, STable *pTable, bool refSuper SColIdx * pColIdxNull = kvRowColIdxAt(pTable->tagVal, j+1); void* valNull = (kvRowColVal(pTable->tagVal, pColIdxNull)); - if(*(uint8_t*)valNull == TSDB_DATA_JSON_NOT_NULL) continue; // do not add null type if json is not null + if(*(uint8_t*)(valNull+CHAR_BYTES) == TSDB_DATA_JSON_NOT_NULL) continue; // do not add null type if json is not null } char keyMd5[TSDB_MAX_JSON_KEY_MD5_LEN] = {0}; @@ -1196,7 +1196,7 @@ static int tsdbRemoveTableFromIndex(STsdbMeta *pMeta, STable *pTable) { ASSERT(jsonNULL == TSDB_DATA_JSON_NULL); SColIdx * pColIdxNull = kvRowColIdxAt(pTable->tagVal, j+1); void* valNull = (kvRowColVal(pTable->tagVal, pColIdxNull)); - if(*(uint8_t*)valNull == TSDB_DATA_JSON_NOT_NULL) continue; + if(*(uint8_t*)(valNull+CHAR_BYTES) == TSDB_DATA_JSON_NOT_NULL) continue; } char keyMd5[TSDB_MAX_JSON_KEY_MD5_LEN] = {0}; -- GitLab