feat: support show views command
This commit is contained in:
parent
5b639a172d
commit
6c8db261f3
|
@ -49,6 +49,7 @@ extern "C" {
|
||||||
#define TSDB_INS_TABLE_STREAMS "ins_streams"
|
#define TSDB_INS_TABLE_STREAMS "ins_streams"
|
||||||
#define TSDB_INS_TABLE_STREAM_TASKS "ins_stream_tasks"
|
#define TSDB_INS_TABLE_STREAM_TASKS "ins_stream_tasks"
|
||||||
#define TSDB_INS_TABLE_USER_PRIVILEGES "ins_user_privileges"
|
#define TSDB_INS_TABLE_USER_PRIVILEGES "ins_user_privileges"
|
||||||
|
#define TSDB_INS_TABLE_VIEWS "ins_views"
|
||||||
|
|
||||||
#define TSDB_PERFORMANCE_SCHEMA_DB "performance_schema"
|
#define TSDB_PERFORMANCE_SCHEMA_DB "performance_schema"
|
||||||
#define TSDB_PERFS_TABLE_SMAS "perf_smas"
|
#define TSDB_PERFS_TABLE_SMAS "perf_smas"
|
||||||
|
|
|
@ -335,6 +335,7 @@ typedef enum ENodeType {
|
||||||
QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT,
|
QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT,
|
||||||
QUERY_NODE_SHOW_VNODES_STMT,
|
QUERY_NODE_SHOW_VNODES_STMT,
|
||||||
QUERY_NODE_SHOW_USER_PRIVILEGES_STMT,
|
QUERY_NODE_SHOW_USER_PRIVILEGES_STMT,
|
||||||
|
QUERY_NODE_SHOW_VIEWS_STMT,
|
||||||
QUERY_NODE_SHOW_CREATE_DATABASE_STMT,
|
QUERY_NODE_SHOW_CREATE_DATABASE_STMT,
|
||||||
QUERY_NODE_SHOW_CREATE_TABLE_STMT,
|
QUERY_NODE_SHOW_CREATE_TABLE_STMT,
|
||||||
QUERY_NODE_SHOW_CREATE_STABLE_STMT,
|
QUERY_NODE_SHOW_CREATE_STABLE_STMT,
|
||||||
|
|
|
@ -186,179 +186,177 @@
|
||||||
#define TK_SUBSCRIPTIONS 167
|
#define TK_SUBSCRIPTIONS 167
|
||||||
#define TK_VNODES 168
|
#define TK_VNODES 168
|
||||||
#define TK_ALIVE 169
|
#define TK_ALIVE 169
|
||||||
#define TK_LIKE 170
|
#define TK_VIEWS 170
|
||||||
#define TK_TBNAME 171
|
#define TK_LIKE 171
|
||||||
#define TK_QTAGS 172
|
#define TK_TBNAME 172
|
||||||
#define TK_AS 173
|
#define TK_QTAGS 173
|
||||||
#define TK_INDEX 174
|
#define TK_AS 174
|
||||||
#define TK_FUNCTION 175
|
#define TK_INDEX 175
|
||||||
#define TK_INTERVAL 176
|
#define TK_FUNCTION 176
|
||||||
#define TK_COUNT 177
|
#define TK_INTERVAL 177
|
||||||
#define TK_LAST_ROW 178
|
#define TK_COUNT 178
|
||||||
#define TK_META 179
|
#define TK_LAST_ROW 179
|
||||||
#define TK_ONLY 180
|
#define TK_META 180
|
||||||
#define TK_TOPIC 181
|
#define TK_ONLY 181
|
||||||
#define TK_CONSUMER 182
|
#define TK_TOPIC 182
|
||||||
#define TK_GROUP 183
|
#define TK_CONSUMER 183
|
||||||
#define TK_DESC 184
|
#define TK_GROUP 184
|
||||||
#define TK_DESCRIBE 185
|
#define TK_DESC 185
|
||||||
#define TK_RESET 186
|
#define TK_DESCRIBE 186
|
||||||
#define TK_QUERY 187
|
#define TK_RESET 187
|
||||||
#define TK_CACHE 188
|
#define TK_QUERY 188
|
||||||
#define TK_EXPLAIN 189
|
#define TK_CACHE 189
|
||||||
#define TK_ANALYZE 190
|
#define TK_EXPLAIN 190
|
||||||
#define TK_VERBOSE 191
|
#define TK_ANALYZE 191
|
||||||
#define TK_NK_BOOL 192
|
#define TK_VERBOSE 192
|
||||||
#define TK_RATIO 193
|
#define TK_NK_BOOL 193
|
||||||
#define TK_NK_FLOAT 194
|
#define TK_RATIO 194
|
||||||
#define TK_OUTPUTTYPE 195
|
#define TK_NK_FLOAT 195
|
||||||
#define TK_AGGREGATE 196
|
#define TK_OUTPUTTYPE 196
|
||||||
#define TK_BUFSIZE 197
|
#define TK_AGGREGATE 197
|
||||||
#define TK_LANGUAGE 198
|
#define TK_BUFSIZE 198
|
||||||
#define TK_REPLACE 199
|
#define TK_LANGUAGE 199
|
||||||
#define TK_VIEW 200
|
#define TK_REPLACE 200
|
||||||
#define TK_STREAM 201
|
#define TK_VIEW 201
|
||||||
#define TK_INTO 202
|
#define TK_STREAM 202
|
||||||
#define TK_PAUSE 203
|
#define TK_INTO 203
|
||||||
#define TK_RESUME 204
|
#define TK_PAUSE 204
|
||||||
#define TK_TRIGGER 205
|
#define TK_RESUME 205
|
||||||
#define TK_AT_ONCE 206
|
#define TK_TRIGGER 206
|
||||||
#define TK_WINDOW_CLOSE 207
|
#define TK_AT_ONCE 207
|
||||||
#define TK_IGNORE 208
|
#define TK_WINDOW_CLOSE 208
|
||||||
#define TK_EXPIRED 209
|
#define TK_IGNORE 209
|
||||||
#define TK_FILL_HISTORY 210
|
#define TK_EXPIRED 210
|
||||||
#define TK_UPDATE 211
|
#define TK_FILL_HISTORY 211
|
||||||
#define TK_SUBTABLE 212
|
#define TK_UPDATE 212
|
||||||
#define TK_UNTREATED 213
|
#define TK_SUBTABLE 213
|
||||||
#define TK_KILL 214
|
#define TK_UNTREATED 214
|
||||||
#define TK_CONNECTION 215
|
#define TK_KILL 215
|
||||||
#define TK_TRANSACTION 216
|
#define TK_CONNECTION 216
|
||||||
#define TK_BALANCE 217
|
#define TK_TRANSACTION 217
|
||||||
#define TK_VGROUP 218
|
#define TK_BALANCE 218
|
||||||
#define TK_LEADER 219
|
#define TK_VGROUP 219
|
||||||
#define TK_MERGE 220
|
#define TK_LEADER 220
|
||||||
#define TK_REDISTRIBUTE 221
|
#define TK_MERGE 221
|
||||||
#define TK_SPLIT 222
|
#define TK_REDISTRIBUTE 222
|
||||||
#define TK_DELETE 223
|
#define TK_SPLIT 223
|
||||||
#define TK_INSERT 224
|
#define TK_DELETE 224
|
||||||
#define TK_NULL 225
|
#define TK_INSERT 225
|
||||||
#define TK_NK_QUESTION 226
|
#define TK_NULL 226
|
||||||
#define TK_NK_ARROW 227
|
#define TK_NK_QUESTION 227
|
||||||
#define TK_ROWTS 228
|
#define TK_NK_ARROW 228
|
||||||
#define TK_QSTART 229
|
#define TK_ROWTS 229
|
||||||
#define TK_QEND 230
|
#define TK_QSTART 230
|
||||||
#define TK_QDURATION 231
|
#define TK_QEND 231
|
||||||
#define TK_WSTART 232
|
#define TK_QDURATION 232
|
||||||
#define TK_WEND 233
|
#define TK_WSTART 233
|
||||||
#define TK_WDURATION 234
|
#define TK_WEND 234
|
||||||
#define TK_IROWTS 235
|
#define TK_WDURATION 235
|
||||||
#define TK_ISFILLED 236
|
#define TK_IROWTS 236
|
||||||
#define TK_CAST 237
|
#define TK_ISFILLED 237
|
||||||
#define TK_NOW 238
|
#define TK_CAST 238
|
||||||
#define TK_TODAY 239
|
#define TK_NOW 239
|
||||||
#define TK_TIMEZONE 240
|
#define TK_TODAY 240
|
||||||
#define TK_CLIENT_VERSION 241
|
#define TK_TIMEZONE 241
|
||||||
#define TK_SERVER_VERSION 242
|
#define TK_CLIENT_VERSION 242
|
||||||
#define TK_SERVER_STATUS 243
|
#define TK_SERVER_VERSION 243
|
||||||
#define TK_CURRENT_USER 244
|
#define TK_SERVER_STATUS 244
|
||||||
#define TK_CASE 245
|
#define TK_CURRENT_USER 245
|
||||||
#define TK_WHEN 246
|
#define TK_CASE 246
|
||||||
#define TK_THEN 247
|
#define TK_WHEN 247
|
||||||
#define TK_ELSE 248
|
#define TK_THEN 248
|
||||||
#define TK_BETWEEN 249
|
#define TK_ELSE 249
|
||||||
#define TK_IS 250
|
#define TK_BETWEEN 250
|
||||||
#define TK_NK_LT 251
|
#define TK_IS 251
|
||||||
#define TK_NK_GT 252
|
#define TK_NK_LT 252
|
||||||
#define TK_NK_LE 253
|
#define TK_NK_GT 253
|
||||||
#define TK_NK_GE 254
|
#define TK_NK_LE 254
|
||||||
#define TK_NK_NE 255
|
#define TK_NK_GE 255
|
||||||
#define TK_MATCH 256
|
#define TK_NK_NE 256
|
||||||
#define TK_NMATCH 257
|
#define TK_MATCH 257
|
||||||
#define TK_CONTAINS 258
|
#define TK_NMATCH 258
|
||||||
#define TK_IN 259
|
#define TK_CONTAINS 259
|
||||||
#define TK_JOIN 260
|
#define TK_IN 260
|
||||||
#define TK_INNER 261
|
#define TK_JOIN 261
|
||||||
#define TK_SELECT 262
|
#define TK_INNER 262
|
||||||
#define TK_NK_HINT 263
|
#define TK_SELECT 263
|
||||||
#define TK_DISTINCT 264
|
#define TK_NK_HINT 264
|
||||||
#define TK_WHERE 265
|
#define TK_DISTINCT 265
|
||||||
#define TK_PARTITION 266
|
#define TK_WHERE 266
|
||||||
#define TK_BY 267
|
#define TK_PARTITION 267
|
||||||
#define TK_SESSION 268
|
#define TK_BY 268
|
||||||
#define TK_STATE_WINDOW 269
|
#define TK_SESSION 269
|
||||||
#define TK_EVENT_WINDOW 270
|
#define TK_STATE_WINDOW 270
|
||||||
#define TK_SLIDING 271
|
#define TK_EVENT_WINDOW 271
|
||||||
#define TK_FILL 272
|
#define TK_SLIDING 272
|
||||||
#define TK_VALUE 273
|
#define TK_FILL 273
|
||||||
#define TK_VALUE_F 274
|
#define TK_VALUE 274
|
||||||
#define TK_NONE 275
|
#define TK_VALUE_F 275
|
||||||
#define TK_PREV 276
|
#define TK_NONE 276
|
||||||
#define TK_NULL_F 277
|
#define TK_PREV 277
|
||||||
#define TK_LINEAR 278
|
#define TK_NULL_F 278
|
||||||
#define TK_NEXT 279
|
#define TK_LINEAR 279
|
||||||
#define TK_HAVING 280
|
#define TK_NEXT 280
|
||||||
#define TK_RANGE 281
|
#define TK_HAVING 281
|
||||||
#define TK_EVERY 282
|
#define TK_RANGE 282
|
||||||
#define TK_ORDER 283
|
#define TK_EVERY 283
|
||||||
#define TK_SLIMIT 284
|
#define TK_ORDER 284
|
||||||
#define TK_SOFFSET 285
|
#define TK_SLIMIT 285
|
||||||
#define TK_LIMIT 286
|
#define TK_SOFFSET 286
|
||||||
#define TK_OFFSET 287
|
#define TK_LIMIT 287
|
||||||
#define TK_ASC 288
|
#define TK_OFFSET 288
|
||||||
#define TK_NULLS 289
|
#define TK_ASC 289
|
||||||
#define TK_ABORT 290
|
#define TK_NULLS 290
|
||||||
#define TK_AFTER 291
|
#define TK_ABORT 291
|
||||||
#define TK_ATTACH 292
|
#define TK_AFTER 292
|
||||||
#define TK_BEFORE 293
|
#define TK_ATTACH 293
|
||||||
#define TK_BEGIN 294
|
#define TK_BEFORE 294
|
||||||
#define TK_BITAND 295
|
#define TK_BEGIN 295
|
||||||
#define TK_BITNOT 296
|
#define TK_BITAND 296
|
||||||
#define TK_BITOR 297
|
#define TK_BITNOT 297
|
||||||
#define TK_BLOCKS 298
|
#define TK_BITOR 298
|
||||||
#define TK_CHANGE 299
|
#define TK_BLOCKS 299
|
||||||
#define TK_COMMA 300
|
#define TK_CHANGE 300
|
||||||
#define TK_CONCAT 301
|
#define TK_COMMA 301
|
||||||
#define TK_CONFLICT 302
|
#define TK_CONCAT 302
|
||||||
#define TK_COPY 303
|
#define TK_CONFLICT 303
|
||||||
#define TK_DEFERRED 304
|
#define TK_COPY 304
|
||||||
#define TK_DELIMITERS 305
|
#define TK_DEFERRED 305
|
||||||
#define TK_DETACH 306
|
#define TK_DELIMITERS 306
|
||||||
#define TK_DIVIDE 307
|
#define TK_DETACH 307
|
||||||
#define TK_DOT 308
|
#define TK_DIVIDE 308
|
||||||
#define TK_EACH 309
|
#define TK_DOT 309
|
||||||
#define TK_FAIL 310
|
#define TK_EACH 310
|
||||||
#define TK_FILE 311
|
#define TK_FAIL 311
|
||||||
#define TK_FOR 312
|
#define TK_FILE 312
|
||||||
#define TK_GLOB 313
|
#define TK_FOR 313
|
||||||
#define TK_ID 314
|
#define TK_GLOB 314
|
||||||
#define TK_IMMEDIATE 315
|
#define TK_ID 315
|
||||||
#define TK_IMPORT 316
|
#define TK_IMMEDIATE 316
|
||||||
#define TK_INITIALLY 317
|
#define TK_IMPORT 317
|
||||||
#define TK_INSTEAD 318
|
#define TK_INITIALLY 318
|
||||||
#define TK_ISNULL 319
|
#define TK_INSTEAD 319
|
||||||
#define TK_KEY 320
|
#define TK_ISNULL 320
|
||||||
#define TK_MODULES 321
|
#define TK_KEY 321
|
||||||
#define TK_NK_BITNOT 322
|
#define TK_MODULES 322
|
||||||
#define TK_NK_SEMI 323
|
#define TK_NK_BITNOT 323
|
||||||
#define TK_NOTNULL 324
|
#define TK_NK_SEMI 324
|
||||||
#define TK_OF 325
|
#define TK_NOTNULL 325
|
||||||
#define TK_PLUS 326
|
#define TK_OF 326
|
||||||
#define TK_PRIVILEGE 327
|
#define TK_PLUS 327
|
||||||
#define TK_RAISE 328
|
#define TK_PRIVILEGE 328
|
||||||
#define TK_RESTRICT 329
|
#define TK_RAISE 329
|
||||||
#define TK_ROW 330
|
#define TK_RESTRICT 330
|
||||||
#define TK_SEMI 331
|
#define TK_ROW 331
|
||||||
#define TK_STAR 332
|
#define TK_SEMI 332
|
||||||
#define TK_STATEMENT 333
|
#define TK_STAR 333
|
||||||
#define TK_STRICT 334
|
#define TK_STATEMENT 334
|
||||||
#define TK_STRING 335
|
#define TK_STRICT 335
|
||||||
#define TK_TIMES 336
|
#define TK_STRING 336
|
||||||
#define TK_VALUES 337
|
#define TK_TIMES 337
|
||||||
#define TK_VARIABLE 338
|
#define TK_VALUES 338
|
||||||
#define TK_WAL 339
|
#define TK_VARIABLE 339
|
||||||
|
#define TK_WAL 340
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define TK_NK_SPACE 600
|
#define TK_NK_SPACE 600
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#define SYSTABLE_SCH_TABLE_NAME_LEN ((TSDB_TABLE_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
|
#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_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)
|
#define SYSTABLE_SCH_COL_NAME_LEN ((TSDB_COL_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
|
||||||
|
#define SYSTABLE_SCH_VIEW_NAME_LEN ((TSDB_VIEW_NAME_LEN - 1) + VARSTR_HEADER_SIZE)
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const SSysDbTableSchema dnodesSchema[] = {
|
static const SSysDbTableSchema dnodesSchema[] = {
|
||||||
|
@ -312,6 +313,19 @@ static const SSysDbTableSchema userUserPrivilegesSchema[] = {
|
||||||
{.name = "condition", .bytes = TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
{.name = "condition", .bytes = TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const SSysDbTableSchema userViewsSchema[] = {
|
||||||
|
{.name = "view_name", .bytes = SYSTABLE_SCH_VIEW_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
{.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
{.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false},
|
||||||
|
{.name = "type", .bytes = 128 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
{.name = "query_sql", .bytes = TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
{.name = "column_list", .bytes = 2048 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
{.name = "parameters", .bytes = 2048 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
{.name = "default_values", .bytes = 2048 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
{.name = "target_table", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static const SSysTableMeta infosMeta[] = {
|
static const SSysTableMeta infosMeta[] = {
|
||||||
{TSDB_INS_TABLE_DNODES, dnodesSchema, tListLen(dnodesSchema), true},
|
{TSDB_INS_TABLE_DNODES, dnodesSchema, tListLen(dnodesSchema), true},
|
||||||
{TSDB_INS_TABLE_MNODES, mnodesSchema, tListLen(mnodesSchema), true},
|
{TSDB_INS_TABLE_MNODES, mnodesSchema, tListLen(mnodesSchema), true},
|
||||||
|
@ -338,6 +352,7 @@ static const SSysTableMeta infosMeta[] = {
|
||||||
{TSDB_INS_TABLE_STREAM_TASKS, streamTaskSchema, tListLen(streamTaskSchema), false},
|
{TSDB_INS_TABLE_STREAM_TASKS, streamTaskSchema, tListLen(streamTaskSchema), false},
|
||||||
{TSDB_INS_TABLE_VNODES, vnodesSchema, tListLen(vnodesSchema), true},
|
{TSDB_INS_TABLE_VNODES, vnodesSchema, tListLen(vnodesSchema), true},
|
||||||
{TSDB_INS_TABLE_USER_PRIVILEGES, userUserPrivilegesSchema, tListLen(userUserPrivilegesSchema), true},
|
{TSDB_INS_TABLE_USER_PRIVILEGES, userUserPrivilegesSchema, tListLen(userUserPrivilegesSchema), true},
|
||||||
|
{TSDB_INS_TABLE_VIEWS, userViewsSchema, tListLen(userViewsSchema), false},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const SSysDbTableSchema connectionsSchema[] = {
|
static const SSysDbTableSchema connectionsSchema[] = {
|
||||||
|
|
|
@ -728,16 +728,23 @@ void tFreeStreamObj(SStreamObj* pObj);
|
||||||
// SArray* childInfo; // SArray<SStreamChildEpInfo>
|
// SArray* childInfo; // SArray<SStreamChildEpInfo>
|
||||||
// } SStreamCheckpointObj;
|
// } SStreamCheckpointObj;
|
||||||
|
|
||||||
|
#define VIEW_TYPE_UPDATABLE (1 << 0)
|
||||||
|
#define VIEW_TYPE_MATERIALIZED (1 << 1)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char fullname[TSDB_VIEW_FNAME_LEN];
|
char fullname[TSDB_VIEW_FNAME_LEN];
|
||||||
char name[TSDB_VIEW_NAME_LEN];
|
char name[TSDB_VIEW_NAME_LEN];
|
||||||
char dbFName[TSDB_DB_FNAME_LEN];
|
char dbFName[TSDB_DB_FNAME_LEN];
|
||||||
char* querySql;
|
char* querySql;
|
||||||
|
char* parameters;
|
||||||
|
void** defaultValues;
|
||||||
|
char* targetTable;
|
||||||
uint64_t viewId;
|
uint64_t viewId;
|
||||||
uint64_t dbId;
|
uint64_t dbId;
|
||||||
|
int64_t createdTime;
|
||||||
int32_t version;
|
int32_t version;
|
||||||
int8_t precision;
|
int8_t precision;
|
||||||
|
int8_t type;
|
||||||
int32_t numOfCols;
|
int32_t numOfCols;
|
||||||
SSchema* pSchema;
|
SSchema* pSchema;
|
||||||
SRWLatch lock;
|
SRWLatch lock;
|
||||||
|
|
|
@ -43,7 +43,8 @@ int32_t mndViewActionUpdate(SSdb *pSdb, SViewObj *pOldView, SViewObj *pNewView);
|
||||||
int32_t mndProcessCreateViewReqImpl(SCMCreateViewReq* pCreateView, SRpcMsg *pReq);
|
int32_t mndProcessCreateViewReqImpl(SCMCreateViewReq* pCreateView, SRpcMsg *pReq);
|
||||||
int32_t mndProcessDropViewReqImpl(SCMDropViewReq* pDropView, SRpcMsg *pReq);
|
int32_t mndProcessDropViewReqImpl(SCMDropViewReq* pDropView, SRpcMsg *pReq);
|
||||||
int32_t mndProcessViewMetaReqImpl(SViewMetaReq* pMetaReq, SRpcMsg *pReq);
|
int32_t mndProcessViewMetaReqImpl(SViewMetaReq* pMetaReq, SRpcMsg *pReq);
|
||||||
|
int32_t mndRetrieveViewImpl(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||||
|
int32_t mndDropViewByDb(SMnode *pMnode, STrans *pTrans, SDbObj *pDb);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "mndTrans.h"
|
#include "mndTrans.h"
|
||||||
#include "mndUser.h"
|
#include "mndUser.h"
|
||||||
#include "mndVgroup.h"
|
#include "mndVgroup.h"
|
||||||
|
#include "mndView.h"
|
||||||
#include "systable.h"
|
#include "systable.h"
|
||||||
#include "tjson.h"
|
#include "tjson.h"
|
||||||
#include "thttp.h"
|
#include "thttp.h"
|
||||||
|
@ -1301,6 +1302,9 @@ static int32_t mndDropDb(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb) {
|
||||||
/*if (mndDropSubByDB(pMnode, pTrans, pDb) != 0) goto _OVER;*/
|
/*if (mndDropSubByDB(pMnode, pTrans, pDb) != 0) goto _OVER;*/
|
||||||
/*if (mndDropTopicByDB(pMnode, pTrans, pDb) != 0) goto _OVER;*/
|
/*if (mndDropTopicByDB(pMnode, pTrans, pDb) != 0) goto _OVER;*/
|
||||||
if (mndDropStreamByDb(pMnode, pTrans, pDb) != 0) goto _OVER;
|
if (mndDropStreamByDb(pMnode, pTrans, pDb) != 0) goto _OVER;
|
||||||
|
#ifdef TD_ENTERPRISE
|
||||||
|
if (mndDropViewByDb(pMnode, pTrans, pDb) != 0) goto _OVER;
|
||||||
|
#endif
|
||||||
if (mndDropSmasByDb(pMnode, pTrans, pDb) != 0) goto _OVER;
|
if (mndDropSmasByDb(pMnode, pTrans, pDb) != 0) goto _OVER;
|
||||||
if (mndDropIdxsByDb(pMnode, pTrans, pDb) != 0) goto _OVER;
|
if (mndDropIdxsByDb(pMnode, pTrans, pDb) != 0) goto _OVER;
|
||||||
if (mndSetDropDbRedoActions(pMnode, pTrans, pDb) != 0) goto _OVER;
|
if (mndSetDropDbRedoActions(pMnode, pTrans, pDb) != 0) goto _OVER;
|
||||||
|
|
|
@ -116,6 +116,8 @@ static int32_t convertToRetrieveType(char *name, int32_t len) {
|
||||||
type = TSDB_MGMT_TABLE_STREAM_TASKS;
|
type = TSDB_MGMT_TABLE_STREAM_TASKS;
|
||||||
} else if (strncasecmp(name, TSDB_INS_TABLE_USER_PRIVILEGES, len) == 0) {
|
} else if (strncasecmp(name, TSDB_INS_TABLE_USER_PRIVILEGES, len) == 0) {
|
||||||
type = TSDB_MGMT_TABLE_PRIVILEGES;
|
type = TSDB_MGMT_TABLE_PRIVILEGES;
|
||||||
|
} else if (strncasecmp(name, TSDB_INS_TABLE_VIEWS, len) == 0) {
|
||||||
|
type = TSDB_MGMT_TABLE_VIEWS;
|
||||||
} else {
|
} else {
|
||||||
mError("invalid show name:%s len:%d", name, len);
|
mError("invalid show name:%s len:%d", name, len);
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,78 +94,10 @@ int32_t mndProcessGetViewMetaReq(SRpcMsg *pReq) {
|
||||||
|
|
||||||
|
|
||||||
int32_t mndRetrieveView(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
int32_t mndRetrieveView(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||||
#if 0
|
#ifndef TD_ENTERPRISE
|
||||||
SMnode *pMnode = pReq->info.node;
|
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
|
||||||
int32_t numOfRows = 0;
|
|
||||||
SViewObj *pView = NULL;
|
|
||||||
|
|
||||||
while (numOfRows < rows) {
|
|
||||||
pShow->pIter = sdbFetch(pSdb, SDB_VIEW, pShow->pIter, (void **)&pView);
|
|
||||||
if (pShow->pIter == NULL) break;
|
|
||||||
|
|
||||||
SColumnInfoData *pColInfo;
|
|
||||||
SName n;
|
|
||||||
int32_t cols = 0;
|
|
||||||
|
|
||||||
char viewName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(viewName, mndGetDbStr(pView->name), sizeof(viewName));
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)viewName, false);
|
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&pView->createTime, false);
|
|
||||||
|
|
||||||
char sql[TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(sql, pView->sql, sizeof(sql));
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)sql, false);
|
|
||||||
|
|
||||||
char status[20 + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
char status2[20] = {0};
|
|
||||||
mndShowViewStatus(status2, pView);
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(status, status2, sizeof(status));
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&status, false);
|
|
||||||
|
|
||||||
char sourceDB[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(sourceDB, mndGetDbStr(pView->sourceDb), sizeof(sourceDB));
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&sourceDB, false);
|
|
||||||
|
|
||||||
char targetDB[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(targetDB, mndGetDbStr(pView->targetDb), sizeof(targetDB));
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&targetDB, false);
|
|
||||||
|
|
||||||
if (pView->targetSTbName[0] == 0) {
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, NULL, true);
|
|
||||||
} else {
|
|
||||||
char targetSTB[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(targetSTB, mndGetStbStr(pView->targetSTbName), sizeof(targetSTB));
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&targetSTB, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&pView->conf.watermark, false);
|
|
||||||
|
|
||||||
char trigger[20 + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
char trigger2[20] = {0};
|
|
||||||
mndShowViewTrigger(trigger2, pView);
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(trigger, trigger2, sizeof(trigger));
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&trigger, false);
|
|
||||||
|
|
||||||
numOfRows++;
|
|
||||||
sdbRelease(pSdb, pView);
|
|
||||||
}
|
|
||||||
|
|
||||||
pShow->numOfRows += numOfRows;
|
|
||||||
return numOfRows;
|
|
||||||
#else
|
|
||||||
return 0;
|
return 0;
|
||||||
|
#else
|
||||||
|
return mndRetrieveViewImpl(pReq, pShow, pBlock, rows);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -320,6 +320,11 @@ int32_t ctgdHandleDbgCommand(char *command) {
|
||||||
CTG_RET(TSDB_CODE_INVALID_PARA);
|
CTG_RET(TSDB_CODE_INVALID_PARA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (NULL == param || NULL == option) {
|
||||||
|
taosMemoryFree(dup);
|
||||||
|
CTG_RET(TSDB_CODE_INVALID_PARA);
|
||||||
|
}
|
||||||
|
|
||||||
bool enable = atoi(param);
|
bool enable = atoi(param);
|
||||||
|
|
||||||
int32_t code = ctgdEnableDebug(option, enable);
|
int32_t code = ctgdEnableDebug(option, enable);
|
||||||
|
|
|
@ -438,6 +438,7 @@ SNode* nodesMakeNode(ENodeType type) {
|
||||||
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
||||||
case QUERY_NODE_SHOW_TAGS_STMT:
|
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||||
|
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||||
return makeNode(type, sizeof(SShowStmt));
|
return makeNode(type, sizeof(SShowStmt));
|
||||||
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
||||||
return makeNode(type, sizeof(SShowTableTagsStmt));
|
return makeNode(type, sizeof(SShowTableTagsStmt));
|
||||||
|
|
|
@ -500,6 +500,7 @@ cmd ::= SHOW VNODES.
|
||||||
// show alive
|
// show alive
|
||||||
cmd ::= SHOW db_name_cond_opt(A) ALIVE. { pCxt->pRootNode = createShowAliveStmt(pCxt, A, QUERY_NODE_SHOW_DB_ALIVE_STMT); }
|
cmd ::= SHOW db_name_cond_opt(A) ALIVE. { pCxt->pRootNode = createShowAliveStmt(pCxt, A, QUERY_NODE_SHOW_DB_ALIVE_STMT); }
|
||||||
cmd ::= SHOW CLUSTER ALIVE. { pCxt->pRootNode = createShowAliveStmt(pCxt, NULL, QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT); }
|
cmd ::= SHOW CLUSTER ALIVE. { pCxt->pRootNode = createShowAliveStmt(pCxt, NULL, QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT); }
|
||||||
|
cmd ::= SHOW db_name_cond_opt(A) VIEWS. { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VIEWS_STMT, A, NULL, OP_TYPE_LIKE); }
|
||||||
|
|
||||||
db_name_cond_opt(A) ::= . { A = createDefaultDatabaseCondValue(pCxt); }
|
db_name_cond_opt(A) ::= . { A = createDefaultDatabaseCondValue(pCxt); }
|
||||||
db_name_cond_opt(A) ::= db_name(B) NK_DOT. { A = createIdentifierValueNode(pCxt, &B); }
|
db_name_cond_opt(A) ::= db_name(B) NK_DOT. { A = createIdentifierValueNode(pCxt, &B); }
|
||||||
|
|
|
@ -1569,7 +1569,8 @@ SNode* createUseDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName) {
|
||||||
static bool needDbShowStmt(ENodeType type) {
|
static bool needDbShowStmt(ENodeType type) {
|
||||||
return QUERY_NODE_SHOW_TABLES_STMT == type || QUERY_NODE_SHOW_STABLES_STMT == type ||
|
return QUERY_NODE_SHOW_TABLES_STMT == type || QUERY_NODE_SHOW_STABLES_STMT == type ||
|
||||||
QUERY_NODE_SHOW_VGROUPS_STMT == type || QUERY_NODE_SHOW_INDEXES_STMT == type ||
|
QUERY_NODE_SHOW_VGROUPS_STMT == type || QUERY_NODE_SHOW_INDEXES_STMT == type ||
|
||||||
QUERY_NODE_SHOW_TAGS_STMT == type || QUERY_NODE_SHOW_TABLE_TAGS_STMT == type;
|
QUERY_NODE_SHOW_TAGS_STMT == type || QUERY_NODE_SHOW_TABLE_TAGS_STMT == type ||
|
||||||
|
QUERY_NODE_SHOW_VIEWS_STMT == type;
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type) {
|
SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type) {
|
||||||
|
@ -2166,7 +2167,11 @@ SNode* createCreateViewStmt(SAstCreateContext* pCxt, bool orReplace, SNode* pVie
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
SCreateViewStmt* pStmt = (SCreateViewStmt*)nodesMakeNode(QUERY_NODE_CREATE_VIEW_STMT);
|
SCreateViewStmt* pStmt = (SCreateViewStmt*)nodesMakeNode(QUERY_NODE_CREATE_VIEW_STMT);
|
||||||
CHECK_OUT_OF_MEM(pStmt);
|
CHECK_OUT_OF_MEM(pStmt);
|
||||||
pStmt->pQuerySql = strdup(pAs->z + pAs->n);
|
int32_t i = pAs->n;
|
||||||
|
while (isspace(*(pAs->z + i))) {
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
pStmt->pQuerySql = strdup(pAs->z + i);
|
||||||
CHECK_OUT_OF_MEM(pStmt->pQuerySql);
|
CHECK_OUT_OF_MEM(pStmt->pQuerySql);
|
||||||
strcpy(pStmt->dbName, ((SViewNode*)pView)->table.dbName);
|
strcpy(pStmt->dbName, ((SViewNode*)pView)->table.dbName);
|
||||||
strcpy(pStmt->viewName, ((SViewNode*)pView)->table.tableName);
|
strcpy(pStmt->viewName, ((SViewNode*)pView)->table.tableName);
|
||||||
|
|
|
@ -583,6 +583,18 @@ static int32_t collectMetaKeyFromShowUserPrivileges(SCollectMetaKeyCxt* pCxt, SS
|
||||||
pCxt->pMetaCache);
|
pCxt->pMetaCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t collectMetaKeyFromShowViews(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||||
|
int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VIEWS,
|
||||||
|
pCxt->pMetaCache);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code =
|
||||||
|
reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, ((SValueNode*)pStmt->pDbName)->literal,
|
||||||
|
NULL, AUTH_TYPE_READ_OR_WRITE, pCxt->pMetaCache);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
|
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
|
||||||
return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
|
return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
|
||||||
}
|
}
|
||||||
|
@ -764,6 +776,8 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
|
||||||
return collectMetaKeyFromShowVnodes(pCxt, (SShowVnodesStmt*)pStmt);
|
return collectMetaKeyFromShowVnodes(pCxt, (SShowVnodesStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||||
return collectMetaKeyFromShowUserPrivileges(pCxt, (SShowStmt*)pStmt);
|
return collectMetaKeyFromShowUserPrivileges(pCxt, (SShowStmt*)pStmt);
|
||||||
|
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||||
|
return collectMetaKeyFromShowViews(pCxt, (SShowStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
||||||
return collectMetaKeyFromShowCreateDatabase(pCxt, (SShowCreateDatabaseStmt*)pStmt);
|
return collectMetaKeyFromShowCreateDatabase(pCxt, (SShowCreateDatabaseStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
|
case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
|
||||||
|
|
|
@ -264,6 +264,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"VGROUP", TK_VGROUP},
|
{"VGROUP", TK_VGROUP},
|
||||||
{"VGROUPS", TK_VGROUPS},
|
{"VGROUPS", TK_VGROUPS},
|
||||||
{"VIEW", TK_VIEW},
|
{"VIEW", TK_VIEW},
|
||||||
|
{"VIEWS", TK_VIEWS},
|
||||||
{"VNODE", TK_VNODE},
|
{"VNODE", TK_VNODE},
|
||||||
{"VNODES", TK_VNODES},
|
{"VNODES", TK_VNODES},
|
||||||
{"WAL_FSYNC_PERIOD", TK_WAL_FSYNC_PERIOD},
|
{"WAL_FSYNC_PERIOD", TK_WAL_FSYNC_PERIOD},
|
||||||
|
|
|
@ -250,6 +250,12 @@ static const SSysTableShowAdapter sysTableShowAdapter[] = {
|
||||||
.numOfShowCols = 1,
|
.numOfShowCols = 1,
|
||||||
.pShowCols = {"*"}
|
.pShowCols = {"*"}
|
||||||
},
|
},
|
||||||
|
{ .showType = QUERY_NODE_SHOW_VIEWS_STMT,
|
||||||
|
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||||
|
.pTableName = TSDB_INS_TABLE_VIEWS,
|
||||||
|
.numOfShowCols = 1,
|
||||||
|
.pShowCols = {"*"}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -343,7 +349,11 @@ static int32_t getTableMetaImpl(STranslateContext* pCxt, const SName* pName, STa
|
||||||
code = getTableMetaFromCache(pCxt->pMetaCache, pName, pMeta);
|
code = getTableMetaFromCache(pCxt->pMetaCache, pName, pMeta);
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
int32_t origCode = code;
|
||||||
code = getViewMetaFromCache(pCxt->pMetaCache, pName, pMeta);
|
code = getViewMetaFromCache(pCxt->pMetaCache, pName, pMeta);
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
code = origCode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
|
@ -9335,6 +9345,7 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
|
||||||
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
||||||
case QUERY_NODE_SHOW_TAGS_STMT:
|
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||||
|
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||||
code = rewriteShow(pCxt, pQuery);
|
code = rewriteShow(pCxt, pQuery);
|
||||||
break;
|
break;
|
||||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -110,6 +110,10 @@ void generateInformationSchema(MockCatalogService* mcs) {
|
||||||
.addColumn("user_name", TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN)
|
.addColumn("user_name", TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN)
|
||||||
.addColumn("privilege", TSDB_DATA_TYPE_BINARY, 10)
|
.addColumn("privilege", TSDB_DATA_TYPE_BINARY, 10)
|
||||||
.done();
|
.done();
|
||||||
|
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VIEWS, TSDB_SYSTEM_TABLE, 2)
|
||||||
|
.addColumn("view_name", TSDB_DATA_TYPE_BINARY, TSDB_VIEW_NAME_LEN)
|
||||||
|
.addColumn("create_time", TSDB_DATA_TYPE_TIMESTAMP)
|
||||||
|
.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
void generatePerformanceSchema(MockCatalogService* mcs) {
|
void generatePerformanceSchema(MockCatalogService* mcs) {
|
||||||
|
|
Loading…
Reference in New Issue