• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

taosdata / TDengine / #3796

31 Mar 2025 10:39AM UTC coverage: 30.372% (-7.1%) from 37.443%
#3796

push

travis-ci

happyguoxy
test:add test cases

69287 of 309062 branches covered (22.42%)

Branch coverage included in aggregate %.

118044 of 307720 relevant lines covered (38.36%)

278592.15 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

65.67
/source/libs/parser/src/parAstParser.c
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 "functionMgt.h"
17
#include "os.h"
18
#include "parAst.h"
19
#include "parInt.h"
20
#include "parToken.h"
21
#include "systable.h"
22
#include "tglobal.h"
23

24
typedef void* (*FMalloc)(size_t);
25
typedef void (*FFree)(void*);
26

27
extern void* ParseAlloc(FMalloc);
28
extern void  Parse(void*, int, SToken, void*);
29
extern void  ParseFree(void*, FFree);
30
extern void  ParseTrace(FILE*, char*);
31

32
int32_t buildQueryAfterParse(SQuery** pQuery, SNode* pRootNode, int16_t placeholderNo, SArray** pPlaceholderValues) {
10,159✔
33
  *pQuery = NULL;
10,159✔
34
  int32_t code = nodesMakeNode(QUERY_NODE_QUERY, (SNode**)pQuery);
10,159✔
35
  if (NULL == *pQuery) {
10,159!
36
    return code;
×
37
  }
38
  (*pQuery)->pRoot = pRootNode;
10,159✔
39
  (*pQuery)->placeholderNum = placeholderNo;
10,159✔
40
  TSWAP((*pQuery)->pPlaceholderValues, *pPlaceholderValues);
10,159✔
41
  (*pQuery)->execStage = QUERY_EXEC_STAGE_ANALYSE;
10,159✔
42

43
  return TSDB_CODE_SUCCESS;
10,159✔
44
}
45

46
int32_t parse(SParseContext* pParseCxt, SQuery** pQuery) {
10,197✔
47
  SAstCreateContext cxt;
48
  initAstCreateContext(pParseCxt, &cxt);
10,197✔
49
  void* pParser = ParseAlloc((FMalloc)taosMemMalloc);
10,197✔
50
  if (!pParser) return terrno;
10,197!
51
  int32_t i = 0;
10,197✔
52
  while (1) {
410,120✔
53
    SToken t0 = {0};
420,317✔
54
    if (cxt.pQueryCxt->pSql[i] == 0) {
420,317✔
55
      Parse(pParser, 0, t0, &cxt);
4,190✔
56
      goto abort_parse;
10,197✔
57
    }
58
    t0.n = tGetToken((char*)&cxt.pQueryCxt->pSql[i], &t0.type);
416,127✔
59
    t0.z = (char*)(cxt.pQueryCxt->pSql + i);
416,127✔
60
    i += t0.n;
416,127✔
61

62
    switch (t0.type) {
416,127!
63
      case TK_NK_SPACE:
150,481✔
64
      case TK_NK_COMMENT: {
65
        break;
150,481✔
66
      }
67
      case TK_NK_SEMI: {
5,980✔
68
        Parse(pParser, 0, t0, &cxt);
5,980✔
69
        goto abort_parse;
5,980✔
70
      }
71
      case TK_NK_ILLEGAL: {
4✔
72
        snprintf(cxt.pQueryCxt->pMsg, cxt.pQueryCxt->msgLen, "unrecognized token: \"%s\"", t0.z);
4✔
73
        cxt.errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
4✔
74
        goto abort_parse;
4✔
75
      }
76
      case TK_NK_OCT: {
×
77
        snprintf(cxt.pQueryCxt->pMsg, cxt.pQueryCxt->msgLen, "unsupported token: \"%s\"", t0.z);
×
78
        cxt.errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
×
79
        goto abort_parse;
×
80
      }
81
      default:
259,662✔
82
        // ParseTrace(stdout, "");
83
        Parse(pParser, t0.type, t0, &cxt);
259,662✔
84
        if (TSDB_CODE_SUCCESS != cxt.errCode) {
259,662✔
85
          goto abort_parse;
23✔
86
        }
87
    }
88
  }
89

90
abort_parse:
10,197✔
91
  ParseFree(pParser, (FFree)taosAutoMemoryFree);
10,197✔
92
  if (TSDB_CODE_SUCCESS == cxt.errCode) {
10,197✔
93
    int32_t code = buildQueryAfterParse(pQuery, cxt.pRootNode, cxt.placeholderNo, &cxt.pPlaceholderValues);
10,159✔
94
    if (TSDB_CODE_SUCCESS != code) {
10,159!
95
      return code;
×
96
    }
97
  }
98
  taosArrayDestroy(cxt.pPlaceholderValues);
10,197✔
99
  return cxt.errCode;
10,197✔
100
}
101

102
typedef struct SCollectMetaKeyCxt {
103
  SParseContext*   pParseCxt;
104
  SParseMetaCache* pMetaCache;
105
  SNode*           pStmt;
106
  bool             collectVSubTables;
107
} SCollectMetaKeyCxt;
108

109
typedef struct SCollectMetaKeyFromExprCxt {
110
  SCollectMetaKeyCxt* pComCxt;
111
  bool                hasLastRowOrLast;
112
  bool                tbnameCollect;
113
  int32_t             errCode;
114
} SCollectMetaKeyFromExprCxt;
115

116
static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt);
117

118
static EDealRes collectMetaKeyFromFunction(SCollectMetaKeyFromExprCxt* pCxt, SFunctionNode* pFunc) {
6,387✔
119
  switch (fmGetFuncType(pFunc->functionName)) {
6,387✔
120
    case FUNCTION_TYPE_LAST_ROW:
625✔
121
    case FUNCTION_TYPE_LAST:
122
      pCxt->hasLastRowOrLast = true;
625✔
123
      break;
625✔
124
    case FUNCTION_TYPE_UDF:
4✔
125
      pCxt->errCode = reserveUdfInCache(pFunc->functionName, pCxt->pComCxt->pMetaCache);
4✔
126
      break;
4✔
127
    default:
5,758✔
128
      break;
5,758✔
129
  }
130
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
6,387!
131
}
132

133
static bool needGetTableIndex(SNode* pStmt) {
5,276✔
134
  if (QUERY_SMA_OPTIMIZE_ENABLE == tsQuerySmaOptimize && QUERY_NODE_SELECT_STMT == nodeType(pStmt)) {
5,276!
135
    SSelectStmt* pSelect = (SSelectStmt*)pStmt;
×
136
    return (NULL != pSelect->pWindow && QUERY_NODE_INTERVAL_WINDOW == nodeType(pSelect->pWindow));
×
137
  }
138
  return false;
5,276✔
139
}
140

141
static int32_t collectMetaKeyFromInsTagsImpl(SCollectMetaKeyCxt* pCxt, SName* pName) {
324✔
142
  if (0 == pName->type) {
324✔
143
    return TSDB_CODE_SUCCESS;
268✔
144
  }
145
  if (TSDB_DB_NAME_T == pName->type) {
56!
146
    return reserveDbVgInfoInCache(pName->acctId, pName->dbname, pCxt->pMetaCache);
×
147
  }
148
  return reserveTableVgroupInCacheExt(pName, pCxt->pMetaCache);
56✔
149
}
150

151
static int32_t collectMetaKeyFromInsTags(SCollectMetaKeyCxt* pCxt) {
324✔
152
  SSelectStmt* pSelect = (SSelectStmt*)pCxt->pStmt;
324✔
153
  SName        name = {0};
324✔
154
  int32_t      code = getVnodeSysTableTargetName(pCxt->pParseCxt->acctId, pSelect->pWhere, &name);
324✔
155
  if (TSDB_CODE_SUCCESS == code) {
324!
156
    code = collectMetaKeyFromInsTagsImpl(pCxt, &name);
324✔
157
  }
158
  return code;
324✔
159
}
160

161
static int32_t collectMetaKeyFromRealTableImpl(SCollectMetaKeyCxt* pCxt, const char* pDb, const char* pTable,
5,276✔
162
                                               AUTH_TYPE authType) {
163
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
5,276✔
164
  if (TSDB_CODE_SUCCESS == code) {
5,276!
165
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
5,276✔
166
  }
167
  if (TSDB_CODE_SUCCESS == code) {
5,276!
168
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pDb, pTable, authType,
5,276✔
169
                                  pCxt->pMetaCache);
170
  }
171
#ifdef TD_ENTERPRISE
172
  if (TSDB_CODE_SUCCESS == code && NULL != pCxt->pParseCxt->pEffectiveUser) {
5,276!
173
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pEffectiveUser, pDb, pTable, authType,
1✔
174
                                  pCxt->pMetaCache);
