提交 35801b0d 编写于 作者: wmmhello's avatar wmmhello

add alias name for [change json type with qid return logic]

上级 a9afde8f
...@@ -1910,8 +1910,16 @@ static void addProjectQueryCol(SQueryInfo* pQueryInfo, int32_t startPos, SColumn ...@@ -1910,8 +1910,16 @@ static void addProjectQueryCol(SQueryInfo* pQueryInfo, int32_t startPos, SColumn
SSchema* pSchema = tscGetTableColumnSchema(pTableMeta, pIndex->columnIndex); SSchema* pSchema = tscGetTableColumnSchema(pTableMeta, pIndex->columnIndex);
char* colName = (pItem->aliasName == NULL) ? pSchema->name : pItem->aliasName; if (pItem->aliasName){
tstrncpy(pExpr->base.aliasName, colName, sizeof(pExpr->base.aliasName)); tstrncpy(pExpr->base.aliasName, pItem->aliasName, sizeof(pExpr->base.aliasName));
}else {
if (pSchema->type == TSDB_DATA_TYPE_JSON && pItem->pNode->tokenId == TK_ARROW) {
tstrncpy(pExpr->base.aliasName, pItem->pNode->exprToken.z,
(pItem->pNode->exprToken.n + 1) < sizeof(pExpr->base.aliasName) ? (pItem->pNode->exprToken.n + 1) : sizeof(pExpr->base.aliasName));
} else {
tstrncpy(pExpr->base.aliasName, pSchema->name, sizeof(pExpr->base.aliasName));
}
}
SColumnList ids = {0}; SColumnList ids = {0};
ids.num = 1; ids.num = 1;
...@@ -2261,6 +2269,7 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t ...@@ -2261,6 +2269,7 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t
const char* msg3 = "tbname not allowed in outer query"; const char* msg3 = "tbname not allowed in outer query";
const char* msg4 = "-> operate can only used in json type"; const char* msg4 = "-> operate can only used in json type";
const char* msg5 = "the right value of -> operation must be string"; const char* msg5 = "the right value of -> operation must be string";
const char* msg6 = "select name is too long than 64, please use alias name";
int32_t startPos = (int32_t)tscNumOfExprs(pQueryInfo); int32_t startPos = (int32_t)tscNumOfExprs(pQueryInfo);
int32_t tokenId = pItem->pNode->tokenId; int32_t tokenId = pItem->pNode->tokenId;
...@@ -2369,10 +2378,10 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t ...@@ -2369,10 +2378,10 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t
if (tokenId == TK_ARROW && pSchema->type != TSDB_DATA_TYPE_JSON) { if (tokenId == TK_ARROW && pSchema->type != TSDB_DATA_TYPE_JSON) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4);
} }
if(pSchema->type == TSDB_DATA_TYPE_JSON && tokenId == TK_ARROW){ if (pSchema->type == TSDB_DATA_TYPE_JSON && tokenId == TK_ARROW && pItem->pNode->exprToken.n >= TSDB_COL_NAME_LEN){
pItem->aliasName = calloc(1, pItem->pNode->exprToken.n + 1); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg6);
memcpy(pItem->aliasName, pItem->pNode->exprToken.z, pItem->pNode->exprToken.n);
} }
addProjectQueryCol(pQueryInfo, startPos, &index, pItem, getNewResColId(pCmd)); addProjectQueryCol(pQueryInfo, startPos, &index, pItem, getNewResColId(pCmd));
pQueryInfo->type |= TSDB_QUERY_TYPE_PROJECTION_QUERY; pQueryInfo->type |= TSDB_QUERY_TYPE_PROJECTION_QUERY;
} }
......
...@@ -855,6 +855,7 @@ static int32_t serializeSqlExpr(SSqlExpr* pExpr, STableMetaInfo* pTableMetaInfo, ...@@ -855,6 +855,7 @@ static int32_t serializeSqlExpr(SSqlExpr* pExpr, STableMetaInfo* pTableMetaInfo,
pSqlExpr->numOfParams = htons(pExpr->numOfParams); pSqlExpr->numOfParams = htons(pExpr->numOfParams);
pSqlExpr->resColId = htons(pExpr->resColId); pSqlExpr->resColId = htons(pExpr->resColId);
pSqlExpr->flist.numOfFilters = htons(pExpr->flist.numOfFilters); pSqlExpr->flist.numOfFilters = htons(pExpr->flist.numOfFilters);
tstrncpy(pSqlExpr->aliasName, pExpr->aliasName, TSDB_COL_NAME_LEN);
(*pMsg) += sizeof(SSqlExpr); (*pMsg) += sizeof(SSqlExpr);
for (int32_t j = 0; j < pExpr->numOfParams; ++j) { // todo add log for (int32_t j = 0; j < pExpr->numOfParams; ++j) { // todo add log
......
...@@ -227,7 +227,7 @@ do { \ ...@@ -227,7 +227,7 @@ do { \
#define TSDB_MAX_JSON_TAGS_LEN (4096*TSDB_NCHAR_SIZE + 2 + 1) // 2->var_header_len 1->type #define TSDB_MAX_JSON_TAGS_LEN (4096*TSDB_NCHAR_SIZE + 2 + 1) // 2->var_header_len 1->type
#define TSDB_MAX_TAGS 128 #define TSDB_MAX_TAGS 128
#define TSDB_MAX_TAG_CONDITIONS 1024 #define TSDB_MAX_TAG_CONDITIONS 1024
#define TSDB_MAX_JSON_KEY_LEN 256 #define TSDB_MAX_JSON_KEY_LEN 65
#define TSDB_MAX_JSON_KEY_MD5_LEN 16 #define TSDB_MAX_JSON_KEY_MD5_LEN 16
#define TSDB_AUTH_LEN 16 #define TSDB_AUTH_LEN 16
......
...@@ -260,7 +260,7 @@ typedef struct SSchema { ...@@ -260,7 +260,7 @@ typedef struct SSchema {
typedef struct TagJsonSSchema { typedef struct TagJsonSSchema {
uint8_t type; uint8_t type;
char name[TSDB_MAX_JSON_KEY_LEN + 1]; char name[TSDB_MAX_JSON_KEY_LEN];
} TagJsonSSchema; } TagJsonSSchema;
typedef struct { typedef struct {
......
...@@ -84,7 +84,7 @@ static void* setJsonTagSchema(void* tsdb, int16_t numOfOutput, SExprInfo *pExprs ...@@ -84,7 +84,7 @@ static void* setJsonTagSchema(void* tsdb, int16_t numOfOutput, SExprInfo *pExprs
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_NULL;
tstrncpy(schema->name, sqlExpr->param[0].pz, TSDB_MAX_JSON_KEY_LEN + 1); 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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册