Coverage Report

Created: 2026-07-30 06:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/tdengine/source/libs/parser/src/parAstParser.c
Line
Count
Source
1
/*
2
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
3
 *
4
 * This program is free software: you can use, redistribute, and/or modify
5
 * it under the terms of the GNU Affero General Public License, version 3
6
 * or later ("AGPL"), as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope that it will be useful, but WITHOUT
9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
 * FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * You should have received a copy of the GNU Affero General Public License
13
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14
 */
15
16
#include "cmdnodes.h"
17
#include "functionMgt.h"
18
#include "os.h"
19
#include "parAst.h"
20
#include "parInt.h"
21
#include "parToken.h"
22
#include "systable.h"
23
#include "tglobal.h"
24
#include "tmsg.h"
25
26
typedef void* (*FMalloc)(size_t);
27
typedef void (*FFree)(void*);
28
29
extern SConfig* tsCfg;
30
31
extern void* ParseAlloc(FMalloc);
32
extern void  Parse(void*, int, SToken, void*);
33
extern void  ParseFree(void*, FFree);
34
extern void  ParseTrace(FILE*, char*);
35
36
2.74k
int32_t buildQueryAfterParse(SQuery** pQuery, SNode* pRootNode, int16_t placeholderNo, SArray** pPlaceholderValues) {
37
2.74k
  *pQuery = NULL;
38
2.74k
  int32_t code = nodesMakeNode(QUERY_NODE_QUERY, (SNode**)pQuery);
39
2.74k
  if (NULL == *pQuery) {
40
0
    return code;
41
0
  }
42
2.74k
  (*pQuery)->pRoot = pRootNode;
43
2.74k
  (*pQuery)->placeholderNum = placeholderNo;
44
2.74k
  TSWAP((*pQuery)->pPlaceholderValues, *pPlaceholderValues);
45
2.74k
  (*pQuery)->execStage = QUERY_EXEC_STAGE_ANALYSE;
46
47
2.74k
  return TSDB_CODE_SUCCESS;
48
2.74k
}
49
50
6.22k
int32_t parse(SParseContext* pParseCxt, SQuery** pQuery) {
51
6.22k
  SAstCreateContext cxt;
52
6.22k
  initAstCreateContext(pParseCxt, &cxt);
53
6.22k
  void* pParser = ParseAlloc((FMalloc)taosMemMalloc);
54
6.22k
  if (!pParser) return terrno;
55
6.22k
  int32_t i = 0;
56
1.27M
  while (1) {
57
1.27M
    SToken t0 = {0};
58
1.27M
    if (cxt.pQueryCxt->pSql[i] == 0) {
59
4.17k
      Parse(pParser, 0, t0, &cxt);
60
4.17k
      goto abort_parse;
61
4.17k
    }
62
1.27M
    if (!pParseCxt->hasDupQuoteChar) {
63
1.25M
      char dupQuoteChar = 0;
64
1.25M
      t0.n = tGetToken((char*)&cxt.pQueryCxt->pSql[i], &t0.type, &dupQuoteChar);
65
1.25M
      if (dupQuoteChar) pParseCxt->hasDupQuoteChar = true;
66
1.25M
    } else {
67
17.0k
      t0.n = tGetToken((char*)&cxt.pQueryCxt->pSql[i], &t0.type, NULL);
68
17.0k
    }
69
1.27M
    t0.z = (char*)(cxt.pQueryCxt->pSql + i);
70
1.27M
    i += t0.n;
71
72
1.27M
    switch (t0.type) {
73
21.8k
      case TK_NK_SPACE:
74
22.8k
      case TK_NK_COMMENT: {
75
22.8k
        break;
76
21.8k
      }
77
11
      case TK_NK_SEMI: {
78
11
        Parse(pParser, 0, t0, &cxt);
79
11
        goto abort_parse;
80
21.8k
      }
81
280
      case TK_NK_ILLEGAL: {
82
280
        snprintf(cxt.pQueryCxt->pMsg, cxt.pQueryCxt->msgLen, "unrecognized token: \"%s\"", t0.z);
83
280
        cxt.errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
84
280
        goto abort_parse;
85
21.8k
      }
86
0
      case TK_NK_OCT: {
87
0
        snprintf(cxt.pQueryCxt->pMsg, cxt.pQueryCxt->msgLen, "unsupported token: \"%s\"", t0.z);
88
0
        cxt.errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
89
0
        goto abort_parse;
90
21.8k
      }
91
1.25M
      default:
92
        // ParseTrace(stdout, "");
93
1.25M
        Parse(pParser, t0.type, t0, &cxt);
94
1.25M
        if (TSDB_CODE_SUCCESS != cxt.errCode) {
95
1.75k
          goto abort_parse;
96
1.75k
        }
97
1.27M
    }
98
1.27M
  }
99
100
6.22k
abort_parse:
101
6.22k
  ParseFree(pParser, (FFree)taosAutoMemoryFree);
102
6.22k
  if (TSDB_CODE_SUCCESS == cxt.errCode) {
103
2.74k
    int32_t code = buildQueryAfterParse(pQuery, cxt.pRootNode, cxt.placeholderNo, &cxt.pPlaceholderValues);
104
2.74k
    if (TSDB_CODE_SUCCESS != code) {
105
0
      return code;
106
0
    }
107
2.74k
  }
108
6.22k
  taosArrayDestroy(cxt.pPlaceholderValues);
109
6.22k
  return cxt.errCode;
110
6.22k
}
111
112
typedef struct SCollectMetaKeyCxt {
113
  SParseContext*   pParseCxt;
114
  SParseMetaCache* pMetaCache;
115
  SNode*           pStmt;
116
  bool             collectVStbRefDbs;
117
} SCollectMetaKeyCxt;
118
119
typedef struct SCollectMetaKeyFromExprCxt {
120
  SCollectMetaKeyCxt* pComCxt;
121
  bool                hasLastRowOrLast;
122
  bool                tbnameCollect;
123
  int32_t             errCode;
124
} SCollectMetaKeyFromExprCxt;
125
126
static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt);
127
static int32_t collectMetaKeyFromSetOperator(SCollectMetaKeyCxt* pCxt, SSetOperator* pStmt);
128
static int32_t collectMetaKeyFromSelect(SCollectMetaKeyCxt* pCxt, SSelectStmt* pStmt);
129
130
4.54k
static EDealRes collectMetaKeyFromFunction(SCollectMetaKeyFromExprCxt* pCxt, SFunctionNode* pFunc) {
131
4.54k
  switch (fmGetFuncType(pFunc->functionName)) {
132
0
    case FUNCTION_TYPE_LAST_ROW:
133
0
    case FUNCTION_TYPE_LAST:
134
0
      pCxt->hasLastRowOrLast = true;
135
0
      break;
136
4.54k
    case FUNCTION_TYPE_UDF:
137
4.54k
      pCxt->errCode = reserveUdfInCache(pFunc->functionName, pCxt->pComCxt->pMetaCache);
138
4.54k
      break;
139
0
    default:
140
0
      break;
141
4.54k
  }
142
4.54k
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
143
4.54k
}
144
145
12.0k
static bool needGetTableIndex(SNode* pStmt) {
146
12.0k
  return false;
147
0
  if (QUERY_SMA_OPTIMIZE_ENABLE == tsQuerySmaOptimize && QUERY_NODE_SELECT_STMT == nodeType(pStmt)) {
148
0
    SSelectStmt* pSelect = (SSelectStmt*)pStmt;
149
0
    return (NULL != pSelect->pWindow && QUERY_NODE_INTERVAL_WINDOW == nodeType(pSelect->pWindow));
150
0
  }
151
0
  return false;
152
0
}
153
154
1.41k
static int32_t collectMetaKeyFromInsTagsImpl(SCollectMetaKeyCxt* pCxt, SName* pName) {
155
1.41k
  if (0 == pName->type) {
156
1.41k
    return TSDB_CODE_SUCCESS;
157
1.41k
  }
158
0
  if (TSDB_DB_NAME_T == pName->type) {
159
0
    return reserveDbVgInfoInCache(pName->acctId, pName->dbname, pCxt->pMetaCache);
160
0
  }
161
0
  return reserveTableVgroupInCacheExt(pName, pCxt->pMetaCache);
162
0
}
163
164
1.41k
static int32_t collectMetaKeyFromInsTags(SCollectMetaKeyCxt* pCxt) {
165
1.41k
  SSelectStmt* pSelect = (SSelectStmt*)pCxt->pStmt;
166
1.41k
  SName        name = {0};
167
1.41k
  int32_t      code = getVnodeSysTableTargetName(pCxt->pParseCxt->acctId, pSelect->pWhere, &name);
168
1.41k
  if (TSDB_CODE_SUCCESS == code) {
169
1.41k
    code = collectMetaKeyFromInsTagsImpl(pCxt, &name);
170
1.41k
  }
171
1.41k
  return code;
172
1.41k
}
173
174
static int32_t collectMetaKeyFromRealTableImpl(SCollectMetaKeyCxt* pCxt, const char* pDb, const char* pTable,
175
12.0k
                                               EPrivType privType, EPrivObjType objType) {
176
12.0k
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
177
12.0k
  if (TSDB_CODE_SUCCESS == code) {
178
12.0k
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pDb, NULL, PRIV_DB_USE, PRIV_OBJ_DB,
179
12.0k
                                  pCxt->pMetaCache);
180
12.0k
  }
181
12.0k
  if (TSDB_CODE_SUCCESS == code) {
182
12.0k
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pDb, pCxt->pMetaCache);
183
12.0k
  }
184
12.0k
  if (TSDB_CODE_SUCCESS == code) {
185
12.0k
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
186
12.0k
  }
187
12.0k
  if (TSDB_CODE_SUCCESS == code) {
188
12.0k
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pDb, pTable, privType, objType,
189
12.0k
                                  pCxt->pMetaCache);
190
12.0k
  }
191
#ifdef TD_ENTERPRISE
192
  if (TSDB_CODE_SUCCESS == code && NULL != pCxt->pParseCxt->pEffectiveUser) {
193
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pEffectiveUser, pDb, pTable, privType,
194
                                  objType, pCxt->pMetaCache);
195
  }
196
#endif
197
12.0k
  if (TSDB_CODE_SUCCESS == code) {
198
12.0k
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pDb, pCxt->pMetaCache);
199
12.0k
  }
200
12.0k
  if (TSDB_CODE_SUCCESS == code && needGetTableIndex(pCxt->pStmt)) {
201
0
    code = reserveTableIndexInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
202
0
  }
203
12.0k
  if (TSDB_CODE_SUCCESS == code && (0 == strcmp(pTable, TSDB_INS_TABLE_DNODE_VARIABLES))) {
204
194
    code = reserveDnodeRequiredInCache(pCxt->pMetaCache);
205
194
  }
206
12.0k
  if (TSDB_CODE_SUCCESS == code &&
207
12.0k
      (0 == strcmp(pTable, TSDB_INS_TABLE_TAGS) || 0 == strcmp(pTable, TSDB_INS_TABLE_TABLES) ||
208
11.6k
       0 == strcmp(pTable, TSDB_INS_TABLE_COLS) || 0 == strcmp(pTable, TSDB_INS_TABLE_VC_COLS) ||
209
11.2k
       0 == strcmp(pTable, TSDB_INS_DISK_USAGE) || 0 == strcmp(pTable, TSDB_INS_TABLE_FILESETS) ||
210
10.7k
       0 == strcmp(pTable, TSDB_INS_TABLE_VIRTUAL_TABLES_REFERENCING)) &&
211
1.41k
      QUERY_NODE_SELECT_STMT == nodeType(pCxt->pStmt)) {
212
1.41k
    code = collectMetaKeyFromInsTags(pCxt);
213
1.41k
  }
214
12.0k
  if (TSDB_CODE_SUCCESS == code && QUERY_SMA_OPTIMIZE_ENABLE == tsQuerySmaOptimize &&
215
0
      QUERY_NODE_SELECT_STMT == nodeType(pCxt->pStmt)) {
216
0
    code = reserveTableTSMAInfoInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
217
0
  }
218
12.0k
  return code;
