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

taosdata / TDengine / #4113

17 May 2025 06:43AM UTC coverage: 62.054% (-0.8%) from 62.857%
#4113

push

travis-ci

web-flow
Merge pull request #31115 from taosdata/merge/mainto3.0

merge: from main to 3.0 branch

154737 of 318088 branches covered (48.65%)

Branch coverage included in aggregate %.

175 of 225 new or added lines in 20 files covered. (77.78%)

5853 existing lines in 216 files now uncovered.

239453 of 317147 relevant lines covered (75.5%)

15121865.73 hits per line

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

83.9
/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) {
1,355,565✔
33
  *pQuery = NULL;
1,355,565✔
34
  int32_t code = nodesMakeNode(QUERY_NODE_QUERY, (SNode**)pQuery);
1,355,565✔
35
  if (NULL == *pQuery) {
1,355,664!
36
    return code;
×
37
  }
38
  (*pQuery)->pRoot = pRootNode;
1,355,664✔
39
  (*pQuery)->placeholderNum = placeholderNo;
1,355,664✔
40
  TSWAP((*pQuery)->pPlaceholderValues, *pPlaceholderValues);
1,355,664✔
41
  (*pQuery)->execStage = QUERY_EXEC_STAGE_ANALYSE;
1,355,664✔
42

43
  return TSDB_CODE_SUCCESS;
1,355,664✔
44
}
45

46
int32_t parse(SParseContext* pParseCxt, SQuery** pQuery) {
1,384,974✔
47
  SAstCreateContext cxt;
48
  initAstCreateContext(pParseCxt, &cxt);
1,384,974✔
49
  void* pParser = ParseAlloc((FMalloc)taosMemMalloc);
1,385,040✔
50
  if (!pParser) return terrno;
1,385,035!
51
  int32_t i = 0;
1,385,035✔
52
  while (1) {
71,923,658✔
53
    SToken t0 = {0};
73,308,693✔
54
    if (cxt.pQueryCxt->pSql[i] == 0) {
73,308,693✔
55
      Parse(pParser, 0, t0, &cxt);
862,236✔
56
      goto abort_parse;
1,396,585✔
57
    }
58
    t0.n = tGetToken((char*)&cxt.pQueryCxt->pSql[i], &t0.type);
72,446,457✔
59
    t0.z = (char*)(cxt.pQueryCxt->pSql + i);
72,442,309✔
60
    i += t0.n;
72,442,309✔
61

62
    switch (t0.type) {
72,442,309!
63
      case TK_NK_SPACE:
25,200,509✔
64
      case TK_NK_COMMENT: {
65
        break;
25,200,509✔
66
      }
67
      case TK_NK_SEMI: {
495,395✔
68
        Parse(pParser, 0, t0, &cxt);
495,395✔
69
        goto abort_parse;
495,405✔
70
      }
71
      case TK_NK_ILLEGAL: {
1,741✔
72
        snprintf(cxt.pQueryCxt->pMsg, cxt.pQueryCxt->msgLen, "unrecognized token: \"%s\"", t0.z);
1,741✔
73
        cxt.errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
1,741✔
74
        goto abort_parse;
1,741✔
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:
46,744,664✔
82
        // ParseTrace(stdout, "");
83
        Parse(pParser, t0.type, t0, &cxt);
46,744,664✔
84
        if (TSDB_CODE_SUCCESS != cxt.errCode) {
46,760,407✔
85
          goto abort_parse;
37,258✔
86
        }
87
    }
88
  }
89

90
abort_parse:
1,396,585✔
91
  ParseFree(pParser, (FFree)taosAutoMemoryFree);
1,396,585✔
92
  if (TSDB_CODE_SUCCESS == cxt.errCode) {
1,384,977✔
93
    int32_t code = buildQueryAfterParse(pQuery, cxt.pRootNode, cxt.placeholderNo, &cxt.pPlaceholderValues);
1,355,583✔
94
    if (TSDB_CODE_SUCCESS != code) {
1,355,672!
95
      return code;
×
96
    }
97
  }
98
  taosArrayDestroy(cxt.pPlaceholderValues);
1,385,066✔
99
  return cxt.errCode;
1,384,967✔
100
}
101

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

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

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

119
static EDealRes collectMetaKeyFromFunction(SCollectMetaKeyFromExprCxt* pCxt, SFunctionNode* pFunc) {
3,291,662✔
120
  switch (fmGetFuncType(pFunc->functionName)) {
3,291,662✔
121
    case FUNCTION_TYPE_LAST_ROW:
66,946✔
122
    case FUNCTION_TYPE_LAST:
123
      pCxt->hasLastRowOrLast = true;
66,946✔
124
      break;
66,946✔
125
    case FUNCTION_TYPE_UDF:
215✔
126
      pCxt->errCode = reserveUdfInCache(pFunc->functionName, pCxt->pComCxt->pMetaCache);
215✔
127
      break;
216✔
128
    default:
3,224,501✔
129
      break;
3,224,501✔
130
  }
131
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
3,291,663✔
132
}
133

134
static bool needGetTableIndex(SNode* pStmt) {
1,281,019✔
135
  if (QUERY_SMA_OPTIMIZE_ENABLE == tsQuerySmaOptimize && QUERY_NODE_SELECT_STMT == nodeType(pStmt)) {
1,281,019!
136
    SSelectStmt* pSelect = (SSelectStmt*)pStmt;
1,781✔
137
    return (NULL != pSelect->pWindow && QUERY_NODE_INTERVAL_WINDOW == nodeType(pSelect->pWindow));
1,781!
138
  }
139
  return false;
1,279,238✔
140
}
141

142
static int32_t collectMetaKeyFromInsTagsImpl(SCollectMetaKeyCxt* pCxt, SName* pName) {
9,305✔
143
  if (0 == pName->type) {
9,305✔
144
    return TSDB_CODE_SUCCESS;
7,560✔
145
  }
146
  if (TSDB_DB_NAME_T == pName->type) {
1,745✔
147
    return reserveDbVgInfoInCache(pName->acctId, pName->dbname, pCxt->pMetaCache);
451✔
148
  }
149
  return reserveTableVgroupInCacheExt(pName, pCxt->pMetaCache);
1,294✔
150
}
151

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

162
static int32_t collectMetaKeyFromRealTableImpl(SCollectMetaKeyCxt* pCxt, const char* pDb, const char* pTable,
1,280,972✔
163
                                               AUTH_TYPE authType) {
164
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
1,280,972✔
165
  if (TSDB_CODE_SUCCESS == code) {
1,281,031!
166
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
1,281,032✔
167
  }
168
  if (TSDB_CODE_SUCCESS == code) {
1,281,031✔
169
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pDb, pTable, authType,
1,281,023✔
170
                                  pCxt->pMetaCache);
171
  }
172
#ifdef TD_ENTERPRISE
173
  if (TSDB_CODE_SUCCESS == code && NULL != pCxt->pParseCxt->pEffectiveUser) {
1,281,040✔
174
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pEffectiveUser, pDb, pTable, authType,
680✔
175
                                  pCxt->pMetaCache);
176
  }
