feat: sql command 'trim database'

This commit is contained in:
Xiaoyu Wang 2022-07-11 10:53:06 +08:00
parent ed66440c5c
commit 0bc700eb82
14 changed files with 3281 additions and 3171 deletions

View File

@ -55,11 +55,11 @@ extern int32_t tMsgDict[];
#define TMSG_SEG_CODE(TYPE) (((TYPE)&0xff00) >> 8) #define TMSG_SEG_CODE(TYPE) (((TYPE)&0xff00) >> 8)
#define TMSG_SEG_SEQ(TYPE) ((TYPE)&0xff) #define TMSG_SEG_SEQ(TYPE) ((TYPE)&0xff)
#define TMSG_INFO(TYPE) \ #define TMSG_INFO(TYPE) \
((TYPE) >= 0 && \ ((TYPE) >= 0 && ((TYPE) < TDMT_DND_MAX_MSG || (TYPE) < TDMT_MND_MAX_MSG || (TYPE) < TDMT_VND_MAX_MSG || \
((TYPE) < TDMT_DND_MAX_MSG || (TYPE) < TDMT_MND_MAX_MSG || (TYPE) < TDMT_VND_MAX_MSG || (TYPE) < TDMT_SCH_MAX_MSG || \ (TYPE) < TDMT_SCH_MAX_MSG || (TYPE) < TDMT_STREAM_MAX_MSG || (TYPE) < TDMT_MON_MAX_MSG || \
(TYPE) < TDMT_STREAM_MAX_MSG || (TYPE) < TDMT_MON_MAX_MSG || (TYPE) < TDMT_SYNC_MAX_MSG)) \ (TYPE) < TDMT_SYNC_MAX_MSG)) \
? tMsgInfo[tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE)] \ ? tMsgInfo[tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE)] \
: 0 : 0
#define TMSG_INDEX(TYPE) (tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE)) #define TMSG_INDEX(TYPE) (tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE))
@ -815,6 +815,13 @@ typedef struct {
int32_t tSerializeSDbCfgReq(void* buf, int32_t bufLen, SDbCfgReq* pReq); int32_t tSerializeSDbCfgReq(void* buf, int32_t bufLen, SDbCfgReq* pReq);
int32_t tDeserializeSDbCfgReq(void* buf, int32_t bufLen, SDbCfgReq* pReq); int32_t tDeserializeSDbCfgReq(void* buf, int32_t bufLen, SDbCfgReq* pReq);
typedef struct {
char db[TSDB_DB_FNAME_LEN];
} STrimDbReq;
int32_t tSerializeSTrimDbReq(void* buf, int32_t bufLen, STrimDbReq* pReq);
int32_t tDeserializeSTrimDbReq(void* buf, int32_t bufLen, STrimDbReq* pReq);
typedef struct { typedef struct {
int32_t numOfVgroups; int32_t numOfVgroups;
int32_t numOfStables; int32_t numOfStables;

View File

@ -116,6 +116,7 @@ enum {
TD_DEF_MSG_TYPE(TDMT_MND_ALTER_DB, "alter-db", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_MND_ALTER_DB, "alter-db", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_MND_SYNC_DB, "sync-db", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_MND_SYNC_DB, "sync-db", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_MND_COMPACT_DB, "compact-db", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_MND_COMPACT_DB, "compact-db", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_MND_TRIM_DB, "trim-db", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_MND_GET_DB_CFG, "get-db-cfg", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_MND_GET_DB_CFG, "get-db-cfg", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_MND_VGROUP_LIST, "vgroup-list", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_MND_VGROUP_LIST, "vgroup-list", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_MND_CREATE_FUNC, "create-func", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_MND_CREATE_FUNC, "create-func", NULL, NULL)

View File

@ -74,201 +74,202 @@
#define TK_DATABASE 56 #define TK_DATABASE 56
#define TK_USE 57 #define TK_USE 57
#define TK_FLUSH 58 #define TK_FLUSH 58
#define TK_IF 59 #define TK_TRIM 59
#define TK_NOT 60 #define TK_IF 60
#define TK_EXISTS 61 #define TK_NOT 61
#define TK_BUFFER 62 #define TK_EXISTS 62
#define TK_CACHELAST 63 #define TK_BUFFER 63
#define TK_CACHELASTSIZE 64 #define TK_CACHELAST 64
#define TK_COMP 65 #define TK_CACHELASTSIZE 65
#define TK_DURATION 66 #define TK_COMP 66
#define TK_NK_VARIABLE 67 #define TK_DURATION 67
#define TK_FSYNC 68 #define TK_NK_VARIABLE 68
#define TK_MAXROWS 69 #define TK_FSYNC 69
#define TK_MINROWS 70 #define TK_MAXROWS 70
#define TK_KEEP 71 #define TK_MINROWS 71
#define TK_PAGES 72 #define TK_KEEP 72
#define TK_PAGESIZE 73 #define TK_PAGES 73
#define TK_PRECISION 74 #define TK_PAGESIZE 74
#define TK_REPLICA 75 #define TK_PRECISION 75
#define TK_STRICT 76 #define TK_REPLICA 76
#define TK_WAL 77 #define TK_STRICT 77
#define TK_VGROUPS 78 #define TK_WAL 78
#define TK_SINGLE_STABLE 79 #define TK_VGROUPS 79
#define TK_RETENTIONS 80 #define TK_SINGLE_STABLE 80
#define TK_SCHEMALESS 81 #define TK_RETENTIONS 81
#define TK_NK_COLON 82 #define TK_SCHEMALESS 82
#define TK_TABLE 83 #define TK_NK_COLON 83
#define TK_NK_LP 84 #define TK_TABLE 84
#define TK_NK_RP 85 #define TK_NK_LP 85
#define TK_STABLE 86 #define TK_NK_RP 86
#define TK_ADD 87 #define TK_STABLE 87
#define TK_COLUMN 88 #define TK_ADD 88
#define TK_MODIFY 89 #define TK_COLUMN 89
#define TK_RENAME 90 #define TK_MODIFY 90
#define TK_TAG 91 #define TK_RENAME 91
#define TK_SET 92 #define TK_TAG 92
#define TK_NK_EQ 93 #define TK_SET 93
#define TK_USING 94 #define TK_NK_EQ 94
#define TK_TAGS 95 #define TK_USING 95
#define TK_COMMENT 96 #define TK_TAGS 96
#define TK_BOOL 97 #define TK_COMMENT 97
#define TK_TINYINT 98 #define TK_BOOL 98
#define TK_SMALLINT 99 #define TK_TINYINT 99
#define TK_INT 100 #define TK_SMALLINT 100
#define TK_INTEGER 101 #define TK_INT 101
#define TK_BIGINT 102 #define TK_INTEGER 102
#define TK_FLOAT 103 #define TK_BIGINT 103
#define TK_DOUBLE 104 #define TK_FLOAT 104
#define TK_BINARY 105 #define TK_DOUBLE 105
#define TK_TIMESTAMP 106 #define TK_BINARY 106
#define TK_NCHAR 107 #define TK_TIMESTAMP 107
#define TK_UNSIGNED 108 #define TK_NCHAR 108
#define TK_JSON 109 #define TK_UNSIGNED 109
#define TK_VARCHAR 110 #define TK_JSON 110
#define TK_MEDIUMBLOB 111 #define TK_VARCHAR 111
#define TK_BLOB 112 #define TK_MEDIUMBLOB 112
#define TK_VARBINARY 113 #define TK_BLOB 113
#define TK_DECIMAL 114 #define TK_VARBINARY 114
#define TK_MAX_DELAY 115 #define TK_DECIMAL 115
#define TK_WATERMARK 116 #define TK_MAX_DELAY 116
#define TK_ROLLUP 117 #define TK_WATERMARK 117
#define TK_TTL 118 #define TK_ROLLUP 118
#define TK_SMA 119 #define TK_TTL 119
#define TK_FIRST 120 #define TK_SMA 120
#define TK_LAST 121 #define TK_FIRST 121
#define TK_SHOW 122 #define TK_LAST 122
#define TK_DATABASES 123 #define TK_SHOW 123
#define TK_TABLES 124 #define TK_DATABASES 124
#define TK_STABLES 125 #define TK_TABLES 125
#define TK_MNODES 126 #define TK_STABLES 126
#define TK_MODULES 127 #define TK_MNODES 127
#define TK_QNODES 128 #define TK_MODULES 128
#define TK_FUNCTIONS 129 #define TK_QNODES 129
#define TK_INDEXES 130 #define TK_FUNCTIONS 130
#define TK_ACCOUNTS 131 #define TK_INDEXES 131
#define TK_APPS 132 #define TK_ACCOUNTS 132
#define TK_CONNECTIONS 133 #define TK_APPS 133
#define TK_LICENCE 134 #define TK_CONNECTIONS 134
#define TK_GRANTS 135 #define TK_LICENCE 135
#define TK_QUERIES 136 #define TK_GRANTS 136
#define TK_SCORES 137 #define TK_QUERIES 137
#define TK_TOPICS 138 #define TK_SCORES 138
#define TK_VARIABLES 139 #define TK_TOPICS 139
#define TK_BNODES 140 #define TK_VARIABLES 140
#define TK_SNODES 141 #define TK_BNODES 141
#define TK_CLUSTER 142 #define TK_SNODES 142
#define TK_TRANSACTIONS 143 #define TK_CLUSTER 143
#define TK_DISTRIBUTED 144 #define TK_TRANSACTIONS 144
#define TK_CONSUMERS 145 #define TK_DISTRIBUTED 145
#define TK_SUBSCRIPTIONS 146 #define TK_CONSUMERS 146
#define TK_LIKE 147 #define TK_SUBSCRIPTIONS 147
#define TK_INDEX 148 #define TK_LIKE 148
#define TK_FUNCTION 149 #define TK_INDEX 149
#define TK_INTERVAL 150 #define TK_FUNCTION 150
#define TK_TOPIC 151 #define TK_INTERVAL 151
#define TK_AS 152 #define TK_TOPIC 152
#define TK_WITH 153 #define TK_AS 153
#define TK_META 154 #define TK_WITH 154
#define TK_CONSUMER 155 #define TK_META 155
#define TK_GROUP 156 #define TK_CONSUMER 156
#define TK_DESC 157 #define TK_GROUP 157
#define TK_DESCRIBE 158 #define TK_DESC 158
#define TK_RESET 159 #define TK_DESCRIBE 159
#define TK_QUERY 160 #define TK_RESET 160
#define TK_CACHE 161 #define TK_QUERY 161
#define TK_EXPLAIN 162 #define TK_CACHE 162
#define TK_ANALYZE 163 #define TK_EXPLAIN 163
#define TK_VERBOSE 164 #define TK_ANALYZE 164
#define TK_NK_BOOL 165 #define TK_VERBOSE 165
#define TK_RATIO 166 #define TK_NK_BOOL 166
#define TK_NK_FLOAT 167 #define TK_RATIO 167
#define TK_COMPACT 168 #define TK_NK_FLOAT 168
#define TK_VNODES 169 #define TK_COMPACT 169
#define TK_IN 170 #define TK_VNODES 170
#define TK_OUTPUTTYPE 171 #define TK_IN 171
#define TK_AGGREGATE 172 #define TK_OUTPUTTYPE 172
#define TK_BUFSIZE 173 #define TK_AGGREGATE 173
#define TK_STREAM 174 #define TK_BUFSIZE 174
#define TK_INTO 175 #define TK_STREAM 175
#define TK_TRIGGER 176 #define TK_INTO 176
#define TK_AT_ONCE 177 #define TK_TRIGGER 177
#define TK_WINDOW_CLOSE 178 #define TK_AT_ONCE 178
#define TK_IGNORE 179 #define TK_WINDOW_CLOSE 179
#define TK_EXPIRED 180 #define TK_IGNORE 180
#define TK_KILL 181 #define TK_EXPIRED 181
#define TK_CONNECTION 182 #define TK_KILL 182
#define TK_TRANSACTION 183 #define TK_CONNECTION 183
#define TK_BALANCE 184 #define TK_TRANSACTION 184
#define TK_VGROUP 185 #define TK_BALANCE 185
#define TK_MERGE 186 #define TK_VGROUP 186
#define TK_REDISTRIBUTE 187 #define TK_MERGE 187
#define TK_SPLIT 188 #define TK_REDISTRIBUTE 188
#define TK_SYNCDB 189 #define TK_SPLIT 189
#define TK_DELETE 190 #define TK_SYNCDB 190
#define TK_INSERT 191 #define TK_DELETE 191
#define TK_NULL 192 #define TK_INSERT 192
#define TK_NK_QUESTION 193 #define TK_NULL 193
#define TK_NK_ARROW 194 #define TK_NK_QUESTION 194
#define TK_ROWTS 195 #define TK_NK_ARROW 195
#define TK_TBNAME 196 #define TK_ROWTS 196
#define TK_QSTARTTS 197 #define TK_TBNAME 197
#define TK_QENDTS 198 #define TK_QSTARTTS 198
#define TK_WSTARTTS 199 #define TK_QENDTS 199
#define TK_WENDTS 200 #define TK_WSTARTTS 200
#define TK_WDURATION 201 #define TK_WENDTS 201
#define TK_CAST 202 #define TK_WDURATION 202
#define TK_NOW 203 #define TK_CAST 203
#define TK_TODAY 204 #define TK_NOW 204
#define TK_TIMEZONE 205 #define TK_TODAY 205
#define TK_CLIENT_VERSION 206 #define TK_TIMEZONE 206
#define TK_SERVER_VERSION 207 #define TK_CLIENT_VERSION 207
#define TK_SERVER_STATUS 208 #define TK_SERVER_VERSION 208
#define TK_CURRENT_USER 209 #define TK_SERVER_STATUS 209
#define TK_COUNT 210 #define TK_CURRENT_USER 210
#define TK_LAST_ROW 211 #define TK_COUNT 211
#define TK_BETWEEN 212 #define TK_LAST_ROW 212
#define TK_IS 213 #define TK_BETWEEN 213
#define TK_NK_LT 214 #define TK_IS 214
#define TK_NK_GT 215 #define TK_NK_LT 215
#define TK_NK_LE 216 #define TK_NK_GT 216
#define TK_NK_GE 217 #define TK_NK_LE 217
#define TK_NK_NE 218 #define TK_NK_GE 218
#define TK_MATCH 219 #define TK_NK_NE 219
#define TK_NMATCH 220 #define TK_MATCH 220
#define TK_CONTAINS 221 #define TK_NMATCH 221
#define TK_JOIN 222 #define TK_CONTAINS 222
#define TK_INNER 223 #define TK_JOIN 223
#define TK_SELECT 224 #define TK_INNER 224
#define TK_DISTINCT 225 #define TK_SELECT 225
#define TK_WHERE 226 #define TK_DISTINCT 226
#define TK_PARTITION 227 #define TK_WHERE 227
#define TK_BY 228 #define TK_PARTITION 228
#define TK_SESSION 229 #define TK_BY 229
#define TK_STATE_WINDOW 230 #define TK_SESSION 230
#define TK_SLIDING 231 #define TK_STATE_WINDOW 231
#define TK_FILL 232 #define TK_SLIDING 232
#define TK_VALUE 233 #define TK_FILL 233
#define TK_NONE 234 #define TK_VALUE 234
#define TK_PREV 235 #define TK_NONE 235
#define TK_LINEAR 236 #define TK_PREV 236
#define TK_NEXT 237 #define TK_LINEAR 237
#define TK_HAVING 238 #define TK_NEXT 238
#define TK_RANGE 239 #define TK_HAVING 239
#define TK_EVERY 240 #define TK_RANGE 240
#define TK_ORDER 241 #define TK_EVERY 241
#define TK_SLIMIT 242 #define TK_ORDER 242
#define TK_SOFFSET 243 #define TK_SLIMIT 243
#define TK_LIMIT 244 #define TK_SOFFSET 244
#define TK_OFFSET 245 #define TK_LIMIT 245
#define TK_ASC 246 #define TK_OFFSET 246
#define TK_NULLS 247 #define TK_ASC 247
#define TK_ID 248 #define TK_NULLS 248
#define TK_NK_BITNOT 249 #define TK_ID 249
#define TK_VALUES 250 #define TK_NK_BITNOT 250
#define TK_IMPORT 251 #define TK_VALUES 251
#define TK_NK_SEMI 252 #define TK_IMPORT 252
#define TK_FILE 253 #define TK_NK_SEMI 253
#define TK_FILE 254
#define TK_NK_SPACE 300 #define TK_NK_SPACE 300
#define TK_NK_COMMENT 301 #define TK_NK_COMMENT 301

View File

@ -103,6 +103,11 @@ typedef struct SFlushDatabaseStmt {
char dbName[TSDB_DB_NAME_LEN]; char dbName[TSDB_DB_NAME_LEN];
} SFlushDatabaseStmt; } SFlushDatabaseStmt;
typedef struct STrimDatabaseStmt {
ENodeType type;
char dbName[TSDB_DB_NAME_LEN];
} STrimDatabaseStmt;
typedef struct STableOptions { typedef struct STableOptions {
ENodeType type; ENodeType type;
bool commentNull; bool commentNull;

View File

@ -112,6 +112,7 @@ typedef enum ENodeType {
QUERY_NODE_DROP_DATABASE_STMT, QUERY_NODE_DROP_DATABASE_STMT,
QUERY_NODE_ALTER_DATABASE_STMT, QUERY_NODE_ALTER_DATABASE_STMT,
QUERY_NODE_FLUSH_DATABASE_STMT, QUERY_NODE_FLUSH_DATABASE_STMT,
QUERY_NODE_TRIM_DATABASE_STMT,
QUERY_NODE_CREATE_TABLE_STMT, QUERY_NODE_CREATE_TABLE_STMT,
QUERY_NODE_CREATE_SUBTABLE_CLAUSE, QUERY_NODE_CREATE_SUBTABLE_CLAUSE,
QUERY_NODE_CREATE_MULTI_TABLE_STMT, QUERY_NODE_CREATE_MULTI_TABLE_STMT,

View File

@ -2647,6 +2647,31 @@ int32_t tDeserializeSDbCfgReq(void *buf, int32_t bufLen, SDbCfgReq *pReq) {
return 0; return 0;
} }
int32_t tSerializeSTrimDbReq(void *buf, int32_t bufLen, STrimDbReq *pReq) {
SEncoder encoder = {0};
tEncoderInit(&encoder, buf, bufLen);
if (tStartEncode(&encoder) < 0) return -1;
if (tEncodeCStr(&encoder, pReq->db) < 0) return -1;
tEndEncode(&encoder);
int32_t tlen = encoder.pos;
tEncoderClear(&encoder);
return tlen;
}
int32_t tDeserializeSTrimDbReq(void *buf, int32_t bufLen, STrimDbReq *pReq) {
SDecoder decoder = {0};
tDecoderInit(&decoder, buf, bufLen);
if (tStartDecode(&decoder) < 0) return -1;
if (tDecodeCStrTo(&decoder, pReq->db) < 0) return -1;
tEndDecode(&decoder);
tDecoderClear(&decoder);
return 0;
}
int32_t tSerializeSDbCfgRsp(void *buf, int32_t bufLen, const SDbCfgRsp *pRsp) { int32_t tSerializeSDbCfgRsp(void *buf, int32_t bufLen, const SDbCfgRsp *pRsp) {
SEncoder encoder = {0}; SEncoder encoder = {0};
tEncoderInit(&encoder, buf, bufLen); tEncoderInit(&encoder, buf, bufLen);

View File

@ -105,6 +105,8 @@ SNode* nodesMakeNode(ENodeType type) {
return makeNode(type, sizeof(SAlterDatabaseStmt)); return makeNode(type, sizeof(SAlterDatabaseStmt));
case QUERY_NODE_FLUSH_DATABASE_STMT: case QUERY_NODE_FLUSH_DATABASE_STMT:
return makeNode(type, sizeof(SFlushDatabaseStmt)); return makeNode(type, sizeof(SFlushDatabaseStmt));
case QUERY_NODE_TRIM_DATABASE_STMT:
return makeNode(type, sizeof(STrimDatabaseStmt));
case QUERY_NODE_CREATE_TABLE_STMT: case QUERY_NODE_CREATE_TABLE_STMT:
return makeNode(type, sizeof(SCreateTableStmt)); return makeNode(type, sizeof(SCreateTableStmt));
case QUERY_NODE_CREATE_SUBTABLE_CLAUSE: case QUERY_NODE_CREATE_SUBTABLE_CLAUSE:
@ -548,6 +550,7 @@ void nodesDestroyNode(SNode* pNode) {
nodesDestroyNode((SNode*)((SAlterDatabaseStmt*)pNode)->pOptions); nodesDestroyNode((SNode*)((SAlterDatabaseStmt*)pNode)->pOptions);
break; break;
case QUERY_NODE_FLUSH_DATABASE_STMT: // no pointer field case QUERY_NODE_FLUSH_DATABASE_STMT: // no pointer field
case QUERY_NODE_TRIM_DATABASE_STMT: // no pointer field
break; break;
case QUERY_NODE_CREATE_TABLE_STMT: { case QUERY_NODE_CREATE_TABLE_STMT: {
SCreateTableStmt* pStmt = (SCreateTableStmt*)pNode; SCreateTableStmt* pStmt = (SCreateTableStmt*)pNode;

View File

@ -137,6 +137,7 @@ SNode* createCreateDatabaseStmt(SAstCreateContext* pCxt, bool ignoreExists, STok
SNode* createDropDatabaseStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SToken* pDbName); SNode* createDropDatabaseStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SToken* pDbName);
SNode* createAlterDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName, SNode* pOptions); SNode* createAlterDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName, SNode* pOptions);
SNode* createFlushDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName); SNode* createFlushDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName);
SNode* createTrimDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName);
SNode* createDefaultTableOptions(SAstCreateContext* pCxt); SNode* createDefaultTableOptions(SAstCreateContext* pCxt);
SNode* createAlterTableOptions(SAstCreateContext* pCxt); SNode* createAlterTableOptions(SAstCreateContext* pCxt);
SNode* setTableOption(SAstCreateContext* pCxt, SNode* pOptions, ETableOptionType type, void* pVal); SNode* setTableOption(SAstCreateContext* pCxt, SNode* pOptions, ETableOptionType type, void* pVal);

View File

@ -158,6 +158,7 @@ cmd ::= DROP DATABASE exists_opt(A) db_name(B).
cmd ::= USE db_name(A). { pCxt->pRootNode = createUseDatabaseStmt(pCxt, &A); } cmd ::= USE db_name(A). { pCxt->pRootNode = createUseDatabaseStmt(pCxt, &A); }
cmd ::= ALTER DATABASE db_name(A) alter_db_options(B). { pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &A, B); } cmd ::= ALTER DATABASE db_name(A) alter_db_options(B). { pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &A, B); }
cmd ::= FLUSH DATABASE db_name(A). { pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &A); } cmd ::= FLUSH DATABASE db_name(A). { pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &A); }
cmd ::= TRIM DATABASE db_name(A). { pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &A); }
%type not_exists_opt { bool } %type not_exists_opt { bool }
%destructor not_exists_opt { } %destructor not_exists_opt { }