219
12.0k
}
220
221
12.0k
static EDealRes collectMetaKeyFromRealTable(SCollectMetaKeyFromExprCxt* pCxt, SRealTableNode* pRealTable) {
222
12.0k
  pCxt->errCode = collectMetaKeyFromRealTableImpl(pCxt->pComCxt, pRealTable->table.dbName, pRealTable->table.tableName,
223
12.0k
                                                  PRIV_TBL_SELECT, PRIV_OBJ_TBL);
224
12.0k
  if (TSDB_CODE_SUCCESS == pCxt->errCode && pCxt->pComCxt->collectVStbRefDbs) {
225
1.43k
    pCxt->errCode = reserveVStbRefDbsInCache(pCxt->pComCxt->pParseCxt->acctId, pRealTable->table.dbName,
226
1.43k
                                             pRealTable->table.tableName, pCxt->pComCxt->pMetaCache);
227
1.43k
  }
228
12.0k
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
229
12.0k
}
230
231
851
static EDealRes collectMetaKeyFromTempTable(SCollectMetaKeyFromExprCxt* pCxt, STempTableNode* pTempTable) {
232
851
  pCxt->errCode = collectMetaKeyFromQuery(pCxt->pComCxt, pTempTable->pSubquery);
233
851
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
234
851
}
235
236
736
static int32_t isTbnameEqCondOperator(SOperatorNode* pOperator, char** ppTableName) {
237
736
  if (pOperator->opType != OP_TYPE_EQUAL) {
238
204
    return TSDB_CODE_SUCCESS;
239
204
  }
240
241
532
  SValueNode* pValueNode = NULL;
242
532
  if (nodeType(pOperator->pLeft) == QUERY_NODE_FUNCTION &&
243
60
      0 == strcasecmp(((SFunctionNode*)(pOperator->pLeft))->functionName, "tbname") &&
244
0
      nodeType(pOperator->pRight) == QUERY_NODE_VALUE) {
245
0
    pValueNode = (SValueNode*)pOperator->pRight;
246
532
  } else if (nodeType(pOperator->pRight) == QUERY_NODE_FUNCTION &&
247
266
             0 == strcasecmp(((SFunctionNode*)(pOperator->pRight))->functionName, "tbname") &&
248
0
             nodeType(pOperator->pLeft) == QUERY_NODE_VALUE) {
249
0
    pValueNode = (SValueNode*)pOperator->pLeft;
250
532
  } else {
251
532
    return TSDB_CODE_SUCCESS;
252
532
  }
253
254
0
  *ppTableName = pValueNode->literal;
255
256
0
  return TSDB_CODE_SUCCESS;
257
532
}
258
259
843k
static EDealRes collectMetaKeyFromOperator(SCollectMetaKeyFromExprCxt* pCxt, SOperatorNode* pOpNode) {
260
843k
  if (!pCxt->tbnameCollect) {
261
842k
    return DEAL_RES_CONTINUE;
262
842k
  }
263
264
736
  char*   pTableName = NULL;
265
736
  int32_t code = isTbnameEqCondOperator((SOperatorNode*)pOpNode, &pTableName);
266
736
  if (TSDB_CODE_SUCCESS != code) return DEAL_RES_CONTINUE;
267
736
  if (pTableName) {
268
0
    SSelectStmt* pSelect = (SSelectStmt*)pCxt->pComCxt->pStmt;
269
0
    pCxt->errCode = collectMetaKeyFromRealTableImpl(pCxt->pComCxt, ((SRealTableNode*)pSelect->pFromTable)->table.dbName,
270
0
                                                    pTableName, PRIV_TBL_SELECT, PRIV_OBJ_TBL);
271
0
  }
272
273
736
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
274
736
}
275
276
1.35M
static EDealRes collectMetaKeyFromExprImpl(SNode* pNode, void* pContext) {
277
1.35M
  SCollectMetaKeyFromExprCxt* pCxt = pContext;
278
1.35M
  switch (nodeType(pNode)) {
279
4.54k
    case QUERY_NODE_FUNCTION:
280
4.54k
      return collectMetaKeyFromFunction(pCxt, (SFunctionNode*)pNode);
281
12.0k
    case QUERY_NODE_REAL_TABLE:
282
12.0k
      return collectMetaKeyFromRealTable(pCxt, (SRealTableNode*)pNode);
283
851
    case QUERY_NODE_TEMP_TABLE:
284
851
      return collectMetaKeyFromTempTable(pCxt, (STempTableNode*)pNode);
285
843k
    case QUERY_NODE_OPERATOR:
286
843k
      return collectMetaKeyFromOperator(pCxt, (SOperatorNode*)pNode);
287
0
    case QUERY_NODE_SET_OPERATOR:
288
0
      return collectMetaKeyFromSetOperator(pCxt->pComCxt, (SSetOperator*)pNode);
289
5.06k
    case QUERY_NODE_SELECT_STMT:
290
5.06k
      return collectMetaKeyFromQuery(pCxt->pComCxt, pNode);
291
486k
    default:
292
486k
      break;
293
1.35M
  }
294
486k
  return DEAL_RES_CONTINUE;
295
1.35M
}
296
297
0
static int32_t collectMetaKeyFromExprs(SCollectMetaKeyCxt* pCxt, SNodeList* pList) {
298
0
  SCollectMetaKeyFromExprCxt cxt = {.pComCxt = pCxt, .errCode = TSDB_CODE_SUCCESS, .tbnameCollect = false};
299
0
  nodesWalkExprs(pList, collectMetaKeyFromExprImpl, &cxt);
300
0
  return cxt.errCode;
301
0
}
302
303
0
static int32_t collectMetaKeyFromSetOperator(SCollectMetaKeyCxt* pCxt, SSetOperator* pStmt) {
304
0
  int32_t code = collectMetaKeyFromQuery(pCxt, pStmt->pLeft);
305
0
  if (TSDB_CODE_SUCCESS == code) {
306
0
    code = collectMetaKeyFromQuery(pCxt, pStmt->pRight);
307
0
  }
308
0
  if (TSDB_CODE_SUCCESS == code) {
309
0
    code = collectMetaKeyFromExprs(pCxt, pStmt->pOrderByList);
310
0
  }
311
0
  return code;
312
0
}
313
314
0
static int32_t reserveDbCfgForLastRow(SCollectMetaKeyCxt* pCxt, SNode* pTable) {
315
0
  if (NULL == pTable || QUERY_NODE_REAL_TABLE != nodeType(pTable)) {
316
0
    return TSDB_CODE_SUCCESS;
317
0
  }
318
0
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SRealTableNode*)pTable)->table.dbName, pCxt->pMetaCache);
319
0
}
320
321
8.34k
static int32_t collectMetaKeyFromSelect(SCollectMetaKeyCxt* pCxt, SSelectStmt* pStmt) {
322
8.34k
  SCollectMetaKeyFromExprCxt cxt = {.pComCxt = pCxt, .hasLastRowOrLast = false, .errCode = TSDB_CODE_SUCCESS};
323
8.34k
  if (pStmt->pFromTable && QUERY_NODE_REAL_TABLE == nodeType(pStmt->pFromTable)) {
324
974
    cxt.tbnameCollect = true;
325
974
    cxt.pComCxt->collectVStbRefDbs = true;
326
974
  }
327
8.34k
  nodesWalkSelectStmt(pStmt, SQL_CLAUSE_FROM, collectMetaKeyFromExprImpl, &cxt);
328
8.34k
  if (TSDB_CODE_SUCCESS == cxt.errCode && cxt.hasLastRowOrLast) {
329
0
    cxt.errCode = reserveDbCfgForLastRow(pCxt, pStmt->pFromTable);
330
0
  }
331
8.34k
  return cxt.errCode;
332
8.34k
}
333
334
0
static int32_t collectMetaKeyFromCreateDatabase(SCollectMetaKeyCxt* pCxt, SCreateDatabaseStmt* pStmt) {
335
0
  int32_t code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_DB_CREATE, 0,
336
0
                                        pCxt->pMetaCache);
337
0
  if (TSDB_CODE_SUCCESS == code) {
338
    // pre-fetch PRIV_SECURITY_POLICY_ALTER for CREATE DATABASE ... SECURITY_LEVEL X (MAC mode)
339
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL,
340
0
                                  PRIV_SECURITY_POLICY_ALTER, 0, pCxt->pMetaCache);
341
0
  }
342
0
  return code;
343
0
}
344
345
0
static int32_t collectMetaKeyFromAlterDatabase(SCollectMetaKeyCxt* pCxt, SAlterDatabaseStmt* pStmt) {
346
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
347
0
  if (TSDB_CODE_SUCCESS == code) {
348
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_CM_ALTER,
349
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
350
0
  }
351
0
  if (TSDB_CODE_SUCCESS == code) {
352
    // ALTER DATABASE ... SECURITY_LEVEL uses PRIV_SECURITY_POLICY_ALTER as primary check: pre-fetch unconditionally.
353
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL,
354
0
                                  PRIV_SECURITY_POLICY_ALTER, 0, pCxt->pMetaCache);
355
0
  }
356
0
  return code;
357
0
}
358
359
0
static int32_t collectMetaKeyFromDropDatabase(SCollectMetaKeyCxt* pCxt, SDropDatabaseStmt* pStmt) {
360
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
361
0
  if (TSDB_CODE_SUCCESS == code) {
362
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_CM_DROP,
363
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
364
0
  }
365
0
  return code;
366
0
}
367
368
0
static int32_t collectMetaKeyFromFlushDatabase(SCollectMetaKeyCxt* pCxt, SFlushDatabaseStmt* pStmt) {
369
0
  int32_t code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
370
0
  if (TSDB_CODE_SUCCESS == code) {
371
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_FLUSH,
372
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
373
0
  }
374
0
  return code;
375
0
}
376
377
0
static int32_t collectMetaKeyFromCreateTable(SCollectMetaKeyCxt* pCxt, SCreateTableStmt* pStmt) {
378
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
379
0
  if (TSDB_CODE_SUCCESS == code && NULL == pStmt->pTags) {
380
0
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
381
0
  }
382
0
  if (TSDB_CODE_SUCCESS == code) {
383
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
384
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
385
0
  }
386
0
  if (TSDB_CODE_SUCCESS == code) {
387
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_TBL_CREATE,
388
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
389
0
  }
390
0
  return code;
391
0
}
392
393
0
static int32_t collectMetaKeyFromCreateVTable(SCollectMetaKeyCxt* pCxt, SCreateVTableStmt* pStmt) {
394
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
395
0
  if (TSDB_CODE_SUCCESS == code) {
396
0
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
397
0
  }
398
0
  if (TSDB_CODE_SUCCESS == code) {
399
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
400
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
401
0
  }
402
0
  if (TSDB_CODE_SUCCESS == code) {
403
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_TBL_CREATE,
404
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
405
0
  }
406
0
  if (TSDB_CODE_SUCCESS == code) {
407
0
    SNode* pNode = NULL;
408
0
    FOREACH(pNode, pStmt->pCols) {
409
0
      SColumnDefNode* pCol = (SColumnDefNode*)pNode;
410
0
      if (NULL == pCol) {
411
0
        code = TSDB_CODE_PAR_INVALID_COLUMN;
412
0
        break;
413
0
      }
414
0
      SColumnOptions* pOptions = (SColumnOptions*)pCol->pOptions;
415
0
      if (pOptions && pOptions->hasRef) {
416
0
        code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pOptions->refDb, pOptions->refTable, pCxt->pMetaCache);
417
0
        if (TSDB_CODE_SUCCESS == code) {
418
0
          code =
419
0
              reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pOptions->refDb, pOptions->refTable, pCxt->pMetaCache);
420
0
        }
421
0
        if (TSDB_CODE_SUCCESS == code) {
422
0
          code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pOptions->refDb,
423
0
                                        pOptions->refTable, PRIV_TBL_SELECT, PRIV_OBJ_TBL, pCxt->pMetaCache);
424
0
        }
425
0
        if (TSDB_CODE_SUCCESS != code) {
426
0
          break;
427
0
        }
428
0
      }
429
0
    }
430
0
  }
431
0
  return code;
432
0
}
433
434
0
static int32_t collectMetaKeyFromCreateVSubTable(SCollectMetaKeyCxt* pCxt, SCreateVSubTableStmt* pStmt) {
435
0
  int32_t code = TSDB_CODE_SUCCESS;
436
0
  PAR_ERR_RET(reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache));
437
  // super table's meta
438
0
  PAR_ERR_RET(
439
0
      reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->useDbName, pStmt->useTableName, pCxt->pMetaCache));
440
  // child table's meta
441
0
  PAR_ERR_RET(reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache));
442
  // check db's write auth
443
0
  PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
444
0
                                     PRIV_OBJ_DB, pCxt->pMetaCache));
445
0
  PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
446
0
                                     PRIV_TBL_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache));
447
  // check org table's read auth for column references
448
0
  SNode*     pNode = NULL;
449
0
  SNodeList* pTmpNodeList = pStmt->pSpecificColRefs ? pStmt->pSpecificColRefs : pStmt->pColRefs;
450
0
  if (pTmpNodeList) {
451
0
    FOREACH(pNode, pTmpNodeList) {
452
0
      SColumnRefNode* pColRef = (SColumnRefNode*)pNode;
453
0
      if (NULL == pColRef) {
454
0
        code = TSDB_CODE_PAR_INVALID_COLUMN;
455
0
        break;
456
0
      }
457
0
      PAR_ERR_RET(
458
0
          reserveTableMetaInCache(pCxt->pParseCxt->acctId, pColRef->refDbName, pColRef->refTableName, pCxt->pMetaCache));
459
0
      PAR_ERR_RET(reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pColRef->refDbName, pColRef->refTableName,
460
0
                                            pCxt->pMetaCache));
461
0
      PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pColRef->refDbName,
462
0
                                         pColRef->refTableName, PRIV_TBL_SELECT, PRIV_OBJ_TBL, pCxt->pMetaCache));
463
0
    }
464
0
  }
465
466
  // collect metadata for tag reference tables (SColumnRefNode nodes in pValsOfTags)
467
  // Handles all tag ref syntax forms: legacy (FROM db.table.tag), specific (tag_name FROM db.table.tag),
468
  // and positional (db.table.tag) - all produce SColumnRefNode in pValsOfTags.
469
0
  if (pStmt->pValsOfTags) {
470
0
    FOREACH(pNode, pStmt->pValsOfTags) {
471
0
      if (nodeType(pNode) == QUERY_NODE_COLUMN_REF) {
472
0
        SColumnRefNode* pTagRef = (SColumnRefNode*)pNode;
473
0
        PAR_ERR_RET(
474
0
            reserveTableMetaInCache(pCxt->pParseCxt->acctId, pTagRef->refDbName, pTagRef->refTableName, pCxt->pMetaCache));
475
0
        PAR_ERR_RET(reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pTagRef->refDbName, pTagRef->refTableName,
476
0
                                              pCxt->pMetaCache));
477
0
        PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pTagRef->refDbName,
478
0
                                           pTagRef->refTableName, PRIV_TBL_SELECT, PRIV_OBJ_TBL, pCxt->pMetaCache));
479
0
      }
480
0
    }
481
0
  }
482
483
0
  return code;
484
0
}
485
486
0
static int32_t collectMetaKeyFromCreateMultiTable(SCollectMetaKeyCxt* pCxt, SCreateMultiTablesStmt* pStmt) {
487
0
  int32_t code = TSDB_CODE_SUCCESS;
488
0
  SNode*  pNode = NULL;
489
0
  FOREACH(pNode, pStmt->pSubTables) {
490
0
    if (pNode->type == QUERY_NODE_CREATE_SUBTABLE_CLAUSE) {
491
0
      SCreateSubTableClause* pClause = (SCreateSubTableClause*)pNode;
492
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
493
0
      if (TSDB_CODE_SUCCESS == code) {
494
0
        code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName,
495
0
                                       pCxt->pMetaCache);
496
0
      }
497
0
      if (TSDB_CODE_SUCCESS == code) {
498
0
        code =
499
0
            reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
500
0
      }
501
0
      if (TSDB_CODE_SUCCESS == code) {
502
0
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, NULL,
503
0
                                      PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
504
0
      }
505
0
      if (TSDB_CODE_SUCCESS == code) {
506
0
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, NULL,
507
0
                                      PRIV_TBL_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache);
508
0
      }
509
0
    } else {
510
0
      SCreateSubTableFromFileClause* pClause = (SCreateSubTableFromFileClause*)pNode;
511
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pCxt->pMetaCache);
512
0
      if (TSDB_CODE_SUCCESS == code) {
513
0
        code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName,
514
0
                                       pCxt->pMetaCache);
515
0
      }
516
0
      if (TSDB_CODE_SUCCESS == code) {
517
0
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->useDbName, NULL,
518
0
                                      PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
519
0
      }
520
0
      if (TSDB_CODE_SUCCESS == code) {
521
0
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->useDbName, NULL,
522
0
                                      PRIV_TBL_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache);
523
0
      }
524
0
    }
525
526
0
    if (TSDB_CODE_SUCCESS != code) {
527
0
      break;
528
0
    }
529
0
  }
530
0
  return code;
531
0
}
532
533
static int32_t collectMetaKeyFromCreateSubTableFromFile(SCollectMetaKeyCxt*            pCxt,
534
0
                                                        SCreateSubTableFromFileClause* pClause) {
535
0
  int32_t code = TSDB_CODE_SUCCESS;
536
0
  SNode*  pNode = NULL;
537
538
0
  code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pCxt->pMetaCache);
539
0
  if (TSDB_CODE_SUCCESS == code) {
540
0
    code =
541
0
        reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName, pCxt->pMetaCache);
542
0
  }
543
0
  if (TSDB_CODE_SUCCESS == code) {
544
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->useDbName, NULL,
545
0
                                  PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
546
0
  }
547
0
  if (TSDB_CODE_SUCCESS == code) {
548
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->useDbName, NULL,
549
0
                                  PRIV_TBL_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache);
550
0
  }
551
552
0
  return code;
553
0
}
554
555
0
static int32_t collectMetaKeyFromDropTable(SCollectMetaKeyCxt* pCxt, SDropTableStmt* pStmt) {
556
0
  int32_t code = TSDB_CODE_SUCCESS;
557
0
  SNode*  pNode = NULL;
558
0
  FOREACH(pNode, pStmt->pTables) {
559
0
    SDropTableClause* pClause = (SDropTableClause*)pNode;
560
0
    if (pStmt->withOpt) {
561
0
      code = reserveTableUidInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
562
0
      if (TSDB_CODE_SUCCESS == code) {
563
0
        code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
564
0
      }
565
0
    } else {
566
0
      code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
567
0
      if (TSDB_CODE_SUCCESS == code) {
568
0
        code =
569
0
            reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
570
0
      }
571
0
      if (TSDB_CODE_SUCCESS == code) {
572
0
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName,
573
0
                                      pClause->tableName, PRIV_CM_DROP, PRIV_OBJ_TBL, pCxt->pMetaCache);
574
0
      }
575
0
    }
576
0
    if (TSDB_CODE_SUCCESS == code) {
577
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
578
0
    }
579
0
    if (TSDB_CODE_SUCCESS == code) {
580
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, NULL, PRIV_DB_USE,
581
0
                                    PRIV_OBJ_DB, pCxt->pMetaCache);
582
0
    }