177
#endif
178
  if (TSDB_CODE_SUCCESS == code) {
1,281,040✔
179
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pDb, pCxt->pMetaCache);
1,281,032✔
180
  }
181
  if (TSDB_CODE_SUCCESS == code && needGetTableIndex(pCxt->pStmt)) {
1,281,040✔
182
    code = reserveTableIndexInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
1,417✔
183
  }
184
  if (TSDB_CODE_SUCCESS == code && (0 == strcmp(pTable, TSDB_INS_TABLE_DNODE_VARIABLES))) {
1,281,020✔
185
    code = reserveDnodeRequiredInCache(pCxt->pMetaCache);
7✔
186
  }
187
  if (TSDB_CODE_SUCCESS == code &&
1,281,020✔
188
      (0 == strcmp(pTable, TSDB_INS_TABLE_TAGS) || 0 == strcmp(pTable, TSDB_INS_TABLE_TABLES) ||
1,281,017✔
189
       0 == strcmp(pTable, TSDB_INS_TABLE_COLS) || 0 == strcmp(pTable, TSDB_INS_DISK_USAGE) ||
1,278,603✔
190
       0 == strcmp(pTable, TSDB_INS_TABLE_FILESETS)) &&
1,271,726!
191
      QUERY_NODE_SELECT_STMT == nodeType(pCxt->pStmt)) {
9,291!
192
    code = collectMetaKeyFromInsTags(pCxt);
9,305✔
193
  }
194
  if (TSDB_CODE_SUCCESS == code && QUERY_SMA_OPTIMIZE_ENABLE == tsQuerySmaOptimize &&
1,281,020!
195
      QUERY_NODE_SELECT_STMT == nodeType(pCxt->pStmt)) {
1,781!
196
    code = reserveTableTSMAInfoInCache(pCxt->pParseCxt->acctId, pDb, pTable, pCxt->pMetaCache);
1,781✔
197
  }
198
  return code;
1,281,016✔
199
}
200

201
static EDealRes collectMetaKeyFromRealTable(SCollectMetaKeyFromExprCxt* pCxt, SRealTableNode* pRealTable) {
1,195,728✔
202
  pCxt->errCode = collectMetaKeyFromRealTableImpl(pCxt->pComCxt, pRealTable->table.dbName, pRealTable->table.tableName,
1,195,728✔
203
                                                  AUTH_TYPE_READ);
204
  if (TSDB_CODE_SUCCESS == pCxt->errCode && pCxt->pComCxt->collectVSubTables) {
1,195,756!
205
    pCxt->errCode = reserveVSubTableInCache(pCxt->pComCxt->pParseCxt->acctId, pRealTable->table.dbName, pRealTable->table.tableName, pCxt->pComCxt->pMetaCache);
1,218✔
206
  }
207
  if (TSDB_CODE_SUCCESS == pCxt->errCode && pCxt->pComCxt->collectVStbRefDbs) {
1,195,756!
208
    pCxt->errCode = reserveVStbRefDbsInCache(pCxt->pComCxt->pParseCxt->acctId, pRealTable->table.dbName, pRealTable->table.tableName, pCxt->pComCxt->pMetaCache);
937,405✔
209
  }
210
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
1,195,751!
211
}
212

213
static EDealRes collectMetaKeyFromTempTable(SCollectMetaKeyFromExprCxt* pCxt, STempTableNode* pTempTable) {
309,816✔
214
  pCxt->errCode = collectMetaKeyFromQuery(pCxt->pComCxt, pTempTable->pSubquery);
309,816✔
215
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
309,817!
216
}
217

