diff --git a/include/libs/executor/executor.h b/include/libs/executor/executor.h
index 0cd1a9265d..ad57cbf4e4 100644
--- a/include/libs/executor/executor.h
+++ b/include/libs/executor/executor.h
@@ -33,6 +33,7 @@ typedef struct SReadHandle {
void* meta;
void* config;
void* vnode;
+ void* mnd;
} SReadHandle;
#define STREAM_DATA_TYPE_SUBMIT_BLOCK 0x1
diff --git a/include/util/tdef.h b/include/util/tdef.h
index cf0c75e58f..5e0f482993 100644
--- a/include/util/tdef.h
+++ b/include/util/tdef.h
@@ -97,42 +97,6 @@ extern const int32_t TYPE_BYTES[15];
#define TSDB_TIME_PRECISION_MICRO_DIGITS 16
#define TSDB_TIME_PRECISION_NANO_DIGITS 19
-#define TSDB_INFORMATION_SCHEMA_DB "information_schema"
-#define TSDB_PERFORMANCE_SCHEMA_DB "performance_schema"
-#define TSDB_INS_TABLE_DNODES "dnodes"
-#define TSDB_INS_TABLE_MNODES "mnodes"
-#define TSDB_INS_TABLE_MODULES "modules"
-#define TSDB_INS_TABLE_QNODES "qnodes"
-#define TSDB_INS_TABLE_BNODES "bnodes"
-#define TSDB_INS_TABLE_SNODES "snodes"
-#define TSDB_INS_TABLE_CLUSTER "cluster"
-#define TSDB_INS_TABLE_USER_DATABASES "user_databases"
-#define TSDB_INS_TABLE_USER_FUNCTIONS "user_functions"
-#define TSDB_INS_TABLE_USER_INDEXES "user_indexes"
-#define TSDB_INS_TABLE_USER_STABLES "user_stables"
-#define TSDB_INS_TABLE_USER_STREAMS "user_streams"
-#define TSDB_INS_TABLE_USER_TABLES "user_tables"
-#define TSDB_INS_TABLE_USER_TABLE_DISTRIBUTED "user_table_distributed"
-#define TSDB_INS_TABLE_USER_USERS "user_users"
-#define TSDB_INS_TABLE_LICENCES "grants"
-#define TSDB_INS_TABLE_VGROUPS "vgroups"
-#define TSDB_INS_TABLE_CONSUMERS "consumers"
-#define TSDB_INS_TABLE_SUBSCRIBES "subscribes"
-#define TSDB_INS_TABLE_TRANS "trans"
-#define TSDB_INS_TABLE_SMAS "smas"
-#define TSDB_INS_TABLE_CONFIGS "configs"
-#define TSDB_INS_TABLE_CONNS "connections"
-#define TSDB_INS_TABLE_QUERIES "queries"
-#define TSDB_INS_TABLE_VNODES "vnodes"
-
-#define TSDB_PERFORMANCE_SCHEMA_DB "performance_schema"
-#define TSDB_PERFS_TABLE_CONNECTIONS "connections"
-#define TSDB_PERFS_TABLE_QUERIES "queries"
-#define TSDB_PERFS_TABLE_TOPICS "topics"
-#define TSDB_PERFS_TABLE_CONSUMERS "consumers"
-#define TSDB_PERFS_TABLE_SUBSCRIPTIONS "subscriptions"
-#define TSDB_PERFS_TABLE_OFFSETS "offsets"
-
#define TSDB_INDEX_TYPE_SMA "SMA"
#define TSDB_INDEX_TYPE_FULLTEXT "FULLTEXT"
@@ -204,16 +168,6 @@ typedef enum ELogicConditionType {
LOGIC_COND_TYPE_NOT,
} ELogicConditionType;
-#define FUNCTION_CEIL 4500
-#define FUNCTION_FLOOR 4501
-#define FUNCTION_ABS 4502
-#define FUNCTION_ROUND 4503
-
-#define FUNCTION_LENGTH 4800
-#define FUNCTION_CONCAT 4801
-#define FUNCTION_LTRIM 4802
-#define FUNCTION_RTRIM 4803
-
#define TSDB_NAME_DELIMITER_LEN 1
#define TSDB_UNI_LEN 24
@@ -415,21 +369,9 @@ typedef enum ELogicConditionType {
* 1. ordinary sub query for select * from super_table
* 2. all sqlobj generated by createSubqueryObj with this flag
*/
-#define TSDB_QUERY_TYPE_SUBQUERY 0x02u
-#define TSDB_QUERY_TYPE_STABLE_SUBQUERY 0x04u // two-stage subquery for super table
-
-#define TSDB_QUERY_TYPE_TABLE_QUERY 0x08u // query ordinary table; below only apply to client side
-#define TSDB_QUERY_TYPE_STABLE_QUERY 0x10u // query on super table
-#define TSDB_QUERY_TYPE_JOIN_QUERY 0x20u // join query
-#define TSDB_QUERY_TYPE_PROJECTION_QUERY 0x40u // select *,columns... query
-#define TSDB_QUERY_TYPE_JOIN_SEC_STAGE 0x80u // join sub query at the second stage
-
-#define TSDB_QUERY_TYPE_TAG_FILTER_QUERY 0x400u
#define TSDB_QUERY_TYPE_INSERT 0x100u // insert type
-#define TSDB_QUERY_TYPE_MULTITABLE_QUERY 0x200u
#define TSDB_QUERY_TYPE_FILE_INSERT 0x400u // insert data from file
#define TSDB_QUERY_TYPE_STMT_INSERT 0x800u // stmt insert type
-#define TSDB_QUERY_TYPE_NEST_SUBQUERY 0x1000u // nested sub query
#define TSDB_QUERY_HAS_TYPE(x, _type) (((x) & (_type)) != 0)
#define TSDB_QUERY_SET_TYPE(x, _type) ((x) |= (_type))
diff --git a/source/dnode/mnode/impl/inc/mndInfoSchema.h b/source/dnode/mnode/impl/inc/mndInfoSchema.h
index 3aea99a909..43d934c431 100644
--- a/source/dnode/mnode/impl/inc/mndInfoSchema.h
+++ b/source/dnode/mnode/impl/inc/mndInfoSchema.h
@@ -22,18 +22,6 @@
extern "C" {
#endif
-typedef struct SInfosTableSchema {
- const char *name;
- const int32_t type;
- const int32_t bytes;
-} SInfosTableSchema;
-
-typedef struct SInfosTableMeta {
- const char *name;
- const SInfosTableSchema *schema;
- const int32_t colNum;
-} SInfosTableMeta;
-
int32_t mndInitInfos(SMnode *pMnode);
void mndCleanupInfos(SMnode *pMnode);
int32_t mndBuildInsTableSchema(SMnode *pMnode, const char *dbFName, const char *tbName, STableMetaRsp *pRsp);
diff --git a/source/dnode/mnode/impl/inc/mndPerfSchema.h b/source/dnode/mnode/impl/inc/mndPerfSchema.h
index 2c613e253c..19f60229f9 100644
--- a/source/dnode/mnode/impl/inc/mndPerfSchema.h
+++ b/source/dnode/mnode/impl/inc/mndPerfSchema.h
@@ -22,18 +22,6 @@
extern "C" {
#endif
-typedef struct SPerfsTableSchema {
- char *name;
- int32_t type;
- int32_t bytes;
-} SPerfsTableSchema;
-
-typedef struct SPerfsTableMeta {
- char *name;
- const SPerfsTableSchema *schema;
- int32_t colNum;
-} SPerfsTableMeta;
-
int32_t mndBuildPerfsTableSchema(SMnode *pMnode, const char *dbFName, const char *tbName, STableMetaRsp *pRsp);
int32_t mndInitPerfs(SMnode *pMnode);
void mndCleanupPerfs(SMnode *pMnode);
diff --git a/source/dnode/mnode/impl/inc/mndShow.h b/source/dnode/mnode/impl/inc/mndShow.h
index 03f901e9c4..5a3e487e3d 100644
--- a/source/dnode/mnode/impl/inc/mndShow.h
+++ b/source/dnode/mnode/impl/inc/mndShow.h
@@ -17,6 +17,7 @@
#define _TD_MND_SHOW_H_
#include "mndInt.h"
+#include "systable.h"
#ifdef __cplusplus
extern "C" {
diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c
index 15ebcf02db..22507bde8b 100644
--- a/source/dnode/mnode/impl/src/mndDb.c
+++ b/source/dnode/mnode/impl/src/mndDb.c
@@ -23,6 +23,7 @@
#include "mndTrans.h"
#include "mndUser.h"
#include "mndVgroup.h"
+#include "systable.h"
#define DB_VER_NUMBER 1
#define DB_RESERVE_SIZE 64
@@ -1191,7 +1192,7 @@ static int32_t mndProcessUseDbReq(SNodeMsg *pReq) {
}
char *p = strchr(usedbReq.db, '.');
- if (p && 0 == strcmp(p + 1, TSDB_INFORMATION_SCHEMA_DB)) {
+ if (p && ((0 == strcmp(p + 1, TSDB_INFORMATION_SCHEMA_DB) || (0 == strcmp(p + 1, TSDB_PERFORMANCE_SCHEMA_DB))))) {
memcpy(usedbRsp.db, usedbReq.db, TSDB_DB_FNAME_LEN);
int32_t vgVersion = mndGetGlobalVgroupVersion(pMnode);
if (usedbReq.vgVersion < vgVersion) {
diff --git a/source/dnode/mnode/impl/src/mndInfoSchema.c b/source/dnode/mnode/impl/src/mndInfoSchema.c
index 07f8228cda..1ec71e1d5c 100644
--- a/source/dnode/mnode/impl/src/mndInfoSchema.c
+++ b/source/dnode/mnode/impl/src/mndInfoSchema.c
@@ -15,264 +15,272 @@
#define _DEFAULT_SOURCE
#include "mndInfoSchema.h"
+#include "common/systable.h"
#include "mndInt.h"
-#define SYSTABLE_SCH_TABLE_NAME_LEN ((TSDB_TABLE_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
-#define SYSTABLE_SCH_DB_NAME_LEN ((TSDB_DB_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
-#define SYSTABLE_SCH_COL_NAME_LEN ((TSDB_COL_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
-
-static const SInfosTableSchema dnodesSchema[] = {
- {.name = "id", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT},
- {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "vnodes", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT},
- {.name = "max_vnodes", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT},
- {.name = "status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "note", .bytes = 256 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+struct SSysTableIter {
+ SMnode *pMnode;
+ int32_t type;
+ void *pData;
+ SHashObj *pHashMap;
};
-static const SInfosTableSchema mnodesSchema[] = {
- {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "role", .bytes = 12 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "role_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
+//#define SYSTABLE_SCH_TABLE_NAME_LEN ((TSDB_TABLE_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
+//#define SYSTABLE_SCH_DB_NAME_LEN ((TSDB_DB_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
+//#define SYSTABLE_SCH_COL_NAME_LEN ((TSDB_COL_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
+//
+//static const SSysTableSchema dnodesSchema[] = {
+// {.name = "id", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT},
+// {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "vnodes", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT},
+// {.name = "max_vnodes", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT},
+// {.name = "status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "note", .bytes = 256 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema mnodesSchema[] = {
+// {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "role", .bytes = 12 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "role_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+//};
+//
+//static const SSysTableSchema modulesSchema[] = {
+// {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "endpoint", .bytes = 134 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "module", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema qnodesSchema[] = {
+// {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+//};
+//
+//static const SSysTableSchema snodesSchema[] = {
+// {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+//};
+//
+//static const SSysTableSchema bnodesSchema[] = {
+// {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+//};
+//
+//static const SSysTableSchema clusterSchema[] = {
+// {.name = "id", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
+// {.name = "name", .bytes = TSDB_CLUSTER_ID_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+//};
+//
+//static const SSysTableSchema userDBSchema[] = {
+// {.name = "name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "vgroups", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT},
+// {.name = "ntables", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
+// {.name = "replica", .bytes = 2, .type = TSDB_DATA_TYPE_TINYINT},
+// {.name = "strict", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "days", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "keep", .bytes = 24 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "cache", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "blocks", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "minrows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "maxrows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "wal", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
+// {.name = "fsync", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "comp", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
+// {.name = "cachelast", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
+// {.name = "precision", .bytes = 2 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "ttl", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "single_stable", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
+// {.name = "stream_mode", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
+// {.name = "status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// // {.name = "update", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT}, // disable update
+//};
+//
+//static const SSysTableSchema userFuncSchema[] = {
+// {.name = "name", .bytes = TSDB_FUNC_NAME_LEN - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "comment", .bytes = PATH_MAX - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "aggregate", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "output_type", .bytes = TSDB_TYPE_STR_MAX_LEN - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "code_len", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "bufsize", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+//};
+//
+//static const SSysTableSchema userIdxSchema[] = {
+// {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "table_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "index_database", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "index_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "column_name", .bytes = SYSTABLE_SCH_COL_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "index_type", .bytes = 10, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "index_extensions", .bytes = 256, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema userStbsSchema[] = {
+// {.name = "stable_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "columns", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "tags", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "last_update", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "table_comment", .bytes = 1024 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema userStreamsSchema[] = {
+// {.name = "stream_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "user_name", .bytes = 23, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "dest_table", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "sql", .bytes = 1024, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema userTblsSchema[] = {
+// {.name = "table_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "columns", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "stable_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "uid", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
+// {.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "ttl", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "table_comment", .bytes = 512 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "type", .bytes = 20 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema userTblDistSchema[] = {
+// {.name = "db_name", .bytes = 32 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "table_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "distributed_histogram", .bytes = 500 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "min_of_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "max_of_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "avg_of_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "stddev_of_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "rows", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
+// {.name = "blocks", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "storage_size", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
+// {.name = "compression_ratio", .bytes = 8, .type = TSDB_DATA_TYPE_DOUBLE},
+// {.name = "rows_in_mem", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "seek_header_time", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+//};
+//
+//static const SSysTableSchema userUsersSchema[] = {
+// {.name = "name", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "privilege", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+//};
+//
+//static const SSysTableSchema grantsSchema[] = {
+// {.name = "version", .bytes = 8 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "expire time", .bytes = 19 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "expired", .bytes = 5 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "storage(GB)", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "timeseries", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "databases", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "users", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "accounts", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "dnodes", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "connections", .bytes = 11 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "streams", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "cpu cores", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "speed(PPS)", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "querytime", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema vgroupsSchema[] = {
+// {.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "tables", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "v1_dnode", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "v1_status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "v2_dnode", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "v2_status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "v3_dnode", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "v3_status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "status", .bytes = 12 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "nfiles", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "file_size", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+//};
+//
+//static const SSysTableSchema smaSchema[] = {
+// {.name = "sma_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "stable_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema transSchema[] = {
+// {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "created_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "stage", .bytes = TSDB_TRANS_STAGE_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "db", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "type", .bytes = TSDB_TRANS_TYPE_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "last_exec_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "last_error", .bytes = (TSDB_TRANS_ERROR_LEN - 1) + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema configSchema[] = {
+// {.name = "name", .bytes = TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "value", .bytes = TSDB_CONIIG_VALUE_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableSchema connSchema[] = {
+// {.name = "connId", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "user", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "program", .bytes = TSDB_APP_NAME_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "pid", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "ip:port", .bytes = TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "login_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "last_access", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+//};
+//
+//static const SSysTableSchema querySchema[] = {
+// {.name = "queryId", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "connId", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "user", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "ip:port", .bytes = TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "qid", .bytes = 22 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "created_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
+// {.name = "time", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
+// {.name = "sql_obj_id", .bytes = QUERY_OBJ_ID_SIZE + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "pid", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "ep", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "stable_query", .bytes = 1, .type = TSDB_DATA_TYPE_BOOL},
+// {.name = "sub_queries", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
+// {.name = "sub_query_info", .bytes = TSDB_SHOW_SUBQUERY_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+// {.name = "sql", .bytes = TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
+//};
+//
+//static const SSysTableMeta infosMeta[] = {
+// {TSDB_INS_TABLE_DNODES, dnodesSchema, tListLen(dnodesSchema)},
+// {TSDB_INS_TABLE_MNODES, mnodesSchema, tListLen(mnodesSchema)},
+// {TSDB_INS_TABLE_MODULES, modulesSchema, tListLen(modulesSchema)},
+// {TSDB_INS_TABLE_QNODES, qnodesSchema, tListLen(qnodesSchema)},
+// {TSDB_INS_TABLE_SNODES, snodesSchema, tListLen(snodesSchema)},
+// {TSDB_INS_TABLE_BNODES, bnodesSchema, tListLen(bnodesSchema)},
+// {TSDB_INS_TABLE_CLUSTER, clusterSchema, tListLen(clusterSchema)},
+// {TSDB_INS_TABLE_USER_DATABASES, userDBSchema, tListLen(userDBSchema)},
+// {TSDB_INS_TABLE_USER_FUNCTIONS, userFuncSchema, tListLen(userFuncSchema)},
+// {TSDB_INS_TABLE_USER_INDEXES, userIdxSchema, tListLen(userIdxSchema)},
+// {TSDB_INS_TABLE_USER_STABLES, userStbsSchema, tListLen(userStbsSchema)},
+// {TSDB_INS_TABLE_USER_STREAMS, userStreamsSchema, tListLen(userStreamsSchema)},
+// {TSDB_INS_TABLE_USER_TABLES, userTblsSchema, tListLen(userTblsSchema)},
+// {TSDB_INS_TABLE_USER_TABLE_DISTRIBUTED, userTblDistSchema, tListLen(userTblDistSchema)},
+// {TSDB_INS_TABLE_USER_USERS, userUsersSchema, tListLen(userUsersSchema)},
+// {TSDB_INS_TABLE_LICENCES, grantsSchema, tListLen(grantsSchema)},
+// {TSDB_INS_TABLE_VGROUPS, vgroupsSchema, tListLen(vgroupsSchema)},
+// {TSDB_INS_TABLE_TRANS, transSchema, tListLen(transSchema)},
+// {TSDB_INS_TABLE_SMAS, smaSchema, tListLen(smaSchema)},
+// {TSDB_INS_TABLE_CONFIGS, configSchema, tListLen(configSchema)},
+// {TSDB_INS_TABLE_CONNS, connSchema, tListLen(connSchema)},
+// {TSDB_INS_TABLE_QUERIES, querySchema, tListLen(querySchema)},
+//};
-static const SInfosTableSchema modulesSchema[] = {
- {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "endpoint", .bytes = 134 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "module", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema qnodesSchema[] = {
- {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
-
-static const SInfosTableSchema snodesSchema[] = {
- {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
-
-static const SInfosTableSchema bnodesSchema[] = {
- {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
-
-static const SInfosTableSchema clusterSchema[] = {
- {.name = "id", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "name", .bytes = TSDB_CLUSTER_ID_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
-
-static const SInfosTableSchema userDBSchema[] = {
- {.name = "name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "vgroups", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT},
- {.name = "ntables", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "replica", .bytes = 2, .type = TSDB_DATA_TYPE_TINYINT},
- {.name = "strict", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "days", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "keep", .bytes = 24 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "cache", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "blocks", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "minrows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "maxrows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "wal", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
- {.name = "fsync", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "comp", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
- {.name = "cachelast", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
- {.name = "precision", .bytes = 2 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "ttl", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "single_stable", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
- {.name = "stream_mode", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
- {.name = "status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- // {.name = "update", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT}, // disable update
-};
-
-static const SInfosTableSchema userFuncSchema[] = {
- {.name = "name", .bytes = TSDB_FUNC_NAME_LEN - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "comment", .bytes = PATH_MAX - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "aggregate", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "output_type", .bytes = TSDB_TYPE_STR_MAX_LEN - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "code_len", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "bufsize", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
-};
-
-static const SInfosTableSchema userIdxSchema[] = {
- {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "table_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "index_database", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "index_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "column_name", .bytes = SYSTABLE_SCH_COL_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "index_type", .bytes = 10, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "index_extensions", .bytes = 256, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema userStbsSchema[] = {
- {.name = "stable_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "columns", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "tags", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "last_update", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "table_comment", .bytes = 1024 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema userStreamsSchema[] = {
- {.name = "stream_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "user_name", .bytes = 23, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "dest_table", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "sql", .bytes = 1024, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema userTblsSchema[] = {
- {.name = "table_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "columns", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "stable_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "uid", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "ttl", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "table_comment", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "type", .bytes = 20 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema userTblDistSchema[] = {
- {.name = "db_name", .bytes = 32 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "table_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "distributed_histogram", .bytes = 500 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "min_of_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "max_of_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "avg_of_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "stddev_of_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "rows", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "blocks", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "storage_size", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "compression_ratio", .bytes = 8, .type = TSDB_DATA_TYPE_DOUBLE},
- {.name = "rows_in_mem", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "seek_header_time", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
-};
-
-static const SInfosTableSchema userUsersSchema[] = {
- {.name = "name", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "privilege", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
-
-static const SInfosTableSchema grantsSchema[] = {
- {.name = "version", .bytes = 8 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "expire time", .bytes = 19 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "expired", .bytes = 5 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "storage(GB)", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "timeseries", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "databases", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "users", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "accounts", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "dnodes", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "connections", .bytes = 11 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "streams", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "cpu cores", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "speed(PPS)", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "querytime", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema vgroupsSchema[] = {
- {.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "tables", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "v1_dnode", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "v1_status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "v2_dnode", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "v2_status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "v3_dnode", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "v3_status", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "status", .bytes = 12 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "nfiles", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "file_size", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
-};
-
-static const SInfosTableSchema smaSchema[] = {
- {.name = "sma_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "stable_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema transSchema[] = {
- {.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "created_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "stage", .bytes = TSDB_TRANS_STAGE_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "db", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "type", .bytes = TSDB_TRANS_TYPE_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "last_exec_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "last_error", .bytes = (TSDB_TRANS_ERROR_LEN - 1) + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema configSchema[] = {
- {.name = "name", .bytes = TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "value", .bytes = TSDB_CONIIG_VALUE_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableSchema connSchema[] = {
- {.name = "connId", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "user", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "program", .bytes = TSDB_APP_NAME_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "pid", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "ip:port", .bytes = TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "login_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "last_access", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
-
-static const SInfosTableSchema querySchema[] = {
- {.name = "queryId", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "connId", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "user", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "ip:port", .bytes = TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "qid", .bytes = 22 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "created_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "time", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "sql_obj_id", .bytes = QUERY_OBJ_ID_SIZE + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "pid", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "ep", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "stable_query", .bytes = 1, .type = TSDB_DATA_TYPE_BOOL},
- {.name = "sub_queries", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "sub_query_info", .bytes = TSDB_SHOW_SUBQUERY_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
- {.name = "sql", .bytes = TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
-};
-
-static const SInfosTableMeta infosMeta[] = {
- {TSDB_INS_TABLE_DNODES, dnodesSchema, tListLen(dnodesSchema)},
- {TSDB_INS_TABLE_MNODES, mnodesSchema, tListLen(mnodesSchema)},
- {TSDB_INS_TABLE_MODULES, modulesSchema, tListLen(modulesSchema)},
- {TSDB_INS_TABLE_QNODES, qnodesSchema, tListLen(qnodesSchema)},
- {TSDB_INS_TABLE_SNODES, snodesSchema, tListLen(snodesSchema)},
- {TSDB_INS_TABLE_BNODES, bnodesSchema, tListLen(bnodesSchema)},
- {TSDB_INS_TABLE_CLUSTER, clusterSchema, tListLen(clusterSchema)},
- {TSDB_INS_TABLE_USER_DATABASES, userDBSchema, tListLen(userDBSchema)},
- {TSDB_INS_TABLE_USER_FUNCTIONS, userFuncSchema, tListLen(userFuncSchema)},
- {TSDB_INS_TABLE_USER_INDEXES, userIdxSchema, tListLen(userIdxSchema)},
- {TSDB_INS_TABLE_USER_STABLES, userStbsSchema, tListLen(userStbsSchema)},
- {TSDB_INS_TABLE_USER_STREAMS, userStreamsSchema, tListLen(userStreamsSchema)},
- {TSDB_INS_TABLE_USER_TABLES, userTblsSchema, tListLen(userTblsSchema)},
- {TSDB_INS_TABLE_USER_TABLE_DISTRIBUTED, userTblDistSchema, tListLen(userTblDistSchema)},
- {TSDB_INS_TABLE_USER_USERS, userUsersSchema, tListLen(userUsersSchema)},
- {TSDB_INS_TABLE_LICENCES, grantsSchema, tListLen(grantsSchema)},
- {TSDB_INS_TABLE_VGROUPS, vgroupsSchema, tListLen(vgroupsSchema)},
- {TSDB_INS_TABLE_TRANS, transSchema, tListLen(transSchema)},
- {TSDB_INS_TABLE_SMAS, smaSchema, tListLen(smaSchema)},
- {TSDB_INS_TABLE_CONFIGS, configSchema, tListLen(configSchema)},
- {TSDB_INS_TABLE_CONNS, connSchema, tListLen(connSchema)},
- {TSDB_INS_TABLE_QUERIES, querySchema, tListLen(querySchema)},
-};
-
-static int32_t mndInitInfosTableSchema(const SInfosTableSchema *pSrc, int32_t colNum, SSchema **pDst) {
+static int32_t mndInitInfosTableSchema(const SSysDbTableSchema *pSrc, int32_t colNum, SSchema **pDst) {
SSchema *schema = taosMemoryCalloc(colNum, sizeof(SSchema));
if (NULL == schema) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
@@ -298,11 +306,15 @@ static int32_t mndInsInitMeta(SHashObj *hash) {
meta.sversion = 1;
meta.tversion = 1;
- for (int32_t i = 0; i < tListLen(infosMeta); ++i) {
- tstrncpy(meta.tbName, infosMeta[i].name, sizeof(meta.tbName));
- meta.numOfColumns = infosMeta[i].colNum;
+ size_t size = 0;
+ const SSysTableMeta* pInfosTableMeta = NULL;
+ getInfosDbMeta(&pInfosTableMeta, &size);
- if (mndInitInfosTableSchema(infosMeta[i].schema, infosMeta[i].colNum, &meta.pSchemas)) {
+ for (int32_t i = 0; i < size; ++i) {
+ tstrncpy(meta.tbName, pInfosTableMeta[i].name, sizeof(meta.tbName));
+ meta.numOfColumns = pInfosTableMeta[i].colNum;
+
+ if (mndInitInfosTableSchema(pInfosTableMeta[i].schema, pInfosTableMeta[i].colNum, &meta.pSchemas)) {
return -1;
}
diff --git a/source/dnode/mnode/impl/src/mndPerfSchema.c b/source/dnode/mnode/impl/src/mndPerfSchema.c
index 2cb8c4351e..f45a584b96 100644
--- a/source/dnode/mnode/impl/src/mndPerfSchema.c
+++ b/source/dnode/mnode/impl/src/mndPerfSchema.c
@@ -16,77 +16,10 @@
#define _DEFAULT_SOURCE
#include "mndPerfSchema.h"
#include "mndInt.h"
-
-//!!!! Note: only APPEND columns in below tables, NO insert !!!!
-static const SPerfsTableSchema connectionsSchema[] = {
- {.name = "conn_id", .bytes = 4, .type = TSDB_DATA_TYPE_UINT},
- {.name = "user", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "program", .bytes = TSDB_APP_NAME_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "pid", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "end_point", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "login_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "last_access", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
-static const SPerfsTableSchema queriesSchema[] = {
- {.name = "query_id", .bytes = 4, .type = TSDB_DATA_TYPE_UBIGINT},
- {.name = "sql", .bytes = TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "user", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "pid", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "fqdn", .bytes = TSDB_FQDN_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "exec_time", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "sub_queries", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "sub_query_info", .bytes = TSDB_SHOW_SUBQUERY_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
-};
-
-static const SPerfsTableSchema topicSchema[] = {
- {.name = "topic_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "sql", .bytes = TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- // TODO config
-};
-
-static const SPerfsTableSchema consumerSchema[] = {
- {.name = "consumer_id", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "group_id", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "app_id", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "status", .bytes = 20 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "topics", .bytes = TSDB_SHOW_LIST_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "pid", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "end_point", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "up_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "subscribe_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
- {.name = "rebalance_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
-};
-
-static const SPerfsTableSchema subscriptionSchema[] = {
- {.name = "topic_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "group_id", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "consumer_id", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
-};
-
-static const SPerfsTableSchema offsetSchema[] = {
- {.name = "topic_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "group_id", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_BINARY},
- {.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
- {.name = "committed_offset", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "current_offset", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
- {.name = "skip_log_cnt", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT},
-};
-
-static const SPerfsTableMeta perfsMeta[] = {
- {TSDB_PERFS_TABLE_CONNECTIONS, connectionsSchema, tListLen(connectionsSchema)},
- {TSDB_PERFS_TABLE_QUERIES, queriesSchema, tListLen(queriesSchema)},
- {TSDB_PERFS_TABLE_TOPICS, topicSchema, tListLen(topicSchema)},
- {TSDB_PERFS_TABLE_CONSUMERS, consumerSchema, tListLen(consumerSchema)},
- {TSDB_PERFS_TABLE_SUBSCRIPTIONS, subscriptionSchema, tListLen(subscriptionSchema)},
- {TSDB_PERFS_TABLE_OFFSETS, offsetSchema, tListLen(offsetSchema)},
-};
+#include "systable.h"
// connection/application/
-int32_t mndInitPerfsTableSchema(const SPerfsTableSchema *pSrc, int32_t colNum, SSchema **pDst) {
+int32_t mndInitPerfsTableSchema(const SSysDbTableSchema *pSrc, int32_t colNum, SSchema **pDst) {
SSchema *schema = taosMemoryCalloc(colNum, sizeof(SSchema));
if (NULL == schema) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
@@ -113,11 +46,15 @@ int32_t mndPerfsInitMeta(SHashObj *hash) {
meta.sversion = 1;
meta.tversion = 1;
- for (int32_t i = 0; i < tListLen(perfsMeta); ++i) {
- strcpy(meta.tbName, perfsMeta[i].name);
- meta.numOfColumns = perfsMeta[i].colNum;
+ size_t size = 0;
+ const SSysTableMeta* pSysDbTableMeta = NULL;
+ getPerfDbMeta(&pSysDbTableMeta, &size);
- if (mndInitPerfsTableSchema(perfsMeta[i].schema, perfsMeta[i].colNum, &meta.pSchemas)) {
+ for (int32_t i = 0; i < size; ++i) {
+ strcpy(meta.tbName, pSysDbTableMeta[i].name);
+ meta.numOfColumns = pSysDbTableMeta[i].colNum;
+
+ if (mndInitPerfsTableSchema(pSysDbTableMeta[i].schema, pSysDbTableMeta[i].colNum, &meta.pSchemas)) {
return -1;
}
@@ -153,7 +90,6 @@ int32_t mndBuildPerfsTableSchema(SMnode *pMnode, const char *dbFName, const char
}
memcpy(pRsp->pSchemas, meta->pSchemas, meta->numOfColumns * sizeof(SSchema));
-
return 0;
}
diff --git a/source/dnode/mnode/impl/src/mndQuery.c b/source/dnode/mnode/impl/src/mndQuery.c
index d184e354c4..7aa55e2109 100644
--- a/source/dnode/mnode/impl/src/mndQuery.c
+++ b/source/dnode/mnode/impl/src/mndQuery.c
@@ -20,7 +20,7 @@
int32_t mndProcessQueryMsg(SNodeMsg *pReq) {
SMnode *pMnode = pReq->pNode;
- SReadHandle handle = {0};
+ SReadHandle handle = {.mnd = pMnode};
mTrace("msg:%p, in query queue is processing", pReq);
switch (pReq->rpcMsg.msgType) {
diff --git a/source/dnode/mnode/impl/src/mndShow.c b/source/dnode/mnode/impl/src/mndShow.c
index 94366a241d..5b63e793cf 100644
--- a/source/dnode/mnode/impl/src/mndShow.c
+++ b/source/dnode/mnode/impl/src/mndShow.c
@@ -15,6 +15,7 @@
#define _DEFAULT_SOURCE
#include "mndShow.h"
+#include "systable.h"
#define SHOW_STEP_SIZE 100
@@ -84,19 +85,19 @@ static int32_t convertToRetrieveType(char* name, int32_t len) {
type = TSDB_MGMT_TABLE_GRANTS;
} else if (strncasecmp(name, TSDB_INS_TABLE_VGROUPS, len) == 0) {
type = TSDB_MGMT_TABLE_VGROUP;
- } else if (strncasecmp(name, TSDB_INS_TABLE_CONSUMERS, len) == 0) {
+ } else if (strncasecmp(name, TSDB_PERFS_TABLE_CONSUMERS, len) == 0) {
type = TSDB_MGMT_TABLE_CONSUMERS;
- } else if (strncasecmp(name, TSDB_INS_TABLE_SUBSCRIBES, len) == 0) {
+ } else if (strncasecmp(name, TSDB_PERFS_TABLE_SUBSCRIBES, len) == 0) {
type = TSDB_MGMT_TABLE_SUBSCRIBES;
- } else if (strncasecmp(name, TSDB_INS_TABLE_TRANS, len) == 0) {
+ } else if (strncasecmp(name, TSDB_PERFS_TABLE_TRANS, len) == 0) {
type = TSDB_MGMT_TABLE_TRANS;
- } else if (strncasecmp(name, TSDB_INS_TABLE_SMAS, len) == 0) {
+ } else if (strncasecmp(name, TSDB_PERFS_TABLE_SMAS, len) == 0) {
type = TSDB_MGMT_TABLE_SMAS;
} else if (strncasecmp(name, TSDB_INS_TABLE_CONFIGS, len) == 0) {
type = TSDB_MGMT_TABLE_CONFIGS;
- } else if (strncasecmp(name, TSDB_INS_TABLE_CONNS, len) == 0) {
+ } else if (strncasecmp(name, TSDB_PERFS_TABLE_CONNECTIONS, len) == 0) {
type = TSDB_MGMT_TABLE_CONNS;
- } else if (strncasecmp(name, TSDB_INS_TABLE_QUERIES, len) == 0) {
+ } else if (strncasecmp(name, TSDB_PERFS_TABLE_QUERIES, len) == 0) {
type = TSDB_MGMT_TABLE_QUERIES;
} else if (strncasecmp(name, TSDB_INS_TABLE_VNODES, len) == 0) {
type = TSDB_MGMT_TABLE_VNODES;
diff --git a/source/libs/catalog/src/catalog.c b/source/libs/catalog/src/catalog.c
index 272c370ca3..6f1f34a57b 100644
--- a/source/libs/catalog/src/catalog.c
+++ b/source/libs/catalog/src/catalog.c
@@ -17,6 +17,7 @@
#include "query.h"
#include "tname.h"
#include "catalogInt.h"
+#include "systable.h"
int32_t ctgActUpdateVg(SCtgMetaAction *action);
int32_t ctgActUpdateTbl(SCtgMetaAction *action);
diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h
index 7a6432a06c..f2eac6db7f 100644
--- a/source/libs/executor/inc/executorimpl.h
+++ b/source/libs/executor/inc/executorimpl.h
@@ -640,6 +640,7 @@ int32_t getTableScanOrder(SOperatorInfo* pOperator);
void doSetOperatorCompleted(SOperatorInfo* pOperator);
void doFilter(const SNode* pFilterNode, SSDataBlock* pBlock);
SqlFunctionCtx* createSqlFunctionCtx(SExprInfo* pExprInfo, int32_t numOfOutput, int32_t** rowCellInfoOffset);
+void relocateColumnData(SSDataBlock* pBlock, const SArray* pColMatchInfo, SArray* pCols);
SOperatorInfo* createExchangeOperatorInfo(const SNodeList* pSources, SSDataBlock* pBlock, SExecTaskInfo* pTaskInfo);
diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c
index f1995b723d..df6d799e04 100644
--- a/source/libs/executor/src/executorimpl.c
+++ b/source/libs/executor/src/executorimpl.c
@@ -3739,7 +3739,7 @@ static int32_t doSendFetchDataRequest(SExchangeInfo* pExchangeInfo, SExecTaskInf
}
// NOTE: sources columns are more than the destination SSDatablock columns.
-static void relocateColumnData(SSDataBlock* pBlock, const SArray* pColMatchInfo, SArray* pCols) {
+void relocateColumnData(SSDataBlock* pBlock, const SArray* pColMatchInfo, SArray* pCols) {
size_t numOfSrcCols = taosArrayGetSize(pCols);
ASSERT(numOfSrcCols >= pBlock->info.numOfCols);
diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c
index 8291826e69..d8985443fc 100644
--- a/source/libs/executor/src/scanoperator.c
+++ b/source/libs/executor/src/scanoperator.c
@@ -13,7 +13,7 @@
* along with this program. If not, see .
*/
-#include
+#include "common/ttime.h"
#include "filter.h"
#include "function.h"
#include "functionMgt.h"
@@ -21,7 +21,7 @@
#include "querynodes.h"
#include "tglobal.h"
#include "tname.h"
-#include "vnode.h"
+#include "systable.h"
#include "tdatablock.h"
#include "tmsg.h"
@@ -36,6 +36,9 @@
#define SET_REVERSE_SCAN_FLAG(_info) ((_info)->scanFlag = REVERSE_SCAN)
#define SWITCH_ORDER(n) (((n) = ((n) == TSDB_ORDER_ASC) ? TSDB_ORDER_DESC : TSDB_ORDER_ASC))
+int32_t buildSysDbTableInfo(const SSysTableScanInfo* pInfo);
+
+int32_t buildDbTableInfoBlock(const SSDataBlock* p, const SSysTableMeta* pSysDbTableMeta, size_t size, const char* dbName);
void switchCtxOrder(SqlFunctionCtx* pCtx, int32_t numOfOutput) {
for (int32_t i = 0; i < numOfOutput; ++i) {
SWITCH_ORDER(pCtx[i].order);
@@ -65,21 +68,6 @@ static void setupQueryRangeForReverseScan(STableScanInfo* pTableScanInfo) {
#endif
}
-// relocated the column data according to the slotId
-static void relocateColumnData(SSDataBlock* pBlock, const SArray* pColMatchInfo, SArray* pCols) {
- int32_t numOfCols = pBlock->info.numOfCols;
- for (int32_t i = 0; i < numOfCols; ++i) {
- SColumnInfoData* p = taosArrayGet(pCols, i);
- SColMatchInfo* pmInfo = taosArrayGet(pColMatchInfo, i);
- if (!pmInfo->output) {
- continue;
- }
-
- ASSERT(pmInfo->colId == p->info.colId);
- taosArraySet(pBlock->pDataBlock, pmInfo->targetSlotId, p);
- }
-}
-
static void getNextTimeWindow(SInterval* pInterval, STimeWindow* tw, int32_t order) {
int32_t factor = GET_FORWARD_DIRECTION_FACTOR(order);
if (pInterval->intervalUnit != 'n' && pInterval->intervalUnit != 'y') {
@@ -788,7 +776,12 @@ static SSDataBlock* doFilterResult(SSysTableScanInfo* pInfo) {
continue;
}
- colDataAppend(pDest, numOfRow, colDataGetData(pSrc, j), false);
+ if (colDataIsNull_s(pSrc, j)) {
+ colDataAppendNULL(pDest, numOfRow);
+ } else {
+ colDataAppend(pDest, numOfRow, colDataGetData(pSrc, j), false);
+ }
+
numOfRow += 1;
}
} else {
@@ -802,6 +795,67 @@ static SSDataBlock* doFilterResult(SSysTableScanInfo* pInfo) {
return pInfo->pRes->info.rows == 0 ? NULL : pInfo->pRes;
}
+static SSDataBlock* buildSysTableMetaBlock() {
+ SSDataBlock* pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock));
+ pBlock->info.numOfCols = 10;
+ pBlock->info.hasVarCol = true;
+
+ pBlock->pDataBlock = taosArrayInit(pBlock->info.numOfCols, sizeof(SColumnInfoData));
+
+ SColumnInfoData colInfoData = {0};
+ colInfoData.info.colId = 1;
+ colInfoData.info.type = TSDB_DATA_TYPE_VARCHAR;
+ colInfoData.info.bytes = (TSDB_TABLE_NAME_LEN - 1) + VARSTR_HEADER_SIZE;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 2;
+ colInfoData.info.type = TSDB_DATA_TYPE_VARCHAR;
+ colInfoData.info.bytes = (TSDB_DB_NAME_LEN - 1) + VARSTR_HEADER_SIZE;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 3;
+ colInfoData.info.type = TSDB_DATA_TYPE_TIMESTAMP;
+ colInfoData.info.bytes = 8;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 4;
+ colInfoData.info.type = TSDB_DATA_TYPE_INT;
+ colInfoData.info.bytes = 4;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 5;
+ colInfoData.info.type = TSDB_DATA_TYPE_VARCHAR;
+ colInfoData.info.bytes = (TSDB_TABLE_NAME_LEN - 1) + VARSTR_HEADER_SIZE;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 6;
+ colInfoData.info.type = TSDB_DATA_TYPE_BIGINT;
+ colInfoData.info.bytes = 8;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 7;
+ colInfoData.info.type = TSDB_DATA_TYPE_INT;
+ colInfoData.info.bytes = 4;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 8;
+ colInfoData.info.type = TSDB_DATA_TYPE_INT;
+ colInfoData.info.bytes = 4;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 9;
+ colInfoData.info.type = TSDB_DATA_TYPE_VARCHAR;
+ colInfoData.info.bytes = 512 + VARSTR_HEADER_SIZE;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ colInfoData.info.colId = 10;
+ colInfoData.info.type = TSDB_DATA_TYPE_VARCHAR;
+ colInfoData.info.bytes = 20 + VARSTR_HEADER_SIZE;
+ taosArrayPush(pBlock->pDataBlock, &colInfoData);
+
+ return pBlock;
+}
+
static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) {
// build message and send to mnode to fetch the content of system tables.
SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo;
@@ -810,115 +864,135 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) {
// retrieve local table list info from vnode
const char* name = tNameGetTableName(&pInfo->name);
if (strncasecmp(name, TSDB_INS_TABLE_USER_TABLES, TSDB_TABLE_FNAME_LEN) == 0) {
- if (pInfo->pCur == NULL) {
- pInfo->pCur = metaOpenTbCursor(pInfo->readHandle.meta);
- }
+ // the retrieve is executed on the mnode, so return tables that belongs to the information schema database.
+ if (pInfo->readHandle.mnd != NULL) {
+ if (pOperator->status == OP_EXEC_DONE) {
+ return NULL;
+ }
- blockDataCleanup(pInfo->pRes);
+ buildSysDbTableInfo(pInfo);
- int32_t tableNameSlotId = 1;
- SColumnInfoData* pTableNameCol = taosArrayGet(pInfo->pRes->pDataBlock, tableNameSlotId);
+ doFilterResult(pInfo);
+ pInfo->loadInfo.totalRows += pInfo->pRes->info.rows;
- int32_t numOfRows = 0;
+ pOperator->status = OP_EXEC_DONE;
+ return (pInfo->pRes->info.rows == 0) ? NULL : pInfo->pRes;
+ } else {
+ if (pInfo->pCur == NULL) {
+ pInfo->pCur = metaOpenTbCursor(pInfo->readHandle.meta);
+ }
- const char* db = NULL;
- int32_t vgId = 0;
- vnodeGetInfo(pInfo->readHandle.vnode, &db, &vgId);
+ blockDataCleanup(pInfo->pRes);
- SName sn = {0};
- char dbname[TSDB_DB_FNAME_LEN + VARSTR_HEADER_SIZE] = {0};
- tNameFromString(&sn, db, T_NAME_ACCT|T_NAME_DB);
+ int32_t numOfRows = 0;
- tNameGetDbName(&sn, varDataVal(dbname));
- varDataSetLen(dbname, strlen(varDataVal(dbname)));
+ const char* db = NULL;
+ int32_t vgId = 0;
+ vnodeGetInfo(pInfo->readHandle.vnode, &db, &vgId);
- char n[TSDB_TABLE_NAME_LEN] = {0};
- while (metaTbCursorNext(pInfo->pCur) == 0) {
- STR_TO_VARSTR(n, pInfo->pCur->mr.me.name);
- colDataAppend(pTableNameCol, numOfRows, n, false);
+ SName sn = {0};
+ char dbname[TSDB_DB_FNAME_LEN + VARSTR_HEADER_SIZE] = {0};
+ tNameFromString(&sn, db, T_NAME_ACCT | T_NAME_DB);
- int32_t tableType = pInfo->pCur->mr.me.type;
+ tNameGetDbName(&sn, varDataVal(dbname));
+ varDataSetLen(dbname, strlen(varDataVal(dbname)));
- // database name
- SColumnInfoData* pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 0);
- colDataAppend(pColInfoData, numOfRows, dbname, false);
+ SSDataBlock* p = buildSysTableMetaBlock();
+ blockDataEnsureCapacity(p, pInfo->capacity);
- // vgId
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 6);
- colDataAppend(pColInfoData, numOfRows, (char*) &vgId, false);
+ char n[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
+ while (metaTbCursorNext(pInfo->pCur) == 0) {
+ STR_TO_VARSTR(n, pInfo->pCur->mr.me.name);
- // table comment
- // todo: set the correct comment
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 8);
- colDataAppendNULL(pColInfoData, numOfRows);
+ // table name
+ SColumnInfoData* pColInfoData = taosArrayGet(p->pDataBlock, 0);
+ colDataAppend(pColInfoData, numOfRows, n, false);
- char str[256] = {0};
- if (tableType == TSDB_CHILD_TABLE) {
- SMetaReader mr = {0};
- metaReaderInit(&mr, pInfo->readHandle.meta, 0);
- metaGetTableEntryByUid(&mr, pInfo->pCur->mr.me.ctbEntry.suid);
+ // database name
+ pColInfoData = taosArrayGet(p->pDataBlock, 1);
+ colDataAppend(pColInfoData, numOfRows, dbname, false);
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 3);
- colDataAppend(pColInfoData, numOfRows, (char*) &mr.me.stbEntry.schema.nCols, false);
+ // vgId
+ pColInfoData = taosArrayGet(p->pDataBlock, 6);
+ colDataAppend(pColInfoData, numOfRows, (char*)&vgId, false);
- // create time
- int64_t ts = pInfo->pCur->mr.me.ctbEntry.ctime;
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 2);
- colDataAppend(pColInfoData, numOfRows, (char*) &ts, false);
-
- // super table name
- STR_TO_VARSTR(str, mr.me.name);
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 4);
- colDataAppend(pColInfoData, numOfRows, str, false);
- metaReaderClear(&mr);
-
- // uid
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 5);
- colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.uid, false);
-
- // ttl
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 7);
- colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ctbEntry.ttlDays, false);
-
- STR_TO_VARSTR(str, "CHILD_TABLE");
- } else if (tableType == TSDB_NORMAL_TABLE) {
- // create time
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 2);
- colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ntbEntry.ctime, false);
-
- // number of columns
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 3);
- colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ntbEntry.schema.nCols, false);
-
- // super table name
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 4);
+ // table comment
+ // todo: set the correct comment
+ pColInfoData = taosArrayGet(p->pDataBlock, 8);
colDataAppendNULL(pColInfoData, numOfRows);
- // uid
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 5);
- colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.uid, false);
+ char str[256] = {0};
+ int32_t tableType = pInfo->pCur->mr.me.type;
+ if (tableType == TSDB_CHILD_TABLE) {
+ // create time
+ int64_t ts = pInfo->pCur->mr.me.ctbEntry.ctime;
+ pColInfoData = taosArrayGet(p->pDataBlock, 2);
+ colDataAppend(pColInfoData, numOfRows, (char*)&ts, false);
- // ttl
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 7);
- colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ntbEntry.ttlDays, false);
+ SMetaReader mr = {0};
+ metaReaderInit(&mr, pInfo->readHandle.meta, 0);
+ metaGetTableEntryByUid(&mr, pInfo->pCur->mr.me.ctbEntry.suid);
- STR_TO_VARSTR(str, "NORMAL_TABLE");
+ // number of columns
+ pColInfoData = taosArrayGet(p->pDataBlock, 3);
+ colDataAppend(pColInfoData, numOfRows, (char*)&mr.me.stbEntry.schema.nCols, false);
+
+ // super table name
+ STR_TO_VARSTR(str, mr.me.name);
+ pColInfoData = taosArrayGet(p->pDataBlock, 4);
+ colDataAppend(pColInfoData, numOfRows, str, false);
+ metaReaderClear(&mr);
+
+ // uid
+ pColInfoData = taosArrayGet(p->pDataBlock, 5);
+ colDataAppend(pColInfoData, numOfRows, (char*)&pInfo->pCur->mr.me.uid, false);
+
+ // ttl
+ pColInfoData = taosArrayGet(p->pDataBlock, 7);
+ colDataAppend(pColInfoData, numOfRows, (char*)&pInfo->pCur->mr.me.ctbEntry.ttlDays, false);
+
+ STR_TO_VARSTR(str, "CHILD_TABLE");
+ } else if (tableType == TSDB_NORMAL_TABLE) {
+ // create time
+ pColInfoData = taosArrayGet(p->pDataBlock, 2);
+ colDataAppend(pColInfoData, numOfRows, (char*)&pInfo->pCur->mr.me.ntbEntry.ctime, false);
+
+ // number of columns
+ pColInfoData = taosArrayGet(p->pDataBlock, 3);
+ colDataAppend(pColInfoData, numOfRows, (char*)&pInfo->pCur->mr.me.ntbEntry.schema.nCols, false);
+
+ // super table name
+ pColInfoData = taosArrayGet(p->pDataBlock, 4);
+ colDataAppendNULL(pColInfoData, numOfRows);
+
+ // uid
+ pColInfoData = taosArrayGet(p->pDataBlock, 5);
+ colDataAppend(pColInfoData, numOfRows, (char*)&pInfo->pCur->mr.me.uid, false);
+
+ // ttl
+ pColInfoData = taosArrayGet(p->pDataBlock, 7);
+ colDataAppend(pColInfoData, numOfRows, (char*)&pInfo->pCur->mr.me.ntbEntry.ttlDays, false);
+
+ STR_TO_VARSTR(str, "NORMAL_TABLE");
+ }
+
+ pColInfoData = taosArrayGet(p->pDataBlock, 9);
+ colDataAppend(pColInfoData, numOfRows, str, false);
+
+ if (++numOfRows >= pInfo->capacity) {
+ break;
+ }
}
- pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 9);
- colDataAppend(pColInfoData, numOfRows, str, false);
+ p->info.rows = numOfRows;
+ pInfo->pRes->info.rows = numOfRows;
- if (++numOfRows >= pInfo->capacity) {
- break;
- }
+ relocateColumnData(pInfo->pRes, pInfo->scanCols, p->pDataBlock);
+ doFilterResult(pInfo);
+
+ pInfo->loadInfo.totalRows += pInfo->pRes->info.rows;
+ return (pInfo->pRes->info.rows == 0) ? NULL : pInfo->pRes;
}
-
- pInfo->loadInfo.totalRows += numOfRows;
- pInfo->pRes->info.rows = numOfRows;
-
- // pInfo->elapsedTime;
- // pInfo->totalBytes;
- return (pInfo->pRes->info.rows == 0) ? NULL : pInfo->pRes;
} else { // load the meta from mnode of the given epset
if (pOperator->status == OP_EXEC_DONE) {
return NULL;
@@ -988,6 +1062,67 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) {
}
}
+int32_t buildSysDbTableInfo(const SSysTableScanInfo* pInfo) {
+ SSDataBlock* p = buildSysTableMetaBlock();
+ blockDataEnsureCapacity(p, pInfo->capacity);
+
+ size_t size = 0;
+ const SSysTableMeta* pSysDbTableMeta = NULL;
+
+ getInfosDbMeta(&pSysDbTableMeta, &size);
+ p->info.rows = buildDbTableInfoBlock(p, pSysDbTableMeta, size, TSDB_INFORMATION_SCHEMA_DB);
+
+ getPerfDbMeta(&pSysDbTableMeta, &size);
+ p->info.rows = buildDbTableInfoBlock(p, pSysDbTableMeta, size, TSDB_PERFORMANCE_SCHEMA_DB);
+
+ relocateColumnData(pInfo->pRes, pInfo->scanCols, p->pDataBlock);
+// blockDataDestroy(p); todo handle memory leak
+
+ pInfo->pRes->info.rows = p->info.rows;
+ return p->info.rows;
+}
+
+int32_t buildDbTableInfoBlock(const SSDataBlock* p, const SSysTableMeta* pSysDbTableMeta, size_t size, const char* dbName) {
+ char n[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0};
+ int32_t numOfRows = p->info.rows;
+
+ for(int32_t i = 0; i < size; ++i) {
+ const SSysTableMeta* pm = &pSysDbTableMeta[i];
+
+ SColumnInfoData* pColInfoData = taosArrayGet(p->pDataBlock, 0);
+
+ STR_TO_VARSTR(n, pm->name);
+ colDataAppend(pColInfoData, numOfRows, n, false);
+
+ // database name
+ STR_TO_VARSTR(n, dbName);
+ pColInfoData = taosArrayGet(p->pDataBlock, 1);
+ colDataAppend(pColInfoData, numOfRows, n, false);
+
+ // create time
+ pColInfoData = taosArrayGet(p->pDataBlock, 2);
+ colDataAppendNULL(pColInfoData, numOfRows);
+
+ // number of columns
+ pColInfoData = taosArrayGet(p->pDataBlock, 3);
+ colDataAppend(pColInfoData, numOfRows, (char*)&pm->colNum, false);
+
+ for(int32_t j = 4; j <= 8; ++j) {
+ pColInfoData = taosArrayGet(p->pDataBlock, j);
+ colDataAppendNULL(pColInfoData, numOfRows);
+ }
+
+ STR_TO_VARSTR(n, "SYSTEM_TABLE");
+
+ pColInfoData = taosArrayGet(p->pDataBlock, 9);
+ colDataAppend(pColInfoData, numOfRows, n, false);
+
+ numOfRows += 1;
+ }
+
+ return numOfRows;
+}
+
SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSDataBlock* pResBlock, const SName* pName,
SNode* pCondition, SEpSet epset, SArray* colList,
SExecTaskInfo* pTaskInfo, bool showRewrite, int32_t accountId) {
diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c
index cb514e974a..598501a3aa 100644
--- a/source/libs/parser/src/parTranslater.c
+++ b/source/libs/parser/src/parTranslater.c
@@ -22,6 +22,7 @@
#include "scalar.h"
#include "tglobal.h"
#include "ttime.h"
+#include "systable.h"
#define GET_OPTION_VAL(pVal, defaultVal) (NULL == (pVal) ? (defaultVal) : getBigintFromValueNode((SValueNode*)(pVal)))
@@ -788,17 +789,17 @@ static int32_t setSysTableVgroupList(STranslateContext* pCxt, SName* pName, SRea
SArray* vgroupList = NULL;
if ('\0' != pRealTable->qualDbName[0]) {
// todo release after mnode can be processed
- // if (0 != strcmp(pRealTable->qualDbName, TSDB_INFORMATION_SCHEMA_DB)) {
- code = getDBVgInfo(pCxt, pRealTable->qualDbName, &vgroupList);
- // }
+ if (0 != strcmp(pRealTable->qualDbName, TSDB_INFORMATION_SCHEMA_DB)) {
+ code = getDBVgInfo(pCxt, pRealTable->qualDbName, &vgroupList);
+ }
} else {
code = getDBVgInfoImpl(pCxt, pName, &vgroupList);
}
// todo release after mnode can be processed
- // if (TSDB_CODE_SUCCESS == code) {
- // code = addMnodeToVgroupList(&pCxt->pParseCxt->mgmtEpSet, &vgroupList);
- // }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = addMnodeToVgroupList(&pCxt->pParseCxt->mgmtEpSet, &vgroupList);
+ }
if (TSDB_CODE_SUCCESS == code) {
code = toVgroupsInfo(vgroupList, &pRealTable->pVgroupList);
diff --git a/source/libs/planner/src/planPhysiCreater.c b/source/libs/planner/src/planPhysiCreater.c
index 548957ab8e..0fd1cffc4c 100644
--- a/source/libs/planner/src/planPhysiCreater.c
+++ b/source/libs/planner/src/planPhysiCreater.c
@@ -18,6 +18,7 @@
#include "catalog.h"
#include "functionMgt.h"
#include "tglobal.h"
+#include "systable.h"
typedef struct SSlotIdInfo {
int16_t slotId;
diff --git a/source/libs/qcom/src/querymsg.c b/source/libs/qcom/src/querymsg.c
index fd7c831399..286e7d3d44 100644
--- a/source/libs/qcom/src/querymsg.c
+++ b/source/libs/qcom/src/querymsg.c
@@ -17,6 +17,7 @@
#include "queryInt.h"
#include "query.h"
#include "trpc.h"
+#include "systable.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-truncation"
diff --git a/tests/script/tsim/query/complex_having.sim b/tests/script/tsim/query/complex_having.sim
index 86d4f7d4ca..ef58228f34 100644
--- a/tests/script/tsim/query/complex_having.sim
+++ b/tests/script/tsim/query/complex_having.sim
@@ -215,6 +215,7 @@ sql select count(c1) from stb1
print ====> sql : select count(c1) from stb1
print ====> rows: $data00
if $data00 != 20 then
+ print expect 20, actual: $data00
return -1
endi