583
584
0
    if (TSDB_CODE_SUCCESS != code) {
585
0
      break;
586
0
    }
587
0
  }
588
0
  return code;
589
0
}
590
591
0
static int32_t collectMetaKeyFromDropStable(SCollectMetaKeyCxt* pCxt, SDropSuperTableStmt* pStmt) {
592
0
  int32_t code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
593
0
                                        PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
594
0
  if (TSDB_CODE_SUCCESS == code) {
595
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
596
0
  }
597
0
  if (TSDB_CODE_SUCCESS == code) {
598
0
    if (pStmt->withOpt) {
599
0
      code = reserveTableUidInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
600
0
    } else {
601
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
602
0
                                    PRIV_CM_DROP, PRIV_OBJ_TBL, pCxt->pMetaCache);
603
0
    }
604
0
  }
605
0
  return code;
606
0
}
607
608
0
static int32_t collectMetaKeyFromDropVtable(SCollectMetaKeyCxt* pCxt, SDropVirtualTableStmt* pStmt) {
609
0
  int32_t code = TSDB_CODE_SUCCESS;
610
0
  if (pStmt->withOpt) {
611
0
    code = reserveTableUidInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
612
0
    if (TSDB_CODE_SUCCESS == code) {
613
0
      code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
614
0
    }
615
0
    if (TSDB_CODE_SUCCESS == code) {
616
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
617
0
    }
618
0
  } else {
619
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
620
0
    if (TSDB_CODE_SUCCESS == code) {
621
0
      code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
622
0
    }
623
0
    if (TSDB_CODE_SUCCESS == code) {
624
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
625
0
                                    PRIV_OBJ_DB, pCxt->pMetaCache);
626
0
    }
627
0
    if (TSDB_CODE_SUCCESS == code) {
628
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
629
0
                                    PRIV_CM_DROP, PRIV_OBJ_TBL, pCxt->pMetaCache);
630
0
    }
631
0
  }
632
0
  return code;
633
0
}
634
635
636
637
0
static int32_t collectMetaKeyFromAlterTable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
638
0
  int32_t code = TSDB_CODE_SUCCESS;
639
640
0
  if (pStmt->alterType == TSDB_ALTER_TABLE_UPDATE_MULTI_TABLE_TAG_VAL) {
641
0
    SNode*  pNode = NULL;
642
0
    FOREACH(pNode, pStmt->pList) {
643
0
      SAlterTableUpdateTagValClause* pClause = (SAlterTableUpdateTagValClause*)pNode;
644
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
645
0
      if (code != TSDB_CODE_SUCCESS) {
646
0
        break;
647
0
      }
648
649
0
      SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
650
0
      tstrncpy(name.dbname, pClause->dbName, TSDB_DB_NAME_LEN);
651
0
      tstrncpy(name.tname, pClause->tableName, TSDB_TABLE_NAME_LEN);
652
0
      code = catalogRemoveTableRelatedMeta(pCxt->pParseCxt->pCatalog, &name);
653
0
      if (code != TSDB_CODE_SUCCESS) {
654
0
        break;
655
0
      }
656
657
0
      code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
658
0
      if (code != TSDB_CODE_SUCCESS) {
659
0
        break;
660
0
      }
661
662
0
      code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
663
0
      if (code != TSDB_CODE_SUCCESS) {
664
0
        break;
665
0
      }
666
667
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
668
0
      if (code != TSDB_CODE_SUCCESS) {
669
0
        break;
670
0
      }
671
                                      
672
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, pClause->tableName, PRIV_CM_ALTER, PRIV_OBJ_TBL, pCxt->pMetaCache);
673
0
      if (code != TSDB_CODE_SUCCESS) {
674
0
        break;
675
0
      }
676
0
    }
677
678
0
    return code;
679
0
  }
680
  
681
0
  if (pStmt->alterType == TSDB_ALTER_TABLE_UPDATE_CHILD_TABLE_TAG_VAL) {
682
0
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
683
0
    if (TSDB_CODE_SUCCESS != code) {
684
0
      return code;
685
0
    }
686
687
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
688
0
    if (TSDB_CODE_SUCCESS != code) {
689
0
      return code;
690
0
    }
691
692
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
693
0
    if (TSDB_CODE_SUCCESS != code) {
694
0
      return code;
695
0
    }
696
697
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
698
0
    if (TSDB_CODE_SUCCESS != code) {
699
0
      return code;
700
0
    }
701
702
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName, PRIV_CM_ALTER, PRIV_OBJ_TBL, pCxt->pMetaCache);
703
0
    return code;
704
0
  }
705
706
0
  code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
707
0
  if (code != TSDB_CODE_SUCCESS) {
708
0
    return code;
709
0
  }
710
711
0
  code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
712
0
  if (code != TSDB_CODE_SUCCESS) {
713
0
    return code;
714
0
  }
715
716
0
  code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
717
0
  if (code != TSDB_CODE_SUCCESS) {
718
0
    return code;
719
0
  }
720
721
0
  code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
722
0
  if (code != TSDB_CODE_SUCCESS) {
723
0
    return code;
724
0
  }
725
                                  
726
0
  code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName, PRIV_CM_ALTER, PRIV_OBJ_TBL, pCxt->pMetaCache);
727
0
  if (TSDB_CODE_SUCCESS == code) {
728
    // ALTER TABLE ... SECURITY_LEVEL uses PRIV_SECURITY_POLICY_ALTER as primary check: pre-fetch unconditionally.
729
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL,
730
0
                                  PRIV_SECURITY_POLICY_ALTER, 0, pCxt->pMetaCache);
731
0
  }
732
0
  return code;
733
0
}
734
735
736
737
0
static int32_t collectMetaKeyFromAlterStable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
738
0
  if (pStmt->alterType == TSDB_ALTER_TABLE_UPDATE_MULTI_TABLE_TAG_VAL) {
739
    // TODO: should return TSDB_CODE_PAR_INVALID_ALTER_TABLE directly
740
0
    int32_t code = TSDB_CODE_SUCCESS;
741
0
    SNode*  pNode = NULL;
742
0
    FOREACH(pNode, pStmt->pList) {
743
0
      SAlterTableUpdateTagValClause* pClause = (SAlterTableUpdateTagValClause*)pNode;
744
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
745
0
      if (code != TSDB_CODE_SUCCESS) break;
746
0
      code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
747
0
      if (code != TSDB_CODE_SUCCESS) break;
748
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
749
0
      if (code != TSDB_CODE_SUCCESS) break;
750
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, pClause->tableName, PRIV_CM_ALTER, PRIV_OBJ_TBL, pCxt->pMetaCache);
751
0
      if (code != TSDB_CODE_SUCCESS) break;
752
0
    }
753
0
    return code;
754
0
  }
755
756
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
757
0
  if (TSDB_CODE_SUCCESS == code) {
758
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
759
0
  }
760
0
  if (TSDB_CODE_SUCCESS == code) {
761
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
762
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
763
0
  }
764
0
  if (TSDB_CODE_SUCCESS == code) {
765
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
766
0
                                  PRIV_CM_ALTER, PRIV_OBJ_TBL, pCxt->pMetaCache);
767
0
  }
768
0
  if (TSDB_CODE_SUCCESS == code) {
769
    // ALTER TABLE ... SECURITY_LEVEL uses PRIV_SECURITY_POLICY_ALTER as primary check: pre-fetch unconditionally.
770
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL,
771
0
                                  PRIV_SECURITY_POLICY_ALTER, 0, pCxt->pMetaCache);
772
0
  }
773
0
  return code;
774
0
}
775
776
777
778
0
static int32_t collectMetaKeyFromAlterVtable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
779
0
  PAR_ERR_RET(collectMetaKeyFromAlterTable(pCxt, pStmt));
780
781
0
  if (pStmt->alterType == TSDB_ALTER_TABLE_ALTER_COLUMN_REF ||
782
0
      pStmt->alterType == TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COLUMN_REF) {
783
0
    PAR_ERR_RET(
784
0
        reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->refDbName, pStmt->refTableName, pCxt->pMetaCache));
785
0
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->refDbName, NULL,
786
0
                                       PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache));
787
0
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->refDbName,
788
0
                                       pStmt->refTableName, PRIV_TBL_SELECT, PRIV_OBJ_TBL, pCxt->pMetaCache));
789
0
  }
790
791
0
  return TSDB_CODE_SUCCESS;
792
0
}
793
794
795
796
28
static int32_t collectMetaKeyFromUseDatabase(SCollectMetaKeyCxt* pCxt, SUseDatabaseStmt* pStmt) {
797
28
  int32_t code = reserveDbVgVersionInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
798
28
  if (TSDB_CODE_SUCCESS == code) {
799
28
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
800
28
  }
801
28
  if (TSDB_CODE_SUCCESS == code) {
802
28
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
803
28
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
804
28
  }
805
28
  return code;
806
28
}
807
808
0
static int32_t collectMetaKeyFromCreateIndex(SCollectMetaKeyCxt* pCxt, SCreateIndexStmt* pStmt) {
809
0
  int32_t code = TSDB_CODE_SUCCESS;
810
0
  if (INDEX_TYPE_SMA == pStmt->indexType || INDEX_TYPE_NORMAL == pStmt->indexType) {
811
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
812
0
    if (TSDB_CODE_SUCCESS == code) {
813
0
      code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
814
0
    }
815
0
    if (TSDB_CODE_SUCCESS == code) {
816
0
      code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
817
0
    }
818
0
    if (TSDB_CODE_SUCCESS == code) {
819
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
820
0
    }
821
0
    if (TSDB_CODE_SUCCESS == code) {
822
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
823
0
                                    PRIV_TBL_SELECT, PRIV_OBJ_TBL, pCxt->pMetaCache);
824
0
    }
825
0
    if (TSDB_CODE_SUCCESS == code) {
826
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
827
0
                                    PRIV_IDX_CREATE, PRIV_OBJ_TBL, pCxt->pMetaCache);
828
0
    }
829
0
    if (TSDB_CODE_SUCCESS == code) {
830
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
831
0
                                    PRIV_OBJ_DB, pCxt->pMetaCache);
832
0
    }
833
0
  }
834
0
  return code;
835
0
}
836
837
0
static int32_t collectMetaKeyFromDropIndex(SCollectMetaKeyCxt* pCxt, SDropIndexStmt* pStmt) {
838
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->indexDbName, pCxt->pMetaCache);
839
0
  if (TSDB_CODE_SUCCESS == code) {
840
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->indexDbName, NULL,
841
0
                                  PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
842
0
  }
843
0
  if (TSDB_CODE_SUCCESS == code) {
844
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->indexDbName, pStmt->indexName,
845
0
                                  PRIV_CM_DROP, PRIV_OBJ_IDX, pCxt->pMetaCache);
846
0
  }
847
0
  return code;
848
0
}
849
850
0
static int32_t collectMetaKeyFromCreateTopic(SCollectMetaKeyCxt* pCxt, SCreateTopicStmt* pStmt) {
851
0
  int32_t code = 0;
852
0
  if (NULL != pStmt->pQuery) {
853
0
    code = collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
854
0
  }
855
0
  if (NULL != pStmt->pWhere) {
856
0
    code = collectMetaKeyFromRealTableImpl(pCxt, pStmt->subDbName, pStmt->subSTbName, PRIV_TBL_SELECT, PRIV_OBJ_TBL);
857
0
  }
858
0
  if (pStmt->subDbName[0] != '\0') {
859
0
    if (TSDB_CODE_SUCCESS == code) {
860
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->subDbName, pCxt->pMetaCache);
861
0
    }
862
0
    if (TSDB_CODE_SUCCESS == code) {
863
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->subDbName, NULL,
864
0
                                    PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
865
0
    }
866
0
    if (TSDB_CODE_SUCCESS == code) {
867
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->subDbName, NULL,
868
0
                                    PRIV_TOPIC_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache);
869
0
    }
870
0
  }
871
0
  return code;
872
0
}
873
874
0
static int32_t collectMetaKeyFromExplain(SCollectMetaKeyCxt* pCxt, SExplainStmt* pStmt) {
875
0
  return collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
876
0
}
877
878
100
static int32_t collectMetaKeyFromDescribe(SCollectMetaKeyCxt* pCxt, SDescribeStmt* pStmt) {
879
100
  SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
880
100
  tstrncpy(name.dbname, pStmt->dbName, TSDB_DB_NAME_LEN);
881
100
  tstrncpy(name.tname, pStmt->tableName, TSDB_TABLE_NAME_LEN);
882
100
  int32_t code = catalogRemoveTableRelatedMeta(pCxt->pParseCxt->pCatalog, &name);
883
#ifdef TD_ENTERPRISE
884
  if (TSDB_CODE_SUCCESS == code) {
885
    char dbFName[TSDB_DB_FNAME_LEN];
886
    (void)tNameGetFullDbName(&name, dbFName);
887
    code = catalogRemoveViewMeta(pCxt->pParseCxt->pCatalog, dbFName, 0, pStmt->tableName, 0);
888
  }
889
#endif
890
100
  if (TSDB_CODE_SUCCESS == code) {
891
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
892
0
  }
893
100
  if (TSDB_CODE_SUCCESS == code) {
894
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
895
0
  }
896
100
  return code;
897
100
}
898
899
0
static int32_t collectMetaKeyFromCreateStream(SCollectMetaKeyCxt* pCxt, SCreateStreamStmt* pStmt) {
900
0
  int32_t code = TSDB_CODE_SUCCESS;
901
902
0
  if (strcmp(pStmt->targetTabName, "") != 0) {
903
0
    PAR_ERR_RET(
904
0
        reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->targetDbName, pStmt->targetTabName, pCxt->pMetaCache));
905
0
    (void)reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->targetDbName, pStmt->targetTabName,
906
0
                                    pCxt->pMetaCache);
907
0
    PAR_ERR_RET(reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->targetDbName, pCxt->pMetaCache));
908
0
  }
909
0
  PAR_ERR_RET(reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->streamDbName, pCxt->pMetaCache));
910
0
  SRealTableNode* pTriggerTable = (SRealTableNode*)((SStreamTriggerNode*)pStmt->pTrigger)->pTrigerTable;
911
0
  if (pTriggerTable) {
912
0
    SCollectMetaKeyFromExprCxt cxt = {
913
0
        .pComCxt = pCxt, .hasLastRowOrLast = false, .tbnameCollect = true, .errCode = TSDB_CODE_SUCCESS};
914
0
    cxt.pComCxt->collectVStbRefDbs = true;
915
0
    EDealRes res = collectMetaKeyFromRealTable(&cxt, pTriggerTable);
916
0
    PAR_ERR_RET(cxt.errCode);
917
0
    PAR_ERR_RET(reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pTriggerTable->table.dbName, pCxt->pMetaCache));
918
0
    PAR_ERR_RET(reserveDbCfgInCache(pCxt->pParseCxt->acctId, pTriggerTable->table.dbName, pCxt->pMetaCache));