218
static int32_t isTbnameEqCondOperator(SOperatorNode* pOperator, char** ppTableName) {
1,297,719✔
219
  if (pOperator->opType != OP_TYPE_EQUAL) {
1,297,719✔
220
    return TSDB_CODE_SUCCESS;
1,209,870✔
221
  }
222

223
  SValueNode* pValueNode = NULL;
87,849✔
224
  if (nodeType(pOperator->pLeft) == QUERY_NODE_FUNCTION &&
87,849✔
225
      0 == strcasecmp(((SFunctionNode*)(pOperator->pLeft))->functionName, "tbname") &&
22,637✔
226
      nodeType(pOperator->pRight) == QUERY_NODE_VALUE) {
5,737✔
227
    pValueNode = (SValueNode*)pOperator->pRight;
5,732✔
228
  } else if (nodeType(pOperator->pRight) == QUERY_NODE_FUNCTION &&
82,117✔
229
             0 == strcasecmp(((SFunctionNode*)(pOperator->pRight))->functionName, "tbname") &&
327✔
230
             nodeType(pOperator->pLeft) == QUERY_NODE_VALUE) {
5!
231
    pValueNode = (SValueNode*)pOperator->pLeft;
×
232
  } else {
233
    return TSDB_CODE_SUCCESS;
82,117✔
234
  }
235

236
  *ppTableName = pValueNode->literal;
5,732✔
237

238
  return TSDB_CODE_SUCCESS;
5,732✔
239
}
240

241
static EDealRes collectMetaKeyFromOperator(SCollectMetaKeyFromExprCxt* pCxt, SOperatorNode* pOpNode) {
2,001,082✔
242
  if (!pCxt->tbnameCollect) {
2,001,082✔
243
    return DEAL_RES_CONTINUE;
703,362✔
244
  }
245

246
  char*   pTableName = NULL;
1,297,720✔
247
  int32_t code = isTbnameEqCondOperator((SOperatorNode*)pOpNode, &pTableName);
1,297,720✔
248
  if (TSDB_CODE_SUCCESS != code) return DEAL_RES_CONTINUE;
1,297,725!
249
  if (pTableName) {
1,297,725✔
250
    SSelectStmt* pSelect = (SSelectStmt*)pCxt->pComCxt->pStmt;
5,732✔
251
    pCxt->errCode = collectMetaKeyFromRealTableImpl(pCxt->pComCxt, ((SRealTableNode*)pSelect->pFromTable)->table.dbName,
5,732✔
252
                                                    pTableName, AUTH_TYPE_READ);
253
  }
254

255
  return TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_CONTINUE : DEAL_RES_ERROR;
1,297,725!
256
}
257

258
static EDealRes collectMetaKeyFromExprImpl(SNode* pNode, void* pContext) {
16,558,004✔
259
  SCollectMetaKeyFromExprCxt* pCxt = pContext;
16,558,004✔
260
  switch (nodeType(pNode)) {
16,558,004✔
261
    case QUERY_NODE_FUNCTION:
3,291,667✔
262
      return collectMetaKeyFromFunction(pCxt, (SFunctionNode*)pNode);
3,291,667✔
263
    case QUERY_NODE_REAL_TABLE:
1,195,748✔
264
      return collectMetaKeyFromRealTable(pCxt, (SRealTableNode*)pNode);
1,195,748✔
265
    case QUERY_NODE_TEMP_TABLE:
309,817✔
266
      return collectMetaKeyFromTempTable(pCxt, (STempTableNode*)pNode);
309,817✔
267
    case QUERY_NODE_OPERATOR:
2,001,093✔
268
      return collectMetaKeyFromOperator(pCxt, (SOperatorNode*)pNode);
2,001,093✔
269
    default:
9,759,679✔
270
      break;
9,759,679✔
271
  }
272
  return DEAL_RES_CONTINUE;
9,759,679✔
273
}
274

275
static int32_t collectMetaKeyFromExprs(SCollectMetaKeyCxt* pCxt, SNodeList* pList) {
84,810✔
276
  SCollectMetaKeyFromExprCxt cxt = {.pComCxt = pCxt, .errCode = TSDB_CODE_SUCCESS, .tbnameCollect = false};
84,810✔
277
  nodesWalkExprs(pList, collectMetaKeyFromExprImpl, &cxt);
84,810✔
278
  return cxt.errCode;
84,810✔
279
}
280

281
static int32_t collectMetaKeyFromSetOperator(SCollectMetaKeyCxt* pCxt, SSetOperator* pStmt) {
84,810✔
282
  int32_t code = collectMetaKeyFromQuery(pCxt, pStmt->pLeft);
84,810✔
283
  if (TSDB_CODE_SUCCESS == code) {
84,810!
284
    code = collectMetaKeyFromQuery(pCxt, pStmt->pRight);
84,810✔
285
  }
286
  if (TSDB_CODE_SUCCESS == code) {
84,810!
287
    code = collectMetaKeyFromExprs(pCxt, pStmt->pOrderByList);
84,810✔
288
  }
289
  return code;
84,810✔
290
}
291

292
static int32_t reserveDbCfgForLastRow(SCollectMetaKeyCxt* pCxt, SNode* pTable) {
51,479✔
293
  if (NULL == pTable || QUERY_NODE_REAL_TABLE != nodeType(pTable)) {
51,479!
294
    return TSDB_CODE_SUCCESS;
7,519✔
295
  }
296
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SRealTableNode*)pTable)->table.dbName, pCxt->pMetaCache);
43,960✔
297
}
298

