未验证 提交 4291981b 编写于 作者: wmmhello's avatar wmmhello 提交者: GitHub

Merge pull request #11690 from taosdata/feature/TD-13041

fix: bugs in to_json
...@@ -420,7 +420,7 @@ static int32_t translateToJson(SFunctionNode* pFunc, char* pErrBuf, int32_t len) ...@@ -420,7 +420,7 @@ static int32_t translateToJson(SFunctionNode* pFunc, char* pErrBuf, int32_t len)
return invaildFuncParaTypeErrMsg(pErrBuf, len, pFunc->functionName); return invaildFuncParaTypeErrMsg(pErrBuf, len, pFunc->functionName);
} }
pFunc->node.resType = (SDataType) { .bytes = tDataTypes[TSDB_DATA_TYPE_JSON].bytes, .type = TSDB_DATA_TYPE_JSON}; pFunc->node.resType = (SDataType) { .bytes = tDataTypes[TSDB_DATA_TYPE_BINARY].bytes, .type = TSDB_DATA_TYPE_BINARY};
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
......
...@@ -884,13 +884,13 @@ int32_t toJsonFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu ...@@ -884,13 +884,13 @@ int32_t toJsonFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
return TSDB_CODE_FAILED; return TSDB_CODE_FAILED;
} }
char *input = pInput[0].columnData->pData + pInput[0].columnData->varmeta.offset[0]; char tmp[TSDB_MAX_JSON_TAG_LEN] = {0};
char *tmp = taosMemoryCalloc(pInput[0].columnData->info.bytes + 1, 1);
for (int32_t i = 0; i < pInput[0].numOfRows; ++i) { for (int32_t i = 0; i < pInput[0].numOfRows; ++i) {
if (colDataIsNull_s(pInput[0].columnData, i)) { if (colDataIsNull_s(pInput[0].columnData, i)) {
colDataAppendNULL(pOutput->columnData, i); colDataAppendNULL(pOutput->columnData, i);
continue; continue;
} }
char *input = pInput[0].columnData->pData + pInput[0].columnData->varmeta.offset[i];
if(type == TSDB_DATA_TYPE_NCHAR){ if(type == TSDB_DATA_TYPE_NCHAR){
if (varDataTLen(input) > TSDB_MAX_JSON_TAG_LEN){ if (varDataTLen(input) > TSDB_MAX_JSON_TAG_LEN){
...@@ -909,7 +909,7 @@ int32_t toJsonFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu ...@@ -909,7 +909,7 @@ int32_t toJsonFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
continue; continue;
} }
memcpy(tmp, varDataVal(input), varDataLen(input)); memcpy(tmp, varDataVal(input), varDataLen(input));
tmp[varDataTLen(input)] = 0; tmp[varDataLen(input)] = 0;
} }
if(!tjsonValidateJson(tmp)){ if(!tjsonValidateJson(tmp)){
...@@ -918,9 +918,7 @@ int32_t toJsonFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu ...@@ -918,9 +918,7 @@ int32_t toJsonFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
} }
colDataAppend(pOutput->columnData, i, input, false); colDataAppend(pOutput->columnData, i, input, false);
input += varDataTLen(input);
} }
taosMemoryFree(tmp);
pOutput->numOfRows = pInput->numOfRows; pOutput->numOfRows = pInput->numOfRows;
......
...@@ -159,10 +159,9 @@ void scltMakeColumnNode(SNode **pNode, SSDataBlock **block, int32_t dataType, in ...@@ -159,10 +159,9 @@ void scltMakeColumnNode(SNode **pNode, SSDataBlock **block, int32_t dataType, in
idata.info.colId = 3; idata.info.colId = 3;
int32_t size = idata.info.bytes * rowNum; int32_t size = idata.info.bytes * rowNum;
idata.pData = (char *)taosMemoryCalloc(1, size); idata.pData = (char *)taosMemoryCalloc(1, size);
colInfoDataEnsureCapacity(&idata, 0, rowNum);
taosArrayPush(res->pDataBlock, &idata); taosArrayPush(res->pDataBlock, &idata);
blockDataEnsureCapacity(res, rowNum);
SColumnInfoData *pColumn = (SColumnInfoData *)taosArrayGetLast(res->pDataBlock); SColumnInfoData *pColumn = (SColumnInfoData *)taosArrayGetLast(res->pDataBlock);
for (int32_t i = 0; i < rowNum; ++i) { for (int32_t i = 0; i < rowNum; ++i) {
colDataAppend(pColumn, i, (const char *)value, false); colDataAppend(pColumn, i, (const char *)value, false);
......
...@@ -300,8 +300,8 @@ bool tjsonValidateJson(const char *jIn) { ...@@ -300,8 +300,8 @@ bool tjsonValidateJson(const char *jIn) {
char* jsonKey = item->string; char* jsonKey = item->string;
if (!jsonKey) return false; if (!jsonKey) return false;
for (size_t j = 0; j < strlen(jsonKey); ++i) { for (size_t j = 0; j < strlen(jsonKey); ++j) {
if (isprint(jsonKey[i]) == 0) return false; if (isprint(jsonKey[j]) == 0) return false;
} }
if (item->type == cJSON_Object || item->type == cJSON_Array) { if (item->type == cJSON_Object || item->type == cJSON_Array) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册