919
0
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pTriggerTable->table.dbName,
920
0
                                       pTriggerTable->table.tableName, PRIV_TBL_SELECT, PRIV_OBJ_TBL,
921
0
                                       pCxt->pMetaCache));
922
0
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pTriggerTable->table.dbName,
923
0
                                       NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache));
924
0
  }
925
0
  if (pStmt->pQuery) {
926
0
    PAR_ERR_RET(collectMetaKeyFromQuery(pCxt, pStmt->pQuery));
927
0
  }
928
0
  PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->streamDbName, NULL,
929
0
                                     PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache));
930
0
  PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->streamDbName, NULL,
931
0
                                     PRIV_STREAM_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache));
932
0
  if (pStmt->targetDbName[0] != '\0') {
933
0
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->targetDbName, NULL,
934
0
                                       PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache));
935
0
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->targetDbName, NULL,
936
0
                                       PRIV_TBL_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache));
937
0
  }
938
939
0
  return code;
940
0
}
941
942
0
static int32_t collectMetaKeyFromRecalculateStream(SCollectMetaKeyCxt* pCxt, SRecalcStreamStmt* pStmt) {
943
0
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->streamDbName, pCxt->pMetaCache);
944
0
}
945
946
1
static int32_t collectMetaKeyFromShowDnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
947
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODES,
948
1
                                         pCxt->pMetaCache);
949
1
  if (TSDB_CODE_SUCCESS == code) {
950
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
951
1
                                  pCxt->pMetaCache);
952
1
  }
953
1
  return code;
954
1
}
955
956
1
static int32_t collectMetaKeyFromShowMnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
957
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MNODES,
958
1
                                         pCxt->pMetaCache);
959
1
  if (TSDB_CODE_SUCCESS == code) {
960
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
961
1
                                  pCxt->pMetaCache);
962
1
  }
963
1
  return code;
964
1
}
965
966
0
static int32_t collectMetaKeyFromShowModules(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
967
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MODULES,
968
0
                                         pCxt->pMetaCache);
969
0
  return code;
970
0
}
971
972
1
static int32_t collectMetaKeyFromShowQnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
973
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_QNODES,
974
1
                                         pCxt->pMetaCache);
975
1
  if (TSDB_CODE_SUCCESS == code) {
976
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
977
1
                                  pCxt->pMetaCache);
978
1
  }
979
1
  return code;
980
1
}
981
982
1
static int32_t collectMetaKeyFromShowSnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
983
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SNODES,
984
1
                                         pCxt->pMetaCache);
985
1
  if (TSDB_CODE_SUCCESS == code) {
986
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
987
1
                                  pCxt->pMetaCache);
988
1
  }
989
1
  return code;
990
1
}
991
992
1
static int32_t collectMetaKeyFromShowAnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
993
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ANODES,
994
1
                                         pCxt->pMetaCache);
995
1
  if (TSDB_CODE_SUCCESS == code) {
996
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
997
1
                                  pCxt->pMetaCache);
998
1
  }
999
1
  return code;
1000
1
}
1001
1002
0
static int32_t collectMetaKeyFromShowAnodesFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1003
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1004
0
                                         TSDB_INS_TABLE_ANODES_FULL, pCxt->pMetaCache);
1005
0
  if (TSDB_CODE_SUCCESS == code) {
1006
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
1007
0
                                  pCxt->pMetaCache);
1008
0
  }
1009
0
  return code;
1010
0
}
1011
1012
1
static int32_t collectMetaKeyFromShowBnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1013
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_BNODES,
1014
1
                                         pCxt->pMetaCache);
1015
1
  if (TSDB_CODE_SUCCESS == code) {
1016
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
1017
1
                                  pCxt->pMetaCache);
1018
1
  }
1019
1
  return code;
1020
1
}
1021
1022
0
static int32_t collectMetaKeyFromShowBackupNodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1023
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1024
0
                                         TSDB_INS_TABLE_BACKUP_NODES, pCxt->pMetaCache);
1025
0
  if (TSDB_CODE_SUCCESS == code) {
1026
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
1027
0
                                  pCxt->pMetaCache);
1028
0
  }
1029
0
  return code;
1030
0
}
1031
1032
1
static int32_t collectMetaKeyFromShowXnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1033
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_XNODES,
1034
1
                                         pCxt->pMetaCache);
1035
1
  if (TSDB_CODE_SUCCESS == code) {
1036
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
1037
1
                                  pCxt->pMetaCache);
1038
1
  }
1039
1
  return code;
1040
1
}
1041
1042
2
static int32_t collectMetaKeyFromShowXnodeTasks(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1043
2
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1044
2
                                         TSDB_INS_TABLE_XNODE_TASKS, pCxt->pMetaCache);
1045
2
  if (TSDB_CODE_SUCCESS == code) {
1046
2
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_CM_SHOW, 0,
1047
2
                                  pCxt->pMetaCache);
1048
2
  }
1049
2
  return code;
1050
2
}
1051
2
static int32_t collectMetaKeyFromShowXnodeAgents(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1052
2
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1053
2
                                         TSDB_INS_TABLE_XNODE_AGENTS, pCxt->pMetaCache);
1054
2
  if (TSDB_CODE_SUCCESS == code) {
1055
2
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
1056
2
                                  pCxt->pMetaCache);
1057
2
  }
1058
2
  return code;
1059
2
}
1060
1
static int32_t collectMetaKeyFromShowXnodeJobs(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1061
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_XNODE_JOBS,
1062
1
                                         pCxt->pMetaCache);
1063
1
  if (TSDB_CODE_SUCCESS == code) {
1064
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_CM_SHOW, 0,
1065
1
                                  pCxt->pMetaCache);
1066
1
  }
1067
1
  return code;
1068
1
}
1069
1070
0
static int32_t collectMetaKeyFromShowVirtualTablesReferencing(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1071
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1072
0
                                         TSDB_INS_TABLE_VIRTUAL_TABLES_REFERENCING, pCxt->pMetaCache);
1073
0
  if (TSDB_CODE_SUCCESS == code) {
1074
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_NODES_SHOW, 0,
1075
0
                                  pCxt->pMetaCache);
1076
0
  }
1077
0
  return code;
1078
0
}
1079
1080
0
static int32_t collectMetaKeyFromShowArbGroups(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1081
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ARBGROUPS,
1082
0
                                         pCxt->pMetaCache);
1083
0
  return code;
1084
0
}
1085
1086
0
static int32_t collectMetaKeyFromShowCluster(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1087
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CLUSTER,
1088
0
                                         pCxt->pMetaCache);
1089
0
  if (TSDB_CODE_SUCCESS == code) {
1090
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_CLUSTER_SHOW, 0,
1091
0
                                  pCxt->pMetaCache);
1092
0
  }
1093
0
  return code;
1094
0
}
1095
1096
0
static int32_t collectMetaKeyFromShowSecurityPolicies(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1097
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SECURITY_POLICIES,
1098
0
                                   pCxt->pMetaCache);
1099
0
  if (TSDB_CODE_SUCCESS == code) {
1100
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_SECURITY_POLICIES_SHOW, 0,
1101
0
                                  pCxt->pMetaCache);
1102
0
  }
1103
0
  return code;
1104
0
}
1105
1106
0
static int32_t collectMetaKeyFromShowDatabases(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1107
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DATABASES,
1108
0
                                 pCxt->pMetaCache);
1109
0
}
1110
1111
0
static int32_t collectMetaKeyFromShowFunctions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1112
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_FUNCTIONS,
1113
0
                                         pCxt->pMetaCache);
1114
0
  if (TSDB_CODE_SUCCESS == code) {
1115
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_FUNC_SHOW, 0,
1116
0
                                  pCxt->pMetaCache);
1117
0
  }
1118
0
  return code;
1119
0
}
1120
1121
0
static int32_t collectMetaKeyFromShowIndexes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1122
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_INDEXES,
1123
0
                                         pCxt->pMetaCache);
1124
0
  if (TSDB_CODE_SUCCESS == code) {
1125
0
    code =
1126
0
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
1127
0
                               NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1128
0
  }
1129
0
  return code;
1130
0
}
1131
1132
31
static int32_t collectMetaKeyFromShowStables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1133
31
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_STABLES,
1134
31
                                         pCxt->pMetaCache);
1135
31
  if (TSDB_CODE_SUCCESS == code) {
1136
31
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1137
31
  }
1138
31
  if (TSDB_CODE_SUCCESS == code) {
1139
31
    code =
1140
31
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
1141
31
                               NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1142
31
  }
1143
31
  return code;
1144
31
}
1145
1146
0
static int32_t collectMetaKeyFromShowStreams(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1147
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_STREAMS,
1148
0
                                         pCxt->pMetaCache);
1149
0
  if (TSDB_CODE_SUCCESS == code) {
1150
0
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1151
0
  }
1152
0
  if (TSDB_CODE_SUCCESS == code) {
1153
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1154
0
  }
1155
0
  if (TSDB_CODE_SUCCESS == code) {
1156
0
    code =
1157
0
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
1158
0
                               NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1159
0
  }
1160
0
  return code;
1161
0
}
1162
1163
64
static int32_t collectMetaKeyFromShowTables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1164
64
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TABLES,
1165
64
                                         pCxt->pMetaCache);
1166
64
  if (TSDB_CODE_SUCCESS == code) {
1167
64
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1168
64
  }
1169
1170
64
  if (TSDB_CODE_SUCCESS == code) {
1171
64
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1172
64
  }
1173
64
  if (TSDB_CODE_SUCCESS == code) {
1174
64
    code =
1175
64
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
1176
64
                               NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1177
64
  }
1178
64
  return code;
1179
64
}
1180
1181
0
static int32_t collectMetaKeyFromShowFilesets(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1182
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_FILESETS,
1183
0
                                         pCxt->pMetaCache);
1184
0
  if (TSDB_CODE_SUCCESS == code) {
1185
0
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1186
0
  }
1187
0
  if (TSDB_CODE_SUCCESS == code) {
1188
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1189
0
  }
1190
0
  if (TSDB_CODE_SUCCESS == code) {
1191
0
    code =
1192
0
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
1193
0
                               NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1194
0
  }
1195
0
  return code;
1196
0
}
1197
1198
0
static int32_t collectMetaKeyFromShowTags(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1199
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TAGS,
1200
0
                                         pCxt->pMetaCache);
1201
0
  if (TSDB_CODE_SUCCESS == code) {
1202
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal,
1203
0
                                   ((SValueNode*)pStmt->pTbName)->literal, pCxt->pMetaCache);
1204
0
  }
1205
0
  if (TSDB_CODE_SUCCESS == code) {
1206
0
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1207
0
  }
1208
0
  if (TSDB_CODE_SUCCESS == code && NULL != pStmt->pTbName) {
1209
0
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal,
1210
0
                                     ((SValueNode*)pStmt->pTbName)->literal, pCxt->pMetaCache);
1211
0
  }
1212
0
  return code;
1213
0
}
1214
1215
0
static int32_t collectMetaKeyFromShowStableTags(SCollectMetaKeyCxt* pCxt, SShowTableTagsStmt* pStmt) {
1216
0
  return collectMetaKeyFromRealTableImpl(pCxt, ((SValueNode*)pStmt->pDbName)->literal,
1217
0
                                         ((SValueNode*)pStmt->pTbName)->literal, PRIV_TBL_SELECT, PRIV_OBJ_TBL);
1218
0
}
1219
1220
0
static int32_t collectMetaKeyFromShowUsers(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1221
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS,
1222
0
                                         pCxt->pMetaCache);
1223
0
  if (TSDB_CODE_SUCCESS == code) {
1224
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_USER_SHOW, 0,
1225
0
                                  pCxt->pMetaCache);
1226
0
  }
1227
0
  return code;
1228
0
}
1229
1230
0
static int32_t collectMetaKeyFromShowUsersFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1231
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS_FULL,
1232
0
                                         pCxt->pMetaCache);
1233
0
  if (TSDB_CODE_SUCCESS == code) {
1234
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_USER_SHOW, 0,
1235
0
                                  pCxt->pMetaCache);
1236
0
  }
1237
0
  return code;
1238
0
}
1239
1240
1
static int32_t collectMetaKeyFromShowRoles(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1241
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ROLES,
1242
1
                                         pCxt->pMetaCache);
1243
1
  if (TSDB_CODE_SUCCESS == code) {
1244
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_ROLE_SHOW, 0,
1245
1
                                  pCxt->pMetaCache);
1246
1
  }
1247
1
  return code;
1248
1
}
1249
1250
1
static int32_t collectMetaKeyFromShowLicence(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1251
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_LICENCES,
1252
1
                                         pCxt->pMetaCache);
1253
1
  if (TSDB_CODE_SUCCESS == code) {
1254
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_GRANTS_SHOW, 0,
1255
1
                                  pCxt->pMetaCache);
1256
1
  }
1257
1
  return code;
1258
1
}
1259
1260
0
static int32_t collectMetaKeyFromShowVgroups(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1261
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VGROUPS,
1262
0
                                         pCxt->pMetaCache);
1263
0
  if (TSDB_CODE_SUCCESS == code) {
1264
    // just to verify whether the database exists
1265
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1266
0
  }
1267
0
  return code;
1268
0
}
1269
1270
0
static int32_t collectMetaKeyFromShowTopics(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1271
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TOPICS,
1272
0
                                 pCxt->pMetaCache);
1273
0
}
1274
1275
0
static int32_t collectMetaKeyFromShowConsumers(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1276
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB,
1277
0
                                         TSDB_PERFS_TABLE_CONSUMERS, pCxt->pMetaCache);
1278
0
  if (TSDB_CODE_SUCCESS == code) {
1279
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_CONSUMER_SHOW, 0,
1280
0
                                  pCxt->pMetaCache);
1281
0
  }
1282
0
  return code;
1283
0
}
1284
1285
0
static int32_t collectMetaKeyFromShowConnections(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1286
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB,
1287
0
                                         TSDB_PERFS_TABLE_CONNECTIONS, pCxt->pMetaCache);
1288
0
  if (TSDB_CODE_SUCCESS == code) {
1289
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_CONN_SHOW, 0,
1290
0
                                  pCxt->pMetaCache);
1291
0
  }
1292
0
  return code;
1293
0
}
1294
1295
1
static int32_t collectMetaKeyFromShowQueries(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1296
1
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_QUERIES,
1297
1
                                         pCxt->pMetaCache);
1298
1
  if (TSDB_CODE_SUCCESS == code) {
1299
1
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_QUERY_SHOW, 0,
1300
1
                                  pCxt->pMetaCache);
1301
1
  }
1302
1
  return code;
1303
1
}
1304
1305
0
static int32_t collectMetaKeyFromShowVariables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1306
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CONFIGS,
1307
0
                                 pCxt->pMetaCache);
1308
0
}
1309
1310
0
static int32_t collectMetaKeyFromShowDnodeVariables(SCollectMetaKeyCxt* pCxt, SShowDnodeVariablesStmt* pStmt) {
1311
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1312
0
                                         TSDB_INS_TABLE_DNODE_VARIABLES, pCxt->pMetaCache);
1313
0
  if (TSDB_CODE_SUCCESS == code) {
1314
0
    code = reserveDnodeRequiredInCache(pCxt->pMetaCache);
1315
0
  }
1316
0
  return code;
1317
0
}
1318
1319
1
static int32_t collectMetaKeyFromShowVnodes(SCollectMetaKeyCxt* pCxt, SShowVnodesStmt* pStmt) {
1320
1
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VNODES,
1321
1
                                 pCxt->pMetaCache);