175
  }
176
#endif
177
  if (TSDB_CODE_SUCCESS == code) {
5,276!
178
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pDb, pCxt->pMetaCache);
5,276✔
179
  }
180
  if (TSDB_CODE_SUCCESS == code && needGetTableIndex(pCxt->pStmt)) {
5,276!
181
    code = reserveTableIndexInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
×
182
  }
183
  if (TSDB_CODE_SUCCESS == code && (0 == strcmp(pTable, TSDB_INS_TABLE_DNODE_VARIABLES))) {
5,276!
184
    code = reserveDnodeRequiredInCache(pCxt->pMetaCache);
×
185
  }
186
  if (TSDB_CODE_SUCCESS == code &&
5,276!
187
      (0 == strcmp(pTable, TSDB_INS_TABLE_TAGS) || 0 == strcmp(pTable, TSDB_INS_TABLE_TABLES) ||
5,276✔
188
       0 == strcmp(pTable, TSDB_INS_TABLE_COLS) || 0 == strcmp(pTable, TSDB_INS_DISK_USAGE) ||
5,000!
189
       0 == strcmp(pTable, TSDB_INS_TABLE_FILESETS)) &&
4,952!
190
      QUERY_NODE_SELECT_STMT == nodeType(pCxt->pStmt)) {
324!
191
    code = collectMetaKeyFromInsTags(pCxt);
324✔
192
  }
193
  if (TSDB_CODE_SUCCESS == code && QUERY_SMA_OPTIMIZE_ENABLE == tsQuerySmaOptimize &&
5,276!
194
      QUERY_NODE_SELECT_STMT == nodeType(pCxt->pStmt)) {
×
195
    code = reserveTableTSMAInfoInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
×
196
  }
197
  return code;
5,276✔
198
}
199

200
static EDealRes collectMetaKeyFromRealTable(SCollectMetaKeyFromExprCxt* pCxt, SRealTableNode* pRealTable) {
5,224✔
201
  pCxt->errCode = collectMetaKeyFromRealTableImpl(pCxt->pComCxt, pRealTable->table.dbName, pRealTable->table.tableName,
5,224✔
202
                                                  AUTH_TYPE_READ);
203
  if (TSDB_CODE_SUCCESS == pCxt->errCode && pCxt->pComCxt->collectVSubTables) {
5,224!
204
    pCxt->errCode = reserveVSubTableInCache(pCxt->pComCxt->pParseCxt->acctId, pRealTable->table.dbName, pRealTable->table.tableName, pCxt->pComCxt->pMetaCache);
37✔
205
  }
206
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
5,224!
207
}
208

209
static EDealRes collectMetaKeyFromTempTable(SCollectMetaKeyFromExprCxt* pCxt, STempTableNode* pTempTable) {
81✔
210
  pCxt->errCode = collectMetaKeyFromQuery(pCxt->pComCxt, pTempTable->pSubquery);
81✔
211
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
81!
212
}
213

214
static int32_t isTbnameEqCondOperator(SOperatorNode* pOperator, char** ppTableName) {
2,130✔
215
  if (pOperator->opType != OP_TYPE_EQUAL) {
2,130✔
216
    return TSDB_CODE_SUCCESS;
1,035✔
217
  }
218

219
  SValueNode* pValueNode = NULL;
1,095✔
220
  if (nodeType(pOperator->pLeft) == QUERY_NODE_FUNCTION &&
1,095✔
221
      0 == strcasecmp(((SFunctionNode*)(pOperator->pLeft))->functionName, "tbname") &&
28!
222
      nodeType(pOperator->pRight) == QUERY_NODE_VALUE) {
28!
223
    pValueNode = (SValueNode*)pOperator->pRight;
28✔
224
  } else if (nodeType(pOperator->pRight) == QUERY_NODE_FUNCTION &&
1,067!
225
             0 == strcasecmp(((SFunctionNode*)(pOperator->pRight))->functionName, "tbname") &&
×
226
             nodeType(pOperator->pLeft) == QUERY_NODE_VALUE) {
×
227
    pValueNode = (SValueNode*)pOperator->pLeft;
×
228
  } else {
229
    return TSDB_CODE_SUCCESS;
1,067✔
230
  }
231

232
  *ppTableName = pValueNode->literal;
28✔
233

234
  return TSDB_CODE_SUCCESS;
28✔
235
}
236

237
static EDealRes collectMetaKeyFromOperator(SCollectMetaKeyFromExprCxt* pCxt, SOperatorNode* pOpNode) {
5,945✔
238
  if (!pCxt->tbnameCollect) {
5,945✔
239
    return DEAL_RES_CONTINUE;
3,815✔
240
  }
241

242
  char*   pTableName = NULL;
2,130✔
243
  int32_t code = isTbnameEqCondOperator((SOperatorNode*)pOpNode, &pTableName);
2,130✔
244
  if (TSDB_CODE_SUCCESS != code) return DEAL_RES_CONTINUE;
2,130!
245
  if (pTableName) {
2,130✔
246
    SSelectStmt* pSelect = (SSelectStmt*)pCxt->pComCxt->pStmt;
28✔
247
    pCxt->errCode = collectMetaKeyFromRealTableImpl(pCxt->pComCxt, ((SRealTableNode*)pSelect->pFromTable)->table.dbName,
28✔
248
                                                    pTableName, AUTH_TYPE_READ);
249
  }
250

251
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
2,130!
252
}
253

254
static EDealRes collectMetaKeyFromExprImpl(SNode* pNode, void* pContext) {
45,402✔
255
  SCollectMetaKeyFromExprCxt* pCxt = pContext;
45,402✔
256
  switch (nodeType(pNode)) {
45,402✔
257
    case QUERY_NODE_FUNCTION:
6,387✔
258
      return collectMetaKeyFromFunction(pCxt, (SFunctionNode*)pNode);
6,387✔
259
    case QUERY_NODE_REAL_TABLE:
5,224✔
260
      return collectMetaKeyFromRealTable(pCxt, (SRealTableNode*)pNode);
5,224✔
261
    case QUERY_NODE_TEMP_TABLE:
81✔
262
      return collectMetaKeyFromTempTable(pCxt, (STempTableNode*)pNode);
81✔
263
    case QUERY_NODE_OPERATOR:
5,945✔
264
      return collectMetaKeyFromOperator(pCxt, (SOperatorNode*)pNode);
5,945✔
265
    default:
27,765✔
266
      break;
27,765✔
267
  }
268
  return DEAL_RES_CONTINUE;
27,765✔
269
}
270

271
static int32_t collectMetaKeyFromExprs(SCollectMetaKeyCxt* pCxt, SNodeList* pList) {
10✔
272
  SCollectMetaKeyFromExprCxt cxt = {.pComCxt = pCxt, .errCode = TSDB_CODE_SUCCESS, .tbnameCollect = false};
10✔
273
  nodesWalkExprs(pList, collectMetaKeyFromExprImpl, &cxt);
10✔
274
  return cxt.errCode;
10✔
275
}
276

277
static int32_t collectMetaKeyFromSetOperator(SCollectMetaKeyCxt* pCxt, SSetOperator* pStmt) {
10✔
278
  int32_t code = collectMetaKeyFromQuery(pCxt, pStmt->pLeft);
10✔
279
  if (TSDB_CODE_SUCCESS == code) {
10!
280
    code = collectMetaKeyFromQuery(pCxt, pStmt->pRight);
10✔
281
  }
282
  if (TSDB_CODE_SUCCESS == code) {
10!
283
    code = collectMetaKeyFromExprs(pCxt, pStmt->pOrderByList);
10✔
284
  }
285
  return code;
10✔
286
}
287

288
static int32_t reserveDbCfgForLastRow(SCollectMetaKeyCxt* pCxt, SNode* pTable) {
397✔
289
  if (NULL == pTable || QUERY_NODE_REAL_TABLE != nodeType(pTable)) {
397!
290
    return TSDB_CODE_SUCCESS;
2✔
291
  }
292
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SRealTableNode*)pTable)->table.dbName, pCxt->pMetaCache);
395✔
293
}
294

295
static int32_t collectMetaKeyFromSelect(SCollectMetaKeyCxt* pCxt, SSelectStmt* pStmt) {
4,714✔
296
  SCollectMetaKeyFromExprCxt cxt = {.pComCxt = pCxt, .hasLastRowOrLast = false, .errCode = TSDB_CODE_SUCCESS};
4,714✔
297
  if (pStmt->pFromTable && QUERY_NODE_REAL_TABLE == nodeType(pStmt->pFromTable)) {
4,714✔
298
    cxt.tbnameCollect = true;
3,824✔
299
  }
300
  nodesWalkSelectStmt(pStmt, SQL_CLAUSE_FROM, collectMetaKeyFromExprImpl, &cxt);
4,714✔
301
  if (TSDB_CODE_SUCCESS == cxt.errCode && cxt.hasLastRowOrLast) {
4,714!
302
    cxt.errCode = reserveDbCfgForLastRow(pCxt, pStmt->pFromTable);
397✔
303
  }
304
  return cxt.errCode;
4,714✔
305
}
306

