From 4f0c6d3aa4a8ffabd0af582adf7982b008cd97be Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Thu, 11 Aug 2022 15:37:26 +0800 Subject: [PATCH] enh: show command optimize --- include/common/ttokendef.h | 2 +- include/libs/nodes/nodes.h | 15 +- source/libs/function/inc/builtins.h | 2 +- source/libs/nodes/src/nodesCodeFuncs.c | 6 +- source/libs/nodes/src/nodesUtilFuncs.c | 8 +- source/libs/parser/inc/sql.y | 4 +- source/libs/parser/src/parAstParser.c | 2 +- source/libs/parser/src/parTokenizer.c | 2 +- source/libs/parser/src/parTranslater.c | 329 +++++++++++++++++------- source/libs/parser/src/sql.c | 12 +- source/libs/planner/src/planOptimizer.c | 3 + 11 files changed, 253 insertions(+), 132 deletions(-) diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h index 401cb3214b..ca9adf2940 100644 --- a/include/common/ttokendef.h +++ b/include/common/ttokendef.h @@ -154,7 +154,7 @@ #define TK_ACCOUNTS 136 #define TK_APPS 137 #define TK_CONNECTIONS 138 -#define TK_LICENCE 139 +#define TK_LICENCES 139 #define TK_GRANTS 140 #define TK_QUERIES 141 #define TK_SCORES 142 diff --git a/include/libs/nodes/nodes.h b/include/libs/nodes/nodes.h index 1a1ae00ad1..bb75efa00a 100644 --- a/include/libs/nodes/nodes.h +++ b/include/libs/nodes/nodes.h @@ -172,27 +172,24 @@ typedef enum ENodeType { QUERY_NODE_SHOW_TABLES_STMT, QUERY_NODE_SHOW_TAGS_STMT, QUERY_NODE_SHOW_USERS_STMT, - QUERY_NODE_SHOW_LICENCE_STMT, + QUERY_NODE_SHOW_LICENCES_STMT, QUERY_NODE_SHOW_VGROUPS_STMT, QUERY_NODE_SHOW_TOPICS_STMT, QUERY_NODE_SHOW_CONSUMERS_STMT, - QUERY_NODE_SHOW_SUBSCRIBES_STMT, - QUERY_NODE_SHOW_SMAS_STMT, - QUERY_NODE_SHOW_CONFIGS_STMT, QUERY_NODE_SHOW_CONNECTIONS_STMT, QUERY_NODE_SHOW_QUERIES_STMT, - QUERY_NODE_SHOW_VNODES_STMT, QUERY_NODE_SHOW_APPS_STMT, - QUERY_NODE_SHOW_SCORES_STMT, QUERY_NODE_SHOW_VARIABLES_STMT, - QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT, QUERY_NODE_SHOW_DNODE_VARIABLES_STMT, + QUERY_NODE_SHOW_TRANSACTIONS_STMT, + QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT, QUERY_NODE_SHOW_CREATE_DATABASE_STMT, QUERY_NODE_SHOW_CREATE_TABLE_STMT, QUERY_NODE_SHOW_CREATE_STABLE_STMT, - QUERY_NODE_SHOW_TRANSACTIONS_STMT, QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT, - QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT, + QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT, + QUERY_NODE_SHOW_VNODES_STMT, + QUERY_NODE_SHOW_SCORES_STMT, QUERY_NODE_KILL_CONNECTION_STMT, QUERY_NODE_KILL_QUERY_STMT, QUERY_NODE_KILL_TRANSACTION_STMT, diff --git a/source/libs/function/inc/builtins.h b/source/libs/function/inc/builtins.h index 467fb11ae0..e7fcc38818 100644 --- a/source/libs/function/inc/builtins.h +++ b/source/libs/function/inc/builtins.h @@ -49,7 +49,7 @@ typedef struct SBuiltinFuncDefinition { } SBuiltinFuncDefinition; extern const SBuiltinFuncDefinition funcMgtBuiltins[]; -extern const int funcMgtBuiltinsNum; +extern const int32_t funcMgtBuiltinsNum; #ifdef __cplusplus } diff --git a/source/libs/nodes/src/nodesCodeFuncs.c b/source/libs/nodes/src/nodesCodeFuncs.c index d9994af4cb..ab76eb21b8 100644 --- a/source/libs/nodes/src/nodesCodeFuncs.c +++ b/source/libs/nodes/src/nodesCodeFuncs.c @@ -163,7 +163,7 @@ const char* nodesNodeName(ENodeType type) { return "ShowTagsStmt"; case QUERY_NODE_SHOW_USERS_STMT: return "ShowUsersStmt"; - case QUERY_NODE_SHOW_LICENCE_STMT: + case QUERY_NODE_SHOW_LICENCES_STMT: return "ShowGrantsStmt"; case QUERY_NODE_SHOW_VGROUPS_STMT: return "ShowVgroupsStmt"; @@ -171,10 +171,6 @@ const char* nodesNodeName(ENodeType type) { return "ShowTopicsStmt"; case QUERY_NODE_SHOW_CONSUMERS_STMT: return "ShowConsumersStmt"; - case QUERY_NODE_SHOW_SUBSCRIBES_STMT: - return "ShowSubscribesStmt"; - case QUERY_NODE_SHOW_SMAS_STMT: - return "ShowSmasStmt"; case QUERY_NODE_SHOW_QUERIES_STMT: return "ShowQueriesStmt"; case QUERY_NODE_SHOW_VNODES_STMT: diff --git a/source/libs/nodes/src/nodesUtilFuncs.c b/source/libs/nodes/src/nodesUtilFuncs.c index cbb0e8e59b..d48fd2c4c0 100644 --- a/source/libs/nodes/src/nodesUtilFuncs.c +++ b/source/libs/nodes/src/nodesUtilFuncs.c @@ -201,12 +201,10 @@ SNode* nodesMakeNode(ENodeType type) { case QUERY_NODE_SHOW_STREAMS_STMT: case QUERY_NODE_SHOW_TABLES_STMT: case QUERY_NODE_SHOW_USERS_STMT: - case QUERY_NODE_SHOW_LICENCE_STMT: + case QUERY_NODE_SHOW_LICENCES_STMT: case QUERY_NODE_SHOW_VGROUPS_STMT: case QUERY_NODE_SHOW_TOPICS_STMT: case QUERY_NODE_SHOW_CONSUMERS_STMT: - case QUERY_NODE_SHOW_SUBSCRIBES_STMT: - case QUERY_NODE_SHOW_SMAS_STMT: case QUERY_NODE_SHOW_CONNECTIONS_STMT: case QUERY_NODE_SHOW_QUERIES_STMT: case QUERY_NODE_SHOW_VNODES_STMT: @@ -687,12 +685,10 @@ void nodesDestroyNode(SNode* pNode) { case QUERY_NODE_SHOW_STREAMS_STMT: case QUERY_NODE_SHOW_TABLES_STMT: case QUERY_NODE_SHOW_USERS_STMT: - case QUERY_NODE_SHOW_LICENCE_STMT: + case QUERY_NODE_SHOW_LICENCES_STMT: case QUERY_NODE_SHOW_VGROUPS_STMT: case QUERY_NODE_SHOW_TOPICS_STMT: case QUERY_NODE_SHOW_CONSUMERS_STMT: - case QUERY_NODE_SHOW_SUBSCRIBES_STMT: - case QUERY_NODE_SHOW_SMAS_STMT: case QUERY_NODE_SHOW_CONNECTIONS_STMT: case QUERY_NODE_SHOW_QUERIES_STMT: case QUERY_NODE_SHOW_VNODES_STMT: diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 45bbea1707..ef3c8355f0 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -391,8 +391,8 @@ cmd ::= SHOW STREAMS. cmd ::= SHOW ACCOUNTS. { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } cmd ::= SHOW APPS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); } cmd ::= SHOW CONNECTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); } -cmd ::= SHOW LICENCE. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT); } -cmd ::= SHOW GRANTS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT); } +cmd ::= SHOW LICENCES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); } +cmd ::= SHOW GRANTS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); } cmd ::= SHOW CREATE DATABASE db_name(A). { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); } cmd ::= SHOW CREATE TABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); } cmd ::= SHOW CREATE STABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, A); } diff --git a/source/libs/parser/src/parAstParser.c b/source/libs/parser/src/parAstParser.c index 08fcdcb0cb..ffa7729745 100644 --- a/source/libs/parser/src/parAstParser.c +++ b/source/libs/parser/src/parAstParser.c @@ -570,7 +570,7 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) { return collectMetaKeyFromShowTags(pCxt, (SShowStmt*)pStmt); case QUERY_NODE_SHOW_USERS_STMT: return collectMetaKeyFromShowUsers(pCxt, (SShowStmt*)pStmt); - case QUERY_NODE_SHOW_LICENCE_STMT: + case QUERY_NODE_SHOW_LICENCES_STMT: return collectMetaKeyFromShowLicence(pCxt, (SShowStmt*)pStmt); case QUERY_NODE_SHOW_VGROUPS_STMT: return collectMetaKeyFromShowVgroups(pCxt, (SShowStmt*)pStmt); diff --git a/source/libs/parser/src/parTokenizer.c b/source/libs/parser/src/parTokenizer.c index db907b1f68..a2bd8989c5 100644 --- a/source/libs/parser/src/parTokenizer.c +++ b/source/libs/parser/src/parTokenizer.c @@ -118,7 +118,7 @@ static SKeyword keywordTable[] = { {"KILL", TK_KILL}, {"LAST", TK_LAST}, {"LAST_ROW", TK_LAST_ROW}, - {"LICENCE", TK_LICENCE}, + {"LICENCES", TK_LICENCES}, {"LIKE", TK_LIKE}, {"LIMIT", TK_LIMIT}, {"LINEAR", TK_LINEAR}, diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 5c49a6e0ab..8ad08e70ac 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -28,6 +28,8 @@ #define generateDealNodeErrMsg(pCxt, code, ...) \ (pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, code, ##__VA_ARGS__), DEAL_RES_ERROR) +#define SYSTABLE_SHOW_TYPE_OFFSET QUERY_NODE_SHOW_DNODES_STMT + typedef struct STranslateContext { SParseContext* pParseCxt; int32_t errCode; @@ -51,6 +53,201 @@ typedef struct SFullDatabaseName { char fullDbName[TSDB_DB_FNAME_LEN]; } SFullDatabaseName; +typedef struct SSysTableShowAdapter { + ENodeType showType; + const char* pDbName; + const char* pTableName; + int32_t numOfShowCols; + const char* pShowCols[2]; +} SSysTableShowAdapter; + +// clang-format off +static const SSysTableShowAdapter sysTableShowAdapter[] = { + { + .showType = QUERY_NODE_SHOW_DNODES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_DNODES, + .numOfShowCols = 1, + .pShowCols = {"endpoint"} + }, + { + .showType = QUERY_NODE_SHOW_MNODES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_MNODES, + .numOfShowCols = 1, + .pShowCols = {"endpoint"} + }, + { + .showType = QUERY_NODE_SHOW_MODULES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_MODULES, + .numOfShowCols = 1, + .pShowCols = {"module"} + }, + { + .showType = QUERY_NODE_SHOW_QNODES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_QNODES, + .numOfShowCols = 1, + .pShowCols = {"endpoint"} + }, + { + .showType = QUERY_NODE_SHOW_SNODES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_SNODES, + .numOfShowCols = 1, + .pShowCols = {"endpoint"} + }, + { + .showType = QUERY_NODE_SHOW_BNODES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_BNODES, + .numOfShowCols = 1, + .pShowCols = {"endpoint"} + }, + { + .showType = QUERY_NODE_SHOW_CLUSTER_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_CLUSTER, + .numOfShowCols = 1, + .pShowCols = {"name"} + }, + { + .showType = QUERY_NODE_SHOW_DATABASES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_DATABASES, + .numOfShowCols = 1, + .pShowCols = {"name"} + }, + { + .showType = QUERY_NODE_SHOW_FUNCTIONS_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_FUNCTIONS, + .numOfShowCols = 1, + .pShowCols = {"name"} + }, + { + .showType = QUERY_NODE_SHOW_INDEXES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_INDEXES, + .numOfShowCols = 1, + .pShowCols = {"index_name"} + }, + { + .showType = QUERY_NODE_SHOW_STABLES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_STABLES, + .numOfShowCols = 1, + .pShowCols = {"stable_name"} + }, + { + .showType = QUERY_NODE_SHOW_STREAMS_STMT, + .pDbName = TSDB_PERFORMANCE_SCHEMA_DB, + .pTableName = TSDB_PERFS_TABLE_STREAMS, + .numOfShowCols = 1, + .pShowCols = {"stream_name"} + }, + { + .showType = QUERY_NODE_SHOW_TABLES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_TABLES, + .numOfShowCols = 1, + .pShowCols = {"table_name"} + }, + { + .showType = QUERY_NODE_SHOW_TAGS_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_TAGS, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_USERS_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_USERS, + .numOfShowCols = 1, + .pShowCols = {"name"} + }, + { + .showType = QUERY_NODE_SHOW_LICENCES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_LICENCES, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_VGROUPS_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_VGROUPS, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_TOPICS_STMT, + .pDbName = TSDB_PERFORMANCE_SCHEMA_DB, + .pTableName = TSDB_PERFS_TABLE_TOPICS, + .numOfShowCols = 1, + .pShowCols = {"topic_name"} + }, + { + .showType = QUERY_NODE_SHOW_CONSUMERS_STMT, + .pDbName = TSDB_PERFORMANCE_SCHEMA_DB, + .pTableName = TSDB_PERFS_TABLE_CONSUMERS, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_CONNECTIONS_STMT, + .pDbName = TSDB_PERFORMANCE_SCHEMA_DB, + .pTableName = TSDB_PERFS_TABLE_CONNECTIONS, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_QUERIES_STMT, + .pDbName = TSDB_PERFORMANCE_SCHEMA_DB, + .pTableName = TSDB_PERFS_TABLE_QUERIES, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_APPS_STMT, + .pDbName = TSDB_PERFORMANCE_SCHEMA_DB, + .pTableName = TSDB_PERFS_TABLE_APPS, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_VARIABLES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_CONFIGS, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_DNODE_VARIABLES_STMT, + .pDbName = TSDB_INFORMATION_SCHEMA_DB, + .pTableName = TSDB_INS_TABLE_DNODE_VARIABLES, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_TRANSACTIONS_STMT, + .pDbName = TSDB_PERFORMANCE_SCHEMA_DB, + .pTableName = TSDB_PERFS_TABLE_TRANS, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, + { + .showType = QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT, + .pDbName = TSDB_PERFORMANCE_SCHEMA_DB, + .pTableName = TSDB_PERFS_TABLE_SUBSCRIPTIONS, + .numOfShowCols = 1, + .pShowCols = {"*"} + }, +}; +// clang-format on + static int32_t translateSubquery(STranslateContext* pCxt, SNode* pNode); static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode); static EDealRes translateValue(STranslateContext* pCxt, SValueNode* pVal); @@ -5328,112 +5525,42 @@ int32_t extractResultSchema(const SNode* pRoot, int32_t* numOfCols, SSchema** pS return TSDB_CODE_FAILED; } -static const char* getSysDbName(ENodeType type) { - switch (type) { - case QUERY_NODE_SHOW_DATABASES_STMT: - case QUERY_NODE_SHOW_TABLES_STMT: - case QUERY_NODE_SHOW_STABLES_STMT: - case QUERY_NODE_SHOW_USERS_STMT: - case QUERY_NODE_SHOW_DNODES_STMT: - case QUERY_NODE_SHOW_VGROUPS_STMT: - case QUERY_NODE_SHOW_MNODES_STMT: - case QUERY_NODE_SHOW_MODULES_STMT: - case QUERY_NODE_SHOW_QNODES_STMT: - case QUERY_NODE_SHOW_FUNCTIONS_STMT: - case QUERY_NODE_SHOW_INDEXES_STMT: - case QUERY_NODE_SHOW_BNODES_STMT: - case QUERY_NODE_SHOW_SNODES_STMT: - case QUERY_NODE_SHOW_LICENCE_STMT: - case QUERY_NODE_SHOW_CLUSTER_STMT: - case QUERY_NODE_SHOW_VARIABLES_STMT: - case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT: - case QUERY_NODE_SHOW_TAGS_STMT: - return TSDB_INFORMATION_SCHEMA_DB; - case QUERY_NODE_SHOW_CONNECTIONS_STMT: - case QUERY_NODE_SHOW_QUERIES_STMT: - case QUERY_NODE_SHOW_TOPICS_STMT: - case QUERY_NODE_SHOW_STREAMS_STMT: - case QUERY_NODE_SHOW_TRANSACTIONS_STMT: - case QUERY_NODE_SHOW_APPS_STMT: - case QUERY_NODE_SHOW_CONSUMERS_STMT: - case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT: - return TSDB_PERFORMANCE_SCHEMA_DB; - default: - break; - } - return NULL; -} - -static const char* getSysTableName(ENodeType type) { - switch (type) { - case QUERY_NODE_SHOW_DATABASES_STMT: - return TSDB_INS_TABLE_DATABASES; - case QUERY_NODE_SHOW_TABLES_STMT: - return TSDB_INS_TABLE_TABLES; - case QUERY_NODE_SHOW_TAGS_STMT: - return TSDB_INS_TABLE_TAGS; - case QUERY_NODE_SHOW_STABLES_STMT: - return TSDB_INS_TABLE_STABLES; - case QUERY_NODE_SHOW_USERS_STMT: - return TSDB_INS_TABLE_USERS; - case QUERY_NODE_SHOW_DNODES_STMT: - return TSDB_INS_TABLE_DNODES; - case QUERY_NODE_SHOW_VGROUPS_STMT: - return TSDB_INS_TABLE_VGROUPS; - case QUERY_NODE_SHOW_MNODES_STMT: - return TSDB_INS_TABLE_MNODES; - case QUERY_NODE_SHOW_MODULES_STMT: - return TSDB_INS_TABLE_MODULES; - case QUERY_NODE_SHOW_QNODES_STMT: - return TSDB_INS_TABLE_QNODES; - case QUERY_NODE_SHOW_FUNCTIONS_STMT: - return TSDB_INS_TABLE_FUNCTIONS; - case QUERY_NODE_SHOW_INDEXES_STMT: - return TSDB_INS_TABLE_INDEXES; - case QUERY_NODE_SHOW_STREAMS_STMT: - return TSDB_PERFS_TABLE_STREAMS; - case QUERY_NODE_SHOW_BNODES_STMT: - return TSDB_INS_TABLE_BNODES; - case QUERY_NODE_SHOW_SNODES_STMT: - return TSDB_INS_TABLE_SNODES; - case QUERY_NODE_SHOW_LICENCE_STMT: - return TSDB_INS_TABLE_LICENCES; - case QUERY_NODE_SHOW_CLUSTER_STMT: - return TSDB_INS_TABLE_CLUSTER; - case QUERY_NODE_SHOW_CONNECTIONS_STMT: - return TSDB_PERFS_TABLE_CONNECTIONS; - case QUERY_NODE_SHOW_QUERIES_STMT: - return TSDB_PERFS_TABLE_QUERIES; - case QUERY_NODE_SHOW_TOPICS_STMT: - return TSDB_PERFS_TABLE_TOPICS; - case QUERY_NODE_SHOW_TRANSACTIONS_STMT: - return TSDB_PERFS_TABLE_TRANS; - case QUERY_NODE_SHOW_VARIABLES_STMT: - return TSDB_INS_TABLE_CONFIGS; - case QUERY_NODE_SHOW_APPS_STMT: - return TSDB_PERFS_TABLE_APPS; - case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT: - return TSDB_INS_TABLE_DNODE_VARIABLES; - case QUERY_NODE_SHOW_CONSUMERS_STMT: - return TSDB_PERFS_TABLE_CONSUMERS; - case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT: - return TSDB_PERFS_TABLE_SUBSCRIPTIONS; - default: - break; +static SNode* createStarCol() { + SColumnNode* pCol = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + if (NULL == pCol) { + return NULL; } - return NULL; + strcpy(pCol->colName, "*"); + return (SNode*)pCol; } -static SNode* createStarCol() { +static SNode* createProjectCol(const char* pProjCol) { SColumnNode* pCol = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); if (NULL == pCol) { return NULL; } - strcpy(pCol->colName, "*"); + strcpy(pCol->colName, pProjCol); return (SNode*)pCol; } -static int32_t createSimpleSelectStmt(const char* pDb, const char* pTable, SSelectStmt** pStmt) { +static SNodeList* createProjectCols(int32_t ncols, const char* const pCols[]) { + SNodeList* pProjections = NULL; + if (ncols <= 0) { + nodesListMakeStrictAppend(&pProjections, createStarCol()); + return pProjections; + } + for (int32_t i = 0; i < ncols; ++i) { + int32_t code = nodesListMakeStrictAppend(&pProjections, createProjectCol(pCols[i])); + if (TSDB_CODE_SUCCESS != code) { + nodesDestroyList(pProjections); + return NULL; + } + } + return pProjections; +} + +static int32_t createSimpleSelectStmt(const char* pDb, const char* pTable, int32_t numOfProjs, + const char* const pProjCol[], SSelectStmt** pStmt) { SSelectStmt* pSelect = (SSelectStmt*)nodesMakeNode(QUERY_NODE_SELECT_STMT); if (NULL == pSelect) { return TSDB_CODE_OUT_OF_MEMORY; @@ -5450,7 +5577,8 @@ static int32_t createSimpleSelectStmt(const char* pDb, const char* pTable, SSele strcpy(pRealTable->table.tableAlias, pTable); pSelect->pFromTable = (SNode*)pRealTable; - if (TSDB_CODE_SUCCESS != nodesListMakeStrictAppend(&pSelect->pProjectionList, createStarCol())) { + pSelect->pProjectionList = createProjectCols(numOfProjs, pProjCol); + if (NULL == pSelect->pProjectionList) { nodesDestroyNode((SNode*)pSelect); return TSDB_CODE_OUT_OF_MEMORY; } @@ -5461,11 +5589,12 @@ static int32_t createSimpleSelectStmt(const char* pDb, const char* pTable, SSele } static int32_t createSelectStmtForShow(ENodeType showType, SSelectStmt** pStmt) { - return createSimpleSelectStmt(getSysDbName(showType), getSysTableName(showType), pStmt); + const SSysTableShowAdapter* pShow = &sysTableShowAdapter[showType - SYSTABLE_SHOW_TYPE_OFFSET]; + return createSimpleSelectStmt(pShow->pDbName, pShow->pTableName, pShow->numOfShowCols, pShow->pShowCols, pStmt); } static int32_t createSelectStmtForShowTableDist(SShowTableDistributedStmt* pStmt, SSelectStmt** pOutput) { - return createSimpleSelectStmt(pStmt->dbName, pStmt->tableName, pOutput); + return createSimpleSelectStmt(pStmt->dbName, pStmt->tableName, 0, NULL, pOutput); } static int32_t createOperatorNode(EOperatorType opType, const char* pColName, SNode* pRight, SNode** pOp) { @@ -6653,7 +6782,7 @@ static int32_t rewriteFlushDatabase(STranslateContext* pCxt, SQuery* pQuery) { static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) { int32_t code = TSDB_CODE_SUCCESS; switch (nodeType(pQuery->pRoot)) { - case QUERY_NODE_SHOW_LICENCE_STMT: + case QUERY_NODE_SHOW_LICENCES_STMT: case QUERY_NODE_SHOW_DATABASES_STMT: case QUERY_NODE_SHOW_TABLES_STMT: case QUERY_NODE_SHOW_STABLES_STMT: diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index e3ebb85f68..5eb744a7db 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -1044,7 +1044,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* ACCOUNTS => nothing */ 0, /* APPS => nothing */ 0, /* CONNECTIONS => nothing */ - 0, /* LICENCE => nothing */ + 0, /* LICENCES => nothing */ 0, /* GRANTS => nothing */ 0, /* QUERIES => nothing */ 0, /* SCORES => nothing */ @@ -1388,7 +1388,7 @@ static const char *const yyTokenName[] = { /* 136 */ "ACCOUNTS", /* 137 */ "APPS", /* 138 */ "CONNECTIONS", - /* 139 */ "LICENCE", + /* 139 */ "LICENCES", /* 140 */ "GRANTS", /* 141 */ "QUERIES", /* 142 */ "SCORES", @@ -1843,7 +1843,7 @@ static const char *const yyRuleName[] = { /* 205 */ "cmd ::= SHOW ACCOUNTS", /* 206 */ "cmd ::= SHOW APPS", /* 207 */ "cmd ::= SHOW CONNECTIONS", - /* 208 */ "cmd ::= SHOW LICENCE", + /* 208 */ "cmd ::= SHOW LICENCES", /* 209 */ "cmd ::= SHOW GRANTS", /* 210 */ "cmd ::= SHOW CREATE DATABASE db_name", /* 211 */ "cmd ::= SHOW CREATE TABLE full_table_name", @@ -2932,7 +2932,7 @@ static const struct { { 257, -2 }, /* (205) cmd ::= SHOW ACCOUNTS */ { 257, -2 }, /* (206) cmd ::= SHOW APPS */ { 257, -2 }, /* (207) cmd ::= SHOW CONNECTIONS */ - { 257, -2 }, /* (208) cmd ::= SHOW LICENCE */ + { 257, -2 }, /* (208) cmd ::= SHOW LICENCES */ { 257, -2 }, /* (209) cmd ::= SHOW GRANTS */ { 257, -4 }, /* (210) cmd ::= SHOW CREATE DATABASE db_name */ { 257, -4 }, /* (211) cmd ::= SHOW CREATE TABLE full_table_name */ @@ -3984,9 +3984,9 @@ static YYACTIONTYPE yy_reduce( case 207: /* cmd ::= SHOW CONNECTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); } break; - case 208: /* cmd ::= SHOW LICENCE */ + case 208: /* cmd ::= SHOW LICENCES */ case 209: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==209); -{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT); } +{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); } break; case 210: /* cmd ::= SHOW CREATE DATABASE db_name */ { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy361); } diff --git a/source/libs/planner/src/planOptimizer.c b/source/libs/planner/src/planOptimizer.c index f4f7c9aefd..45ab3903a9 100644 --- a/source/libs/planner/src/planOptimizer.c +++ b/source/libs/planner/src/planOptimizer.c @@ -1615,6 +1615,9 @@ static int32_t partTagsOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogicSub if (QUERY_NODE_LOGIC_PLAN_PARTITION == nodeType(pNode)) { TSWAP(((SPartitionLogicNode*)pNode)->pPartitionKeys, pScan->pGroupTags); int32_t code = replaceLogicNode(pLogicSubplan, pNode, (SLogicNode*)pScan); + if (TSDB_CODE_SUCCESS == code) { + code = adjustLogicNodeDataRequirement((SLogicNode*)pScan, pNode->resultDataOrder); + } if (TSDB_CODE_SUCCESS == code) { NODES_CLEAR_LIST(pNode->pChildren); nodesDestroyNode((SNode*)pNode); -- GitLab