提交 7205e485 编写于 作者: wmmhello's avatar wmmhello

<fix>[TD-11789] conver charset to usc4 in where condition before send to server

上级 1548ea34
...@@ -4959,8 +4959,25 @@ static int32_t validateJsonTagExpr(tSqlExpr* pExpr, char* msgBuf) { ...@@ -4959,8 +4959,25 @@ static int32_t validateJsonTagExpr(tSqlExpr* pExpr, char* msgBuf) {
pRight->value.nLen = INT_BYTES; pRight->value.nLen = INT_BYTES;
pRight->value.pz = calloc(INT_BYTES, 1); pRight->value.pz = calloc(INT_BYTES, 1);
*(uint32_t*)pRight->value.pz = TSDB_DATA_JSON_null; *(uint32_t*)pRight->value.pz = TSDB_DATA_JSON_null;
return TSDB_CODE_SUCCESS;
} }
} }
if (pRight->value.nType == TSDB_DATA_TYPE_BINARY){ // json value store by nchar, so need to convert from binary to nchar
if(pRight->value.nLen == 0){
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;
}
} }
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
...@@ -5028,11 +5045,6 @@ static void convertWhereStringCharset(tSqlExpr* pRight){ ...@@ -5028,11 +5045,6 @@ static void convertWhereStringCharset(tSqlExpr* pRight){
return; return;
} }
if(pRight->value.nLen == 0){
pRight->value.nType = TSDB_DATA_TYPE_NCHAR; // for json value
return;
}
char newData[TSDB_MAX_NCHAR_LEN] = {0}; char newData[TSDB_MAX_NCHAR_LEN] = {0};
int len = 0; int len = 0;
if(!taosMbsToUcs4(pRight->value.pz, pRight->value.nLen, newData, TSDB_MAX_NCHAR_LEN, &len)){ if(!taosMbsToUcs4(pRight->value.pz, pRight->value.nLen, newData, TSDB_MAX_NCHAR_LEN, &len)){
...@@ -5096,7 +5108,7 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSql ...@@ -5096,7 +5108,7 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSql
SSchema* pSchema = tscGetTableColumnSchema(pTableMeta, index.columnIndex); SSchema* pSchema = tscGetTableColumnSchema(pTableMeta, index.columnIndex);
if (pSchema->type == TSDB_DATA_TYPE_JSON || pSchema->type == TSDB_DATA_TYPE_NCHAR){ if (pSchema->type == TSDB_DATA_TYPE_NCHAR){
convertWhereStringCharset(pRight); convertWhereStringCharset(pRight);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册