307
static int32_t collectMetaKeyFromAlterDatabase(SCollectMetaKeyCxt* pCxt, SAlterDatabaseStmt* pStmt) {
100✔
308
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
100✔
309
}
310

311
static int32_t collectMetaKeyFromFlushDatabase(SCollectMetaKeyCxt* pCxt, SFlushDatabaseStmt* pStmt) {
101✔
312
  return reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
101✔
313
}
314

315
static int32_t collectMetaKeyFromCreateTable(SCollectMetaKeyCxt* pCxt, SCreateTableStmt* pStmt) {
704✔
316
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
704✔
317
  if (TSDB_CODE_SUCCESS == code && NULL == pStmt->pTags) {
704!
318
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
607✔
319
  }
320
  if (TSDB_CODE_SUCCESS == code) {
704!
321
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, AUTH_TYPE_WRITE,
704✔
322
                                  pCxt->pMetaCache);
323
  }
324
  return code;
704✔
325
}
326

327
static int32_t collectMetaKeyFromCreateVTable(SCollectMetaKeyCxt* pCxt, SCreateVTableStmt* pStmt) {
190✔
328
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
190✔
329
  if (TSDB_CODE_SUCCESS == code) {
190!
330
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
190✔
331
  }
332
  if (TSDB_CODE_SUCCESS == code) {
190!
333
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, AUTH_TYPE_WRITE,
190✔
334
                                  pCxt->pMetaCache);
335
  }
336
  if (TSDB_CODE_SUCCESS == code) {
190!
337
    SNode *pNode = NULL;
190✔
338
    FOREACH(pNode, pStmt->pCols) {
2,168!
339
      SColumnDefNode *pCol = (SColumnDefNode*)pNode;
1,978✔
340
      if (NULL == pCol) {
1,978!
341
        code = TSDB_CODE_PAR_INVALID_COLUMN;
×
342
        break;
×
343
      }
344
      SColumnOptions *pOptions = (SColumnOptions*)pCol->pOptions;
1,978✔
345
      if (pOptions && pOptions->hasRef) {
1,978!
346
        code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pOptions->refDb, pOptions->refTable, pCxt->pMetaCache);
1,084✔
347
        if (TSDB_CODE_SUCCESS == code) {
1,084!
348
          code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pOptions->refDb, pOptions->refTable, pCxt->pMetaCache);
1,084✔
349
        }
350
        if (TSDB_CODE_SUCCESS == code) {
1,084!
351
          code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pOptions->refDb,
1,084✔
352
                                        pOptions->refTable, AUTH_TYPE_READ, pCxt->pMetaCache);
1,084✔
353
        }
354
        if (TSDB_CODE_SUCCESS != code) {
1,084!
355
          break;
×
356
        }
357
      }
358
    }
359
  }
360
  return code;
190✔
361
}
362

363
static int32_t collectMetaKeyFromCreateVSubTable(SCollectMetaKeyCxt* pCxt, SCreateVSubTableStmt* pStmt) {
166✔
364
  int32_t code = TSDB_CODE_SUCCESS;
166✔
365
  PAR_ERR_RET(reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache));
166!
366
  // super table's meta
367
  PAR_ERR_RET(reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->useDbName, pStmt->useTableName,pCxt->pMetaCache));
166!
368
  // child table's meta
369
  PAR_ERR_RET(reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache));
166!
370
  // check db's write auth
371
  PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL,
166!
372
                                     AUTH_TYPE_WRITE, pCxt->pMetaCache));
373
  // check org table's read auth
374
  SNode     *pNode = NULL;
166✔
375
  SNodeList *pTmpNodeList = pStmt->pSpecificColRefs ? pStmt->pSpecificColRefs : pStmt->pColRefs;
166✔
376
  if (NULL == pTmpNodeList) {
166✔
377
    // no column reference
378
    return TSDB_CODE_SUCCESS;
5✔
379
  }
380

381
  FOREACH(pNode, pTmpNodeList) {
1,046!
382
    SColumnRefNode *pColRef = (SColumnRefNode*)pNode;
885✔
383
    if (NULL == pColRef) {
885!
384
      code = TSDB_CODE_PAR_INVALID_COLUMN;
×
385
      break;
×
386
    }
387
    PAR_ERR_RET(reserveTableMetaInCache(pCxt->pParseCxt->acctId, pColRef->refDbName, pColRef->refTableName,
885!
388
                                        pCxt->pMetaCache));
389
    PAR_ERR_RET(reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pColRef->refDbName, pColRef->refTableName,
885!
390
                                          pCxt->pMetaCache));
391
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pColRef->refDbName,
885!
392
                                       pColRef->refTableName, AUTH_TYPE_READ, pCxt->pMetaCache));
393
  }
394
  return code;
161✔
395
}
396

397
static int32_t collectMetaKeyFromCreateMultiTable(SCollectMetaKeyCxt* pCxt, SCreateMultiTablesStmt* pStmt) {
589✔
398
  int32_t code = TSDB_CODE_SUCCESS;
589✔
399
  SNode*  pNode = NULL;
589✔
400
  FOREACH(pNode, pStmt->pSubTables) {
1,435!
401
    if (pNode->type == QUERY_NODE_CREATE_SUBTABLE_CLAUSE) {
846!
402
      SCreateSubTableClause* pClause = (SCreateSubTableClause*)pNode;
846✔
403
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
846✔
404
      if (TSDB_CODE_SUCCESS == code) {
846!
405
        code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName,
846✔
406
                                       pCxt->pMetaCache);
407
      }
408
      if (TSDB_CODE_SUCCESS == code) {
846!
409
        code =
410
            reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
846✔
411
      }
412
      if (TSDB_CODE_SUCCESS == code) {
846!
413
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, NULL,
846✔
414
                                      AUTH_TYPE_WRITE, pCxt->pMetaCache);
415
      }
416
    } else {
417
      SCreateSubTableFromFileClause* pClause = (SCreateSubTableFromFileClause*)pNode;
×
418
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pCxt->pMetaCache);
×
419
      if (TSDB_CODE_SUCCESS == code) {
×
420
        code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName,
×
421
                                       pCxt->pMetaCache);
422
      }
423
      if (TSDB_CODE_SUCCESS == code) {
×
424
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->useDbName, NULL,
×
425
                                      AUTH_TYPE_WRITE, pCxt->pMetaCache);
426
      }
427
    }
428

429
    if (TSDB_CODE_SUCCESS != code) {
846!
430
      break;
×
431
    }
432
  }
433
  return code;
589✔
434
}
435

436
static int32_t collectMetaKeyFromCreateSubTableFromFile(SCollectMetaKeyCxt*            pCxt,
×
437
                                                        SCreateSubTableFromFileClause* pClause) {
438
  int32_t code = TSDB_CODE_SUCCESS;
×
439
  SNode*  pNode = NULL;
×
440

441
  code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pCxt->pMetaCache);
×
442
  if (TSDB_CODE_SUCCESS == code) {
×
443
    code =
444
        reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName, pCxt->pMetaCache);
×
445
  }
446
  if (TSDB_CODE_SUCCESS == code) {
×
447
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->useDbName, NULL,
×
448
                                  AUTH_TYPE_WRITE, pCxt->pMetaCache);
449
  }
450

451
  return code;
×
452
}
453

454
static int32_t collectMetaKeyFromDropTable(SCollectMetaKeyCxt* pCxt, SDropTableStmt* pStmt) {
16✔
455
  int32_t code = TSDB_CODE_SUCCESS;
16✔
456
  SNode*  pNode = NULL;
16✔
457
  FOREACH(pNode, pStmt->pTables) {
36!
458
    SDropTableClause* pClause = (SDropTableClause*)pNode;
20✔
459
    if (pStmt->withOpt) {
20!
460
      code = reserveTableUidInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
×
461
      if (TSDB_CODE_SUCCESS == code) {
×
462
        code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
×
463
      }
464
      if (TSDB_CODE_SUCCESS == code) {
×
465
        code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
×
466
      }
467
    } else {
468
      code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
20✔
469
      if (TSDB_CODE_SUCCESS == code) {
20!
470
        code =
471
            reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
20✔
472
      }
473
      if (TSDB_CODE_SUCCESS == code) {
20!
474
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName,
20✔
475
                                      pClause->tableName, AUTH_TYPE_WRITE, pCxt->pMetaCache);
20✔
476
      }
477
    }
478
    if (TSDB_CODE_SUCCESS != code) {
20!
479
      break;
×
480
    }
481
  }
