“6ed0634fb77a35b7f89cb283fcc9c8204a6bef7f”上不存在“include/libs/audit/audit.h”
提交 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){
if (pField->field.type == TSDB_DATA_TYPE_JSON) {
pField->fieldJson.type = TSDB_DATA_TYPE_JSON;
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.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,
......
......@@ -715,11 +715,12 @@ static void setResRawPtrImpl(SSqlRes* pRes, SInternalField* pInfo, int32_t i, bo
char* realData = p + CHAR_BYTES;
char type = *p;
if (type == TSDB_DATA_TYPE_NCHAR && isNull(realData, TSDB_DATA_TYPE_JSON)) {
memcpy(dst, realData, varDataTLen(realData));
offset = pInfo->field.bytes;
}else if (type == TSDB_DATA_TYPE_NCHAR) {
if(convertNchar){
if (type == TSDB_DATA_TYPE_JSON && isNull(realData, TSDB_DATA_TYPE_JSON)) {
type = pInfo->fieldJson.type;
setNull(realData, type, 0);
}
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));
varDataSetLen(dst, length);
if (length == 0) {
......@@ -729,17 +730,10 @@ static void setResRawPtrImpl(SSqlRes* pRes, SInternalField* pInfo, int32_t i, bo
memcpy(dst, realData, varDataTLen(realData));
}
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 {
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;
......@@ -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);
if (result == NULL){ // json key no result
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);
return 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) {
char* json = parseTagDatatoJson(data);
char* tagData = dst + CHAR_BYTES;
*(char*)dst = TSDB_DATA_TYPE_NCHAR;
*(char*)dst = TSDB_DATA_TYPE_JSON;
if(json == NULL){
setNull(tagData, TSDB_DATA_TYPE_JSON, 0);
return;
......
......@@ -83,12 +83,12 @@ static void* setJsonTagSchema(void* tsdb, int16_t numOfOutput, SExprInfo *pExprs
SSqlExpr* sqlExpr = &pExprs[i].base;
if (sqlExpr->colType == TSDB_DATA_TYPE_JSON && sqlExpr->numOfParams > 0){
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);
for (int j = 0; j < taosArrayGetSize(pTableIdList); ++j) {
STableIdInfo *id = taosArrayGet(pTableIdList, j);
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;
break;
}
......
......@@ -4118,7 +4118,7 @@ uint8_t getTagJsonType(STsdbRepo* tsdb, uint64_t uid, char* key, int32_t len){
if(result){
return *(char*)result;
}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.
先完成此消息的编辑!
想要评论请 注册