299
static int32_t collectMetaKeyFromSelect(SCollectMetaKeyCxt* pCxt, SSelectStmt* pStmt) {
1,494,000✔
300
  SCollectMetaKeyFromExprCxt cxt = {.pComCxt = pCxt, .hasLastRowOrLast = false, .errCode = TSDB_CODE_SUCCESS};
1,494,000✔
301
  if (pStmt->pFromTable && QUERY_NODE_REAL_TABLE == nodeType(pStmt->pFromTable)) {
1,494,000✔
302
    cxt.tbnameCollect = true;
936,535✔
303
    cxt.pComCxt->collectVStbRefDbs = true;
936,535✔
304
  }
305
  nodesWalkSelectStmt(pStmt, SQL_CLAUSE_FROM, collectMetaKeyFromExprImpl, &cxt);
1,494,000✔
306
  if (TSDB_CODE_SUCCESS == cxt.errCode && cxt.hasLastRowOrLast) {
1,494,038!
307
    cxt.errCode = reserveDbCfgForLastRow(pCxt, pStmt->pFromTable);
51,204✔
308
  }
309
  return cxt.errCode;
1,494,041✔
310
}
311

312
static int32_t collectMetaKeyFromAlterDatabase(SCollectMetaKeyCxt* pCxt, SAlterDatabaseStmt* pStmt) {
306✔
313
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
306✔
314
}
315

316
static int32_t collectMetaKeyFromFlushDatabase(SCollectMetaKeyCxt* pCxt, SFlushDatabaseStmt* pStmt) {
9,388✔
317
  return reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
9,388✔
318
}
319

320
static int32_t collectMetaKeyFromCreateTable(SCollectMetaKeyCxt* pCxt, SCreateTableStmt* pStmt) {
19,573✔
321
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
19,573✔
322
  if (TSDB_CODE_SUCCESS == code && NULL == pStmt->pTags) {
19,574!
323
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
13,562✔
324
  }
325
  if (TSDB_CODE_SUCCESS == code) {
19,574!
326
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, AUTH_TYPE_WRITE,
19,574✔
327
                                  pCxt->pMetaCache);
328
  }
329
  return code;
19,574✔
330
}
331

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

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

386
  FOREACH(pNode, pTmpNodeList) {
1,154!
387
    SColumnRefNode *pColRef = (SColumnRefNode*)pNode;
942✔
388
    if (NULL == pColRef) {
942!
389
      code = TSDB_CODE_PAR_INVALID_COLUMN;
×
390
      break;
×
391
    }
392
    PAR_ERR_RET(reserveTableMetaInCache(pCxt->pParseCxt->acctId, pColRef->refDbName, pColRef->refTableName,
942!
393
                                        pCxt->pMetaCache));
394
    PAR_ERR_RET(reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pColRef->refDbName, pColRef->refTableName,
942!
395
                                          pCxt->pMetaCache));
396
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pColRef->refDbName,
942!
397
                                       pColRef->refTableName, AUTH_TYPE_READ, pCxt->pMetaCache));
398
  }
399
  return code;
212✔
400
}
401

402
static int32_t collectMetaKeyFromCreateMultiTable(SCollectMetaKeyCxt* pCxt, SCreateMultiTablesStmt* pStmt) {
93,303✔
403
  int32_t code = TSDB_CODE_SUCCESS;
93,303✔
404
  SNode*  pNode = NULL;
93,303✔
405
  FOREACH(pNode, pStmt->pSubTables) {
220,027!
406
    if (pNode->type == QUERY_NODE_CREATE_SUBTABLE_CLAUSE) {
126,629!
407
      SCreateSubTableClause* pClause = (SCreateSubTableClause*)pNode;
126,629✔
408
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
126,629✔
409
      if (TSDB_CODE_SUCCESS == code) {
126,714!
410
        code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName,
126,719✔
411
                                       pCxt->pMetaCache);
412
      }
413
      if (TSDB_CODE_SUCCESS == code) {
126,716!
414
        code =
415
            reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
126,722✔
416
      }
417
      if (TSDB_CODE_SUCCESS == code) {
126,725!
418
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, NULL,
126,734✔
419
                                      AUTH_TYPE_WRITE, pCxt->pMetaCache);
420
      }
421
    } else {
422
      SCreateSubTableFromFileClause* pClause = (SCreateSubTableFromFileClause*)pNode;
×
423
      code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pCxt->pMetaCache);
×
424
      if (TSDB_CODE_SUCCESS == code) {
×
425
        code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName,
×
426
                                       pCxt->pMetaCache);
427
      }
428
      if (TSDB_CODE_SUCCESS == code) {
×
429
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->useDbName, NULL,
×
430
                                      AUTH_TYPE_WRITE, pCxt->pMetaCache);
431
      }
432
    }
433

434
    if (TSDB_CODE_SUCCESS != code) {
126,724!
435
      break;
×
436
    }
437
  }
438
  return code;
93,398✔
439
}
440

441
static int32_t collectMetaKeyFromCreateSubTableFromFile(SCollectMetaKeyCxt*            pCxt,
2✔
442
                                                        SCreateSubTableFromFileClause* pClause) {
443
  int32_t code = TSDB_CODE_SUCCESS;
2✔
444
  SNode*  pNode = NULL;
2✔
445

446
  code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pCxt->pMetaCache);