482
  return code;
16✔
483
}
484

485
static int32_t collectMetaKeyFromDropStable(SCollectMetaKeyCxt* pCxt, SDropSuperTableStmt* pStmt) {
3✔
486
  if (pStmt->withOpt) {
3!
487
    return reserveTableUidInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
×
488
  }
489
  return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
3✔
490
                                AUTH_TYPE_WRITE, pCxt->pMetaCache);
491
}
492

493
static int32_t collectMetaKeyFromDropVtable(SCollectMetaKeyCxt* pCxt, SDropVirtualTableStmt* pStmt) {
50✔
494
  int32_t code = TSDB_CODE_SUCCESS;
50✔
495
  if (pStmt->withOpt) {
50!
496
    code = reserveTableUidInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
×
497
    if (TSDB_CODE_SUCCESS == code) {
×
498
      code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
×
499
    }
500
    if (TSDB_CODE_SUCCESS == code) {
×
501
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
×
502
    }
503
  } else {
504
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
50✔
505
    if (TSDB_CODE_SUCCESS == code) {
50!
506
      code =
507
          reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
50✔
508
    }
509
    if (TSDB_CODE_SUCCESS == code) {
50!
510
      code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName,
50✔
511
                                    pStmt->tableName, AUTH_TYPE_WRITE, pCxt->pMetaCache);
50✔
512
    }
513
  }
514
  return code;
50✔
515
}
516

517
static int32_t collectMetaKeyFromAlterTable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
34✔
518
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
34✔
519
  if (TSDB_CODE_SUCCESS == code) {
34!
520
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
34✔
521
  }
522
  if (TSDB_CODE_SUCCESS == code) {
34!
523
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
34✔
524
  }
525
  if (TSDB_CODE_SUCCESS == code) {
34!
526
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
34✔
527
                                  AUTH_TYPE_WRITE, pCxt->pMetaCache);
528
  }
529
  return code;
34✔
530
}
531

532
static int32_t collectMetaKeyFromAlterStable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
42✔
533
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
42✔
534
  if (TSDB_CODE_SUCCESS == code) {
42!
535
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
42✔
536
  }
537
  if (TSDB_CODE_SUCCESS == code) {
42!
538
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
42✔
539
                                  AUTH_TYPE_WRITE, pCxt->pMetaCache);
540
  }
541
  return code;
42✔
542
}
543

544
static int32_t collectMetaKeyFromAlterVtable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
433✔
545
  PAR_ERR_RET(reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache));
433!
546
  PAR_ERR_RET(reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache));
433!
547
  PAR_ERR_RET(reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache));
433!
548
  PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
433!
549
                                     AUTH_TYPE_WRITE, pCxt->pMetaCache));
550
  if (pStmt->alterType == TSDB_ALTER_TABLE_ALTER_COLUMN_REF || pStmt->alterType == TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COLUMN_REF) {
433✔
551
    PAR_ERR_RET(reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->refDbName, pStmt->refTableName, pCxt->pMetaCache));
173!
552
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->refDbName, pStmt->refTableName,
173!
553
                                       AUTH_TYPE_READ, pCxt->pMetaCache));
554
  }
555
  return TSDB_CODE_SUCCESS;
433✔
556
}
557

558
static int32_t collectMetaKeyFromUseDatabase(SCollectMetaKeyCxt* pCxt, SUseDatabaseStmt* pStmt) {
421✔
559
  return reserveDbVgVersionInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
421✔
560
}
561

562
static int32_t collectMetaKeyFromCreateIndex(SCollectMetaKeyCxt* pCxt, SCreateIndexStmt* pStmt) {
4✔
563
  int32_t code = TSDB_CODE_SUCCESS;
4✔
564
  if (INDEX_TYPE_SMA == pStmt->indexType || INDEX_TYPE_NORMAL == pStmt->indexType) {
4!
565
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
4✔
566
    if (TSDB_CODE_SUCCESS == code) {
4!
567
      code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
4✔
568
    }
569
    if (TSDB_CODE_SUCCESS == code) {
4!
570
      code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
4✔
571
    }
572
    if (TSDB_CODE_SUCCESS == code) {
4!
573
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
4✔
574
    }
575
  }
576
  return code;
4✔
577
}
578

579
static int32_t collectMetaKeyFromCreateTopic(SCollectMetaKeyCxt* pCxt, SCreateTopicStmt* pStmt) {
17✔
580
  if (NULL != pStmt->pQuery) {
17✔
581
    return collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
5✔
582
  }
583
  if (NULL != pStmt->pWhere) {
12✔
584
    int32_t code = collectMetaKeyFromRealTableImpl(pCxt, pStmt->subDbName, pStmt->subSTbName, AUTH_TYPE_READ);
4✔
585
    return code;
4✔
586
  }
587
  return TSDB_CODE_SUCCESS;
8✔
588
}
589

590
static int32_t collectMetaKeyFromExplain(SCollectMetaKeyCxt* pCxt, SExplainStmt* pStmt) {
7✔
591
  return collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
7✔
592
}
593

594
static int32_t collectMetaKeyFromDescribe(SCollectMetaKeyCxt* pCxt, SDescribeStmt* pStmt) {
9✔
595
  SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
9✔
596
  tstrncpy(name.dbname, pStmt->dbName, TSDB_DB_NAME_LEN);
9✔
597
  tstrncpy(name.tname, pStmt->tableName, TSDB_TABLE_NAME_LEN);
9✔
598
  int32_t code = catalogRemoveTableMeta(pCxt->pParseCxt->pCatalog, &name);
9✔
599
#ifdef TD_ENTERPRISE
600
  if (TSDB_CODE_SUCCESS == code) {
9!
601
    char dbFName[TSDB_DB_FNAME_LEN];
602
    (void)tNameGetFullDbName(&name, dbFName);
9✔
603
    code = catalogRemoveViewMeta(pCxt->pParseCxt->pCatalog, dbFName, 0, pStmt->tableName, 0);
9✔
604
  }
605
#endif
606
  if (TSDB_CODE_SUCCESS == code) {
9!
607
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
9✔
608
  }
609
  return code;
9✔
610
}
611

612
static int32_t collectMetaKeyFromCreateStream(SCollectMetaKeyCxt* pCxt, SCreateStreamStmt* pStmt) {
37✔
613
  pCxt->collectVSubTables = true;
37✔
614
  
615
  int32_t code =
616
      reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->targetDbName, pStmt->targetTabName, pCxt->pMetaCache);
37✔
617
  if (TSDB_CODE_SUCCESS == code && NULL != pStmt->pSubtable && NULL != pStmt->pQuery) {
37!
618
    SSelectStmt* pSelect = (SSelectStmt*)pStmt->pQuery;
6✔
619
    int32_t      code = nodesCloneNode(pStmt->pSubtable, &pSelect->pSubtable);
6✔
620
    if (NULL == pSelect->pSubtable) {
6!
621
      return code;
×
622
    }
623
  }
624
  if (TSDB_CODE_SUCCESS == code) {
37!
625
    code = collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
37✔
626
  }
627
  if (TSDB_CODE_SUCCESS == code && pStmt->pOptions->fillHistory) {
37!
628
    SSelectStmt* pSelect = (SSelectStmt*)pStmt->pQuery;
×
629
    code = reserveDbCfgForLastRow(pCxt, pSelect->pFromTable);
×
630
  }
631
  return code;
37✔
632
}
633

634
static int32_t collectMetaKeyFromShowDnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
3✔
635
  if (pCxt->pParseCxt->enableSysInfo) {
3!
636
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODES,
3✔
637
                                   pCxt->pMetaCache);
638
  }
639
  return TSDB_CODE_SUCCESS;
×
640
}
641

642
static int32_t collectMetaKeyFromShowMnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
643
  if (pCxt->pParseCxt->enableSysInfo) {
2!
644
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MNODES,
2✔
645
                                   pCxt->pMetaCache);
646
  }
647
  return TSDB_CODE_SUCCESS;
×
648
}
649

650
static int32_t collectMetaKeyFromShowModules(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
651
  if (pCxt->pParseCxt->enableSysInfo) {
×
652
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MODULES,
×
653
                                   pCxt->pMetaCache);
654
  }
655
  return TSDB_CODE_SUCCESS;
×
656
}
657

658
static int32_t collectMetaKeyFromShowQnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
3✔
659
  if (pCxt->pParseCxt->enableSysInfo) {
3!
660
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_QNODES,
3✔
661
                                   pCxt->pMetaCache);
