diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 63768a41d759b278e7aca5f398b05543421f2ba4..c69d9a698a52baa521f34e15f56dbf0a3974b01e 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -7189,16 +7189,11 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf if (pSqlNode->from->type == SQL_NODE_FROM_SUBQUERY) { // parse the subquery in the first place - SArray* list = taosArrayGetP(pSqlNode->from->list, 0); - SSqlNode* p = taosArrayGetP(list, 0); + SRelElementPair* sub = taosArrayGet(pSqlNode->from->list, 0); + SSqlNode* p = taosArrayGetP(sub->pSubquery, 0); - SQueryInfo* pQueryInfo = tscGetQueryInfo(&pSql->cmd, 0); code = validateSqlNode(pSql, p, pQueryInfo); - if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) { - return code; - } - - if (code != TSDB_CODE_SUCCESS) { + if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS || code != TSDB_CODE_SUCCESS) { return code; } @@ -7211,6 +7206,13 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf STableMetaInfo* pTableMetaInfo1 = calloc(1, sizeof(STableMetaInfo)); pTableMetaInfo1->pTableMeta = pTableMeta; + if (sub->aliasName.n > 0) { + if (sub->aliasName.n > TSDB_TABLE_FNAME_LEN) { + return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), "subquery alias name too long"); + } + strncpy(pTableMetaInfo1->aliasName, sub->aliasName.z, sub->aliasName.n); + } + current->pTableMetaInfo = calloc(1, POINTER_BYTES); current->pTableMetaInfo[0] = pTableMetaInfo1; current->numOfTables = 1; diff --git a/src/query/inc/qSqlparser.h b/src/query/inc/qSqlparser.h index bbf391659b4aa6ec4cdb5f85bbd1041a17ea68a9..d3a422b1f59328d17149eb90aac2314cbb5962ee 100644 --- a/src/query/inc/qSqlparser.h +++ b/src/query/inc/qSqlparser.h @@ -111,7 +111,6 @@ typedef struct SRelElementPair { union { SStrToken tableName; SArray *pSubquery; - //SSqlNode *pSubquery; }; SStrToken aliasName; @@ -119,7 +118,7 @@ typedef struct SRelElementPair { typedef struct SRelationInfo { int32_t type; // nested query|table name list - SArray *list; // SArray|SArray + SArray *list; // SArray } SRelationInfo; typedef struct SCreatedTableInfo {