1322
1
}
1323
1324
0
static int32_t collectMetaKeyFromShowUserPrivileges(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1325
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1326
0
                                         TSDB_INS_TABLE_USER_PRIVILEGES, pCxt->pMetaCache);
1327
0
  if (TSDB_CODE_SUCCESS == code) {
1328
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_SHOW_PRIVILEGES, 0,
1329
0
                                  pCxt->pMetaCache);
1330
0
  }
1331
0
  return code;
1332
0
}
1333
1334
0
static int32_t collectMetaKeyFromShowRolePrivileges(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1335
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1336
0
                                         TSDB_INS_TABLE_ROLE_PRIVILEGES, pCxt->pMetaCache);
1337
0
  if (TSDB_CODE_SUCCESS == code) {
1338
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_SHOW_PRIVILEGES, 0,
1339
0
                                  pCxt->pMetaCache);
1340
0
  }
1341
0
  return code;
1342
0
}
1343
1344
0
static int32_t collectMetaKeyFromShowRoleColPrivileges(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1345
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1346
0
                                         TSDB_INS_TABLE_ROLE_COL_PRIVILEGES, pCxt->pMetaCache);
1347
0
  if (TSDB_CODE_SUCCESS == code) {
1348
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_SHOW_PRIVILEGES, 0,
1349
0
                                  pCxt->pMetaCache);
1350
0
  }
1351
0
  return code;
1352
0
}
1353
1354
0
static int32_t collectMetaKeyFromShowViews(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1355
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VIEWS,
1356
0
                                         pCxt->pMetaCache);
1357
0
  if (TSDB_CODE_SUCCESS == code) {
1358
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1359
0
  }
1360
0
  if (TSDB_CODE_SUCCESS == code) {
1361
0
    code =
1362
0
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
1363
0
                               NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1364
0
  }
1365
0
  return code;
1366
0
}
1367
1368
0
static int32_t collectMetaKeyFromShowCompacts(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1369
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_COMPACTS,
1370
0
                                         pCxt->pMetaCache);
1371
0
  return code;
1372
0
}
1373
1374
0
static int32_t collectMetaKeyFromShowScans(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1375
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SCANS,
1376
0
                                         pCxt->pMetaCache);
1377
0
  return code;
1378
0
}
1379
1380
0
static int32_t collectMetaKeyFromShowCompactDetails(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1381
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1382
0
                                         TSDB_INS_TABLE_COMPACT_DETAILS, pCxt->pMetaCache);
1383
0
  return code;
1384
0
}
1385
1386
0
static int32_t collectMetaKeyFromShowScanDetails(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1387
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1388
0
                                         TSDB_INS_TABLE_SCAN_DETAILS, pCxt->pMetaCache);
1389
0
  return code;
1390
0
}
1391
1392
0
static int32_t collectMetaKeyFromShowSsMigrates(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1393
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SSMIGRATES,
1394
0
                                         pCxt->pMetaCache);
1395
0
  return code;
1396
0
}
1397
1398
0
static int32_t collectMetaKeyFromShowTokens(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1399
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TOKENS,
1400
0
                                         pCxt->pMetaCache);
1401
0
  return code;
1402
0
}
1403
1404
0
static int32_t collectMetaKeyFromShowTransactionDetails(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1405
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1406
0
                                         TSDB_INS_TABLE_TRANSACTION_DETAILS, pCxt->pMetaCache);
1407
0
  if (TSDB_CODE_SUCCESS == code) {
1408
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_TRANS_SHOW, 0,
1409
0
                                  pCxt->pMetaCache);
1410
0
  }
1411
0
  return code;
1412
0
}
1413
1414
0
static int32_t collectMetaKeyFromShowGrantsFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1415
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1416
0
                                         TSDB_INS_TABLE_GRANTS_FULL, pCxt->pMetaCache);
1417
0
  if (TSDB_CODE_SUCCESS == code) {
1418
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_GRANTS_SHOW, 0,
1419
0
                                  pCxt->pMetaCache);
1420
0
  }
1421
0
  return code;
1422
0
}
1423
1424
0
static int32_t collectMetaKeyFromShowGrantsLogs(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1425
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1426
0
                                         TSDB_INS_TABLE_GRANTS_LOGS, pCxt->pMetaCache);
1427
0
  if (TSDB_CODE_SUCCESS == code) {
1428
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_GRANTS_SHOW, 0,
1429
0
                                  pCxt->pMetaCache);
1430
0
  }
1431
0
  return code;
1432
0
}
1433
1434
0
static int32_t collectMetaKeyFromShowClusterMachines(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1435
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MACHINES,
1436
0
                                         pCxt->pMetaCache);
1437
0
  if (TSDB_CODE_SUCCESS == code) {
1438
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_GRANTS_SHOW, 0,
1439
0
                                  pCxt->pMetaCache);
1440
0
  }
1441
0
  return code;
1442
0
}
1443
1444
0
static int32_t collectMetaKeyFromShowEncryptions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1445
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ENCRYPTIONS,
1446
0
                                 pCxt->pMetaCache);
1447
0
}
1448
1449
0
static int32_t collectMetaKeyFromShowEncryptAlgorithms(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1450
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1451
0
                                         TSDB_INS_TABLE_ENCRYPT_ALGORITHMS, pCxt->pMetaCache);
1452
0
  return code;
1453
0
}
1454
1455
0
static int32_t collectMetaKeyFromShowEncryptStatus(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1456
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1457
0
                                         TSDB_INS_TABLE_ENCRYPT_STATUS, pCxt->pMetaCache);
1458
0
  return code;
1459
0
}
1460
1461
0
static int32_t collectMetaKeyFromShowMounts(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1462
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MOUNTS,
1463
0
                                         pCxt->pMetaCache);
1464
0
  if (TSDB_CODE_SUCCESS == code) {
1465
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_MOUNT_SHOW, 0,
1466
0
                                  pCxt->pMetaCache);
1467
0
  }
1468
0
  return code;
1469
0
}
1470
1471
0
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
1472
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1473
0
  if (TSDB_CODE_SUCCESS == code) {
1474
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
1475
0
                                  PRIV_CM_SHOW_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache);
1476
0
  }
1477
0
  return code;
1478
0
}
1479
1480
0
static int32_t collectMetaKeyFromShowCreateTable(SCollectMetaKeyCxt* pCxt, SShowCreateTableStmt* pStmt) {
1481
0
  SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
1482
0
  tstrncpy(name.dbname, pStmt->dbName, TSDB_DB_NAME_LEN);
1483
0
  tstrncpy(name.tname, pStmt->tableName, TSDB_TABLE_NAME_LEN);
1484
0
  int32_t code = catalogRemoveTableMeta(pCxt->pParseCxt->pCatalog, &name);
1485
0
  if (TSDB_CODE_SUCCESS == code) {
1486
0
    code = reserveTableCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
1487
0
  }
1488
0
  if (TSDB_CODE_SUCCESS == code) {
1489
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1490
0
  }
1491
  // if (TSDB_CODE_SUCCESS == code) {
1492
  //   code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
1493
  //                                 AUTH_TYPE_READ, pCxt->pMetaCache);
1494
  // }
1495
0
  if (TSDB_CODE_SUCCESS == code) {
1496
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
1497
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1498
0
  }
1499
0
  if (TSDB_CODE_SUCCESS == code) {
1500
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
1501
0
                                  PRIV_CM_SHOW_CREATE, PRIV_OBJ_TBL, pCxt->pMetaCache);
1502
0
  }
1503
0
  return code;
1504
0
}
1505
1506
0
static int32_t collectMetaKeyFromShowCreateView(SCollectMetaKeyCxt* pCxt, SShowCreateViewStmt* pStmt) {
1507
0
  SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
1508
0
  tstrncpy(name.dbname, pStmt->dbName, TSDB_DB_NAME_LEN);
1509
0
  tstrncpy(name.tname, pStmt->viewName, TSDB_TABLE_NAME_LEN);
1510
0
  char dbFName[TSDB_DB_FNAME_LEN];
1511
0
  (void)tNameGetFullDbName(&name, dbFName);
1512
0
  int32_t code = catalogRemoveViewMeta(pCxt->pParseCxt->pCatalog, dbFName, 0, pStmt->viewName, 0);
1513
0
  if (TSDB_CODE_SUCCESS == code) {
1514
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1515
0
  }
1516
0
  if (TSDB_CODE_SUCCESS == code) {
1517
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
1518
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1519
0
  }
1520
0
  if (TSDB_CODE_SUCCESS == code) {
1521
0
    code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName,
1522
0
                                      PRIV_CM_SHOW_CREATE, PRIV_OBJ_VIEW, pCxt->pMetaCache);
1523
0
  }
1524
0
  if (TSDB_CODE_SUCCESS == code) {
1525
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache);
1526
0
  }
1527
0
  pCxt->pMetaCache->forceFetchViewMeta = true;
1528
0
  return code;
1529
0
}
1530
1531
0
static int32_t collectMetaKeyFromShowCreateRsma(SCollectMetaKeyCxt* pCxt, SShowCreateRsmaStmt* pStmt) {
1532
0
  int32_t code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
1533
0
                                        PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1534
0
  if (TSDB_CODE_SUCCESS == code) {
1535
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1536
0
  }
1537
0
  if (TSDB_CODE_SUCCESS == code) {
1538
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->rsmaName,
1539
0
                                  PRIV_CM_SHOW_CREATE, PRIV_OBJ_RSMA, pCxt->pMetaCache);
1540
0
  }
1541
0
  return code;
1542
0
}
1543
1544
0
static int32_t collectMetaKeyFromShowCreateStream(SCollectMetaKeyCxt* pCxt, SShowCreateStreamStmt* pStmt) {
1545
0
  int32_t code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
1546
0
                                        PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1547
0
  if (TSDB_CODE_SUCCESS == code) {
1548
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->streamName,
1549
0
                                  PRIV_CM_SHOW_CREATE, PRIV_OBJ_STREAM, pCxt->pMetaCache);
1550
0
  }
1551
0
  return code;
1552
0
}
1553
1554
0
static int32_t collectMetaKeyFromShowApps(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1555
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_APPS,
1556
0
                                         pCxt->pMetaCache);
1557
0
  if (TSDB_CODE_SUCCESS == code) {
1558
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_APPS_SHOW, 0,
1559
0
                                  pCxt->pMetaCache);
1560
0
  }
1561
0
  return code;
1562
0
}
1563
1564
0
static int32_t collectMetaKeyFromShowInstances(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1565
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_INSTANCES,
1566
0
                                 pCxt->pMetaCache);
1567
0
}
1568
1569
0
static int32_t collectMetaKeyFromShowTransactions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1570
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_TRANS,
1571
0
                                         pCxt->pMetaCache);
1572
0
  if (TSDB_CODE_SUCCESS == code) {
1573
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, PRIV_TRANS_SHOW, 0,
1574
0
                                  pCxt->pMetaCache);
1575
0
  }
1576
0
  return code;
1577
0
}
1578
1579
0
static int32_t collectMetaKeyFromDelete(SCollectMetaKeyCxt* pCxt, SDeleteStmt* pStmt) {
1580
0
  STableNode* pTable = (STableNode*)pStmt->pFromTable;
1581
0
  return collectMetaKeyFromRealTableImpl(pCxt, pTable->dbName, pTable->tableName, PRIV_TBL_DELETE, PRIV_OBJ_TBL);
1582
0
}
1583
1584
0
static int32_t collectMetaKeyFromInsert(SCollectMetaKeyCxt* pCxt, SInsertStmt* pStmt) {
1585
0
  STableNode* pTable = (STableNode*)pStmt->pTable;
1586
0
  int32_t     code =
1587
0
      collectMetaKeyFromRealTableImpl(pCxt, pTable->dbName, pTable->tableName, PRIV_TBL_INSERT, PRIV_OBJ_TBL);
1588
0
  if (TSDB_CODE_SUCCESS == code) {
1589
0
    code = collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
1590
0
  }
1591
0
  return code;
1592
0
}
1593
1594
0
static int32_t collectMetaKeyFromShowBlockDist(SCollectMetaKeyCxt* pCxt, SShowTableDistributedStmt* pStmt) {
1595
0
  SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
1596
0
  tstrncpy(name.dbname, pStmt->dbName, TSDB_DB_NAME_LEN);
1597
0
  tstrncpy(name.tname, pStmt->tableName, TSDB_TABLE_NAME_LEN);
1598
0
  int32_t code = catalogRemoveTableMeta(pCxt->pParseCxt->pCatalog, &name);
1599
0
  if (TSDB_CODE_SUCCESS == code) {
1600
0
    code = collectMetaKeyFromRealTableImpl(pCxt, pStmt->dbName, pStmt->tableName, PRIV_TBL_SELECT, PRIV_OBJ_TBL);
1601
0
  }
1602
0
  return code;
1603
0
}
1604
0
static int32_t collectMetaKeyFromShowValidateVtable(SCollectMetaKeyCxt* pCxt, SShowValidateVirtualTable* pStmt) {
1605
  // Collect database information
1606
0
  int32_t code = 0;
1607
1608
0
  code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1609
0
                                 TSDB_INS_TABLE_VIRTUAL_TABLES_REFERENCING, pCxt->pMetaCache);
1610
0
  if (TSDB_CODE_SUCCESS == code && pStmt->tableName[0] != 0) {
1611
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
1612
0
  }
1613
1614
0
  if (TSDB_CODE_SUCCESS == code) {
1615
0
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1616
0
  }
1617
0
  if (TSDB_CODE_SUCCESS == code && pStmt->tableName[0] != 0) {
1618
0
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
1619
0
  }
1620
0
  return code;
1621
0
}
1622
1623
0
static int32_t collectMetaKeyFromShowSubscriptions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1624
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SUBSCRIPTIONS,
1625
0
                                 pCxt->pMetaCache);
1626
0
}
1627
1628
0
static int32_t collectMetaKeyFromCompactDatabase(SCollectMetaKeyCxt* pCxt, SCompactDatabaseStmt* pStmt) {
1629
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1630
0
  if (TSDB_CODE_SUCCESS == code) {
1631
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_COMPACT,
1632
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1633
0
  }
1634
0
  return code;
1635
0
}
1636
1637
0
static int32_t collectMetaKeyFromRollupDatabase(SCollectMetaKeyCxt* pCxt, SRollupDatabaseStmt* pStmt) {
1638
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1639
0
  if (TSDB_CODE_SUCCESS == code) {
1640
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_ROLLUP,
1641
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1642
0
  }
1643
0
  return code;
1644
0
}
1645
1646
0
static int32_t collectMetaKeyFromScanDatabase(SCollectMetaKeyCxt* pCxt, SScanDatabaseStmt* pStmt) {
1647
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1648
0
  if (TSDB_CODE_SUCCESS == code) {
1649
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_SCAN,
1650
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1651
0
  }
1652
0
  return code;
1653
0
}
1654
1655
0
static int32_t collectMetaKeyFromSsmigrateDatabase(SCollectMetaKeyCxt* pCxt, SSsMigrateDatabaseStmt* pStmt) {
1656
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1657
0
  if (TSDB_CODE_SUCCESS == code) {
1658
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
1659
0
                                  PRIV_DB_SSMIGRATE, PRIV_OBJ_DB, pCxt->pMetaCache);
1660
0
  }
1661
0
  return code;
