From 944363cd6a0ea47f9ea8cd3547e97c9ca851123a Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 17 Dec 2021 18:53:40 +0800 Subject: [PATCH] optimize code --- src/client/src/tscSQLParser.c | 13 +++---------- src/client/src/tscUtil.c | 6 ++++-- src/tsdb/src/tsdbRead.c | 5 +++-- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 3125bb25c1..c1b43c8347 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -143,6 +143,7 @@ static bool validateDebugFlag(int32_t v); static int32_t checkQueryRangeForFill(SSqlCmd* pCmd, SQueryInfo* pQueryInfo); static int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo); static tSqlExpr* extractExprForSTable(SSqlCmd* pCmd, tSqlExpr** pExpr, SQueryInfo* pQueryInfo, int32_t tableIndex); +static void convertWhereStringCharset(tSqlExpr* pRight); int validateTableName(char *tblName, int len, SStrToken* psTblToken, bool *dbIncluded); @@ -4968,15 +4969,7 @@ static int32_t validateJsonTagExpr(tSqlExpr* pExpr, char* msgBuf) { pRight->value.nType = TSDB_DATA_TYPE_NCHAR; return TSDB_CODE_SUCCESS; } - char newData[TSDB_MAX_JSON_TAGS_LEN] = {0}; - int len = 0; - if(!taosMbsToUcs4(pRight->value.pz, pRight->value.nLen, newData, TSDB_MAX_JSON_TAGS_LEN, &len)){ - tscError("json where condition mbsToUcs4 error"); - } - pRight->value.pz = realloc(pRight->value.pz, len); - memcpy(pRight->value.pz, newData, len); - pRight->value.nLen = len; - pRight->value.nType = TSDB_DATA_TYPE_NCHAR; + convertWhereStringCharset(pRight); } } @@ -5040,7 +5033,7 @@ int32_t handleNeOptr(tSqlExpr** rexpr, tSqlExpr* expr) { return TSDB_CODE_SUCCESS; } -static void convertWhereStringCharset(tSqlExpr* pRight){ +void convertWhereStringCharset(tSqlExpr* pRight){ if(pRight->value.nType != TSDB_DATA_TYPE_BINARY){ return; } diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 874a022a71..b053596eea 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -5509,18 +5509,20 @@ int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, in if(item->type == cJSON_String){ // add json value format: type|data char *jsonValue = item->valuestring; outLen = 0; - char tagVal[TSDB_MAX_JSON_TAGS_LEN] = {0}; + char *tagVal = calloc(strlen(jsonValue) * TSDB_NCHAR_SIZE + TSDB_NCHAR_SIZE, 1); *tagVal = jsonType2DbType(0, item->type); // type char* tagData = POINTER_SHIFT(tagVal,CHAR_BYTES); if (!taosMbsToUcs4(jsonValue, strlen(jsonValue), varDataVal(tagData), - TSDB_MAX_JSON_TAGS_LEN - CHAR_BYTES - VARSTR_HEADER_SIZE, &outLen)) { + strlen(jsonValue) * TSDB_NCHAR_SIZE, &outLen)) { tscError("json string error:%s|%s", strerror(errno), jsonValue); retCode = tscSQLSyntaxErrMsg(errMsg, "serizelize json error", NULL); + free(tagVal); goto end; } varDataSetLen(tagData, outLen); tdAddColToKVRow(kvRowBuilder, jsonIndex++, TSDB_DATA_TYPE_NCHAR, tagVal, true); + free(tagVal); }else if(item->type == cJSON_Number){ char tagVal[LONG_BYTES + CHAR_BYTES] = {0}; *tagVal = jsonType2DbType(item->valuedouble, item->type); // type diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index ca38d10d59..70c3198a3e 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -4231,7 +4231,6 @@ char* parseTagDatatoJson(void *p){ memset(tagJsonKey, 0, sizeof(tagJsonKey)); memcpy(tagJsonKey, varDataVal(val), varDataLen(val)); }else{ // json value - char tagJsonValue[TSDB_MAX_JSON_TAGS_LEN] = {0}; char* realData = POINTER_SHIFT(val, CHAR_BYTES); char type = *(char*)val; if(type == TSDB_DATA_TYPE_BINARY) { @@ -4244,14 +4243,16 @@ char* parseTagDatatoJson(void *p){ } cJSON_AddItemToObject(json, tagJsonKey, value); }else if(type == TSDB_DATA_TYPE_NCHAR) { + char *tagJsonValue = calloc(varDataLen(realData), 1); int32_t length = taosUcs4ToMbs(varDataVal(realData), varDataLen(realData), tagJsonValue); if (length < 0) { tsdbError("charset:%s to %s. val:%s convert json value failed.", DEFAULT_UNICODE_ENCODEC, tsCharset, (char*)val); + free(tagJsonValue); goto end; } cJSON* value = cJSON_CreateString(tagJsonValue); - + free(tagJsonValue); if (value == NULL) { goto end; -- GitLab