View File

@ -931,7 +931,18 @@ SNode* createFlushDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName) {
if (!checkDbName(pCxt, pDbName, false)) { if (!checkDbName(pCxt, pDbName, false)) {
return NULL; return NULL;
} }
SAlterDatabaseStmt* pStmt = (SAlterDatabaseStmt*)nodesMakeNode(QUERY_NODE_FLUSH_DATABASE_STMT); SFlushDatabaseStmt* pStmt = (SFlushDatabaseStmt*)nodesMakeNode(QUERY_NODE_FLUSH_DATABASE_STMT);
CHECK_OUT_OF_MEM(pStmt);
COPY_STRING_FORM_ID_TOKEN(pStmt->dbName, pDbName);
return (SNode*)pStmt;
}
SNode* createTrimDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName) {
CHECK_PARSER_STATUS(pCxt);
if (!checkDbName(pCxt, pDbName, false)) {
return NULL;
}
STrimDatabaseStmt* pStmt = (STrimDatabaseStmt*)nodesMakeNode(QUERY_NODE_TRIM_DATABASE_STMT);
CHECK_OUT_OF_MEM(pStmt); CHECK_OUT_OF_MEM(pStmt);
COPY_STRING_FORM_ID_TOKEN(pStmt->dbName, pDbName); COPY_STRING_FORM_ID_TOKEN(pStmt->dbName, pDbName);
return (SNode*)pStmt; return (SNode*)pStmt;

View File

@ -216,6 +216,7 @@ static SKeyword keywordTable[] = {
{"TRANSACTION", TK_TRANSACTION}, {"TRANSACTION", TK_TRANSACTION},
{"TRANSACTIONS", TK_TRANSACTIONS}, {"TRANSACTIONS", TK_TRANSACTIONS},
{"TRIGGER", TK_TRIGGER}, {"TRIGGER", TK_TRIGGER},
{"TRIM", TK_TRIM},
{"TSERIES", TK_TSERIES}, {"TSERIES", TK_TSERIES},
{"TTL", TK_TTL}, {"TTL", TK_TTL},
{"UNION", TK_UNION}, {"UNION", TK_UNION},

View File

@ -3144,6 +3144,14 @@ static int32_t translateAlterDatabase(STranslateContext* pCxt, SAlterDatabaseStm
return buildCmdMsg(pCxt, TDMT_MND_ALTER_DB, (FSerializeFunc)tSerializeSAlterDbReq, &alterReq); return buildCmdMsg(pCxt, TDMT_MND_ALTER_DB, (FSerializeFunc)tSerializeSAlterDbReq, &alterReq);
} }
static int32_t translateTrimDatabase(STranslateContext* pCxt, STrimDatabaseStmt* pStmt) {
STrimDbReq req = {0};
SName name = {0};
tNameSetDbName(&name, pCxt->pParseCxt->acctId, pStmt->dbName, strlen(pStmt->dbName));
tNameGetFullDbName(&name, req.db);
return buildCmdMsg(pCxt, TDMT_MND_TRIM_DB, (FSerializeFunc)tSerializeSTrimDbReq, &req);
}
static int32_t columnDefNodeToField(SNodeList* pList, SArray** pArray) { static int32_t columnDefNodeToField(SNodeList* pList, SArray** pArray) {
*pArray = taosArrayInit(LIST_LENGTH(pList), sizeof(SField)); *pArray = taosArrayInit(LIST_LENGTH(pList), sizeof(SField));
SNode* pNode; SNode* pNode;
@ -4576,6 +4584,9 @@ static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
case QUERY_NODE_ALTER_DATABASE_STMT: case QUERY_NODE_ALTER_DATABASE_STMT:
code = translateAlterDatabase(pCxt, (SAlterDatabaseStmt*)pNode); code = translateAlterDatabase(pCxt, (SAlterDatabaseStmt*)pNode);
break; break;
case QUERY_NODE_TRIM_DATABASE_STMT:
code = translateTrimDatabase(pCxt, (STrimDatabaseStmt*)pNode);
break;
case QUERY_NODE_CREATE_TABLE_STMT: case QUERY_NODE_CREATE_TABLE_STMT:
code = translateCreateSuperTable(pCxt, (SCreateTableStmt*)pNode); code = translateCreateSuperTable(pCxt, (SCreateTableStmt*)pNode);
break; break;

File diff suppressed because it is too large Load Diff

View File

@ -222,6 +222,25 @@ TEST_F(ParserShowToUseTest, splitVgroup) {
run("SPLIT VGROUP 15"); run("SPLIT VGROUP 15");
} }
TEST_F(ParserShowToUseTest, trimDatabase) {
useDb("root", "test");
STrimDbReq expect = {0};
auto setTrimDbReq = [&](const char* pDb) { snprintf(expect.db, sizeof(expect.db), "0.%s", pDb); };
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_TRIM_DATABASE_STMT);
ASSERT_EQ(pQuery->pCmdMsg->msgType, TDMT_MND_TRIM_DB);
STrimDbReq req = {0};
ASSERT_EQ(tDeserializeSTrimDbReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req), TSDB_CODE_SUCCESS);
ASSERT_EQ(std::string(req.db), std::string(expect.db));
});
setTrimDbReq("wxy_db");
run("TRIM DATABASE wxy_db");
}
TEST_F(ParserShowToUseTest, useDatabase) { TEST_F(ParserShowToUseTest, useDatabase) {
useDb("root", "test"); useDb("root", "test");