2✔
447
  if (TSDB_CODE_SUCCESS == code) {
2!
448
    code =
449
        reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->useDbName, pClause->useTableName, pCxt->pMetaCache);
2✔
450
  }
451
  if (TSDB_CODE_SUCCESS == code) {
2!
452
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->useDbName, NULL,
2✔
453
                                  AUTH_TYPE_WRITE, pCxt->pMetaCache);
454
  }
455

456
  return code;
2✔
457
}
458

459
static int32_t collectMetaKeyFromDropTable(SCollectMetaKeyCxt* pCxt, SDropTableStmt* pStmt) {
3,138✔
460
  int32_t code = TSDB_CODE_SUCCESS;
3,138✔
461
  SNode*  pNode = NULL;
3,138✔
462
  FOREACH(pNode, pStmt->pTables) {
7,186!
463
    SDropTableClause* pClause = (SDropTableClause*)pNode;
4,048✔
464
    if (pStmt->withOpt) {
4,048✔
465
      code = reserveTableUidInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
1,021✔
466
      if (TSDB_CODE_SUCCESS == code) {
1,021!
467
        code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
1,021✔
468
      }
469
      if (TSDB_CODE_SUCCESS == code) {
1,021!
470
        code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pClause->dbName, pCxt->pMetaCache);
1,021✔
471
      }
472
    } else {
473
      code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
3,027✔
474
      if (TSDB_CODE_SUCCESS == code) {
3,027!
475
        code =
476
            reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
3,027✔
477
      }
478
      if (TSDB_CODE_SUCCESS == code) {
3,027!
479
        code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName,
3,027✔
480
                                      pClause->tableName, AUTH_TYPE_WRITE, pCxt->pMetaCache);
3,027✔
481
      }
482
    }
483
    if (TSDB_CODE_SUCCESS != code) {
4,048!
484
      break;
×
485
    }
486
  }
487
  return code;
3,138✔
488
}
489

490
static int32_t collectMetaKeyFromDropStable(SCollectMetaKeyCxt* pCxt, SDropSuperTableStmt* pStmt) {
341✔
491
  if (pStmt->withOpt) {
341✔
492
    return reserveTableUidInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
293✔
493
  }
494
  return reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
48✔
495
                                AUTH_TYPE_WRITE, pCxt->pMetaCache);
496
}
497

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

522
static int32_t collectMetaKeyFromAlterTable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
4,481✔
523
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
4,481✔
524
  if (TSDB_CODE_SUCCESS == code) {
4,481!
525
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
4,481✔
526
  }
527
  if (TSDB_CODE_SUCCESS == code) {
4,481!
528
    code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
4,481✔
529
  }
530
  if (TSDB_CODE_SUCCESS == code) {
4,481!
531
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
4,481✔
532
                                  AUTH_TYPE_WRITE, pCxt->pMetaCache);
533
  }
534
  return code;
4,481✔
535
}
536

537
static int32_t collectMetaKeyFromAlterStable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
464✔
538
  int32_t code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
464✔
539
  if (TSDB_CODE_SUCCESS == code) {
464!
540
    code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
464✔
541
  }
542
  if (TSDB_CODE_SUCCESS == code) {
464!
543
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
464✔
544
                                  AUTH_TYPE_WRITE, pCxt->pMetaCache);
545
  }
546
  return code;
464✔
547
}
548

549
static int32_t collectMetaKeyFromAlterVtable(SCollectMetaKeyCxt* pCxt, SAlterTableStmt* pStmt) {
577✔
550
  PAR_ERR_RET(reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache));
577!
551
  PAR_ERR_RET(reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache));
577!
552
  PAR_ERR_RET(reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache));
577!
553
  PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->tableName,
577!
554
                                     AUTH_TYPE_WRITE, pCxt->pMetaCache));
555
  if (pStmt->alterType == TSDB_ALTER_TABLE_ALTER_COLUMN_REF || pStmt->alterType == TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COLUMN_REF) {
577✔
556
    PAR_ERR_RET(reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->refDbName, pStmt->refTableName, pCxt->pMetaCache));
221!
557
    PAR_ERR_RET(reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->refDbName, pStmt->refTableName,
221!
558
                                       AUTH_TYPE_READ, pCxt->pMetaCache));
559
  }
560
  return TSDB_CODE_SUCCESS;
577✔
561
}
562

563
static int32_t collectMetaKeyFromUseDatabase(SCollectMetaKeyCxt* pCxt, SUseDatabaseStmt* pStmt) {
8,209✔
564
  return reserveDbVgVersionInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
8,209✔
565
}
566

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

584
static int32_t collectMetaKeyFromCreateTopic(SCollectMetaKeyCxt* pCxt, SCreateTopicStmt* pStmt) {
632✔
585
  if (NULL != pStmt->pQuery) {
632✔
586
    return collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
511✔
587
  }
588
  if (NULL != pStmt->pWhere) {
121✔
589
    int32_t code = collectMetaKeyFromRealTableImpl(pCxt, pStmt->subDbName, pStmt->subSTbName, AUTH_TYPE_READ);
21✔
590
    return code;
21✔
591
  }
592
  return TSDB_CODE_SUCCESS;
100✔
593
}
594

595
static int32_t collectMetaKeyFromExplain(SCollectMetaKeyCxt* pCxt, SExplainStmt* pStmt) {
126,249✔
596
  return collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
126,249✔
597
}
598

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

617
static int32_t collectMetaKeyFromCreateStream(SCollectMetaKeyCxt* pCxt, SCreateStreamStmt* pStmt) {
1,218✔
618
  pCxt->collectVSubTables = true;
1,218✔
619
  
620
  int32_t code =
621
      reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->targetDbName, pStmt->targetTabName, pCxt->pMetaCache);
1,218✔
622
  if (TSDB_CODE_SUCCESS == code && NULL != pStmt->pSubtable && NULL != pStmt->pQuery) {
1,218!
623
    SSelectStmt* pSelect = (SSelectStmt*)pStmt->pQuery;
271✔
624
    int32_t      code = nodesCloneNode(pStmt->pSubtable, &pSelect->pSubtable);
271✔
625
    if (NULL == pSelect->pSubtable) {
271!
626
      return code;
×
627
    }
628
  }
629
  if (TSDB_CODE_SUCCESS == code) {
1,218!
630
    code = collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
1,218✔
631
  }
632
  if (TSDB_CODE_SUCCESS == code && pStmt->pOptions->fillHistory) {
1,218!
633
    SSelectStmt* pSelect = (SSelectStmt*)pStmt->pQuery;
280✔
634
    code = reserveDbCfgForLastRow(pCxt, pSelect->pFromTable);
280✔
635
  }
636
  return code;
1,218✔
637
}
638

639
static int32_t collectMetaKeyFromShowDnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
136✔
640
  if (pCxt->pParseCxt->enableSysInfo) {
136✔
641
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODES,
132✔
642
                                   pCxt->pMetaCache);
643
  }
644
  return TSDB_CODE_SUCCESS;
4✔
645
}
646

647
static int32_t collectMetaKeyFromShowMnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
54✔
648
  if (pCxt->pParseCxt->enableSysInfo) {
54✔
649
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MNODES,
50✔
650
                                   pCxt->pMetaCache);
651
  }
652
  return TSDB_CODE_SUCCESS;
4✔
653
}
654

655
static int32_t collectMetaKeyFromShowModules(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
656
  if (pCxt->pParseCxt->enableSysInfo) {
×
657
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MODULES,
×
658
                                   pCxt->pMetaCache);
659
  }
660
  return TSDB_CODE_SUCCESS;
×
661
}
662

663
static int32_t collectMetaKeyFromShowQnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
21✔
664
  if (pCxt->pParseCxt->enableSysInfo) {
21✔
665
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_QNODES,
17✔
666
                                   pCxt->pMetaCache);
667
  }
668
  return TSDB_CODE_SUCCESS;
4✔
669
}
670

671
static int32_t collectMetaKeyFromShowSnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
37✔
672
  if (pCxt->pParseCxt->enableSysInfo) {
37✔
673
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SNODES,
29✔
674
                                   pCxt->pMetaCache);
675
  }
676
  return TSDB_CODE_SUCCESS;
8✔
677
}
678

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

684
static int32_t collectMetaKeyFromShowAnodesFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1✔
685
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ANODES_FULL,
1✔
686
                                 pCxt->pMetaCache);
687
}
688

689
static int32_t collectMetaKeyFromShowBnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
690
  if (pCxt->pParseCxt->enableSysInfo) {
×
691
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_BNODES,
×
692
                                   pCxt->pMetaCache);
693
  }
694
  return TSDB_CODE_SUCCESS;
×
695
}
696

697
static int32_t collectMetaKeyFromShowArbGroups(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
16✔
698
  if (pCxt->pParseCxt->enableSysInfo) {
16!
699
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ARBGROUPS,
16✔
700
                                   pCxt->pMetaCache);
701
  }
702
  return TSDB_CODE_SUCCESS;
×
703
}
704

705
static int32_t collectMetaKeyFromShowCluster(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
10✔
706
  if (pCxt->pParseCxt->enableSysInfo) {
10✔
707
    return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CLUSTER,
6✔
708
                                   pCxt->pMetaCache);
709
  }
710
  return TSDB_CODE_SUCCESS;
4✔
711
}
712

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

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

723
static int32_t collectMetaKeyFromShowIndexes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
21✔
724
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_INDEXES,
21✔
725
                                 pCxt->pMetaCache);
726
}
727

728
static int32_t collectMetaKeyFromShowStables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
266✔
729
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_STABLES,
266✔
730
                                         pCxt->pMetaCache);
731
  if (TSDB_CODE_SUCCESS == code) {
266!
732
    code =
733
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
266✔
734
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
735
  }
736
  return code;
266✔
737
}
738

739
static int32_t collectMetaKeyFromShowStreams(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
238✔
740
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_STREAMS,
238✔
741
                                 pCxt->pMetaCache);
742
}
743

744
static int32_t collectMetaKeyFromShowTables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1,348✔
745
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TABLES,
1,348✔
746
                                         pCxt->pMetaCache);
747
  if (TSDB_CODE_SUCCESS == code) {
1,348!
748
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
1,348✔
749
  }
750
  if (TSDB_CODE_SUCCESS == code) {
1,348!
751
    code =
752
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
1,348✔
753
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
754
  }
755
  return code;
1,348✔
756
}
757

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

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