1662
0
}
1663
1664
0
static int32_t collectMetaKeyFromTrimDatabase(SCollectMetaKeyCxt* pCxt, STrimDatabaseStmt* pStmt) {
1665
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1666
0
  if (TSDB_CODE_SUCCESS == code) {
1667
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_TRIM,
1668
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1669
0
  }
1670
0
  return code;
1671
0
}
1672
1673
0
static int32_t collectMetaKeyFromCompactVgroups(SCollectMetaKeyCxt* pCxt, SCompactVgroupsStmt* pStmt) {
1674
0
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1675
0
}
1676
1677
0
static int32_t collectMetaKeyFromRollupVgroups(SCollectMetaKeyCxt* pCxt, SRollupVgroupsStmt* pStmt) {
1678
0
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1679
0
}
1680
1681
0
static int32_t collectMetaKeyFromScanVgroups(SCollectMetaKeyCxt* pCxt, SScanVgroupsStmt* pStmt) {
1682
0
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1683
0
}
1684
1685
0
static int32_t collectMetaKeyFromGrantImpl(SCollectMetaKeyCxt* pCxt, SGrantStmt* pStmt, bool grant) {
1686
0
  int32_t code = TSDB_CODE_SUCCESS;
1687
1688
0
  if (pStmt->optrType == TSDB_ALTER_ROLE_ROLE) {
1689
0
    if (pStmt->roleName[0] == 'S' && pStmt->roleName[1] == 'Y' && pStmt->roleName[2] == 'S') {
1690
0
      if (strcmp(pStmt->roleName, TSDB_ROLE_SYSDBA) == 0) {
1691
0
        return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL,
1692
0
                                      grant ? PRIV_GRANT_SYSDBA : PRIV_REVOKE_SYSDBA, 0, pCxt->pMetaCache);
1693
0
      }
1694
0
      if (strcmp(pStmt->roleName, TSDB_ROLE_SYSSEC) == 0) {
1695
0
        return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL,
1696
0
                                      grant ? PRIV_GRANT_SYSSEC : PRIV_REVOKE_SYSSEC, 0, pCxt->pMetaCache);
1697
0
      }
1698
0
      if (strcmp(pStmt->roleName, TSDB_ROLE_SYSAUDIT) == 0) {
1699
0
        return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL,
1700
0
                                      grant ? PRIV_GRANT_SYSAUDIT : PRIV_REVOKE_SYSAUDIT, 0, pCxt->pMetaCache);
1701
0
      }
1702
0
    }
1703
0
  } else if (TSDB_ALTER_ROLE_PRIVILEGES == pStmt->optrType) {
1704
0
    bool isRealObj = IS_SPECIFIC_OBJ(pStmt->objName);
1705
0
    if (isRealObj) {
1706
0
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->objName, pCxt->pMetaCache);
1707
0
    }
1708
0
    if (TSDB_CODE_SUCCESS == code) {
1709
0
      if (isRealObj && IS_SPECIFIC_OBJ(pStmt->tabName)) {
1710
0
        if (PRIV_OBJ_TBL == pStmt->privileges.objType) {
1711
0
          code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->objName, pStmt->tabName, pCxt->pMetaCache);
1712
0
        } else if (PRIV_OBJ_VIEW == pStmt->privileges.objType || PRIV_OBJ_NONE == pStmt->privileges.objType) {
1713
0
          code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->objName, pStmt->tabName, pCxt->pMetaCache);
1714
0
          pCxt->pMetaCache->forceFetchViewMeta = true;
1715
0
        } else {
1716
          // TODO: other object types
1717
0
        }
1718
0
      }
1719
0
    }
1720
0
  }
1721
0
  if (TSDB_CODE_SUCCESS == code) {
1722
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL,
1723
0
                                  grant ? PRIV_GRANT_PRIVILEGE : PRIV_REVOKE_PRIVILEGE, 0, pCxt->pMetaCache);
1724
0
  }
1725
1726
0
  return code;
1727
0
}
1728
1729
0
static int32_t collectMetaKeyFromGrant(SCollectMetaKeyCxt* pCxt, SGrantStmt* pStmt) {
1730
0
  return collectMetaKeyFromGrantImpl(pCxt, pStmt, true);
1731
0
}
1732
1733
0
static int32_t collectMetaKeyFromRevoke(SCollectMetaKeyCxt* pCxt, SRevokeStmt* pStmt) {
1734
0
  return collectMetaKeyFromGrantImpl(pCxt, (SGrantStmt*)pStmt, false);
1735
0
}
1736
1737
0
static int32_t collectMetaKeyFromCreateViewStmt(SCollectMetaKeyCxt* pCxt, SCreateViewStmt* pStmt) {
1738
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache);
1739
1740
0
  if (TSDB_CODE_SUCCESS == code) {
1741
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
1742
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1743
0
  }
1744
0
  if (TSDB_CODE_SUCCESS == code) {
1745
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1746
0
  }
1747
1748
0
  if (TSDB_CODE_SUCCESS == code) {
1749
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
1750
0
                                  PRIV_VIEW_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache);
1751
0
  }
1752
0
  if (TSDB_CODE_SUCCESS == code && pStmt->orReplace) {
1753
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName,
1754
0
                                  PRIV_CM_ALTER, PRIV_OBJ_VIEW, pCxt->pMetaCache);
1755
0
  }
1756
0
  if (TSDB_CODE_SUCCESS == code) {
1757
0
    if (!pStmt->pQuery ||
1758
0
        (QUERY_NODE_SELECT_STMT != nodeType(pStmt->pQuery) && QUERY_NODE_SET_OPERATOR != nodeType(pStmt->pQuery))) {
1759
0
      code = TSDB_CODE_PAR_INVALID_VIEW_QUERY;
1760
0
    } else {
1761
0
      code = collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
1762
0
    }
1763
0
  }
1764
1765
0
  return code;
1766
0
}
1767
1768
0
static int32_t collectMetaKeyFromDropViewStmt(SCollectMetaKeyCxt* pCxt, SDropViewStmt* pStmt) {
1769
0
  int32_t code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName,
1770
0
                                            pStmt->viewName, PRIV_CM_DROP, PRIV_OBJ_VIEW, pCxt->pMetaCache);
1771
0
  pCxt->pMetaCache->forceFetchViewMeta = true;
1772
0
  if (TSDB_CODE_SUCCESS == code) {
1773
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
1774
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1775
0
  }
1776
0
  if (TSDB_CODE_SUCCESS == code) {
1777
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1778
0
  }
1779
0
  if (TSDB_CODE_SUCCESS == code) {
1780
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache);
1781
0
  }
1782
0
  return code;
1783
0
}
1784
1785
0
static int32_t collectMetaKeyFromCreateTSMAStmt(SCollectMetaKeyCxt* pCxt, SCreateTSMAStmt* pStmt) {
1786
0
  int32_t code;
1787
0
  if (pStmt->pOptions->recursiveTsma) {
1788
    // if creating recursive tsma, the tablename is tsmaName
1789
0
    code = reserveTSMAInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
1790
0
    if (TSDB_CODE_SUCCESS == code) {
1791
0
      char dstTbName[TSDB_TABLE_NAME_LEN] = {0};
1792
0
      snprintf(dstTbName, TSDB_TABLE_NAME_LEN, "%s" TSMA_RES_STB_POSTFIX, pStmt->tableName);
1793
0
      code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, dstTbName, pCxt->pMetaCache);
1794
0
      if (TSDB_CODE_SUCCESS == code) {
1795
0
        code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, dstTbName, pCxt->pMetaCache);
1796
0
      }
1797
0
    }
1798
0
  } else {
1799
0
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
1800
0
    if (TSDB_CODE_SUCCESS == code) {
1801
0
      code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
1802
0
    }
1803
0
    if (TSDB_CODE_SUCCESS == code) {
1804
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
1805
0
                                    PRIV_TBL_SELECT, PRIV_OBJ_TBL, pCxt->pMetaCache);
1806
0
    }
1807
0
    if (TSDB_CODE_SUCCESS == code) {
1808
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
1809
0
                                    PRIV_STREAM_CREATE, PRIV_OBJ_DB, pCxt->pMetaCache);
1810
0
    }
1811
0
    if (TSDB_CODE_SUCCESS == code) {
1812
0
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
1813
0
                                    PRIV_TSMA_CREATE, PRIV_OBJ_TBL, pCxt->pMetaCache);
1814
0
    }
1815
0
  }
1816
0
  if (TSDB_CODE_SUCCESS == code) {
1817
0
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1818
0
  }
1819
0
  if (TSDB_CODE_SUCCESS == code) {
1820
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1821
0
  }
1822
1823
0
  if (TSDB_CODE_SUCCESS == code) {
1824
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
1825
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1826
0
  }
1827
0
  if (TSDB_CODE_SUCCESS == code) {
1828
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_TBL_CREATE,
1829
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1830
0
  }
1831
1832
0
  return code;
1833
0
}
1834
1835
0
static int32_t collectMetaKeyFromDropTSMAStmt(SCollectMetaKeyCxt* pCxt, SDropTSMAStmt* pStmt) {
1836
0
  int32_t code;
1837
0
  code = reserveTSMAInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tsmaName, pCxt->pMetaCache);
1838
0
  if (TSDB_CODE_SUCCESS == code) {
1839
0
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1840
0
  }
1841
0
  if (TSDB_CODE_SUCCESS == code) {
1842
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1843
0
  }
1844
1845
0
  if (TSDB_CODE_SUCCESS == code) {
1846
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
1847
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1848
0
  }
1849
0
  if (TSDB_CODE_SUCCESS == code) {
1850
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tsmaName,
1851
0
                                  PRIV_CM_DROP, PRIV_OBJ_TSMA, pCxt->pMetaCache);
1852
0
  }
1853
0
  return code;
1854
0
}
1855
1856
0
static int32_t collectMetaKeyFromShowUsage(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1857
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_DISK_USAGE,
1858
0
                                         pCxt->pMetaCache);
1859
0
  if (TSDB_CODE_SUCCESS == code) {
1860
0
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1861
0
  }
1862
0
  if (TSDB_CODE_SUCCESS == code) {
1863
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1864
0
  }
1865
0
  if (TSDB_CODE_SUCCESS == code) {
1866
0
    code =
1867
0
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
1868
0
                               NULL, PRIV_DB_USE, PRIV_OBJ_DB, pCxt->pMetaCache);
1869
0
  }
1870
0
  return code;
1871
0
}
1872
1873
0
static int32_t collectMetaKeyFromShowTSMASStmt(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1874
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TSMAS,
1875
0
                                 pCxt->pMetaCache);
1876
0
}
1877
1878
0
static int32_t collectMetaKeyFromCreateRsmaStmt(SCollectMetaKeyCxt* pCxt, SCreateRsmaStmt* pStmt) {
1879
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
1880
0
  if (TSDB_CODE_SUCCESS == code) {
1881
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1882
0
  }
1883
0
  if (TSDB_CODE_SUCCESS == code) {
1884
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
1885
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1886
0
  }
1887
0
  if (TSDB_CODE_SUCCESS == code) {
1888
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
1889
0
                                  PRIV_TBL_SELECT, PRIV_OBJ_TBL, pCxt->pMetaCache);
1890
0
  }
1891
0
  if (TSDB_CODE_SUCCESS == code) {
1892
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
1893
0
                                  PRIV_TBL_INSERT, PRIV_OBJ_TBL, pCxt->pMetaCache);
1894
0
  }
1895
0
  if (TSDB_CODE_SUCCESS == code) {
1896
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
1897
0
                                  PRIV_RSMA_CREATE, PRIV_OBJ_TBL, pCxt->pMetaCache);
1898
0
  }
1899
0
  return code;
1900
0
}
1901
1902
0
static int32_t collectMetaKeyFromDropRsmaStmt(SCollectMetaKeyCxt* pCxt, SDropRsmaStmt* pStmt) {
1903
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1904
0
  if (TSDB_CODE_SUCCESS == code) {
1905
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, PRIV_DB_USE,
1906
0
                                  PRIV_OBJ_DB, pCxt->pMetaCache);
1907
0
  }
1908
0
  if (TSDB_CODE_SUCCESS == code) {
1909
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->rsmaName,
1910
0
                                  PRIV_CM_DROP, PRIV_OBJ_RSMA, pCxt->pMetaCache);
1911
0
  }
1912
0
  return code;
1913
0
}
1914
1915
0
static int32_t collectMetaKeyFromAlterRsmaStmt(SCollectMetaKeyCxt* pCxt, SAlterRsmaStmt* pStmt) {
1916
0
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1917
0
  if (TSDB_CODE_SUCCESS == code) {
1918
0
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->rsmaName,
1919
0
                                  PRIV_CM_ALTER, PRIV_OBJ_RSMA, pCxt->pMetaCache);
1920
0
  }
1921
0
  return code;
1922
0
}
1923
1924
0
static int32_t collectMetaKeyFromShowRsmasStmt(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1925
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_RSMAS,
1926
0
                                 pCxt->pMetaCache);
1927
0
}
1928
1929
0
static int32_t collectMetaKeyFromShowRetentionsStmt(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1930
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_RETENTIONS,
1931
0
                                 pCxt->pMetaCache);
1932
0
}
1933
1934
0
static int32_t collectMetaKeyFromShowRetentionDetailsStmt(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1935
0
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_RETENTION_DETAILS,
1936
0
                                 pCxt->pMetaCache);
1937
0
}
1938
1939
0
static int32_t collectMetaKeyFromShowAlive(SCollectMetaKeyCxt* pCxt, SShowAliveStmt* pStmt) {
1940
0
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VGROUPS,
1941
0
                                         pCxt->pMetaCache);
1942
0
  if (TSDB_CODE_SUCCESS == code && pStmt->dbName[0]) {
1943
    // just to verify whether the database exists
1944
0
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
1945
0
  }
1946
0
  return code;
1947
0
}
1948
1949
0
static int32_t collectMetaKeyFromAlterLocalStmt(SCollectMetaKeyCxt* pCxt, SAlterLocalStmt* pStmt) {
1950
0
  if ('\0' == pStmt->value[0]) {
1951
0
    char* p = strchr(pStmt->config, ' ');
1952
0
    if (NULL != p) {
1953
0
      *p = 0;
1954
0
      tstrncpy(pStmt->value, p + 1, sizeof(pStmt->value));
1955
0
    }
1956
0
  }
1957
0
  int32_t privType = cfgGetPrivType(tsCfg, pStmt->config, 0);
1958
0
  return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, privType, 0,
1959
0
                                pCxt->pMetaCache);
1960
0
  return TSDB_CODE_SUCCESS;
1961
0
}
1962
1963
0
EPrivType getAlterUserPrivType(const char* pCurrentUser, const SAlterUserStmt* pStmt) {
1964
0
  EPrivType     privType = PRIV_USER_ALTER;
1965
0
  SUserOptions* pOptions = pStmt->pUserOptions;
1966
0
  if ((pOptions->hasPassword) &&
1967
0
      !(pOptions->hasTotpseed || pOptions->hasEnable || pOptions->hasSysinfo || pOptions->hasIsImport ||
1968
0
        pOptions->hasChangepass || pOptions->hasCreatedb || pOptions->hasSessionPerUser || pOptions->hasConnectTime ||
1969
0
        pOptions->hasConnectIdleTime || pOptions->hasCallPerSession || pOptions->hasVnodePerCall ||
1970
0
        pOptions->hasFailedLoginAttempts || pOptions->hasPasswordLifeTime || pOptions->hasPasswordReuseTime ||
1971
0
        pOptions->hasPasswordReuseMax || pOptions->hasPasswordLockTime || pOptions->hasPasswordGraceTime ||
1972
0
        pOptions->hasInactiveAccountTime || pOptions->hasAllowTokenNum || pOptions->pSecurityLevels)) {
1973
0
    if (pCurrentUser && strncmp(pCurrentUser, pStmt->userName, TSDB_USER_LEN) == 0) {
1974
0
      privType = PRIV_PASS_ALTER_SELF;
1975
0
    } else {
1976
0
      privType = PRIV_PASS_ALTER;
1977
0
    }
1978
0
  }
1979
0
  return privType;
1980
0
}
1981
1982
0
static int32_t collectMetaKeyFromAlterUserStmt(SCollectMetaKeyCxt* pCxt, SAlterUserStmt* pStmt) {
1983
0
  EPrivType privType = getAlterUserPrivType(pCxt->pParseCxt->pUser, pStmt);
1984
0
  return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, privType, 0,
1985
0
                                pCxt->pMetaCache);
