enh: support drop table with uid

This commit is contained in:
kailixu 2024-09-14 08:42:06 +08:00
parent c3c578a408
commit bb3479d952
6 changed files with 33 additions and 35 deletions

View File

@ -240,7 +240,7 @@ typedef struct SDropTableStmt {
ENodeType type; ENodeType type;
SNodeList* pTables; SNodeList* pTables;
bool withTsma; bool withTsma;
bool withUid; bool withOpt;
} SDropTableStmt; } SDropTableStmt;
typedef struct SDropSuperTableStmt { typedef struct SDropSuperTableStmt {
@ -248,7 +248,7 @@ typedef struct SDropSuperTableStmt {
char dbName[TSDB_DB_NAME_LEN]; char dbName[TSDB_DB_NAME_LEN];
char tableName[TSDB_TABLE_NAME_LEN]; char tableName[TSDB_TABLE_NAME_LEN];
bool ignoreNotExists; bool ignoreNotExists;
bool withUid; bool withOpt;
} SDropSuperTableStmt; } SDropSuperTableStmt;
typedef struct SAlterTableStmt { typedef struct SAlterTableStmt {

View File

@ -6038,7 +6038,7 @@ static int32_t jsonToDropTableStmt(const SJson* pJson, void* pObj) {
static const char* jkDropSuperTableStmtDbName = "DbName"; static const char* jkDropSuperTableStmtDbName = "DbName";
static const char* jkDropSuperTableStmtTableName = "TableName"; static const char* jkDropSuperTableStmtTableName = "TableName";
static const char* jkDropSuperTableStmtIgnoreNotExists = "IgnoreNotExists"; static const char* jkDropSuperTableStmtIgnoreNotExists = "IgnoreNotExists";
static const char* jkDropSuperTableStmtWithUid = "WithUid"; static const char* jkDropSuperTableStmtwithOpt = "withOpt";
static int32_t dropStableStmtToJson(const void* pObj, SJson* pJson) { static int32_t dropStableStmtToJson(const void* pObj, SJson* pJson) {
const SDropSuperTableStmt* pNode = (const SDropSuperTableStmt*)pObj; const SDropSuperTableStmt* pNode = (const SDropSuperTableStmt*)pObj;
@ -6051,7 +6051,7 @@ static int32_t dropStableStmtToJson(const void* pObj, SJson* pJson) {
code = tjsonAddBoolToObject(pJson, jkDropSuperTableStmtIgnoreNotExists, pNode->ignoreNotExists); code = tjsonAddBoolToObject(pJson, jkDropSuperTableStmtIgnoreNotExists, pNode->ignoreNotExists);
} }
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS == code) {
code = tjsonAddBoolToObject(pJson, jkDropSuperTableStmtWithUid, pNode->withUid); code = tjsonAddBoolToObject(pJson, jkDropSuperTableStmtwithOpt, pNode->withOpt);
} }
return code; return code;
@ -6068,7 +6068,7 @@ static int32_t jsonToDropStableStmt(const SJson* pJson, void* pObj) {
code = tjsonGetBoolValue(pJson, jkDropSuperTableStmtIgnoreNotExists, &pNode->ignoreNotExists); code = tjsonGetBoolValue(pJson, jkDropSuperTableStmtIgnoreNotExists, &pNode->ignoreNotExists);
} }
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS == code) {
code = tjsonGetBoolValue(pJson, jkDropSuperTableStmtWithUid, &pNode->withUid); code = tjsonGetBoolValue(pJson, jkDropSuperTableStmtwithOpt, &pNode->withOpt);
} }
return code; return code;

View File

@ -2360,7 +2360,7 @@ SNode* createDropTableStmt(SAstCreateContext* pCxt, bool withOpt, SNodeList* pTa
pCxt->errCode = nodesMakeNode(QUERY_NODE_DROP_TABLE_STMT, (SNode**)&pStmt); pCxt->errCode = nodesMakeNode(QUERY_NODE_DROP_TABLE_STMT, (SNode**)&pStmt);
CHECK_MAKE_NODE(pStmt); CHECK_MAKE_NODE(pStmt);
pStmt->pTables = pTables; pStmt->pTables = pTables;
pStmt->withUid = withOpt; pStmt->withOpt = withOpt;
return (SNode*)pStmt; return (SNode*)pStmt;
_err: _err:
nodesDestroyList(pTables); nodesDestroyList(pTables);
@ -2375,7 +2375,7 @@ SNode* createDropSuperTableStmt(SAstCreateContext* pCxt, bool withOpt, bool igno
strcpy(pStmt->dbName, ((SRealTableNode*)pRealTable)->table.dbName); strcpy(pStmt->dbName, ((SRealTableNode*)pRealTable)->table.dbName);
strcpy(pStmt->tableName, ((SRealTableNode*)pRealTable)->table.tableName); strcpy(pStmt->tableName, ((SRealTableNode*)pRealTable)->table.tableName);
pStmt->ignoreNotExists = ignoreNotExists; pStmt->ignoreNotExists = ignoreNotExists;
pStmt->withUid = withOpt; pStmt->withOpt = withOpt;
nodesDestroyNode(pRealTable); nodesDestroyNode(pRealTable);
return (SNode*)pStmt; return (SNode*)pStmt;
_err: _err:

View File

@ -377,27 +377,19 @@ static int32_t collectMetaKeyFromCreateSubTableFromFile(SCollectMetaKeyCxt*
static int32_t collectMetaKeyFromDropTable(SCollectMetaKeyCxt* pCxt, SDropTableStmt* pStmt) { static int32_t collectMetaKeyFromDropTable(SCollectMetaKeyCxt* pCxt, SDropTableStmt* pStmt) {
int32_t code = TSDB_CODE_SUCCESS; int32_t code = TSDB_CODE_SUCCESS;
SNode* pNode = NULL; SNode* pNode = NULL;
char tableName[50] = "aa\u00bf\u200bstb0"; // char tableName[50] = "aa\u00bf\u200bstb0";
FOREACH(pNode, pStmt->pTables) { FOREACH(pNode, pStmt->pTables) {
SDropTableClause* pClause = (SDropTableClause*)pNode; SDropTableClause* pClause = (SDropTableClause*)pNode;
code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache); code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
if (TSDB_CODE_SUCCESS == code) {
code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->dbName, tableName, pCxt->pMetaCache);
}
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS == code) {
code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache); code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
} }
if (TSDB_CODE_SUCCESS == code) {
code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, tableName, pCxt->pMetaCache);
}
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS == code) {
code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName,
pClause->tableName, AUTH_TYPE_WRITE, pCxt->pMetaCache); pClause->tableName, AUTH_TYPE_WRITE, pCxt->pMetaCache);
} }
if (TSDB_CODE_SUCCESS == code) {
code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName,
tableName, AUTH_TYPE_WRITE, pCxt->pMetaCache);
}
if (TSDB_CODE_SUCCESS != code) { if (TSDB_CODE_SUCCESS != code) {
break; break;
} }

