From bfc38ef55364345d041d3e7c8d5918971664f9f3 Mon Sep 17 00:00:00 2001 From: Alex Duan <417921451@qq.com> Date: Sat, 22 Jan 2022 12:04:25 +0800 Subject: [PATCH] [TS-575](query): groupby keyword limit fixed --- src/client/src/tscSQLParser.c | 8 +------- src/client/src/tscSubquery.c | 9 +++++++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 3b04e2ed0e..8ec9e17c95 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -7534,15 +7534,9 @@ int32_t validateLimitNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSqlN */ if (pQueryInfo->limit.limit > 0) { pQueryInfo->vgroupLimit = pQueryInfo->limit.limit + pQueryInfo->limit.offset; - // if have group by , not do limit on parent sql - if(pSqlNode->pGroupby == NULL) - pQueryInfo->limit.limit += pQueryInfo->limit.offset; - else - pQueryInfo->limit.limit = -1; + pQueryInfo->limit.limit += pQueryInfo->limit.offset; } pQueryInfo->limit.offset = 0; - } else if(pSqlNode->pGroupby) { - pQueryInfo->limit.limit = -1; // has groupby , no order on super table, limit is limit clause query rows by one group } } else { if (pQueryInfo->slimit.limit != -1 || pQueryInfo->slimit.offset != 0) { diff --git a/src/client/src/tscSubquery.c b/src/client/src/tscSubquery.c index 792db6dcde..39289a55f4 100644 --- a/src/client/src/tscSubquery.c +++ b/src/client/src/tscSubquery.c @@ -3167,6 +3167,8 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR static SSqlObj *tscCreateSTableSubquery(SSqlObj *pSql, SRetrieveSupport *trsupport, SSqlObj *prevSqlObj) { const int32_t table_index = 0; + SSqlCmd * pCmd = &pSql->cmd; + SQueryInfo *pPQueryInfo = tscGetQueryInfo(pCmd); // Parent SQueryInfo SSqlObj *pNew = createSubqueryObj(pSql, table_index, tscRetrieveDataRes, trsupport, TSDB_SQL_SELECT, prevSqlObj); if (pNew != NULL) { // the sub query of two-stage super table query @@ -3176,11 +3178,14 @@ static SSqlObj *tscCreateSTableSubquery(SSqlObj *pSql, SRetrieveSupport *trsuppo pQueryInfo->type |= TSDB_QUERY_TYPE_STABLE_SUBQUERY; // clear the limit/offset info, since it should not be sent to vnode to be executed. - // pQueryInfo->limit.limit = -1; // alexduan subquery limit is same with parent is ok - if (pQueryInfo->limit.offset > 0) { + if (pQueryInfo->limit.offset > 0 && pQueryInfo->limit.limit > 0) { pQueryInfo->limit.limit += pQueryInfo->limit.offset; } pQueryInfo->limit.offset = 0; + // if groupby must retrieve all subquery data + if(pPQueryInfo->groupbyColumn || pPQueryInfo->groupbyTag) { + pQueryInfo->limit.limit = -1; + } assert(trsupport->subqueryIndex < pSql->subState.numOfSub); -- GitLab