1986
0
}
1987
1988
71
static int32_t collectMetaKeyFromSysPrivStmt(SCollectMetaKeyCxt* pCxt, EPrivType privType) {
1989
71
  return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, NULL, NULL, privType, 0,
1990
71
                                pCxt->pMetaCache);
1991
71
}
1992
1993
8.65k
static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
1994
8.65k
  int32_t code = 0;
1995
8.65k
  SNode*  pOrigStmt = pCxt->pStmt;
1996
8.65k
  pCxt->pStmt = pStmt;
1997
1998
8.65k
  switch (nodeType(pStmt)) {
1999
0
    case QUERY_NODE_SET_OPERATOR:
2000
0
      code = collectMetaKeyFromSetOperator(pCxt, (SSetOperator*)pStmt);
2001
0
      break;
2002
8.34k
    case QUERY_NODE_SELECT_STMT:
2003
8.34k
      code = collectMetaKeyFromSelect(pCxt, (SSelectStmt*)pStmt);
2004
8.34k
      break;
2005
0
    case QUERY_NODE_ALTER_DATABASE_STMT:
2006
0
      code = collectMetaKeyFromAlterDatabase(pCxt, (SAlterDatabaseStmt*)pStmt);
2007
0
      break;
2008
0
    case QUERY_NODE_FLUSH_DATABASE_STMT:
2009
0
      code = collectMetaKeyFromFlushDatabase(pCxt, (SFlushDatabaseStmt*)pStmt);
2010
0
      break;
2011
0
    case QUERY_NODE_CREATE_TABLE_STMT:
2012
0
      code = collectMetaKeyFromCreateTable(pCxt, (SCreateTableStmt*)pStmt);
2013
0
      break;
2014
0
    case QUERY_NODE_CREATE_VIRTUAL_TABLE_STMT:
2015
0
      code = collectMetaKeyFromCreateVTable(pCxt, (SCreateVTableStmt*)pStmt);
2016
0
      break;
2017
0
    case QUERY_NODE_CREATE_VIRTUAL_SUBTABLE_STMT:
2018
0
      code = collectMetaKeyFromCreateVSubTable(pCxt, (SCreateVSubTableStmt*)pStmt);
2019
0
      break;
2020
0
    case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
2021
0
      code = collectMetaKeyFromCreateMultiTable(pCxt, (SCreateMultiTablesStmt*)pStmt);
2022
0
      break;
2023
0
    case QUERY_NODE_CREATE_SUBTABLE_FROM_FILE_CLAUSE:
2024
0
      code = collectMetaKeyFromCreateSubTableFromFile(pCxt, (SCreateSubTableFromFileClause*)pStmt);
2025
0
      break;
2026
0
    case QUERY_NODE_DROP_TABLE_STMT:
2027
0
      code = collectMetaKeyFromDropTable(pCxt, (SDropTableStmt*)pStmt);
2028
0
      break;
2029
0
    case QUERY_NODE_DROP_SUPER_TABLE_STMT:
2030
0
      code = collectMetaKeyFromDropStable(pCxt, (SDropSuperTableStmt*)pStmt);
2031
0
      break;
2032
0
    case QUERY_NODE_DROP_VIRTUAL_TABLE_STMT:
2033
0
      code = collectMetaKeyFromDropVtable(pCxt, (SDropVirtualTableStmt*)pStmt);
2034
0
      break;
2035
0
    case QUERY_NODE_ALTER_TABLE_STMT:
2036
0
      code = collectMetaKeyFromAlterTable(pCxt, (SAlterTableStmt*)pStmt);
2037
0
      break;
2038
0
    case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
2039
0
      code = collectMetaKeyFromAlterStable(pCxt, (SAlterTableStmt*)pStmt);
2040
0
      break;
2041
0
    case QUERY_NODE_ALTER_VIRTUAL_TABLE_STMT:
2042
0
      code = collectMetaKeyFromAlterVtable(pCxt, (SAlterTableStmt*)pStmt);
2043
0
      break;
2044
28
    case QUERY_NODE_USE_DATABASE_STMT:
2045
28
      code = collectMetaKeyFromUseDatabase(pCxt, (SUseDatabaseStmt*)pStmt);
2046
28
      break;
2047
0
    case QUERY_NODE_CREATE_INDEX_STMT:
2048
0
      code = collectMetaKeyFromCreateIndex(pCxt, (SCreateIndexStmt*)pStmt);
2049
0
      break;
2050
0
    case QUERY_NODE_DROP_INDEX_STMT:
2051
0
      code = collectMetaKeyFromDropIndex(pCxt, (SDropIndexStmt*)pStmt);
2052
0
      break;
2053
0
    case QUERY_NODE_CREATE_TOPIC_STMT:
2054
0
      code = collectMetaKeyFromCreateTopic(pCxt, (SCreateTopicStmt*)pStmt);
2055
0
      break;
2056
0
    case QUERY_NODE_EXPLAIN_STMT:
2057
0
      code = collectMetaKeyFromExplain(pCxt, (SExplainStmt*)pStmt);
2058
0
      break;
2059
100
    case QUERY_NODE_DESCRIBE_STMT:
2060
100
      code = collectMetaKeyFromDescribe(pCxt, (SDescribeStmt*)pStmt);
2061
100
      break;
2062
0
    case QUERY_NODE_COMPACT_DATABASE_STMT:
2063
0
      code = collectMetaKeyFromCompactDatabase(pCxt, (SCompactDatabaseStmt*)pStmt);
2064
0
      break;
2065
0
    case QUERY_NODE_ROLLUP_DATABASE_STMT:
2066
0
      code = collectMetaKeyFromRollupDatabase(pCxt, (SRollupDatabaseStmt*)pStmt);
2067
0
      break;
2068
0
    case QUERY_NODE_SCAN_DATABASE_STMT:
2069
0
      code = collectMetaKeyFromScanDatabase(pCxt, (SScanDatabaseStmt*)pStmt);
2070
0
      break;
2071
0
    case QUERY_NODE_SSMIGRATE_DATABASE_STMT:
2072
0
      code = collectMetaKeyFromSsmigrateDatabase(pCxt, (SSsMigrateDatabaseStmt*)pStmt);
2073
0
      break;
2074
0
    case QUERY_NODE_TRIM_DATABASE_STMT:
2075
0
      code = collectMetaKeyFromTrimDatabase(pCxt, (STrimDatabaseStmt*)pStmt);
2076
0
      break;
2077
0
    case QUERY_NODE_COMPACT_VGROUPS_STMT:
2078
0
      code = collectMetaKeyFromCompactVgroups(pCxt, (SCompactVgroupsStmt*)pStmt);
2079
0
      break;
2080
0
    case QUERY_NODE_ROLLUP_VGROUPS_STMT:
2081
0
      code = collectMetaKeyFromRollupVgroups(pCxt, (SRollupVgroupsStmt*)pStmt);
2082
0
      break;
2083
0
    case QUERY_NODE_SCAN_VGROUPS_STMT:
2084
0
      code = collectMetaKeyFromScanVgroups(pCxt, (SScanVgroupsStmt*)pStmt);
2085
0
      break;
2086
0
    case QUERY_NODE_CREATE_STREAM_STMT:
2087
0
      code = collectMetaKeyFromCreateStream(pCxt, (SCreateStreamStmt*)pStmt);
2088
0
      break;
2089
0
    case QUERY_NODE_RECALCULATE_STREAM_STMT:
2090
0
      code = collectMetaKeyFromRecalculateStream(pCxt, (SRecalcStreamStmt*)pStmt);
2091
0
      break;
2092
0
    case QUERY_NODE_GRANT_STMT:
2093
0
      code = collectMetaKeyFromGrant(pCxt, (SGrantStmt*)pStmt);
2094
0
      break;
2095
0
    case QUERY_NODE_REVOKE_STMT:
2096
0
      code = collectMetaKeyFromRevoke(pCxt, (SRevokeStmt*)pStmt);
2097
0
      break;
2098
1
    case QUERY_NODE_SHOW_DNODES_STMT:
2099
1
      code = collectMetaKeyFromShowDnodes(pCxt, (SShowStmt*)pStmt);
2100
1
      break;
2101
1
    case QUERY_NODE_SHOW_MNODES_STMT:
2102
1
      code = collectMetaKeyFromShowMnodes(pCxt, (SShowStmt*)pStmt);
2103
1
      break;
2104
0
    case QUERY_NODE_SHOW_MODULES_STMT:
2105
0
      code = collectMetaKeyFromShowModules(pCxt, (SShowStmt*)pStmt);
2106
0
      break;
2107
1
    case QUERY_NODE_SHOW_QNODES_STMT:
2108
1
      code = collectMetaKeyFromShowQnodes(pCxt, (SShowStmt*)pStmt);
2109
1
      break;
2110
1
    case QUERY_NODE_SHOW_SNODES_STMT:
2111
1
      code = collectMetaKeyFromShowSnodes(pCxt, (SShowStmt*)pStmt);
2112
1
      break;
2113
1
    case QUERY_NODE_SHOW_ANODES_STMT:
2114
1
      code = collectMetaKeyFromShowAnodes(pCxt, (SShowStmt*)pStmt);
2115
1
      break;
2116
0
    case QUERY_NODE_SHOW_ANODES_FULL_STMT:
2117
0
      code = collectMetaKeyFromShowAnodesFull(pCxt, (SShowStmt*)pStmt);
2118
0
      break;
2119
1
    case QUERY_NODE_SHOW_BNODES_STMT:
2120
1
      code = collectMetaKeyFromShowBnodes(pCxt, (SShowStmt*)pStmt);
2121
1
      break;
2122
0
    case QUERY_NODE_SHOW_BACKUP_NODES_STMT:
2123
0
      code = collectMetaKeyFromShowBackupNodes(pCxt, (SShowStmt*)pStmt);
2124
0
      break;
2125
1
    case QUERY_NODE_SHOW_XNODES_STMT:
2126
1
      code = collectMetaKeyFromShowXnodes(pCxt, (SShowStmt*)pStmt);
2127
1
      break;
2128
2
    case QUERY_NODE_SHOW_XNODE_TASKS_STMT:
2129
2
      code = collectMetaKeyFromShowXnodeTasks(pCxt, (SShowStmt*)pStmt);
2130
2
      break;
2131
2
    case QUERY_NODE_SHOW_XNODE_AGENTS_STMT:
2132
2
      code = collectMetaKeyFromShowXnodeAgents(pCxt, (SShowStmt*)pStmt);
2133
2
      break;
2134
1
    case QUERY_NODE_SHOW_XNODE_JOBS_STMT:
2135
1
      code = collectMetaKeyFromShowXnodeJobs(pCxt, (SShowStmt*)pStmt);
2136
1
      break;
2137
0
    case QUERY_NODE_SHOW_ARBGROUPS_STMT:
2138
0
      code = collectMetaKeyFromShowArbGroups(pCxt, (SShowStmt*)pStmt);
2139
0
      break;
2140
0
    case QUERY_NODE_SHOW_CLUSTER_STMT:
2141
0
      code = collectMetaKeyFromShowCluster(pCxt, (SShowStmt*)pStmt);
2142
0
      break;
2143
0
    case QUERY_NODE_SHOW_SECURITY_POLICIES_STMT:
2144
0
      code = collectMetaKeyFromShowSecurityPolicies(pCxt, (SShowStmt*)pStmt);
2145
0
      break;
2146
0
    case QUERY_NODE_SHOW_DATABASES_STMT:
2147
0
      code = collectMetaKeyFromShowDatabases(pCxt, (SShowStmt*)pStmt);
2148
0
      break;
2149
0
    case QUERY_NODE_SHOW_FUNCTIONS_STMT:
2150
0
      code = collectMetaKeyFromShowFunctions(pCxt, (SShowStmt*)pStmt);
2151
0
      break;
2152
0
    case QUERY_NODE_SHOW_INDEXES_STMT:
2153
0
      code = collectMetaKeyFromShowIndexes(pCxt, (SShowStmt*)pStmt);
2154
0
      break;
2155
31
    case QUERY_NODE_SHOW_STABLES_STMT:
2156
31
      code = collectMetaKeyFromShowStables(pCxt, (SShowStmt*)pStmt);
2157
31
      break;
2158
0
    case QUERY_NODE_SHOW_STREAMS_STMT:
2159
0
      code = collectMetaKeyFromShowStreams(pCxt, (SShowStmt*)pStmt);
2160
0
      break;
2161
37
    case QUERY_NODE_SHOW_TABLES_STMT:
2162
64
    case QUERY_NODE_SHOW_VTABLES_STMT:
2163
64
      code = collectMetaKeyFromShowTables(pCxt, (SShowStmt*)pStmt);
2164
64
      break;
2165
0
    case QUERY_NODE_SHOW_FILESETS_STMT:
2166
0
      code = collectMetaKeyFromShowFilesets(pCxt, (SShowStmt*)pStmt);
2167
0
      break;
2168
0
    case QUERY_NODE_SHOW_TAGS_STMT:
2169
0
      code = collectMetaKeyFromShowTags(pCxt, (SShowStmt*)pStmt);
2170
0
      break;
2171
0
    case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
2172
0
      code = collectMetaKeyFromShowStableTags(pCxt, (SShowTableTagsStmt*)pStmt);
2173
0
      break;
2174
0
    case QUERY_NODE_SHOW_USERS_STMT:
2175
0
      code = collectMetaKeyFromShowUsers(pCxt, (SShowStmt*)pStmt);
2176
0
      break;
2177
0
    case QUERY_NODE_SHOW_USERS_FULL_STMT:
2178
0
      code = collectMetaKeyFromShowUsersFull(pCxt, (SShowStmt*)pStmt);
2179
0
      break;
2180
1
    case QUERY_NODE_SHOW_ROLES_STMT:
2181
1
      code = collectMetaKeyFromShowRoles(pCxt, (SShowStmt*)pStmt);
2182
1
      break;
2183
1
    case QUERY_NODE_SHOW_LICENCES_STMT:
2184
1
      code = collectMetaKeyFromShowLicence(pCxt, (SShowStmt*)pStmt);
2185
1
      break;
2186
0
    case QUERY_NODE_SHOW_VGROUPS_STMT:
2187
0
      code = collectMetaKeyFromShowVgroups(pCxt, (SShowStmt*)pStmt);
2188
0
      break;
2189
0
    case QUERY_NODE_SHOW_TOPICS_STMT:
2190
0
      code = collectMetaKeyFromShowTopics(pCxt, (SShowStmt*)pStmt);
2191
0
      break;
2192
0
    case QUERY_NODE_SHOW_CONSUMERS_STMT:
2193
0
      code = collectMetaKeyFromShowConsumers(pCxt, (SShowStmt*)pStmt);
2194
0
      break;
2195
0
    case QUERY_NODE_SHOW_CONNECTIONS_STMT:
2196
0
      code = collectMetaKeyFromShowConnections(pCxt, (SShowStmt*)pStmt);
2197
0
      break;
2198
1
    case QUERY_NODE_SHOW_QUERIES_STMT:
2199
1
      code = collectMetaKeyFromShowQueries(pCxt, (SShowStmt*)pStmt);
2200
1
      break;
2201
0
    case QUERY_NODE_SHOW_VARIABLES_STMT:
2202
0
      code = collectMetaKeyFromShowVariables(pCxt, (SShowStmt*)pStmt);
2203
0
      break;
2204
0
    case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
2205
0
      code = collectMetaKeyFromShowDnodeVariables(pCxt, (SShowDnodeVariablesStmt*)pStmt);
2206
0
      break;
2207
1
    case QUERY_NODE_SHOW_VNODES_STMT:
2208
1
      code = collectMetaKeyFromShowVnodes(pCxt, (SShowVnodesStmt*)pStmt);
2209
1
      break;
2210
0
    case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
2211
0
      code = collectMetaKeyFromShowUserPrivileges(pCxt, (SShowStmt*)pStmt);
2212
0
      break;
2213
0
    case QUERY_NODE_SHOW_ROLE_PRIVILEGES_STMT:
2214
0
      code = collectMetaKeyFromShowRolePrivileges(pCxt, (SShowStmt*)pStmt);
2215
0
      break;
2216
0
    case QUERY_NODE_SHOW_ROLE_COL_PRIVILEGES_STMT:
2217
0
      code = collectMetaKeyFromShowRoleColPrivileges(pCxt, (SShowStmt*)pStmt);
2218
0
      break;
2219
0
    case QUERY_NODE_SHOW_VIEWS_STMT:
2220
0
      code = collectMetaKeyFromShowViews(pCxt, (SShowStmt*)pStmt);
2221
0
      break;
2222
0
    case QUERY_NODE_SHOW_COMPACTS_STMT:
2223
0
      code = collectMetaKeyFromShowCompacts(pCxt, (SShowStmt*)pStmt);
2224
0
      break;
2225
0
    case QUERY_NODE_SHOW_SCANS_STMT:
2226
0
      code = collectMetaKeyFromShowScans(pCxt, (SShowStmt*)pStmt);
2227
0
      break;
2228
0
    case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT:
2229
0
      code = collectMetaKeyFromShowCompactDetails(pCxt, (SShowStmt*)pStmt);
2230
0
      break;
2231
0
    case QUERY_NODE_SHOW_SCAN_DETAILS_STMT:
2232
0
      code = collectMetaKeyFromShowScanDetails(pCxt, (SShowStmt*)pStmt);
2233
0
      break;
2234
0
    case QUERY_NODE_SHOW_SSMIGRATES_STMT:
2235
0
      code = collectMetaKeyFromShowSsMigrates(pCxt, (SShowStmt*)pStmt);
2236
0
      break;
2237
0
    case QUERY_NODE_SHOW_TOKENS_STMT:
2238
0
      code = collectMetaKeyFromShowTokens(pCxt, (SShowStmt*)pStmt);
2239
0
      break;
2240
0
    case QUERY_NODE_SHOW_TRANSACTION_DETAILS_STMT:
2241
0
      code = collectMetaKeyFromShowTransactionDetails(pCxt, (SShowStmt*)pStmt);
2242
0
      break;
2243
0
    case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
2244
0
      code = collectMetaKeyFromShowGrantsFull(pCxt, (SShowStmt*)pStmt);
2245
0
      break;
2246
0
    case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
2247
0
      code = collectMetaKeyFromShowGrantsLogs(pCxt, (SShowStmt*)pStmt);
2248
0
      break;
2249
0
    case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
2250
0
      code = collectMetaKeyFromShowClusterMachines(pCxt, (SShowStmt*)pStmt);
2251
0
      break;
2252
0
    case QUERY_NODE_SHOW_ENCRYPTIONS_STMT:
2253
0
      code = collectMetaKeyFromShowEncryptions(pCxt, (SShowStmt*)pStmt);
2254
0
      break;
2255
0
    case QUERY_NODE_SHOW_ENCRYPT_ALGORITHMS_STMT:
2256
0
      code = collectMetaKeyFromShowEncryptAlgorithms(pCxt, (SShowStmt*)pStmt);
2257
0
      break;
2258
0
    case QUERY_NODE_SHOW_ENCRYPT_STATUS_STMT:
2259
0
      code = collectMetaKeyFromShowEncryptStatus(pCxt, (SShowStmt*)pStmt);
2260
0
      break;
2261
0
    case QUERY_NODE_SHOW_MOUNTS_STMT:
2262
0
      code = collectMetaKeyFromShowMounts(pCxt, (SShowStmt*)pStmt);
2263
0
      break;
2264
0
    case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
2265
0
      code = collectMetaKeyFromShowCreateDatabase(pCxt, (SShowCreateDatabaseStmt*)pStmt);
2266
0
      break;
2267
0
    case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
2268
0
    case QUERY_NODE_SHOW_CREATE_VTABLE_STMT:
2269
0
    case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
2270
0
      code = collectMetaKeyFromShowCreateTable(pCxt, (SShowCreateTableStmt*)pStmt);
2271
0
      break;
2272
0
    case QUERY_NODE_SHOW_CREATE_VIEW_STMT:
2273
0
      code = collectMetaKeyFromShowCreateView(pCxt, (SShowCreateViewStmt*)pStmt);
2274
0
      break;
2275
0
    case QUERY_NODE_SHOW_CREATE_RSMA_STMT:
2276
0
      code = collectMetaKeyFromShowCreateRsma(pCxt, (SShowCreateRsmaStmt*)pStmt);
2277
0
      break;
2278
0
    case QUERY_NODE_SHOW_CREATE_STREAM_STMT:
2279
0
      code = collectMetaKeyFromShowCreateStream(pCxt, (SShowCreateStreamStmt*)pStmt);
2280
0
      break;
2281
0
    case QUERY_NODE_SHOW_APPS_STMT:
2282
0
      code = collectMetaKeyFromShowApps(pCxt, (SShowStmt*)pStmt);
2283
0
      break;
2284
0
    case QUERY_NODE_SHOW_INSTANCES_STMT:
2285
0
      code = collectMetaKeyFromShowInstances(pCxt, (SShowStmt*)pStmt);
2286
0
      break;
2287
0
    case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
2288
0
      code = collectMetaKeyFromShowTransactions(pCxt, (SShowStmt*)pStmt);
2289
0
      break;
2290
0
    case QUERY_NODE_SHOW_USAGE_STMT:
2291
0
      code = collectMetaKeyFromShowUsage(pCxt, (SShowStmt*)pStmt);
2292
0
      break;
2293
0
    case QUERY_NODE_DELETE_STMT:
2294
0
      code = collectMetaKeyFromDelete(pCxt, (SDeleteStmt*)pStmt);
2295
0
      break;
2296
0
    case QUERY_NODE_INSERT_STMT:
2297
0
      code = collectMetaKeyFromInsert(pCxt, (SInsertStmt*)pStmt);
2298
0
      break;
2299
0
    case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
2300
0
      code = collectMetaKeyFromShowBlockDist(pCxt, (SShowTableDistributedStmt*)pStmt);
2301
0
      break;
2302
0
    case QUERY_NODE_SHOW_VALIDATE_VTABLE_STMT:
2303
0
      code = collectMetaKeyFromShowValidateVtable(pCxt, (SShowValidateVirtualTable*)pStmt);
2304
0
      break;
2305
0
    case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
2306
0
      code = collectMetaKeyFromShowSubscriptions(pCxt, (SShowStmt*)pStmt);
2307
0
      break;
2308
0
    case QUERY_NODE_CREATE_VIEW_STMT:
2309
0
      code = collectMetaKeyFromCreateViewStmt(pCxt, (SCreateViewStmt*)pStmt);
2310
0
      break;
2311
0
    case QUERY_NODE_DROP_VIEW_STMT:
2312
0
      code = collectMetaKeyFromDropViewStmt(pCxt, (SDropViewStmt*)pStmt);
2313
0
      break;
2314
0
    case QUERY_NODE_CREATE_TSMA_STMT:
2315
0
      code = collectMetaKeyFromCreateTSMAStmt(pCxt, (SCreateTSMAStmt*)pStmt);
2316
0
      break;
2317
0
    case QUERY_NODE_DROP_TSMA_STMT:
2318
0
      code = collectMetaKeyFromDropTSMAStmt(pCxt, (SDropTSMAStmt*)pStmt);
2319
0
      break;
2320
0
    case QUERY_NODE_SHOW_TSMAS_STMT:
2321
0
      code = collectMetaKeyFromShowTSMASStmt(pCxt, (SShowStmt*)pStmt);
2322
0
      break;
2323
0
    case QUERY_NODE_CREATE_RSMA_STMT:
2324
0
      code = collectMetaKeyFromCreateRsmaStmt(pCxt, (SCreateRsmaStmt*)pStmt);
2325
0
      break;
2326
0
    case QUERY_NODE_DROP_RSMA_STMT:
2327
0
      code = collectMetaKeyFromDropRsmaStmt(pCxt, (SDropRsmaStmt*)pStmt);
2328
0
      break;
2329
0
    case QUERY_NODE_ALTER_RSMA_STMT:
2330
0
      code = collectMetaKeyFromAlterRsmaStmt(pCxt, (SAlterRsmaStmt*)pStmt);
2331
0
      break;
2332
0
    case QUERY_NODE_SHOW_RSMAS_STMT:
2333
0
      code = collectMetaKeyFromShowRsmasStmt(pCxt, (SShowStmt*)pStmt);
2334
0
      break;
2335
0
    case QUERY_NODE_SHOW_RETENTIONS_STMT:
2336
0
      code = collectMetaKeyFromShowRetentionsStmt(pCxt, (SShowStmt*)pStmt);
2337
0
      break;
2338
0
    case QUERY_NODE_SHOW_RETENTION_DETAILS_STMT:
2339
0
      code = collectMetaKeyFromShowRetentionDetailsStmt(pCxt, (SShowStmt*)pStmt);
2340
0
      break;
2341
0
    case QUERY_NODE_SHOW_DB_ALIVE_STMT:
2342
0
    case QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT:
2343
0
      code = collectMetaKeyFromShowAlive(pCxt, (SShowAliveStmt*)pStmt);
2344
0
      break;
2345
0
    case QUERY_NODE_CREATE_DATABASE_STMT:
2346
0
      code = collectMetaKeyFromCreateDatabase(pCxt, (SCreateDatabaseStmt*)pStmt);
2347
0
      break;
2348
0
    case QUERY_NODE_DROP_DATABASE_STMT:
2349
0
      code = collectMetaKeyFromDropDatabase(pCxt, (SDropDatabaseStmt*)pStmt);
2350
0
      break;
2351
0
    case QUERY_NODE_BALANCE_VGROUP_STMT:
2352
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_VG_BALANCE);
2353
0
      break;
