feat: the sql command 'create dnode' is compatible with the 2.x version syntax
This commit is contained in:
parent
a06b329bee
commit
48f730fbcf
|
@ -64,195 +64,196 @@
|
||||||
#define TK_PORT 46
|
#define TK_PORT 46
|
||||||
#define TK_NK_INTEGER 47
|
#define TK_NK_INTEGER 47
|
||||||
#define TK_DNODES 48
|
#define TK_DNODES 48
|
||||||
#define TK_LOCAL 49
|
#define TK_NK_IPTOKEN 49
|
||||||
#define TK_QNODE 50
|
#define TK_LOCAL 50
|
||||||
#define TK_BNODE 51
|
#define TK_QNODE 51
|
||||||
#define TK_SNODE 52
|
#define TK_BNODE 52
|
||||||
#define TK_MNODE 53
|
#define TK_SNODE 53
|
||||||
#define TK_DATABASE 54
|
#define TK_MNODE 54
|
||||||
#define TK_USE 55
|
#define TK_DATABASE 55
|
||||||
#define TK_IF 56
|
#define TK_USE 56
|
||||||
#define TK_NOT 57
|
#define TK_IF 57
|
||||||
#define TK_EXISTS 58
|
#define TK_NOT 58
|
||||||
#define TK_BUFFER 59
|
#define TK_EXISTS 59
|
||||||
#define TK_CACHELAST 60
|
#define TK_BUFFER 60
|
||||||
#define TK_COMP 61
|
#define TK_CACHELAST 61
|
||||||
#define TK_DURATION 62
|
#define TK_COMP 62
|
||||||
#define TK_NK_VARIABLE 63
|
#define TK_DURATION 63
|
||||||
#define TK_FSYNC 64
|
#define TK_NK_VARIABLE 64
|
||||||
#define TK_MAXROWS 65
|
#define TK_FSYNC 65
|
||||||
#define TK_MINROWS 66
|
#define TK_MAXROWS 66
|
||||||
#define TK_KEEP 67
|
#define TK_MINROWS 67
|
||||||
#define TK_PAGES 68
|
#define TK_KEEP 68
|
||||||
#define TK_PAGESIZE 69
|
#define TK_PAGES 69
|
||||||
#define TK_PRECISION 70
|
#define TK_PAGESIZE 70
|
||||||
#define TK_REPLICA 71
|
#define TK_PRECISION 71
|
||||||
#define TK_STRICT 72
|
#define TK_REPLICA 72
|
||||||
#define TK_WAL 73
|
#define TK_STRICT 73
|
||||||
#define TK_VGROUPS 74
|
#define TK_WAL 74
|
||||||
#define TK_SINGLE_STABLE 75
|
#define TK_VGROUPS 75
|
||||||
#define TK_RETENTIONS 76
|
#define TK_SINGLE_STABLE 76
|
||||||
#define TK_SCHEMALESS 77
|
#define TK_RETENTIONS 77
|
||||||
#define TK_NK_COLON 78
|
#define TK_SCHEMALESS 78
|
||||||
#define TK_TABLE 79
|
#define TK_NK_COLON 79
|
||||||
#define TK_NK_LP 80
|
#define TK_TABLE 80
|
||||||
#define TK_NK_RP 81
|
#define TK_NK_LP 81
|
||||||
#define TK_STABLE 82
|
#define TK_NK_RP 82
|
||||||
#define TK_ADD 83
|
#define TK_STABLE 83
|
||||||
#define TK_COLUMN 84
|
#define TK_ADD 84
|
||||||
#define TK_MODIFY 85
|
#define TK_COLUMN 85
|
||||||
#define TK_RENAME 86
|
#define TK_MODIFY 86
|
||||||
#define TK_TAG 87
|
#define TK_RENAME 87
|
||||||
#define TK_SET 88
|
#define TK_TAG 88
|
||||||
#define TK_NK_EQ 89
|
#define TK_SET 89
|
||||||
#define TK_USING 90
|
#define TK_NK_EQ 90
|
||||||
#define TK_TAGS 91
|
#define TK_USING 91
|
||||||
#define TK_COMMENT 92
|
#define TK_TAGS 92
|
||||||
#define TK_BOOL 93
|
#define TK_COMMENT 93
|
||||||
#define TK_TINYINT 94
|
#define TK_BOOL 94
|
||||||
#define TK_SMALLINT 95
|
#define TK_TINYINT 95
|
||||||
#define TK_INT 96
|
#define TK_SMALLINT 96
|
||||||
#define TK_INTEGER 97
|
#define TK_INT 97
|
||||||
#define TK_BIGINT 98
|
#define TK_INTEGER 98
|
||||||
#define TK_FLOAT 99
|
#define TK_BIGINT 99
|
||||||
#define TK_DOUBLE 100
|
#define TK_FLOAT 100
|
||||||
#define TK_BINARY 101
|
#define TK_DOUBLE 101
|
||||||
#define TK_TIMESTAMP 102
|
#define TK_BINARY 102
|
||||||
#define TK_NCHAR 103
|
#define TK_TIMESTAMP 103
|
||||||
#define TK_UNSIGNED 104
|
#define TK_NCHAR 104
|
||||||
#define TK_JSON 105
|
#define TK_UNSIGNED 105
|
||||||
#define TK_VARCHAR 106
|
#define TK_JSON 106
|
||||||
#define TK_MEDIUMBLOB 107
|
#define TK_VARCHAR 107
|
||||||
#define TK_BLOB 108
|
#define TK_MEDIUMBLOB 108
|
||||||
#define TK_VARBINARY 109
|
#define TK_BLOB 109
|
||||||
#define TK_DECIMAL 110
|
#define TK_VARBINARY 110
|
||||||
#define TK_MAX_DELAY 111
|
#define TK_DECIMAL 111
|
||||||
#define TK_WATERMARK 112
|
#define TK_MAX_DELAY 112
|
||||||
#define TK_ROLLUP 113
|
#define TK_WATERMARK 113
|
||||||
#define TK_TTL 114
|
#define TK_ROLLUP 114
|
||||||
#define TK_SMA 115
|
#define TK_TTL 115
|
||||||
#define TK_FIRST 116
|
#define TK_SMA 116
|
||||||
#define TK_LAST 117
|
#define TK_FIRST 117
|
||||||
#define TK_SHOW 118
|
#define TK_LAST 118
|
||||||
#define TK_DATABASES 119
|
#define TK_SHOW 119
|
||||||
#define TK_TABLES 120
|
#define TK_DATABASES 120
|
||||||
#define TK_STABLES 121
|
#define TK_TABLES 121
|
||||||
#define TK_MNODES 122
|
#define TK_STABLES 122
|
||||||
#define TK_MODULES 123
|
#define TK_MNODES 123
|
||||||
#define TK_QNODES 124
|
#define TK_MODULES 124
|
||||||
#define TK_FUNCTIONS 125
|
#define TK_QNODES 125
|
||||||
#define TK_INDEXES 126
|
#define TK_FUNCTIONS 126
|
||||||
#define TK_ACCOUNTS 127
|
#define TK_INDEXES 127
|
||||||
#define TK_APPS 128
|
#define TK_ACCOUNTS 128
|
||||||
#define TK_CONNECTIONS 129
|
#define TK_APPS 129
|
||||||
#define TK_LICENCE 130
|
#define TK_CONNECTIONS 130
|
||||||
#define TK_GRANTS 131
|
#define TK_LICENCE 131
|
||||||
#define TK_QUERIES 132
|
#define TK_GRANTS 132
|
||||||
#define TK_SCORES 133
|
#define TK_QUERIES 133
|
||||||
#define TK_TOPICS 134
|
#define TK_SCORES 134
|
||||||
#define TK_VARIABLES 135
|
#define TK_TOPICS 135
|
||||||
#define TK_BNODES 136
|
#define TK_VARIABLES 136
|
||||||
#define TK_SNODES 137
|
#define TK_BNODES 137
|
||||||
#define TK_CLUSTER 138
|
#define TK_SNODES 138
|
||||||
#define TK_TRANSACTIONS 139
|
#define TK_CLUSTER 139
|
||||||
#define TK_LIKE 140
|
#define TK_TRANSACTIONS 140
|
||||||
#define TK_INDEX 141
|
#define TK_LIKE 141
|
||||||
#define TK_FULLTEXT 142
|
#define TK_INDEX 142
|
||||||
#define TK_FUNCTION 143
|
#define TK_FULLTEXT 143
|
||||||
#define TK_INTERVAL 144
|
#define TK_FUNCTION 144
|
||||||
#define TK_TOPIC 145
|
#define TK_INTERVAL 145
|
||||||
#define TK_AS 146
|
#define TK_TOPIC 146
|
||||||
#define TK_CONSUMER 147
|
#define TK_AS 147
|
||||||
#define TK_GROUP 148
|
#define TK_CONSUMER 148
|
||||||
#define TK_DESC 149
|
#define TK_GROUP 149
|
||||||
#define TK_DESCRIBE 150
|
#define TK_DESC 150
|
||||||
#define TK_RESET 151
|
#define TK_DESCRIBE 151
|
||||||
#define TK_QUERY 152
|
#define TK_RESET 152
|
||||||
#define TK_CACHE 153
|
#define TK_QUERY 153
|
||||||
#define TK_EXPLAIN 154
|
#define TK_CACHE 154
|
||||||
#define TK_ANALYZE 155
|
#define TK_EXPLAIN 155
|
||||||
#define TK_VERBOSE 156
|
#define TK_ANALYZE 156
|
||||||
#define TK_NK_BOOL 157
|
#define TK_VERBOSE 157
|
||||||
#define TK_RATIO 158
|
#define TK_NK_BOOL 158
|
||||||
#define TK_NK_FLOAT 159
|
#define TK_RATIO 159
|
||||||
#define TK_COMPACT 160
|
#define TK_NK_FLOAT 160
|
||||||
#define TK_VNODES 161
|
#define TK_COMPACT 161
|
||||||
#define TK_IN 162
|
#define TK_VNODES 162
|
||||||
#define TK_OUTPUTTYPE 163
|
#define TK_IN 163
|
||||||
#define TK_AGGREGATE 164
|
#define TK_OUTPUTTYPE 164
|
||||||
#define TK_BUFSIZE 165
|
#define TK_AGGREGATE 165
|
||||||
#define TK_STREAM 166
|
#define TK_BUFSIZE 166
|
||||||
#define TK_INTO 167
|
#define TK_STREAM 167
|
||||||
#define TK_TRIGGER 168
|
#define TK_INTO 168
|
||||||
#define TK_AT_ONCE 169
|
#define TK_TRIGGER 169
|
||||||
#define TK_WINDOW_CLOSE 170
|
#define TK_AT_ONCE 170
|
||||||
#define TK_KILL 171
|
#define TK_WINDOW_CLOSE 171
|
||||||
#define TK_CONNECTION 172
|
#define TK_KILL 172
|
||||||
#define TK_TRANSACTION 173
|
#define TK_CONNECTION 173
|
||||||
#define TK_BALANCE 174
|
#define TK_TRANSACTION 174
|
||||||
#define TK_VGROUP 175
|
#define TK_BALANCE 175
|
||||||
#define TK_MERGE 176
|
#define TK_VGROUP 176
|
||||||
#define TK_REDISTRIBUTE 177
|
#define TK_MERGE 177
|
||||||
#define TK_SPLIT 178
|
#define TK_REDISTRIBUTE 178
|
||||||
#define TK_SYNCDB 179
|
#define TK_SPLIT 179
|
||||||
#define TK_DELETE 180
|
#define TK_SYNCDB 180
|
||||||
#define TK_NULL 181
|
#define TK_DELETE 181
|
||||||
#define TK_NK_QUESTION 182
|
#define TK_NULL 182
|
||||||
#define TK_NK_ARROW 183
|
#define TK_NK_QUESTION 183
|
||||||
#define TK_ROWTS 184
|
#define TK_NK_ARROW 184
|
||||||
#define TK_TBNAME 185
|
#define TK_ROWTS 185
|
||||||
#define TK_QSTARTTS 186
|
#define TK_TBNAME 186
|
||||||
#define TK_QENDTS 187
|
#define TK_QSTARTTS 187
|
||||||
#define TK_WSTARTTS 188
|
#define TK_QENDTS 188
|
||||||
#define TK_WENDTS 189
|
#define TK_WSTARTTS 189
|
||||||
#define TK_WDURATION 190
|
#define TK_WENDTS 190
|
||||||
#define TK_CAST 191
|
#define TK_WDURATION 191
|
||||||
#define TK_NOW 192
|
#define TK_CAST 192
|
||||||
#define TK_TODAY 193
|
#define TK_NOW 193
|
||||||
#define TK_TIMEZONE 194
|
#define TK_TODAY 194
|
||||||
#define TK_COUNT 195
|
#define TK_TIMEZONE 195
|
||||||
#define TK_LAST_ROW 196
|
#define TK_COUNT 196
|
||||||
#define TK_BETWEEN 197
|
#define TK_LAST_ROW 197
|
||||||
#define TK_IS 198
|
#define TK_BETWEEN 198
|
||||||
#define TK_NK_LT 199
|
#define TK_IS 199
|
||||||
#define TK_NK_GT 200
|
#define TK_NK_LT 200
|
||||||
#define TK_NK_LE 201
|
#define TK_NK_GT 201
|
||||||
#define TK_NK_GE 202
|
#define TK_NK_LE 202
|
||||||
#define TK_NK_NE 203
|
#define TK_NK_GE 203
|
||||||
#define TK_MATCH 204
|
#define TK_NK_NE 204
|
||||||
#define TK_NMATCH 205
|
#define TK_MATCH 205
|
||||||
#define TK_CONTAINS 206
|
#define TK_NMATCH 206
|
||||||
#define TK_JOIN 207
|
#define TK_CONTAINS 207
|
||||||
#define TK_INNER 208
|
#define TK_JOIN 208
|
||||||
#define TK_SELECT 209
|
#define TK_INNER 209
|
||||||
#define TK_DISTINCT 210
|
#define TK_SELECT 210
|
||||||
#define TK_WHERE 211
|
#define TK_DISTINCT 211
|
||||||
#define TK_PARTITION 212
|
#define TK_WHERE 212
|
||||||
#define TK_BY 213
|
#define TK_PARTITION 213
|
||||||
#define TK_SESSION 214
|
#define TK_BY 214
|
||||||
#define TK_STATE_WINDOW 215
|
#define TK_SESSION 215
|
||||||
#define TK_SLIDING 216
|
#define TK_STATE_WINDOW 216
|
||||||
#define TK_FILL 217
|
#define TK_SLIDING 217
|
||||||
#define TK_VALUE 218
|
#define TK_FILL 218
|
||||||
#define TK_NONE 219
|
#define TK_VALUE 219
|
||||||
#define TK_PREV 220
|
#define TK_NONE 220
|
||||||
#define TK_LINEAR 221
|
#define TK_PREV 221
|
||||||
#define TK_NEXT 222
|
#define TK_LINEAR 222
|
||||||
#define TK_HAVING 223
|
#define TK_NEXT 223
|
||||||
#define TK_ORDER 224
|
#define TK_HAVING 224
|
||||||
#define TK_SLIMIT 225
|
#define TK_ORDER 225
|
||||||
#define TK_SOFFSET 226
|
#define TK_SLIMIT 226
|
||||||
#define TK_LIMIT 227
|
#define TK_SOFFSET 227
|
||||||
#define TK_OFFSET 228
|
#define TK_LIMIT 228
|
||||||
#define TK_ASC 229
|
#define TK_OFFSET 229
|
||||||
#define TK_NULLS 230
|
#define TK_ASC 230
|
||||||
#define TK_ID 231
|
#define TK_NULLS 231
|
||||||
#define TK_NK_BITNOT 232
|
#define TK_ID 232
|
||||||
#define TK_INSERT 233
|
#define TK_NK_BITNOT 233
|
||||||
#define TK_VALUES 234
|
#define TK_INSERT 234
|
||||||
#define TK_IMPORT 235
|
#define TK_VALUES 235
|
||||||
#define TK_NK_SEMI 236
|
#define TK_IMPORT 236
|
||||||
#define TK_FILE 237
|
#define TK_NK_SEMI 237
|
||||||
|
#define TK_FILE 238
|
||||||
|
|
||||||
#define TK_NK_SPACE 300
|
#define TK_NK_SPACE 300
|
||||||
#define TK_NK_COMMENT 301
|
#define TK_NK_COMMENT 301
|
||||||
|
@ -260,7 +261,6 @@
|
||||||
#define TK_NK_HEX 303 // hex number 0x123
|
#define TK_NK_HEX 303 // hex number 0x123
|
||||||
#define TK_NK_OCT 304 // oct number
|
#define TK_NK_OCT 304 // oct number
|
||||||
#define TK_NK_BIN 305 // bin format data 0b111
|
#define TK_NK_BIN 305 // bin format data 0b111
|
||||||
#define TK_NK_IPTOKEN 306
|
|
||||||
|
|
||||||
#define TK_NK_NIL 65535
|
#define TK_NK_NIL 65535
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ priv_level(A) ::= db_name(B) NK_DOT NK_STAR.
|
||||||
|
|
||||||
/************************************************ create/drop/alter dnode *********************************************/
|
/************************************************ create/drop/alter dnode *********************************************/
|
||||||
cmd ::= CREATE DNODE dnode_endpoint(A). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); }
|
cmd ::= CREATE DNODE dnode_endpoint(A). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); }
|
||||||
cmd ::= CREATE DNODE dnode_host_name(A) PORT NK_INTEGER(B). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, &B); }
|
cmd ::= CREATE DNODE dnode_endpoint(A) PORT NK_INTEGER(B). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, &B); }
|
||||||
cmd ::= DROP DNODE NK_INTEGER(A). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A); }
|
cmd ::= DROP DNODE NK_INTEGER(A). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A); }
|
||||||
cmd ::= DROP DNODE dnode_endpoint(A). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A); }
|
cmd ::= DROP DNODE dnode_endpoint(A). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A); }
|
||||||
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B). { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, NULL); }
|
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B). { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, NULL); }
|
||||||
|
@ -122,10 +122,8 @@ cmd ::= ALTER ALL DNODES NK_STRING(A) NK_STRING(B).
|
||||||
%type dnode_endpoint { SToken }
|
%type dnode_endpoint { SToken }
|
||||||
%destructor dnode_endpoint { }
|
%destructor dnode_endpoint { }
|
||||||
dnode_endpoint(A) ::= NK_STRING(B). { A = B; }
|
dnode_endpoint(A) ::= NK_STRING(B). { A = B; }
|
||||||
|
dnode_endpoint(A) ::= NK_ID(B). { A = B; }
|
||||||
%type dnode_host_name { SToken }
|
dnode_endpoint(A) ::= NK_IPTOKEN(B). { A = B; }
|
||||||
%destructor dnode_host_name { }
|
|
||||||
dnode_host_name(A) ::= NK_STRING(B). { A = B; }
|
|
||||||
|
|
||||||
/************************************************ alter local *********************************************************/
|
/************************************************ alter local *********************************************************/
|
||||||
cmd ::= ALTER LOCAL NK_STRING(A). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); }
|
cmd ::= ALTER LOCAL NK_STRING(A). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); }
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#include "parAst.h"
|
#include "parAst.h"
|
||||||
#include "parUtil.h"
|
#include "parUtil.h"
|
||||||
|
#include "tglobal.h"
|
||||||
#include "ttime.h"
|
#include "ttime.h"
|
||||||
|
|
||||||
#define CHECK_OUT_OF_MEM(p) \
|
#define CHECK_OUT_OF_MEM(p) \
|
||||||
|
@ -99,7 +100,7 @@ static bool checkPassword(SAstCreateContext* pCxt, const SToken* pPasswordToken,
|
||||||
} else if (pPasswordToken->n >= (TSDB_USET_PASSWORD_LEN + 2)) {
|
} else if (pPasswordToken->n >= (TSDB_USET_PASSWORD_LEN + 2)) {
|
||||||
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG);
|
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG);
|
||||||
} else {
|
} else {
|
||||||
COPY_STRING_FORM_ID_TOKEN(pPassword, pPasswordToken);
|
strncpy(pPassword, pPasswordToken->z, pPasswordToken->n);
|
||||||
strdequote(pPassword);
|
strdequote(pPassword);
|
||||||
if (strtrim(pPassword) <= 0) {
|
if (strtrim(pPassword) <= 0) {
|
||||||
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_PASSWD_EMPTY);
|
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_PASSWD_EMPTY);
|
||||||
|
@ -110,50 +111,52 @@ static bool checkPassword(SAstCreateContext* pCxt, const SToken* pPasswordToken,
|
||||||
return TSDB_CODE_SUCCESS == pCxt->errCode;
|
return TSDB_CODE_SUCCESS == pCxt->errCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool checkAndSplitEndpoint(SAstCreateContext* pCxt, const SToken* pEp, char* pFqdn, int32_t* pPort) {
|
static int32_t parsePort(SAstCreateContext* pCxt, const char* p, int32_t* pPort) {
|
||||||
|
*pPort = taosStr2Int32(p, NULL, 10);
|
||||||
|
if (*pPort >= UINT16_MAX || *pPort <= 0) {
|
||||||
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_PORT);
|
||||||
|
}
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t parseEndpoint(SAstCreateContext* pCxt, const SToken* pEp, char* pFqdn, int32_t* pPort) {
|
||||||
|
if (pEp->n >= (NULL == pPort ? (TSDB_FQDN_LEN + 1 + 5) : TSDB_FQDN_LEN)) { // format 'fqdn:port' or 'fqdn'
|
||||||
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG);
|
||||||
|
}
|
||||||
|
|
||||||
|
char ep[TSDB_FQDN_LEN + 1 + 5];
|
||||||
|
COPY_STRING_FORM_ID_TOKEN(ep, pEp);
|
||||||
|
strdequote(ep);
|
||||||
|
strtrim(ep);
|
||||||
|
if (NULL == pPort) {
|
||||||
|
strcpy(pFqdn, ep);
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
char* pColon = strchr(ep, ':');
|
||||||
|
if (NULL == pColon) {
|
||||||
|
*pPort = tsServerPort;
|
||||||
|
strcpy(pFqdn, ep);
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
strncpy(pFqdn, ep, pColon - ep);
|
||||||
|
return parsePort(pCxt, pColon + 1, pPort);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool checkAndSplitEndpoint(SAstCreateContext* pCxt, const SToken* pEp, const SToken* pPortToken, char* pFqdn,
|
||||||
|
int32_t* pPort) {
|
||||||
if (NULL == pEp) {
|
if (NULL == pEp) {
|
||||||
pCxt->errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
|
pCxt->errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
|
||||||
} else if (pEp->n >= TSDB_FQDN_LEN + 2 + 6) { // format 'fqdn:port'
|
return false;
|
||||||
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG);
|
|
||||||
} else {
|
|
||||||
char ep[TSDB_FQDN_LEN + 6];
|
|
||||||
COPY_STRING_FORM_STR_TOKEN(ep, pEp);
|
|
||||||
strdequote(ep);
|
|
||||||
strtrim(ep);
|
|
||||||
char* pColon = strchr(ep, ':');
|
|
||||||
if (NULL == pColon) {
|
|
||||||
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_ENDPOINT);
|
|
||||||
} else {
|
|
||||||
strncpy(pFqdn, ep, pColon - ep);
|
|
||||||
*pPort = taosStr2Int32(pColon + 1, NULL, 10);
|
|
||||||
if (*pPort >= UINT16_MAX || *pPort <= 0) {
|
|
||||||
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_PORT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS == pCxt->errCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool checkFqdn(SAstCreateContext* pCxt, const SToken* pFqdn) {
|
if (NULL != pPortToken) {
|
||||||
if (NULL == pFqdn) {
|
pCxt->errCode = parsePort(pCxt, pPortToken->z, pPort);
|
||||||
pCxt->errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
|
|
||||||
} else {
|
|
||||||
if (pFqdn->n >= TSDB_FQDN_LEN) {
|
|
||||||
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS == pCxt->errCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool checkPort(SAstCreateContext* pCxt, const SToken* pPortToken, int32_t* pPort) {
|
if (TSDB_CODE_SUCCESS == pCxt->errCode) {
|
||||||
if (NULL == pPortToken) {
|
pCxt->errCode = parseEndpoint(pCxt, pEp, pFqdn, (NULL != pPortToken ? NULL : pPort));
|
||||||
pCxt->errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
|
|
||||||
} else {
|
|
||||||
*pPort = taosStr2Int32(pPortToken->z, NULL, 10);
|
|
||||||
if (*pPort >= UINT16_MAX || *pPort <= 0) {
|
|
||||||
pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_PORT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS == pCxt->errCode;
|
return TSDB_CODE_SUCCESS == pCxt->errCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1177,23 +1180,12 @@ SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName) {
|
||||||
|
|
||||||
SNode* createCreateDnodeStmt(SAstCreateContext* pCxt, const SToken* pFqdn, const SToken* pPort) {
|
SNode* createCreateDnodeStmt(SAstCreateContext* pCxt, const SToken* pFqdn, const SToken* pPort) {
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
int32_t port = 0;
|
|
||||||
char fqdn[TSDB_FQDN_LEN] = {0};
|
|
||||||
if (NULL == pPort) {
|
|
||||||
if (!checkAndSplitEndpoint(pCxt, pFqdn, fqdn, &port)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else if (!checkFqdn(pCxt, pFqdn) || !checkPort(pCxt, pPort, &port)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
SCreateDnodeStmt* pStmt = (SCreateDnodeStmt*)nodesMakeNode(QUERY_NODE_CREATE_DNODE_STMT);
|
SCreateDnodeStmt* pStmt = (SCreateDnodeStmt*)nodesMakeNode(QUERY_NODE_CREATE_DNODE_STMT);
|
||||||
CHECK_OUT_OF_MEM(pStmt);
|
CHECK_OUT_OF_MEM(pStmt);
|
||||||
if (NULL == pPort) {
|
if (!checkAndSplitEndpoint(pCxt, pFqdn, pPort, pStmt->fqdn, &pStmt->port)) {
|
||||||
strcpy(pStmt->fqdn, fqdn);
|
nodesDestroyNode((SNode*)pStmt);
|
||||||
} else {
|
return NULL;
|
||||||
COPY_STRING_FORM_ID_TOKEN(pStmt->fqdn, pFqdn);
|
|
||||||
}
|
}
|
||||||
pStmt->port = port;
|
|
||||||
return (SNode*)pStmt;
|
return (SNode*)pStmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1204,7 +1196,7 @@ SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode) {
|
||||||
if (TK_NK_INTEGER == pDnode->type) {
|
if (TK_NK_INTEGER == pDnode->type) {
|
||||||
pStmt->dnodeId = taosStr2Int32(pDnode->z, NULL, 10);
|
pStmt->dnodeId = taosStr2Int32(pDnode->z, NULL, 10);
|
||||||
} else {
|
} else {
|
||||||
if (!checkAndSplitEndpoint(pCxt, pDnode, pStmt->fqdn, &pStmt->port)) {
|
if (!checkAndSplitEndpoint(pCxt, pDnode, NULL, pStmt->fqdn, &pStmt->port)) {
|
||||||
nodesDestroyNode((SNode*)pStmt);
|
nodesDestroyNode((SNode*)pStmt);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -14,7 +14,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "parTestUtil.h"
|
#include "parTestUtil.h"
|
||||||
#include "ttime.h"
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -242,9 +241,47 @@ TEST_F(ParserInitialCTest, createDatabaseSemanticCheck) {
|
||||||
TEST_F(ParserInitialCTest, createDnode) {
|
TEST_F(ParserInitialCTest, createDnode) {
|
||||||
useDb("root", "test");
|
useDb("root", "test");
|
||||||
|
|
||||||
run("CREATE DNODE 'abc1' PORT 7000");
|
SCreateDnodeReq expect = {0};
|
||||||
|
|
||||||
run("CREATE DNODE '1.1.1.1' PORT 9000");
|
auto clearCreateDnodeReq = [&]() { memset(&expect, 0, sizeof(SCreateDnodeReq)); };
|
||||||
|
|
||||||
|
auto setCreateDnodeReqFunc = [&](const char* pFqdn, int32_t port = tsServerPort) {
|
||||||
|
strcpy(expect.fqdn, pFqdn);
|
||||||
|
expect.port = port;
|
||||||
|
};
|
||||||
|
|
||||||
|
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
|
||||||
|
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_CREATE_DNODE_STMT);
|
||||||
|
SCreateDnodeReq req = {0};
|
||||||
|
ASSERT_TRUE(TSDB_CODE_SUCCESS == tDeserializeSCreateDnodeReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req));
|
||||||
|
|
||||||
|
ASSERT_EQ(std::string(req.fqdn), std::string(expect.fqdn));
|
||||||
|
ASSERT_EQ(req.port, expect.port);
|
||||||
|
});
|
||||||
|
|
||||||
|
setCreateDnodeReqFunc("abc1", 7030);
|
||||||
|
run("CREATE DNODE 'abc1' PORT 7030");
|
||||||
|
clearCreateDnodeReq();
|
||||||
|
|
||||||
|
setCreateDnodeReqFunc("1.1.1.1", 8030);
|
||||||
|
run("CREATE DNODE 1.1.1.1 PORT 8030");
|
||||||
|
clearCreateDnodeReq();
|
||||||
|
|
||||||
|
setCreateDnodeReqFunc("host1", 9030);
|
||||||
|
run("CREATE DNODE host1 PORT 9030");
|
||||||
|
clearCreateDnodeReq();
|
||||||
|
|
||||||
|
setCreateDnodeReqFunc("abc2", 7040);
|
||||||
|
run("CREATE DNODE 'abc2:7040'");
|
||||||
|
clearCreateDnodeReq();
|
||||||
|
|
||||||
|
setCreateDnodeReqFunc("1.1.1.2");
|
||||||
|
run("CREATE DNODE 1.1.1.2");
|
||||||
|
clearCreateDnodeReq();
|
||||||
|
|
||||||
|
setCreateDnodeReqFunc("host2");
|
||||||
|
run("CREATE DNODE host2");
|
||||||
|
clearCreateDnodeReq();
|
||||||
}
|
}
|
||||||
|
|
||||||
// CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] func_name AS library_path OUTPUTTYPE type_name [BUFSIZE value]
|
// CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] func_name AS library_path OUTPUTTYPE type_name [BUFSIZE value]
|
||||||
|
|
|
@ -64,8 +64,9 @@ TEST_F(ParserInitialDTest, dropConsumerGroup) {
|
||||||
|
|
||||||
SMDropCgroupReq expect = {0};
|
SMDropCgroupReq expect = {0};
|
||||||
|
|
||||||
auto setDropCgroupReqFunc = [&](const char* pTopicName, const char* pCGroupName, int8_t igNotExists = 0) {
|
auto clearDropCgroupReq = [&]() { memset(&expect, 0, sizeof(SMDropCgroupReq)); };
|
||||||
memset(&expect, 0, sizeof(SMDropCgroupReq));
|
|
||||||
|
auto setDropCgroupReq = [&](const char* pTopicName, const char* pCGroupName, int8_t igNotExists = 0) {
|
||||||
snprintf(expect.topic, sizeof(expect.topic), "0.%s", pTopicName);
|
snprintf(expect.topic, sizeof(expect.topic), "0.%s", pTopicName);
|
||||||
strcpy(expect.cgroup, pCGroupName);
|
strcpy(expect.cgroup, pCGroupName);
|
||||||
expect.igNotExists = igNotExists;
|
expect.igNotExists = igNotExists;
|
||||||
|
@ -81,15 +82,51 @@ TEST_F(ParserInitialDTest, dropConsumerGroup) {
|
||||||
ASSERT_EQ(req.igNotExists, expect.igNotExists);
|
ASSERT_EQ(req.igNotExists, expect.igNotExists);
|
||||||
});
|
});
|
||||||
|
|
||||||
setDropCgroupReqFunc("tp1", "cg1");
|
setDropCgroupReq("tp1", "cg1");
|
||||||
run("DROP CONSUMER GROUP cg1 ON tp1");
|
run("DROP CONSUMER GROUP cg1 ON tp1");
|
||||||
|
clearDropCgroupReq();
|
||||||
|
|
||||||
setDropCgroupReqFunc("tp1", "cg1", 1);
|
setDropCgroupReq("tp1", "cg1", 1);
|
||||||
run("DROP CONSUMER GROUP IF EXISTS cg1 ON tp1");
|
run("DROP CONSUMER GROUP IF EXISTS cg1 ON tp1");
|
||||||
|
clearDropCgroupReq();
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo DROP database
|
// todo DROP database
|
||||||
|
|
||||||
// todo DROP dnode
|
// todo DROP dnode
|
||||||
|
TEST_F(ParserInitialDTest, dropDnode) {
|
||||||
|
useDb("root", "test");
|
||||||
|
|
||||||
|
SDropDnodeReq expect = {0};
|
||||||
|
|
||||||
|
auto clearDropDnodeReq = [&]() { memset(&expect, 0, sizeof(SDropDnodeReq)); };
|
||||||
|
|
||||||
|
auto setDropDnodeReqById = [&](int32_t dnodeId) { expect.dnodeId = dnodeId; };
|
||||||
|
|
||||||
|
auto setDropDnodeReqByEndpoint = [&](const char* pFqdn, int32_t port) {
|
||||||
|
strcpy(expect.fqdn, pFqdn);
|
||||||
|
expect.port = port;
|
||||||
|
};
|
||||||
|
|
||||||
|
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
|
||||||
|
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_DROP_DNODE_STMT);
|
||||||
|
SDropDnodeReq req = {0};
|
||||||
|
ASSERT_TRUE(TSDB_CODE_SUCCESS == tDeserializeSDropDnodeReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req));
|
||||||
|
|
||||||
|
ASSERT_EQ(req.dnodeId, expect.dnodeId);
|
||||||
|
ASSERT_EQ(std::string(req.fqdn), std::string(expect.fqdn));
|
||||||
|
ASSERT_EQ(req.port, expect.port);
|
||||||
|
});
|
||||||
|
|
||||||
|
setDropDnodeReqById(1);
|
||||||
|
run("DROP DNODE 1");
|
||||||
|
clearDropDnodeReq();
|
||||||
|
|
||||||
|
setDropDnodeReqByEndpoint("host1", 7030);
|
||||||
|
run("DROP DNODE 'host1:7030'");
|
||||||
|
clearDropDnodeReq();
|
||||||
|
}
|
||||||
|
|
||||||
// todo DROP function
|
// todo DROP function
|
||||||
|
|
||||||
TEST_F(ParserInitialDTest, dropIndex) {
|
TEST_F(ParserInitialDTest, dropIndex) {
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
#include "cmdnodes.h"
|
#include "cmdnodes.h"
|
||||||
#include "querynodes.h"
|
#include "querynodes.h"
|
||||||
#include "taoserror.h"
|
#include "taoserror.h"
|
||||||
|
#include "tglobal.h"
|
||||||
|
#include "ttime.h"
|
||||||
|
|
||||||
namespace ParserTest {
|
namespace ParserTest {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue