From 318ac32ca2e00ef3c69a9eecb40c8457cada9fe6 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 7 Nov 2024 15:43:54 +0800 Subject: [PATCH] more code --- include/libs/nodes/cmdnodes.h | 1 + source/libs/nodes/src/nodesUtilFuncs.c | 1 + source/libs/parser/inc/parAst.h | 3 ++- source/libs/parser/inc/sql.y | 2 +- source/libs/parser/src/parAstCreater.c | 10 ++++++++-- source/libs/parser/src/parTranslater.c | 3 ++- 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h index cf76645abc..f261db4916 100644 --- a/include/libs/nodes/cmdnodes.h +++ b/include/libs/nodes/cmdnodes.h @@ -160,6 +160,7 @@ typedef struct SCompactDatabaseStmt { typedef struct SCompactVgroupsStmt { ENodeType type; + SNode* pDbName; SNodeList* vgidList; SNode* pStart; SNode* pEnd; diff --git a/source/libs/nodes/src/nodesUtilFuncs.c b/source/libs/nodes/src/nodesUtilFuncs.c index 69a9d19933..ad5284c484 100644 --- a/source/libs/nodes/src/nodesUtilFuncs.c +++ b/source/libs/nodes/src/nodesUtilFuncs.c @@ -1245,6 +1245,7 @@ void nodesDestroyNode(SNode* pNode) { } case QUERY_NODE_COMPACT_VGROUPS_STMT: { SCompactVgroupsStmt* pStmt = (SCompactVgroupsStmt*)pNode; + nodesDestroyNode(pStmt->pDbName); nodesDestroyList(pStmt->vgidList); nodesDestroyNode(pStmt->pStart); nodesDestroyNode(pStmt->pEnd); diff --git a/source/libs/parser/inc/parAst.h b/source/libs/parser/inc/parAst.h index 943a0c7675..87efeb878b 100644 --- a/source/libs/parser/inc/parAst.h +++ b/source/libs/parser/inc/parAst.h @@ -198,7 +198,8 @@ SNode* createFlushDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName); SNode* createTrimDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName, int32_t maxSpeed); SNode* createS3MigrateDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName); SNode* createCompactStmt(SAstCreateContext* pCxt, SToken* pDbName, SNode* pStart, SNode* pEnd); -SNode* createCompactVgroupsStmt(SAstCreateContext* pCxt, SNodeList* vgidList, SNode* pStart, SNode* pEnd); +SNode* createCompactVgroupsStmt(SAstCreateContext* pCxt, SNode* pDbName, SNodeList* vgidList, SNode* pStart, + SNode* pEnd); SNode* createDefaultTableOptions(SAstCreateContext* pCxt); SNode* createAlterTableOptions(SAstCreateContext* pCxt); SNode* setTableOption(SAstCreateContext* pCxt, SNode* pOptions, ETableOptionType type, void* pVal); diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 5f65b9b06c..0c4cc3f605 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -229,7 +229,7 @@ cmd ::= FLUSH DATABASE db_name(A). cmd ::= TRIM DATABASE db_name(A) speed_opt(B). { pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &A, B); } cmd ::= S3MIGRATE DATABASE db_name(A). { pCxt->pRootNode = createS3MigrateDatabaseStmt(pCxt, &A); } cmd ::= COMPACT DATABASE db_name(A) start_opt(B) end_opt(C). { pCxt->pRootNode = createCompactStmt(pCxt, &A, B, C); } -cmd ::= COMPACT VGROUPS IN NK_LP integer_list(A) NK_RP start_opt(B) end_opt(C). { pCxt->pRootNode = createCompactVgroupsStmt(pCxt, A, B, C); } +cmd ::= COMPACT db_name_cond_opt(A) VGROUPS IN NK_LP integer_list(B) NK_RP start_opt(C) end_opt(D). { pCxt->pRootNode = createCompactVgroupsStmt(pCxt, A, B, C, D); } %type not_exists_opt { bool } %destructor not_exists_opt { } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 8c33964594..e0f88442ed 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -2115,12 +2115,18 @@ _err: return NULL; } -SNode* createCompactVgroupsStmt(SAstCreateContext* pCxt, SNodeList* vgidList, SNode* pStart, SNode* pEnd) { +SNode* createCompactVgroupsStmt(SAstCreateContext* pCxt, SNode* pDbName, SNodeList* vgidList, SNode* pStart, + SNode* pEnd) { CHECK_PARSER_STATUS(pCxt); - CHECK_NAME(checkDbName(pCxt, NULL, true)); + if (NULL == pDbName) { + snprintf(pCxt->pQueryCxt->pMsg, pCxt->pQueryCxt->msgLen, "database not specified"); + pCxt->errCode = TSDB_CODE_PAR_DB_NOT_SPECIFIED; + CHECK_PARSER_STATUS(pCxt); + } SCompactVgroupsStmt* pStmt = NULL; pCxt->errCode = nodesMakeNode(QUERY_NODE_COMPACT_VGROUPS_STMT, (SNode**)&pStmt); CHECK_MAKE_NODE(pStmt); + pStmt->pDbName = pDbName; pStmt->vgidList = vgidList; pStmt->pStart = pStart; pStmt->pEnd = pEnd; diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 76851c4884..83dea08398 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -10489,7 +10489,8 @@ static int32_t translateCompactVgroups(STranslateContext* pCxt, SCompactVgroupsS } if (TSDB_CODE_SUCCESS == code) { - code = translateCompactRange(pCxt, NULL /* TODO */, pStmt->pStart, pStmt->pEnd, &req.timeRange); + code = + translateCompactRange(pCxt, ((SValueNode*)pStmt->pDbName)->literal, pStmt->pStart, pStmt->pEnd, &req.timeRange); } if (TSDB_CODE_SUCCESS == code) {