662
  }
663
  return TSDB_CODE_SUCCESS;
×
664
}
665

666
static int32_t collectMetaKeyFromShowSnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1✔
667
  if (pCxt->pParseCxt->enableSysInfo) {
1!
668
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SNODES,
1✔
669
                                   pCxt->pMetaCache);
670
  }
671
  return TSDB_CODE_SUCCESS;
×
672
}
673

674
static int32_t collectMetaKeyFromShowAnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
3✔
675
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ANODES,
3✔
676
                                 pCxt->pMetaCache);
677
}
678

679
static int32_t collectMetaKeyFromShowAnodesFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1✔
680
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ANODES_FULL,
1✔
681
                                 pCxt->pMetaCache);
682
}
683

684
static int32_t collectMetaKeyFromShowBnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
685
  if (pCxt->pParseCxt->enableSysInfo) {
×
686
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_BNODES,
×
687
                                   pCxt->pMetaCache);
688
  }
689
  return TSDB_CODE_SUCCESS;
×
690
}
691

692
static int32_t collectMetaKeyFromShowArbGroups(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
693
  if (pCxt->pParseCxt->enableSysInfo) {
×
694
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ARBGROUPS,
×
695
                                   pCxt->pMetaCache);
696
  }
697
  return TSDB_CODE_SUCCESS;
×
698
}
699

700
static int32_t collectMetaKeyFromShowCluster(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
701
  if (pCxt->pParseCxt->enableSysInfo) {
2!
702
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CLUSTER,
2✔
703
                                   pCxt->pMetaCache);
704
  }
705
  return TSDB_CODE_SUCCESS;
×
706
}
707

708
static int32_t collectMetaKeyFromShowDatabases(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
3✔
709
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DATABASES,
3✔
710
                                 pCxt->pMetaCache);
711
}
712

713
static int32_t collectMetaKeyFromShowFunctions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
714
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_FUNCTIONS,
2✔
715
                                 pCxt->pMetaCache);
716
}
717

718
static int32_t collectMetaKeyFromShowIndexes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
4✔
719
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_INDEXES,
4✔
720
                                 pCxt->pMetaCache);
721
}
722

723
static int32_t collectMetaKeyFromShowStables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
13✔
724
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_STABLES,
13✔
725
                                         pCxt->pMetaCache);
726
  if (TSDB_CODE_SUCCESS == code) {
13!
727
    code =
728
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
13✔
729
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
730
  }
731
  return code;
13✔
732
}
733

734
static int32_t collectMetaKeyFromShowStreams(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
735
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_STREAMS,
2✔
736
                                 pCxt->pMetaCache);
737
}
738

739
static int32_t collectMetaKeyFromShowTables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
96✔
740
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TABLES,
96✔
741
                                         pCxt->pMetaCache);
742
  if (TSDB_CODE_SUCCESS == code) {
96!
743
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
96✔
744
  }
745
  if (TSDB_CODE_SUCCESS == code) {
96!
746
    code =
747
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
96✔
748
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
749
  }
750
  return code;
96✔
751
}
752

753
static int32_t collectMetaKeyFromShowFilesets(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
754
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_FILESETS,
×
755
                                         pCxt->pMetaCache);
756
  if (TSDB_CODE_SUCCESS == code) {
×
757
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
×
758
  }
759
  if (TSDB_CODE_SUCCESS == code) {
×
760
    code =
761
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
×
762
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
763
  }
764
  return code;
×
765
}
766

767
static int32_t collectMetaKeyFromShowTags(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
768
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TAGS,
2✔
769
                                         pCxt->pMetaCache);
770
  if (TSDB_CODE_SUCCESS == code) {
2!
771
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal,
2✔
772
                                   ((SValueNode*)pStmt->pTbName)->literal, pCxt->pMetaCache);
2✔
773
  }
774
  if (TSDB_CODE_SUCCESS == code) {
2!
775
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
2✔
776
  }
777
  if (TSDB_CODE_SUCCESS == code && NULL != pStmt->pTbName) {
2!
778
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal,
2✔
779
                                     ((SValueNode*)pStmt->pTbName)->literal, pCxt->pMetaCache);
2✔
780
  }
781
  return code;
2✔
782
}
783

784
static int32_t collectMetaKeyFromShowStableTags(SCollectMetaKeyCxt* pCxt, SShowTableTagsStmt* pStmt) {
6✔
785
  return collectMetaKeyFromRealTableImpl(pCxt, ((SValueNode*)pStmt->pDbName)->literal,
12✔
786
                                         ((SValueNode*)pStmt->pTbName)->literal, AUTH_TYPE_READ);
6✔
787
}
788

789
static int32_t collectMetaKeyFromShowUsers(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
3✔
790
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS,
3✔
791
                                 pCxt->pMetaCache);
792
}
793

794
static int32_t collectMetaKeyFromShowUsersFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
795
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS_FULL,
×
796
                                 pCxt->pMetaCache);
797
}
798

799
static int32_t collectMetaKeyFromShowLicence(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
10✔
800
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_LICENCES,
10✔
801
                                 pCxt->pMetaCache);
802
}
803

804
static int32_t collectMetaKeyFromShowVgroups(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
5✔
805
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VGROUPS,
5✔
806
                                         pCxt->pMetaCache);
807
  if (TSDB_CODE_SUCCESS == code) {
5!
808
    // just to verify whether the database exists
809
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
5✔
810
  }
811
  return code;
5✔
812
}
813

814
static int32_t collectMetaKeyFromShowTopics(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
815
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TOPICS,
×
816
                                 pCxt->pMetaCache);
817
}
818

819
static int32_t collectMetaKeyFromShowConsumers(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
820
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_CONSUMERS,
2✔
821
                                 pCxt->pMetaCache);
822
}
823

824
static int32_t collectMetaKeyFromShowConnections(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
825
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_CONNECTIONS,
×
826
                                 pCxt->pMetaCache);
827
}
828

829
static int32_t collectMetaKeyFromShowQueries(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
830
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_QUERIES,
×
831
                                 pCxt->pMetaCache);
832
}
833

834
static int32_t collectMetaKeyFromShowVariables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
835
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CONFIGS,
2✔
836
                                 pCxt->pMetaCache);
837
}
838

839
static int32_t collectMetaKeyFromShowDnodeVariables(SCollectMetaKeyCxt* pCxt, SShowDnodeVariablesStmt* pStmt) {
4✔
840
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
4✔
841
                                         TSDB_INS_TABLE_DNODE_VARIABLES, pCxt->pMetaCache);
842
  if (TSDB_CODE_SUCCESS == code) {
4!
843
    code = reserveDnodeRequiredInCache(pCxt->pMetaCache);
4✔
844
  }
845
  return code;
4✔
846
}
847

848
static int32_t collectMetaKeyFromShowVnodes(SCollectMetaKeyCxt* pCxt, SShowVnodesStmt* pStmt) {
4✔
849
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VNODES,
4✔
850
                                 pCxt->pMetaCache);
851
}
852

853
static int32_t collectMetaKeyFromShowUserPrivileges(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
854
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USER_PRIVILEGES,
2✔
855
                                 pCxt->pMetaCache);
856
}
857

858
static int32_t collectMetaKeyFromShowViews(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
859
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VIEWS,
×
860
                                         pCxt->pMetaCache);
861
  if (TSDB_CODE_SUCCESS == code) {
×
862
    code =
863
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
×
864
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
865
  }
866
  return code;
×
867
}
868

869
static int32_t collectMetaKeyFromShowCompacts(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
870
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_COMPACTS,
×
871
                                         pCxt->pMetaCache);
872
  return code;
×
873
}
874

875
static int32_t collectMetaKeyFromShowCompactDetails(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
876
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
×
877
                                         TSDB_INS_TABLE_COMPACT_DETAILS, pCxt->pMetaCache);
878
  return code;
×
879
}
880

881
static int32_t collectMetaKeyFromShowTransactionDetails(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
882
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
×
883
                                         TSDB_INS_TABLE_TRANSACTION_DETAILS, pCxt->pMetaCache);
884
  return code;
×
885
}
886

887
static int32_t collectMetaKeyFromShowGrantsFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
888
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_GRANTS_FULL,
×
889
                                 pCxt->pMetaCache);
890
}
891

892
static int32_t collectMetaKeyFromShowGrantsLogs(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
893
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_GRANTS_LOGS,
×
894
                                 pCxt->pMetaCache);
895
}
896

897
static int32_t collectMetaKeyFromShowClusterMachines(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
898
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MACHINES,
×
899
                                 pCxt->pMetaCache);
900
}
901