789
static int32_t collectMetaKeyFromShowStableTags(SCollectMetaKeyCxt* pCxt, SShowTableTagsStmt* pStmt) {
10✔
790
  return collectMetaKeyFromRealTableImpl(pCxt, ((SValueNode*)pStmt->pDbName)->literal,
20✔
791
                                         ((SValueNode*)pStmt->pTbName)->literal, AUTH_TYPE_READ);
10✔
792
}
793

794
static int32_t collectMetaKeyFromShowUsers(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
15✔
795
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS,
15✔
796
                                 pCxt->pMetaCache);
797
}
798

799
static int32_t collectMetaKeyFromShowUsersFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
800
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS_FULL,
×
801
                                 pCxt->pMetaCache);
802
}
803

804
static int32_t collectMetaKeyFromShowLicence(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
22✔
805
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_LICENCES,
22✔
806
                                 pCxt->pMetaCache);
807
}
808

809
static int32_t collectMetaKeyFromShowVgroups(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
644✔
810
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VGROUPS,
644✔
811
                                         pCxt->pMetaCache);
812
  if (TSDB_CODE_SUCCESS == code) {
644!
813
    // just to verify whether the database exists
814
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
644✔
815
  }
816
  return code;
644✔
817
}
818

819
static int32_t collectMetaKeyFromShowTopics(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
30✔
820
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TOPICS,
30✔
821
                                 pCxt->pMetaCache);
822
}
823

824
static int32_t collectMetaKeyFromShowConsumers(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
59✔
825
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_CONSUMERS,
59✔
826
                                 pCxt->pMetaCache);
827
}
828

829
static int32_t collectMetaKeyFromShowConnections(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
7✔
830
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_CONNECTIONS,
7✔
831
                                 pCxt->pMetaCache);
832
}
833

834
static int32_t collectMetaKeyFromShowQueries(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
7✔
835
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_QUERIES,
7✔
836
                                 pCxt->pMetaCache);
837
}
838

839
static int32_t collectMetaKeyFromShowVariables(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
180✔
840
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CONFIGS,
180✔
841
                                 pCxt->pMetaCache);
842
}
843

844
static int32_t collectMetaKeyFromShowDnodeVariables(SCollectMetaKeyCxt* pCxt, SShowDnodeVariablesStmt* pStmt) {
352✔
845
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
352✔
846
                                         TSDB_INS_TABLE_DNODE_VARIABLES, pCxt->pMetaCache);
847
  if (TSDB_CODE_SUCCESS == code) {
352!
848
    code = reserveDnodeRequiredInCache(pCxt->pMetaCache);
352✔
849
  }
850
  return code;
352✔
851
}
852

853
static int32_t collectMetaKeyFromShowVnodes(SCollectMetaKeyCxt* pCxt, SShowVnodesStmt* pStmt) {
16✔
854
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VNODES,
16✔
855
                                 pCxt->pMetaCache);
856
}
857

858
static int32_t collectMetaKeyFromShowUserPrivileges(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
16✔
859
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USER_PRIVILEGES,
16✔
860
                                 pCxt->pMetaCache);
861
}
862

863
static int32_t collectMetaKeyFromShowViews(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
23✔
864
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VIEWS,
23✔
865
                                         pCxt->pMetaCache);
866
  if (TSDB_CODE_SUCCESS == code) {
23!
867
    code =
868
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
23✔
869
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
870
  }
871
  return code;
23✔
872
}
873

874
static int32_t collectMetaKeyFromShowCompacts(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
537✔
875
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_COMPACTS,
537✔
876
                                         pCxt->pMetaCache);
877
  return code;
537✔
878
}
879

880
static int32_t collectMetaKeyFromShowCompactDetails(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
1✔
881
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
1✔
882
                                         TSDB_INS_TABLE_COMPACT_DETAILS, pCxt->pMetaCache);
883
  return code;
1✔
884
}
885

886
static int32_t collectMetaKeyFromShowTransactionDetails(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
887
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB,
×
888
                                         TSDB_INS_TABLE_TRANSACTION_DETAILS, pCxt->pMetaCache);
889
  return code;
×
890
}
891

892
static int32_t collectMetaKeyFromShowGrantsFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
7✔
893
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_GRANTS_FULL,
7✔
894
                                 pCxt->pMetaCache);
895
}
896

897
static int32_t collectMetaKeyFromShowGrantsLogs(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
7✔
898
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_GRANTS_LOGS,
7✔
899
                                 pCxt->pMetaCache);
900
}
901

902
static int32_t collectMetaKeyFromShowClusterMachines(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
8✔
903
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MACHINES,
8✔
904
                                 pCxt->pMetaCache);
905
}
906

UNCOV
907
static int32_t collectMetaKeyFromShowEncryptions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
×
UNCOV
908
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_ENCRYPTIONS,
×
909
                                 pCxt->pMetaCache);
910
}
911

912
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
27✔
913
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
27✔
914
}
915

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

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

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

957
static int32_t collectMetaKeyFromShowTransactions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
356✔
958
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_TRANS,
356✔
959
                                 pCxt->pMetaCache);
960
}
961

962
static int32_t collectMetaKeyFromDelete(SCollectMetaKeyCxt* pCxt, SDeleteStmt* pStmt) {
79,332✔
963
  STableNode* pTable = (STableNode*)pStmt->pFromTable;
79,332✔
964
  return collectMetaKeyFromRealTableImpl(pCxt, pTable->dbName, pTable->tableName, AUTH_TYPE_WRITE);
79,332✔
965
}
966

