提交 1c02a1f2 编写于 作者: wmmhello's avatar wmmhello

fix group by json tag format [change json type with qid return logic]

上级 946d72e5
...@@ -2657,7 +2657,8 @@ static void updateFieldForJson(SSqlObj *pSql, SQueryTableRsp *pQueryAttr){ ...@@ -2657,7 +2657,8 @@ static void updateFieldForJson(SSqlObj *pSql, SQueryTableRsp *pQueryAttr){
if (pField->field.type == TSDB_DATA_TYPE_JSON) { if (pField->field.type == TSDB_DATA_TYPE_JSON) {
pField->fieldJson.type = TSDB_DATA_TYPE_JSON; pField->fieldJson.type = TSDB_DATA_TYPE_JSON;
for (int k = 0; k < pQueryAttr->tJsonSchLen; ++k) { for (int k = 0; k < pQueryAttr->tJsonSchLen; ++k) {
if (strncmp(pField->fieldJson.name, pQueryAttr->tagJsonSchema[k].name, TSDB_MAX_JSON_KEY_LEN) == 0) { if (strncmp(pField->fieldJson.name, pQueryAttr->tagJsonSchema[k].name, TSDB_MAX_JSON_KEY_LEN) == 0
&& pQueryAttr->tagJsonSchema[k].type != TSDB_DATA_TYPE_JSON) {
pField->fieldJson.type = pQueryAttr->tagJsonSchema[k].type; pField->fieldJson.type = pQueryAttr->tagJsonSchema[k].type;
pField->fieldJson.bytes = TYPE_BYTES[pField->field.type]; pField->fieldJson.bytes = TYPE_BYTES[pField->field.type];
tscDebug("0x%" PRIx64 " change json type %s:%s to %d", pSql->self, pField->field.name, pQueryAttr->tagJsonSchema[k].name, tscDebug("0x%" PRIx64 " change json type %s:%s to %d", pSql->self, pField->field.name, pQueryAttr->tagJsonSchema[k].name,
......
...@@ -715,11 +715,12 @@ static void setResRawPtrImpl(SSqlRes* pRes, SInternalField* pInfo, int32_t i, bo ...@@ -715,11 +715,12 @@ static void setResRawPtrImpl(SSqlRes* pRes, SInternalField* pInfo, int32_t i, bo
char* realData = p + CHAR_BYTES; char* realData = p + CHAR_BYTES;
char type = *p; char type = *p;
if (type == TSDB_DATA_TYPE_NCHAR && isNull(realData, TSDB_DATA_TYPE_JSON)) { if (type == TSDB_DATA_TYPE_JSON && isNull(realData, TSDB_DATA_TYPE_JSON)) {
memcpy(dst, realData, varDataTLen(realData)); type = pInfo->fieldJson.type;
offset = pInfo->field.bytes; setNull(realData, type, 0);
}else if (type == TSDB_DATA_TYPE_NCHAR) { }
if(convertNchar){ if (type == TSDB_DATA_TYPE_NCHAR || type == TSDB_DATA_TYPE_JSON) {
if(convertNchar && !isNull(realData, TSDB_DATA_TYPE_NCHAR)){
int32_t length = taosUcs4ToMbs(varDataVal(realData), varDataLen(realData), varDataVal(dst)); int32_t length = taosUcs4ToMbs(varDataVal(realData), varDataLen(realData), varDataVal(dst));
varDataSetLen(dst, length); varDataSetLen(dst, length);
if (length == 0) { if (length == 0) {
...@@ -729,17 +730,10 @@ static void setResRawPtrImpl(SSqlRes* pRes, SInternalField* pInfo, int32_t i, bo ...@@ -729,17 +730,10 @@ static void setResRawPtrImpl(SSqlRes* pRes, SInternalField* pInfo, int32_t i, bo
memcpy(dst, realData, varDataTLen(realData)); memcpy(dst, realData, varDataTLen(realData));
} }
offset = pInfo->field.bytes; offset = pInfo->field.bytes;
}else if (type == TSDB_DATA_TYPE_DOUBLE) {
memcpy(dst, realData, DOUBLE_BYTES);
offset = DOUBLE_BYTES;
}else if (type == TSDB_DATA_TYPE_BIGINT) {
memcpy(dst, realData, LONG_BYTES);
offset = LONG_BYTES;
}else if (type == TSDB_DATA_TYPE_BOOL) {
memcpy(dst, realData, CHAR_BYTES);
offset = CHAR_BYTES;
}else { }else {
assert(0); assert(type <= TSDB_DATA_TYPE_DOUBLE && type >=TSDB_DATA_TYPE_BOOL);
memcpy(dst, realData, tDataTypes[(int32_t)type].bytes);
offset = tDataTypes[(int32_t)type].bytes;
} }
p += pInfo->field.bytes; p += pInfo->field.bytes;
...@@ -5384,7 +5378,7 @@ void* getJsonTagValueElment(STable* data, char* key, int32_t keyLen, char* dst, ...@@ -5384,7 +5378,7 @@ void* getJsonTagValueElment(STable* data, char* key, int32_t keyLen, char* dst,
void* result = getJsonTagValue(data, keyMd5, TSDB_MAX_JSON_KEY_MD5_LEN, NULL); void* result = getJsonTagValue(data, keyMd5, TSDB_MAX_JSON_KEY_MD5_LEN, NULL);
if (result == NULL){ // json key no result if (result == NULL){ // json key no result
if(!dst) return NULL; if(!dst) return NULL;
*(char*)dst = TSDB_DATA_TYPE_NCHAR; *(char*)dst = TSDB_DATA_TYPE_JSON;
setNull(dst + CHAR_BYTES, TSDB_DATA_TYPE_JSON, 0); setNull(dst + CHAR_BYTES, TSDB_DATA_TYPE_JSON, 0);
return dst; return dst;
} }
...@@ -5412,7 +5406,7 @@ void* getJsonTagValueElment(STable* data, char* key, int32_t keyLen, char* dst, ...@@ -5412,7 +5406,7 @@ void* getJsonTagValueElment(STable* data, char* key, int32_t keyLen, char* dst,
void getJsonTagValueAll(void* data, void* dst, int16_t bytes) { void getJsonTagValueAll(void* data, void* dst, int16_t bytes) {
char* json = parseTagDatatoJson(data); char* json = parseTagDatatoJson(data);
char* tagData = dst + CHAR_BYTES; char* tagData = dst + CHAR_BYTES;
*(char*)dst = TSDB_DATA_TYPE_NCHAR; *(char*)dst = TSDB_DATA_TYPE_JSON;
if(json == NULL){ if(json == NULL){
setNull(tagData, TSDB_DATA_TYPE_JSON, 0); setNull(tagData, TSDB_DATA_TYPE_JSON, 0);
return; return;
......
...@@ -83,12 +83,12 @@ static void* setJsonTagSchema(void* tsdb, int16_t numOfOutput, SExprInfo *pExprs ...@@ -83,12 +83,12 @@ static void* setJsonTagSchema(void* tsdb, int16_t numOfOutput, SExprInfo *pExprs
SSqlExpr* sqlExpr = &pExprs[i].base; SSqlExpr* sqlExpr = &pExprs[i].base;
if (sqlExpr->colType == TSDB_DATA_TYPE_JSON && sqlExpr->numOfParams > 0){ if (sqlExpr->colType == TSDB_DATA_TYPE_JSON && sqlExpr->numOfParams > 0){
TagJsonSSchema* schema = (TagJsonSSchema*)(tmp); TagJsonSSchema* schema = (TagJsonSSchema*)(tmp);
schema->type = TSDB_DATA_TYPE_NULL; schema->type = TSDB_DATA_TYPE_JSON;
tstrncpy(schema->name, sqlExpr->aliasName, TSDB_MAX_JSON_KEY_LEN); tstrncpy(schema->name, sqlExpr->aliasName, TSDB_MAX_JSON_KEY_LEN);
for (int j = 0; j < taosArrayGetSize(pTableIdList); ++j) { for (int j = 0; j < taosArrayGetSize(pTableIdList); ++j) {
STableIdInfo *id = taosArrayGet(pTableIdList, j); STableIdInfo *id = taosArrayGet(pTableIdList, j);
uint8_t type = getTagJsonType(tsdb, id->uid, sqlExpr->param[0].pz, sqlExpr->param[0].nLen); uint8_t type = getTagJsonType(tsdb, id->uid, sqlExpr->param[0].pz, sqlExpr->param[0].nLen);
if(type != TSDB_DATA_TYPE_NULL) { if(type != TSDB_DATA_TYPE_JSON) {
schema->type = type; schema->type = type;
break; break;
} }
......
...@@ -4118,7 +4118,7 @@ uint8_t getTagJsonType(STsdbRepo* tsdb, uint64_t uid, char* key, int32_t len){ ...@@ -4118,7 +4118,7 @@ uint8_t getTagJsonType(STsdbRepo* tsdb, uint64_t uid, char* key, int32_t len){
if(result){ if(result){
return *(char*)result; return *(char*)result;
}else{ }else{
return TSDB_DATA_TYPE_NULL; return TSDB_DATA_TYPE_JSON;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册