View File

@ -290,6 +290,9 @@ static int32_t authCreateMultiTable(SAuthCxt* pCxt, SCreateMultiTablesStmt* pStm
static int32_t authDropTable(SAuthCxt* pCxt, SDropTableStmt* pStmt) { static int32_t authDropTable(SAuthCxt* pCxt, SDropTableStmt* pStmt) {
int32_t code = TSDB_CODE_SUCCESS; int32_t code = TSDB_CODE_SUCCESS;
if (pStmt->withOpt && !pCxt->pParseCxt->isSuperUser) {
return TSDB_CODE_PAR_PERMISSION_DENIED;
}
SNode* pNode = NULL; SNode* pNode = NULL;
FOREACH(pNode, pStmt->pTables) { FOREACH(pNode, pStmt->pTables) {
SDropTableClause* pClause = (SDropTableClause*)pNode; SDropTableClause* pClause = (SDropTableClause*)pNode;
@ -302,6 +305,9 @@ static int32_t authDropTable(SAuthCxt* pCxt, SDropTableStmt* pStmt) {
} }
static int32_t authDropStable(SAuthCxt* pCxt, SDropSuperTableStmt* pStmt) { static int32_t authDropStable(SAuthCxt* pCxt, SDropSuperTableStmt* pStmt) {
if (pStmt->withOpt && !pCxt->pParseCxt->isSuperUser) {
return TSDB_CODE_PAR_PERMISSION_DENIED;
}
return checkAuth(pCxt, pStmt->dbName, pStmt->tableName, AUTH_TYPE_WRITE, NULL); return checkAuth(pCxt, pStmt->dbName, pStmt->tableName, AUTH_TYPE_WRITE, NULL);
} }

View File

@ -14449,22 +14449,22 @@ int32_t serializeVgroupsDropTableBatch(SHashObj* pVgroupHashmap, SArray** pOut)
return code; return code;
} }
static int32_t rewriteDropTableWithUid(STranslateContext* pCxt, SDropTableStmt* pStmt) { // static int32_t rewriteDropTablewithOpt(STranslateContext* pCxt, SDropTableStmt* pStmt) {
if (!pStmt->withUid) return TSDB_CODE_SUCCESS; // if (!pStmt->withOpt) return TSDB_CODE_SUCCESS;
SNode* pNode = NULL; // SNode* pNode = NULL;
const char* pTableName = NULL; // const char* pTableName = NULL;
FOREACH(pNode, pStmt->pTables) { // FOREACH(pNode, pStmt->pTables) {
SDropTableClause* pClause = (SDropTableClause*)pNode; // SDropTableClause* pClause = (SDropTableClause*)pNode;
pTableName = "aa\u00bf\u200bstb0"; // pTableName = "aa\u00bf\u200bstb0";
if (!pTableName) { // if (!pTableName) {
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_TABLE_NOT_EXIST, "Table does not exist: '%s'", // return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_TABLE_NOT_EXIST, "Table does not exist: '%s'",
pClause->tableName); // pClause->tableName);
} // }
tstrncpy(pClause->tableName, pTableName, TSDB_TABLE_NAME_LEN); // tstrncpy(pClause->tableName, pTableName, TSDB_TABLE_NAME_LEN);
} // }
return TSDB_CODE_SUCCESS; // return TSDB_CODE_SUCCESS;
} // }
static int32_t rewriteDropTable(STranslateContext* pCxt, SQuery* pQuery) { static int32_t rewriteDropTable(STranslateContext* pCxt, SQuery* pQuery) {
SDropTableStmt* pStmt = (SDropTableStmt*)pQuery->pRoot; SDropTableStmt* pStmt = (SDropTableStmt*)pQuery->pRoot;
@ -14472,7 +14472,7 @@ static int32_t rewriteDropTable(STranslateContext* pCxt, SQuery* pQuery) {
SNode* pNode; SNode* pNode;
SArray* pTsmas = NULL; SArray* pTsmas = NULL;
TAOS_CHECK_RETURN(rewriteDropTableWithUid(pCxt, pStmt)); // TAOS_CHECK_RETURN(rewriteDropTablewithOpt(pCxt, pStmt));
SHashObj* pVgroupHashmap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK); SHashObj* pVgroupHashmap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK);
if (NULL == pVgroupHashmap) { if (NULL == pVgroupHashmap) {