967
static int32_t collectMetaKeyFromInsert(SCollectMetaKeyCxt* pCxt, SInsertStmt* pStmt) {
143✔
968
  STableNode* pTable = (STableNode*)pStmt->pTable;
143✔
969
  int32_t     code = collectMetaKeyFromRealTableImpl(pCxt, pTable->dbName, pTable->tableName, AUTH_TYPE_WRITE);
143✔
970
  if (TSDB_CODE_SUCCESS == code) {
143!
971
    code = collectMetaKeyFromQuery(pCxt, pStmt->pQuery);
143✔
972
  }
973
  return code;
143✔
974
}
975

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

987
static int32_t collectMetaKeyFromShowSubscriptions(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
62✔
988
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SUBSCRIPTIONS,
62✔
989
                                 pCxt->pMetaCache);
990
}
991

992
static int32_t collectMetaKeyFromCompactDatabase(SCollectMetaKeyCxt* pCxt, SCompactDatabaseStmt* pStmt) {
49✔
993
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
49✔
994
}
995

996
static int32_t collectMetaKeyFromCompactVgroups(SCollectMetaKeyCxt* pCxt, SCompactVgroupsStmt* pStmt) {
×
997
  return reserveDbCfgInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
×
998
}
999

1000
static int32_t collectMetaKeyFromGrant(SCollectMetaKeyCxt* pCxt, SGrantStmt* pStmt) {
705✔
1001
  if ('\0' == pStmt->tabName[0]) {
705✔
1002
    return TSDB_CODE_SUCCESS;
331✔
1003
  }
1004
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->objName, pStmt->tabName, pCxt->pMetaCache);
374✔
1005
}
1006

1007
static int32_t collectMetaKeyFromRevoke(SCollectMetaKeyCxt* pCxt, SRevokeStmt* pStmt) {
609✔
1008
  if ('\0' == pStmt->tabName[0]) {
609✔
1009
    return TSDB_CODE_SUCCESS;
289✔
1010
  }
1011
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->objName, pStmt->tabName, pCxt->pMetaCache);
320✔
1012
}
1013

1014
static int32_t collectMetaKeyFromCreateViewStmt(SCollectMetaKeyCxt* pCxt, SCreateViewStmt* pStmt) {
275✔
1015
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache);
275✔
1016
  if (TSDB_CODE_SUCCESS == code) {
275!
1017
    code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, AUTH_TYPE_WRITE,
275✔
1018
                                  pCxt->pMetaCache);
1019
  }
1020
  if (TSDB_CODE_SUCCESS == code) {
275!
1021
    code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName,
275✔
1022
                                      AUTH_TYPE_ALTER, pCxt->pMetaCache);
1023
  }
1024
  return code;
275✔
1025
}
1026

1027
static int32_t collectMetaKeyFromDropViewStmt(SCollectMetaKeyCxt* pCxt, SDropViewStmt* pStmt) {
188✔
1028
  int32_t code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName,
188✔
1029
                                            pStmt->viewName, AUTH_TYPE_ALTER, pCxt->pMetaCache);
188✔
1030
  pCxt->pMetaCache->forceFetchViewMeta = true;
188✔
1031
  return code;
188✔
1032
}
1033

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

1062
static int32_t collectMetaKeyFromDropTSMAStmt(SCollectMetaKeyCxt* pCxt, SDropTSMAStmt* pStmt) {
144✔
1063
  int32_t code;
1064
  code = reserveTSMAInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tsmaName, pCxt->pMetaCache);
144✔
1065
  if (TSDB_CODE_SUCCESS == code) {
144!
1066
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
144✔
1067
  }
1068
  if (TSDB_CODE_SUCCESS == code) {
144!
1069
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
144✔
1070
  }
1071
  return code;
144✔
1072
}
1073

1074
static int32_t collectMetaKeyFromShowUsage(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
1075
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_DISK_USAGE,
2✔
1076
                                         pCxt->pMetaCache);
1077
  if (TSDB_CODE_SUCCESS == code) {
2!
1078
    code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache);
2✔
1079
  }
1080
  if (TSDB_CODE_SUCCESS == code) {
2!
1081
    code =
1082
        reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
2✔
1083
                               NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
1084
  }
1085
  return code;
2✔
1086
}
1087

1088
static int32_t collectMetaKeyFromShowTSMASStmt(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
2✔
1089
  return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TSMAS,
2✔
1090
                                 pCxt->pMetaCache);
1091
}
1092

1093
static int32_t collectMetaKeyFromShowAlive(SCollectMetaKeyCxt* pCxt, SShowAliveStmt* pStmt) {
22✔
1094
  int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VGROUPS,
22✔
1095
                                         pCxt->pMetaCache);
1096
  if (TSDB_CODE_SUCCESS == code) {
22!
1097
    // just to verify whether the database exists
1098
    code = reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
22✔
1099
  }
1100
  return code;
22✔
1101
}
1102

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

1277
int32_t collectMetaKey(SParseContext* pParseCxt, SQuery* pQuery, SParseMetaCache* pMetaCache) {
1,354,330✔
1278
  SCollectMetaKeyCxt cxt = {.pParseCxt = pParseCxt, .pMetaCache = pMetaCache, .pStmt = pQuery->pRoot};
1,354,330✔
1279
  return collectMetaKeyFromQuery(&cxt, pQuery->pRoot);
1,354,330✔
1280
}
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