2354
0
    case QUERY_NODE_BALANCE_VGROUP_LEADER_DATABASE_STMT:
2355
0
    case QUERY_NODE_BALANCE_VGROUP_LEADER_STMT:
2356
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_VG_BALANCE_LEADER);
2357
0
      break;
2358
0
    case QUERY_NODE_MERGE_VGROUP_STMT:
2359
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_VG_MERGE);
2360
0
      break;
2361
0
    case QUERY_NODE_SPLIT_VGROUP_STMT:
2362
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_VG_SPLIT);
2363
0
      break;
2364
0
    case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
2365
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_VG_REDISTRIBUTE);
2366
0
      break;
2367
0
    case QUERY_NODE_CREATE_FUNCTION_STMT:
2368
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_FUNC_CREATE);
2369
0
      break;
2370
0
    case QUERY_NODE_DROP_FUNCTION_STMT:
2371
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_FUNC_DROP);
2372
0
      break;
2373
0
    case QUERY_NODE_CREATE_MOUNT_STMT:
2374
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_MOUNT_CREATE);
2375
0
      break;
2376
0
    case QUERY_NODE_DROP_MOUNT_STMT:
2377
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_MOUNT_DROP);
2378
0
      break;
2379
71
    case QUERY_NODE_CREATE_ROLE_STMT:
2380
71
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_ROLE_CREATE);
2381
71
      break;
2382
0
    case QUERY_NODE_DROP_ROLE_STMT:
2383
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_ROLE_DROP);
2384
0
      break;
2385
0
    case QUERY_NODE_CREATE_USER_STMT:
2386
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_USER_CREATE);
2387
0
      break;
2388
0
    case QUERY_NODE_ALTER_USER_STMT:
2389
0
      code = collectMetaKeyFromAlterUserStmt(pCxt, (SAlterUserStmt*)pStmt);
2390
0
      break;
2391
0
    case QUERY_NODE_DROP_USER_STMT:
2392
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_USER_DROP);
2393
0
      break;
2394
0
    case QUERY_NODE_ALTER_LOCAL_STMT:
2395
0
      return collectMetaKeyFromAlterLocalStmt(pCxt, (SAlterLocalStmt*)pStmt);
2396
0
    case QUERY_NODE_CREATE_DNODE_STMT:
2397
0
    case QUERY_NODE_CREATE_MNODE_STMT:
2398
0
    case QUERY_NODE_CREATE_QNODE_STMT:
2399
0
    case QUERY_NODE_CREATE_SNODE_STMT:
2400
0
    case QUERY_NODE_CREATE_BNODE_STMT:
2401
0
    case QUERY_NODE_CREATE_ANODE_STMT:
2402
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_NODE_CREATE);
2403
0
      break;
2404
0
    case QUERY_NODE_DROP_DNODE_STMT:
2405
0
    case QUERY_NODE_DROP_MNODE_STMT:
2406
0
    case QUERY_NODE_DROP_QNODE_STMT:
2407
0
    case QUERY_NODE_DROP_SNODE_STMT:
2408
0
    case QUERY_NODE_DROP_BNODE_STMT:
2409
0
    case QUERY_NODE_DROP_ANODE_STMT:
2410
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_NODE_DROP);
2411
0
      break;
2412
0
    case QUERY_NODE_KILL_TRANSACTION_STMT:
2413
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_TRANS_KILL);
2414
0
      break;
2415
0
    case QUERY_NODE_KILL_QUERY_STMT:
2416
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_QUERY_KILL);
2417
0
      break;
2418
0
    case QUERY_NODE_KILL_CONNECTION_STMT:
2419
0
      code = collectMetaKeyFromSysPrivStmt(pCxt, PRIV_CONN_KILL);
2420
0
      break;
2421
0
    default:
2422
0
      break;
2423
8.65k
  }
2424
2425
8.65k
  pCxt->pStmt = pOrigStmt;
2426
2427
8.65k
  return code;
2428
8.65k
}
2429
2430
2.74k
int32_t collectMetaKey(SParseContext* pParseCxt, SQuery* pQuery, SParseMetaCache* pMetaCache) {
2431
2.74k
  SCollectMetaKeyCxt cxt = {.pParseCxt = pParseCxt, .pMetaCache = pMetaCache, .pStmt = pQuery->pRoot};
2432
2.74k
  return collectMetaKeyFromQuery(&cxt, pQuery->pRoot);
2433
2.74k
}