902
static int32_t collectMetaKeyFromShowEncryptions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
903
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ENCRYPTIONS,
×
904
                                 pCxt->pMetaCache);
905
}
906

907
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
2✔
908
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
2✔
909
}
910

911
static int32_t collectMetaKeyFromShowCreateTable(SCollectMetaKeyCxt* pCxt, SShowCreateTableStmt* pStmt) {
6✔
912
  SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
6✔
913
  tstrncpy(name.dbname, pStmt->dbName, TSDB_DB_NAME_LEN);
6✔
914
  tstrncpy(name.tname, pStmt->tableName, TSDB_TABLE_NAME_LEN);
6✔
915
  int32_t code = catalogRemoveTableMeta(pCxt->pParseCxt->pCatalog, &name);
6✔
916
  if (TSDB_CODE_SUCCESS == code) {
6!
917
    code = reserveTableCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
6✔
918
  }
919
  if (TSDB_CODE_SUCCESS == code) {
6!
920
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
6✔
921
  }
922
  if (TSDB_CODE_SUCCESS == code) {
6!
923
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
6✔
924
                                  AUTH_TYPE_READ, pCxt->pMetaCache);
925
  }
926
  return code;
6✔
927
}
928

929
static int32_t collectMetaKeyFromShowCreateView(SCollectMetaKeyCxt* pCxt, SShowCreateViewStmt* pStmt) {
×
930
  SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
×
931
  tstrncpy(name.dbname, pStmt->dbName, TSDB_DB_NAME_LEN);
×
932
  tstrncpy(name.tname, pStmt->viewName, TSDB_TABLE_NAME_LEN);
×
933
  char dbFName[TSDB_DB_FNAME_LEN];
934
  (void)tNameGetFullDbName(&name, dbFName);
×
935
  int32_t code = catalogRemoveViewMeta(pCxt->pParseCxt->pCatalog, dbFName, 0, pStmt->viewName, 0);
×
936
  if (TSDB_CODE_SUCCESS == code) {
×
937
    code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName,
×
938
                                      AUTH_TYPE_READ, pCxt->pMetaCache);
939
  }
940
  if (TSDB_CODE_SUCCESS == code) {
×
941
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache);
×
942
  }
943
  pCxt->pMetaCache->forceFetchViewMeta = true;
×
944
  return code;
×
945
}
946

947
static int32_t collectMetaKeyFromShowApps(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
948
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_APPS,
×
949
                                 pCxt->pMetaCache);
950
}
951

952
static int32_t collectMetaKeyFromShowTransactions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
953
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_TRANS,
2✔
954
                                 pCxt->pMetaCache);
955
}
956

957
static int32_t collectMetaKeyFromDelete(SCollectMetaKeyCxt* pCxt, SDeleteStmt* pStmt) {
10✔
958
  STableNode* pTable = (STableNode*)pStmt->pFromTable;
10✔
959
  return collectMetaKeyFromRealTableImpl(pCxt, pTable->dbName, pTable->tableName, AUTH_TYPE_WRITE);
10✔
960
}
961

962
static int32_t collectMetaKeyFromInsert(SCollectMetaKeyCxt* pCxt, SInsertStmt* pStmt) {
2✔
963
  STableNode* pTable = (STableNode*)pStmt->pTable;
2✔
964
  int32_t     code = collectMetaKeyFromRealTableImpl(pCxt, pTable->dbName, pTable->tableName, AUTH_TYPE_WRITE);
2✔
965
  if (TSDB_CODE_SUCCESS == code) {
2!
966
    code = collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
2✔
967
  }
968
  return code;
2✔
969
}
970

971
static int32_t collectMetaKeyFromShowBlockDist(SCollectMetaKeyCxt* pCxt, SShowTableDistributedStmt* pStmt) {
2✔
972
  SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
2✔
973
  tstrncpy(name.dbname, pStmt->dbName, TSDB_DB_NAME_LEN);
2✔
974
  tstrncpy(name.tname, pStmt->tableName, TSDB_TABLE_NAME_LEN);
2✔
975
  int32_t code = catalogRemoveTableMeta(pCxt->pParseCxt->pCatalog, &name);
2✔
976
  if (TSDB_CODE_SUCCESS == code) {
2!
977
    code = collectMetaKeyFromRealTableImpl(pCxt, pStmt->dbName, pStmt->tableName, AUTH_TYPE_READ);
2✔
978
  }
979
  return code;
2✔
980
}
981

982
static int32_t collectMetaKeyFromShowSubscriptions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
983
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SUBSCRIPTIONS,
2✔
984
                                 pCxt->pMetaCache);
985
}
986

987
static int32_t collectMetaKeyFromCompactDatabase(SCollectMetaKeyCxt* pCxt, SCompactDatabaseStmt* pStmt) {
9✔
988
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
9✔
989
}
990

991
static int32_t collectMetaKeyFromCompactVgroups(SCollectMetaKeyCxt* pCxt, SCompactVgroupsStmt* pStmt) {
×
992
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
×
993
}
994

995
static int32_t collectMetaKeyFromGrant(SCollectMetaKeyCxt* pCxt, SGrantStmt* pStmt) {
414✔
996
  if ('\0' == pStmt->tabName[0]) {
414✔
997
    return TSDB_CODE_SUCCESS;
180✔
998
  }
999
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->objName, pStmt->tabName, pCxt->pMetaCache);
234✔
1000
}
1001

1002
static int32_t collectMetaKeyFromRevoke(SCollectMetaKeyCxt* pCxt, SRevokeStmt* pStmt) {
414✔
1003
  if ('\0' == pStmt->tabName[0]) {
414✔
1004
    return TSDB_CODE_SUCCESS;
180✔
1005
  }
1006
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->objName, pStmt->tabName, pCxt->pMetaCache);
234✔
1007
}
1008

1009
static int32_t collectMetaKeyFromCreateViewStmt(SCollectMetaKeyCxt* pCxt, SCreateViewStmt* pStmt) {
1✔
1010
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache);
1✔
1011
  if (TSDB_CODE_SUCCESS == code) {
1!
1012
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, AUTH_TYPE_WRITE,
1✔
1013
                                  pCxt->pMetaCache);
1014
  }
1015
  if (TSDB_CODE_SUCCESS == code) {
1!
1016
    code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName,
1✔
1017
                                      AUTH_TYPE_ALTER, pCxt->pMetaCache);
1018
  }
1019
  return code;
1✔
1020
}
1021

1022
static int32_t collectMetaKeyFromDropViewStmt(SCollectMetaKeyCxt* pCxt, SDropViewStmt* pStmt) {
×
1023
  int32_t code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName,
×
1024
                                            pStmt->viewName, AUTH_TYPE_ALTER, pCxt->pMetaCache);
×
1025
  pCxt->pMetaCache->forceFetchViewMeta = true;
×
1026
  return code;
×
1027
}
1028

1029
static int32_t collectMetaKeyFromCreateTSMAStmt(SCollectMetaKeyCxt* pCxt, SCreateTSMAStmt* pStmt) {
×
1030
  int32_t code;
1031
  if (pStmt->pOptions->recursiveTsma) {
×
1032
    // if creating recursive tsma, the tablename is tsmaName
1033
    code = reserveTSMAInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
×
1034
    if (TSDB_CODE_SUCCESS == code) {
×
1035
      char dstTbName[TSDB_TABLE_NAME_LEN] = {0};
×
1036
      snprintf(dstTbName, TSDB_TABLE_NAME_LEN, "%s" TSMA_RES_STB_POSTFIX, pStmt->tableName);
×
1037
      code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, dstTbName, pCxt->pMetaCache);
×
1038
      if (TSDB_CODE_SUCCESS == code) {
×
1039
        code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, dstTbName, pCxt->pMetaCache);
×
1040
      }
1041
    }
1042
  } else {
1043
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
×
1044
    if (TSDB_CODE_SUCCESS == code) {
×
1045
      code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
×
1046
    }
1047
  }
1048
  if (TSDB_CODE_SUCCESS == code) {
×
1049
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
×
1050
  }
1051
  if (TSDB_CODE_SUCCESS == code) {
×
1052
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
×
1053
  }
1054
  return code;
×
1055
}
1056

1057
static int32_t collectMetaKeyFromDropTSMAStmt(SCollectMetaKeyCxt* pCxt, SDropTSMAStmt* pStmt) {
×
1058
  int32_t code;
1059
  code = reserveTSMAInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tsmaName, pCxt->pMetaCache);
×
1060
  if (TSDB_CODE_SUCCESS == code) {
×
1061
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
×
1062
  }
1063
  if (TSDB_CODE_SUCCESS == code) {
×
1064
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
×
1065
  }
