From 7471b9506d5a8c2d53a26c32a885df54fd975277 Mon Sep 17 00:00:00 2001 From: kailixu Date: Thu, 19 Sep 2024 14:39:08 +0800 Subject: [PATCH] enh: support drop stable with uid --- source/libs/catalog/src/ctgAsync.c | 4 ---- source/libs/parser/src/parAstParser.c | 14 ++++++++++++- source/libs/parser/src/parTranslater.c | 28 ++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/source/libs/catalog/src/ctgAsync.c b/source/libs/catalog/src/ctgAsync.c index 3ec34932a5..625c8d7eb4 100644 --- a/source/libs/catalog/src/ctgAsync.c +++ b/source/libs/catalog/src/ctgAsync.c @@ -2031,9 +2031,6 @@ static int32_t ctgHandleGetTbNamesRsp(SCtgTaskReq* tReq, int32_t reqType, const break; } - // if (CTG_IS_META_BOTH(pOut->metaType)) { - // TSWAP(pMsgCtx->lastOut, pMsgCtx->out); - // } break; } default: @@ -2062,7 +2059,6 @@ static int32_t ctgHandleGetTbNamesRsp(SCtgTaskReq* tReq, int32_t reqType, const } _return: - if (dbCache) { ctgReleaseVgInfoToCache(pCtg, dbCache); } diff --git a/source/libs/parser/src/parAstParser.c b/source/libs/parser/src/parAstParser.c index a7481fda8a..b96831d99d 100644 --- a/source/libs/parser/src/parAstParser.c +++ b/source/libs/parser/src/parAstParser.c @@ -409,7 +409,19 @@ static int32_t collectMetaKeyFromDropTable(SCollectMetaKeyCxt* pCxt, SDropTableS } static int32_t collectMetaKeyFromDropStable(SCollectMetaKeyCxt* pCxt, SDropSuperTableStmt* pStmt) { - if (pStmt->withOpt) return TSDB_CODE_SUCCESS; + int32_t code = TSDB_CODE_SUCCESS; + if (pStmt->withOpt) { + code = reserveTableUidInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache); +#if 0 + if (TSDB_CODE_SUCCESS == code) { + code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache); + } + if (TSDB_CODE_SUCCESS == code) { + code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache); + } +#endif + return code; + } return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName, AUTH_TYPE_WRITE, pCxt->pMetaCache); } diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 683e1b86e6..d6d64ef2e2 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -14636,6 +14636,31 @@ static int32_t rewriteDropTable(STranslateContext* pCxt, SQuery* pQuery) { return rewriteToVnodeModifyOpStmt(pQuery, pBufArray); } +static int32_t rewriteDropSuperTablewithOpt(STranslateContext* pCxt, SQuery* pQuery) { + int32_t code = TSDB_CODE_SUCCESS; + SDropSuperTableStmt* pStmt = (SDropSuperTableStmt*)pQuery->pRoot; + if (!pStmt->withOpt) return code; + pCxt->withOpt = true; + + char pTableName[TSDB_TABLE_NAME_LEN] = {0}; + SName name = {0}; + toName(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, &name); + code = getTargetName(pCxt, &name, pTableName); + if (TSDB_CODE_SUCCESS != code) { + return generateSyntaxErrMsgExt(&pCxt->msgBuf, code, "Super table uid does not exist: '%s'", pStmt->tableName); + } + tstrncpy(pStmt->tableName, pTableName, TSDB_TABLE_NAME_LEN); // rewrite table uid to table name + + code = rewriteDropTableWithMetaCache(pCxt); + + TAOS_RETURN(code); +} + +static int32_t rewriteDropSuperTable(STranslateContext* pCxt, SQuery* pQuery) { + TAOS_CHECK_RETURN(rewriteDropSuperTablewithOpt(pCxt, pQuery)); + TAOS_RETURN(0); +} + static int32_t buildUpdateTagValReq(STranslateContext* pCxt, SAlterTableStmt* pStmt, STableMeta* pTableMeta, SVAlterTbReq* pReq) { SName tbName = {0}; @@ -15707,6 +15732,9 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) { case QUERY_NODE_DROP_TABLE_STMT: code = rewriteDropTable(pCxt, pQuery); break; + case QUERY_NODE_DROP_SUPER_TABLE_STMT: + code = rewriteDropSuperTable(pCxt, pQuery); + break; case QUERY_NODE_ALTER_TABLE_STMT: code = rewriteAlterTable(pCxt, pQuery); break;