提交 99356e79 编写于 作者: wmmhello's avatar wmmhello

feature/TD-6129 make json_null value to 4 bytes to avoid python connector error

上级 0213adf4
...@@ -5218,12 +5218,12 @@ char* parseTagDatatoJson(void *p){ ...@@ -5218,12 +5218,12 @@ char* parseTagDatatoJson(void *p){
continue; continue;
} }
if(j == 1){ if(j == 1){
uint8_t jsonNULL = *(uint8_t*)(varDataVal(val)); uint32_t jsonNULL = *(uint32_t*)(varDataVal(val));
ASSERT(jsonNULL == TSDB_DATA_JSON_NULL); ASSERT(jsonNULL == TSDB_DATA_JSON_NULL);
continue; continue;
} }
if (j == 2){ if (j == 2){
if(*(uint8_t*)(varDataVal(val + CHAR_BYTES)) == TSDB_DATA_JSON_NULL) goto end; if(*(uint32_t*)(varDataVal(val + CHAR_BYTES)) == TSDB_DATA_JSON_NULL) goto end;
continue; continue;
} }
if (j%2 == 1) { // json key encode by binary if (j%2 == 1) { // json key encode by binary
...@@ -5286,21 +5286,21 @@ end: ...@@ -5286,21 +5286,21 @@ end:
int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, int16_t startColId){ int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, int16_t startColId){
// set json NULL data // set json NULL data
uint8_t nullTypeVal[CHAR_BYTES + VARSTR_HEADER_SIZE + CHAR_BYTES] = {0}; uint8_t nullTypeVal[CHAR_BYTES + VARSTR_HEADER_SIZE + INT_BYTES] = {0};
uint8_t jsonNULL = TSDB_DATA_JSON_NULL; uint32_t jsonNULL = TSDB_DATA_JSON_NULL;
int jsonIndex = startColId + 1; int jsonIndex = startColId + 1;
char nullTypeKey[VARSTR_HEADER_SIZE + CHAR_BYTES] = {0}; char nullTypeKey[VARSTR_HEADER_SIZE + INT_BYTES] = {0};
varDataSetLen(nullTypeKey, CHAR_BYTES); varDataSetLen(nullTypeKey, INT_BYTES);
varDataSetLen(nullTypeVal + CHAR_BYTES, CHAR_BYTES); varDataSetLen(nullTypeVal + CHAR_BYTES, INT_BYTES);
*(uint8_t*)(varDataVal(nullTypeKey)) = jsonNULL; *(uint32_t*)(varDataVal(nullTypeKey)) = jsonNULL;
tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_NCHAR, nullTypeKey, false); // add json null type tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_NCHAR, nullTypeKey, false); // add json null type
if (strtrim(json) == 0 || strcasecmp(json, "null") == 0){ if (strtrim(json) == 0 || strcasecmp(json, "null") == 0){
*(uint8_t*)(varDataVal(nullTypeVal + CHAR_BYTES)) = jsonNULL; *(uint32_t*)(varDataVal(nullTypeVal + CHAR_BYTES)) = jsonNULL;
tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_NCHAR, nullTypeVal, true); // add json null value tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_NCHAR, nullTypeVal, true); // add json null value
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
int8_t jsonNotNull = TSDB_DATA_JSON_NOT_NULL; int32_t jsonNotNull = TSDB_DATA_JSON_NOT_NULL;
*(uint8_t*)(varDataVal(nullTypeVal + CHAR_BYTES)) = jsonNotNull; *(uint32_t*)(varDataVal(nullTypeVal + CHAR_BYTES)) = jsonNotNull;
tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_NCHAR, nullTypeVal, true); // add json type tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_NCHAR, nullTypeVal, true); // add json type
// set json real data // set json real data
...@@ -5392,8 +5392,8 @@ int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, in ...@@ -5392,8 +5392,8 @@ int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, in
} }
if(taosHashGetSize(keyHash) == 0){ // set json NULL true if(taosHashGetSize(keyHash) == 0){ // set json NULL true
*(uint8_t*)(varDataVal(nullTypeVal + CHAR_BYTES)) = jsonNULL; *(uint32_t*)(varDataVal(nullTypeVal + CHAR_BYTES)) = jsonNULL;
memcpy(POINTER_SHIFT(kvRowBuilder->buf, kvRowBuilder->pColIdx[2].offset), nullTypeVal, CHAR_BYTES + VARSTR_HEADER_SIZE + CHAR_BYTES); memcpy(POINTER_SHIFT(kvRowBuilder->buf, kvRowBuilder->pColIdx[2].offset), nullTypeVal, CHAR_BYTES + VARSTR_HEADER_SIZE + INT_BYTES);
} }
end: end:
......
...@@ -441,8 +441,8 @@ void setVardataNull(void* val, int32_t type) { ...@@ -441,8 +441,8 @@ void setVardataNull(void* val, int32_t type) {
varDataSetLen(val, sizeof(int32_t)); varDataSetLen(val, sizeof(int32_t));
*(uint32_t*) varDataVal(val) = TSDB_DATA_NCHAR_NULL; *(uint32_t*) varDataVal(val) = TSDB_DATA_NCHAR_NULL;
} else if (type == TSDB_DATA_TYPE_JSON) { } else if (type == TSDB_DATA_TYPE_JSON) {
varDataSetLen(val, sizeof(int8_t)); varDataSetLen(val, sizeof(int32_t));
*(uint8_t*) varDataVal(val) = TSDB_DATA_JSON_NULL; *(uint32_t*) varDataVal(val) = TSDB_DATA_JSON_NULL;
} else { } else {
assert(0); assert(0);
} }
......
...@@ -72,7 +72,7 @@ extern const int32_t TYPE_BYTES[16]; ...@@ -72,7 +72,7 @@ extern const int32_t TYPE_BYTES[16];
#define TSDB_DATA_NCHAR_NULL 0xFFFFFFFF #define TSDB_DATA_NCHAR_NULL 0xFFFFFFFF
#define TSDB_DATA_BINARY_NULL 0xFF #define TSDB_DATA_BINARY_NULL 0xFF
#define TSDB_DATA_JSON_PLACEHOLDER 0x7F #define TSDB_DATA_JSON_PLACEHOLDER 0x7F
#define TSDB_DATA_JSON_NULL 0xFF #define TSDB_DATA_JSON_NULL 0xFFFFFFFF
#define TSDB_DATA_JSON_NOT_NULL 0x01 #define TSDB_DATA_JSON_NOT_NULL 0x01
#define TSDB_DATA_UTINYINT_NULL 0xFF #define TSDB_DATA_UTINYINT_NULL 0xFF
......
...@@ -160,7 +160,7 @@ static FORCE_INLINE bool isNull(const void *val, int32_t type) { ...@@ -160,7 +160,7 @@ static FORCE_INLINE bool isNull(const void *val, int32_t type) {
case TSDB_DATA_TYPE_DOUBLE: case TSDB_DATA_TYPE_DOUBLE:
return *(uint64_t *)val == TSDB_DATA_DOUBLE_NULL; return *(uint64_t *)val == TSDB_DATA_DOUBLE_NULL;
case TSDB_DATA_TYPE_JSON: case TSDB_DATA_TYPE_JSON:
return varDataLen(val) == sizeof(int8_t) && *(uint8_t *) varDataVal(val) == TSDB_DATA_JSON_NULL; return varDataLen(val) == sizeof(int32_t) && *(uint32_t *) varDataVal(val) == TSDB_DATA_JSON_NULL;
case TSDB_DATA_TYPE_NCHAR: case TSDB_DATA_TYPE_NCHAR:
return varDataLen(val) == sizeof(int32_t) && *(uint32_t*) varDataVal(val) == TSDB_DATA_NCHAR_NULL; return varDataLen(val) == sizeof(int32_t) && *(uint32_t*) varDataVal(val) == TSDB_DATA_NCHAR_NULL;
case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_BINARY:
......
...@@ -1197,8 +1197,8 @@ static int32_t filterDealJson(SFilterInfo *info, tExprNode* tree, tExprNode** pL ...@@ -1197,8 +1197,8 @@ static int32_t filterDealJson(SFilterInfo *info, tExprNode* tree, tExprNode** pL
if(tree->_node.optr == TSDB_RELATION_ISNULL || tree->_node.optr == TSDB_RELATION_NOTNULL){ if(tree->_node.optr == TSDB_RELATION_ISNULL || tree->_node.optr == TSDB_RELATION_NOTNULL){
if((*pLeft)->pSchema->type == TSDB_DATA_TYPE_JSON) { if((*pLeft)->pSchema->type == TSDB_DATA_TYPE_JSON) {
char keyMd5[TSDB_MAX_JSON_KEY_MD5_LEN] = {0}; char keyMd5[TSDB_MAX_JSON_KEY_MD5_LEN] = {0};
uint8_t nullData = TSDB_DATA_JSON_NULL; uint32_t nullData = TSDB_DATA_JSON_NULL;
jsonKeyMd5(&nullData, 1, keyMd5); jsonKeyMd5(&nullData, INT_BYTES, keyMd5);
memcpy(schema->name, keyMd5, TSDB_MAX_JSON_KEY_MD5_LEN); memcpy(schema->name, keyMd5, TSDB_MAX_JSON_KEY_MD5_LEN);
} }
}else if(tree->_node.optr == TSDB_RELATION_MATCH || tree->_node.optr == TSDB_RELATION_NMATCH || tree->_node.optr == TSDB_RELATION_LIKE){ }else if(tree->_node.optr == TSDB_RELATION_MATCH || tree->_node.optr == TSDB_RELATION_NMATCH || tree->_node.optr == TSDB_RELATION_LIKE){
......
...@@ -1101,7 +1101,7 @@ static int tsdbAddTableIntoIndex(STsdbMeta *pMeta, STable *pTable, bool refSuper ...@@ -1101,7 +1101,7 @@ static int tsdbAddTableIntoIndex(STsdbMeta *pMeta, STable *pTable, bool refSuper
continue; continue;
} }
if (j == 1) { if (j == 1) {
uint8_t jsonNULL = *(uint8_t *)(varDataVal(val)); uint32_t jsonNULL = *(uint32_t *)(varDataVal(val));
ASSERT(jsonNULL == TSDB_DATA_JSON_NULL); ASSERT(jsonNULL == TSDB_DATA_JSON_NULL);
} }
...@@ -1187,7 +1187,7 @@ static int tsdbRemoveTableFromIndex(STsdbMeta *pMeta, STable *pTable) { ...@@ -1187,7 +1187,7 @@ static int tsdbRemoveTableFromIndex(STsdbMeta *pMeta, STable *pTable) {
continue; continue;
} }
if (j == 1){ if (j == 1){
uint8_t jsonNULL = *(uint8_t*)(varDataVal(val)); uint32_t jsonNULL = *(uint32_t*)(varDataVal(val));
ASSERT(jsonNULL == TSDB_DATA_JSON_NULL); ASSERT(jsonNULL == TSDB_DATA_JSON_NULL);
} }
...@@ -1494,9 +1494,9 @@ static void *tsdbDecodeTable(void *buf, STable **pRTable) { ...@@ -1494,9 +1494,9 @@ static void *tsdbDecodeTable(void *buf, STable **pRTable) {
} }
static SArray* getJsonTagTableList(STable *pTable){ static SArray* getJsonTagTableList(STable *pTable){
uint8_t key = TSDB_DATA_JSON_NULL; uint32_t key = TSDB_DATA_JSON_NULL;
char keyMd5[TSDB_MAX_JSON_KEY_MD5_LEN] = {0}; char keyMd5[TSDB_MAX_JSON_KEY_MD5_LEN] = {0};
jsonKeyMd5(&key, 1, keyMd5); jsonKeyMd5(&key, INT_BYTES, keyMd5);
SArray** tablist = (SArray**)taosHashGet(pTable->jsonKeyMap, keyMd5, TSDB_MAX_JSON_KEY_MD5_LEN); SArray** tablist = (SArray**)taosHashGet(pTable->jsonKeyMap, keyMd5, TSDB_MAX_JSON_KEY_MD5_LEN);
return *tablist; return *tablist;
......
...@@ -2679,9 +2679,9 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int ...@@ -2679,9 +2679,9 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int
static int32_t getAllTableList(STable* pSuperTable, SArray* list) { static int32_t getAllTableList(STable* pSuperTable, SArray* list) {
STSchema* pTagSchema = tsdbGetTableTagSchema(pSuperTable); STSchema* pTagSchema = tsdbGetTableTagSchema(pSuperTable);
if(pTagSchema && pTagSchema->numOfCols == 1 && pTagSchema->columns[0].type == TSDB_DATA_TYPE_JSON){ if(pTagSchema && pTagSchema->numOfCols == 1 && pTagSchema->columns[0].type == TSDB_DATA_TYPE_JSON){
uint8_t key = TSDB_DATA_JSON_NULL; uint32_t key = TSDB_DATA_JSON_NULL;
char keyMd5[TSDB_MAX_JSON_KEY_MD5_LEN] = {0}; char keyMd5[TSDB_MAX_JSON_KEY_MD5_LEN] = {0};
jsonKeyMd5(&key, 1, keyMd5); jsonKeyMd5(&key, INT_BYTES, keyMd5);
SArray** tablist = (SArray**)taosHashGet(pSuperTable->jsonKeyMap, keyMd5, TSDB_MAX_JSON_KEY_MD5_LEN); SArray** tablist = (SArray**)taosHashGet(pSuperTable->jsonKeyMap, keyMd5, TSDB_MAX_JSON_KEY_MD5_LEN);
for (int i = 0; i < taosArrayGetSize(*tablist); ++i) { for (int i = 0; i < taosArrayGetSize(*tablist); ++i) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册