1066
  return code;
×
1067
}
1068

1069
static int32_t collectMetaKeyFromShowUsage(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
1070
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_DISK_USAGE,
×
1071
                                         pCxt->pMetaCache);
1072
  if (TSDB_CODE_SUCCESS == code) {
×
1073
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
×
1074
  }
1075
  if (TSDB_CODE_SUCCESS == code) {
×
1076
    code =
1077
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
×
1078
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
1079
  }
1080
  return code;
×
1081
}
1082

1083
static int32_t collectMetaKeyFromShowTSMASStmt(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
1084
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TSMAS,
×
1085
                                 pCxt->pMetaCache);
1086
}
1087

1088
static int32_t collectMetaKeyFromShowAlive(SCollectMetaKeyCxt* pCxt, SShowAliveStmt* pStmt) {
×
1089
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VGROUPS,
×
1090
                                         pCxt->pMetaCache);
1091
  if (TSDB_CODE_SUCCESS == code) {
×
1092
    // just to verify whether the database exists
1093
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
×
1094
  }
1095
  return code;
×
1096
}
1097

1098
static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
9,198✔
1099
  pCxt->pStmt = pStmt;
9,198✔
1100
  switch (nodeType(pStmt)) {
9,198!
1101
    case QUERY_NODE_SET_OPERATOR:
10✔
1102
      return collectMetaKeyFromSetOperator(pCxt, (SSetOperator*)pStmt);
10✔
1103
    case QUERY_NODE_SELECT_STMT:
4,714✔
1104
      return collectMetaKeyFromSelect(pCxt, (SSelectStmt*)pStmt);
4,714✔
1105
    case QUERY_NODE_ALTER_DATABASE_STMT:
100✔
1106
      return collectMetaKeyFromAlterDatabase(pCxt, (SAlterDatabaseStmt*)pStmt);
100✔
1107
    case QUERY_NODE_FLUSH_DATABASE_STMT:
101✔
1108
      return collectMetaKeyFromFlushDatabase(pCxt, (SFlushDatabaseStmt*)pStmt);
101✔
1109
    case QUERY_NODE_CREATE_TABLE_STMT:
704✔
1110
      return collectMetaKeyFromCreateTable(pCxt, (SCreateTableStmt*)pStmt);
704✔
1111
    case QUERY_NODE_CREATE_VIRTUAL_TABLE_STMT:
190✔
1112
      return collectMetaKeyFromCreateVTable(pCxt, (SCreateVTableStmt*)pStmt);
190✔
1113
    case QUERY_NODE_CREATE_VIRTUAL_SUBTABLE_STMT:
166✔
1114
      return collectMetaKeyFromCreateVSubTable(pCxt, (SCreateVSubTableStmt*)pStmt);
166✔
1115
    case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
589✔
1116
      return collectMetaKeyFromCreateMultiTable(pCxt, (SCreateMultiTablesStmt*)pStmt);
589✔
1117
    case QUERY_NODE_CREATE_SUBTABLE_FROM_FILE_CLAUSE:
×
1118
      return collectMetaKeyFromCreateSubTableFromFile(pCxt, (SCreateSubTableFromFileClause*)pStmt);
×
1119
    case QUERY_NODE_DROP_TABLE_STMT:
16✔
1120
      return collectMetaKeyFromDropTable(pCxt, (SDropTableStmt*)pStmt);
16✔
1121
    case QUERY_NODE_DROP_SUPER_TABLE_STMT:
3✔
1122
      return collectMetaKeyFromDropStable(pCxt, (SDropSuperTableStmt*)pStmt);
3✔
1123
    case QUERY_NODE_DROP_VIRTUAL_TABLE_STMT:
50✔
1124
      return collectMetaKeyFromDropVtable(pCxt, (SDropVirtualTableStmt*)pStmt);
50✔
1125
    case QUERY_NODE_ALTER_TABLE_STMT:
34✔
1126
      return collectMetaKeyFromAlterTable(pCxt, (SAlterTableStmt*)pStmt);
34✔
1127
    case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
42✔
1128
      return collectMetaKeyFromAlterStable(pCxt, (SAlterTableStmt*)pStmt);
42✔
1129
    case QUERY_NODE_ALTER_VIRTUAL_TABLE_STMT:
433✔
1130
      return collectMetaKeyFromAlterVtable(pCxt, (SAlterTableStmt*)pStmt);
433✔
1131
    case QUERY_NODE_USE_DATABASE_STMT:
421✔
1132
      return collectMetaKeyFromUseDatabase(pCxt, (SUseDatabaseStmt*)pStmt);
421✔
1133
    case QUERY_NODE_CREATE_INDEX_STMT:
4✔
1134
      return collectMetaKeyFromCreateIndex(pCxt, (SCreateIndexStmt*)pStmt);
4✔
1135
    case QUERY_NODE_CREATE_TOPIC_STMT:
17✔
1136
      return collectMetaKeyFromCreateTopic(pCxt, (SCreateTopicStmt*)pStmt);
17✔
1137
    case QUERY_NODE_EXPLAIN_STMT:
7✔
1138
      return collectMetaKeyFromExplain(pCxt, (SExplainStmt*)pStmt);
7✔
1139
    case QUERY_NODE_DESCRIBE_STMT:
9✔
1140
      return collectMetaKeyFromDescribe(pCxt, (SDescribeStmt*)pStmt);
9✔
1141
    case QUERY_NODE_COMPACT_DATABASE_STMT:
9✔
1142
      return collectMetaKeyFromCompactDatabase(pCxt, (SCompactDatabaseStmt*)pStmt);
9✔
1143
    case QUERY_NODE_COMPACT_VGROUPS_STMT:
×
1144
      return collectMetaKeyFromCompactVgroups(pCxt, (SCompactVgroupsStmt*)pStmt);
×
1145
    case QUERY_NODE_CREATE_STREAM_STMT:
37✔
1146
      return collectMetaKeyFromCreateStream(pCxt, (SCreateStreamStmt*)pStmt);
37✔
1147
    case QUERY_NODE_GRANT_STMT:
414✔
1148
      return collectMetaKeyFromGrant(pCxt, (SGrantStmt*)pStmt);
414✔
1149
    case QUERY_NODE_REVOKE_STMT:
414✔
1150
      return collectMetaKeyFromRevoke(pCxt, (SRevokeStmt*)pStmt);
414✔
1151
    case QUERY_NODE_SHOW_DNODES_STMT:
3✔
1152
      return collectMetaKeyFromShowDnodes(pCxt, (SShowStmt*)pStmt);
3✔
1153
    case QUERY_NODE_SHOW_MNODES_STMT:
2✔
1154
      return collectMetaKeyFromShowMnodes(pCxt, (SShowStmt*)pStmt);
2✔
1155
    case QUERY_NODE_SHOW_MODULES_STMT:
×
1156
      return collectMetaKeyFromShowModules(pCxt, (SShowStmt*)pStmt);
×
1157
    case QUERY_NODE_SHOW_QNODES_STMT:
3✔
1158
      return collectMetaKeyFromShowQnodes(pCxt, (SShowStmt*)pStmt);
3✔
1159
    case QUERY_NODE_SHOW_SNODES_STMT:
1✔
1160
      return collectMetaKeyFromShowSnodes(pCxt, (SShowStmt*)pStmt);
1✔
1161
    case QUERY_NODE_SHOW_ANODES_STMT:
3✔
1162
      return collectMetaKeyFromShowAnodes(pCxt, (SShowStmt*)pStmt);
3✔
1163
    case QUERY_NODE_SHOW_ANODES_FULL_STMT:
1✔
1164
      return collectMetaKeyFromShowAnodesFull(pCxt, (SShowStmt*)pStmt);
1✔
1165
    case QUERY_NODE_SHOW_BNODES_STMT:
×
1166
      return collectMetaKeyFromShowBnodes(pCxt, (SShowStmt*)pStmt);
×
1167
    case QUERY_NODE_SHOW_ARBGROUPS_STMT:
×
1168
      return collectMetaKeyFromShowArbGroups(pCxt, (SShowStmt*)pStmt);
×
1169
    case QUERY_NODE_SHOW_CLUSTER_STMT:
2✔
1170
      return collectMetaKeyFromShowCluster(pCxt, (SShowStmt*)pStmt);
2✔
1171
    case QUERY_NODE_SHOW_DATABASES_STMT:
3✔
1172
      return collectMetaKeyFromShowDatabases(pCxt, (SShowStmt*)pStmt);
3✔
1173
    case QUERY_NODE_SHOW_FUNCTIONS_STMT:
2✔
1174
      return collectMetaKeyFromShowFunctions(pCxt, (SShowStmt*)pStmt);
2✔
1175
    case QUERY_NODE_SHOW_INDEXES_STMT:
4✔
1176
      return collectMetaKeyFromShowIndexes(pCxt, (SShowStmt*)pStmt);
4✔
1177
    case QUERY_NODE_SHOW_STABLES_STMT:
13✔
1178
      return collectMetaKeyFromShowStables(pCxt, (SShowStmt*)pStmt);
13✔
1179
    case QUERY_NODE_SHOW_STREAMS_STMT:
2✔
1180
      return collectMetaKeyFromShowStreams(pCxt, (SShowStmt*)pStmt);
2✔
1181
    case QUERY_NODE_SHOW_TABLES_STMT:
96✔
1182
    case QUERY_NODE_SHOW_VTABLES_STMT:
1183
      return collectMetaKeyFromShowTables(pCxt, (SShowStmt*)pStmt);
96✔
1184
    case QUERY_NODE_SHOW_FILESETS_STMT:
×
1185
      return collectMetaKeyFromShowFilesets(pCxt, (SShowStmt*)pStmt);
×
1186
    case QUERY_NODE_SHOW_TAGS_STMT:
2✔
1187
      return collectMetaKeyFromShowTags(pCxt, (SShowStmt*)pStmt);
2✔
1188
    case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
6✔
1189
      return collectMetaKeyFromShowStableTags(pCxt, (SShowTableTagsStmt*)pStmt);
6✔
1190
    case QUERY_NODE_SHOW_USERS_STMT:
3✔
1191
      return collectMetaKeyFromShowUsers(pCxt, (SShowStmt*)pStmt);
3✔
1192
    case QUERY_NODE_SHOW_USERS_FULL_STMT:
×
1193
      return collectMetaKeyFromShowUsersFull(pCxt, (SShowStmt*)pStmt);
×
1194
    case QUERY_NODE_SHOW_LICENCES_STMT:
10✔
1195
      return collectMetaKeyFromShowLicence(pCxt, (SShowStmt*)pStmt);
10✔
1196
    case QUERY_NODE_SHOW_VGROUPS_STMT:
5✔
1197
      return collectMetaKeyFromShowVgroups(pCxt, (SShowStmt*)pStmt);
5✔
1198
    case QUERY_NODE_SHOW_TOPICS_STMT:
×
1199
      return collectMetaKeyFromShowTopics(pCxt, (SShowStmt*)pStmt);
×
1200
    case QUERY_NODE_SHOW_CONSUMERS_STMT:
2✔
1201
      return collectMetaKeyFromShowConsumers(pCxt, (SShowStmt*)pStmt);
2✔
1202
    case QUERY_NODE_SHOW_CONNECTIONS_STMT:
×
1203
      return collectMetaKeyFromShowConnections(pCxt, (SShowStmt*)pStmt);
×
1204
    case QUERY_NODE_SHOW_QUERIES_STMT:
×
1205
      return collectMetaKeyFromShowQueries(pCxt, (SShowStmt*)pStmt);
×
1206
    case QUERY_NODE_SHOW_VARIABLES_STMT:
2✔
1207
      return collectMetaKeyFromShowVariables(pCxt, (SShowStmt*)pStmt);
2✔
1208
    case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
4✔
1209
      return collectMetaKeyFromShowDnodeVariables(pCxt, (SShowDnodeVariablesStmt*)pStmt);
4✔
1210
    case QUERY_NODE_SHOW_VNODES_STMT:
4✔
1211
      return collectMetaKeyFromShowVnodes(pCxt, (SShowVnodesStmt*)pStmt);
4✔
1212
    case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
2✔
1213
      return collectMetaKeyFromShowUserPrivileges(pCxt, (SShowStmt*)pStmt);
2✔
1214
    case QUERY_NODE_SHOW_VIEWS_STMT:
×
1215
      return collectMetaKeyFromShowViews(pCxt, (SShowStmt*)pStmt);
×
1216
    case QUERY_NODE_SHOW_COMPACTS_STMT:
×
1217
      return collectMetaKeyFromShowCompacts(pCxt, (SShowStmt*)pStmt);
×
1218
    case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT:
×
1219
      return collectMetaKeyFromShowCompactDetails(pCxt, (SShowStmt*)pStmt);
×
1220
    case QUERY_NODE_SHOW_TRANSACTION_DETAILS_STMT:
×
1221
      return collectMetaKeyFromShowTransactionDetails(pCxt, (SShowStmt*)pStmt);
×
1222
    case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
×
1223
      return collectMetaKeyFromShowGrantsFull(pCxt, (SShowStmt*)pStmt);
×
1224
    case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
×
1225
      return collectMetaKeyFromShowGrantsLogs(pCxt, (SShowStmt*)pStmt);
×
1226
    case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
×
1227
      return collectMetaKeyFromShowClusterMachines(pCxt, (SShowStmt*)pStmt);
×
1228
    case QUERY_NODE_SHOW_ENCRYPTIONS_STMT:
×
1229
      return collectMetaKeyFromShowEncryptions(pCxt, (SShowStmt*)pStmt);
×
1230
    case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
2✔
1231
      return collectMetaKeyFromShowCreateDatabase(pCxt, (SShowCreateDatabaseStmt*)pStmt);
2✔
1232
    case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
6✔
1233
    case QUERY_NODE_SHOW_CREATE_VTABLE_STMT:
1234
    case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
1235
      return collectMetaKeyFromShowCreateTable(pCxt, (SShowCreateTableStmt*)pStmt);
6✔
1236
    case QUERY_NODE_SHOW_CREATE_VIEW_STMT:
×
1237
      return collectMetaKeyFromShowCreateView(pCxt, (SShowCreateViewStmt*)pStmt);
×
1238
    case QUERY_NODE_SHOW_APPS_STMT:
×
1239
      return collectMetaKeyFromShowApps(pCxt, (SShowStmt*)pStmt);
×
1240
    case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
2✔
1241
      return collectMetaKeyFromShowTransactions(pCxt, (SShowStmt*)pStmt);
2✔
1242
    case QUERY_NODE_SHOW_USAGE_STMT:
×
1243
      return collectMetaKeyFromShowUsage(pCxt, (SShowStmt*)pStmt);
×
1244
    case QUERY_NODE_DELETE_STMT:
10✔
1245
      return collectMetaKeyFromDelete(pCxt, (SDeleteStmt*)pStmt);
10✔
1246
    case QUERY_NODE_INSERT_STMT:
2✔
1247
      return collectMetaKeyFromInsert(pCxt, (SInsertStmt*)pStmt);
2✔
1248
    case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
2✔
1249
      return collectMetaKeyFromShowBlockDist(pCxt, (SShowTableDistributedStmt*)pStmt);
2✔
1250
    case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
2✔
1251
      return collectMetaKeyFromShowSubscriptions(pCxt, (SShowStmt*)pStmt);
2✔
1252
    case QUERY_NODE_CREATE_VIEW_STMT:
1✔
1253
      return collectMetaKeyFromCreateViewStmt(pCxt, (SCreateViewStmt*)pStmt);
1✔
1254
    case QUERY_NODE_DROP_VIEW_STMT:
×
1255
      return collectMetaKeyFromDropViewStmt(pCxt, (SDropViewStmt*)pStmt);
×
1256
    case QUERY_NODE_CREATE_TSMA_STMT:
×
1257
      return collectMetaKeyFromCreateTSMAStmt(pCxt, (SCreateTSMAStmt*)pStmt);
×
1258
    case QUERY_NODE_DROP_TSMA_STMT:
×
1259
      return collectMetaKeyFromDropTSMAStmt(pCxt, (SDropTSMAStmt*)pStmt);
×
1260
      break;
1261
    case QUERY_NODE_SHOW_TSMAS_STMT:
×
1262
      return collectMetaKeyFromShowTSMASStmt(pCxt, (SShowStmt*)pStmt);
×
1263
    case QUERY_NODE_SHOW_DB_ALIVE_STMT:
×
1264
    case QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT:
1265
      return collectMetaKeyFromShowAlive(pCxt, (SShowAliveStmt*)pStmt);
×
1266
    default:
512✔
1267
      break;
512✔
1268
  }
1269
  return TSDB_CODE_SUCCESS;
512✔
1270
}
1271

1272
int32_t collectMetaKey(SParseContext* pParseCxt, SQuery* pQuery, SParseMetaCache* pMetaCache) {
9,046✔
1273
  SCollectMetaKeyCxt cxt = {.pParseCxt = pParseCxt, .pMetaCache = pMetaCache, .pStmt = pQuery->pRoot};
9,046✔
1274
  return collectMetaKeyFromQuery(&cxt, pQuery->pRoot);
9,046✔
1275
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc