From 880921e1652e49d752241789669b6854b422aed9 Mon Sep 17 00:00:00 2001 From: sima Date: Tue, 30 Jul 2024 15:23:58 +0800 Subject: [PATCH] fix:[TD-31133] Fix crash when using partition by with having clause. --- source/dnode/mnode/impl/src/mndStream.c | 2 +- source/libs/parser/src/parTranslater.c | 3 ++- tests/system-test/2-query/group_partition.py | 6 ++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndStream.c b/source/dnode/mnode/impl/src/mndStream.c index 4dcd716f28..d2e51d2270 100644 --- a/source/dnode/mnode/impl/src/mndStream.c +++ b/source/dnode/mnode/impl/src/mndStream.c @@ -873,7 +873,7 @@ static int32_t mndProcessCreateStreamReq(SRpcMsg *pReq) { _OVER: if (code != TSDB_CODE_SUCCESS && code != TSDB_CODE_ACTION_IN_PROGRESS) { - mError("stream:%s, failed to create since %s", createReq.name, terrstr(code)); + mError("stream:%s, failed to create since %s", createReq.name, terrstr()); } else { mDebug("stream:%s create stream completed", createReq.name); } diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 3265479a93..cfe1fa4eb3 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -3439,7 +3439,7 @@ static EDealRes doCheckExprForGroupBy(SNode** pNode, void* pContext) { bool partionByTbname = hasTbnameFunction(pSelect->pPartitionByList); FOREACH(pPartKey, pSelect->pPartitionByList) { if (nodesEqualNode(pPartKey, *pNode)) { - return rewriteExprToGroupKeyFunc(pCxt, pNode); + return pCxt->currClause == SQL_CLAUSE_HAVING ? DEAL_RES_IGNORE_CHILD : rewriteExprToGroupKeyFunc(pCxt, pNode); } if ((partionByTbname) && QUERY_NODE_COLUMN == nodeType(*pNode) && ((SColumnNode*)*pNode)->colType == COLUMN_TYPE_TAG) { @@ -3658,6 +3658,7 @@ static int32_t checkHavingGroupBy(STranslateContext* pCxt, SSelectStmt* pSelect) return code; } if (NULL != pSelect->pHaving) { + pCxt->currClause = SQL_CLAUSE_HAVING; code = checkExprForGroupBy(pCxt, &pSelect->pHaving); } /* diff --git a/tests/system-test/2-query/group_partition.py b/tests/system-test/2-query/group_partition.py index c63b8af9df..593f51acaf 100644 --- a/tests/system-test/2-query/group_partition.py +++ b/tests/system-test/2-query/group_partition.py @@ -80,6 +80,12 @@ class TDTestCase: if nonempty_tb_num > 0: num = self.row_nums tdSql.checkRows(num) + + tdSql.query(f"select c1, count(*), count(1), count(c1) from {self.dbname}.{self.stable} {keyword} by c1 having c1 >= 0") + num = 0 + if nonempty_tb_num > 0: + num = self.row_nums + tdSql.checkRows(num) tdSql.query(f"select ts, count(*) from {self.dbname}.{self.stable} {keyword} by ts ") tdSql.checkRows(nonempty_tb_num * self.row_nums)