From b16470414ae78d580a06c8c7c32f93325070cfbb Mon Sep 17 00:00:00 2001 From: slzhou Date: Thu, 24 Aug 2023 15:54:10 +0800 Subject: [PATCH 01/74] enhance: ip range white list to user --- include/common/tmsg.h | 2 + include/common/ttokendef.h | 617 +- source/libs/parser/inc/parAst.h | 3 +- source/libs/parser/inc/sql.y | 22 +- source/libs/parser/src/parAstCreater.c | 36 +- source/libs/parser/src/parTokenizer.c | 1 + source/libs/parser/src/sql.c | 10386 +++++++++++++---------- 7 files changed, 6176 insertions(+), 4891 deletions(-) diff --git a/include/common/tmsg.h b/include/common/tmsg.h index c6bb599a7d..47c030cde5 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -184,6 +184,8 @@ typedef enum _mgmt_table { #define TSDB_ALTER_USER_REMOVE_WRITE_TABLE 0x10 #define TSDB_ALTER_USER_ADD_ALL_TABLE 0x11 #define TSDB_ALTER_USER_REMOVE_ALL_TABLE 0x12 +#define TSDB_ALTER_USER_ADD_WHITE_LIST 0x13 +#define TSDB_ALTER_USER_DROP_WHITE_LIST 0x14 #define TSDB_ALTER_USER_PRIVILEGES 0x2 diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h index 42b9bc8939..d0fb1cdafa 100644 --- a/include/common/ttokendef.h +++ b/include/common/ttokendef.h @@ -16,6 +16,7 @@ #ifndef _TD_COMMON_TOKEN_H_ #define _TD_COMMON_TOKEN_H_ + #define TK_OR 1 #define TK_AND 2 #define TK_UNION 3 @@ -48,315 +49,313 @@ #define TK_USERS 30 #define TK_CONNS 31 #define TK_STATE 32 -#define TK_USER 33 -#define TK_ENABLE 34 -#define TK_NK_INTEGER 35 -#define TK_SYSINFO 36 -#define TK_DROP 37 -#define TK_GRANT 38 -#define TK_ON 39 -#define TK_TO 40 -#define TK_REVOKE 41 -#define TK_FROM 42 -#define TK_SUBSCRIBE 43 -#define TK_NK_COMMA 44 -#define TK_READ 45 -#define TK_WRITE 46 -#define TK_NK_DOT 47 -#define TK_WITH 48 -#define TK_DNODE 49 -#define TK_PORT 50 -#define TK_DNODES 51 -#define TK_RESTORE 52 -#define TK_NK_IPTOKEN 53 -#define TK_FORCE 54 -#define TK_UNSAFE 55 -#define TK_LOCAL 56 -#define TK_QNODE 57 -#define TK_BNODE 58 -#define TK_SNODE 59 -#define TK_MNODE 60 -#define TK_VNODE 61 -#define TK_DATABASE 62 -#define TK_USE 63 -#define TK_FLUSH 64 -#define TK_TRIM 65 -#define TK_COMPACT 66 -#define TK_IF 67 -#define TK_NOT 68 -#define TK_EXISTS 69 -#define TK_BUFFER 70 -#define TK_CACHEMODEL 71 -#define TK_CACHESIZE 72 -#define TK_COMP 73 -#define TK_DURATION 74 -#define TK_NK_VARIABLE 75 -#define TK_MAXROWS 76 -#define TK_MINROWS 77 -#define TK_KEEP 78 -#define TK_PAGES 79 -#define TK_PAGESIZE 80 -#define TK_TSDB_PAGESIZE 81 -#define TK_PRECISION 82 -#define TK_REPLICA 83 -#define TK_VGROUPS 84 -#define TK_SINGLE_STABLE 85 -#define TK_RETENTIONS 86 -#define TK_SCHEMALESS 87 -#define TK_WAL_LEVEL 88 -#define TK_WAL_FSYNC_PERIOD 89 -#define TK_WAL_RETENTION_PERIOD 90 -#define TK_WAL_RETENTION_SIZE 91 -#define TK_WAL_ROLL_PERIOD 92 -#define TK_WAL_SEGMENT_SIZE 93 -#define TK_STT_TRIGGER 94 -#define TK_TABLE_PREFIX 95 -#define TK_TABLE_SUFFIX 96 -#define TK_NK_COLON 97 -#define TK_MAX_SPEED 98 -#define TK_START 99 -#define TK_TIMESTAMP 100 -#define TK_END 101 -#define TK_TABLE 102 -#define TK_NK_LP 103 -#define TK_NK_RP 104 -#define TK_STABLE 105 -#define TK_ADD 106 -#define TK_COLUMN 107 -#define TK_MODIFY 108 -#define TK_RENAME 109 -#define TK_TAG 110 -#define TK_SET 111 -#define TK_NK_EQ 112 -#define TK_USING 113 -#define TK_TAGS 114 -#define TK_COMMENT 115 -#define TK_BOOL 116 -#define TK_TINYINT 117 -#define TK_SMALLINT 118 -#define TK_INT 119 -#define TK_INTEGER 120 -#define TK_BIGINT 121 -#define TK_FLOAT 122 -#define TK_DOUBLE 123 -#define TK_BINARY 124 -#define TK_NCHAR 125 -#define TK_UNSIGNED 126 -#define TK_JSON 127 -#define TK_VARCHAR 128 -#define TK_MEDIUMBLOB 129 -#define TK_BLOB 130 -#define TK_VARBINARY 131 -#define TK_GEOMETRY 132 -#define TK_DECIMAL 133 -#define TK_MAX_DELAY 134 -#define TK_WATERMARK 135 -#define TK_ROLLUP 136 -#define TK_TTL 137 -#define TK_SMA 138 -#define TK_DELETE_MARK 139 -#define TK_FIRST 140 -#define TK_LAST 141 -#define TK_SHOW 142 -#define TK_PRIVILEGES 143 -#define TK_DATABASES 144 -#define TK_TABLES 145 -#define TK_STABLES 146 -#define TK_MNODES 147 -#define TK_QNODES 148 -#define TK_FUNCTIONS 149 -#define TK_INDEXES 150 -#define TK_ACCOUNTS 151 -#define TK_APPS 152 -#define TK_CONNECTIONS 153 -#define TK_LICENCES 154 -#define TK_GRANTS 155 -#define TK_QUERIES 156 -#define TK_SCORES 157 -#define TK_TOPICS 158 -#define TK_VARIABLES 159 -#define TK_CLUSTER 160 -#define TK_BNODES 161 -#define TK_SNODES 162 -#define TK_TRANSACTIONS 163 -#define TK_DISTRIBUTED 164 -#define TK_CONSUMERS 165 -#define TK_SUBSCRIPTIONS 166 -#define TK_VNODES 167 -#define TK_ALIVE 168 -#define TK_LIKE 169 -#define TK_TBNAME 170 -#define TK_QTAGS 171 -#define TK_AS 172 -#define TK_INDEX 173 -#define TK_FUNCTION 174 -#define TK_INTERVAL 175 -#define TK_COUNT 176 -#define TK_LAST_ROW 177 -#define TK_META 178 -#define TK_ONLY 179 -#define TK_TOPIC 180 -#define TK_CONSUMER 181 -#define TK_GROUP 182 -#define TK_DESC 183 -#define TK_DESCRIBE 184 -#define TK_RESET 185 -#define TK_QUERY 186 -#define TK_CACHE 187 -#define TK_EXPLAIN 188 -#define TK_ANALYZE 189 -#define TK_VERBOSE 190 -#define TK_NK_BOOL 191 -#define TK_RATIO 192 -#define TK_NK_FLOAT 193 -#define TK_OUTPUTTYPE 194 -#define TK_AGGREGATE 195 -#define TK_BUFSIZE 196 -#define TK_LANGUAGE 197 -#define TK_REPLACE 198 -#define TK_STREAM 199 -#define TK_INTO 200 -#define TK_PAUSE 201 -#define TK_RESUME 202 -#define TK_TRIGGER 203 -#define TK_AT_ONCE 204 -#define TK_WINDOW_CLOSE 205 -#define TK_IGNORE 206 -#define TK_EXPIRED 207 -#define TK_FILL_HISTORY 208 -#define TK_UPDATE 209 -#define TK_SUBTABLE 210 -#define TK_UNTREATED 211 -#define TK_KILL 212 -#define TK_CONNECTION 213 -#define TK_TRANSACTION 214 -#define TK_BALANCE 215 -#define TK_VGROUP 216 -#define TK_LEADER 217 -#define TK_MERGE 218 -#define TK_REDISTRIBUTE 219 -#define TK_SPLIT 220 -#define TK_DELETE 221 -#define TK_INSERT 222 -#define TK_NULL 223 -#define TK_NK_QUESTION 224 -#define TK_NK_ARROW 225 -#define TK_ROWTS 226 -#define TK_QSTART 227 -#define TK_QEND 228 -#define TK_QDURATION 229 -#define TK_WSTART 230 -#define TK_WEND 231 -#define TK_WDURATION 232 -#define TK_IROWTS 233 -#define TK_ISFILLED 234 -#define TK_CAST 235 -#define TK_NOW 236 -#define TK_TODAY 237 -#define TK_TIMEZONE 238 -#define TK_CLIENT_VERSION 239 -#define TK_SERVER_VERSION 240 -#define TK_SERVER_STATUS 241 -#define TK_CURRENT_USER 242 -#define TK_CASE 243 -#define TK_WHEN 244 -#define TK_THEN 245 -#define TK_ELSE 246 -#define TK_BETWEEN 247 -#define TK_IS 248 -#define TK_NK_LT 249 -#define TK_NK_GT 250 -#define TK_NK_LE 251 -#define TK_NK_GE 252 -#define TK_NK_NE 253 -#define TK_MATCH 254 -#define TK_NMATCH 255 -#define TK_CONTAINS 256 -#define TK_IN 257 -#define TK_JOIN 258 -#define TK_INNER 259 -#define TK_SELECT 260 -#define TK_NK_HINT 261 -#define TK_DISTINCT 262 -#define TK_WHERE 263 -#define TK_PARTITION 264 -#define TK_BY 265 -#define TK_SESSION 266 -#define TK_STATE_WINDOW 267 -#define TK_EVENT_WINDOW 268 -#define TK_SLIDING 269 -#define TK_FILL 270 -#define TK_VALUE 271 -#define TK_VALUE_F 272 -#define TK_NONE 273 -#define TK_PREV 274 -#define TK_NULL_F 275 -#define TK_LINEAR 276 -#define TK_NEXT 277 -#define TK_HAVING 278 -#define TK_RANGE 279 -#define TK_EVERY 280 -#define TK_ORDER 281 -#define TK_SLIMIT 282 -#define TK_SOFFSET 283 -#define TK_LIMIT 284 -#define TK_OFFSET 285 -#define TK_ASC 286 -#define TK_NULLS 287 -#define TK_ABORT 288 -#define TK_AFTER 289 -#define TK_ATTACH 290 -#define TK_BEFORE 291 -#define TK_BEGIN 292 -#define TK_BITAND 293 -#define TK_BITNOT 294 -#define TK_BITOR 295 -#define TK_BLOCKS 296 -#define TK_CHANGE 297 -#define TK_COMMA 298 -#define TK_CONCAT 299 -#define TK_CONFLICT 300 -#define TK_COPY 301 -#define TK_DEFERRED 302 -#define TK_DELIMITERS 303 -#define TK_DETACH 304 -#define TK_DIVIDE 305 -#define TK_DOT 306 -#define TK_EACH 307 -#define TK_FAIL 308 -#define TK_FILE 309 -#define TK_FOR 310 -#define TK_GLOB 311 -#define TK_ID 312 -#define TK_IMMEDIATE 313 -#define TK_IMPORT 314 -#define TK_INITIALLY 315 -#define TK_INSTEAD 316 -#define TK_ISNULL 317 -#define TK_KEY 318 -#define TK_MODULES 319 -#define TK_NK_BITNOT 320 -#define TK_NK_SEMI 321 -#define TK_NOTNULL 322 -#define TK_OF 323 -#define TK_PLUS 324 -#define TK_PRIVILEGE 325 -#define TK_RAISE 326 -#define TK_RESTRICT 327 -#define TK_ROW 328 -#define TK_SEMI 329 -#define TK_STAR 330 -#define TK_STATEMENT 331 -#define TK_STRICT 332 -#define TK_STRING 333 -#define TK_TIMES 334 -#define TK_VALUES 335 -#define TK_VARIABLE 336 -#define TK_VIEW 337 -#define TK_WAL 338 - - - +#define TK_NK_COMMA 33 +#define TK_HOST 34 +#define TK_USER 35 +#define TK_ENABLE 36 +#define TK_NK_INTEGER 37 +#define TK_SYSINFO 38 +#define TK_ADD 39 +#define TK_DROP 40 +#define TK_GRANT 41 +#define TK_ON 42 +#define TK_TO 43 +#define TK_REVOKE 44 +#define TK_FROM 45 +#define TK_SUBSCRIBE 46 +#define TK_READ 47 +#define TK_WRITE 48 +#define TK_NK_DOT 49 +#define TK_WITH 50 +#define TK_DNODE 51 +#define TK_PORT 52 +#define TK_DNODES 53 +#define TK_RESTORE 54 +#define TK_NK_IPTOKEN 55 +#define TK_FORCE 56 +#define TK_UNSAFE 57 +#define TK_LOCAL 58 +#define TK_QNODE 59 +#define TK_BNODE 60 +#define TK_SNODE 61 +#define TK_MNODE 62 +#define TK_VNODE 63 +#define TK_DATABASE 64 +#define TK_USE 65 +#define TK_FLUSH 66 +#define TK_TRIM 67 +#define TK_COMPACT 68 +#define TK_IF 69 +#define TK_NOT 70 +#define TK_EXISTS 71 +#define TK_BUFFER 72 +#define TK_CACHEMODEL 73 +#define TK_CACHESIZE 74 +#define TK_COMP 75 +#define TK_DURATION 76 +#define TK_NK_VARIABLE 77 +#define TK_MAXROWS 78 +#define TK_MINROWS 79 +#define TK_KEEP 80 +#define TK_PAGES 81 +#define TK_PAGESIZE 82 +#define TK_TSDB_PAGESIZE 83 +#define TK_PRECISION 84 +#define TK_REPLICA 85 +#define TK_VGROUPS 86 +#define TK_SINGLE_STABLE 87 +#define TK_RETENTIONS 88 +#define TK_SCHEMALESS 89 +#define TK_WAL_LEVEL 90 +#define TK_WAL_FSYNC_PERIOD 91 +#define TK_WAL_RETENTION_PERIOD 92 +#define TK_WAL_RETENTION_SIZE 93 +#define TK_WAL_ROLL_PERIOD 94 +#define TK_WAL_SEGMENT_SIZE 95 +#define TK_STT_TRIGGER 96 +#define TK_TABLE_PREFIX 97 +#define TK_TABLE_SUFFIX 98 +#define TK_NK_COLON 99 +#define TK_MAX_SPEED 100 +#define TK_START 101 +#define TK_TIMESTAMP 102 +#define TK_END 103 +#define TK_TABLE 104 +#define TK_NK_LP 105 +#define TK_NK_RP 106 +#define TK_STABLE 107 +#define TK_COLUMN 108 +#define TK_MODIFY 109 +#define TK_RENAME 110 +#define TK_TAG 111 +#define TK_SET 112 +#define TK_NK_EQ 113 +#define TK_USING 114 +#define TK_TAGS 115 +#define TK_COMMENT 116 +#define TK_BOOL 117 +#define TK_TINYINT 118 +#define TK_SMALLINT 119 +#define TK_INT 120 +#define TK_INTEGER 121 +#define TK_BIGINT 122 +#define TK_FLOAT 123 +#define TK_DOUBLE 124 +#define TK_BINARY 125 +#define TK_NCHAR 126 +#define TK_UNSIGNED 127 +#define TK_JSON 128 +#define TK_VARCHAR 129 +#define TK_MEDIUMBLOB 130 +#define TK_BLOB 131 +#define TK_VARBINARY 132 +#define TK_GEOMETRY 133 +#define TK_DECIMAL 134 +#define TK_MAX_DELAY 135 +#define TK_WATERMARK 136 +#define TK_ROLLUP 137 +#define TK_TTL 138 +#define TK_SMA 139 +#define TK_DELETE_MARK 140 +#define TK_FIRST 141 +#define TK_LAST 142 +#define TK_SHOW 143 +#define TK_PRIVILEGES 144 +#define TK_DATABASES 145 +#define TK_TABLES 146 +#define TK_STABLES 147 +#define TK_MNODES 148 +#define TK_QNODES 149 +#define TK_FUNCTIONS 150 +#define TK_INDEXES 151 +#define TK_ACCOUNTS 152 +#define TK_APPS 153 +#define TK_CONNECTIONS 154 +#define TK_LICENCES 155 +#define TK_GRANTS 156 +#define TK_QUERIES 157 +#define TK_SCORES 158 +#define TK_TOPICS 159 +#define TK_VARIABLES 160 +#define TK_CLUSTER 161 +#define TK_BNODES 162 +#define TK_SNODES 163 +#define TK_TRANSACTIONS 164 +#define TK_DISTRIBUTED 165 +#define TK_CONSUMERS 166 +#define TK_SUBSCRIPTIONS 167 +#define TK_VNODES 168 +#define TK_ALIVE 169 +#define TK_LIKE 170 +#define TK_TBNAME 171 +#define TK_QTAGS 172 +#define TK_AS 173 +#define TK_INDEX 174 +#define TK_FUNCTION 175 +#define TK_INTERVAL 176 +#define TK_COUNT 177 +#define TK_LAST_ROW 178 +#define TK_META 179 +#define TK_ONLY 180 +#define TK_TOPIC 181 +#define TK_CONSUMER 182 +#define TK_GROUP 183 +#define TK_DESC 184 +#define TK_DESCRIBE 185 +#define TK_RESET 186 +#define TK_QUERY 187 +#define TK_CACHE 188 +#define TK_EXPLAIN 189 +#define TK_ANALYZE 190 +#define TK_VERBOSE 191 +#define TK_NK_BOOL 192 +#define TK_RATIO 193 +#define TK_NK_FLOAT 194 +#define TK_OUTPUTTYPE 195 +#define TK_AGGREGATE 196 +#define TK_BUFSIZE 197 +#define TK_LANGUAGE 198 +#define TK_REPLACE 199 +#define TK_STREAM 200 +#define TK_INTO 201 +#define TK_PAUSE 202 +#define TK_RESUME 203 +#define TK_TRIGGER 204 +#define TK_AT_ONCE 205 +#define TK_WINDOW_CLOSE 206 +#define TK_IGNORE 207 +#define TK_EXPIRED 208 +#define TK_FILL_HISTORY 209 +#define TK_UPDATE 210 +#define TK_SUBTABLE 211 +#define TK_UNTREATED 212 +#define TK_KILL 213 +#define TK_CONNECTION 214 +#define TK_TRANSACTION 215 +#define TK_BALANCE 216 +#define TK_VGROUP 217 +#define TK_LEADER 218 +#define TK_MERGE 219 +#define TK_REDISTRIBUTE 220 +#define TK_SPLIT 221 +#define TK_DELETE 222 +#define TK_INSERT 223 +#define TK_NULL 224 +#define TK_NK_QUESTION 225 +#define TK_NK_ARROW 226 +#define TK_ROWTS 227 +#define TK_QSTART 228 +#define TK_QEND 229 +#define TK_QDURATION 230 +#define TK_WSTART 231 +#define TK_WEND 232 +#define TK_WDURATION 233 +#define TK_IROWTS 234 +#define TK_ISFILLED 235 +#define TK_CAST 236 +#define TK_NOW 237 +#define TK_TODAY 238 +#define TK_TIMEZONE 239 +#define TK_CLIENT_VERSION 240 +#define TK_SERVER_VERSION 241 +#define TK_SERVER_STATUS 242 +#define TK_CURRENT_USER 243 +#define TK_CASE 244 +#define TK_WHEN 245 +#define TK_THEN 246 +#define TK_ELSE 247 +#define TK_BETWEEN 248 +#define TK_IS 249 +#define TK_NK_LT 250 +#define TK_NK_GT 251 +#define TK_NK_LE 252 +#define TK_NK_GE 253 +#define TK_NK_NE 254 +#define TK_MATCH 255 +#define TK_NMATCH 256 +#define TK_CONTAINS 257 +#define TK_IN 258 +#define TK_JOIN 259 +#define TK_INNER 260 +#define TK_SELECT 261 +#define TK_NK_HINT 262 +#define TK_DISTINCT 263 +#define TK_WHERE 264 +#define TK_PARTITION 265 +#define TK_BY 266 +#define TK_SESSION 267 +#define TK_STATE_WINDOW 268 +#define TK_EVENT_WINDOW 269 +#define TK_SLIDING 270 +#define TK_FILL 271 +#define TK_VALUE 272 +#define TK_VALUE_F 273 +#define TK_NONE 274 +#define TK_PREV 275 +#define TK_NULL_F 276 +#define TK_LINEAR 277 +#define TK_NEXT 278 +#define TK_HAVING 279 +#define TK_RANGE 280 +#define TK_EVERY 281 +#define TK_ORDER 282 +#define TK_SLIMIT 283 +#define TK_SOFFSET 284 +#define TK_LIMIT 285 +#define TK_OFFSET 286 +#define TK_ASC 287 +#define TK_NULLS 288 +#define TK_ABORT 289 +#define TK_AFTER 290 +#define TK_ATTACH 291 +#define TK_BEFORE 292 +#define TK_BEGIN 293 +#define TK_BITAND 294 +#define TK_BITNOT 295 +#define TK_BITOR 296 +#define TK_BLOCKS 297 +#define TK_CHANGE 298 +#define TK_COMMA 299 +#define TK_CONCAT 300 +#define TK_CONFLICT 301 +#define TK_COPY 302 +#define TK_DEFERRED 303 +#define TK_DELIMITERS 304 +#define TK_DETACH 305 +#define TK_DIVIDE 306 +#define TK_DOT 307 +#define TK_EACH 308 +#define TK_FAIL 309 +#define TK_FILE 310 +#define TK_FOR 311 +#define TK_GLOB 312 +#define TK_ID 313 +#define TK_IMMEDIATE 314 +#define TK_IMPORT 315 +#define TK_INITIALLY 316 +#define TK_INSTEAD 317 +#define TK_ISNULL 318 +#define TK_KEY 319 +#define TK_MODULES 320 +#define TK_NK_BITNOT 321 +#define TK_NK_SEMI 322 +#define TK_NOTNULL 323 +#define TK_OF 324 +#define TK_PLUS 325 +#define TK_PRIVILEGE 326 +#define TK_RAISE 327 +#define TK_RESTRICT 328 +#define TK_ROW 329 +#define TK_SEMI 330 +#define TK_STAR 331 +#define TK_STATEMENT 332 +#define TK_STRICT 333 +#define TK_STRING 334 +#define TK_TIMES 335 +#define TK_VALUES 336 +#define TK_VARIABLE 337 +#define TK_VIEW 338 +#define TK_WAL 339 #define TK_NK_SPACE 600 diff --git a/source/libs/parser/inc/parAst.h b/source/libs/parser/inc/parAst.h index d24bb1db4f..724c4044f7 100644 --- a/source/libs/parser/inc/parAst.h +++ b/source/libs/parser/inc/parAst.h @@ -191,7 +191,8 @@ SNode* createShowDnodeVariablesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SN SNode* createShowVnodesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pDnodeEndpoint); SNode* createShowTableTagsStmt(SAstCreateContext* pCxt, SNode* pTbName, SNode* pDbName, SNodeList* pTags); SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo); -SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, const SToken* pVal); +SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pStmt, SNodeList* pIpRangesNodeList); +SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, void* pAlterInfo); SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName); SNode* createCreateDnodeStmt(SAstCreateContext* pCxt, const SToken* pFqdn, const SToken* pPort); SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, bool force, bool unsafe); diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 2501ae8504..841223510f 100755 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -81,11 +81,31 @@ alter_account_option ::= USERS literal. alter_account_option ::= CONNS literal. { } alter_account_option ::= STATE literal. { } +%type ip_range_list { SNodeList* } +%destructor ip_range_list { nodesDestroyList($$); } +ip_range_list(A) ::= NK_STRING(B). { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); } +ip_range_list(A) ::= ip_range_list(B) NK_COMMA NK_STRING(C). { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)); } + +%type white_list { SNodeList* } +%destructor white_list { nodesDestroyList($$); } +white_list(A) ::= HOST ip_range_list(B). { A = B; } + +%type white_list_opt { SNodeList* } +%destructor white_list_opt { nodesDestroyList($$); } +white_list_opt(A) ::= . { A = NULL; } +white_list_opt(A) ::= white_list(B). { A = B; } + /************************************************ create/alter/drop user **********************************************/ -cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C). { pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C); } +cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C) + white_list_opt(D). { + pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C); + addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, D); + } cmd ::= ALTER USER user_name(A) PASS NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PASSWD, &B); } cmd ::= ALTER USER user_name(A) ENABLE NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_ENABLE, &B); } cmd ::= ALTER USER user_name(A) SYSINFO NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_SYSINFO, &B); } +cmd ::= ALTER USER user_name(A) ADD white_list(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_ADD_WHITE_LIST, B); } +cmd ::= ALTER USER user_name(A) DROP white_list(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_DROP_WHITE_LIST, B); } cmd ::= DROP USER user_name(A). { pCxt->pRootNode = createDropUserStmt(pCxt, &A); } %type sysinfo_opt { int8_t } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index c51b442166..d36b551f94 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1663,7 +1663,21 @@ SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const ST return (SNode*)pStmt; } -SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, const SToken* pVal) { +SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStmt, SNodeList* pIpRangesNodeList) { + if (pIpRangesNodeList == NULL) { + return pCreateUserStmt; + } + SNode* pNode = NULL; + FOREACH(pNode, pIpRangesNodeList) { + char* pStr = NULL; + nodesNodeToString(pNode, false, &pStr, NULL); + printf("%s\n", pStr); + taosMemoryFree(pStr); + } + return pCreateUserStmt; +} + +SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, void* pAlterInfo) { CHECK_PARSER_STATUS(pCxt); if (!checkUserName(pCxt, pUserName)) { return NULL; @@ -1675,6 +1689,7 @@ SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t al switch (alterType) { case TSDB_ALTER_USER_PASSWD: { char password[TSDB_USET_PASSWORD_LEN] = {0}; + SToken* pVal = pAlterInfo; if (!checkPassword(pCxt, pVal, password)) { nodesDestroyNode((SNode*)pStmt); return NULL; @@ -1682,12 +1697,27 @@ SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t al strcpy(pStmt->password, password); break; } - case TSDB_ALTER_USER_ENABLE: + case TSDB_ALTER_USER_ENABLE: { + SToken* pVal = pAlterInfo; pStmt->enable = taosStr2Int8(pVal->z, NULL, 10); break; - case TSDB_ALTER_USER_SYSINFO: + } + case TSDB_ALTER_USER_SYSINFO: { + SToken* pVal = pAlterInfo; pStmt->sysinfo = taosStr2Int8(pVal->z, NULL, 10); break; + } + case TSDB_ALTER_USER_ADD_WHITE_LIST: + case TSDB_ALTER_USER_DROP_WHITE_LIST: { + SNodeList* pIpRangesNodeList = pAlterInfo; + SNode* pNode = NULL; + FOREACH(pNode, pIpRangesNodeList) { + char* pStr = NULL; + nodesNodeToString(pNode, false, &pStr, NULL); + printf("%s\n", pStr); + taosMemoryFree(pStr); + } + } default: break; } diff --git a/source/libs/parser/src/parTokenizer.c b/source/libs/parser/src/parTokenizer.c index 2d3c309610..4e777cf213 100644 --- a/source/libs/parser/src/parTokenizer.c +++ b/source/libs/parser/src/parTokenizer.c @@ -109,6 +109,7 @@ static SKeyword keywordTable[] = { {"GRANTS", TK_GRANTS}, {"GROUP", TK_GROUP}, {"HAVING", TK_HAVING}, + {"HOST", TK_HOST}, {"IF", TK_IF}, {"IGNORE", TK_IGNORE}, {"IMPORT", TK_IMPORT}, diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index a19b986732..e8bbf7213c 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -1,3 +1,5 @@ +/* This file is automatically generated by Lemon from input grammar +** source file "sql.y". */ /* ** 2000-05-29 ** @@ -22,9 +24,8 @@ ** The following is the concatenation of all %include directives from the ** input grammar file: */ -#include -#include /************ Begin %include sections from the grammar ************************/ +#line 11 "sql.y" #include #include @@ -41,12 +42,352 @@ #include "parAst.h" #define YYSTACKDEPTH 0 +#line 46 "sql.c" /**************** End of %include directives **********************************/ -/* These constants specify the various numeric values for terminal symbols -** in a format understandable to "makeheaders". This section is blank unless -** "lemon" is run with the "-m" command-line option. -***************** Begin makeheaders token definitions *************************/ -/**************** End makeheaders token definitions ***************************/ +/* These constants specify the various numeric values for terminal symbols. +***************** Begin token definitions *************************************/ +#ifndef TK_OR +#define TK_OR 1 +#define TK_AND 2 +#define TK_UNION 3 +#define TK_ALL 4 +#define TK_MINUS 5 +#define TK_EXCEPT 6 +#define TK_INTERSECT 7 +#define TK_NK_BITAND 8 +#define TK_NK_BITOR 9 +#define TK_NK_LSHIFT 10 +#define TK_NK_RSHIFT 11 +#define TK_NK_PLUS 12 +#define TK_NK_MINUS 13 +#define TK_NK_STAR 14 +#define TK_NK_SLASH 15 +#define TK_NK_REM 16 +#define TK_NK_CONCAT 17 +#define TK_CREATE 18 +#define TK_ACCOUNT 19 +#define TK_NK_ID 20 +#define TK_PASS 21 +#define TK_NK_STRING 22 +#define TK_ALTER 23 +#define TK_PPS 24 +#define TK_TSERIES 25 +#define TK_STORAGE 26 +#define TK_STREAMS 27 +#define TK_QTIME 28 +#define TK_DBS 29 +#define TK_USERS 30 +#define TK_CONNS 31 +#define TK_STATE 32 +#define TK_NK_COMMA 33 +#define TK_HOST 34 +#define TK_USER 35 +#define TK_ENABLE 36 +#define TK_NK_INTEGER 37 +#define TK_SYSINFO 38 +#define TK_ADD 39 +#define TK_DROP 40 +#define TK_GRANT 41 +#define TK_ON 42 +#define TK_TO 43 +#define TK_REVOKE 44 +#define TK_FROM 45 +#define TK_SUBSCRIBE 46 +#define TK_READ 47 +#define TK_WRITE 48 +#define TK_NK_DOT 49 +#define TK_WITH 50 +#define TK_DNODE 51 +#define TK_PORT 52 +#define TK_DNODES 53 +#define TK_RESTORE 54 +#define TK_NK_IPTOKEN 55 +#define TK_FORCE 56 +#define TK_UNSAFE 57 +#define TK_LOCAL 58 +#define TK_QNODE 59 +#define TK_BNODE 60 +#define TK_SNODE 61 +#define TK_MNODE 62 +#define TK_VNODE 63 +#define TK_DATABASE 64 +#define TK_USE 65 +#define TK_FLUSH 66 +#define TK_TRIM 67 +#define TK_COMPACT 68 +#define TK_IF 69 +#define TK_NOT 70 +#define TK_EXISTS 71 +#define TK_BUFFER 72 +#define TK_CACHEMODEL 73 +#define TK_CACHESIZE 74 +#define TK_COMP 75 +#define TK_DURATION 76 +#define TK_NK_VARIABLE 77 +#define TK_MAXROWS 78 +#define TK_MINROWS 79 +#define TK_KEEP 80 +#define TK_PAGES 81 +#define TK_PAGESIZE 82 +#define TK_TSDB_PAGESIZE 83 +#define TK_PRECISION 84 +#define TK_REPLICA 85 +#define TK_VGROUPS 86 +#define TK_SINGLE_STABLE 87 +#define TK_RETENTIONS 88 +#define TK_SCHEMALESS 89 +#define TK_WAL_LEVEL 90 +#define TK_WAL_FSYNC_PERIOD 91 +#define TK_WAL_RETENTION_PERIOD 92 +#define TK_WAL_RETENTION_SIZE 93 +#define TK_WAL_ROLL_PERIOD 94 +#define TK_WAL_SEGMENT_SIZE 95 +#define TK_STT_TRIGGER 96 +#define TK_TABLE_PREFIX 97 +#define TK_TABLE_SUFFIX 98 +#define TK_NK_COLON 99 +#define TK_MAX_SPEED 100 +#define TK_START 101 +#define TK_TIMESTAMP 102 +#define TK_END 103 +#define TK_TABLE 104 +#define TK_NK_LP 105 +#define TK_NK_RP 106 +#define TK_STABLE 107 +#define TK_COLUMN 108 +#define TK_MODIFY 109 +#define TK_RENAME 110 +#define TK_TAG 111 +#define TK_SET 112 +#define TK_NK_EQ 113 +#define TK_USING 114 +#define TK_TAGS 115 +#define TK_COMMENT 116 +#define TK_BOOL 117 +#define TK_TINYINT 118 +#define TK_SMALLINT 119 +#define TK_INT 120 +#define TK_INTEGER 121 +#define TK_BIGINT 122 +#define TK_FLOAT 123 +#define TK_DOUBLE 124 +#define TK_BINARY 125 +#define TK_NCHAR 126 +#define TK_UNSIGNED 127 +#define TK_JSON 128 +#define TK_VARCHAR 129 +#define TK_MEDIUMBLOB 130 +#define TK_BLOB 131 +#define TK_VARBINARY 132 +#define TK_GEOMETRY 133 +#define TK_DECIMAL 134 +#define TK_MAX_DELAY 135 +#define TK_WATERMARK 136 +#define TK_ROLLUP 137 +#define TK_TTL 138 +#define TK_SMA 139 +#define TK_DELETE_MARK 140 +#define TK_FIRST 141 +#define TK_LAST 142 +#define TK_SHOW 143 +#define TK_PRIVILEGES 144 +#define TK_DATABASES 145 +#define TK_TABLES 146 +#define TK_STABLES 147 +#define TK_MNODES 148 +#define TK_QNODES 149 +#define TK_FUNCTIONS 150 +#define TK_INDEXES 151 +#define TK_ACCOUNTS 152 +#define TK_APPS 153 +#define TK_CONNECTIONS 154 +#define TK_LICENCES 155 +#define TK_GRANTS 156 +#define TK_QUERIES 157 +#define TK_SCORES 158 +#define TK_TOPICS 159 +#define TK_VARIABLES 160 +#define TK_CLUSTER 161 +#define TK_BNODES 162 +#define TK_SNODES 163 +#define TK_TRANSACTIONS 164 +#define TK_DISTRIBUTED 165 +#define TK_CONSUMERS 166 +#define TK_SUBSCRIPTIONS 167 +#define TK_VNODES 168 +#define TK_ALIVE 169 +#define TK_LIKE 170 +#define TK_TBNAME 171 +#define TK_QTAGS 172 +#define TK_AS 173 +#define TK_INDEX 174 +#define TK_FUNCTION 175 +#define TK_INTERVAL 176 +#define TK_COUNT 177 +#define TK_LAST_ROW 178 +#define TK_META 179 +#define TK_ONLY 180 +#define TK_TOPIC 181 +#define TK_CONSUMER 182 +#define TK_GROUP 183 +#define TK_DESC 184 +#define TK_DESCRIBE 185 +#define TK_RESET 186 +#define TK_QUERY 187 +#define TK_CACHE 188 +#define TK_EXPLAIN 189 +#define TK_ANALYZE 190 +#define TK_VERBOSE 191 +#define TK_NK_BOOL 192 +#define TK_RATIO 193 +#define TK_NK_FLOAT 194 +#define TK_OUTPUTTYPE 195 +#define TK_AGGREGATE 196 +#define TK_BUFSIZE 197 +#define TK_LANGUAGE 198 +#define TK_REPLACE 199 +#define TK_STREAM 200 +#define TK_INTO 201 +#define TK_PAUSE 202 +#define TK_RESUME 203 +#define TK_TRIGGER 204 +#define TK_AT_ONCE 205 +#define TK_WINDOW_CLOSE 206 +#define TK_IGNORE 207 +#define TK_EXPIRED 208 +#define TK_FILL_HISTORY 209 +#define TK_UPDATE 210 +#define TK_SUBTABLE 211 +#define TK_UNTREATED 212 +#define TK_KILL 213 +#define TK_CONNECTION 214 +#define TK_TRANSACTION 215 +#define TK_BALANCE 216 +#define TK_VGROUP 217 +#define TK_LEADER 218 +#define TK_MERGE 219 +#define TK_REDISTRIBUTE 220 +#define TK_SPLIT 221 +#define TK_DELETE 222 +#define TK_INSERT 223 +#define TK_NULL 224 +#define TK_NK_QUESTION 225 +#define TK_NK_ARROW 226 +#define TK_ROWTS 227 +#define TK_QSTART 228 +#define TK_QEND 229 +#define TK_QDURATION 230 +#define TK_WSTART 231 +#define TK_WEND 232 +#define TK_WDURATION 233 +#define TK_IROWTS 234 +#define TK_ISFILLED 235 +#define TK_CAST 236 +#define TK_NOW 237 +#define TK_TODAY 238 +#define TK_TIMEZONE 239 +#define TK_CLIENT_VERSION 240 +#define TK_SERVER_VERSION 241 +#define TK_SERVER_STATUS 242 +#define TK_CURRENT_USER 243 +#define TK_CASE 244 +#define TK_WHEN 245 +#define TK_THEN 246 +#define TK_ELSE 247 +#define TK_BETWEEN 248 +#define TK_IS 249 +#define TK_NK_LT 250 +#define TK_NK_GT 251 +#define TK_NK_LE 252 +#define TK_NK_GE 253 +#define TK_NK_NE 254 +#define TK_MATCH 255 +#define TK_NMATCH 256 +#define TK_CONTAINS 257 +#define TK_IN 258 +#define TK_JOIN 259 +#define TK_INNER 260 +#define TK_SELECT 261 +#define TK_NK_HINT 262 +#define TK_DISTINCT 263 +#define TK_WHERE 264 +#define TK_PARTITION 265 +#define TK_BY 266 +#define TK_SESSION 267 +#define TK_STATE_WINDOW 268 +#define TK_EVENT_WINDOW 269 +#define TK_SLIDING 270 +#define TK_FILL 271 +#define TK_VALUE 272 +#define TK_VALUE_F 273 +#define TK_NONE 274 +#define TK_PREV 275 +#define TK_NULL_F 276 +#define TK_LINEAR 277 +#define TK_NEXT 278 +#define TK_HAVING 279 +#define TK_RANGE 280 +#define TK_EVERY 281 +#define TK_ORDER 282 +#define TK_SLIMIT 283 +#define TK_SOFFSET 284 +#define TK_LIMIT 285 +#define TK_OFFSET 286 +#define TK_ASC 287 +#define TK_NULLS 288 +#define TK_ABORT 289 +#define TK_AFTER 290 +#define TK_ATTACH 291 +#define TK_BEFORE 292 +#define TK_BEGIN 293 +#define TK_BITAND 294 +#define TK_BITNOT 295 +#define TK_BITOR 296 +#define TK_BLOCKS 297 +#define TK_CHANGE 298 +#define TK_COMMA 299 +#define TK_CONCAT 300 +#define TK_CONFLICT 301 +#define TK_COPY 302 +#define TK_DEFERRED 303 +#define TK_DELIMITERS 304 +#define TK_DETACH 305 +#define TK_DIVIDE 306 +#define TK_DOT 307 +#define TK_EACH 308 +#define TK_FAIL 309 +#define TK_FILE 310 +#define TK_FOR 311 +#define TK_GLOB 312 +#define TK_ID 313 +#define TK_IMMEDIATE 314 +#define TK_IMPORT 315 +#define TK_INITIALLY 316 +#define TK_INSTEAD 317 +#define TK_ISNULL 318 +#define TK_KEY 319 +#define TK_MODULES 320 +#define TK_NK_BITNOT 321 +#define TK_NK_SEMI 322 +#define TK_NOTNULL 323 +#define TK_OF 324 +#define TK_PLUS 325 +#define TK_PRIVILEGE 326 +#define TK_RAISE 327 +#define TK_RESTRICT 328 +#define TK_ROW 329 +#define TK_SEMI 330 +#define TK_STAR 331 +#define TK_STATEMENT 332 +#define TK_STRICT 333 +#define TK_STRING 334 +#define TK_TIMES 335 +#define TK_VALUES 336 +#define TK_VARIABLE 337 +#define TK_VIEW 338 +#define TK_WAL 339 +#endif +/**************** End token definitions ***************************************/ /* The next sections is a series of control #defines. ** various aspects of the generated parser. @@ -104,27 +445,27 @@ #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int -#define YYNOCODE 490 +#define YYNOCODE 494 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE SToken typedef union { int yyinit; ParseTOKENTYPE yy0; - SAlterOption yy25; - SDataType yy84; - SToken yy169; - EFillMode yy214; - int8_t yy243; - int32_t yy480; - EOrder yy498; - EOperatorType yy520; - STokenPair yy637; - SNodeList* yy824; - EJoinType yy932; - int64_t yy949; - SNode* yy952; - bool yy957; - ENullOrder yy977; + SNode* yy28; + SDataType yy32; + EJoinType yy152; + SNodeList* yy236; + EFillMode yy322; + SAlterOption yy481; + int64_t yy701; + EOrder yy734; + bool yy793; + STokenPair yy833; + int8_t yy847; + SToken yy889; + EOperatorType yy896; + ENullOrder yy945; + int32_t yy956; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -140,18 +481,18 @@ typedef union { #define ParseCTX_FETCH #define ParseCTX_STORE #define YYFALLBACK 1 -#define YYNSTATE 801 -#define YYNRULE 605 -#define YYNRULE_WITH_ACTION 605 -#define YYNTOKEN 339 -#define YY_MAX_SHIFT 800 -#define YY_MIN_SHIFTREDUCE 1183 -#define YY_MAX_SHIFTREDUCE 1787 -#define YY_ERROR_ACTION 1788 -#define YY_ACCEPT_ACTION 1789 -#define YY_NO_ACTION 1790 -#define YY_MIN_REDUCE 1791 -#define YY_MAX_REDUCE 2395 +#define YYNSTATE 809 +#define YYNRULE 612 +#define YYNRULE_WITH_ACTION 612 +#define YYNTOKEN 340 +#define YY_MAX_SHIFT 808 +#define YY_MIN_SHIFTREDUCE 1194 +#define YY_MAX_SHIFTREDUCE 1805 +#define YY_ERROR_ACTION 1806 +#define YY_ACCEPT_ACTION 1807 +#define YY_NO_ACTION 1808 +#define YY_MIN_REDUCE 1809 +#define YY_MAX_REDUCE 2420 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -218,843 +559,827 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2957) +#define YY_ACTTAB_COUNT (2878) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 736, 2202, 2180, 2091, 738, 689, 1968, 2013, 1216, 38, - /* 10 */ 304, 669, 48, 46, 1714, 392, 2188, 1946, 2088, 676, - /* 20 */ 399, 255, 1559, 41, 40, 135, 2184, 47, 45, 44, - /* 30 */ 43, 42, 573, 1640, 2022, 1557, 689, 1968, 41, 40, - /* 40 */ 2220, 2163, 47, 45, 44, 43, 42, 1218, 2021, 1221, - /* 50 */ 1222, 2170, 1241, 705, 1240, 1584, 135, 2180, 2180, 666, - /* 60 */ 144, 149, 1635, 578, 2186, 396, 533, 140, 19, 534, - /* 70 */ 1827, 1959, 2189, 451, 699, 1565, 541, 666, 144, 534, - /* 80 */ 1827, 2184, 2184, 359, 2022, 1242, 688, 2201, 629, 2237, - /* 90 */ 380, 2366, 112, 2203, 709, 2205, 2206, 704, 2020, 699, - /* 100 */ 797, 689, 1968, 15, 185, 2135, 2290, 2091, 2372, 188, - /* 110 */ 395, 2286, 2153, 2367, 655, 181, 48, 46, 346, 2186, - /* 120 */ 2186, 193, 2089, 676, 399, 190, 1559, 1669, 1375, 699, - /* 130 */ 699, 1584, 221, 2320, 367, 2074, 536, 1640, 1834, 1557, - /* 140 */ 1642, 1643, 456, 2070, 1366, 734, 733, 732, 1370, 731, - /* 150 */ 1372, 1373, 730, 727, 250, 1381, 724, 1383, 1384, 721, - /* 160 */ 718, 715, 668, 186, 2298, 2299, 1635, 142, 2303, 51, - /* 170 */ 1615, 1625, 19, 169, 223, 1803, 1641, 1644, 536, 1565, - /* 180 */ 1834, 282, 2298, 665, 1670, 136, 664, 1585, 2366, 202, - /* 190 */ 688, 1560, 125, 1558, 62, 124, 123, 122, 121, 120, - /* 200 */ 119, 118, 117, 116, 797, 653, 188, 15, 2202, 530, - /* 210 */ 2367, 655, 52, 1784, 62, 666, 144, 528, 706, 674, - /* 220 */ 524, 520, 249, 1563, 1564, 1792, 1614, 1617, 1618, 1619, - /* 230 */ 1620, 1621, 1622, 1623, 1624, 701, 697, 1633, 1634, 1636, - /* 240 */ 1637, 1638, 1639, 2, 1642, 1643, 125, 2220, 550, 124, - /* 250 */ 123, 122, 121, 120, 119, 118, 117, 116, 2170, 1791, - /* 260 */ 705, 66, 37, 397, 1664, 1665, 1666, 1667, 1668, 1672, - /* 270 */ 1673, 1674, 1675, 404, 1615, 1625, 2015, 2017, 689, 1968, - /* 280 */ 1641, 1644, 649, 134, 133, 132, 131, 130, 129, 128, - /* 290 */ 127, 126, 1530, 1531, 2201, 1560, 2237, 1558, 56, 112, - /* 300 */ 2203, 709, 2205, 2206, 704, 644, 699, 1410, 1411, 147, - /* 310 */ 1586, 155, 2261, 2290, 746, 2202, 1783, 395, 2286, 187, - /* 320 */ 2298, 2299, 1584, 142, 2303, 669, 286, 1563, 1564, 428, - /* 330 */ 1614, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 701, - /* 340 */ 697, 1633, 1634, 1636, 1637, 1638, 1639, 2, 12, 48, - /* 350 */ 46, 286, 2371, 402, 2220, 2366, 168, 399, 372, 1559, - /* 360 */ 62, 1970, 163, 184, 1909, 2170, 1814, 705, 381, 286, - /* 370 */ 1640, 286, 1557, 2370, 675, 2009, 2020, 2367, 2369, 41, - /* 380 */ 40, 496, 614, 47, 45, 44, 43, 42, 462, 2070, - /* 390 */ 1565, 1587, 666, 144, 2202, 12, 650, 645, 638, 1635, - /* 400 */ 688, 2201, 737, 2237, 703, 19, 112, 2203, 709, 2205, - /* 410 */ 2206, 704, 1565, 699, 689, 1968, 2170, 1813, 185, 756, - /* 420 */ 2290, 689, 1968, 596, 395, 2286, 548, 373, 2084, 371, - /* 430 */ 370, 2305, 575, 2220, 449, 205, 577, 797, 606, 109, - /* 440 */ 15, 450, 212, 211, 2170, 2022, 705, 2321, 1870, 689, - /* 450 */ 1968, 389, 246, 48, 46, 1645, 145, 2302, 576, 2020, - /* 460 */ 2202, 399, 284, 1559, 1960, 495, 648, 2170, 599, 464, - /* 470 */ 706, 1318, 1468, 1469, 1640, 593, 1557, 1642, 1643, 1812, - /* 480 */ 2201, 245, 2237, 51, 1811, 340, 2203, 709, 2205, 2206, - /* 490 */ 704, 702, 699, 690, 2255, 2220, 189, 2298, 2299, 2220, - /* 500 */ 142, 2303, 181, 1635, 12, 433, 10, 1615, 1625, 538, - /* 510 */ 2170, 1320, 705, 1641, 1644, 535, 1565, 286, 591, 590, - /* 520 */ 589, 70, 2075, 2371, 69, 581, 141, 585, 1560, 2170, - /* 530 */ 1558, 584, 435, 431, 2170, 675, 583, 588, 375, 374, - /* 540 */ 1586, 797, 582, 262, 49, 1810, 2201, 2202, 2237, 647, - /* 550 */ 2053, 170, 2203, 709, 2205, 2206, 704, 706, 699, 1836, - /* 560 */ 1563, 1564, 90, 1614, 1617, 1618, 1619, 1620, 1621, 1622, - /* 570 */ 1623, 1624, 701, 697, 1633, 1634, 1636, 1637, 1638, 1639, - /* 580 */ 2, 1642, 1643, 591, 590, 589, 2220, 673, 1964, 2084, - /* 590 */ 581, 141, 585, 630, 2331, 2170, 584, 2170, 691, 705, - /* 600 */ 2262, 583, 588, 375, 374, 654, 700, 582, 2366, 689, - /* 610 */ 1968, 1615, 1625, 2022, 408, 407, 628, 1641, 1644, 365, - /* 620 */ 2016, 2017, 2022, 1789, 1777, 653, 188, 2020, 394, 479, - /* 630 */ 2367, 655, 1560, 2201, 1558, 2237, 2020, 1566, 112, 2203, - /* 640 */ 709, 2205, 2206, 704, 2370, 699, 689, 1968, 295, 296, - /* 650 */ 2386, 675, 2290, 294, 41, 40, 395, 2286, 47, 45, - /* 660 */ 44, 43, 42, 258, 1563, 1564, 480, 1614, 1617, 1618, - /* 670 */ 1619, 1620, 1621, 1622, 1623, 1624, 701, 697, 1633, 1634, - /* 680 */ 1636, 1637, 1638, 1639, 2, 48, 46, 689, 1968, 2202, - /* 690 */ 30, 654, 284, 399, 2366, 1559, 414, 1585, 1944, 706, - /* 700 */ 693, 413, 2262, 684, 1742, 2084, 1640, 549, 1557, 474, - /* 710 */ 2202, 653, 188, 103, 489, 2070, 2367, 655, 473, 90, - /* 720 */ 706, 1945, 62, 2022, 689, 1968, 41, 40, 2220, 403, - /* 730 */ 47, 45, 44, 43, 42, 1635, 369, 2020, 1961, 2170, - /* 740 */ 60, 705, 1809, 629, 1965, 1963, 2366, 626, 1565, 2220, - /* 750 */ 1754, 207, 641, 640, 1740, 1741, 1743, 1744, 1745, 605, - /* 760 */ 2170, 210, 705, 2372, 188, 746, 689, 1968, 2367, 655, - /* 770 */ 393, 577, 603, 797, 601, 2201, 49, 2237, 1970, 166, - /* 780 */ 171, 2203, 709, 2205, 2206, 704, 251, 699, 1808, 48, - /* 790 */ 46, 86, 2170, 576, 85, 1569, 2201, 399, 2237, 1559, - /* 800 */ 1910, 113, 2203, 709, 2205, 2206, 704, 1804, 699, 443, - /* 810 */ 1640, 442, 1557, 1642, 1643, 2290, 2305, 1485, 1486, 2289, - /* 820 */ 2286, 445, 1753, 41, 40, 2305, 444, 47, 45, 44, - /* 830 */ 43, 42, 2334, 656, 2387, 2202, 744, 1943, 2170, 1635, - /* 840 */ 1224, 441, 2301, 1615, 1625, 706, 1583, 689, 1968, 1641, - /* 850 */ 1644, 2300, 1565, 1484, 1487, 160, 159, 741, 740, 739, - /* 860 */ 157, 402, 689, 1968, 1560, 279, 1558, 672, 629, 1970, - /* 870 */ 166, 2366, 689, 1968, 2220, 689, 1968, 797, 146, 286, - /* 880 */ 15, 2261, 259, 742, 1718, 2170, 2013, 705, 2372, 188, - /* 890 */ 1584, 642, 299, 2367, 655, 686, 1563, 1564, 2063, 1614, - /* 900 */ 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 701, 697, - /* 910 */ 1633, 1634, 1636, 1637, 1638, 1639, 2, 1642, 1643, 1730, - /* 920 */ 139, 2201, 657, 2237, 587, 586, 113, 2203, 709, 2205, - /* 930 */ 2206, 704, 743, 699, 405, 2013, 744, 454, 14, 13, - /* 940 */ 2290, 2371, 1970, 166, 2366, 2287, 1807, 1615, 1625, 689, - /* 950 */ 1968, 1329, 744, 1641, 1644, 160, 159, 741, 740, 739, - /* 960 */ 157, 1711, 2370, 237, 1328, 2191, 2367, 2368, 1560, 687, - /* 970 */ 1558, 160, 159, 741, 740, 739, 157, 689, 1968, 173, - /* 980 */ 47, 45, 44, 43, 42, 1650, 1806, 567, 563, 559, - /* 990 */ 555, 1584, 236, 1241, 273, 1240, 2170, 305, 1244, 1245, - /* 1000 */ 1563, 1564, 1867, 1614, 1617, 1618, 1619, 1620, 1621, 1622, - /* 1010 */ 1623, 1624, 701, 697, 1633, 1634, 1636, 1637, 1638, 1639, - /* 1020 */ 2, 2193, 350, 167, 1582, 382, 1242, 1805, 325, 505, - /* 1030 */ 318, 487, 91, 1999, 503, 234, 2170, 502, 34, 1587, - /* 1040 */ 1616, 1683, 322, 73, 41, 40, 72, 9, 47, 45, - /* 1050 */ 44, 43, 42, 470, 54, 504, 3, 347, 41, 40, - /* 1060 */ 472, 1908, 47, 45, 44, 43, 42, 2164, 219, 515, - /* 1070 */ 513, 510, 774, 773, 772, 771, 411, 2170, 770, 769, - /* 1080 */ 148, 764, 763, 762, 761, 760, 759, 758, 162, 754, - /* 1090 */ 753, 752, 410, 409, 749, 748, 747, 176, 175, 44, - /* 1100 */ 43, 42, 757, 233, 227, 1930, 368, 1587, 62, 36, - /* 1110 */ 232, 546, 689, 1968, 629, 41, 40, 2366, 458, 47, - /* 1120 */ 45, 44, 43, 42, 1671, 1802, 569, 568, 83, 225, - /* 1130 */ 137, 1559, 406, 1333, 2372, 188, 1584, 1801, 658, 2367, - /* 1140 */ 655, 1616, 571, 570, 1557, 1800, 1332, 111, 500, 1799, - /* 1150 */ 661, 494, 493, 492, 491, 486, 485, 484, 483, 482, - /* 1160 */ 478, 477, 476, 475, 349, 467, 466, 465, 612, 460, - /* 1170 */ 459, 366, 41, 40, 579, 2170, 47, 45, 44, 43, - /* 1180 */ 42, 248, 2202, 74, 1565, 247, 1568, 2170, 81, 80, - /* 1190 */ 448, 203, 706, 200, 2328, 2170, 1316, 1798, 1797, 2170, - /* 1200 */ 1796, 1795, 35, 768, 766, 242, 440, 438, 240, 797, - /* 1210 */ 1794, 507, 1676, 1221, 1222, 629, 670, 348, 2366, 1710, - /* 1220 */ 429, 2220, 165, 427, 423, 419, 416, 441, 1957, 166, - /* 1230 */ 1953, 166, 2170, 84, 705, 2372, 188, 1955, 166, 158, - /* 1240 */ 2367, 655, 580, 2202, 1951, 166, 93, 2170, 2170, 354, - /* 1250 */ 2170, 2170, 379, 706, 607, 2341, 1971, 166, 2156, 261, - /* 1260 */ 2170, 2310, 1703, 629, 1314, 286, 2366, 1703, 2201, 2221, - /* 1270 */ 2237, 260, 696, 112, 2203, 709, 2205, 2206, 704, 609, - /* 1280 */ 699, 608, 2220, 2372, 188, 2386, 1616, 2290, 2367, 655, - /* 1290 */ 1854, 395, 2286, 2170, 1845, 705, 1843, 158, 151, 55, - /* 1300 */ 1560, 150, 1558, 244, 158, 153, 243, 421, 152, 50, - /* 1310 */ 50, 2202, 592, 266, 94, 158, 594, 1567, 597, 1786, - /* 1320 */ 1787, 706, 50, 636, 1907, 292, 1275, 71, 156, 2201, - /* 1330 */ 158, 2237, 1563, 1564, 112, 2203, 709, 2205, 2206, 704, - /* 1340 */ 412, 699, 2079, 1828, 1571, 1837, 2386, 1833, 2290, 2010, - /* 1350 */ 2220, 64, 395, 2286, 14, 13, 2324, 1525, 50, 50, - /* 1360 */ 667, 2170, 281, 705, 1528, 713, 1276, 750, 156, 1739, - /* 1370 */ 1738, 108, 158, 268, 2202, 671, 138, 659, 156, 751, - /* 1380 */ 278, 105, 1482, 5, 706, 297, 2359, 681, 301, 1294, - /* 1390 */ 1359, 662, 415, 1, 363, 792, 420, 2201, 1590, 2237, - /* 1400 */ 2202, 1292, 112, 2203, 709, 2205, 2206, 704, 437, 699, - /* 1410 */ 706, 1677, 2309, 2220, 2386, 195, 2290, 436, 1626, 317, - /* 1420 */ 395, 2286, 196, 439, 2170, 1388, 705, 1661, 1392, 1506, - /* 1430 */ 198, 312, 1399, 455, 1583, 2202, 1397, 209, 161, 2220, - /* 1440 */ 457, 1587, 2080, 461, 463, 706, 498, 1582, 468, 488, - /* 1450 */ 2170, 481, 705, 2072, 490, 506, 497, 499, 508, 509, - /* 1460 */ 2201, 214, 2237, 511, 213, 112, 2203, 709, 2205, 2206, - /* 1470 */ 704, 1588, 699, 216, 2220, 1570, 512, 2386, 514, 2290, - /* 1480 */ 516, 531, 4, 395, 2286, 2170, 2201, 705, 2237, 532, - /* 1490 */ 539, 112, 2203, 709, 2205, 2206, 704, 540, 699, 542, - /* 1500 */ 224, 408, 407, 2386, 2202, 2290, 1585, 543, 226, 395, - /* 1510 */ 2286, 1573, 1589, 544, 706, 1591, 229, 545, 547, 231, - /* 1520 */ 551, 2201, 1640, 2237, 1566, 572, 112, 2203, 709, 2205, - /* 1530 */ 2206, 704, 2202, 699, 88, 89, 235, 114, 2265, 574, - /* 1540 */ 2290, 353, 706, 2220, 395, 2286, 2144, 1958, 239, 2141, - /* 1550 */ 611, 1635, 1954, 241, 2170, 2140, 705, 613, 1956, 1952, - /* 1560 */ 92, 313, 154, 252, 1565, 617, 618, 2202, 616, 1513, - /* 1570 */ 254, 2220, 256, 624, 621, 2325, 633, 706, 643, 679, - /* 1580 */ 639, 385, 2170, 623, 705, 2335, 646, 2340, 2339, 695, - /* 1590 */ 2201, 8, 2237, 652, 264, 112, 2203, 709, 2205, 2206, - /* 1600 */ 704, 622, 699, 2312, 272, 174, 2220, 2263, 267, 2290, - /* 1610 */ 634, 274, 632, 395, 2286, 275, 631, 2170, 2201, 705, - /* 1620 */ 2237, 277, 276, 112, 2203, 709, 2205, 2206, 704, 1703, - /* 1630 */ 699, 386, 2389, 663, 280, 692, 2365, 2290, 1586, 143, - /* 1640 */ 660, 395, 2286, 1708, 2306, 1706, 178, 287, 1592, 191, - /* 1650 */ 98, 2085, 314, 2201, 2202, 2237, 285, 315, 113, 2203, - /* 1660 */ 709, 2205, 2206, 704, 706, 699, 677, 678, 2099, 100, - /* 1670 */ 682, 2098, 2290, 61, 683, 316, 694, 2286, 102, 1969, - /* 1680 */ 1574, 2271, 1569, 104, 2202, 711, 1931, 2097, 319, 391, - /* 1690 */ 2014, 793, 796, 2220, 706, 794, 308, 328, 321, 342, - /* 1700 */ 332, 53, 323, 343, 2170, 2162, 705, 2161, 355, 2160, - /* 1710 */ 356, 78, 1577, 1579, 2157, 417, 418, 1550, 1551, 194, - /* 1720 */ 422, 2155, 424, 2220, 425, 697, 1633, 1634, 1636, 1637, - /* 1730 */ 1638, 1639, 426, 2154, 2170, 364, 705, 2152, 430, 2151, - /* 1740 */ 707, 432, 2237, 434, 1541, 113, 2203, 709, 2205, 2206, - /* 1750 */ 704, 2150, 699, 2131, 197, 2202, 2130, 199, 1509, 2290, - /* 1760 */ 79, 2112, 1508, 358, 2286, 706, 2111, 2110, 446, 447, - /* 1770 */ 2201, 2109, 2237, 2108, 1459, 170, 2203, 709, 2205, 2206, - /* 1780 */ 704, 2062, 699, 452, 453, 2059, 2058, 201, 82, 2057, - /* 1790 */ 2056, 2061, 204, 2060, 2220, 2055, 2054, 2052, 383, 2051, - /* 1800 */ 2050, 206, 2049, 469, 471, 2170, 2065, 705, 2048, 2047, - /* 1810 */ 2046, 2045, 2044, 2202, 2043, 2042, 2041, 2040, 2332, 2039, - /* 1820 */ 2038, 2037, 2036, 706, 2035, 2034, 208, 2202, 2033, 87, - /* 1830 */ 2032, 2031, 2030, 2064, 2029, 2028, 2027, 706, 2026, 2025, - /* 1840 */ 1461, 2201, 501, 2237, 2202, 2024, 341, 2203, 709, 2205, - /* 1850 */ 2206, 704, 2220, 699, 706, 2023, 384, 230, 2106, 1330, - /* 1860 */ 1873, 351, 1334, 2170, 1326, 705, 2220, 215, 1872, 217, - /* 1870 */ 1871, 352, 1869, 1866, 1865, 1858, 517, 2170, 1847, 705, - /* 1880 */ 1823, 1223, 521, 2220, 525, 519, 1822, 523, 218, 527, - /* 1890 */ 2129, 529, 518, 522, 2170, 220, 705, 2119, 182, 2201, - /* 1900 */ 526, 2237, 76, 77, 341, 2203, 709, 2205, 2206, 704, - /* 1910 */ 2107, 699, 2190, 2201, 2202, 2237, 183, 222, 334, 2203, - /* 1920 */ 709, 2205, 2206, 704, 706, 699, 537, 228, 2083, 1947, - /* 1930 */ 2201, 1268, 2237, 2202, 1868, 171, 2203, 709, 2205, 2206, - /* 1940 */ 704, 1864, 699, 703, 552, 553, 554, 1862, 556, 2202, - /* 1950 */ 557, 558, 1860, 2220, 560, 561, 562, 390, 1857, 706, - /* 1960 */ 564, 1842, 566, 651, 2170, 565, 705, 1840, 1841, 1839, - /* 1970 */ 1819, 1949, 2220, 63, 1404, 1403, 238, 1948, 1317, 1315, - /* 1980 */ 1313, 1312, 765, 2170, 1311, 705, 1310, 1304, 2220, 2388, - /* 1990 */ 1309, 1306, 398, 1855, 767, 1305, 376, 1303, 1846, 2170, - /* 2000 */ 2201, 705, 2237, 377, 1844, 341, 2203, 709, 2205, 2206, - /* 2010 */ 704, 378, 699, 598, 595, 1818, 1817, 600, 602, 2201, - /* 2020 */ 2202, 2237, 1816, 604, 340, 2203, 709, 2205, 2206, 704, - /* 2030 */ 706, 699, 615, 2256, 115, 2201, 1539, 2237, 1535, 29, - /* 2040 */ 341, 2203, 709, 2205, 2206, 704, 1537, 699, 1534, 2128, - /* 2050 */ 800, 67, 1515, 57, 1517, 2202, 2118, 1519, 619, 2220, - /* 2060 */ 2105, 620, 2104, 400, 311, 706, 257, 1494, 2371, 625, - /* 2070 */ 2170, 1493, 705, 20, 6, 31, 164, 635, 627, 1756, - /* 2080 */ 180, 21, 263, 7, 637, 2202, 22, 172, 790, 786, - /* 2090 */ 782, 778, 17, 309, 2220, 706, 265, 270, 1737, 269, - /* 2100 */ 32, 271, 2191, 1729, 1776, 2170, 2201, 705, 2237, 95, - /* 2110 */ 33, 341, 2203, 709, 2205, 2206, 704, 23, 699, 65, - /* 2120 */ 24, 1771, 2202, 1777, 2220, 1770, 387, 1775, 1774, 388, - /* 2130 */ 283, 1700, 706, 110, 1699, 2170, 302, 705, 2103, 59, - /* 2140 */ 2082, 610, 58, 2237, 177, 290, 336, 2203, 709, 2205, - /* 2150 */ 2206, 704, 18, 699, 96, 25, 97, 2081, 99, 300, - /* 2160 */ 293, 2220, 291, 1735, 298, 680, 68, 101, 303, 685, - /* 2170 */ 26, 2201, 2170, 2237, 705, 1652, 326, 2203, 709, 2205, - /* 2180 */ 2206, 704, 105, 699, 2202, 11, 1651, 13, 1575, 1662, - /* 2190 */ 2240, 179, 1630, 1628, 706, 192, 710, 1607, 712, 2202, - /* 2200 */ 1627, 1380, 698, 39, 289, 16, 27, 28, 2201, 706, - /* 2210 */ 2237, 288, 1599, 324, 2203, 709, 2205, 2206, 704, 1389, - /* 2220 */ 699, 401, 1386, 2220, 716, 714, 719, 708, 717, 722, - /* 2230 */ 253, 1385, 720, 723, 2170, 1382, 705, 1376, 2220, 725, - /* 2240 */ 1374, 728, 726, 1365, 729, 306, 1379, 1398, 106, 2170, - /* 2250 */ 2202, 705, 107, 75, 1378, 1394, 1266, 735, 1377, 1298, - /* 2260 */ 706, 745, 1297, 1296, 2202, 1295, 1293, 1291, 755, 1290, - /* 2270 */ 2201, 1289, 2237, 1324, 706, 327, 2203, 709, 2205, 2206, - /* 2280 */ 704, 307, 699, 1287, 1286, 2201, 1285, 2237, 1284, 2220, - /* 2290 */ 333, 2203, 709, 2205, 2206, 704, 1863, 699, 1283, 1282, - /* 2300 */ 2170, 1321, 705, 2220, 1281, 1319, 1278, 1277, 1274, 1273, - /* 2310 */ 1272, 1271, 775, 1861, 2170, 2202, 705, 776, 777, 779, - /* 2320 */ 781, 1859, 783, 1856, 785, 706, 787, 780, 789, 784, - /* 2330 */ 1838, 788, 791, 1213, 1815, 795, 2201, 310, 2237, 1561, - /* 2340 */ 320, 337, 2203, 709, 2205, 2206, 704, 798, 699, 799, - /* 2350 */ 2201, 1790, 2237, 1790, 2220, 329, 2203, 709, 2205, 2206, - /* 2360 */ 704, 1790, 699, 1790, 1790, 2170, 1790, 705, 1790, 1790, - /* 2370 */ 1790, 1790, 1790, 1790, 1790, 2202, 1790, 1790, 1790, 1790, - /* 2380 */ 1790, 1790, 1790, 1790, 1790, 706, 1790, 1790, 1790, 1790, - /* 2390 */ 2202, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2400 */ 706, 2201, 1790, 2237, 1790, 1790, 338, 2203, 709, 2205, - /* 2410 */ 2206, 704, 1790, 699, 2220, 1790, 1790, 1790, 1790, 1790, - /* 2420 */ 1790, 1790, 1790, 1790, 1790, 2170, 1790, 705, 1790, 2220, - /* 2430 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2440 */ 2170, 1790, 705, 1790, 1790, 1790, 1790, 1790, 2202, 1790, - /* 2450 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 706, 1790, - /* 2460 */ 1790, 2201, 1790, 2237, 1790, 2202, 330, 2203, 709, 2205, - /* 2470 */ 2206, 704, 1790, 699, 1790, 706, 2201, 1790, 2237, 2202, - /* 2480 */ 1790, 339, 2203, 709, 2205, 2206, 704, 2220, 699, 706, - /* 2490 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 2170, 1790, - /* 2500 */ 705, 1790, 1790, 1790, 2220, 1790, 1790, 1790, 1790, 1790, - /* 2510 */ 1790, 1790, 1790, 1790, 1790, 2170, 2202, 705, 2220, 1790, - /* 2520 */ 1790, 1790, 1790, 1790, 1790, 1790, 706, 1790, 1790, 2170, - /* 2530 */ 1790, 705, 1790, 1790, 2201, 1790, 2237, 2202, 1790, 331, - /* 2540 */ 2203, 709, 2205, 2206, 704, 1790, 699, 706, 1790, 1790, - /* 2550 */ 1790, 2201, 1790, 2237, 1790, 2220, 344, 2203, 709, 2205, - /* 2560 */ 2206, 704, 1790, 699, 1790, 2201, 2170, 2237, 705, 1790, - /* 2570 */ 345, 2203, 709, 2205, 2206, 704, 2220, 699, 1790, 1790, - /* 2580 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 2170, 1790, 705, - /* 2590 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2600 */ 1790, 1790, 2201, 2202, 2237, 1790, 1790, 2214, 2203, 709, - /* 2610 */ 2205, 2206, 704, 706, 699, 1790, 1790, 2202, 1790, 1790, - /* 2620 */ 1790, 1790, 1790, 2201, 1790, 2237, 1790, 706, 2213, 2203, - /* 2630 */ 709, 2205, 2206, 704, 2202, 699, 1790, 1790, 1790, 1790, - /* 2640 */ 1790, 1790, 2220, 1790, 706, 1790, 1790, 1790, 1790, 1790, - /* 2650 */ 1790, 1790, 1790, 2170, 1790, 705, 2220, 1790, 1790, 1790, - /* 2660 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 2170, 1790, 705, - /* 2670 */ 1790, 1790, 1790, 2220, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2680 */ 1790, 1790, 1790, 1790, 2170, 1790, 705, 1790, 1790, 2201, - /* 2690 */ 1790, 2237, 1790, 1790, 2212, 2203, 709, 2205, 2206, 704, - /* 2700 */ 1790, 699, 1790, 2201, 1790, 2237, 1790, 1790, 360, 2203, - /* 2710 */ 709, 2205, 2206, 704, 1790, 699, 1790, 1790, 1790, 1790, - /* 2720 */ 2201, 1790, 2237, 1790, 1790, 361, 2203, 709, 2205, 2206, - /* 2730 */ 704, 1790, 699, 2202, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2740 */ 1790, 1790, 1790, 706, 1790, 1790, 1790, 1790, 1790, 2202, - /* 2750 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 706, - /* 2760 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 2202, 1790, - /* 2770 */ 1790, 1790, 2220, 1790, 1790, 1790, 1790, 1790, 706, 1790, - /* 2780 */ 1790, 1790, 1790, 2170, 1790, 705, 1790, 1790, 2220, 1790, - /* 2790 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 2170, - /* 2800 */ 1790, 705, 1790, 1790, 1790, 1790, 1790, 2220, 1790, 1790, - /* 2810 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 2170, 2201, - /* 2820 */ 705, 2237, 1790, 1790, 357, 2203, 709, 2205, 2206, 704, - /* 2830 */ 1790, 699, 1790, 1790, 1790, 2201, 1790, 2237, 1790, 1790, - /* 2840 */ 362, 2203, 709, 2205, 2206, 704, 1790, 699, 1790, 1790, - /* 2850 */ 1790, 1790, 1790, 1790, 707, 1790, 2237, 1790, 2202, 336, - /* 2860 */ 2203, 709, 2205, 2206, 704, 1790, 699, 1790, 706, 1790, - /* 2870 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2880 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2890 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 2220, 1790, 1790, - /* 2900 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 2170, 1790, - /* 2910 */ 705, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2920 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2930 */ 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, - /* 2940 */ 1790, 1790, 1790, 1790, 2201, 1790, 2237, 1790, 1790, 335, - /* 2950 */ 2203, 709, 2205, 2206, 704, 1790, 699, + /* 0 */ 537, 1832, 2227, 538, 1852, 545, 695, 1993, 538, 1852, + /* 10 */ 406, 742, 48, 46, 1732, 712, 258, 34, 1995, 164, + /* 20 */ 403, 1810, 1577, 41, 40, 385, 194, 47, 45, 44, + /* 30 */ 43, 42, 170, 2045, 1821, 1658, 1892, 1575, 1603, 1971, + /* 40 */ 681, 611, 125, 1602, 2245, 124, 123, 122, 121, 120, + /* 50 */ 119, 118, 117, 116, 2195, 2195, 609, 711, 607, 248, + /* 60 */ 247, 41, 40, 2116, 1653, 47, 45, 44, 43, 42, + /* 70 */ 19, 1895, 149, 1605, 36, 396, 694, 1583, 2113, 682, + /* 80 */ 41, 40, 672, 144, 47, 45, 44, 43, 42, 460, + /* 90 */ 2095, 2226, 552, 2262, 2109, 455, 171, 2228, 715, 2230, + /* 100 */ 2231, 710, 805, 705, 680, 15, 654, 2188, 780, 779, + /* 110 */ 778, 777, 415, 62, 776, 775, 148, 770, 769, 768, + /* 120 */ 767, 766, 765, 764, 162, 760, 759, 758, 414, 413, + /* 130 */ 755, 754, 753, 177, 176, 2245, 203, 554, 636, 2356, + /* 140 */ 351, 1660, 1661, 595, 594, 593, 695, 1993, 655, 222, + /* 150 */ 585, 141, 589, 540, 635, 1859, 588, 2391, 2330, 1503, + /* 160 */ 1504, 587, 592, 379, 378, 752, 135, 586, 1259, 620, + /* 170 */ 1258, 1633, 1643, 577, 2397, 189, 694, 1659, 1662, 2392, + /* 180 */ 661, 52, 1602, 2396, 2327, 140, 285, 2323, 671, 653, + /* 190 */ 136, 670, 1578, 2391, 1576, 1502, 1505, 2330, 750, 1604, + /* 200 */ 1604, 41, 40, 1260, 74, 47, 45, 44, 43, 42, + /* 210 */ 659, 189, 672, 144, 1234, 2392, 661, 160, 159, 747, + /* 220 */ 746, 745, 157, 2326, 1581, 1582, 265, 1632, 1635, 1636, + /* 230 */ 1637, 1638, 1639, 1640, 1641, 1642, 707, 703, 1651, 1652, + /* 240 */ 1654, 1655, 1656, 1657, 2, 48, 46, 694, 146, 2116, + /* 250 */ 355, 2286, 1600, 403, 84, 1577, 1236, 1239, 1240, 491, + /* 260 */ 2227, 51, 507, 363, 2114, 682, 169, 506, 1658, 289, + /* 270 */ 1575, 41, 40, 712, 1934, 47, 45, 44, 43, 42, + /* 280 */ 595, 594, 593, 474, 1583, 508, 1795, 585, 141, 589, + /* 290 */ 476, 1760, 2216, 588, 695, 1993, 30, 1653, 587, 592, + /* 300 */ 379, 378, 2245, 19, 586, 408, 1687, 12, 2040, 2042, + /* 310 */ 1583, 672, 144, 2195, 56, 711, 188, 2323, 2324, 125, + /* 320 */ 142, 2328, 124, 123, 122, 121, 120, 119, 118, 117, + /* 330 */ 116, 650, 51, 1486, 1487, 805, 372, 289, 15, 647, + /* 340 */ 646, 1758, 1759, 1761, 1762, 1763, 2205, 462, 2218, 2226, + /* 350 */ 1831, 2262, 287, 287, 112, 2228, 715, 2230, 2231, 710, + /* 360 */ 2213, 705, 1603, 1688, 147, 2078, 155, 2286, 2315, 1772, + /* 370 */ 2209, 743, 399, 2311, 1660, 1661, 2396, 504, 762, 2391, + /* 380 */ 498, 497, 496, 495, 490, 489, 488, 487, 486, 482, + /* 390 */ 481, 480, 479, 354, 471, 470, 469, 2395, 464, 463, + /* 400 */ 370, 2392, 2394, 2195, 1633, 1643, 1809, 2047, 2211, 400, + /* 410 */ 1659, 1662, 466, 2095, 674, 187, 2323, 2324, 705, 142, + /* 420 */ 2328, 2046, 656, 651, 644, 1578, 706, 1576, 1830, 66, + /* 430 */ 134, 133, 132, 131, 130, 129, 128, 127, 126, 313, + /* 440 */ 500, 37, 401, 1682, 1683, 1684, 1685, 1686, 1690, 1691, + /* 450 */ 1692, 1693, 1807, 261, 672, 144, 208, 1581, 1582, 206, + /* 460 */ 1632, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 707, + /* 470 */ 703, 1651, 1652, 1654, 1655, 1656, 1657, 2, 12, 48, + /* 480 */ 46, 2195, 1602, 1428, 1429, 2227, 1336, 403, 289, 1577, + /* 490 */ 1393, 47, 45, 44, 43, 42, 86, 1736, 675, 85, + /* 500 */ 213, 212, 1658, 1602, 1575, 1384, 740, 739, 738, 1388, + /* 510 */ 737, 1390, 1391, 736, 733, 1822, 1399, 730, 1401, 1402, + /* 520 */ 727, 724, 721, 499, 534, 478, 1338, 2245, 418, 185, + /* 530 */ 62, 1653, 532, 417, 477, 528, 524, 19, 2195, 2047, + /* 540 */ 711, 2034, 41, 40, 1583, 384, 47, 45, 44, 43, + /* 550 */ 42, 542, 2227, 2045, 38, 307, 449, 539, 190, 2323, + /* 560 */ 2324, 448, 142, 2328, 1259, 675, 1258, 62, 182, 805, + /* 570 */ 2041, 2042, 15, 681, 2226, 635, 2262, 2227, 2391, 112, + /* 580 */ 2228, 715, 2230, 2231, 710, 1935, 705, 371, 2099, 1829, + /* 590 */ 712, 186, 1861, 2315, 2245, 2397, 189, 399, 2311, 1260, + /* 600 */ 2392, 661, 12, 635, 10, 2195, 2391, 711, 1660, 1661, + /* 610 */ 41, 40, 191, 397, 47, 45, 44, 43, 42, 2245, + /* 620 */ 2345, 1995, 167, 2397, 189, 679, 2181, 2109, 2392, 661, + /* 630 */ 2195, 2396, 711, 282, 2391, 695, 1993, 744, 1633, 1643, + /* 640 */ 2038, 2226, 2195, 2262, 1659, 1662, 112, 2228, 715, 2230, + /* 650 */ 2231, 710, 2395, 705, 1634, 135, 2392, 2393, 186, 1578, + /* 660 */ 2315, 1576, 582, 224, 399, 2311, 2226, 540, 2262, 1859, + /* 670 */ 2359, 112, 2228, 715, 2230, 2231, 710, 425, 705, 493, + /* 680 */ 2095, 1262, 1263, 2411, 681, 2315, 289, 2346, 276, 399, + /* 690 */ 2311, 1581, 1582, 2189, 1632, 1635, 1636, 1637, 1638, 1639, + /* 700 */ 1640, 1641, 1642, 707, 703, 1651, 1652, 1654, 1655, 1656, + /* 710 */ 1657, 2, 48, 46, 1663, 2047, 1969, 2227, 1802, 1577, + /* 720 */ 403, 393, 1577, 289, 600, 158, 211, 90, 1828, 2045, + /* 730 */ 712, 182, 2353, 648, 1575, 1658, 690, 1575, 2109, 612, + /* 740 */ 635, 41, 40, 2391, 373, 47, 45, 44, 43, 42, + /* 750 */ 62, 2100, 437, 1988, 2227, 249, 695, 1993, 634, 2245, + /* 760 */ 2397, 189, 695, 1993, 1653, 2392, 661, 712, 695, 1993, + /* 770 */ 2195, 603, 711, 2160, 1583, 166, 453, 1583, 597, 439, + /* 780 */ 435, 2195, 454, 2047, 246, 752, 41, 40, 468, 398, + /* 790 */ 47, 45, 44, 43, 42, 1347, 2245, 2045, 55, 805, + /* 800 */ 695, 1993, 805, 103, 2227, 49, 2226, 2195, 2262, 711, + /* 810 */ 1346, 112, 2228, 715, 2230, 2231, 710, 712, 705, 139, + /* 820 */ 483, 1801, 253, 2411, 70, 2315, 406, 69, 1986, 399, + /* 830 */ 2311, 412, 411, 2246, 1995, 167, 447, 1827, 446, 1771, + /* 840 */ 1933, 1660, 1661, 2226, 1970, 2262, 2245, 1932, 113, 2228, + /* 850 */ 715, 2230, 2231, 710, 2178, 705, 1584, 2195, 1826, 711, + /* 860 */ 168, 409, 2315, 573, 572, 329, 2314, 2311, 445, 1995, + /* 870 */ 167, 1633, 1643, 2047, 697, 509, 2287, 1659, 1662, 369, + /* 880 */ 1968, 60, 326, 73, 1748, 3, 72, 2045, 632, 1578, + /* 890 */ 2195, 1576, 1578, 2226, 1576, 2262, 352, 54, 113, 2228, + /* 900 */ 715, 2230, 2231, 710, 581, 705, 289, 220, 519, 517, + /* 910 */ 514, 2195, 2315, 699, 1668, 2287, 700, 2311, 298, 299, + /* 920 */ 1602, 1581, 1582, 297, 1581, 1582, 580, 1632, 1635, 1636, + /* 930 */ 1637, 1638, 1639, 1640, 1641, 1642, 707, 703, 1651, 1652, + /* 940 */ 1654, 1655, 1656, 1657, 2, 48, 46, 62, 386, 695, + /* 950 */ 1993, 660, 2227, 403, 2391, 1577, 44, 43, 42, 1825, + /* 960 */ 750, 2395, 14, 13, 2330, 712, 695, 1993, 1658, 484, + /* 970 */ 1575, 659, 189, 695, 1993, 748, 2392, 661, 2038, 160, + /* 980 */ 159, 747, 746, 745, 157, 111, 553, 2227, 695, 1993, + /* 990 */ 2325, 695, 1993, 1990, 2245, 2047, 750, 1653, 252, 90, + /* 1000 */ 712, 407, 2366, 695, 1993, 2195, 583, 711, 254, 2045, + /* 1010 */ 1583, 262, 2195, 1587, 1729, 160, 159, 747, 746, 745, + /* 1020 */ 157, 377, 376, 678, 1824, 1989, 81, 80, 452, 2245, + /* 1030 */ 1334, 201, 695, 1993, 416, 805, 1689, 1823, 49, 1853, + /* 1040 */ 2195, 2226, 711, 2262, 444, 442, 171, 2228, 715, 2230, + /* 1050 */ 2231, 710, 302, 705, 749, 353, 2205, 2038, 433, 695, + /* 1060 */ 1993, 431, 427, 423, 420, 445, 618, 1701, 1548, 1549, + /* 1070 */ 1984, 1634, 432, 2205, 1660, 1661, 2226, 2195, 2262, 692, + /* 1080 */ 2209, 112, 2228, 715, 2230, 2231, 710, 2214, 705, 2357, + /* 1090 */ 2195, 375, 374, 2411, 579, 2315, 2104, 2209, 581, 399, + /* 1100 */ 2311, 695, 1993, 289, 1633, 1643, 695, 1993, 575, 574, + /* 1110 */ 1659, 1662, 109, 635, 35, 615, 2391, 614, 2211, 251, + /* 1120 */ 580, 693, 9, 250, 1694, 1578, 308, 1576, 705, 145, + /* 1130 */ 1820, 695, 1993, 2397, 189, 2211, 664, 1985, 2392, 661, + /* 1140 */ 2227, 1351, 41, 40, 1819, 705, 47, 45, 44, 43, + /* 1150 */ 42, 410, 1858, 712, 1586, 1818, 1350, 1581, 1582, 1817, + /* 1160 */ 1632, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 707, + /* 1170 */ 703, 1651, 1652, 1654, 1655, 1656, 1657, 2, 48, 46, + /* 1180 */ 591, 590, 2245, 2195, 93, 1242, 403, 358, 1577, 238, + /* 1190 */ 383, 1601, 613, 2195, 1816, 711, 1815, 2195, 1605, 412, + /* 1200 */ 411, 1658, 1814, 1575, 2227, 174, 1605, 660, 2195, 1591, + /* 1210 */ 2391, 1602, 2195, 571, 567, 563, 559, 712, 237, 642, + /* 1220 */ 322, 511, 1658, 2024, 1584, 1813, 1812, 659, 189, 713, + /* 1230 */ 1653, 2262, 2392, 661, 113, 2228, 715, 2230, 2231, 710, + /* 1240 */ 663, 705, 2088, 1583, 774, 772, 2245, 2195, 2315, 2195, + /* 1250 */ 667, 1653, 362, 2311, 2349, 2195, 1585, 2195, 91, 711, + /* 1260 */ 1879, 235, 1982, 167, 1583, 1978, 167, 702, 805, 1980, + /* 1270 */ 167, 15, 2227, 1728, 676, 1976, 167, 158, 2195, 2195, + /* 1280 */ 1996, 167, 596, 763, 458, 712, 1955, 2384, 2035, 701, + /* 1290 */ 1837, 800, 137, 2226, 673, 2262, 2335, 1721, 112, 2228, + /* 1300 */ 715, 2230, 2231, 710, 83, 705, 243, 1660, 1661, 241, + /* 1310 */ 2411, 1589, 2315, 158, 2245, 584, 399, 2311, 1239, 1240, + /* 1320 */ 151, 635, 263, 150, 2391, 2195, 284, 711, 234, 228, + /* 1330 */ 245, 1870, 5, 244, 1868, 233, 550, 1633, 1643, 1332, + /* 1340 */ 1721, 2397, 189, 1659, 1662, 153, 2392, 661, 152, 50, + /* 1350 */ 1543, 204, 281, 598, 226, 108, 601, 1, 1578, 264, + /* 1360 */ 1576, 2226, 1634, 2262, 105, 94, 112, 2228, 715, 2230, + /* 1370 */ 2231, 710, 50, 705, 269, 1804, 1805, 158, 2411, 1592, + /* 1380 */ 2315, 1587, 50, 1293, 399, 2311, 1546, 665, 295, 1862, + /* 1390 */ 1581, 1582, 71, 1632, 1635, 1636, 1637, 1638, 1639, 1640, + /* 1400 */ 1641, 1642, 707, 703, 1651, 1652, 1654, 1655, 1656, 1657, + /* 1410 */ 2, 1595, 1597, 1588, 156, 158, 14, 13, 2227, 64, + /* 1420 */ 50, 1679, 1757, 1294, 703, 1651, 1652, 1654, 1655, 1656, + /* 1430 */ 1657, 712, 419, 2334, 424, 756, 367, 50, 719, 757, + /* 1440 */ 1608, 798, 441, 2227, 196, 1756, 440, 271, 197, 156, + /* 1450 */ 677, 443, 158, 199, 138, 1500, 712, 1524, 316, 1312, + /* 1460 */ 2245, 300, 156, 1310, 1601, 687, 459, 461, 210, 1605, + /* 1470 */ 465, 2195, 2105, 711, 467, 502, 1600, 472, 485, 501, + /* 1480 */ 492, 2097, 494, 503, 513, 2245, 510, 304, 1377, 214, + /* 1490 */ 215, 512, 1695, 1644, 515, 516, 2195, 217, 711, 518, + /* 1500 */ 520, 1606, 4, 668, 535, 2227, 543, 2226, 1603, 2262, + /* 1510 */ 321, 1406, 112, 2228, 715, 2230, 2231, 710, 712, 705, + /* 1520 */ 536, 544, 1410, 546, 2411, 1417, 2315, 1415, 225, 547, + /* 1530 */ 399, 2311, 2226, 1607, 2262, 161, 227, 112, 2228, 715, + /* 1540 */ 2230, 2231, 710, 1609, 705, 548, 549, 2245, 230, 2290, + /* 1550 */ 551, 2315, 576, 232, 88, 399, 2311, 555, 2195, 89, + /* 1560 */ 711, 578, 1983, 236, 240, 1979, 2227, 242, 1981, 114, + /* 1570 */ 1977, 604, 605, 617, 92, 348, 619, 2169, 154, 712, + /* 1580 */ 255, 317, 623, 259, 624, 257, 628, 622, 2166, 1531, + /* 1590 */ 2165, 629, 2227, 630, 2226, 649, 2262, 685, 627, 112, + /* 1600 */ 2228, 715, 2230, 2231, 710, 709, 705, 2350, 2245, 2360, + /* 1610 */ 2365, 2288, 639, 2315, 2364, 8, 2227, 399, 2311, 2195, + /* 1620 */ 267, 711, 270, 658, 645, 389, 652, 175, 2337, 712, + /* 1630 */ 637, 640, 638, 275, 2245, 390, 2414, 280, 277, 278, + /* 1640 */ 143, 279, 669, 2227, 666, 2195, 283, 711, 1604, 2331, + /* 1650 */ 1726, 1721, 179, 290, 1724, 2226, 712, 2262, 2245, 98, + /* 1660 */ 112, 2228, 715, 2230, 2231, 710, 1610, 705, 318, 2195, + /* 1670 */ 2110, 711, 698, 192, 2315, 288, 319, 683, 399, 2311, + /* 1680 */ 688, 2226, 684, 2262, 2124, 2245, 344, 2228, 715, 2230, + /* 1690 */ 2231, 710, 708, 705, 696, 2280, 2195, 2390, 711, 2123, + /* 1700 */ 2122, 689, 395, 320, 100, 2226, 61, 2262, 2296, 1994, + /* 1710 */ 172, 2228, 715, 2230, 2231, 710, 102, 705, 104, 1956, + /* 1720 */ 717, 2039, 323, 2227, 1218, 311, 799, 163, 53, 359, + /* 1730 */ 360, 325, 2226, 2187, 2262, 2186, 712, 113, 2228, 715, + /* 1740 */ 2230, 2231, 710, 802, 705, 2227, 347, 804, 332, 346, + /* 1750 */ 336, 2315, 327, 2185, 78, 2182, 2312, 421, 712, 422, + /* 1760 */ 1568, 1569, 195, 662, 2412, 2245, 426, 2180, 428, 387, + /* 1770 */ 430, 429, 2179, 2227, 368, 2177, 2195, 434, 711, 2176, + /* 1780 */ 436, 2175, 438, 1559, 2156, 198, 712, 2245, 2155, 200, + /* 1790 */ 1527, 388, 79, 2137, 1526, 2136, 2135, 450, 2195, 451, + /* 1800 */ 711, 2134, 2133, 1477, 2087, 456, 2084, 457, 202, 2083, + /* 1810 */ 82, 2082, 2226, 2081, 2262, 2245, 2086, 345, 2228, 715, + /* 1820 */ 2230, 2231, 710, 205, 705, 2085, 2195, 2080, 711, 207, + /* 1830 */ 2074, 473, 475, 2090, 2226, 2079, 2262, 2077, 2076, 345, + /* 1840 */ 2228, 715, 2230, 2231, 710, 2075, 705, 209, 2058, 2057, + /* 1850 */ 87, 2056, 2055, 2227, 2073, 2072, 2071, 2070, 2069, 2068, + /* 1860 */ 2067, 2066, 2226, 2065, 2262, 2064, 712, 338, 2228, 715, + /* 1870 */ 2230, 2231, 710, 2063, 705, 2227, 2062, 2061, 2060, 2059, + /* 1880 */ 2089, 2054, 2053, 2052, 1479, 2051, 2050, 505, 712, 2049, + /* 1890 */ 2048, 1348, 356, 1352, 357, 2245, 1898, 1897, 216, 1896, + /* 1900 */ 218, 1344, 1894, 219, 1891, 521, 2195, 1890, 711, 1883, + /* 1910 */ 1872, 525, 657, 1848, 523, 221, 1847, 2245, 522, 1241, + /* 1920 */ 2154, 394, 231, 2131, 2108, 529, 526, 2144, 2195, 527, + /* 1930 */ 711, 533, 2132, 531, 76, 530, 183, 1972, 223, 1893, + /* 1940 */ 2227, 1889, 2226, 77, 2262, 1887, 1885, 172, 2228, 715, + /* 1950 */ 2230, 2231, 710, 709, 705, 2215, 229, 184, 556, 1882, + /* 1960 */ 541, 558, 2227, 560, 2226, 1867, 2262, 562, 557, 345, + /* 1970 */ 2228, 715, 2230, 2231, 710, 712, 705, 564, 566, 561, + /* 1980 */ 565, 568, 2245, 1286, 569, 570, 1865, 1866, 1864, 1844, + /* 1990 */ 1974, 1422, 1421, 2195, 1973, 711, 115, 1335, 1333, 1331, + /* 2000 */ 1330, 2413, 771, 1329, 2245, 1328, 63, 773, 402, 239, + /* 2010 */ 1327, 1880, 1324, 2227, 1323, 2195, 1321, 711, 1322, 1871, + /* 2020 */ 380, 381, 1869, 382, 599, 1843, 712, 2227, 602, 2226, + /* 2030 */ 1842, 2262, 1841, 1840, 344, 2228, 715, 2230, 2231, 710, + /* 2040 */ 712, 705, 606, 2281, 608, 1839, 610, 1553, 1557, 1555, + /* 2050 */ 1552, 2226, 29, 2262, 2153, 2245, 345, 2228, 715, 2230, + /* 2060 */ 2231, 710, 67, 705, 1533, 1537, 2195, 2143, 711, 2245, + /* 2070 */ 1535, 625, 2130, 404, 2129, 20, 2396, 21, 17, 6, + /* 2080 */ 2195, 7, 711, 31, 641, 643, 1774, 266, 57, 268, + /* 2090 */ 22, 626, 274, 273, 33, 165, 2216, 23, 1755, 1747, + /* 2100 */ 2227, 1794, 616, 1795, 2262, 260, 65, 340, 2228, 715, + /* 2110 */ 2230, 2231, 710, 712, 705, 24, 2226, 631, 2262, 173, + /* 2120 */ 621, 345, 2228, 715, 2230, 2231, 710, 633, 705, 1512, + /* 2130 */ 1789, 1511, 1788, 272, 391, 1793, 1792, 392, 808, 32, + /* 2140 */ 95, 286, 2245, 1718, 1717, 59, 2128, 2107, 97, 2106, + /* 2150 */ 178, 96, 99, 2195, 315, 711, 293, 25, 2227, 294, + /* 2160 */ 306, 1753, 26, 296, 105, 13, 1593, 301, 68, 101, + /* 2170 */ 181, 712, 2227, 1670, 1669, 1680, 686, 303, 796, 792, + /* 2180 */ 788, 784, 2265, 312, 1648, 712, 704, 180, 39, 2226, + /* 2190 */ 2227, 2262, 1646, 58, 330, 2228, 715, 2230, 2231, 710, + /* 2200 */ 2245, 705, 1645, 712, 193, 1625, 716, 16, 718, 27, + /* 2210 */ 11, 2195, 405, 711, 2245, 722, 18, 725, 728, 1617, + /* 2220 */ 28, 731, 1407, 110, 1404, 2195, 305, 711, 714, 720, + /* 2230 */ 723, 726, 2245, 1403, 1400, 729, 734, 1394, 732, 1383, + /* 2240 */ 1392, 735, 309, 2195, 1398, 711, 106, 2226, 1397, 2262, + /* 2250 */ 107, 1416, 328, 2228, 715, 2230, 2231, 710, 691, 705, + /* 2260 */ 1412, 2226, 1396, 2262, 1395, 2227, 331, 2228, 715, 2230, + /* 2270 */ 2231, 710, 741, 705, 75, 1284, 751, 1316, 712, 2226, + /* 2280 */ 1315, 2262, 1314, 1313, 337, 2228, 715, 2230, 2231, 710, + /* 2290 */ 1342, 705, 2227, 292, 1311, 1309, 1308, 1307, 310, 761, + /* 2300 */ 291, 1305, 1302, 1304, 1303, 712, 1301, 2245, 1300, 1299, + /* 2310 */ 1339, 1337, 1296, 1295, 1292, 2227, 1291, 1290, 2195, 256, + /* 2320 */ 711, 1289, 1888, 781, 782, 783, 1886, 785, 712, 786, + /* 2330 */ 787, 1884, 790, 789, 2245, 791, 1881, 793, 794, 795, + /* 2340 */ 1863, 797, 1231, 1838, 801, 2195, 1219, 711, 807, 314, + /* 2350 */ 803, 806, 2227, 1808, 2226, 1579, 2262, 2245, 1808, 341, + /* 2360 */ 2228, 715, 2230, 2231, 710, 712, 705, 324, 2195, 1808, + /* 2370 */ 711, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 2227, + /* 2380 */ 1808, 2226, 1808, 2262, 1808, 1808, 333, 2228, 715, 2230, + /* 2390 */ 2231, 710, 712, 705, 2245, 1808, 1808, 1808, 1808, 1808, + /* 2400 */ 1808, 1808, 2227, 1808, 2226, 2195, 2262, 711, 1808, 342, + /* 2410 */ 2228, 715, 2230, 2231, 710, 712, 705, 1808, 1808, 1808, + /* 2420 */ 1808, 2245, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, + /* 2430 */ 1808, 1808, 2195, 1808, 711, 1808, 1808, 1808, 1808, 1808, + /* 2440 */ 1808, 2226, 1808, 2262, 2245, 1808, 334, 2228, 715, 2230, + /* 2450 */ 2231, 710, 2227, 705, 1808, 2195, 1808, 711, 1808, 1808, + /* 2460 */ 1808, 1808, 1808, 1808, 1808, 712, 2227, 1808, 2226, 1808, + /* 2470 */ 2262, 1808, 1808, 343, 2228, 715, 2230, 2231, 710, 712, + /* 2480 */ 705, 1808, 2227, 1808, 1808, 1808, 1808, 1808, 1808, 1808, + /* 2490 */ 1808, 2226, 1808, 2262, 2245, 712, 335, 2228, 715, 2230, + /* 2500 */ 2231, 710, 1808, 705, 1808, 2195, 1808, 711, 2245, 1808, + /* 2510 */ 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 2195, + /* 2520 */ 1808, 711, 1808, 1808, 2245, 1808, 1808, 1808, 1808, 1808, + /* 2530 */ 1808, 1808, 1808, 1808, 1808, 2195, 1808, 711, 1808, 1808, + /* 2540 */ 1808, 2226, 1808, 2262, 1808, 2227, 349, 2228, 715, 2230, + /* 2550 */ 2231, 710, 1808, 705, 1808, 2226, 1808, 2262, 712, 1808, + /* 2560 */ 350, 2228, 715, 2230, 2231, 710, 1808, 705, 1808, 2227, + /* 2570 */ 1808, 2226, 1808, 2262, 1808, 1808, 2239, 2228, 715, 2230, + /* 2580 */ 2231, 710, 712, 705, 1808, 1808, 1808, 2245, 1808, 1808, + /* 2590 */ 1808, 1808, 1808, 1808, 1808, 1808, 2227, 1808, 2195, 1808, + /* 2600 */ 711, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 712, + /* 2610 */ 1808, 2245, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, + /* 2620 */ 1808, 1808, 2195, 1808, 711, 1808, 1808, 1808, 1808, 1808, + /* 2630 */ 1808, 1808, 1808, 1808, 2226, 1808, 2262, 1808, 2245, 2238, + /* 2640 */ 2228, 715, 2230, 2231, 710, 1808, 705, 1808, 1808, 2195, + /* 2650 */ 1808, 711, 1808, 1808, 1808, 1808, 1808, 1808, 2226, 2227, + /* 2660 */ 2262, 1808, 1808, 2237, 2228, 715, 2230, 2231, 710, 1808, + /* 2670 */ 705, 1808, 712, 1808, 1808, 1808, 1808, 1808, 1808, 1808, + /* 2680 */ 1808, 1808, 1808, 1808, 1808, 2226, 1808, 2262, 1808, 2227, + /* 2690 */ 364, 2228, 715, 2230, 2231, 710, 1808, 705, 1808, 1808, + /* 2700 */ 1808, 2245, 712, 1808, 1808, 1808, 1808, 1808, 1808, 2227, + /* 2710 */ 1808, 1808, 2195, 1808, 711, 1808, 1808, 1808, 1808, 1808, + /* 2720 */ 1808, 1808, 712, 1808, 1808, 1808, 1808, 1808, 1808, 1808, + /* 2730 */ 1808, 2245, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, + /* 2740 */ 1808, 1808, 2195, 1808, 711, 1808, 1808, 1808, 2226, 1808, + /* 2750 */ 2262, 2245, 1808, 365, 2228, 715, 2230, 2231, 710, 2227, + /* 2760 */ 705, 1808, 2195, 1808, 711, 1808, 1808, 1808, 1808, 1808, + /* 2770 */ 1808, 1808, 712, 1808, 1808, 1808, 2227, 1808, 2226, 1808, + /* 2780 */ 2262, 1808, 1808, 361, 2228, 715, 2230, 2231, 710, 712, + /* 2790 */ 705, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 2226, 1808, + /* 2800 */ 2262, 2245, 1808, 366, 2228, 715, 2230, 2231, 710, 1808, + /* 2810 */ 705, 1808, 2195, 1808, 711, 1808, 1808, 1808, 2245, 1808, + /* 2820 */ 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 2195, + /* 2830 */ 1808, 711, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, + /* 2840 */ 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 713, 1808, + /* 2850 */ 2262, 1808, 1808, 340, 2228, 715, 2230, 2231, 710, 1808, + /* 2860 */ 705, 1808, 1808, 1808, 1808, 2226, 1808, 2262, 1808, 1808, + /* 2870 */ 339, 2228, 715, 2230, 2231, 710, 1808, 705, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 388, 342, 368, 394, 389, 351, 352, 392, 4, 448, - /* 10 */ 449, 352, 12, 13, 14, 406, 382, 0, 409, 410, - /* 20 */ 20, 388, 22, 8, 9, 371, 392, 12, 13, 14, - /* 30 */ 15, 16, 378, 33, 381, 35, 351, 352, 8, 9, - /* 40 */ 381, 412, 12, 13, 14, 15, 16, 43, 395, 45, - /* 50 */ 46, 392, 20, 394, 22, 20, 371, 368, 368, 351, - /* 60 */ 352, 44, 62, 378, 430, 431, 346, 35, 68, 349, - /* 70 */ 350, 382, 382, 351, 440, 75, 346, 351, 352, 349, - /* 80 */ 350, 392, 392, 68, 381, 53, 20, 428, 459, 430, - /* 90 */ 387, 462, 433, 434, 435, 436, 437, 438, 395, 440, - /* 100 */ 100, 351, 352, 103, 445, 376, 447, 394, 479, 480, - /* 110 */ 451, 452, 0, 484, 485, 381, 12, 13, 396, 430, - /* 120 */ 430, 371, 409, 410, 20, 466, 22, 112, 100, 440, - /* 130 */ 440, 20, 347, 474, 400, 401, 351, 33, 353, 35, - /* 140 */ 140, 141, 351, 352, 116, 117, 118, 119, 120, 121, - /* 150 */ 122, 123, 124, 125, 425, 127, 128, 129, 130, 131, - /* 160 */ 132, 133, 454, 455, 456, 457, 62, 459, 460, 103, - /* 170 */ 170, 171, 68, 341, 347, 343, 176, 177, 351, 75, - /* 180 */ 353, 455, 456, 457, 169, 459, 460, 20, 462, 398, - /* 190 */ 20, 191, 21, 193, 103, 24, 25, 26, 27, 28, - /* 200 */ 29, 30, 31, 32, 100, 479, 480, 103, 342, 49, - /* 210 */ 484, 485, 103, 183, 103, 351, 352, 57, 352, 20, - /* 220 */ 60, 61, 134, 223, 224, 0, 226, 227, 228, 229, + /* 0 */ 350, 343, 343, 353, 354, 350, 355, 356, 353, 354, + /* 10 */ 376, 392, 12, 13, 14, 356, 392, 2, 384, 385, + /* 20 */ 20, 0, 22, 8, 9, 391, 375, 12, 13, 14, + /* 30 */ 15, 16, 342, 399, 344, 35, 0, 37, 20, 0, + /* 40 */ 355, 21, 21, 20, 385, 24, 25, 26, 27, 28, + /* 50 */ 29, 30, 31, 32, 396, 396, 36, 398, 38, 39, + /* 60 */ 40, 8, 9, 398, 64, 12, 13, 14, 15, 16, + /* 70 */ 70, 0, 33, 20, 2, 410, 20, 77, 413, 414, + /* 80 */ 8, 9, 355, 356, 12, 13, 14, 15, 16, 355, + /* 90 */ 356, 432, 407, 434, 409, 355, 437, 438, 439, 440, + /* 100 */ 441, 442, 102, 444, 20, 105, 356, 416, 72, 73, + /* 110 */ 74, 75, 76, 105, 78, 79, 80, 81, 82, 83, + /* 120 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + /* 130 */ 94, 95, 96, 97, 98, 385, 402, 69, 479, 480, + /* 140 */ 400, 141, 142, 72, 73, 74, 355, 356, 20, 351, + /* 150 */ 79, 80, 81, 355, 463, 357, 85, 466, 436, 141, + /* 160 */ 142, 90, 91, 92, 93, 69, 375, 96, 20, 115, + /* 170 */ 22, 171, 172, 382, 483, 484, 20, 177, 178, 488, + /* 180 */ 489, 105, 20, 3, 462, 37, 459, 460, 461, 439, + /* 190 */ 463, 464, 192, 466, 194, 177, 178, 436, 116, 20, + /* 200 */ 20, 8, 9, 55, 115, 12, 13, 14, 15, 16, + /* 210 */ 483, 484, 355, 356, 4, 488, 489, 135, 136, 137, + /* 220 */ 138, 139, 140, 462, 224, 225, 173, 227, 228, 229, /* 230 */ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - /* 240 */ 240, 241, 242, 243, 140, 141, 21, 381, 67, 24, - /* 250 */ 25, 26, 27, 28, 29, 30, 31, 32, 392, 0, - /* 260 */ 394, 4, 247, 248, 249, 250, 251, 252, 253, 254, - /* 270 */ 255, 256, 257, 390, 170, 171, 393, 394, 351, 352, - /* 280 */ 176, 177, 20, 24, 25, 26, 27, 28, 29, 30, - /* 290 */ 31, 32, 204, 205, 428, 191, 430, 193, 371, 433, - /* 300 */ 434, 435, 436, 437, 438, 175, 440, 140, 141, 443, - /* 310 */ 20, 445, 446, 447, 67, 342, 286, 451, 452, 455, - /* 320 */ 456, 457, 20, 459, 460, 352, 260, 223, 224, 217, - /* 330 */ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - /* 340 */ 236, 237, 238, 239, 240, 241, 242, 243, 244, 12, - /* 350 */ 13, 260, 459, 372, 381, 462, 361, 20, 37, 22, - /* 360 */ 103, 380, 381, 379, 369, 392, 342, 394, 387, 260, - /* 370 */ 33, 260, 35, 480, 351, 391, 395, 484, 485, 8, - /* 380 */ 9, 84, 114, 12, 13, 14, 15, 16, 351, 352, - /* 390 */ 75, 20, 351, 352, 342, 244, 266, 267, 268, 62, - /* 400 */ 20, 428, 114, 430, 352, 68, 433, 434, 435, 436, - /* 410 */ 437, 438, 75, 440, 351, 352, 392, 342, 445, 75, - /* 420 */ 447, 351, 352, 4, 451, 452, 403, 106, 405, 108, - /* 430 */ 109, 432, 111, 381, 371, 398, 115, 100, 19, 358, - /* 440 */ 103, 371, 145, 146, 392, 381, 394, 474, 0, 351, - /* 450 */ 352, 387, 33, 12, 13, 14, 375, 458, 137, 395, - /* 460 */ 342, 20, 172, 22, 383, 168, 352, 392, 49, 371, - /* 470 */ 352, 35, 170, 171, 33, 56, 35, 140, 141, 342, - /* 480 */ 428, 62, 430, 103, 342, 433, 434, 435, 436, 437, - /* 490 */ 438, 439, 440, 441, 442, 381, 455, 456, 457, 381, - /* 500 */ 459, 460, 381, 62, 244, 186, 246, 170, 171, 14, - /* 510 */ 392, 75, 394, 176, 177, 20, 75, 260, 70, 71, - /* 520 */ 72, 102, 401, 3, 105, 77, 78, 79, 191, 392, - /* 530 */ 193, 83, 213, 214, 392, 351, 88, 89, 90, 91, - /* 540 */ 20, 100, 94, 172, 103, 342, 428, 342, 430, 435, - /* 550 */ 0, 433, 434, 435, 436, 437, 438, 352, 440, 354, - /* 560 */ 223, 224, 360, 226, 227, 228, 229, 230, 231, 232, - /* 570 */ 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - /* 580 */ 243, 140, 141, 70, 71, 72, 381, 403, 386, 405, - /* 590 */ 77, 78, 79, 475, 476, 392, 83, 392, 444, 394, - /* 600 */ 446, 88, 89, 90, 91, 459, 388, 94, 462, 351, - /* 610 */ 352, 170, 171, 381, 12, 13, 48, 176, 177, 387, - /* 620 */ 393, 394, 381, 339, 104, 479, 480, 395, 387, 371, - /* 630 */ 484, 485, 191, 428, 193, 430, 395, 35, 433, 434, - /* 640 */ 435, 436, 437, 438, 3, 440, 351, 352, 134, 135, - /* 650 */ 445, 351, 447, 139, 8, 9, 451, 452, 12, 13, - /* 660 */ 14, 15, 16, 418, 223, 224, 371, 226, 227, 228, - /* 670 */ 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - /* 680 */ 239, 240, 241, 242, 243, 12, 13, 351, 352, 342, - /* 690 */ 44, 459, 172, 20, 462, 22, 412, 20, 0, 352, - /* 700 */ 444, 417, 446, 403, 223, 405, 33, 371, 35, 159, - /* 710 */ 342, 479, 480, 358, 351, 352, 484, 485, 168, 360, - /* 720 */ 352, 0, 103, 381, 351, 352, 8, 9, 381, 387, - /* 730 */ 12, 13, 14, 15, 16, 62, 377, 395, 383, 392, - /* 740 */ 172, 394, 342, 459, 371, 386, 462, 179, 75, 381, - /* 750 */ 104, 62, 271, 272, 273, 274, 275, 276, 277, 21, - /* 760 */ 392, 398, 394, 479, 480, 67, 351, 352, 484, 485, - /* 770 */ 372, 115, 34, 100, 36, 428, 103, 430, 380, 381, - /* 780 */ 433, 434, 435, 436, 437, 438, 371, 440, 342, 12, - /* 790 */ 13, 102, 392, 137, 105, 193, 428, 20, 430, 22, - /* 800 */ 369, 433, 434, 435, 436, 437, 438, 343, 440, 190, - /* 810 */ 33, 192, 35, 140, 141, 447, 432, 140, 141, 451, - /* 820 */ 452, 412, 104, 8, 9, 432, 417, 12, 13, 14, - /* 830 */ 15, 16, 402, 486, 487, 342, 115, 0, 392, 62, - /* 840 */ 14, 222, 458, 170, 171, 352, 20, 351, 352, 176, - /* 850 */ 177, 458, 75, 176, 177, 134, 135, 136, 137, 138, - /* 860 */ 139, 372, 351, 352, 191, 488, 193, 371, 459, 380, - /* 870 */ 381, 462, 351, 352, 381, 351, 352, 100, 443, 260, - /* 880 */ 103, 446, 371, 389, 14, 392, 392, 394, 479, 480, - /* 890 */ 20, 477, 371, 484, 485, 371, 223, 224, 0, 226, - /* 900 */ 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - /* 910 */ 237, 238, 239, 240, 241, 242, 243, 140, 141, 104, - /* 920 */ 355, 428, 281, 430, 365, 366, 433, 434, 435, 436, - /* 930 */ 437, 438, 389, 440, 372, 392, 115, 39, 1, 2, - /* 940 */ 447, 459, 380, 381, 462, 452, 342, 170, 171, 351, - /* 950 */ 352, 22, 115, 176, 177, 134, 135, 136, 137, 138, - /* 960 */ 139, 4, 480, 33, 35, 47, 484, 485, 191, 371, - /* 970 */ 193, 134, 135, 136, 137, 138, 139, 351, 352, 49, - /* 980 */ 12, 13, 14, 15, 16, 14, 342, 57, 58, 59, - /* 990 */ 60, 20, 62, 20, 471, 22, 392, 371, 54, 55, - /* 1000 */ 223, 224, 0, 226, 227, 228, 229, 230, 231, 232, - /* 1010 */ 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - /* 1020 */ 243, 103, 18, 18, 20, 411, 53, 342, 23, 100, - /* 1030 */ 373, 27, 102, 376, 30, 105, 392, 33, 2, 20, - /* 1040 */ 170, 104, 37, 38, 8, 9, 41, 39, 12, 13, - /* 1050 */ 14, 15, 16, 49, 42, 51, 44, 52, 8, 9, - /* 1060 */ 56, 368, 12, 13, 14, 15, 16, 412, 63, 64, - /* 1070 */ 65, 66, 70, 71, 72, 73, 74, 392, 76, 77, - /* 1080 */ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - /* 1090 */ 88, 89, 90, 91, 92, 93, 94, 95, 96, 14, - /* 1100 */ 15, 16, 367, 173, 174, 370, 102, 20, 103, 2, - /* 1110 */ 180, 181, 351, 352, 459, 8, 9, 462, 114, 12, - /* 1120 */ 13, 14, 15, 16, 169, 342, 356, 357, 42, 199, - /* 1130 */ 44, 22, 371, 22, 479, 480, 20, 342, 44, 484, - /* 1140 */ 485, 170, 356, 357, 35, 342, 35, 142, 144, 342, - /* 1150 */ 44, 147, 148, 149, 150, 151, 152, 153, 154, 155, - /* 1160 */ 156, 157, 158, 159, 160, 161, 162, 163, 412, 165, - /* 1170 */ 166, 167, 8, 9, 13, 392, 12, 13, 14, 15, - /* 1180 */ 16, 135, 342, 114, 75, 139, 35, 392, 183, 184, - /* 1190 */ 185, 172, 352, 188, 354, 392, 35, 342, 342, 392, - /* 1200 */ 342, 342, 247, 365, 366, 107, 201, 202, 110, 100, - /* 1210 */ 342, 100, 257, 45, 46, 459, 412, 212, 462, 262, - /* 1220 */ 215, 381, 172, 218, 219, 220, 221, 222, 380, 381, - /* 1230 */ 380, 381, 392, 164, 394, 479, 480, 380, 381, 44, - /* 1240 */ 484, 485, 13, 342, 380, 381, 200, 392, 392, 203, - /* 1250 */ 392, 392, 206, 352, 208, 354, 380, 381, 0, 172, - /* 1260 */ 392, 258, 259, 459, 35, 260, 462, 259, 428, 381, - /* 1270 */ 430, 62, 68, 433, 434, 435, 436, 437, 438, 207, - /* 1280 */ 440, 209, 381, 479, 480, 445, 170, 447, 484, 485, - /* 1290 */ 0, 451, 452, 392, 0, 394, 0, 44, 107, 104, - /* 1300 */ 191, 110, 193, 107, 44, 107, 110, 49, 110, 44, - /* 1310 */ 44, 342, 22, 44, 105, 44, 22, 35, 22, 140, - /* 1320 */ 141, 352, 44, 354, 368, 44, 35, 44, 44, 428, - /* 1330 */ 44, 430, 223, 224, 433, 434, 435, 436, 437, 438, - /* 1340 */ 355, 440, 402, 350, 193, 0, 445, 352, 447, 391, - /* 1350 */ 381, 44, 451, 452, 1, 2, 402, 104, 44, 44, - /* 1360 */ 461, 392, 481, 394, 104, 44, 75, 13, 44, 104, - /* 1370 */ 104, 103, 44, 104, 342, 104, 44, 283, 44, 13, - /* 1380 */ 453, 113, 104, 263, 352, 104, 354, 104, 104, 35, - /* 1390 */ 104, 285, 413, 465, 429, 50, 49, 428, 20, 430, - /* 1400 */ 342, 35, 433, 434, 435, 436, 437, 438, 422, 440, - /* 1410 */ 352, 104, 354, 381, 445, 427, 447, 206, 104, 104, - /* 1420 */ 451, 452, 360, 422, 392, 104, 394, 223, 104, 189, - /* 1430 */ 360, 415, 104, 352, 20, 342, 104, 42, 104, 381, - /* 1440 */ 399, 20, 402, 352, 399, 352, 169, 20, 397, 352, - /* 1450 */ 392, 351, 394, 351, 399, 99, 397, 397, 101, 364, - /* 1460 */ 428, 351, 430, 98, 363, 433, 434, 435, 436, 437, - /* 1470 */ 438, 20, 440, 351, 381, 193, 362, 445, 351, 447, - /* 1480 */ 351, 344, 48, 451, 452, 392, 428, 394, 430, 348, - /* 1490 */ 344, 433, 434, 435, 436, 437, 438, 348, 440, 422, - /* 1500 */ 360, 12, 13, 445, 342, 447, 20, 394, 360, 451, - /* 1510 */ 452, 22, 20, 353, 352, 20, 360, 414, 353, 360, - /* 1520 */ 351, 428, 33, 430, 35, 344, 433, 434, 435, 436, - /* 1530 */ 437, 438, 342, 440, 360, 360, 360, 351, 445, 381, - /* 1540 */ 447, 344, 352, 381, 451, 452, 392, 381, 381, 392, - /* 1550 */ 210, 62, 381, 381, 392, 392, 394, 426, 381, 381, - /* 1560 */ 103, 422, 424, 358, 75, 197, 421, 342, 196, 195, - /* 1570 */ 420, 381, 358, 351, 394, 402, 392, 352, 270, 269, - /* 1580 */ 392, 392, 392, 413, 394, 402, 392, 470, 470, 100, - /* 1590 */ 428, 278, 430, 182, 407, 433, 434, 435, 436, 437, - /* 1600 */ 438, 419, 440, 473, 472, 470, 381, 445, 407, 447, - /* 1610 */ 280, 469, 279, 451, 452, 468, 264, 392, 428, 394, - /* 1620 */ 430, 413, 467, 433, 434, 435, 436, 437, 438, 259, - /* 1630 */ 440, 287, 489, 284, 482, 445, 483, 447, 20, 352, - /* 1640 */ 282, 451, 452, 114, 432, 261, 353, 358, 20, 464, - /* 1650 */ 358, 405, 407, 428, 342, 430, 463, 407, 433, 434, - /* 1660 */ 435, 436, 437, 438, 352, 440, 392, 392, 392, 358, - /* 1670 */ 174, 392, 447, 103, 404, 376, 451, 452, 358, 352, - /* 1680 */ 191, 450, 193, 103, 342, 384, 370, 392, 351, 392, - /* 1690 */ 392, 36, 344, 381, 352, 345, 358, 374, 359, 374, - /* 1700 */ 374, 416, 340, 423, 392, 0, 394, 0, 408, 0, - /* 1710 */ 408, 42, 223, 224, 0, 35, 216, 35, 35, 35, - /* 1720 */ 216, 0, 35, 381, 35, 236, 237, 238, 239, 240, - /* 1730 */ 241, 242, 216, 0, 392, 216, 394, 0, 35, 0, - /* 1740 */ 428, 22, 430, 35, 211, 433, 434, 435, 436, 437, - /* 1750 */ 438, 0, 440, 0, 199, 342, 0, 199, 193, 447, - /* 1760 */ 200, 0, 191, 451, 452, 352, 0, 0, 187, 186, - /* 1770 */ 428, 0, 430, 0, 47, 433, 434, 435, 436, 437, - /* 1780 */ 438, 0, 440, 35, 49, 0, 0, 47, 42, 0, - /* 1790 */ 0, 0, 47, 0, 381, 0, 0, 0, 385, 0, - /* 1800 */ 0, 159, 0, 35, 159, 392, 0, 394, 0, 0, - /* 1810 */ 0, 0, 0, 342, 0, 0, 0, 0, 476, 0, - /* 1820 */ 0, 0, 0, 352, 0, 0, 47, 342, 0, 42, - /* 1830 */ 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, - /* 1840 */ 22, 428, 143, 430, 342, 0, 433, 434, 435, 436, - /* 1850 */ 437, 438, 381, 440, 352, 0, 385, 182, 0, 22, - /* 1860 */ 0, 48, 22, 392, 35, 394, 381, 62, 0, 62, - /* 1870 */ 0, 48, 0, 0, 0, 0, 35, 392, 0, 394, - /* 1880 */ 0, 14, 35, 381, 35, 39, 0, 39, 62, 39, - /* 1890 */ 0, 35, 49, 49, 392, 42, 394, 0, 44, 428, - /* 1900 */ 49, 430, 39, 39, 433, 434, 435, 436, 437, 438, - /* 1910 */ 0, 440, 47, 428, 342, 430, 47, 40, 433, 434, - /* 1920 */ 435, 436, 437, 438, 352, 440, 47, 39, 0, 0, - /* 1930 */ 428, 69, 430, 342, 0, 433, 434, 435, 436, 437, - /* 1940 */ 438, 0, 440, 352, 35, 49, 39, 0, 35, 342, - /* 1950 */ 49, 39, 0, 381, 35, 49, 39, 385, 0, 352, - /* 1960 */ 35, 0, 39, 478, 392, 49, 394, 0, 0, 0, - /* 1970 */ 0, 0, 381, 112, 35, 22, 110, 0, 35, 35, - /* 1980 */ 35, 35, 44, 392, 35, 394, 35, 22, 381, 487, - /* 1990 */ 35, 35, 385, 0, 44, 35, 22, 35, 0, 392, - /* 2000 */ 428, 394, 430, 22, 0, 433, 434, 435, 436, 437, - /* 2010 */ 438, 22, 440, 35, 51, 0, 0, 35, 35, 428, - /* 2020 */ 342, 430, 0, 22, 433, 434, 435, 436, 437, 438, - /* 2030 */ 352, 440, 1, 442, 20, 428, 104, 430, 35, 103, - /* 2040 */ 433, 434, 435, 436, 437, 438, 35, 440, 35, 0, - /* 2050 */ 19, 103, 35, 172, 22, 342, 0, 198, 22, 381, - /* 2060 */ 0, 172, 0, 385, 33, 352, 174, 172, 3, 178, - /* 2070 */ 392, 172, 394, 44, 48, 103, 194, 101, 178, 104, - /* 2080 */ 49, 44, 103, 48, 99, 342, 44, 103, 57, 58, - /* 2090 */ 59, 60, 265, 62, 381, 352, 104, 44, 104, 103, - /* 2100 */ 103, 47, 47, 104, 104, 392, 428, 394, 430, 103, - /* 2110 */ 44, 433, 434, 435, 436, 437, 438, 265, 440, 3, - /* 2120 */ 44, 35, 342, 104, 381, 35, 35, 35, 35, 35, - /* 2130 */ 47, 104, 352, 102, 104, 392, 105, 394, 0, 44, - /* 2140 */ 0, 428, 258, 430, 47, 47, 433, 434, 435, 436, - /* 2150 */ 437, 438, 265, 440, 103, 103, 39, 0, 39, 173, - /* 2160 */ 103, 381, 104, 104, 103, 175, 103, 103, 47, 138, - /* 2170 */ 44, 428, 392, 430, 394, 101, 433, 434, 435, 436, - /* 2180 */ 437, 438, 113, 440, 342, 245, 101, 2, 22, 223, - /* 2190 */ 103, 47, 104, 104, 352, 47, 114, 22, 35, 342, - /* 2200 */ 104, 126, 103, 103, 173, 103, 103, 103, 428, 352, - /* 2210 */ 430, 180, 104, 433, 434, 435, 436, 437, 438, 104, - /* 2220 */ 440, 35, 104, 381, 35, 103, 35, 225, 103, 35, - /* 2230 */ 199, 104, 103, 103, 392, 104, 394, 104, 381, 35, - /* 2240 */ 104, 35, 103, 22, 103, 44, 126, 35, 103, 392, - /* 2250 */ 342, 394, 103, 103, 126, 22, 69, 115, 126, 35, - /* 2260 */ 352, 68, 35, 35, 342, 35, 35, 35, 97, 35, - /* 2270 */ 428, 35, 430, 75, 352, 433, 434, 435, 436, 437, - /* 2280 */ 438, 44, 440, 35, 35, 428, 35, 430, 22, 381, - /* 2290 */ 433, 434, 435, 436, 437, 438, 0, 440, 35, 35, - /* 2300 */ 392, 75, 394, 381, 35, 35, 35, 35, 35, 35, - /* 2310 */ 22, 35, 35, 0, 392, 342, 394, 49, 39, 35, - /* 2320 */ 39, 0, 35, 0, 39, 352, 35, 49, 39, 49, - /* 2330 */ 0, 49, 35, 35, 0, 21, 428, 22, 430, 22, - /* 2340 */ 22, 433, 434, 435, 436, 437, 438, 21, 440, 20, - /* 2350 */ 428, 490, 430, 490, 381, 433, 434, 435, 436, 437, - /* 2360 */ 438, 490, 440, 490, 490, 392, 490, 394, 490, 490, - /* 2370 */ 490, 490, 490, 490, 490, 342, 490, 490, 490, 490, - /* 2380 */ 490, 490, 490, 490, 490, 352, 490, 490, 490, 490, - /* 2390 */ 342, 490, 490, 490, 490, 490, 490, 490, 490, 490, - /* 2400 */ 352, 428, 490, 430, 490, 490, 433, 434, 435, 436, - /* 2410 */ 437, 438, 490, 440, 381, 490, 490, 490, 490, 490, - /* 2420 */ 490, 490, 490, 490, 490, 392, 490, 394, 490, 381, - /* 2430 */ 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, - /* 2440 */ 392, 490, 394, 490, 490, 490, 490, 490, 342, 490, - /* 2450 */ 490, 490, 490, 490, 490, 490, 490, 490, 352, 490, - /* 2460 */ 490, 428, 490, 430, 490, 342, 433, 434, 435, 436, - /* 2470 */ 437, 438, 490, 440, 490, 352, 428, 490, 430, 342, - /* 2480 */ 490, 433, 434, 435, 436, 437, 438, 381, 440, 352, - /* 2490 */ 490, 490, 490, 490, 490, 490, 490, 490, 392, 490, - /* 2500 */ 394, 490, 490, 490, 381, 490, 490, 490, 490, 490, - /* 2510 */ 490, 490, 490, 490, 490, 392, 342, 394, 381, 490, - /* 2520 */ 490, 490, 490, 490, 490, 490, 352, 490, 490, 392, - /* 2530 */ 490, 394, 490, 490, 428, 490, 430, 342, 490, 433, - /* 2540 */ 434, 435, 436, 437, 438, 490, 440, 352, 490, 490, - /* 2550 */ 490, 428, 490, 430, 490, 381, 433, 434, 435, 436, - /* 2560 */ 437, 438, 490, 440, 490, 428, 392, 430, 394, 490, - /* 2570 */ 433, 434, 435, 436, 437, 438, 381, 440, 490, 490, - /* 2580 */ 490, 490, 490, 490, 490, 490, 490, 392, 490, 394, - /* 2590 */ 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, - /* 2600 */ 490, 490, 428, 342, 430, 490, 490, 433, 434, 435, - /* 2610 */ 436, 437, 438, 352, 440, 490, 490, 342, 490, 490, - /* 2620 */ 490, 490, 490, 428, 490, 430, 490, 352, 433, 434, - /* 2630 */ 435, 436, 437, 438, 342, 440, 490, 490, 490, 490, - /* 2640 */ 490, 490, 381, 490, 352, 490, 490, 490, 490, 490, - /* 2650 */ 490, 490, 490, 392, 490, 394, 381, 490, 490, 490, - /* 2660 */ 490, 490, 490, 490, 490, 490, 490, 392, 490, 394, - /* 2670 */ 490, 490, 490, 381, 490, 490, 490, 490, 490, 490, - /* 2680 */ 490, 490, 490, 490, 392, 490, 394, 490, 490, 428, - /* 2690 */ 490, 430, 490, 490, 433, 434, 435, 436, 437, 438, - /* 2700 */ 490, 440, 490, 428, 490, 430, 490, 490, 433, 434, - /* 2710 */ 435, 436, 437, 438, 490, 440, 490, 490, 490, 490, - /* 2720 */ 428, 490, 430, 490, 490, 433, 434, 435, 436, 437, - /* 2730 */ 438, 490, 440, 342, 490, 490, 490, 490, 490, 490, - /* 2740 */ 490, 490, 490, 352, 490, 490, 490, 490, 490, 342, - /* 2750 */ 490, 490, 490, 490, 490, 490, 490, 490, 490, 352, - /* 2760 */ 490, 490, 490, 490, 490, 490, 490, 490, 342, 490, - /* 2770 */ 490, 490, 381, 490, 490, 490, 490, 490, 352, 490, - /* 2780 */ 490, 490, 490, 392, 490, 394, 490, 490, 381, 490, - /* 2790 */ 490, 490, 490, 490, 490, 490, 490, 490, 490, 392, - /* 2800 */ 490, 394, 490, 490, 490, 490, 490, 381, 490, 490, - /* 2810 */ 490, 490, 490, 490, 490, 490, 490, 490, 392, 428, - /* 2820 */ 394, 430, 490, 490, 433, 434, 435, 436, 437, 438, - /* 2830 */ 490, 440, 490, 490, 490, 428, 490, 430, 490, 490, - /* 2840 */ 433, 434, 435, 436, 437, 438, 490, 440, 490, 490, - /* 2850 */ 490, 490, 490, 490, 428, 490, 430, 490, 342, 433, - /* 2860 */ 434, 435, 436, 437, 438, 490, 440, 490, 352, 490, - /* 2870 */ 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, - /* 2880 */ 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, - /* 2890 */ 490, 490, 490, 490, 490, 490, 490, 381, 490, 490, - /* 2900 */ 490, 490, 490, 490, 490, 490, 490, 490, 392, 490, - /* 2910 */ 394, 490, 490, 490, 490, 490, 490, 490, 490, 490, - /* 2920 */ 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, - /* 2930 */ 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, - /* 2940 */ 490, 490, 490, 490, 428, 490, 430, 490, 490, 433, - /* 2950 */ 434, 435, 436, 437, 438, 490, 440, 339, 339, 339, - /* 2960 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 2970 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 2980 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 2990 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3000 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3010 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3020 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3030 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3040 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3050 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3060 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3070 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3080 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3090 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3100 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3110 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3120 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3130 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3140 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3150 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3160 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3170 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3180 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3190 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3200 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3210 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3220 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3230 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3240 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3250 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3260 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3270 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3280 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - /* 3290 */ 339, 339, 339, 339, 339, 339, + /* 240 */ 240, 241, 242, 243, 244, 12, 13, 20, 447, 398, + /* 250 */ 18, 450, 20, 20, 165, 22, 46, 47, 48, 27, + /* 260 */ 343, 105, 30, 70, 413, 414, 365, 35, 35, 261, + /* 270 */ 37, 8, 9, 356, 373, 12, 13, 14, 15, 16, + /* 280 */ 72, 73, 74, 51, 77, 53, 106, 79, 80, 81, + /* 290 */ 58, 224, 49, 85, 355, 356, 33, 64, 90, 91, + /* 300 */ 92, 93, 385, 70, 96, 394, 113, 245, 397, 398, + /* 310 */ 77, 355, 356, 396, 375, 398, 459, 460, 461, 21, + /* 320 */ 463, 464, 24, 25, 26, 27, 28, 29, 30, 31, + /* 330 */ 32, 176, 105, 171, 172, 102, 104, 261, 105, 272, + /* 340 */ 273, 274, 275, 276, 277, 278, 372, 115, 105, 432, + /* 350 */ 343, 434, 173, 173, 437, 438, 439, 440, 441, 442, + /* 360 */ 386, 444, 20, 170, 447, 0, 449, 450, 451, 106, + /* 370 */ 396, 115, 455, 456, 141, 142, 463, 145, 77, 466, + /* 380 */ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + /* 390 */ 158, 159, 160, 161, 162, 163, 164, 484, 166, 167, + /* 400 */ 168, 488, 489, 396, 171, 172, 0, 385, 434, 435, + /* 410 */ 177, 178, 355, 356, 458, 459, 460, 461, 444, 463, + /* 420 */ 464, 399, 267, 268, 269, 192, 392, 194, 343, 4, + /* 430 */ 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, + /* 440 */ 86, 248, 249, 250, 251, 252, 253, 254, 255, 256, + /* 450 */ 257, 258, 340, 422, 355, 356, 64, 224, 225, 402, + /* 460 */ 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + /* 470 */ 237, 238, 239, 240, 241, 242, 243, 244, 245, 12, + /* 480 */ 13, 396, 20, 141, 142, 343, 37, 20, 261, 22, + /* 490 */ 102, 12, 13, 14, 15, 16, 104, 14, 356, 107, + /* 500 */ 146, 147, 35, 20, 37, 117, 118, 119, 120, 121, + /* 510 */ 122, 123, 124, 125, 126, 344, 128, 129, 130, 131, + /* 520 */ 132, 133, 134, 169, 51, 160, 77, 385, 416, 383, + /* 530 */ 105, 64, 59, 421, 169, 62, 63, 70, 396, 385, + /* 540 */ 398, 395, 8, 9, 77, 391, 12, 13, 14, 15, + /* 550 */ 16, 14, 343, 399, 452, 453, 416, 20, 459, 460, + /* 560 */ 461, 421, 463, 464, 20, 356, 22, 105, 385, 102, + /* 570 */ 397, 398, 105, 355, 432, 463, 434, 343, 466, 437, + /* 580 */ 438, 439, 440, 441, 442, 373, 444, 404, 405, 343, + /* 590 */ 356, 449, 358, 451, 385, 483, 484, 455, 456, 55, + /* 600 */ 488, 489, 245, 463, 247, 396, 466, 398, 141, 142, + /* 610 */ 8, 9, 470, 376, 12, 13, 14, 15, 16, 385, + /* 620 */ 478, 384, 385, 483, 484, 407, 0, 409, 488, 489, + /* 630 */ 396, 463, 398, 492, 466, 355, 356, 393, 171, 172, + /* 640 */ 396, 432, 396, 434, 177, 178, 437, 438, 439, 440, + /* 650 */ 441, 442, 484, 444, 171, 375, 488, 489, 449, 192, + /* 660 */ 451, 194, 382, 351, 455, 456, 432, 355, 434, 357, + /* 670 */ 406, 437, 438, 439, 440, 441, 442, 51, 444, 355, + /* 680 */ 356, 56, 57, 449, 355, 451, 261, 478, 475, 455, + /* 690 */ 456, 224, 225, 416, 227, 228, 229, 230, 231, 232, + /* 700 */ 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + /* 710 */ 243, 244, 12, 13, 14, 385, 0, 343, 184, 22, + /* 720 */ 20, 391, 22, 261, 4, 33, 402, 364, 343, 399, + /* 730 */ 356, 385, 358, 481, 37, 35, 407, 37, 409, 19, + /* 740 */ 463, 8, 9, 466, 381, 12, 13, 14, 15, 16, + /* 750 */ 105, 405, 187, 390, 343, 35, 355, 356, 50, 385, + /* 760 */ 483, 484, 355, 356, 64, 488, 489, 356, 355, 356, + /* 770 */ 396, 51, 398, 380, 77, 173, 375, 77, 58, 214, + /* 780 */ 215, 396, 375, 385, 64, 69, 8, 9, 375, 391, + /* 790 */ 12, 13, 14, 15, 16, 22, 385, 399, 106, 102, + /* 800 */ 355, 356, 102, 362, 343, 105, 432, 396, 434, 398, + /* 810 */ 37, 437, 438, 439, 440, 441, 442, 356, 444, 359, + /* 820 */ 375, 287, 429, 449, 104, 451, 376, 107, 387, 455, + /* 830 */ 456, 12, 13, 385, 384, 385, 191, 343, 193, 106, + /* 840 */ 372, 141, 142, 432, 0, 434, 385, 372, 437, 438, + /* 850 */ 439, 440, 441, 442, 0, 444, 37, 396, 343, 398, + /* 860 */ 18, 376, 451, 360, 361, 23, 455, 456, 223, 384, + /* 870 */ 385, 171, 172, 385, 448, 102, 450, 177, 178, 391, + /* 880 */ 0, 173, 40, 41, 106, 33, 44, 399, 180, 192, + /* 890 */ 396, 194, 192, 432, 194, 434, 54, 45, 437, 438, + /* 900 */ 439, 440, 441, 442, 116, 444, 261, 65, 66, 67, + /* 910 */ 68, 396, 451, 448, 14, 450, 455, 456, 135, 136, + /* 920 */ 20, 224, 225, 140, 224, 225, 138, 227, 228, 229, + /* 930 */ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + /* 940 */ 240, 241, 242, 243, 244, 12, 13, 105, 415, 355, + /* 950 */ 356, 463, 343, 20, 466, 22, 14, 15, 16, 343, + /* 960 */ 116, 3, 1, 2, 436, 356, 355, 356, 35, 375, + /* 970 */ 37, 483, 484, 355, 356, 393, 488, 489, 396, 135, + /* 980 */ 136, 137, 138, 139, 140, 143, 375, 343, 355, 356, + /* 990 */ 462, 355, 356, 375, 385, 385, 116, 64, 135, 364, + /* 1000 */ 356, 391, 358, 355, 356, 396, 13, 398, 375, 399, + /* 1010 */ 77, 375, 396, 194, 4, 135, 136, 137, 138, 139, + /* 1020 */ 140, 39, 40, 375, 343, 390, 184, 185, 186, 385, + /* 1030 */ 37, 189, 355, 356, 359, 102, 170, 343, 105, 354, + /* 1040 */ 396, 432, 398, 434, 202, 203, 437, 438, 439, 440, + /* 1050 */ 441, 442, 375, 444, 393, 213, 372, 396, 216, 355, + /* 1060 */ 356, 219, 220, 221, 222, 223, 416, 106, 205, 206, + /* 1070 */ 386, 171, 218, 372, 141, 142, 432, 396, 434, 375, + /* 1080 */ 396, 437, 438, 439, 440, 441, 442, 386, 444, 480, + /* 1090 */ 396, 109, 110, 449, 112, 451, 406, 396, 116, 455, + /* 1100 */ 456, 355, 356, 261, 171, 172, 355, 356, 360, 361, + /* 1110 */ 177, 178, 362, 463, 248, 208, 466, 210, 434, 136, + /* 1120 */ 138, 375, 42, 140, 258, 192, 375, 194, 444, 379, + /* 1130 */ 343, 355, 356, 483, 484, 434, 33, 387, 488, 489, + /* 1140 */ 343, 22, 8, 9, 343, 444, 12, 13, 14, 15, + /* 1150 */ 16, 375, 356, 356, 37, 343, 37, 224, 225, 343, + /* 1160 */ 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + /* 1170 */ 237, 238, 239, 240, 241, 242, 243, 244, 12, 13, + /* 1180 */ 369, 370, 385, 396, 201, 14, 20, 204, 22, 35, + /* 1190 */ 207, 20, 209, 396, 343, 398, 343, 396, 20, 12, + /* 1200 */ 13, 35, 343, 37, 343, 51, 20, 463, 396, 22, + /* 1210 */ 466, 20, 396, 59, 60, 61, 62, 356, 64, 358, + /* 1220 */ 377, 102, 35, 380, 37, 343, 343, 483, 484, 432, + /* 1230 */ 64, 434, 488, 489, 437, 438, 439, 440, 441, 442, + /* 1240 */ 282, 444, 0, 77, 369, 370, 385, 396, 451, 396, + /* 1250 */ 33, 64, 455, 456, 406, 396, 37, 396, 104, 398, + /* 1260 */ 0, 107, 384, 385, 77, 384, 385, 70, 102, 384, + /* 1270 */ 385, 105, 343, 263, 416, 384, 385, 33, 396, 396, + /* 1280 */ 384, 385, 22, 371, 42, 356, 374, 358, 395, 102, + /* 1290 */ 346, 347, 33, 432, 465, 434, 259, 260, 437, 438, + /* 1300 */ 439, 440, 441, 442, 45, 444, 108, 141, 142, 111, + /* 1310 */ 449, 194, 451, 33, 385, 13, 455, 456, 47, 48, + /* 1320 */ 108, 463, 64, 111, 466, 396, 485, 398, 174, 175, + /* 1330 */ 108, 0, 264, 111, 0, 181, 182, 171, 172, 37, + /* 1340 */ 260, 483, 484, 177, 178, 108, 488, 489, 111, 33, + /* 1350 */ 106, 173, 457, 22, 200, 105, 22, 469, 192, 173, + /* 1360 */ 194, 432, 171, 434, 114, 107, 437, 438, 439, 440, + /* 1370 */ 441, 442, 33, 444, 33, 141, 142, 33, 449, 192, + /* 1380 */ 451, 194, 33, 37, 455, 456, 106, 284, 33, 0, + /* 1390 */ 224, 225, 33, 227, 228, 229, 230, 231, 232, 233, + /* 1400 */ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + /* 1410 */ 244, 224, 225, 194, 33, 33, 1, 2, 343, 33, + /* 1420 */ 33, 224, 106, 77, 237, 238, 239, 240, 241, 242, + /* 1430 */ 243, 356, 417, 358, 51, 13, 433, 33, 33, 13, + /* 1440 */ 20, 52, 426, 343, 431, 106, 207, 106, 364, 33, + /* 1450 */ 106, 426, 33, 364, 33, 106, 356, 190, 419, 37, + /* 1460 */ 385, 106, 33, 37, 20, 106, 356, 403, 45, 20, + /* 1470 */ 356, 396, 406, 398, 403, 170, 20, 401, 355, 401, + /* 1480 */ 356, 355, 403, 401, 368, 385, 101, 106, 106, 367, + /* 1490 */ 355, 103, 106, 106, 100, 366, 396, 355, 398, 355, + /* 1500 */ 355, 20, 50, 286, 348, 343, 348, 432, 20, 434, + /* 1510 */ 106, 106, 437, 438, 439, 440, 441, 442, 356, 444, + /* 1520 */ 352, 352, 106, 426, 449, 106, 451, 106, 364, 398, + /* 1530 */ 455, 456, 432, 20, 434, 106, 364, 437, 438, 439, + /* 1540 */ 440, 441, 442, 20, 444, 357, 418, 385, 364, 449, + /* 1550 */ 357, 451, 348, 364, 364, 455, 456, 355, 396, 364, + /* 1560 */ 398, 385, 385, 364, 385, 385, 343, 385, 385, 355, + /* 1570 */ 385, 346, 346, 211, 105, 348, 430, 396, 428, 356, + /* 1580 */ 362, 426, 198, 362, 425, 424, 423, 197, 396, 196, + /* 1590 */ 396, 417, 343, 355, 432, 271, 434, 270, 398, 437, + /* 1600 */ 438, 439, 440, 441, 442, 356, 444, 406, 385, 406, + /* 1610 */ 474, 449, 396, 451, 474, 279, 343, 455, 456, 396, + /* 1620 */ 411, 398, 411, 183, 396, 396, 396, 474, 477, 356, + /* 1630 */ 265, 281, 280, 476, 385, 288, 493, 417, 473, 472, + /* 1640 */ 356, 471, 285, 343, 283, 396, 486, 398, 20, 436, + /* 1650 */ 115, 260, 357, 362, 262, 432, 356, 434, 385, 362, + /* 1660 */ 437, 438, 439, 440, 441, 442, 20, 444, 411, 396, + /* 1670 */ 409, 398, 449, 468, 451, 467, 411, 396, 455, 456, + /* 1680 */ 175, 432, 396, 434, 396, 385, 437, 438, 439, 440, + /* 1690 */ 441, 442, 443, 444, 445, 446, 396, 487, 398, 396, + /* 1700 */ 396, 408, 396, 380, 362, 432, 105, 434, 454, 356, + /* 1710 */ 437, 438, 439, 440, 441, 442, 362, 444, 105, 374, + /* 1720 */ 388, 396, 355, 343, 22, 362, 38, 349, 420, 412, + /* 1730 */ 412, 363, 432, 0, 434, 0, 356, 437, 438, 439, + /* 1740 */ 440, 441, 442, 345, 444, 343, 427, 348, 378, 378, + /* 1750 */ 378, 451, 341, 0, 45, 0, 456, 37, 356, 217, + /* 1760 */ 37, 37, 37, 490, 491, 385, 217, 0, 37, 389, + /* 1770 */ 217, 37, 0, 343, 217, 0, 396, 37, 398, 0, + /* 1780 */ 22, 0, 37, 212, 0, 200, 356, 385, 0, 200, + /* 1790 */ 194, 389, 201, 0, 192, 0, 0, 188, 396, 187, + /* 1800 */ 398, 0, 0, 49, 0, 37, 0, 51, 49, 0, + /* 1810 */ 45, 0, 432, 0, 434, 385, 0, 437, 438, 439, + /* 1820 */ 440, 441, 442, 49, 444, 0, 396, 0, 398, 160, + /* 1830 */ 0, 37, 160, 0, 432, 0, 434, 0, 0, 437, + /* 1840 */ 438, 439, 440, 441, 442, 0, 444, 49, 0, 0, + /* 1850 */ 45, 0, 0, 343, 0, 0, 0, 0, 0, 0, + /* 1860 */ 0, 0, 432, 0, 434, 0, 356, 437, 438, 439, + /* 1870 */ 440, 441, 442, 0, 444, 343, 0, 0, 0, 0, + /* 1880 */ 0, 0, 0, 0, 22, 0, 0, 144, 356, 0, + /* 1890 */ 0, 22, 50, 22, 50, 385, 0, 0, 64, 0, + /* 1900 */ 64, 37, 0, 64, 0, 37, 396, 0, 398, 0, + /* 1910 */ 0, 37, 482, 0, 42, 45, 0, 385, 51, 14, + /* 1920 */ 0, 389, 183, 0, 0, 37, 51, 0, 396, 42, + /* 1930 */ 398, 37, 0, 42, 42, 51, 33, 0, 43, 0, + /* 1940 */ 343, 0, 432, 42, 434, 0, 0, 437, 438, 439, + /* 1950 */ 440, 441, 442, 356, 444, 49, 42, 49, 37, 0, + /* 1960 */ 49, 42, 343, 37, 432, 0, 434, 42, 51, 437, + /* 1970 */ 438, 439, 440, 441, 442, 356, 444, 37, 42, 51, + /* 1980 */ 51, 37, 385, 71, 51, 42, 0, 0, 0, 0, + /* 1990 */ 0, 37, 22, 396, 0, 398, 20, 37, 37, 37, + /* 2000 */ 37, 491, 33, 37, 385, 37, 113, 33, 389, 111, + /* 2010 */ 37, 0, 37, 343, 37, 396, 37, 398, 22, 0, + /* 2020 */ 22, 22, 0, 22, 53, 0, 356, 343, 37, 432, + /* 2030 */ 0, 434, 0, 0, 437, 438, 439, 440, 441, 442, + /* 2040 */ 356, 444, 37, 446, 37, 0, 22, 37, 106, 37, + /* 2050 */ 37, 432, 105, 434, 0, 385, 437, 438, 439, 440, + /* 2060 */ 441, 442, 105, 444, 37, 199, 396, 0, 398, 385, + /* 2070 */ 22, 22, 0, 389, 0, 33, 3, 33, 266, 50, + /* 2080 */ 396, 50, 398, 105, 103, 101, 106, 105, 173, 106, + /* 2090 */ 33, 173, 49, 33, 33, 195, 49, 266, 106, 106, + /* 2100 */ 343, 106, 432, 106, 434, 175, 3, 437, 438, 439, + /* 2110 */ 440, 441, 442, 356, 444, 33, 432, 179, 434, 105, + /* 2120 */ 1, 437, 438, 439, 440, 441, 442, 179, 444, 173, + /* 2130 */ 37, 173, 37, 105, 37, 37, 37, 37, 19, 105, + /* 2140 */ 105, 49, 385, 106, 106, 33, 0, 0, 42, 0, + /* 2150 */ 49, 105, 42, 396, 35, 398, 49, 105, 343, 106, + /* 2160 */ 49, 106, 33, 105, 114, 2, 22, 105, 105, 105, + /* 2170 */ 51, 356, 343, 103, 103, 224, 176, 174, 59, 60, + /* 2180 */ 61, 62, 105, 64, 106, 356, 105, 49, 105, 432, + /* 2190 */ 343, 434, 106, 259, 437, 438, 439, 440, 441, 442, + /* 2200 */ 385, 444, 106, 356, 49, 22, 115, 105, 37, 105, + /* 2210 */ 246, 396, 37, 398, 385, 37, 266, 37, 37, 106, + /* 2220 */ 105, 37, 106, 104, 106, 396, 107, 398, 226, 105, + /* 2230 */ 105, 105, 385, 106, 106, 105, 37, 106, 105, 22, + /* 2240 */ 106, 105, 33, 396, 127, 398, 105, 432, 127, 434, + /* 2250 */ 105, 37, 437, 438, 439, 440, 441, 442, 139, 444, + /* 2260 */ 22, 432, 127, 434, 127, 343, 437, 438, 439, 440, + /* 2270 */ 441, 442, 116, 444, 105, 71, 70, 37, 356, 432, + /* 2280 */ 37, 434, 37, 37, 437, 438, 439, 440, 441, 442, + /* 2290 */ 77, 444, 343, 174, 37, 37, 37, 37, 33, 99, + /* 2300 */ 181, 37, 22, 37, 37, 356, 37, 385, 37, 37, + /* 2310 */ 77, 37, 37, 37, 37, 343, 37, 22, 396, 200, + /* 2320 */ 398, 37, 0, 37, 51, 42, 0, 37, 356, 51, + /* 2330 */ 42, 0, 51, 37, 385, 42, 0, 37, 51, 42, + /* 2340 */ 0, 37, 37, 0, 33, 396, 22, 398, 20, 22, + /* 2350 */ 21, 21, 343, 494, 432, 22, 434, 385, 494, 437, + /* 2360 */ 438, 439, 440, 441, 442, 356, 444, 22, 396, 494, + /* 2370 */ 398, 494, 494, 494, 494, 494, 494, 494, 494, 343, + /* 2380 */ 494, 432, 494, 434, 494, 494, 437, 438, 439, 440, + /* 2390 */ 441, 442, 356, 444, 385, 494, 494, 494, 494, 494, + /* 2400 */ 494, 494, 343, 494, 432, 396, 434, 398, 494, 437, + /* 2410 */ 438, 439, 440, 441, 442, 356, 444, 494, 494, 494, + /* 2420 */ 494, 385, 494, 494, 494, 494, 494, 494, 494, 494, + /* 2430 */ 494, 494, 396, 494, 398, 494, 494, 494, 494, 494, + /* 2440 */ 494, 432, 494, 434, 385, 494, 437, 438, 439, 440, + /* 2450 */ 441, 442, 343, 444, 494, 396, 494, 398, 494, 494, + /* 2460 */ 494, 494, 494, 494, 494, 356, 343, 494, 432, 494, + /* 2470 */ 434, 494, 494, 437, 438, 439, 440, 441, 442, 356, + /* 2480 */ 444, 494, 343, 494, 494, 494, 494, 494, 494, 494, + /* 2490 */ 494, 432, 494, 434, 385, 356, 437, 438, 439, 440, + /* 2500 */ 441, 442, 494, 444, 494, 396, 494, 398, 385, 494, + /* 2510 */ 494, 494, 494, 494, 494, 494, 494, 494, 494, 396, + /* 2520 */ 494, 398, 494, 494, 385, 494, 494, 494, 494, 494, + /* 2530 */ 494, 494, 494, 494, 494, 396, 494, 398, 494, 494, + /* 2540 */ 494, 432, 494, 434, 494, 343, 437, 438, 439, 440, + /* 2550 */ 441, 442, 494, 444, 494, 432, 494, 434, 356, 494, + /* 2560 */ 437, 438, 439, 440, 441, 442, 494, 444, 494, 343, + /* 2570 */ 494, 432, 494, 434, 494, 494, 437, 438, 439, 440, + /* 2580 */ 441, 442, 356, 444, 494, 494, 494, 385, 494, 494, + /* 2590 */ 494, 494, 494, 494, 494, 494, 343, 494, 396, 494, + /* 2600 */ 398, 494, 494, 494, 494, 494, 494, 494, 494, 356, + /* 2610 */ 494, 385, 494, 494, 494, 494, 494, 494, 494, 494, + /* 2620 */ 494, 494, 396, 494, 398, 494, 494, 494, 494, 494, + /* 2630 */ 494, 494, 494, 494, 432, 494, 434, 494, 385, 437, + /* 2640 */ 438, 439, 440, 441, 442, 494, 444, 494, 494, 396, + /* 2650 */ 494, 398, 494, 494, 494, 494, 494, 494, 432, 343, + /* 2660 */ 434, 494, 494, 437, 438, 439, 440, 441, 442, 494, + /* 2670 */ 444, 494, 356, 494, 494, 494, 494, 494, 494, 494, + /* 2680 */ 494, 494, 494, 494, 494, 432, 494, 434, 494, 343, + /* 2690 */ 437, 438, 439, 440, 441, 442, 494, 444, 494, 494, + /* 2700 */ 494, 385, 356, 494, 494, 494, 494, 494, 494, 343, + /* 2710 */ 494, 494, 396, 494, 398, 494, 494, 494, 494, 494, + /* 2720 */ 494, 494, 356, 494, 494, 494, 494, 494, 494, 494, + /* 2730 */ 494, 385, 494, 494, 494, 494, 494, 494, 494, 494, + /* 2740 */ 494, 494, 396, 494, 398, 494, 494, 494, 432, 494, + /* 2750 */ 434, 385, 494, 437, 438, 439, 440, 441, 442, 343, + /* 2760 */ 444, 494, 396, 494, 398, 494, 494, 494, 494, 494, + /* 2770 */ 494, 494, 356, 494, 494, 494, 343, 494, 432, 494, + /* 2780 */ 434, 494, 494, 437, 438, 439, 440, 441, 442, 356, + /* 2790 */ 444, 494, 494, 494, 494, 494, 494, 494, 432, 494, + /* 2800 */ 434, 385, 494, 437, 438, 439, 440, 441, 442, 494, + /* 2810 */ 444, 494, 396, 494, 398, 494, 494, 494, 385, 494, + /* 2820 */ 494, 494, 494, 494, 494, 494, 494, 494, 494, 396, + /* 2830 */ 494, 398, 494, 494, 494, 494, 494, 494, 494, 494, + /* 2840 */ 494, 494, 494, 494, 494, 494, 494, 494, 432, 494, + /* 2850 */ 434, 494, 494, 437, 438, 439, 440, 441, 442, 494, + /* 2860 */ 444, 494, 494, 494, 494, 432, 494, 434, 494, 494, + /* 2870 */ 437, 438, 439, 440, 441, 442, 494, 444, 340, 340, + /* 2880 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2890 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2900 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2910 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2920 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2930 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2940 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2950 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2960 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2970 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2980 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 2990 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3000 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3010 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3020 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3030 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3040 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3050 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3060 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3070 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3080 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3090 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3100 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3110 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3120 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3130 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3140 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3150 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3160 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3170 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3180 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3190 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3200 */ 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + /* 3210 */ 340, 340, 340, 340, 340, 340, 340, 340, }; -#define YY_SHIFT_COUNT (800) +#define YY_SHIFT_COUNT (808) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (2334) +#define YY_SHIFT_MAX (2345) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 1005, 0, 104, 0, 337, 337, 337, 337, 337, 337, - /* 10 */ 337, 337, 337, 337, 337, 337, 441, 673, 673, 777, - /* 20 */ 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, - /* 30 */ 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, - /* 40 */ 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, - /* 50 */ 673, 66, 111, 619, 380, 91, 109, 91, 380, 380, - /* 60 */ 91, 1489, 91, 1489, 1489, 257, 91, 35, 677, 170, - /* 70 */ 170, 677, 4, 4, 302, 167, 495, 495, 170, 170, - /* 80 */ 170, 170, 170, 170, 170, 170, 170, 170, 199, 170, - /* 90 */ 170, 181, 35, 170, 170, 262, 35, 170, 199, 170, - /* 100 */ 199, 35, 170, 170, 35, 170, 35, 35, 35, 170, - /* 110 */ 247, 1004, 15, 15, 513, 171, 1109, 1109, 1109, 1109, - /* 120 */ 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, - /* 130 */ 1109, 1109, 1109, 1109, 1109, 321, 520, 302, 167, 944, - /* 140 */ 944, 436, 290, 290, 290, 698, 260, 260, 436, 181, - /* 150 */ 35, 35, 35, 35, 268, 151, 35, 315, 35, 315, - /* 160 */ 315, 288, 344, 28, 28, 28, 28, 2031, 448, 225, - /* 170 */ 371, 30, 481, 32, 130, 602, 602, 870, 568, 971, - /* 180 */ 973, 1019, 1168, 826, 656, 1087, 1003, 1008, 641, 1003, - /* 190 */ 1012, 957, 1116, 1120, 1347, 1378, 1211, 181, 1378, 181, - /* 200 */ 1240, 1414, 1395, 1421, 1414, 1395, 1277, 1427, 1414, 1427, - /* 210 */ 1395, 1277, 1277, 1357, 1356, 1427, 1365, 1427, 1427, 1427, - /* 220 */ 1451, 1434, 1451, 1434, 1378, 181, 1486, 181, 1492, 1495, - /* 230 */ 181, 1492, 181, 181, 181, 1427, 181, 1451, 35, 35, - /* 240 */ 35, 35, 35, 35, 35, 1427, 1451, 315, 315, 315, - /* 250 */ 1340, 1457, 1378, 247, 1368, 1372, 1486, 247, 1374, 1120, - /* 260 */ 1427, 1421, 1421, 315, 1308, 1310, 315, 1308, 1310, 315, - /* 270 */ 315, 35, 1313, 1411, 1308, 1330, 1333, 1352, 1120, 1344, - /* 280 */ 1349, 1358, 1370, 1414, 1618, 1529, 1384, 1492, 247, 247, - /* 290 */ 1628, 1310, 315, 315, 315, 315, 315, 1310, 315, 1496, - /* 300 */ 247, 288, 247, 1414, 1570, 1580, 315, 344, 1427, 247, - /* 310 */ 1655, 1451, 2957, 2957, 2957, 2957, 2957, 2957, 2957, 2957, - /* 320 */ 2957, 1002, 930, 259, 646, 419, 718, 815, 721, 1036, - /* 330 */ 1107, 1050, 837, 1164, 1164, 1164, 1164, 1164, 1164, 1164, - /* 340 */ 1164, 1164, 821, 1046, 968, 968, 297, 160, 319, 550, - /* 350 */ 689, 929, 1111, 738, 88, 514, 514, 1085, 937, 955, - /* 360 */ 1085, 1085, 1085, 1258, 112, 1195, 898, 1086, 1069, 17, - /* 370 */ 1098, 1191, 1196, 1198, 1161, 1229, 1290, 1294, 1296, 1072, - /* 380 */ 1253, 1260, 1209, 1265, 1266, 1269, 1179, 1094, 1106, 1271, - /* 390 */ 1278, 1281, 1283, 1284, 1286, 1353, 1307, 1204, 1314, 918, - /* 400 */ 1315, 1321, 1324, 1328, 1332, 1334, 1268, 1151, 1282, 1354, - /* 410 */ 1366, 1291, 1345, 1705, 1707, 1709, 1669, 1714, 1680, 1500, - /* 420 */ 1682, 1683, 1684, 1504, 1721, 1687, 1689, 1516, 1733, 1519, - /* 430 */ 1737, 1703, 1739, 1719, 1751, 1708, 1533, 1753, 1555, 1756, - /* 440 */ 1558, 1560, 1565, 1571, 1761, 1766, 1767, 1581, 1583, 1771, - /* 450 */ 1773, 1727, 1781, 1748, 1735, 1785, 1740, 1786, 1746, 1789, - /* 460 */ 1790, 1791, 1745, 1793, 1795, 1796, 1797, 1799, 1800, 1642, - /* 470 */ 1768, 1802, 1645, 1806, 1808, 1809, 1810, 1811, 1812, 1814, - /* 480 */ 1815, 1816, 1817, 1819, 1820, 1821, 1822, 1824, 1825, 1779, - /* 490 */ 1828, 1787, 1830, 1831, 1832, 1833, 1834, 1835, 1818, 1836, - /* 500 */ 1838, 1839, 1699, 1845, 1855, 1837, 1813, 1840, 1823, 1860, - /* 510 */ 1805, 1829, 1868, 1807, 1870, 1826, 1872, 1873, 1841, 1843, - /* 520 */ 1846, 1874, 1847, 1844, 1848, 1875, 1849, 1851, 1850, 1878, - /* 530 */ 1856, 1880, 1853, 1863, 1854, 1865, 1869, 1867, 1879, 1886, - /* 540 */ 1877, 1864, 1890, 1897, 1910, 1888, 1675, 1858, 1928, 1929, - /* 550 */ 1862, 1934, 1941, 1909, 1896, 1907, 1947, 1913, 1901, 1912, - /* 560 */ 1952, 1919, 1906, 1917, 1958, 1925, 1916, 1923, 1961, 1967, - /* 570 */ 1968, 1969, 1970, 1971, 1861, 1866, 1939, 1953, 1977, 1943, - /* 580 */ 1944, 1945, 1946, 1949, 1951, 1955, 1938, 1950, 1956, 1960, - /* 590 */ 1965, 1962, 1993, 1974, 1998, 1981, 1963, 2004, 1989, 1978, - /* 600 */ 2015, 1982, 2016, 1983, 2022, 2001, 2014, 2003, 2011, 2013, - /* 610 */ 1932, 1936, 2049, 1881, 1948, 1859, 2017, 2032, 2056, 1882, - /* 620 */ 2036, 1889, 1892, 2060, 2062, 1895, 1891, 1899, 1900, 2065, - /* 630 */ 2029, 1827, 1972, 1975, 1979, 2026, 1976, 2035, 1985, 1992, - /* 640 */ 2037, 2042, 1994, 1984, 1996, 1997, 1999, 2053, 2054, 2055, - /* 650 */ 2006, 2066, 1852, 2000, 2019, 2116, 2076, 1887, 2086, 2090, - /* 660 */ 2091, 2092, 2093, 2094, 2027, 2030, 2083, 1884, 2095, 2097, - /* 670 */ 2138, 2140, 2051, 2117, 1865, 2098, 2052, 2058, 2059, 2057, - /* 680 */ 2061, 1990, 2063, 2157, 2119, 1986, 2064, 2069, 1865, 2121, - /* 690 */ 2126, 2074, 1940, 2085, 2185, 2166, 1966, 2087, 2088, 2099, - /* 700 */ 2089, 2100, 2096, 2144, 2102, 2103, 2148, 2108, 2175, 2002, - /* 710 */ 2104, 2082, 2115, 2163, 2186, 2122, 2118, 2189, 2125, 2127, - /* 720 */ 2191, 2129, 2131, 2194, 2130, 2133, 2204, 2139, 2136, 2206, - /* 730 */ 2141, 2075, 2120, 2128, 2132, 2221, 2142, 2145, 2201, 2149, - /* 740 */ 2212, 2150, 2201, 2201, 2233, 2187, 2193, 2224, 2227, 2228, - /* 750 */ 2230, 2231, 2232, 2234, 2236, 2198, 2171, 2237, 2248, 2249, - /* 760 */ 2251, 2266, 2263, 2264, 2269, 2226, 1938, 2270, 1950, 2271, - /* 770 */ 2272, 2273, 2274, 2288, 2276, 2296, 2277, 2268, 2279, 2313, - /* 780 */ 2284, 2278, 2281, 2321, 2287, 2280, 2285, 2323, 2291, 2282, - /* 790 */ 2289, 2330, 2297, 2298, 2334, 2315, 2314, 2317, 2318, 2326, - /* 800 */ 2329, + /* 0 */ 842, 0, 233, 0, 467, 467, 467, 467, 467, 467, + /* 10 */ 467, 467, 467, 467, 467, 467, 700, 933, 933, 1166, + /* 20 */ 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, + /* 30 */ 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, + /* 40 */ 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, + /* 50 */ 933, 227, 462, 645, 156, 8, 76, 8, 156, 156, + /* 60 */ 8, 1187, 8, 1187, 1187, 425, 8, 23, 18, 56, + /* 70 */ 56, 18, 210, 210, 162, 342, 537, 537, 56, 56, + /* 80 */ 56, 56, 56, 56, 56, 56, 56, 56, 84, 56, + /* 90 */ 56, 68, 23, 56, 56, 128, 23, 56, 84, 56, + /* 100 */ 84, 23, 56, 56, 23, 56, 23, 23, 23, 56, + /* 110 */ 96, 232, 193, 193, 208, 298, 697, 697, 697, 697, + /* 120 */ 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, + /* 130 */ 697, 697, 697, 697, 697, 982, 180, 162, 342, 625, + /* 140 */ 625, 449, 179, 179, 179, 716, 357, 357, 449, 68, + /* 150 */ 23, 23, 23, 23, 54, 62, 23, 207, 23, 207, + /* 160 */ 207, 256, 301, 405, 388, 388, 388, 388, 2119, 71, + /* 170 */ 21, 53, 534, 67, 148, 155, 819, 819, 483, 708, + /* 180 */ 900, 544, 1178, 1271, 1171, 788, 1186, 1037, 1080, 958, + /* 190 */ 1037, 852, 1010, 1191, 1068, 1383, 1420, 1239, 68, 1420, + /* 200 */ 68, 1267, 1444, 1423, 1449, 1444, 1423, 1305, 1456, 1444, + /* 210 */ 1456, 1423, 1305, 1305, 1388, 1385, 1456, 1394, 1456, 1456, + /* 220 */ 1456, 1481, 1452, 1481, 1452, 1420, 68, 1488, 68, 1513, + /* 230 */ 1523, 68, 1513, 68, 68, 68, 1456, 68, 1481, 23, + /* 240 */ 23, 23, 23, 23, 23, 23, 1456, 405, 405, 1481, + /* 250 */ 207, 207, 207, 1362, 1469, 1420, 96, 1384, 1390, 1488, + /* 260 */ 96, 1393, 1068, 1456, 1449, 1449, 207, 1324, 1327, 207, + /* 270 */ 1324, 1327, 207, 207, 23, 1336, 1440, 1324, 1350, 1352, + /* 280 */ 1365, 1068, 1347, 1357, 1361, 1391, 1444, 1628, 1535, 1392, + /* 290 */ 1513, 96, 96, 1646, 1327, 207, 207, 207, 207, 207, + /* 300 */ 1327, 207, 1505, 96, 256, 96, 1444, 1601, 1613, 207, + /* 310 */ 301, 1456, 96, 1702, 1688, 1481, 2878, 2878, 2878, 2878, + /* 320 */ 2878, 2878, 2878, 2878, 2878, 36, 1154, 406, 263, 720, + /* 330 */ 733, 778, 844, 15, 72, 602, 880, 1134, 1134, 1134, + /* 340 */ 1134, 1134, 1134, 1134, 1134, 1134, 82, 983, 20, 479, + /* 350 */ 479, 354, 473, 565, 365, 392, 773, 1119, 863, 783, + /* 360 */ 783, 942, 961, 866, 942, 942, 942, 626, 854, 692, + /* 370 */ 1242, 1259, 89, 39, 1198, 1212, 1222, 1237, 993, 1302, + /* 380 */ 1260, 1331, 1334, 907, 1244, 1280, 1258, 1316, 1339, 1341, + /* 390 */ 1234, 1103, 1217, 1344, 1349, 1355, 1359, 1381, 1382, 1415, + /* 400 */ 1386, 1197, 1387, 243, 1404, 1405, 1416, 1419, 1421, 1429, + /* 410 */ 1250, 1117, 1219, 1422, 1426, 1346, 1389, 1733, 1735, 1753, + /* 420 */ 1709, 1755, 1720, 1542, 1723, 1724, 1725, 1549, 1767, 1731, + /* 430 */ 1734, 1553, 1772, 1557, 1775, 1740, 1779, 1758, 1781, 1745, + /* 440 */ 1571, 1784, 1585, 1788, 1589, 1591, 1596, 1602, 1793, 1795, + /* 450 */ 1796, 1609, 1612, 1801, 1802, 1754, 1804, 1768, 1756, 1806, + /* 460 */ 1759, 1809, 1765, 1811, 1813, 1816, 1774, 1825, 1827, 1835, + /* 470 */ 1837, 1838, 1845, 1669, 1794, 1830, 1672, 1833, 1854, 1855, + /* 480 */ 1856, 1857, 1858, 1859, 1860, 1861, 1863, 1865, 1873, 1876, + /* 490 */ 1877, 1878, 1879, 1798, 1848, 1805, 1849, 1851, 1852, 1880, + /* 500 */ 1881, 1882, 1862, 1883, 1885, 1886, 1743, 1889, 1890, 1869, + /* 510 */ 1842, 1871, 1844, 1896, 1834, 1864, 1897, 1836, 1899, 1839, + /* 520 */ 1902, 1904, 1868, 1867, 1872, 1907, 1874, 1875, 1887, 1909, + /* 530 */ 1888, 1884, 1891, 1910, 1894, 1913, 1870, 1892, 1903, 1906, + /* 540 */ 1908, 1905, 1911, 1916, 1895, 1901, 1920, 1927, 1932, 1914, + /* 550 */ 1739, 1923, 1924, 1937, 1912, 1939, 1941, 1921, 1917, 1919, + /* 560 */ 1945, 1926, 1928, 1925, 1946, 1940, 1929, 1936, 1959, 1944, + /* 570 */ 1933, 1943, 1965, 1986, 1987, 1988, 1989, 1990, 1893, 1898, + /* 580 */ 1954, 1970, 1994, 1960, 1961, 1962, 1963, 1966, 1968, 1973, + /* 590 */ 1969, 1974, 1975, 1977, 1996, 1979, 2011, 1998, 2019, 1999, + /* 600 */ 1971, 2022, 2001, 1991, 2025, 2030, 2032, 2005, 2033, 2007, + /* 610 */ 2045, 2024, 1976, 2010, 2012, 2013, 1942, 1947, 2054, 1915, + /* 620 */ 1957, 1866, 2027, 2048, 2067, 1900, 2049, 1918, 1930, 2072, + /* 630 */ 2074, 1956, 1938, 1958, 1948, 2073, 2042, 1812, 1978, 1980, + /* 640 */ 1982, 2029, 1981, 2031, 1984, 1983, 2044, 2057, 1992, 2014, + /* 650 */ 2028, 2034, 1993, 2060, 2043, 2047, 2035, 2061, 1831, 1995, + /* 660 */ 1997, 2103, 2082, 1950, 2093, 2095, 2097, 2098, 2099, 2100, + /* 670 */ 2037, 2038, 2092, 1934, 2112, 2101, 2146, 2147, 2046, 2106, + /* 680 */ 1906, 2107, 2052, 2053, 2055, 2058, 2062, 2000, 2063, 2149, + /* 690 */ 2110, 2003, 2064, 2050, 1906, 2111, 2129, 2070, 1964, 2071, + /* 700 */ 2163, 2144, 1951, 2077, 2078, 2081, 2086, 2083, 2096, 2138, + /* 710 */ 2102, 2104, 2155, 2113, 2183, 2002, 2115, 2091, 2116, 2171, + /* 720 */ 2175, 2124, 2118, 2178, 2125, 2127, 2180, 2126, 2128, 2181, + /* 730 */ 2130, 2131, 2184, 2133, 2134, 2199, 2136, 2117, 2121, 2135, + /* 740 */ 2137, 2217, 2156, 2141, 2209, 2145, 2214, 2169, 2209, 2209, + /* 750 */ 2238, 2204, 2206, 2240, 2243, 2245, 2246, 2257, 2258, 2259, + /* 760 */ 2260, 2213, 2200, 2265, 2264, 2266, 2267, 2280, 2269, 2271, + /* 770 */ 2272, 2233, 1969, 2274, 1974, 2275, 2276, 2277, 2279, 2295, + /* 780 */ 2284, 2322, 2286, 2273, 2283, 2326, 2290, 2278, 2288, 2331, + /* 790 */ 2296, 2281, 2293, 2336, 2300, 2287, 2297, 2340, 2304, 2305, + /* 800 */ 2343, 2324, 2311, 2327, 2329, 2333, 2345, 2330, 2328, }; -#define YY_REDUCE_COUNT (320) -#define YY_REDUCE_MIN (-439) -#define YY_REDUCE_MAX (2516) +#define YY_REDUCE_COUNT (324) +#define YY_REDUCE_MIN (-381) +#define YY_REDUCE_MAX (2433) static const short yy_reduce_ofst[] = { - /* 0 */ 284, -341, -134, -27, 205, 840, 901, 969, 1032, 1058, - /* 10 */ 1093, 1162, 1190, 368, 1225, 1312, 52, 118, 347, 493, - /* 20 */ 1342, 1413, 1471, 1485, 1502, 1572, 1591, 1607, 1678, 1713, - /* 30 */ 1743, 1780, 1842, 1857, 1908, 1922, 1973, 2033, 2048, 2106, - /* 40 */ 2123, 2137, 2174, 2195, 2261, 2275, 2292, 2391, 2407, 2426, - /* 50 */ 2516, -274, 232, 409, -292, -371, 655, 756, -136, 41, - /* 60 */ 804, -366, 146, -311, -310, -107, 482, -19, -391, -346, - /* 70 */ -315, -287, -280, -270, -266, -117, -215, -173, -250, -73, - /* 80 */ 63, 70, -209, 37, 98, 258, 295, 363, 23, 336, - /* 90 */ 373, 359, -297, 415, 511, 114, 64, 496, 184, 521, - /* 100 */ 300, 398, 524, 598, 241, 626, 489, 342, 562, 761, - /* 110 */ 81, -278, -439, -439, -5, -168, 24, 75, 137, 142, - /* 120 */ 203, 400, 446, 604, 644, 685, 783, 795, 803, 807, - /* 130 */ 855, 856, 858, 859, 868, -16, -1, 121, 227, 770, - /* 140 */ 786, 559, -1, 384, 393, 355, 154, 256, 838, 202, - /* 150 */ 848, 850, 857, 864, -271, 435, 876, -385, -347, 494, - /* 160 */ 543, 657, 735, -388, -367, 218, -388, 245, 431, 464, - /* 170 */ 430, 377, 414, 565, 523, 693, 956, 888, 614, 888, - /* 180 */ 985, 940, 993, 995, 958, 954, 899, 899, 881, 899, - /* 190 */ 927, 928, 888, 979, 965, 986, 988, 1062, 1001, 1070, - /* 200 */ 1016, 1081, 1041, 1040, 1091, 1045, 1051, 1100, 1097, 1102, - /* 210 */ 1055, 1059, 1060, 1095, 1101, 1110, 1114, 1122, 1127, 1129, - /* 220 */ 1137, 1141, 1146, 1149, 1077, 1140, 1113, 1148, 1160, 1103, - /* 230 */ 1156, 1165, 1159, 1174, 1175, 1169, 1176, 1181, 1158, 1166, - /* 240 */ 1167, 1171, 1172, 1177, 1178, 1186, 1197, 1154, 1157, 1163, - /* 250 */ 1131, 1138, 1139, 1205, 1145, 1150, 1180, 1214, 1182, 1170, - /* 260 */ 1222, 1173, 1183, 1184, 1117, 1187, 1188, 1118, 1201, 1189, - /* 270 */ 1194, 888, 1130, 1132, 1135, 1142, 1147, 1155, 1208, 1143, - /* 280 */ 1153, 1152, 899, 1287, 1212, 1185, 1193, 1293, 1289, 1292, - /* 290 */ 1246, 1245, 1274, 1275, 1276, 1279, 1295, 1250, 1297, 1270, - /* 300 */ 1311, 1299, 1320, 1327, 1231, 1301, 1298, 1316, 1337, 1338, - /* 310 */ 1350, 1348, 1285, 1280, 1300, 1302, 1323, 1325, 1326, 1339, - /* 320 */ 1362, + /* 0 */ 112, 142, -83, 209, 234, 374, 644, 861, 929, 1075, + /* 10 */ 1100, 1162, 1223, 411, 461, 797, 1249, -341, 1273, 1300, + /* 20 */ 609, 1380, 1402, 1430, 1510, 1532, 1597, 1619, 1684, 1670, + /* 30 */ 1757, 1815, 1829, 1847, 1922, 1949, 1972, 2009, 2036, 2059, + /* 40 */ 2109, 2123, 2139, 2202, 2226, 2253, 2316, 2346, 2366, 2416, + /* 50 */ 2433, -273, 488, 140, -44, -309, 277, 650, -143, 99, + /* 60 */ 858, -26, 744, 684, 701, -87, 168, -366, -335, -209, + /* 70 */ 280, -149, -350, -345, 183, -89, -202, 312, -349, -61, + /* 80 */ 401, 407, -266, 57, 413, 445, 594, 324, -315, 611, + /* 90 */ 618, 363, 154, 633, 636, -250, 330, 648, 218, 677, + /* 100 */ 329, 237, 704, 746, 398, 751, 450, 610, 485, 776, + /* 110 */ 750, -260, 102, 102, -99, -310, -342, 7, 85, 246, + /* 120 */ 385, 494, 515, 616, 681, 694, 787, 801, 812, 816, + /* 130 */ 851, 853, 859, 882, 883, 146, -278, 346, 173, 503, + /* 140 */ 748, 811, -278, -239, 528, 441, 426, 465, 875, 635, + /* 150 */ 878, 881, 885, 891, 393, -199, 896, 244, 22, 582, + /* 160 */ 661, 843, 912, 944, -381, -376, 34, -381, 31, 212, + /* 170 */ 171, 264, 141, 252, 460, 213, 468, 475, 448, 533, + /* 180 */ 448, 675, 690, 685, 796, 893, 848, 829, 829, 841, + /* 190 */ 829, 895, 888, 448, 1015, 1003, 1016, 1013, 1084, 1025, + /* 200 */ 1089, 1039, 1110, 1064, 1066, 1114, 1071, 1076, 1123, 1124, + /* 210 */ 1126, 1079, 1078, 1082, 1116, 1122, 1135, 1129, 1142, 1144, + /* 220 */ 1145, 1156, 1168, 1158, 1169, 1097, 1164, 1131, 1172, 1188, + /* 230 */ 1128, 1184, 1193, 1189, 1190, 1195, 1202, 1199, 1204, 1176, + /* 240 */ 1177, 1179, 1180, 1182, 1183, 1185, 1214, 1225, 1226, 1227, + /* 250 */ 1181, 1192, 1194, 1146, 1150, 1155, 1218, 1159, 1161, 1200, + /* 260 */ 1221, 1163, 1174, 1238, 1201, 1203, 1216, 1136, 1209, 1228, + /* 270 */ 1140, 1211, 1229, 1230, 448, 1151, 1157, 1153, 1165, 1167, + /* 280 */ 1170, 1220, 1143, 1210, 1160, 829, 1284, 1213, 1205, 1208, + /* 290 */ 1295, 1291, 1297, 1261, 1257, 1281, 1286, 1288, 1303, 1304, + /* 300 */ 1265, 1306, 1293, 1342, 1323, 1354, 1353, 1254, 1332, 1325, + /* 310 */ 1345, 1367, 1363, 1398, 1378, 1399, 1308, 1319, 1317, 1318, + /* 320 */ 1370, 1371, 1372, 1368, 1411, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 10 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 20 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 30 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 40 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 50 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 60 */ 2100, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 70 */ 1788, 1788, 1788, 1788, 2073, 1788, 1788, 1788, 1788, 1788, - /* 80 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 90 */ 1788, 1877, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 100 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 110 */ 1875, 2066, 2292, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 120 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 130 */ 1788, 1788, 1788, 1788, 1788, 1788, 2304, 1788, 1788, 1851, - /* 140 */ 1851, 1788, 2304, 2304, 2304, 1875, 2264, 2264, 1788, 1877, - /* 150 */ 1788, 1788, 1788, 1788, 2134, 1788, 1788, 1788, 1788, 1788, - /* 160 */ 1788, 1998, 1788, 2022, 1788, 1788, 1788, 2126, 1788, 1788, - /* 170 */ 2333, 2390, 1788, 1788, 2336, 1788, 1788, 1788, 1788, 1788, - /* 180 */ 1788, 2078, 1788, 1788, 1950, 2323, 2296, 2310, 2374, 2297, - /* 190 */ 2294, 2317, 1788, 2327, 1788, 1788, 2148, 1877, 1788, 1877, - /* 200 */ 2113, 1788, 2071, 1788, 1788, 2071, 2068, 1788, 1788, 1788, - /* 210 */ 2071, 2068, 2068, 1939, 1935, 1788, 1933, 1788, 1788, 1788, - /* 220 */ 1788, 1835, 1788, 1835, 1788, 1877, 1788, 1877, 1788, 1788, - /* 230 */ 1877, 1788, 1877, 1877, 1877, 1788, 1877, 1788, 1788, 1788, - /* 240 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 250 */ 2146, 2132, 1788, 1875, 2124, 2122, 1788, 1875, 2120, 2327, - /* 260 */ 1788, 1788, 1788, 1788, 2344, 2342, 1788, 2344, 2342, 1788, - /* 270 */ 1788, 1788, 2358, 2354, 2344, 2363, 2360, 2329, 2327, 2393, - /* 280 */ 2380, 2376, 2310, 1788, 1788, 2315, 2313, 1788, 1875, 1875, - /* 290 */ 1788, 2342, 1788, 1788, 1788, 1788, 1788, 2342, 1788, 1788, - /* 300 */ 1875, 1788, 1875, 1788, 1788, 1966, 1788, 1788, 1788, 1875, - /* 310 */ 1820, 1788, 2115, 2137, 2096, 2096, 2001, 2001, 2001, 1878, - /* 320 */ 1793, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 330 */ 1788, 1788, 1788, 2357, 2356, 2219, 1788, 2268, 2267, 2266, - /* 340 */ 2257, 2218, 1962, 1788, 2217, 2216, 1788, 1788, 1788, 1788, - /* 350 */ 1788, 1788, 1788, 1788, 1788, 2087, 2086, 2210, 1788, 1788, - /* 360 */ 2211, 2209, 2208, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 370 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 380 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 2377, 2381, 1788, - /* 390 */ 1788, 1788, 1788, 1788, 1788, 2293, 1788, 1788, 1788, 2192, - /* 400 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 410 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 420 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 430 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 440 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 450 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 460 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 470 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 480 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 490 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 500 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 510 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 520 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 530 */ 1788, 1788, 1788, 1788, 1825, 2197, 1788, 1788, 1788, 1788, - /* 540 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 550 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 560 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 570 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 580 */ 1788, 1788, 1788, 1788, 1788, 1788, 1916, 1915, 1788, 1788, - /* 590 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 600 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 610 */ 2201, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 620 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 2373, - /* 630 */ 2330, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 640 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 2192, - /* 650 */ 1788, 2355, 1788, 1788, 2371, 1788, 2375, 1788, 1788, 1788, - /* 660 */ 1788, 1788, 1788, 1788, 2303, 2299, 1788, 1788, 2295, 1788, - /* 670 */ 1788, 1788, 1788, 1788, 2200, 1788, 1788, 1788, 1788, 1788, - /* 680 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 2191, 1788, - /* 690 */ 2254, 1788, 1788, 1788, 2288, 1788, 1788, 2239, 1788, 1788, - /* 700 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 2201, 1788, 2204, - /* 710 */ 1788, 1788, 1788, 1788, 1788, 1995, 1788, 1788, 1788, 1788, - /* 720 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 730 */ 1788, 1979, 1977, 1976, 1975, 1788, 1972, 1788, 2008, 1788, - /* 740 */ 1788, 1788, 2004, 2003, 1788, 1788, 1788, 1788, 1788, 1788, - /* 750 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1896, 1788, 1788, - /* 760 */ 1788, 1788, 1788, 1788, 1788, 1788, 1888, 1788, 1887, 1788, - /* 770 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 780 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 790 */ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - /* 800 */ 1788, + /* 0 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 10 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 20 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 30 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 40 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 50 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 60 */ 2125, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 70 */ 1806, 1806, 1806, 1806, 2098, 1806, 1806, 1806, 1806, 1806, + /* 80 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 90 */ 1806, 1902, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 100 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 110 */ 1900, 2091, 2317, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 120 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 130 */ 1806, 1806, 1806, 1806, 1806, 1806, 2329, 1806, 1806, 1876, + /* 140 */ 1876, 1806, 2329, 2329, 2329, 1900, 2289, 2289, 1806, 1902, + /* 150 */ 1806, 1806, 1806, 1806, 2159, 1806, 1806, 1806, 1806, 1806, + /* 160 */ 1806, 2023, 1806, 1836, 2047, 1806, 1806, 1806, 2151, 1806, + /* 170 */ 1806, 2358, 2415, 1806, 1806, 2361, 1806, 1806, 1806, 1806, + /* 180 */ 1806, 1806, 2103, 1806, 1806, 1975, 2348, 2321, 2335, 2399, + /* 190 */ 2322, 2319, 2342, 1806, 2352, 1806, 1806, 2173, 1902, 1806, + /* 200 */ 1902, 2138, 1806, 2096, 1806, 1806, 2096, 2093, 1806, 1806, + /* 210 */ 1806, 2096, 2093, 2093, 1964, 1960, 1806, 1958, 1806, 1806, + /* 220 */ 1806, 1806, 1860, 1806, 1860, 1806, 1902, 1806, 1902, 1806, + /* 230 */ 1806, 1902, 1806, 1902, 1902, 1902, 1806, 1902, 1806, 1806, + /* 240 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 250 */ 1806, 1806, 1806, 2171, 2157, 1806, 1900, 2149, 2147, 1806, + /* 260 */ 1900, 2145, 2352, 1806, 1806, 1806, 1806, 2369, 2367, 1806, + /* 270 */ 2369, 2367, 1806, 1806, 1806, 2383, 2379, 2369, 2388, 2385, + /* 280 */ 2354, 2352, 2418, 2405, 2401, 2335, 1806, 1806, 2340, 2338, + /* 290 */ 1806, 1900, 1900, 1806, 2367, 1806, 1806, 1806, 1806, 1806, + /* 300 */ 2367, 1806, 1806, 1900, 1806, 1900, 1806, 1806, 1991, 1806, + /* 310 */ 1806, 1806, 1900, 1806, 1845, 1806, 2140, 2162, 2121, 2121, + /* 320 */ 2026, 2026, 2026, 1903, 1811, 1806, 1806, 1806, 1806, 1806, + /* 330 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 2382, 2381, 2244, + /* 340 */ 1806, 2293, 2292, 2291, 2282, 2243, 1987, 1806, 1806, 2242, + /* 350 */ 2241, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 2112, + /* 360 */ 2111, 2235, 1806, 1806, 2236, 2234, 2233, 1806, 1806, 1806, + /* 370 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 380 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 390 */ 1806, 2402, 2406, 1806, 1806, 1806, 1806, 1806, 1806, 2318, + /* 400 */ 1806, 1806, 1806, 2217, 1806, 1806, 1806, 1806, 1806, 1806, + /* 410 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 420 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 430 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 440 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 450 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 460 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 470 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 480 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 490 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 500 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 510 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 520 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 530 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1850, 2222, + /* 540 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 550 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 560 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 570 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 580 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 590 */ 1941, 1940, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 600 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 610 */ 1806, 1806, 1806, 1806, 1806, 1806, 2226, 1806, 1806, 1806, + /* 620 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 630 */ 1806, 1806, 1806, 1806, 1806, 2398, 2355, 1806, 1806, 1806, + /* 640 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 650 */ 1806, 1806, 1806, 1806, 1806, 2217, 1806, 2380, 1806, 1806, + /* 660 */ 2396, 1806, 2400, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 670 */ 2328, 2324, 1806, 1806, 2320, 1806, 1806, 1806, 1806, 1806, + /* 680 */ 2225, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 690 */ 1806, 1806, 1806, 1806, 2216, 1806, 2279, 1806, 1806, 1806, + /* 700 */ 2313, 1806, 1806, 2264, 1806, 1806, 1806, 1806, 1806, 1806, + /* 710 */ 1806, 1806, 1806, 2226, 1806, 2229, 1806, 1806, 1806, 1806, + /* 720 */ 1806, 2020, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 730 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 2004, 2002, 2001, + /* 740 */ 2000, 1806, 1997, 1806, 2033, 1806, 1806, 1806, 2029, 2028, + /* 750 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 760 */ 1806, 1806, 1806, 1921, 1806, 1806, 1806, 1806, 1806, 1806, + /* 770 */ 1806, 1806, 1913, 1806, 1912, 1806, 1806, 1806, 1806, 1806, + /* 780 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 790 */ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, + /* 800 */ 1806, 1806, 1835, 1806, 1806, 1806, 1806, 1806, 1806, }; /********** End of lemon-generated parsing tables *****************************/ @@ -1107,10 +1432,13 @@ static const YYCODETYPE yyFallback[] = { 0, /* USERS => nothing */ 0, /* CONNS => nothing */ 0, /* STATE => nothing */ + 0, /* NK_COMMA => nothing */ + 0, /* HOST => nothing */ 0, /* USER => nothing */ 0, /* ENABLE => nothing */ 0, /* NK_INTEGER => nothing */ 0, /* SYSINFO => nothing */ + 0, /* ADD => nothing */ 0, /* DROP => nothing */ 0, /* GRANT => nothing */ 0, /* ON => nothing */ @@ -1118,7 +1446,6 @@ static const YYCODETYPE yyFallback[] = { 0, /* REVOKE => nothing */ 0, /* FROM => nothing */ 0, /* SUBSCRIBE => nothing */ - 0, /* NK_COMMA => nothing */ 0, /* READ => nothing */ 0, /* WRITE => nothing */ 0, /* NK_DOT => nothing */ @@ -1175,12 +1502,11 @@ static const YYCODETYPE yyFallback[] = { 0, /* MAX_SPEED => nothing */ 0, /* START => nothing */ 0, /* TIMESTAMP => nothing */ - 288, /* END => ABORT */ + 289, /* END => ABORT */ 0, /* TABLE => nothing */ 0, /* NK_LP => nothing */ 0, /* NK_RP => nothing */ 0, /* STABLE => nothing */ - 0, /* ADD => nothing */ 0, /* COLUMN => nothing */ 0, /* MODIFY => nothing */ 0, /* RENAME => nothing */ @@ -1363,56 +1689,56 @@ static const YYCODETYPE yyFallback[] = { 0, /* ASC => nothing */ 0, /* NULLS => nothing */ 0, /* ABORT => nothing */ - 288, /* AFTER => ABORT */ - 288, /* ATTACH => ABORT */ - 288, /* BEFORE => ABORT */ - 288, /* BEGIN => ABORT */ - 288, /* BITAND => ABORT */ - 288, /* BITNOT => ABORT */ - 288, /* BITOR => ABORT */ - 288, /* BLOCKS => ABORT */ - 288, /* CHANGE => ABORT */ - 288, /* COMMA => ABORT */ - 288, /* CONCAT => ABORT */ - 288, /* CONFLICT => ABORT */ - 288, /* COPY => ABORT */ - 288, /* DEFERRED => ABORT */ - 288, /* DELIMITERS => ABORT */ - 288, /* DETACH => ABORT */ - 288, /* DIVIDE => ABORT */ - 288, /* DOT => ABORT */ - 288, /* EACH => ABORT */ - 288, /* FAIL => ABORT */ - 288, /* FILE => ABORT */ - 288, /* FOR => ABORT */ - 288, /* GLOB => ABORT */ - 288, /* ID => ABORT */ - 288, /* IMMEDIATE => ABORT */ - 288, /* IMPORT => ABORT */ - 288, /* INITIALLY => ABORT */ - 288, /* INSTEAD => ABORT */ - 288, /* ISNULL => ABORT */ - 288, /* KEY => ABORT */ - 288, /* MODULES => ABORT */ - 288, /* NK_BITNOT => ABORT */ - 288, /* NK_SEMI => ABORT */ - 288, /* NOTNULL => ABORT */ - 288, /* OF => ABORT */ - 288, /* PLUS => ABORT */ - 288, /* PRIVILEGE => ABORT */ - 288, /* RAISE => ABORT */ - 288, /* RESTRICT => ABORT */ - 288, /* ROW => ABORT */ - 288, /* SEMI => ABORT */ - 288, /* STAR => ABORT */ - 288, /* STATEMENT => ABORT */ - 288, /* STRICT => ABORT */ - 288, /* STRING => ABORT */ - 288, /* TIMES => ABORT */ - 288, /* VALUES => ABORT */ - 288, /* VARIABLE => ABORT */ - 288, /* VIEW => ABORT */ - 288, /* WAL => ABORT */ + 289, /* AFTER => ABORT */ + 289, /* ATTACH => ABORT */ + 289, /* BEFORE => ABORT */ + 289, /* BEGIN => ABORT */ + 289, /* BITAND => ABORT */ + 289, /* BITNOT => ABORT */ + 289, /* BITOR => ABORT */ + 289, /* BLOCKS => ABORT */ + 289, /* CHANGE => ABORT */ + 289, /* COMMA => ABORT */ + 289, /* CONCAT => ABORT */ + 289, /* CONFLICT => ABORT */ + 289, /* COPY => ABORT */ + 289, /* DEFERRED => ABORT */ + 289, /* DELIMITERS => ABORT */ + 289, /* DETACH => ABORT */ + 289, /* DIVIDE => ABORT */ + 289, /* DOT => ABORT */ + 289, /* EACH => ABORT */ + 289, /* FAIL => ABORT */ + 289, /* FILE => ABORT */ + 289, /* FOR => ABORT */ + 289, /* GLOB => ABORT */ + 289, /* ID => ABORT */ + 289, /* IMMEDIATE => ABORT */ + 289, /* IMPORT => ABORT */ + 289, /* INITIALLY => ABORT */ + 289, /* INSTEAD => ABORT */ + 289, /* ISNULL => ABORT */ + 289, /* KEY => ABORT */ + 289, /* MODULES => ABORT */ + 289, /* NK_BITNOT => ABORT */ + 289, /* NK_SEMI => ABORT */ + 289, /* NOTNULL => ABORT */ + 289, /* OF => ABORT */ + 289, /* PLUS => ABORT */ + 289, /* PRIVILEGE => ABORT */ + 289, /* RAISE => ABORT */ + 289, /* RESTRICT => ABORT */ + 289, /* ROW => ABORT */ + 289, /* SEMI => ABORT */ + 289, /* STAR => ABORT */ + 289, /* STATEMENT => ABORT */ + 289, /* STRICT => ABORT */ + 289, /* STRING => ABORT */ + 289, /* TIMES => ABORT */ + 289, /* VALUES => ABORT */ + 289, /* VARIABLE => ABORT */ + 289, /* VIEW => ABORT */ + 289, /* WAL => ABORT */ }; #endif /* YYFALLBACK */ @@ -1464,6 +1790,7 @@ struct yyParser { }; typedef struct yyParser yyParser; +#include #ifndef NDEBUG #include static FILE *yyTraceFILE = 0; @@ -1533,463 +1860,467 @@ static const char *const yyTokenName[] = { /* 30 */ "USERS", /* 31 */ "CONNS", /* 32 */ "STATE", - /* 33 */ "USER", - /* 34 */ "ENABLE", - /* 35 */ "NK_INTEGER", - /* 36 */ "SYSINFO", - /* 37 */ "DROP", - /* 38 */ "GRANT", - /* 39 */ "ON", - /* 40 */ "TO", - /* 41 */ "REVOKE", - /* 42 */ "FROM", - /* 43 */ "SUBSCRIBE", - /* 44 */ "NK_COMMA", - /* 45 */ "READ", - /* 46 */ "WRITE", - /* 47 */ "NK_DOT", - /* 48 */ "WITH", - /* 49 */ "DNODE", - /* 50 */ "PORT", - /* 51 */ "DNODES", - /* 52 */ "RESTORE", - /* 53 */ "NK_IPTOKEN", - /* 54 */ "FORCE", - /* 55 */ "UNSAFE", - /* 56 */ "LOCAL", - /* 57 */ "QNODE", - /* 58 */ "BNODE", - /* 59 */ "SNODE", - /* 60 */ "MNODE", - /* 61 */ "VNODE", - /* 62 */ "DATABASE", - /* 63 */ "USE", - /* 64 */ "FLUSH", - /* 65 */ "TRIM", - /* 66 */ "COMPACT", - /* 67 */ "IF", - /* 68 */ "NOT", - /* 69 */ "EXISTS", - /* 70 */ "BUFFER", - /* 71 */ "CACHEMODEL", - /* 72 */ "CACHESIZE", - /* 73 */ "COMP", - /* 74 */ "DURATION", - /* 75 */ "NK_VARIABLE", - /* 76 */ "MAXROWS", - /* 77 */ "MINROWS", - /* 78 */ "KEEP", - /* 79 */ "PAGES", - /* 80 */ "PAGESIZE", - /* 81 */ "TSDB_PAGESIZE", - /* 82 */ "PRECISION", - /* 83 */ "REPLICA", - /* 84 */ "VGROUPS", - /* 85 */ "SINGLE_STABLE", - /* 86 */ "RETENTIONS", - /* 87 */ "SCHEMALESS", - /* 88 */ "WAL_LEVEL", - /* 89 */ "WAL_FSYNC_PERIOD", - /* 90 */ "WAL_RETENTION_PERIOD", - /* 91 */ "WAL_RETENTION_SIZE", - /* 92 */ "WAL_ROLL_PERIOD", - /* 93 */ "WAL_SEGMENT_SIZE", - /* 94 */ "STT_TRIGGER", - /* 95 */ "TABLE_PREFIX", - /* 96 */ "TABLE_SUFFIX", - /* 97 */ "NK_COLON", - /* 98 */ "MAX_SPEED", - /* 99 */ "START", - /* 100 */ "TIMESTAMP", - /* 101 */ "END", - /* 102 */ "TABLE", - /* 103 */ "NK_LP", - /* 104 */ "NK_RP", - /* 105 */ "STABLE", - /* 106 */ "ADD", - /* 107 */ "COLUMN", - /* 108 */ "MODIFY", - /* 109 */ "RENAME", - /* 110 */ "TAG", - /* 111 */ "SET", - /* 112 */ "NK_EQ", - /* 113 */ "USING", - /* 114 */ "TAGS", - /* 115 */ "COMMENT", - /* 116 */ "BOOL", - /* 117 */ "TINYINT", - /* 118 */ "SMALLINT", - /* 119 */ "INT", - /* 120 */ "INTEGER", - /* 121 */ "BIGINT", - /* 122 */ "FLOAT", - /* 123 */ "DOUBLE", - /* 124 */ "BINARY", - /* 125 */ "NCHAR", - /* 126 */ "UNSIGNED", - /* 127 */ "JSON", - /* 128 */ "VARCHAR", - /* 129 */ "MEDIUMBLOB", - /* 130 */ "BLOB", - /* 131 */ "VARBINARY", - /* 132 */ "GEOMETRY", - /* 133 */ "DECIMAL", - /* 134 */ "MAX_DELAY", - /* 135 */ "WATERMARK", - /* 136 */ "ROLLUP", - /* 137 */ "TTL", - /* 138 */ "SMA", - /* 139 */ "DELETE_MARK", - /* 140 */ "FIRST", - /* 141 */ "LAST", - /* 142 */ "SHOW", - /* 143 */ "PRIVILEGES", - /* 144 */ "DATABASES", - /* 145 */ "TABLES", - /* 146 */ "STABLES", - /* 147 */ "MNODES", - /* 148 */ "QNODES", - /* 149 */ "FUNCTIONS", - /* 150 */ "INDEXES", - /* 151 */ "ACCOUNTS", - /* 152 */ "APPS", - /* 153 */ "CONNECTIONS", - /* 154 */ "LICENCES", - /* 155 */ "GRANTS", - /* 156 */ "QUERIES", - /* 157 */ "SCORES", - /* 158 */ "TOPICS", - /* 159 */ "VARIABLES", - /* 160 */ "CLUSTER", - /* 161 */ "BNODES", - /* 162 */ "SNODES", - /* 163 */ "TRANSACTIONS", - /* 164 */ "DISTRIBUTED", - /* 165 */ "CONSUMERS", - /* 166 */ "SUBSCRIPTIONS", - /* 167 */ "VNODES", - /* 168 */ "ALIVE", - /* 169 */ "LIKE", - /* 170 */ "TBNAME", - /* 171 */ "QTAGS", - /* 172 */ "AS", - /* 173 */ "INDEX", - /* 174 */ "FUNCTION", - /* 175 */ "INTERVAL", - /* 176 */ "COUNT", - /* 177 */ "LAST_ROW", - /* 178 */ "META", - /* 179 */ "ONLY", - /* 180 */ "TOPIC", - /* 181 */ "CONSUMER", - /* 182 */ "GROUP", - /* 183 */ "DESC", - /* 184 */ "DESCRIBE", - /* 185 */ "RESET", - /* 186 */ "QUERY", - /* 187 */ "CACHE", - /* 188 */ "EXPLAIN", - /* 189 */ "ANALYZE", - /* 190 */ "VERBOSE", - /* 191 */ "NK_BOOL", - /* 192 */ "RATIO", - /* 193 */ "NK_FLOAT", - /* 194 */ "OUTPUTTYPE", - /* 195 */ "AGGREGATE", - /* 196 */ "BUFSIZE", - /* 197 */ "LANGUAGE", - /* 198 */ "REPLACE", - /* 199 */ "STREAM", - /* 200 */ "INTO", - /* 201 */ "PAUSE", - /* 202 */ "RESUME", - /* 203 */ "TRIGGER", - /* 204 */ "AT_ONCE", - /* 205 */ "WINDOW_CLOSE", - /* 206 */ "IGNORE", - /* 207 */ "EXPIRED", - /* 208 */ "FILL_HISTORY", - /* 209 */ "UPDATE", - /* 210 */ "SUBTABLE", - /* 211 */ "UNTREATED", - /* 212 */ "KILL", - /* 213 */ "CONNECTION", - /* 214 */ "TRANSACTION", - /* 215 */ "BALANCE", - /* 216 */ "VGROUP", - /* 217 */ "LEADER", - /* 218 */ "MERGE", - /* 219 */ "REDISTRIBUTE", - /* 220 */ "SPLIT", - /* 221 */ "DELETE", - /* 222 */ "INSERT", - /* 223 */ "NULL", - /* 224 */ "NK_QUESTION", - /* 225 */ "NK_ARROW", - /* 226 */ "ROWTS", - /* 227 */ "QSTART", - /* 228 */ "QEND", - /* 229 */ "QDURATION", - /* 230 */ "WSTART", - /* 231 */ "WEND", - /* 232 */ "WDURATION", - /* 233 */ "IROWTS", - /* 234 */ "ISFILLED", - /* 235 */ "CAST", - /* 236 */ "NOW", - /* 237 */ "TODAY", - /* 238 */ "TIMEZONE", - /* 239 */ "CLIENT_VERSION", - /* 240 */ "SERVER_VERSION", - /* 241 */ "SERVER_STATUS", - /* 242 */ "CURRENT_USER", - /* 243 */ "CASE", - /* 244 */ "WHEN", - /* 245 */ "THEN", - /* 246 */ "ELSE", - /* 247 */ "BETWEEN", - /* 248 */ "IS", - /* 249 */ "NK_LT", - /* 250 */ "NK_GT", - /* 251 */ "NK_LE", - /* 252 */ "NK_GE", - /* 253 */ "NK_NE", - /* 254 */ "MATCH", - /* 255 */ "NMATCH", - /* 256 */ "CONTAINS", - /* 257 */ "IN", - /* 258 */ "JOIN", - /* 259 */ "INNER", - /* 260 */ "SELECT", - /* 261 */ "NK_HINT", - /* 262 */ "DISTINCT", - /* 263 */ "WHERE", - /* 264 */ "PARTITION", - /* 265 */ "BY", - /* 266 */ "SESSION", - /* 267 */ "STATE_WINDOW", - /* 268 */ "EVENT_WINDOW", - /* 269 */ "SLIDING", - /* 270 */ "FILL", - /* 271 */ "VALUE", - /* 272 */ "VALUE_F", - /* 273 */ "NONE", - /* 274 */ "PREV", - /* 275 */ "NULL_F", - /* 276 */ "LINEAR", - /* 277 */ "NEXT", - /* 278 */ "HAVING", - /* 279 */ "RANGE", - /* 280 */ "EVERY", - /* 281 */ "ORDER", - /* 282 */ "SLIMIT", - /* 283 */ "SOFFSET", - /* 284 */ "LIMIT", - /* 285 */ "OFFSET", - /* 286 */ "ASC", - /* 287 */ "NULLS", - /* 288 */ "ABORT", - /* 289 */ "AFTER", - /* 290 */ "ATTACH", - /* 291 */ "BEFORE", - /* 292 */ "BEGIN", - /* 293 */ "BITAND", - /* 294 */ "BITNOT", - /* 295 */ "BITOR", - /* 296 */ "BLOCKS", - /* 297 */ "CHANGE", - /* 298 */ "COMMA", - /* 299 */ "CONCAT", - /* 300 */ "CONFLICT", - /* 301 */ "COPY", - /* 302 */ "DEFERRED", - /* 303 */ "DELIMITERS", - /* 304 */ "DETACH", - /* 305 */ "DIVIDE", - /* 306 */ "DOT", - /* 307 */ "EACH", - /* 308 */ "FAIL", - /* 309 */ "FILE", - /* 310 */ "FOR", - /* 311 */ "GLOB", - /* 312 */ "ID", - /* 313 */ "IMMEDIATE", - /* 314 */ "IMPORT", - /* 315 */ "INITIALLY", - /* 316 */ "INSTEAD", - /* 317 */ "ISNULL", - /* 318 */ "KEY", - /* 319 */ "MODULES", - /* 320 */ "NK_BITNOT", - /* 321 */ "NK_SEMI", - /* 322 */ "NOTNULL", - /* 323 */ "OF", - /* 324 */ "PLUS", - /* 325 */ "PRIVILEGE", - /* 326 */ "RAISE", - /* 327 */ "RESTRICT", - /* 328 */ "ROW", - /* 329 */ "SEMI", - /* 330 */ "STAR", - /* 331 */ "STATEMENT", - /* 332 */ "STRICT", - /* 333 */ "STRING", - /* 334 */ "TIMES", - /* 335 */ "VALUES", - /* 336 */ "VARIABLE", - /* 337 */ "VIEW", - /* 338 */ "WAL", - /* 339 */ "cmd", - /* 340 */ "account_options", - /* 341 */ "alter_account_options", - /* 342 */ "literal", - /* 343 */ "alter_account_option", - /* 344 */ "user_name", - /* 345 */ "sysinfo_opt", - /* 346 */ "privileges", - /* 347 */ "priv_level", - /* 348 */ "with_opt", - /* 349 */ "priv_type_list", - /* 350 */ "priv_type", - /* 351 */ "db_name", - /* 352 */ "table_name", - /* 353 */ "topic_name", - /* 354 */ "search_condition", - /* 355 */ "dnode_endpoint", - /* 356 */ "force_opt", - /* 357 */ "unsafe_opt", - /* 358 */ "not_exists_opt", - /* 359 */ "db_options", - /* 360 */ "exists_opt", - /* 361 */ "alter_db_options", - /* 362 */ "speed_opt", - /* 363 */ "start_opt", - /* 364 */ "end_opt", - /* 365 */ "integer_list", - /* 366 */ "variable_list", - /* 367 */ "retention_list", - /* 368 */ "signed", - /* 369 */ "alter_db_option", - /* 370 */ "retention", - /* 371 */ "full_table_name", - /* 372 */ "column_def_list", - /* 373 */ "tags_def_opt", - /* 374 */ "table_options", - /* 375 */ "multi_create_clause", - /* 376 */ "tags_def", - /* 377 */ "multi_drop_clause", - /* 378 */ "alter_table_clause", - /* 379 */ "alter_table_options", - /* 380 */ "column_def", - /* 381 */ "column_name", - /* 382 */ "signed_literal", - /* 383 */ "create_subtable_clause", - /* 384 */ "specific_cols_opt", - /* 385 */ "expression_list", - /* 386 */ "drop_table_clause", - /* 387 */ "col_name_list", - /* 388 */ "type_name", - /* 389 */ "duration_list", - /* 390 */ "rollup_func_list", - /* 391 */ "alter_table_option", - /* 392 */ "duration_literal", - /* 393 */ "rollup_func_name", - /* 394 */ "function_name", - /* 395 */ "col_name", - /* 396 */ "db_name_cond_opt", - /* 397 */ "like_pattern_opt", - /* 398 */ "table_name_cond", - /* 399 */ "from_db_opt", - /* 400 */ "tag_list_opt", - /* 401 */ "tag_item", - /* 402 */ "column_alias", - /* 403 */ "full_index_name", - /* 404 */ "index_options", - /* 405 */ "index_name", - /* 406 */ "func_list", - /* 407 */ "sliding_opt", - /* 408 */ "sma_stream_opt", - /* 409 */ "func", - /* 410 */ "sma_func_name", - /* 411 */ "with_meta", - /* 412 */ "query_or_subquery", - /* 413 */ "where_clause_opt", - /* 414 */ "cgroup_name", - /* 415 */ "analyze_opt", - /* 416 */ "explain_options", - /* 417 */ "insert_query", - /* 418 */ "or_replace_opt", - /* 419 */ "agg_func_opt", - /* 420 */ "bufsize_opt", - /* 421 */ "language_opt", - /* 422 */ "stream_name", - /* 423 */ "stream_options", - /* 424 */ "col_list_opt", - /* 425 */ "tag_def_or_ref_opt", - /* 426 */ "subtable_opt", - /* 427 */ "ignore_opt", - /* 428 */ "expression", - /* 429 */ "dnode_list", - /* 430 */ "literal_func", - /* 431 */ "literal_list", - /* 432 */ "table_alias", - /* 433 */ "expr_or_subquery", - /* 434 */ "pseudo_column", - /* 435 */ "column_reference", - /* 436 */ "function_expression", - /* 437 */ "case_when_expression", - /* 438 */ "star_func", - /* 439 */ "star_func_para_list", - /* 440 */ "noarg_func", - /* 441 */ "other_para_list", - /* 442 */ "star_func_para", - /* 443 */ "when_then_list", - /* 444 */ "case_when_else_opt", - /* 445 */ "common_expression", - /* 446 */ "when_then_expr", - /* 447 */ "predicate", - /* 448 */ "compare_op", - /* 449 */ "in_op", - /* 450 */ "in_predicate_value", - /* 451 */ "boolean_value_expression", - /* 452 */ "boolean_primary", - /* 453 */ "from_clause_opt", - /* 454 */ "table_reference_list", - /* 455 */ "table_reference", - /* 456 */ "table_primary", - /* 457 */ "joined_table", - /* 458 */ "alias_opt", - /* 459 */ "subquery", - /* 460 */ "parenthesized_joined_table", - /* 461 */ "join_type", - /* 462 */ "query_specification", - /* 463 */ "hint_list", - /* 464 */ "tag_mode_opt", - /* 465 */ "set_quantifier_opt", - /* 466 */ "select_list", - /* 467 */ "partition_by_clause_opt", - /* 468 */ "range_opt", - /* 469 */ "every_opt", - /* 470 */ "fill_opt", - /* 471 */ "twindow_clause_opt", - /* 472 */ "group_by_clause_opt", - /* 473 */ "having_clause_opt", - /* 474 */ "select_item", - /* 475 */ "partition_list", - /* 476 */ "partition_item", - /* 477 */ "fill_mode", - /* 478 */ "group_by_list", - /* 479 */ "query_expression", - /* 480 */ "query_simple", - /* 481 */ "order_by_clause_opt", - /* 482 */ "slimit_clause_opt", - /* 483 */ "limit_clause_opt", - /* 484 */ "union_query_expression", - /* 485 */ "query_simple_or_subquery", - /* 486 */ "sort_specification_list", - /* 487 */ "sort_specification", - /* 488 */ "ordering_specification_opt", - /* 489 */ "null_ordering_opt", + /* 33 */ "NK_COMMA", + /* 34 */ "HOST", + /* 35 */ "USER", + /* 36 */ "ENABLE", + /* 37 */ "NK_INTEGER", + /* 38 */ "SYSINFO", + /* 39 */ "ADD", + /* 40 */ "DROP", + /* 41 */ "GRANT", + /* 42 */ "ON", + /* 43 */ "TO", + /* 44 */ "REVOKE", + /* 45 */ "FROM", + /* 46 */ "SUBSCRIBE", + /* 47 */ "READ", + /* 48 */ "WRITE", + /* 49 */ "NK_DOT", + /* 50 */ "WITH", + /* 51 */ "DNODE", + /* 52 */ "PORT", + /* 53 */ "DNODES", + /* 54 */ "RESTORE", + /* 55 */ "NK_IPTOKEN", + /* 56 */ "FORCE", + /* 57 */ "UNSAFE", + /* 58 */ "LOCAL", + /* 59 */ "QNODE", + /* 60 */ "BNODE", + /* 61 */ "SNODE", + /* 62 */ "MNODE", + /* 63 */ "VNODE", + /* 64 */ "DATABASE", + /* 65 */ "USE", + /* 66 */ "FLUSH", + /* 67 */ "TRIM", + /* 68 */ "COMPACT", + /* 69 */ "IF", + /* 70 */ "NOT", + /* 71 */ "EXISTS", + /* 72 */ "BUFFER", + /* 73 */ "CACHEMODEL", + /* 74 */ "CACHESIZE", + /* 75 */ "COMP", + /* 76 */ "DURATION", + /* 77 */ "NK_VARIABLE", + /* 78 */ "MAXROWS", + /* 79 */ "MINROWS", + /* 80 */ "KEEP", + /* 81 */ "PAGES", + /* 82 */ "PAGESIZE", + /* 83 */ "TSDB_PAGESIZE", + /* 84 */ "PRECISION", + /* 85 */ "REPLICA", + /* 86 */ "VGROUPS", + /* 87 */ "SINGLE_STABLE", + /* 88 */ "RETENTIONS", + /* 89 */ "SCHEMALESS", + /* 90 */ "WAL_LEVEL", + /* 91 */ "WAL_FSYNC_PERIOD", + /* 92 */ "WAL_RETENTION_PERIOD", + /* 93 */ "WAL_RETENTION_SIZE", + /* 94 */ "WAL_ROLL_PERIOD", + /* 95 */ "WAL_SEGMENT_SIZE", + /* 96 */ "STT_TRIGGER", + /* 97 */ "TABLE_PREFIX", + /* 98 */ "TABLE_SUFFIX", + /* 99 */ "NK_COLON", + /* 100 */ "MAX_SPEED", + /* 101 */ "START", + /* 102 */ "TIMESTAMP", + /* 103 */ "END", + /* 104 */ "TABLE", + /* 105 */ "NK_LP", + /* 106 */ "NK_RP", + /* 107 */ "STABLE", + /* 108 */ "COLUMN", + /* 109 */ "MODIFY", + /* 110 */ "RENAME", + /* 111 */ "TAG", + /* 112 */ "SET", + /* 113 */ "NK_EQ", + /* 114 */ "USING", + /* 115 */ "TAGS", + /* 116 */ "COMMENT", + /* 117 */ "BOOL", + /* 118 */ "TINYINT", + /* 119 */ "SMALLINT", + /* 120 */ "INT", + /* 121 */ "INTEGER", + /* 122 */ "BIGINT", + /* 123 */ "FLOAT", + /* 124 */ "DOUBLE", + /* 125 */ "BINARY", + /* 126 */ "NCHAR", + /* 127 */ "UNSIGNED", + /* 128 */ "JSON", + /* 129 */ "VARCHAR", + /* 130 */ "MEDIUMBLOB", + /* 131 */ "BLOB", + /* 132 */ "VARBINARY", + /* 133 */ "GEOMETRY", + /* 134 */ "DECIMAL", + /* 135 */ "MAX_DELAY", + /* 136 */ "WATERMARK", + /* 137 */ "ROLLUP", + /* 138 */ "TTL", + /* 139 */ "SMA", + /* 140 */ "DELETE_MARK", + /* 141 */ "FIRST", + /* 142 */ "LAST", + /* 143 */ "SHOW", + /* 144 */ "PRIVILEGES", + /* 145 */ "DATABASES", + /* 146 */ "TABLES", + /* 147 */ "STABLES", + /* 148 */ "MNODES", + /* 149 */ "QNODES", + /* 150 */ "FUNCTIONS", + /* 151 */ "INDEXES", + /* 152 */ "ACCOUNTS", + /* 153 */ "APPS", + /* 154 */ "CONNECTIONS", + /* 155 */ "LICENCES", + /* 156 */ "GRANTS", + /* 157 */ "QUERIES", + /* 158 */ "SCORES", + /* 159 */ "TOPICS", + /* 160 */ "VARIABLES", + /* 161 */ "CLUSTER", + /* 162 */ "BNODES", + /* 163 */ "SNODES", + /* 164 */ "TRANSACTIONS", + /* 165 */ "DISTRIBUTED", + /* 166 */ "CONSUMERS", + /* 167 */ "SUBSCRIPTIONS", + /* 168 */ "VNODES", + /* 169 */ "ALIVE", + /* 170 */ "LIKE", + /* 171 */ "TBNAME", + /* 172 */ "QTAGS", + /* 173 */ "AS", + /* 174 */ "INDEX", + /* 175 */ "FUNCTION", + /* 176 */ "INTERVAL", + /* 177 */ "COUNT", + /* 178 */ "LAST_ROW", + /* 179 */ "META", + /* 180 */ "ONLY", + /* 181 */ "TOPIC", + /* 182 */ "CONSUMER", + /* 183 */ "GROUP", + /* 184 */ "DESC", + /* 185 */ "DESCRIBE", + /* 186 */ "RESET", + /* 187 */ "QUERY", + /* 188 */ "CACHE", + /* 189 */ "EXPLAIN", + /* 190 */ "ANALYZE", + /* 191 */ "VERBOSE", + /* 192 */ "NK_BOOL", + /* 193 */ "RATIO", + /* 194 */ "NK_FLOAT", + /* 195 */ "OUTPUTTYPE", + /* 196 */ "AGGREGATE", + /* 197 */ "BUFSIZE", + /* 198 */ "LANGUAGE", + /* 199 */ "REPLACE", + /* 200 */ "STREAM", + /* 201 */ "INTO", + /* 202 */ "PAUSE", + /* 203 */ "RESUME", + /* 204 */ "TRIGGER", + /* 205 */ "AT_ONCE", + /* 206 */ "WINDOW_CLOSE", + /* 207 */ "IGNORE", + /* 208 */ "EXPIRED", + /* 209 */ "FILL_HISTORY", + /* 210 */ "UPDATE", + /* 211 */ "SUBTABLE", + /* 212 */ "UNTREATED", + /* 213 */ "KILL", + /* 214 */ "CONNECTION", + /* 215 */ "TRANSACTION", + /* 216 */ "BALANCE", + /* 217 */ "VGROUP", + /* 218 */ "LEADER", + /* 219 */ "MERGE", + /* 220 */ "REDISTRIBUTE", + /* 221 */ "SPLIT", + /* 222 */ "DELETE", + /* 223 */ "INSERT", + /* 224 */ "NULL", + /* 225 */ "NK_QUESTION", + /* 226 */ "NK_ARROW", + /* 227 */ "ROWTS", + /* 228 */ "QSTART", + /* 229 */ "QEND", + /* 230 */ "QDURATION", + /* 231 */ "WSTART", + /* 232 */ "WEND", + /* 233 */ "WDURATION", + /* 234 */ "IROWTS", + /* 235 */ "ISFILLED", + /* 236 */ "CAST", + /* 237 */ "NOW", + /* 238 */ "TODAY", + /* 239 */ "TIMEZONE", + /* 240 */ "CLIENT_VERSION", + /* 241 */ "SERVER_VERSION", + /* 242 */ "SERVER_STATUS", + /* 243 */ "CURRENT_USER", + /* 244 */ "CASE", + /* 245 */ "WHEN", + /* 246 */ "THEN", + /* 247 */ "ELSE", + /* 248 */ "BETWEEN", + /* 249 */ "IS", + /* 250 */ "NK_LT", + /* 251 */ "NK_GT", + /* 252 */ "NK_LE", + /* 253 */ "NK_GE", + /* 254 */ "NK_NE", + /* 255 */ "MATCH", + /* 256 */ "NMATCH", + /* 257 */ "CONTAINS", + /* 258 */ "IN", + /* 259 */ "JOIN", + /* 260 */ "INNER", + /* 261 */ "SELECT", + /* 262 */ "NK_HINT", + /* 263 */ "DISTINCT", + /* 264 */ "WHERE", + /* 265 */ "PARTITION", + /* 266 */ "BY", + /* 267 */ "SESSION", + /* 268 */ "STATE_WINDOW", + /* 269 */ "EVENT_WINDOW", + /* 270 */ "SLIDING", + /* 271 */ "FILL", + /* 272 */ "VALUE", + /* 273 */ "VALUE_F", + /* 274 */ "NONE", + /* 275 */ "PREV", + /* 276 */ "NULL_F", + /* 277 */ "LINEAR", + /* 278 */ "NEXT", + /* 279 */ "HAVING", + /* 280 */ "RANGE", + /* 281 */ "EVERY", + /* 282 */ "ORDER", + /* 283 */ "SLIMIT", + /* 284 */ "SOFFSET", + /* 285 */ "LIMIT", + /* 286 */ "OFFSET", + /* 287 */ "ASC", + /* 288 */ "NULLS", + /* 289 */ "ABORT", + /* 290 */ "AFTER", + /* 291 */ "ATTACH", + /* 292 */ "BEFORE", + /* 293 */ "BEGIN", + /* 294 */ "BITAND", + /* 295 */ "BITNOT", + /* 296 */ "BITOR", + /* 297 */ "BLOCKS", + /* 298 */ "CHANGE", + /* 299 */ "COMMA", + /* 300 */ "CONCAT", + /* 301 */ "CONFLICT", + /* 302 */ "COPY", + /* 303 */ "DEFERRED", + /* 304 */ "DELIMITERS", + /* 305 */ "DETACH", + /* 306 */ "DIVIDE", + /* 307 */ "DOT", + /* 308 */ "EACH", + /* 309 */ "FAIL", + /* 310 */ "FILE", + /* 311 */ "FOR", + /* 312 */ "GLOB", + /* 313 */ "ID", + /* 314 */ "IMMEDIATE", + /* 315 */ "IMPORT", + /* 316 */ "INITIALLY", + /* 317 */ "INSTEAD", + /* 318 */ "ISNULL", + /* 319 */ "KEY", + /* 320 */ "MODULES", + /* 321 */ "NK_BITNOT", + /* 322 */ "NK_SEMI", + /* 323 */ "NOTNULL", + /* 324 */ "OF", + /* 325 */ "PLUS", + /* 326 */ "PRIVILEGE", + /* 327 */ "RAISE", + /* 328 */ "RESTRICT", + /* 329 */ "ROW", + /* 330 */ "SEMI", + /* 331 */ "STAR", + /* 332 */ "STATEMENT", + /* 333 */ "STRICT", + /* 334 */ "STRING", + /* 335 */ "TIMES", + /* 336 */ "VALUES", + /* 337 */ "VARIABLE", + /* 338 */ "VIEW", + /* 339 */ "WAL", + /* 340 */ "cmd", + /* 341 */ "account_options", + /* 342 */ "alter_account_options", + /* 343 */ "literal", + /* 344 */ "alter_account_option", + /* 345 */ "ip_range_list", + /* 346 */ "white_list", + /* 347 */ "white_list_opt", + /* 348 */ "user_name", + /* 349 */ "sysinfo_opt", + /* 350 */ "privileges", + /* 351 */ "priv_level", + /* 352 */ "with_opt", + /* 353 */ "priv_type_list", + /* 354 */ "priv_type", + /* 355 */ "db_name", + /* 356 */ "table_name", + /* 357 */ "topic_name", + /* 358 */ "search_condition", + /* 359 */ "dnode_endpoint", + /* 360 */ "force_opt", + /* 361 */ "unsafe_opt", + /* 362 */ "not_exists_opt", + /* 363 */ "db_options", + /* 364 */ "exists_opt", + /* 365 */ "alter_db_options", + /* 366 */ "speed_opt", + /* 367 */ "start_opt", + /* 368 */ "end_opt", + /* 369 */ "integer_list", + /* 370 */ "variable_list", + /* 371 */ "retention_list", + /* 372 */ "signed", + /* 373 */ "alter_db_option", + /* 374 */ "retention", + /* 375 */ "full_table_name", + /* 376 */ "column_def_list", + /* 377 */ "tags_def_opt", + /* 378 */ "table_options", + /* 379 */ "multi_create_clause", + /* 380 */ "tags_def", + /* 381 */ "multi_drop_clause", + /* 382 */ "alter_table_clause", + /* 383 */ "alter_table_options", + /* 384 */ "column_def", + /* 385 */ "column_name", + /* 386 */ "signed_literal", + /* 387 */ "create_subtable_clause", + /* 388 */ "specific_cols_opt", + /* 389 */ "expression_list", + /* 390 */ "drop_table_clause", + /* 391 */ "col_name_list", + /* 392 */ "type_name", + /* 393 */ "duration_list", + /* 394 */ "rollup_func_list", + /* 395 */ "alter_table_option", + /* 396 */ "duration_literal", + /* 397 */ "rollup_func_name", + /* 398 */ "function_name", + /* 399 */ "col_name", + /* 400 */ "db_name_cond_opt", + /* 401 */ "like_pattern_opt", + /* 402 */ "table_name_cond", + /* 403 */ "from_db_opt", + /* 404 */ "tag_list_opt", + /* 405 */ "tag_item", + /* 406 */ "column_alias", + /* 407 */ "full_index_name", + /* 408 */ "index_options", + /* 409 */ "index_name", + /* 410 */ "func_list", + /* 411 */ "sliding_opt", + /* 412 */ "sma_stream_opt", + /* 413 */ "func", + /* 414 */ "sma_func_name", + /* 415 */ "with_meta", + /* 416 */ "query_or_subquery", + /* 417 */ "where_clause_opt", + /* 418 */ "cgroup_name", + /* 419 */ "analyze_opt", + /* 420 */ "explain_options", + /* 421 */ "insert_query", + /* 422 */ "or_replace_opt", + /* 423 */ "agg_func_opt", + /* 424 */ "bufsize_opt", + /* 425 */ "language_opt", + /* 426 */ "stream_name", + /* 427 */ "stream_options", + /* 428 */ "col_list_opt", + /* 429 */ "tag_def_or_ref_opt", + /* 430 */ "subtable_opt", + /* 431 */ "ignore_opt", + /* 432 */ "expression", + /* 433 */ "dnode_list", + /* 434 */ "literal_func", + /* 435 */ "literal_list", + /* 436 */ "table_alias", + /* 437 */ "expr_or_subquery", + /* 438 */ "pseudo_column", + /* 439 */ "column_reference", + /* 440 */ "function_expression", + /* 441 */ "case_when_expression", + /* 442 */ "star_func", + /* 443 */ "star_func_para_list", + /* 444 */ "noarg_func", + /* 445 */ "other_para_list", + /* 446 */ "star_func_para", + /* 447 */ "when_then_list", + /* 448 */ "case_when_else_opt", + /* 449 */ "common_expression", + /* 450 */ "when_then_expr", + /* 451 */ "predicate", + /* 452 */ "compare_op", + /* 453 */ "in_op", + /* 454 */ "in_predicate_value", + /* 455 */ "boolean_value_expression", + /* 456 */ "boolean_primary", + /* 457 */ "from_clause_opt", + /* 458 */ "table_reference_list", + /* 459 */ "table_reference", + /* 460 */ "table_primary", + /* 461 */ "joined_table", + /* 462 */ "alias_opt", + /* 463 */ "subquery", + /* 464 */ "parenthesized_joined_table", + /* 465 */ "join_type", + /* 466 */ "query_specification", + /* 467 */ "hint_list", + /* 468 */ "tag_mode_opt", + /* 469 */ "set_quantifier_opt", + /* 470 */ "select_list", + /* 471 */ "partition_by_clause_opt", + /* 472 */ "range_opt", + /* 473 */ "every_opt", + /* 474 */ "fill_opt", + /* 475 */ "twindow_clause_opt", + /* 476 */ "group_by_clause_opt", + /* 477 */ "having_clause_opt", + /* 478 */ "select_item", + /* 479 */ "partition_list", + /* 480 */ "partition_item", + /* 481 */ "fill_mode", + /* 482 */ "group_by_list", + /* 483 */ "query_expression", + /* 484 */ "query_simple", + /* 485 */ "order_by_clause_opt", + /* 486 */ "slimit_clause_opt", + /* 487 */ "limit_clause_opt", + /* 488 */ "union_query_expression", + /* 489 */ "query_simple_or_subquery", + /* 490 */ "sort_specification_list", + /* 491 */ "sort_specification", + /* 492 */ "ordering_specification_opt", + /* 493 */ "null_ordering_opt", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -2021,587 +2352,594 @@ static const char *const yyRuleName[] = { /* 21 */ "alter_account_option ::= USERS literal", /* 22 */ "alter_account_option ::= CONNS literal", /* 23 */ "alter_account_option ::= STATE literal", - /* 24 */ "cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt", - /* 25 */ "cmd ::= ALTER USER user_name PASS NK_STRING", - /* 26 */ "cmd ::= ALTER USER user_name ENABLE NK_INTEGER", - /* 27 */ "cmd ::= ALTER USER user_name SYSINFO NK_INTEGER", - /* 28 */ "cmd ::= DROP USER user_name", - /* 29 */ "sysinfo_opt ::=", - /* 30 */ "sysinfo_opt ::= SYSINFO NK_INTEGER", - /* 31 */ "cmd ::= GRANT privileges ON priv_level with_opt TO user_name", - /* 32 */ "cmd ::= REVOKE privileges ON priv_level with_opt FROM user_name", - /* 33 */ "privileges ::= ALL", - /* 34 */ "privileges ::= priv_type_list", - /* 35 */ "privileges ::= SUBSCRIBE", - /* 36 */ "priv_type_list ::= priv_type", - /* 37 */ "priv_type_list ::= priv_type_list NK_COMMA priv_type", - /* 38 */ "priv_type ::= READ", - /* 39 */ "priv_type ::= WRITE", - /* 40 */ "priv_level ::= NK_STAR NK_DOT NK_STAR", - /* 41 */ "priv_level ::= db_name NK_DOT NK_STAR", - /* 42 */ "priv_level ::= db_name NK_DOT table_name", - /* 43 */ "priv_level ::= topic_name", - /* 44 */ "with_opt ::=", - /* 45 */ "with_opt ::= WITH search_condition", - /* 46 */ "cmd ::= CREATE DNODE dnode_endpoint", - /* 47 */ "cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER", - /* 48 */ "cmd ::= DROP DNODE NK_INTEGER force_opt", - /* 49 */ "cmd ::= DROP DNODE dnode_endpoint force_opt", - /* 50 */ "cmd ::= DROP DNODE NK_INTEGER unsafe_opt", - /* 51 */ "cmd ::= DROP DNODE dnode_endpoint unsafe_opt", - /* 52 */ "cmd ::= ALTER DNODE NK_INTEGER NK_STRING", - /* 53 */ "cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING", - /* 54 */ "cmd ::= ALTER ALL DNODES NK_STRING", - /* 55 */ "cmd ::= ALTER ALL DNODES NK_STRING NK_STRING", - /* 56 */ "cmd ::= RESTORE DNODE NK_INTEGER", - /* 57 */ "dnode_endpoint ::= NK_STRING", - /* 58 */ "dnode_endpoint ::= NK_ID", - /* 59 */ "dnode_endpoint ::= NK_IPTOKEN", - /* 60 */ "force_opt ::=", - /* 61 */ "force_opt ::= FORCE", - /* 62 */ "unsafe_opt ::= UNSAFE", - /* 63 */ "cmd ::= ALTER LOCAL NK_STRING", - /* 64 */ "cmd ::= ALTER LOCAL NK_STRING NK_STRING", - /* 65 */ "cmd ::= CREATE QNODE ON DNODE NK_INTEGER", - /* 66 */ "cmd ::= DROP QNODE ON DNODE NK_INTEGER", - /* 67 */ "cmd ::= RESTORE QNODE ON DNODE NK_INTEGER", - /* 68 */ "cmd ::= CREATE BNODE ON DNODE NK_INTEGER", - /* 69 */ "cmd ::= DROP BNODE ON DNODE NK_INTEGER", - /* 70 */ "cmd ::= CREATE SNODE ON DNODE NK_INTEGER", - /* 71 */ "cmd ::= DROP SNODE ON DNODE NK_INTEGER", - /* 72 */ "cmd ::= CREATE MNODE ON DNODE NK_INTEGER", - /* 73 */ "cmd ::= DROP MNODE ON DNODE NK_INTEGER", - /* 74 */ "cmd ::= RESTORE MNODE ON DNODE NK_INTEGER", - /* 75 */ "cmd ::= RESTORE VNODE ON DNODE NK_INTEGER", - /* 76 */ "cmd ::= CREATE DATABASE not_exists_opt db_name db_options", - /* 77 */ "cmd ::= DROP DATABASE exists_opt db_name", - /* 78 */ "cmd ::= USE db_name", - /* 79 */ "cmd ::= ALTER DATABASE db_name alter_db_options", - /* 80 */ "cmd ::= FLUSH DATABASE db_name", - /* 81 */ "cmd ::= TRIM DATABASE db_name speed_opt", - /* 82 */ "cmd ::= COMPACT DATABASE db_name start_opt end_opt", - /* 83 */ "not_exists_opt ::= IF NOT EXISTS", - /* 84 */ "not_exists_opt ::=", - /* 85 */ "exists_opt ::= IF EXISTS", - /* 86 */ "exists_opt ::=", - /* 87 */ "db_options ::=", - /* 88 */ "db_options ::= db_options BUFFER NK_INTEGER", - /* 89 */ "db_options ::= db_options CACHEMODEL NK_STRING", - /* 90 */ "db_options ::= db_options CACHESIZE NK_INTEGER", - /* 91 */ "db_options ::= db_options COMP NK_INTEGER", - /* 92 */ "db_options ::= db_options DURATION NK_INTEGER", - /* 93 */ "db_options ::= db_options DURATION NK_VARIABLE", - /* 94 */ "db_options ::= db_options MAXROWS NK_INTEGER", - /* 95 */ "db_options ::= db_options MINROWS NK_INTEGER", - /* 96 */ "db_options ::= db_options KEEP integer_list", - /* 97 */ "db_options ::= db_options KEEP variable_list", - /* 98 */ "db_options ::= db_options PAGES NK_INTEGER", - /* 99 */ "db_options ::= db_options PAGESIZE NK_INTEGER", - /* 100 */ "db_options ::= db_options TSDB_PAGESIZE NK_INTEGER", - /* 101 */ "db_options ::= db_options PRECISION NK_STRING", - /* 102 */ "db_options ::= db_options REPLICA NK_INTEGER", - /* 103 */ "db_options ::= db_options VGROUPS NK_INTEGER", - /* 104 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER", - /* 105 */ "db_options ::= db_options RETENTIONS retention_list", - /* 106 */ "db_options ::= db_options SCHEMALESS NK_INTEGER", - /* 107 */ "db_options ::= db_options WAL_LEVEL NK_INTEGER", - /* 108 */ "db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER", - /* 109 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER", - /* 110 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER", - /* 111 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER", - /* 112 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER", - /* 113 */ "db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER", - /* 114 */ "db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER", - /* 115 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER", - /* 116 */ "db_options ::= db_options TABLE_PREFIX signed", - /* 117 */ "db_options ::= db_options TABLE_SUFFIX signed", - /* 118 */ "alter_db_options ::= alter_db_option", - /* 119 */ "alter_db_options ::= alter_db_options alter_db_option", - /* 120 */ "alter_db_option ::= BUFFER NK_INTEGER", - /* 121 */ "alter_db_option ::= CACHEMODEL NK_STRING", - /* 122 */ "alter_db_option ::= CACHESIZE NK_INTEGER", - /* 123 */ "alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER", - /* 124 */ "alter_db_option ::= KEEP integer_list", - /* 125 */ "alter_db_option ::= KEEP variable_list", - /* 126 */ "alter_db_option ::= PAGES NK_INTEGER", - /* 127 */ "alter_db_option ::= REPLICA NK_INTEGER", - /* 128 */ "alter_db_option ::= WAL_LEVEL NK_INTEGER", - /* 129 */ "alter_db_option ::= STT_TRIGGER NK_INTEGER", - /* 130 */ "alter_db_option ::= MINROWS NK_INTEGER", - /* 131 */ "alter_db_option ::= WAL_RETENTION_PERIOD NK_INTEGER", - /* 132 */ "alter_db_option ::= WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER", - /* 133 */ "alter_db_option ::= WAL_RETENTION_SIZE NK_INTEGER", - /* 134 */ "alter_db_option ::= WAL_RETENTION_SIZE NK_MINUS NK_INTEGER", - /* 135 */ "integer_list ::= NK_INTEGER", - /* 136 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER", - /* 137 */ "variable_list ::= NK_VARIABLE", - /* 138 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE", - /* 139 */ "retention_list ::= retention", - /* 140 */ "retention_list ::= retention_list NK_COMMA retention", - /* 141 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE", - /* 142 */ "speed_opt ::=", - /* 143 */ "speed_opt ::= MAX_SPEED NK_INTEGER", - /* 144 */ "start_opt ::=", - /* 145 */ "start_opt ::= START WITH NK_INTEGER", - /* 146 */ "start_opt ::= START WITH NK_STRING", - /* 147 */ "start_opt ::= START WITH TIMESTAMP NK_STRING", - /* 148 */ "end_opt ::=", - /* 149 */ "end_opt ::= END WITH NK_INTEGER", - /* 150 */ "end_opt ::= END WITH NK_STRING", - /* 151 */ "end_opt ::= END WITH TIMESTAMP NK_STRING", - /* 152 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options", - /* 153 */ "cmd ::= CREATE TABLE multi_create_clause", - /* 154 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options", - /* 155 */ "cmd ::= DROP TABLE multi_drop_clause", - /* 156 */ "cmd ::= DROP STABLE exists_opt full_table_name", - /* 157 */ "cmd ::= ALTER TABLE alter_table_clause", - /* 158 */ "cmd ::= ALTER STABLE alter_table_clause", - /* 159 */ "alter_table_clause ::= full_table_name alter_table_options", - /* 160 */ "alter_table_clause ::= full_table_name ADD COLUMN column_def", - /* 161 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name", - /* 162 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_def", - /* 163 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name", - /* 164 */ "alter_table_clause ::= full_table_name ADD TAG column_def", - /* 165 */ "alter_table_clause ::= full_table_name DROP TAG column_name", - /* 166 */ "alter_table_clause ::= full_table_name MODIFY TAG column_def", - /* 167 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name", - /* 168 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal", - /* 169 */ "multi_create_clause ::= create_subtable_clause", - /* 170 */ "multi_create_clause ::= multi_create_clause create_subtable_clause", - /* 171 */ "create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options", - /* 172 */ "multi_drop_clause ::= drop_table_clause", - /* 173 */ "multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause", - /* 174 */ "drop_table_clause ::= exists_opt full_table_name", - /* 175 */ "specific_cols_opt ::=", - /* 176 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP", - /* 177 */ "full_table_name ::= table_name", - /* 178 */ "full_table_name ::= db_name NK_DOT table_name", - /* 179 */ "column_def_list ::= column_def", - /* 180 */ "column_def_list ::= column_def_list NK_COMMA column_def", - /* 181 */ "column_def ::= column_name type_name", - /* 182 */ "column_def ::= column_name type_name COMMENT NK_STRING", - /* 183 */ "type_name ::= BOOL", - /* 184 */ "type_name ::= TINYINT", - /* 185 */ "type_name ::= SMALLINT", - /* 186 */ "type_name ::= INT", - /* 187 */ "type_name ::= INTEGER", - /* 188 */ "type_name ::= BIGINT", - /* 189 */ "type_name ::= FLOAT", - /* 190 */ "type_name ::= DOUBLE", - /* 191 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP", - /* 192 */ "type_name ::= TIMESTAMP", - /* 193 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP", - /* 194 */ "type_name ::= TINYINT UNSIGNED", - /* 195 */ "type_name ::= SMALLINT UNSIGNED", - /* 196 */ "type_name ::= INT UNSIGNED", - /* 197 */ "type_name ::= BIGINT UNSIGNED", - /* 198 */ "type_name ::= JSON", - /* 199 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP", - /* 200 */ "type_name ::= MEDIUMBLOB", - /* 201 */ "type_name ::= BLOB", - /* 202 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP", - /* 203 */ "type_name ::= GEOMETRY NK_LP NK_INTEGER NK_RP", - /* 204 */ "type_name ::= DECIMAL", - /* 205 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP", - /* 206 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP", - /* 207 */ "tags_def_opt ::=", - /* 208 */ "tags_def_opt ::= tags_def", - /* 209 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP", - /* 210 */ "table_options ::=", - /* 211 */ "table_options ::= table_options COMMENT NK_STRING", - /* 212 */ "table_options ::= table_options MAX_DELAY duration_list", - /* 213 */ "table_options ::= table_options WATERMARK duration_list", - /* 214 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP", - /* 215 */ "table_options ::= table_options TTL NK_INTEGER", - /* 216 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP", - /* 217 */ "table_options ::= table_options DELETE_MARK duration_list", - /* 218 */ "alter_table_options ::= alter_table_option", - /* 219 */ "alter_table_options ::= alter_table_options alter_table_option", - /* 220 */ "alter_table_option ::= COMMENT NK_STRING", - /* 221 */ "alter_table_option ::= TTL NK_INTEGER", - /* 222 */ "duration_list ::= duration_literal", - /* 223 */ "duration_list ::= duration_list NK_COMMA duration_literal", - /* 224 */ "rollup_func_list ::= rollup_func_name", - /* 225 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name", - /* 226 */ "rollup_func_name ::= function_name", - /* 227 */ "rollup_func_name ::= FIRST", - /* 228 */ "rollup_func_name ::= LAST", - /* 229 */ "col_name_list ::= col_name", - /* 230 */ "col_name_list ::= col_name_list NK_COMMA col_name", - /* 231 */ "col_name ::= column_name", - /* 232 */ "cmd ::= SHOW DNODES", - /* 233 */ "cmd ::= SHOW USERS", - /* 234 */ "cmd ::= SHOW USER PRIVILEGES", - /* 235 */ "cmd ::= SHOW DATABASES", - /* 236 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt", - /* 237 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt", - /* 238 */ "cmd ::= SHOW db_name_cond_opt VGROUPS", - /* 239 */ "cmd ::= SHOW MNODES", - /* 240 */ "cmd ::= SHOW QNODES", - /* 241 */ "cmd ::= SHOW FUNCTIONS", - /* 242 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt", - /* 243 */ "cmd ::= SHOW INDEXES FROM db_name NK_DOT table_name", - /* 244 */ "cmd ::= SHOW STREAMS", - /* 245 */ "cmd ::= SHOW ACCOUNTS", - /* 246 */ "cmd ::= SHOW APPS", - /* 247 */ "cmd ::= SHOW CONNECTIONS", - /* 248 */ "cmd ::= SHOW LICENCES", - /* 249 */ "cmd ::= SHOW GRANTS", - /* 250 */ "cmd ::= SHOW CREATE DATABASE db_name", - /* 251 */ "cmd ::= SHOW CREATE TABLE full_table_name", - /* 252 */ "cmd ::= SHOW CREATE STABLE full_table_name", - /* 253 */ "cmd ::= SHOW QUERIES", - /* 254 */ "cmd ::= SHOW SCORES", - /* 255 */ "cmd ::= SHOW TOPICS", - /* 256 */ "cmd ::= SHOW VARIABLES", - /* 257 */ "cmd ::= SHOW CLUSTER VARIABLES", - /* 258 */ "cmd ::= SHOW LOCAL VARIABLES", - /* 259 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt", - /* 260 */ "cmd ::= SHOW BNODES", - /* 261 */ "cmd ::= SHOW SNODES", - /* 262 */ "cmd ::= SHOW CLUSTER", - /* 263 */ "cmd ::= SHOW TRANSACTIONS", - /* 264 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name", - /* 265 */ "cmd ::= SHOW CONSUMERS", - /* 266 */ "cmd ::= SHOW SUBSCRIPTIONS", - /* 267 */ "cmd ::= SHOW TAGS FROM table_name_cond from_db_opt", - /* 268 */ "cmd ::= SHOW TAGS FROM db_name NK_DOT table_name", - /* 269 */ "cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt", - /* 270 */ "cmd ::= SHOW TABLE TAGS tag_list_opt FROM db_name NK_DOT table_name", - /* 271 */ "cmd ::= SHOW VNODES ON DNODE NK_INTEGER", - /* 272 */ "cmd ::= SHOW VNODES", - /* 273 */ "cmd ::= SHOW db_name_cond_opt ALIVE", - /* 274 */ "cmd ::= SHOW CLUSTER ALIVE", - /* 275 */ "db_name_cond_opt ::=", - /* 276 */ "db_name_cond_opt ::= db_name NK_DOT", - /* 277 */ "like_pattern_opt ::=", - /* 278 */ "like_pattern_opt ::= LIKE NK_STRING", - /* 279 */ "table_name_cond ::= table_name", - /* 280 */ "from_db_opt ::=", - /* 281 */ "from_db_opt ::= FROM db_name", - /* 282 */ "tag_list_opt ::=", - /* 283 */ "tag_list_opt ::= tag_item", - /* 284 */ "tag_list_opt ::= tag_list_opt NK_COMMA tag_item", - /* 285 */ "tag_item ::= TBNAME", - /* 286 */ "tag_item ::= QTAGS", - /* 287 */ "tag_item ::= column_name", - /* 288 */ "tag_item ::= column_name column_alias", - /* 289 */ "tag_item ::= column_name AS column_alias", - /* 290 */ "cmd ::= CREATE SMA INDEX not_exists_opt full_index_name ON full_table_name index_options", - /* 291 */ "cmd ::= CREATE INDEX not_exists_opt full_index_name ON full_table_name NK_LP col_name_list NK_RP", - /* 292 */ "cmd ::= DROP INDEX exists_opt full_index_name", - /* 293 */ "full_index_name ::= index_name", - /* 294 */ "full_index_name ::= db_name NK_DOT index_name", - /* 295 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt", - /* 296 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt", - /* 297 */ "func_list ::= func", - /* 298 */ "func_list ::= func_list NK_COMMA func", - /* 299 */ "func ::= sma_func_name NK_LP expression_list NK_RP", - /* 300 */ "sma_func_name ::= function_name", - /* 301 */ "sma_func_name ::= COUNT", - /* 302 */ "sma_func_name ::= FIRST", - /* 303 */ "sma_func_name ::= LAST", - /* 304 */ "sma_func_name ::= LAST_ROW", - /* 305 */ "sma_stream_opt ::=", - /* 306 */ "sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal", - /* 307 */ "sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal", - /* 308 */ "sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal", - /* 309 */ "with_meta ::= AS", - /* 310 */ "with_meta ::= WITH META AS", - /* 311 */ "with_meta ::= ONLY META AS", - /* 312 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery", - /* 313 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta DATABASE db_name", - /* 314 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta STABLE full_table_name where_clause_opt", - /* 315 */ "cmd ::= DROP TOPIC exists_opt topic_name", - /* 316 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name", - /* 317 */ "cmd ::= DESC full_table_name", - /* 318 */ "cmd ::= DESCRIBE full_table_name", - /* 319 */ "cmd ::= RESET QUERY CACHE", - /* 320 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery", - /* 321 */ "cmd ::= EXPLAIN analyze_opt explain_options insert_query", - /* 322 */ "analyze_opt ::=", - /* 323 */ "analyze_opt ::= ANALYZE", - /* 324 */ "explain_options ::=", - /* 325 */ "explain_options ::= explain_options VERBOSE NK_BOOL", - /* 326 */ "explain_options ::= explain_options RATIO NK_FLOAT", - /* 327 */ "cmd ::= CREATE or_replace_opt agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt language_opt", - /* 328 */ "cmd ::= DROP FUNCTION exists_opt function_name", - /* 329 */ "agg_func_opt ::=", - /* 330 */ "agg_func_opt ::= AGGREGATE", - /* 331 */ "bufsize_opt ::=", - /* 332 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", - /* 333 */ "language_opt ::=", - /* 334 */ "language_opt ::= LANGUAGE NK_STRING", - /* 335 */ "or_replace_opt ::=", - /* 336 */ "or_replace_opt ::= OR REPLACE", - /* 337 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name col_list_opt tag_def_or_ref_opt subtable_opt AS query_or_subquery", - /* 338 */ "cmd ::= DROP STREAM exists_opt stream_name", - /* 339 */ "cmd ::= PAUSE STREAM exists_opt stream_name", - /* 340 */ "cmd ::= RESUME STREAM exists_opt ignore_opt stream_name", - /* 341 */ "col_list_opt ::=", - /* 342 */ "col_list_opt ::= NK_LP col_name_list NK_RP", - /* 343 */ "tag_def_or_ref_opt ::=", - /* 344 */ "tag_def_or_ref_opt ::= tags_def", - /* 345 */ "tag_def_or_ref_opt ::= TAGS NK_LP col_name_list NK_RP", - /* 346 */ "stream_options ::=", - /* 347 */ "stream_options ::= stream_options TRIGGER AT_ONCE", - /* 348 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE", - /* 349 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal", - /* 350 */ "stream_options ::= stream_options WATERMARK duration_literal", - /* 351 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER", - /* 352 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER", - /* 353 */ "stream_options ::= stream_options DELETE_MARK duration_literal", - /* 354 */ "stream_options ::= stream_options IGNORE UPDATE NK_INTEGER", - /* 355 */ "subtable_opt ::=", - /* 356 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP", - /* 357 */ "ignore_opt ::=", - /* 358 */ "ignore_opt ::= IGNORE UNTREATED", - /* 359 */ "cmd ::= KILL CONNECTION NK_INTEGER", - /* 360 */ "cmd ::= KILL QUERY NK_STRING", - /* 361 */ "cmd ::= KILL TRANSACTION NK_INTEGER", - /* 362 */ "cmd ::= BALANCE VGROUP", - /* 363 */ "cmd ::= BALANCE VGROUP LEADER", - /* 364 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", - /* 365 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", - /* 366 */ "cmd ::= SPLIT VGROUP NK_INTEGER", - /* 367 */ "dnode_list ::= DNODE NK_INTEGER", - /* 368 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", - /* 369 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", - /* 370 */ "cmd ::= query_or_subquery", - /* 371 */ "cmd ::= insert_query", - /* 372 */ "insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", - /* 373 */ "insert_query ::= INSERT INTO full_table_name query_or_subquery", - /* 374 */ "literal ::= NK_INTEGER", - /* 375 */ "literal ::= NK_FLOAT", - /* 376 */ "literal ::= NK_STRING", - /* 377 */ "literal ::= NK_BOOL", - /* 378 */ "literal ::= TIMESTAMP NK_STRING", - /* 379 */ "literal ::= duration_literal", - /* 380 */ "literal ::= NULL", - /* 381 */ "literal ::= NK_QUESTION", - /* 382 */ "duration_literal ::= NK_VARIABLE", - /* 383 */ "signed ::= NK_INTEGER", - /* 384 */ "signed ::= NK_PLUS NK_INTEGER", - /* 385 */ "signed ::= NK_MINUS NK_INTEGER", - /* 386 */ "signed ::= NK_FLOAT", - /* 387 */ "signed ::= NK_PLUS NK_FLOAT", - /* 388 */ "signed ::= NK_MINUS NK_FLOAT", - /* 389 */ "signed_literal ::= signed", - /* 390 */ "signed_literal ::= NK_STRING", - /* 391 */ "signed_literal ::= NK_BOOL", - /* 392 */ "signed_literal ::= TIMESTAMP NK_STRING", - /* 393 */ "signed_literal ::= duration_literal", - /* 394 */ "signed_literal ::= NULL", - /* 395 */ "signed_literal ::= literal_func", - /* 396 */ "signed_literal ::= NK_QUESTION", - /* 397 */ "literal_list ::= signed_literal", - /* 398 */ "literal_list ::= literal_list NK_COMMA signed_literal", - /* 399 */ "db_name ::= NK_ID", - /* 400 */ "table_name ::= NK_ID", - /* 401 */ "column_name ::= NK_ID", - /* 402 */ "function_name ::= NK_ID", - /* 403 */ "table_alias ::= NK_ID", - /* 404 */ "column_alias ::= NK_ID", - /* 405 */ "user_name ::= NK_ID", - /* 406 */ "topic_name ::= NK_ID", - /* 407 */ "stream_name ::= NK_ID", - /* 408 */ "cgroup_name ::= NK_ID", - /* 409 */ "index_name ::= NK_ID", - /* 410 */ "expr_or_subquery ::= expression", - /* 411 */ "expression ::= literal", - /* 412 */ "expression ::= pseudo_column", - /* 413 */ "expression ::= column_reference", - /* 414 */ "expression ::= function_expression", - /* 415 */ "expression ::= case_when_expression", - /* 416 */ "expression ::= NK_LP expression NK_RP", - /* 417 */ "expression ::= NK_PLUS expr_or_subquery", - /* 418 */ "expression ::= NK_MINUS expr_or_subquery", - /* 419 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery", - /* 420 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery", - /* 421 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery", - /* 422 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery", - /* 423 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery", - /* 424 */ "expression ::= column_reference NK_ARROW NK_STRING", - /* 425 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery", - /* 426 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery", - /* 427 */ "expression_list ::= expr_or_subquery", - /* 428 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery", - /* 429 */ "column_reference ::= column_name", - /* 430 */ "column_reference ::= table_name NK_DOT column_name", - /* 431 */ "pseudo_column ::= ROWTS", - /* 432 */ "pseudo_column ::= TBNAME", - /* 433 */ "pseudo_column ::= table_name NK_DOT TBNAME", - /* 434 */ "pseudo_column ::= QSTART", - /* 435 */ "pseudo_column ::= QEND", - /* 436 */ "pseudo_column ::= QDURATION", - /* 437 */ "pseudo_column ::= WSTART", - /* 438 */ "pseudo_column ::= WEND", - /* 439 */ "pseudo_column ::= WDURATION", - /* 440 */ "pseudo_column ::= IROWTS", - /* 441 */ "pseudo_column ::= ISFILLED", - /* 442 */ "pseudo_column ::= QTAGS", - /* 443 */ "function_expression ::= function_name NK_LP expression_list NK_RP", - /* 444 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", - /* 445 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP", - /* 446 */ "function_expression ::= literal_func", - /* 447 */ "literal_func ::= noarg_func NK_LP NK_RP", - /* 448 */ "literal_func ::= NOW", - /* 449 */ "noarg_func ::= NOW", - /* 450 */ "noarg_func ::= TODAY", - /* 451 */ "noarg_func ::= TIMEZONE", - /* 452 */ "noarg_func ::= DATABASE", - /* 453 */ "noarg_func ::= CLIENT_VERSION", - /* 454 */ "noarg_func ::= SERVER_VERSION", - /* 455 */ "noarg_func ::= SERVER_STATUS", - /* 456 */ "noarg_func ::= CURRENT_USER", - /* 457 */ "noarg_func ::= USER", - /* 458 */ "star_func ::= COUNT", - /* 459 */ "star_func ::= FIRST", - /* 460 */ "star_func ::= LAST", - /* 461 */ "star_func ::= LAST_ROW", - /* 462 */ "star_func_para_list ::= NK_STAR", - /* 463 */ "star_func_para_list ::= other_para_list", - /* 464 */ "other_para_list ::= star_func_para", - /* 465 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", - /* 466 */ "star_func_para ::= expr_or_subquery", - /* 467 */ "star_func_para ::= table_name NK_DOT NK_STAR", - /* 468 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END", - /* 469 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END", - /* 470 */ "when_then_list ::= when_then_expr", - /* 471 */ "when_then_list ::= when_then_list when_then_expr", - /* 472 */ "when_then_expr ::= WHEN common_expression THEN common_expression", - /* 473 */ "case_when_else_opt ::=", - /* 474 */ "case_when_else_opt ::= ELSE common_expression", - /* 475 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery", - /* 476 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery", - /* 477 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery", - /* 478 */ "predicate ::= expr_or_subquery IS NULL", - /* 479 */ "predicate ::= expr_or_subquery IS NOT NULL", - /* 480 */ "predicate ::= expr_or_subquery in_op in_predicate_value", - /* 481 */ "compare_op ::= NK_LT", - /* 482 */ "compare_op ::= NK_GT", - /* 483 */ "compare_op ::= NK_LE", - /* 484 */ "compare_op ::= NK_GE", - /* 485 */ "compare_op ::= NK_NE", - /* 486 */ "compare_op ::= NK_EQ", - /* 487 */ "compare_op ::= LIKE", - /* 488 */ "compare_op ::= NOT LIKE", - /* 489 */ "compare_op ::= MATCH", - /* 490 */ "compare_op ::= NMATCH", - /* 491 */ "compare_op ::= CONTAINS", - /* 492 */ "in_op ::= IN", - /* 493 */ "in_op ::= NOT IN", - /* 494 */ "in_predicate_value ::= NK_LP literal_list NK_RP", - /* 495 */ "boolean_value_expression ::= boolean_primary", - /* 496 */ "boolean_value_expression ::= NOT boolean_primary", - /* 497 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", - /* 498 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", - /* 499 */ "boolean_primary ::= predicate", - /* 500 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", - /* 501 */ "common_expression ::= expr_or_subquery", - /* 502 */ "common_expression ::= boolean_value_expression", - /* 503 */ "from_clause_opt ::=", - /* 504 */ "from_clause_opt ::= FROM table_reference_list", - /* 505 */ "table_reference_list ::= table_reference", - /* 506 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", - /* 507 */ "table_reference ::= table_primary", - /* 508 */ "table_reference ::= joined_table", - /* 509 */ "table_primary ::= table_name alias_opt", - /* 510 */ "table_primary ::= db_name NK_DOT table_name alias_opt", - /* 511 */ "table_primary ::= subquery alias_opt", - /* 512 */ "table_primary ::= parenthesized_joined_table", - /* 513 */ "alias_opt ::=", - /* 514 */ "alias_opt ::= table_alias", - /* 515 */ "alias_opt ::= AS table_alias", - /* 516 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", - /* 517 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", - /* 518 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", - /* 519 */ "join_type ::=", - /* 520 */ "join_type ::= INNER", - /* 521 */ "query_specification ::= SELECT hint_list tag_mode_opt set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt", - /* 522 */ "hint_list ::=", - /* 523 */ "hint_list ::= NK_HINT", - /* 524 */ "tag_mode_opt ::=", - /* 525 */ "tag_mode_opt ::= TAGS", - /* 526 */ "set_quantifier_opt ::=", - /* 527 */ "set_quantifier_opt ::= DISTINCT", - /* 528 */ "set_quantifier_opt ::= ALL", - /* 529 */ "select_list ::= select_item", - /* 530 */ "select_list ::= select_list NK_COMMA select_item", - /* 531 */ "select_item ::= NK_STAR", - /* 532 */ "select_item ::= common_expression", - /* 533 */ "select_item ::= common_expression column_alias", - /* 534 */ "select_item ::= common_expression AS column_alias", - /* 535 */ "select_item ::= table_name NK_DOT NK_STAR", - /* 536 */ "where_clause_opt ::=", - /* 537 */ "where_clause_opt ::= WHERE search_condition", - /* 538 */ "partition_by_clause_opt ::=", - /* 539 */ "partition_by_clause_opt ::= PARTITION BY partition_list", - /* 540 */ "partition_list ::= partition_item", - /* 541 */ "partition_list ::= partition_list NK_COMMA partition_item", - /* 542 */ "partition_item ::= expr_or_subquery", - /* 543 */ "partition_item ::= expr_or_subquery column_alias", - /* 544 */ "partition_item ::= expr_or_subquery AS column_alias", - /* 545 */ "twindow_clause_opt ::=", - /* 546 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", - /* 547 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP", - /* 548 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", - /* 549 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", - /* 550 */ "twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition", - /* 551 */ "sliding_opt ::=", - /* 552 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", - /* 553 */ "fill_opt ::=", - /* 554 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", - /* 555 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA expression_list NK_RP", - /* 556 */ "fill_opt ::= FILL NK_LP VALUE_F NK_COMMA expression_list NK_RP", - /* 557 */ "fill_mode ::= NONE", - /* 558 */ "fill_mode ::= PREV", - /* 559 */ "fill_mode ::= NULL", - /* 560 */ "fill_mode ::= NULL_F", - /* 561 */ "fill_mode ::= LINEAR", - /* 562 */ "fill_mode ::= NEXT", - /* 563 */ "group_by_clause_opt ::=", - /* 564 */ "group_by_clause_opt ::= GROUP BY group_by_list", - /* 565 */ "group_by_list ::= expr_or_subquery", - /* 566 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery", - /* 567 */ "having_clause_opt ::=", - /* 568 */ "having_clause_opt ::= HAVING search_condition", - /* 569 */ "range_opt ::=", - /* 570 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP", - /* 571 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_RP", - /* 572 */ "every_opt ::=", - /* 573 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", - /* 574 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", - /* 575 */ "query_simple ::= query_specification", - /* 576 */ "query_simple ::= union_query_expression", - /* 577 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", - /* 578 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", - /* 579 */ "query_simple_or_subquery ::= query_simple", - /* 580 */ "query_simple_or_subquery ::= subquery", - /* 581 */ "query_or_subquery ::= query_expression", - /* 582 */ "query_or_subquery ::= subquery", - /* 583 */ "order_by_clause_opt ::=", - /* 584 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", - /* 585 */ "slimit_clause_opt ::=", - /* 586 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", - /* 587 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", - /* 588 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 589 */ "limit_clause_opt ::=", - /* 590 */ "limit_clause_opt ::= LIMIT NK_INTEGER", - /* 591 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", - /* 592 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 593 */ "subquery ::= NK_LP query_expression NK_RP", - /* 594 */ "subquery ::= NK_LP subquery NK_RP", - /* 595 */ "search_condition ::= common_expression", - /* 596 */ "sort_specification_list ::= sort_specification", - /* 597 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", - /* 598 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt", - /* 599 */ "ordering_specification_opt ::=", - /* 600 */ "ordering_specification_opt ::= ASC", - /* 601 */ "ordering_specification_opt ::= DESC", - /* 602 */ "null_ordering_opt ::=", - /* 603 */ "null_ordering_opt ::= NULLS FIRST", - /* 604 */ "null_ordering_opt ::= NULLS LAST", + /* 24 */ "ip_range_list ::= NK_STRING", + /* 25 */ "ip_range_list ::= ip_range_list NK_COMMA NK_STRING", + /* 26 */ "white_list ::= HOST ip_range_list", + /* 27 */ "white_list_opt ::=", + /* 28 */ "white_list_opt ::= white_list", + /* 29 */ "cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt white_list_opt", + /* 30 */ "cmd ::= ALTER USER user_name PASS NK_STRING", + /* 31 */ "cmd ::= ALTER USER user_name ENABLE NK_INTEGER", + /* 32 */ "cmd ::= ALTER USER user_name SYSINFO NK_INTEGER", + /* 33 */ "cmd ::= ALTER USER user_name ADD white_list", + /* 34 */ "cmd ::= ALTER USER user_name DROP white_list", + /* 35 */ "cmd ::= DROP USER user_name", + /* 36 */ "sysinfo_opt ::=", + /* 37 */ "sysinfo_opt ::= SYSINFO NK_INTEGER", + /* 38 */ "cmd ::= GRANT privileges ON priv_level with_opt TO user_name", + /* 39 */ "cmd ::= REVOKE privileges ON priv_level with_opt FROM user_name", + /* 40 */ "privileges ::= ALL", + /* 41 */ "privileges ::= priv_type_list", + /* 42 */ "privileges ::= SUBSCRIBE", + /* 43 */ "priv_type_list ::= priv_type", + /* 44 */ "priv_type_list ::= priv_type_list NK_COMMA priv_type", + /* 45 */ "priv_type ::= READ", + /* 46 */ "priv_type ::= WRITE", + /* 47 */ "priv_level ::= NK_STAR NK_DOT NK_STAR", + /* 48 */ "priv_level ::= db_name NK_DOT NK_STAR", + /* 49 */ "priv_level ::= db_name NK_DOT table_name", + /* 50 */ "priv_level ::= topic_name", + /* 51 */ "with_opt ::=", + /* 52 */ "with_opt ::= WITH search_condition", + /* 53 */ "cmd ::= CREATE DNODE dnode_endpoint", + /* 54 */ "cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER", + /* 55 */ "cmd ::= DROP DNODE NK_INTEGER force_opt", + /* 56 */ "cmd ::= DROP DNODE dnode_endpoint force_opt", + /* 57 */ "cmd ::= DROP DNODE NK_INTEGER unsafe_opt", + /* 58 */ "cmd ::= DROP DNODE dnode_endpoint unsafe_opt", + /* 59 */ "cmd ::= ALTER DNODE NK_INTEGER NK_STRING", + /* 60 */ "cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING", + /* 61 */ "cmd ::= ALTER ALL DNODES NK_STRING", + /* 62 */ "cmd ::= ALTER ALL DNODES NK_STRING NK_STRING", + /* 63 */ "cmd ::= RESTORE DNODE NK_INTEGER", + /* 64 */ "dnode_endpoint ::= NK_STRING", + /* 65 */ "dnode_endpoint ::= NK_ID", + /* 66 */ "dnode_endpoint ::= NK_IPTOKEN", + /* 67 */ "force_opt ::=", + /* 68 */ "force_opt ::= FORCE", + /* 69 */ "unsafe_opt ::= UNSAFE", + /* 70 */ "cmd ::= ALTER LOCAL NK_STRING", + /* 71 */ "cmd ::= ALTER LOCAL NK_STRING NK_STRING", + /* 72 */ "cmd ::= CREATE QNODE ON DNODE NK_INTEGER", + /* 73 */ "cmd ::= DROP QNODE ON DNODE NK_INTEGER", + /* 74 */ "cmd ::= RESTORE QNODE ON DNODE NK_INTEGER", + /* 75 */ "cmd ::= CREATE BNODE ON DNODE NK_INTEGER", + /* 76 */ "cmd ::= DROP BNODE ON DNODE NK_INTEGER", + /* 77 */ "cmd ::= CREATE SNODE ON DNODE NK_INTEGER", + /* 78 */ "cmd ::= DROP SNODE ON DNODE NK_INTEGER", + /* 79 */ "cmd ::= CREATE MNODE ON DNODE NK_INTEGER", + /* 80 */ "cmd ::= DROP MNODE ON DNODE NK_INTEGER", + /* 81 */ "cmd ::= RESTORE MNODE ON DNODE NK_INTEGER", + /* 82 */ "cmd ::= RESTORE VNODE ON DNODE NK_INTEGER", + /* 83 */ "cmd ::= CREATE DATABASE not_exists_opt db_name db_options", + /* 84 */ "cmd ::= DROP DATABASE exists_opt db_name", + /* 85 */ "cmd ::= USE db_name", + /* 86 */ "cmd ::= ALTER DATABASE db_name alter_db_options", + /* 87 */ "cmd ::= FLUSH DATABASE db_name", + /* 88 */ "cmd ::= TRIM DATABASE db_name speed_opt", + /* 89 */ "cmd ::= COMPACT DATABASE db_name start_opt end_opt", + /* 90 */ "not_exists_opt ::= IF NOT EXISTS", + /* 91 */ "not_exists_opt ::=", + /* 92 */ "exists_opt ::= IF EXISTS", + /* 93 */ "exists_opt ::=", + /* 94 */ "db_options ::=", + /* 95 */ "db_options ::= db_options BUFFER NK_INTEGER", + /* 96 */ "db_options ::= db_options CACHEMODEL NK_STRING", + /* 97 */ "db_options ::= db_options CACHESIZE NK_INTEGER", + /* 98 */ "db_options ::= db_options COMP NK_INTEGER", + /* 99 */ "db_options ::= db_options DURATION NK_INTEGER", + /* 100 */ "db_options ::= db_options DURATION NK_VARIABLE", + /* 101 */ "db_options ::= db_options MAXROWS NK_INTEGER", + /* 102 */ "db_options ::= db_options MINROWS NK_INTEGER", + /* 103 */ "db_options ::= db_options KEEP integer_list", + /* 104 */ "db_options ::= db_options KEEP variable_list", + /* 105 */ "db_options ::= db_options PAGES NK_INTEGER", + /* 106 */ "db_options ::= db_options PAGESIZE NK_INTEGER", + /* 107 */ "db_options ::= db_options TSDB_PAGESIZE NK_INTEGER", + /* 108 */ "db_options ::= db_options PRECISION NK_STRING", + /* 109 */ "db_options ::= db_options REPLICA NK_INTEGER", + /* 110 */ "db_options ::= db_options VGROUPS NK_INTEGER", + /* 111 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER", + /* 112 */ "db_options ::= db_options RETENTIONS retention_list", + /* 113 */ "db_options ::= db_options SCHEMALESS NK_INTEGER", + /* 114 */ "db_options ::= db_options WAL_LEVEL NK_INTEGER", + /* 115 */ "db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER", + /* 116 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER", + /* 117 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER", + /* 118 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER", + /* 119 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER", + /* 120 */ "db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER", + /* 121 */ "db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER", + /* 122 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER", + /* 123 */ "db_options ::= db_options TABLE_PREFIX signed", + /* 124 */ "db_options ::= db_options TABLE_SUFFIX signed", + /* 125 */ "alter_db_options ::= alter_db_option", + /* 126 */ "alter_db_options ::= alter_db_options alter_db_option", + /* 127 */ "alter_db_option ::= BUFFER NK_INTEGER", + /* 128 */ "alter_db_option ::= CACHEMODEL NK_STRING", + /* 129 */ "alter_db_option ::= CACHESIZE NK_INTEGER", + /* 130 */ "alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER", + /* 131 */ "alter_db_option ::= KEEP integer_list", + /* 132 */ "alter_db_option ::= KEEP variable_list", + /* 133 */ "alter_db_option ::= PAGES NK_INTEGER", + /* 134 */ "alter_db_option ::= REPLICA NK_INTEGER", + /* 135 */ "alter_db_option ::= WAL_LEVEL NK_INTEGER", + /* 136 */ "alter_db_option ::= STT_TRIGGER NK_INTEGER", + /* 137 */ "alter_db_option ::= MINROWS NK_INTEGER", + /* 138 */ "alter_db_option ::= WAL_RETENTION_PERIOD NK_INTEGER", + /* 139 */ "alter_db_option ::= WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER", + /* 140 */ "alter_db_option ::= WAL_RETENTION_SIZE NK_INTEGER", + /* 141 */ "alter_db_option ::= WAL_RETENTION_SIZE NK_MINUS NK_INTEGER", + /* 142 */ "integer_list ::= NK_INTEGER", + /* 143 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER", + /* 144 */ "variable_list ::= NK_VARIABLE", + /* 145 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE", + /* 146 */ "retention_list ::= retention", + /* 147 */ "retention_list ::= retention_list NK_COMMA retention", + /* 148 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE", + /* 149 */ "speed_opt ::=", + /* 150 */ "speed_opt ::= MAX_SPEED NK_INTEGER", + /* 151 */ "start_opt ::=", + /* 152 */ "start_opt ::= START WITH NK_INTEGER", + /* 153 */ "start_opt ::= START WITH NK_STRING", + /* 154 */ "start_opt ::= START WITH TIMESTAMP NK_STRING", + /* 155 */ "end_opt ::=", + /* 156 */ "end_opt ::= END WITH NK_INTEGER", + /* 157 */ "end_opt ::= END WITH NK_STRING", + /* 158 */ "end_opt ::= END WITH TIMESTAMP NK_STRING", + /* 159 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options", + /* 160 */ "cmd ::= CREATE TABLE multi_create_clause", + /* 161 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options", + /* 162 */ "cmd ::= DROP TABLE multi_drop_clause", + /* 163 */ "cmd ::= DROP STABLE exists_opt full_table_name", + /* 164 */ "cmd ::= ALTER TABLE alter_table_clause", + /* 165 */ "cmd ::= ALTER STABLE alter_table_clause", + /* 166 */ "alter_table_clause ::= full_table_name alter_table_options", + /* 167 */ "alter_table_clause ::= full_table_name ADD COLUMN column_def", + /* 168 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name", + /* 169 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_def", + /* 170 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name", + /* 171 */ "alter_table_clause ::= full_table_name ADD TAG column_def", + /* 172 */ "alter_table_clause ::= full_table_name DROP TAG column_name", + /* 173 */ "alter_table_clause ::= full_table_name MODIFY TAG column_def", + /* 174 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name", + /* 175 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal", + /* 176 */ "multi_create_clause ::= create_subtable_clause", + /* 177 */ "multi_create_clause ::= multi_create_clause create_subtable_clause", + /* 178 */ "create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options", + /* 179 */ "multi_drop_clause ::= drop_table_clause", + /* 180 */ "multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause", + /* 181 */ "drop_table_clause ::= exists_opt full_table_name", + /* 182 */ "specific_cols_opt ::=", + /* 183 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP", + /* 184 */ "full_table_name ::= table_name", + /* 185 */ "full_table_name ::= db_name NK_DOT table_name", + /* 186 */ "column_def_list ::= column_def", + /* 187 */ "column_def_list ::= column_def_list NK_COMMA column_def", + /* 188 */ "column_def ::= column_name type_name", + /* 189 */ "column_def ::= column_name type_name COMMENT NK_STRING", + /* 190 */ "type_name ::= BOOL", + /* 191 */ "type_name ::= TINYINT", + /* 192 */ "type_name ::= SMALLINT", + /* 193 */ "type_name ::= INT", + /* 194 */ "type_name ::= INTEGER", + /* 195 */ "type_name ::= BIGINT", + /* 196 */ "type_name ::= FLOAT", + /* 197 */ "type_name ::= DOUBLE", + /* 198 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP", + /* 199 */ "type_name ::= TIMESTAMP", + /* 200 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP", + /* 201 */ "type_name ::= TINYINT UNSIGNED", + /* 202 */ "type_name ::= SMALLINT UNSIGNED", + /* 203 */ "type_name ::= INT UNSIGNED", + /* 204 */ "type_name ::= BIGINT UNSIGNED", + /* 205 */ "type_name ::= JSON", + /* 206 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP", + /* 207 */ "type_name ::= MEDIUMBLOB", + /* 208 */ "type_name ::= BLOB", + /* 209 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP", + /* 210 */ "type_name ::= GEOMETRY NK_LP NK_INTEGER NK_RP", + /* 211 */ "type_name ::= DECIMAL", + /* 212 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP", + /* 213 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP", + /* 214 */ "tags_def_opt ::=", + /* 215 */ "tags_def_opt ::= tags_def", + /* 216 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP", + /* 217 */ "table_options ::=", + /* 218 */ "table_options ::= table_options COMMENT NK_STRING", + /* 219 */ "table_options ::= table_options MAX_DELAY duration_list", + /* 220 */ "table_options ::= table_options WATERMARK duration_list", + /* 221 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP", + /* 222 */ "table_options ::= table_options TTL NK_INTEGER", + /* 223 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP", + /* 224 */ "table_options ::= table_options DELETE_MARK duration_list", + /* 225 */ "alter_table_options ::= alter_table_option", + /* 226 */ "alter_table_options ::= alter_table_options alter_table_option", + /* 227 */ "alter_table_option ::= COMMENT NK_STRING", + /* 228 */ "alter_table_option ::= TTL NK_INTEGER", + /* 229 */ "duration_list ::= duration_literal", + /* 230 */ "duration_list ::= duration_list NK_COMMA duration_literal", + /* 231 */ "rollup_func_list ::= rollup_func_name", + /* 232 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name", + /* 233 */ "rollup_func_name ::= function_name", + /* 234 */ "rollup_func_name ::= FIRST", + /* 235 */ "rollup_func_name ::= LAST", + /* 236 */ "col_name_list ::= col_name", + /* 237 */ "col_name_list ::= col_name_list NK_COMMA col_name", + /* 238 */ "col_name ::= column_name", + /* 239 */ "cmd ::= SHOW DNODES", + /* 240 */ "cmd ::= SHOW USERS", + /* 241 */ "cmd ::= SHOW USER PRIVILEGES", + /* 242 */ "cmd ::= SHOW DATABASES", + /* 243 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt", + /* 244 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt", + /* 245 */ "cmd ::= SHOW db_name_cond_opt VGROUPS", + /* 246 */ "cmd ::= SHOW MNODES", + /* 247 */ "cmd ::= SHOW QNODES", + /* 248 */ "cmd ::= SHOW FUNCTIONS", + /* 249 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt", + /* 250 */ "cmd ::= SHOW INDEXES FROM db_name NK_DOT table_name", + /* 251 */ "cmd ::= SHOW STREAMS", + /* 252 */ "cmd ::= SHOW ACCOUNTS", + /* 253 */ "cmd ::= SHOW APPS", + /* 254 */ "cmd ::= SHOW CONNECTIONS", + /* 255 */ "cmd ::= SHOW LICENCES", + /* 256 */ "cmd ::= SHOW GRANTS", + /* 257 */ "cmd ::= SHOW CREATE DATABASE db_name", + /* 258 */ "cmd ::= SHOW CREATE TABLE full_table_name", + /* 259 */ "cmd ::= SHOW CREATE STABLE full_table_name", + /* 260 */ "cmd ::= SHOW QUERIES", + /* 261 */ "cmd ::= SHOW SCORES", + /* 262 */ "cmd ::= SHOW TOPICS", + /* 263 */ "cmd ::= SHOW VARIABLES", + /* 264 */ "cmd ::= SHOW CLUSTER VARIABLES", + /* 265 */ "cmd ::= SHOW LOCAL VARIABLES", + /* 266 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt", + /* 267 */ "cmd ::= SHOW BNODES", + /* 268 */ "cmd ::= SHOW SNODES", + /* 269 */ "cmd ::= SHOW CLUSTER", + /* 270 */ "cmd ::= SHOW TRANSACTIONS", + /* 271 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name", + /* 272 */ "cmd ::= SHOW CONSUMERS", + /* 273 */ "cmd ::= SHOW SUBSCRIPTIONS", + /* 274 */ "cmd ::= SHOW TAGS FROM table_name_cond from_db_opt", + /* 275 */ "cmd ::= SHOW TAGS FROM db_name NK_DOT table_name", + /* 276 */ "cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt", + /* 277 */ "cmd ::= SHOW TABLE TAGS tag_list_opt FROM db_name NK_DOT table_name", + /* 278 */ "cmd ::= SHOW VNODES ON DNODE NK_INTEGER", + /* 279 */ "cmd ::= SHOW VNODES", + /* 280 */ "cmd ::= SHOW db_name_cond_opt ALIVE", + /* 281 */ "cmd ::= SHOW CLUSTER ALIVE", + /* 282 */ "db_name_cond_opt ::=", + /* 283 */ "db_name_cond_opt ::= db_name NK_DOT", + /* 284 */ "like_pattern_opt ::=", + /* 285 */ "like_pattern_opt ::= LIKE NK_STRING", + /* 286 */ "table_name_cond ::= table_name", + /* 287 */ "from_db_opt ::=", + /* 288 */ "from_db_opt ::= FROM db_name", + /* 289 */ "tag_list_opt ::=", + /* 290 */ "tag_list_opt ::= tag_item", + /* 291 */ "tag_list_opt ::= tag_list_opt NK_COMMA tag_item", + /* 292 */ "tag_item ::= TBNAME", + /* 293 */ "tag_item ::= QTAGS", + /* 294 */ "tag_item ::= column_name", + /* 295 */ "tag_item ::= column_name column_alias", + /* 296 */ "tag_item ::= column_name AS column_alias", + /* 297 */ "cmd ::= CREATE SMA INDEX not_exists_opt full_index_name ON full_table_name index_options", + /* 298 */ "cmd ::= CREATE INDEX not_exists_opt full_index_name ON full_table_name NK_LP col_name_list NK_RP", + /* 299 */ "cmd ::= DROP INDEX exists_opt full_index_name", + /* 300 */ "full_index_name ::= index_name", + /* 301 */ "full_index_name ::= db_name NK_DOT index_name", + /* 302 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt", + /* 303 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt", + /* 304 */ "func_list ::= func", + /* 305 */ "func_list ::= func_list NK_COMMA func", + /* 306 */ "func ::= sma_func_name NK_LP expression_list NK_RP", + /* 307 */ "sma_func_name ::= function_name", + /* 308 */ "sma_func_name ::= COUNT", + /* 309 */ "sma_func_name ::= FIRST", + /* 310 */ "sma_func_name ::= LAST", + /* 311 */ "sma_func_name ::= LAST_ROW", + /* 312 */ "sma_stream_opt ::=", + /* 313 */ "sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal", + /* 314 */ "sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal", + /* 315 */ "sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal", + /* 316 */ "with_meta ::= AS", + /* 317 */ "with_meta ::= WITH META AS", + /* 318 */ "with_meta ::= ONLY META AS", + /* 319 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery", + /* 320 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta DATABASE db_name", + /* 321 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta STABLE full_table_name where_clause_opt", + /* 322 */ "cmd ::= DROP TOPIC exists_opt topic_name", + /* 323 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name", + /* 324 */ "cmd ::= DESC full_table_name", + /* 325 */ "cmd ::= DESCRIBE full_table_name", + /* 326 */ "cmd ::= RESET QUERY CACHE", + /* 327 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery", + /* 328 */ "cmd ::= EXPLAIN analyze_opt explain_options insert_query", + /* 329 */ "analyze_opt ::=", + /* 330 */ "analyze_opt ::= ANALYZE", + /* 331 */ "explain_options ::=", + /* 332 */ "explain_options ::= explain_options VERBOSE NK_BOOL", + /* 333 */ "explain_options ::= explain_options RATIO NK_FLOAT", + /* 334 */ "cmd ::= CREATE or_replace_opt agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt language_opt", + /* 335 */ "cmd ::= DROP FUNCTION exists_opt function_name", + /* 336 */ "agg_func_opt ::=", + /* 337 */ "agg_func_opt ::= AGGREGATE", + /* 338 */ "bufsize_opt ::=", + /* 339 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", + /* 340 */ "language_opt ::=", + /* 341 */ "language_opt ::= LANGUAGE NK_STRING", + /* 342 */ "or_replace_opt ::=", + /* 343 */ "or_replace_opt ::= OR REPLACE", + /* 344 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name col_list_opt tag_def_or_ref_opt subtable_opt AS query_or_subquery", + /* 345 */ "cmd ::= DROP STREAM exists_opt stream_name", + /* 346 */ "cmd ::= PAUSE STREAM exists_opt stream_name", + /* 347 */ "cmd ::= RESUME STREAM exists_opt ignore_opt stream_name", + /* 348 */ "col_list_opt ::=", + /* 349 */ "col_list_opt ::= NK_LP col_name_list NK_RP", + /* 350 */ "tag_def_or_ref_opt ::=", + /* 351 */ "tag_def_or_ref_opt ::= tags_def", + /* 352 */ "tag_def_or_ref_opt ::= TAGS NK_LP col_name_list NK_RP", + /* 353 */ "stream_options ::=", + /* 354 */ "stream_options ::= stream_options TRIGGER AT_ONCE", + /* 355 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE", + /* 356 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal", + /* 357 */ "stream_options ::= stream_options WATERMARK duration_literal", + /* 358 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER", + /* 359 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER", + /* 360 */ "stream_options ::= stream_options DELETE_MARK duration_literal", + /* 361 */ "stream_options ::= stream_options IGNORE UPDATE NK_INTEGER", + /* 362 */ "subtable_opt ::=", + /* 363 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP", + /* 364 */ "ignore_opt ::=", + /* 365 */ "ignore_opt ::= IGNORE UNTREATED", + /* 366 */ "cmd ::= KILL CONNECTION NK_INTEGER", + /* 367 */ "cmd ::= KILL QUERY NK_STRING", + /* 368 */ "cmd ::= KILL TRANSACTION NK_INTEGER", + /* 369 */ "cmd ::= BALANCE VGROUP", + /* 370 */ "cmd ::= BALANCE VGROUP LEADER", + /* 371 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", + /* 372 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", + /* 373 */ "cmd ::= SPLIT VGROUP NK_INTEGER", + /* 374 */ "dnode_list ::= DNODE NK_INTEGER", + /* 375 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", + /* 376 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", + /* 377 */ "cmd ::= query_or_subquery", + /* 378 */ "cmd ::= insert_query", + /* 379 */ "insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", + /* 380 */ "insert_query ::= INSERT INTO full_table_name query_or_subquery", + /* 381 */ "literal ::= NK_INTEGER", + /* 382 */ "literal ::= NK_FLOAT", + /* 383 */ "literal ::= NK_STRING", + /* 384 */ "literal ::= NK_BOOL", + /* 385 */ "literal ::= TIMESTAMP NK_STRING", + /* 386 */ "literal ::= duration_literal", + /* 387 */ "literal ::= NULL", + /* 388 */ "literal ::= NK_QUESTION", + /* 389 */ "duration_literal ::= NK_VARIABLE", + /* 390 */ "signed ::= NK_INTEGER", + /* 391 */ "signed ::= NK_PLUS NK_INTEGER", + /* 392 */ "signed ::= NK_MINUS NK_INTEGER", + /* 393 */ "signed ::= NK_FLOAT", + /* 394 */ "signed ::= NK_PLUS NK_FLOAT", + /* 395 */ "signed ::= NK_MINUS NK_FLOAT", + /* 396 */ "signed_literal ::= signed", + /* 397 */ "signed_literal ::= NK_STRING", + /* 398 */ "signed_literal ::= NK_BOOL", + /* 399 */ "signed_literal ::= TIMESTAMP NK_STRING", + /* 400 */ "signed_literal ::= duration_literal", + /* 401 */ "signed_literal ::= NULL", + /* 402 */ "signed_literal ::= literal_func", + /* 403 */ "signed_literal ::= NK_QUESTION", + /* 404 */ "literal_list ::= signed_literal", + /* 405 */ "literal_list ::= literal_list NK_COMMA signed_literal", + /* 406 */ "db_name ::= NK_ID", + /* 407 */ "table_name ::= NK_ID", + /* 408 */ "column_name ::= NK_ID", + /* 409 */ "function_name ::= NK_ID", + /* 410 */ "table_alias ::= NK_ID", + /* 411 */ "column_alias ::= NK_ID", + /* 412 */ "user_name ::= NK_ID", + /* 413 */ "topic_name ::= NK_ID", + /* 414 */ "stream_name ::= NK_ID", + /* 415 */ "cgroup_name ::= NK_ID", + /* 416 */ "index_name ::= NK_ID", + /* 417 */ "expr_or_subquery ::= expression", + /* 418 */ "expression ::= literal", + /* 419 */ "expression ::= pseudo_column", + /* 420 */ "expression ::= column_reference", + /* 421 */ "expression ::= function_expression", + /* 422 */ "expression ::= case_when_expression", + /* 423 */ "expression ::= NK_LP expression NK_RP", + /* 424 */ "expression ::= NK_PLUS expr_or_subquery", + /* 425 */ "expression ::= NK_MINUS expr_or_subquery", + /* 426 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery", + /* 427 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery", + /* 428 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery", + /* 429 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery", + /* 430 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery", + /* 431 */ "expression ::= column_reference NK_ARROW NK_STRING", + /* 432 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery", + /* 433 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery", + /* 434 */ "expression_list ::= expr_or_subquery", + /* 435 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery", + /* 436 */ "column_reference ::= column_name", + /* 437 */ "column_reference ::= table_name NK_DOT column_name", + /* 438 */ "pseudo_column ::= ROWTS", + /* 439 */ "pseudo_column ::= TBNAME", + /* 440 */ "pseudo_column ::= table_name NK_DOT TBNAME", + /* 441 */ "pseudo_column ::= QSTART", + /* 442 */ "pseudo_column ::= QEND", + /* 443 */ "pseudo_column ::= QDURATION", + /* 444 */ "pseudo_column ::= WSTART", + /* 445 */ "pseudo_column ::= WEND", + /* 446 */ "pseudo_column ::= WDURATION", + /* 447 */ "pseudo_column ::= IROWTS", + /* 448 */ "pseudo_column ::= ISFILLED", + /* 449 */ "pseudo_column ::= QTAGS", + /* 450 */ "function_expression ::= function_name NK_LP expression_list NK_RP", + /* 451 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", + /* 452 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP", + /* 453 */ "function_expression ::= literal_func", + /* 454 */ "literal_func ::= noarg_func NK_LP NK_RP", + /* 455 */ "literal_func ::= NOW", + /* 456 */ "noarg_func ::= NOW", + /* 457 */ "noarg_func ::= TODAY", + /* 458 */ "noarg_func ::= TIMEZONE", + /* 459 */ "noarg_func ::= DATABASE", + /* 460 */ "noarg_func ::= CLIENT_VERSION", + /* 461 */ "noarg_func ::= SERVER_VERSION", + /* 462 */ "noarg_func ::= SERVER_STATUS", + /* 463 */ "noarg_func ::= CURRENT_USER", + /* 464 */ "noarg_func ::= USER", + /* 465 */ "star_func ::= COUNT", + /* 466 */ "star_func ::= FIRST", + /* 467 */ "star_func ::= LAST", + /* 468 */ "star_func ::= LAST_ROW", + /* 469 */ "star_func_para_list ::= NK_STAR", + /* 470 */ "star_func_para_list ::= other_para_list", + /* 471 */ "other_para_list ::= star_func_para", + /* 472 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", + /* 473 */ "star_func_para ::= expr_or_subquery", + /* 474 */ "star_func_para ::= table_name NK_DOT NK_STAR", + /* 475 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END", + /* 476 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END", + /* 477 */ "when_then_list ::= when_then_expr", + /* 478 */ "when_then_list ::= when_then_list when_then_expr", + /* 479 */ "when_then_expr ::= WHEN common_expression THEN common_expression", + /* 480 */ "case_when_else_opt ::=", + /* 481 */ "case_when_else_opt ::= ELSE common_expression", + /* 482 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery", + /* 483 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery", + /* 484 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery", + /* 485 */ "predicate ::= expr_or_subquery IS NULL", + /* 486 */ "predicate ::= expr_or_subquery IS NOT NULL", + /* 487 */ "predicate ::= expr_or_subquery in_op in_predicate_value", + /* 488 */ "compare_op ::= NK_LT", + /* 489 */ "compare_op ::= NK_GT", + /* 490 */ "compare_op ::= NK_LE", + /* 491 */ "compare_op ::= NK_GE", + /* 492 */ "compare_op ::= NK_NE", + /* 493 */ "compare_op ::= NK_EQ", + /* 494 */ "compare_op ::= LIKE", + /* 495 */ "compare_op ::= NOT LIKE", + /* 496 */ "compare_op ::= MATCH", + /* 497 */ "compare_op ::= NMATCH", + /* 498 */ "compare_op ::= CONTAINS", + /* 499 */ "in_op ::= IN", + /* 500 */ "in_op ::= NOT IN", + /* 501 */ "in_predicate_value ::= NK_LP literal_list NK_RP", + /* 502 */ "boolean_value_expression ::= boolean_primary", + /* 503 */ "boolean_value_expression ::= NOT boolean_primary", + /* 504 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", + /* 505 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", + /* 506 */ "boolean_primary ::= predicate", + /* 507 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", + /* 508 */ "common_expression ::= expr_or_subquery", + /* 509 */ "common_expression ::= boolean_value_expression", + /* 510 */ "from_clause_opt ::=", + /* 511 */ "from_clause_opt ::= FROM table_reference_list", + /* 512 */ "table_reference_list ::= table_reference", + /* 513 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", + /* 514 */ "table_reference ::= table_primary", + /* 515 */ "table_reference ::= joined_table", + /* 516 */ "table_primary ::= table_name alias_opt", + /* 517 */ "table_primary ::= db_name NK_DOT table_name alias_opt", + /* 518 */ "table_primary ::= subquery alias_opt", + /* 519 */ "table_primary ::= parenthesized_joined_table", + /* 520 */ "alias_opt ::=", + /* 521 */ "alias_opt ::= table_alias", + /* 522 */ "alias_opt ::= AS table_alias", + /* 523 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", + /* 524 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", + /* 525 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", + /* 526 */ "join_type ::=", + /* 527 */ "join_type ::= INNER", + /* 528 */ "query_specification ::= SELECT hint_list tag_mode_opt set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt", + /* 529 */ "hint_list ::=", + /* 530 */ "hint_list ::= NK_HINT", + /* 531 */ "tag_mode_opt ::=", + /* 532 */ "tag_mode_opt ::= TAGS", + /* 533 */ "set_quantifier_opt ::=", + /* 534 */ "set_quantifier_opt ::= DISTINCT", + /* 535 */ "set_quantifier_opt ::= ALL", + /* 536 */ "select_list ::= select_item", + /* 537 */ "select_list ::= select_list NK_COMMA select_item", + /* 538 */ "select_item ::= NK_STAR", + /* 539 */ "select_item ::= common_expression", + /* 540 */ "select_item ::= common_expression column_alias", + /* 541 */ "select_item ::= common_expression AS column_alias", + /* 542 */ "select_item ::= table_name NK_DOT NK_STAR", + /* 543 */ "where_clause_opt ::=", + /* 544 */ "where_clause_opt ::= WHERE search_condition", + /* 545 */ "partition_by_clause_opt ::=", + /* 546 */ "partition_by_clause_opt ::= PARTITION BY partition_list", + /* 547 */ "partition_list ::= partition_item", + /* 548 */ "partition_list ::= partition_list NK_COMMA partition_item", + /* 549 */ "partition_item ::= expr_or_subquery", + /* 550 */ "partition_item ::= expr_or_subquery column_alias", + /* 551 */ "partition_item ::= expr_or_subquery AS column_alias", + /* 552 */ "twindow_clause_opt ::=", + /* 553 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", + /* 554 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP", + /* 555 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", + /* 556 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", + /* 557 */ "twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition", + /* 558 */ "sliding_opt ::=", + /* 559 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", + /* 560 */ "fill_opt ::=", + /* 561 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", + /* 562 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA expression_list NK_RP", + /* 563 */ "fill_opt ::= FILL NK_LP VALUE_F NK_COMMA expression_list NK_RP", + /* 564 */ "fill_mode ::= NONE", + /* 565 */ "fill_mode ::= PREV", + /* 566 */ "fill_mode ::= NULL", + /* 567 */ "fill_mode ::= NULL_F", + /* 568 */ "fill_mode ::= LINEAR", + /* 569 */ "fill_mode ::= NEXT", + /* 570 */ "group_by_clause_opt ::=", + /* 571 */ "group_by_clause_opt ::= GROUP BY group_by_list", + /* 572 */ "group_by_list ::= expr_or_subquery", + /* 573 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery", + /* 574 */ "having_clause_opt ::=", + /* 575 */ "having_clause_opt ::= HAVING search_condition", + /* 576 */ "range_opt ::=", + /* 577 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP", + /* 578 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_RP", + /* 579 */ "every_opt ::=", + /* 580 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", + /* 581 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", + /* 582 */ "query_simple ::= query_specification", + /* 583 */ "query_simple ::= union_query_expression", + /* 584 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", + /* 585 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", + /* 586 */ "query_simple_or_subquery ::= query_simple", + /* 587 */ "query_simple_or_subquery ::= subquery", + /* 588 */ "query_or_subquery ::= query_expression", + /* 589 */ "query_or_subquery ::= subquery", + /* 590 */ "order_by_clause_opt ::=", + /* 591 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", + /* 592 */ "slimit_clause_opt ::=", + /* 593 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", + /* 594 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", + /* 595 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 596 */ "limit_clause_opt ::=", + /* 597 */ "limit_clause_opt ::= LIMIT NK_INTEGER", + /* 598 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", + /* 599 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 600 */ "subquery ::= NK_LP query_expression NK_RP", + /* 601 */ "subquery ::= NK_LP subquery NK_RP", + /* 602 */ "search_condition ::= common_expression", + /* 603 */ "sort_specification_list ::= sort_specification", + /* 604 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", + /* 605 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt", + /* 606 */ "ordering_specification_opt ::=", + /* 607 */ "ordering_specification_opt ::= ASC", + /* 608 */ "ordering_specification_opt ::= DESC", + /* 609 */ "null_ordering_opt ::=", + /* 610 */ "null_ordering_opt ::= NULLS FIRST", + /* 611 */ "null_ordering_opt ::= NULLS LAST", }; #endif /* NDEBUG */ @@ -2728,215 +3066,248 @@ static void yy_destructor( */ /********* Begin destructor definitions ***************************************/ /* Default NON-TERMINAL Destructor */ - case 339: /* cmd */ - case 342: /* literal */ - case 348: /* with_opt */ - case 354: /* search_condition */ - case 359: /* db_options */ - case 361: /* alter_db_options */ - case 363: /* start_opt */ - case 364: /* end_opt */ - case 368: /* signed */ - case 370: /* retention */ - case 371: /* full_table_name */ - case 374: /* table_options */ - case 378: /* alter_table_clause */ - case 379: /* alter_table_options */ - case 380: /* column_def */ - case 382: /* signed_literal */ - case 383: /* create_subtable_clause */ - case 386: /* drop_table_clause */ - case 392: /* duration_literal */ - case 393: /* rollup_func_name */ - case 395: /* col_name */ - case 396: /* db_name_cond_opt */ - case 397: /* like_pattern_opt */ - case 398: /* table_name_cond */ - case 399: /* from_db_opt */ - case 401: /* tag_item */ - case 403: /* full_index_name */ - case 404: /* index_options */ - case 407: /* sliding_opt */ - case 408: /* sma_stream_opt */ - case 409: /* func */ - case 412: /* query_or_subquery */ - case 413: /* where_clause_opt */ - case 416: /* explain_options */ - case 417: /* insert_query */ - case 423: /* stream_options */ - case 426: /* subtable_opt */ - case 428: /* expression */ - case 430: /* literal_func */ - case 433: /* expr_or_subquery */ - case 434: /* pseudo_column */ - case 435: /* column_reference */ - case 436: /* function_expression */ - case 437: /* case_when_expression */ - case 442: /* star_func_para */ - case 444: /* case_when_else_opt */ - case 445: /* common_expression */ - case 446: /* when_then_expr */ - case 447: /* predicate */ - case 450: /* in_predicate_value */ - case 451: /* boolean_value_expression */ - case 452: /* boolean_primary */ - case 453: /* from_clause_opt */ - case 454: /* table_reference_list */ - case 455: /* table_reference */ - case 456: /* table_primary */ - case 457: /* joined_table */ - case 459: /* subquery */ - case 460: /* parenthesized_joined_table */ - case 462: /* query_specification */ - case 468: /* range_opt */ - case 469: /* every_opt */ - case 470: /* fill_opt */ - case 471: /* twindow_clause_opt */ - case 473: /* having_clause_opt */ - case 474: /* select_item */ - case 476: /* partition_item */ - case 479: /* query_expression */ - case 480: /* query_simple */ - case 482: /* slimit_clause_opt */ - case 483: /* limit_clause_opt */ - case 484: /* union_query_expression */ - case 485: /* query_simple_or_subquery */ - case 487: /* sort_specification */ + case 340: /* cmd */ + case 343: /* literal */ + case 352: /* with_opt */ + case 358: /* search_condition */ + case 363: /* db_options */ + case 365: /* alter_db_options */ + case 367: /* start_opt */ + case 368: /* end_opt */ + case 372: /* signed */ + case 374: /* retention */ + case 375: /* full_table_name */ + case 378: /* table_options */ + case 382: /* alter_table_clause */ + case 383: /* alter_table_options */ + case 384: /* column_def */ + case 386: /* signed_literal */ + case 387: /* create_subtable_clause */ + case 390: /* drop_table_clause */ + case 396: /* duration_literal */ + case 397: /* rollup_func_name */ + case 399: /* col_name */ + case 400: /* db_name_cond_opt */ + case 401: /* like_pattern_opt */ + case 402: /* table_name_cond */ + case 403: /* from_db_opt */ + case 405: /* tag_item */ + case 407: /* full_index_name */ + case 408: /* index_options */ + case 411: /* sliding_opt */ + case 412: /* sma_stream_opt */ + case 413: /* func */ + case 416: /* query_or_subquery */ + case 417: /* where_clause_opt */ + case 420: /* explain_options */ + case 421: /* insert_query */ + case 427: /* stream_options */ + case 430: /* subtable_opt */ + case 432: /* expression */ + case 434: /* literal_func */ + case 437: /* expr_or_subquery */ + case 438: /* pseudo_column */ + case 439: /* column_reference */ + case 440: /* function_expression */ + case 441: /* case_when_expression */ + case 446: /* star_func_para */ + case 448: /* case_when_else_opt */ + case 449: /* common_expression */ + case 450: /* when_then_expr */ + case 451: /* predicate */ + case 454: /* in_predicate_value */ + case 455: /* boolean_value_expression */ + case 456: /* boolean_primary */ + case 457: /* from_clause_opt */ + case 458: /* table_reference_list */ + case 459: /* table_reference */ + case 460: /* table_primary */ + case 461: /* joined_table */ + case 463: /* subquery */ + case 464: /* parenthesized_joined_table */ + case 466: /* query_specification */ + case 472: /* range_opt */ + case 473: /* every_opt */ + case 474: /* fill_opt */ + case 475: /* twindow_clause_opt */ + case 477: /* having_clause_opt */ + case 478: /* select_item */ + case 480: /* partition_item */ + case 483: /* query_expression */ + case 484: /* query_simple */ + case 486: /* slimit_clause_opt */ + case 487: /* limit_clause_opt */ + case 488: /* union_query_expression */ + case 489: /* query_simple_or_subquery */ + case 491: /* sort_specification */ { - nodesDestroyNode((yypminor->yy952)); +#line 7 "sql.y" + nodesDestroyNode((yypminor->yy28)); +#line 3146 "sql.c" } break; - case 340: /* account_options */ - case 341: /* alter_account_options */ - case 343: /* alter_account_option */ - case 362: /* speed_opt */ - case 411: /* with_meta */ - case 420: /* bufsize_opt */ + case 341: /* account_options */ + case 342: /* alter_account_options */ + case 344: /* alter_account_option */ + case 366: /* speed_opt */ + case 415: /* with_meta */ + case 424: /* bufsize_opt */ { +#line 54 "sql.y" +#line 3158 "sql.c" } break; - case 344: /* user_name */ - case 351: /* db_name */ - case 352: /* table_name */ - case 353: /* topic_name */ - case 355: /* dnode_endpoint */ - case 381: /* column_name */ - case 394: /* function_name */ - case 402: /* column_alias */ - case 405: /* index_name */ - case 410: /* sma_func_name */ - case 414: /* cgroup_name */ - case 421: /* language_opt */ - case 422: /* stream_name */ - case 432: /* table_alias */ - case 438: /* star_func */ - case 440: /* noarg_func */ - case 458: /* alias_opt */ + case 345: /* ip_range_list */ + case 346: /* white_list */ + case 347: /* white_list_opt */ + case 369: /* integer_list */ + case 370: /* variable_list */ + case 371: /* retention_list */ + case 376: /* column_def_list */ + case 377: /* tags_def_opt */ + case 379: /* multi_create_clause */ + case 380: /* tags_def */ + case 381: /* multi_drop_clause */ + case 388: /* specific_cols_opt */ + case 389: /* expression_list */ + case 391: /* col_name_list */ + case 393: /* duration_list */ + case 394: /* rollup_func_list */ + case 404: /* tag_list_opt */ + case 410: /* func_list */ + case 428: /* col_list_opt */ + case 429: /* tag_def_or_ref_opt */ + case 433: /* dnode_list */ + case 435: /* literal_list */ + case 443: /* star_func_para_list */ + case 445: /* other_para_list */ + case 447: /* when_then_list */ + case 467: /* hint_list */ + case 470: /* select_list */ + case 471: /* partition_by_clause_opt */ + case 476: /* group_by_clause_opt */ + case 479: /* partition_list */ + case 482: /* group_by_list */ + case 485: /* order_by_clause_opt */ + case 490: /* sort_specification_list */ { +#line 85 "sql.y" + nodesDestroyList((yypminor->yy236)); +#line 3197 "sql.c" +} + break; + case 348: /* user_name */ + case 355: /* db_name */ + case 356: /* table_name */ + case 357: /* topic_name */ + case 359: /* dnode_endpoint */ + case 385: /* column_name */ + case 398: /* function_name */ + case 406: /* column_alias */ + case 409: /* index_name */ + case 414: /* sma_func_name */ + case 418: /* cgroup_name */ + case 425: /* language_opt */ + case 426: /* stream_name */ + case 436: /* table_alias */ + case 442: /* star_func */ + case 444: /* noarg_func */ + case 462: /* alias_opt */ +{ +#line 762 "sql.y" +#line 3220 "sql.c" } break; - case 345: /* sysinfo_opt */ + case 349: /* sysinfo_opt */ { +#line 112 "sql.y" +#line 3227 "sql.c" } break; - case 346: /* privileges */ - case 349: /* priv_type_list */ - case 350: /* priv_type */ + case 350: /* privileges */ + case 353: /* priv_type_list */ + case 354: /* priv_type */ { +#line 121 "sql.y" +#line 3236 "sql.c" } break; - case 347: /* priv_level */ + case 351: /* priv_level */ { +#line 137 "sql.y" +#line 3243 "sql.c" } break; - case 356: /* force_opt */ - case 357: /* unsafe_opt */ - case 358: /* not_exists_opt */ - case 360: /* exists_opt */ - case 415: /* analyze_opt */ - case 418: /* or_replace_opt */ - case 419: /* agg_func_opt */ - case 427: /* ignore_opt */ - case 464: /* tag_mode_opt */ - case 465: /* set_quantifier_opt */ + case 360: /* force_opt */ + case 361: /* unsafe_opt */ + case 362: /* not_exists_opt */ + case 364: /* exists_opt */ + case 419: /* analyze_opt */ + case 422: /* or_replace_opt */ + case 423: /* agg_func_opt */ + case 431: /* ignore_opt */ + case 468: /* tag_mode_opt */ + case 469: /* set_quantifier_opt */ { +#line 166 "sql.y" +#line 3259 "sql.c" } break; - case 365: /* integer_list */ - case 366: /* variable_list */ - case 367: /* retention_list */ - case 372: /* column_def_list */ - case 373: /* tags_def_opt */ - case 375: /* multi_create_clause */ - case 376: /* tags_def */ - case 377: /* multi_drop_clause */ - case 384: /* specific_cols_opt */ - case 385: /* expression_list */ - case 387: /* col_name_list */ - case 389: /* duration_list */ - case 390: /* rollup_func_list */ - case 400: /* tag_list_opt */ - case 406: /* func_list */ - case 424: /* col_list_opt */ - case 425: /* tag_def_or_ref_opt */ - case 429: /* dnode_list */ - case 431: /* literal_list */ - case 439: /* star_func_para_list */ - case 441: /* other_para_list */ - case 443: /* when_then_list */ - case 463: /* hint_list */ - case 466: /* select_list */ - case 467: /* partition_by_clause_opt */ - case 472: /* group_by_clause_opt */ - case 475: /* partition_list */ - case 478: /* group_by_list */ - case 481: /* order_by_clause_opt */ - case 486: /* sort_specification_list */ -{ - nodesDestroyList((yypminor->yy824)); -} - break; - case 369: /* alter_db_option */ - case 391: /* alter_table_option */ + case 373: /* alter_db_option */ + case 395: /* alter_table_option */ { +#line 263 "sql.y" +#line 3267 "sql.c" } break; - case 388: /* type_name */ + case 392: /* type_name */ { +#line 384 "sql.y" +#line 3274 "sql.c" } break; - case 448: /* compare_op */ - case 449: /* in_op */ + case 452: /* compare_op */ + case 453: /* in_op */ { +#line 950 "sql.y" +#line 3282 "sql.c" } break; - case 461: /* join_type */ + case 465: /* join_type */ { +#line 1026 "sql.y" +#line 3289 "sql.c" } break; - case 477: /* fill_mode */ + case 481: /* fill_mode */ { +#line 1112 "sql.y" +#line 3296 "sql.c" } break; - case 488: /* ordering_specification_opt */ + case 492: /* ordering_specification_opt */ { +#line 1197 "sql.y" +#line 3303 "sql.c" } break; - case 489: /* null_ordering_opt */ + case 493: /* null_ordering_opt */ { +#line 1203 "sql.y" +#line 3310 "sql.c" } break; /********* End destructor definitions *****************************************/ @@ -3103,7 +3474,7 @@ static YYACTIONTYPE yy_find_shift_action( #endif /* YYWILDCARD */ return yy_default[stateno]; }else{ - assert( i>=0 && i=0 && i<(int)(sizeof(yy_action)/sizeof(yy_action[0])) ); return yy_action[i]; } }while(1); @@ -3225,611 +3596,618 @@ static void yy_shift( /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side ** of that rule */ static const YYCODETYPE yyRuleInfoLhs[] = { - 339, /* (0) cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ - 339, /* (1) cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ - 340, /* (2) account_options ::= */ - 340, /* (3) account_options ::= account_options PPS literal */ - 340, /* (4) account_options ::= account_options TSERIES literal */ - 340, /* (5) account_options ::= account_options STORAGE literal */ - 340, /* (6) account_options ::= account_options STREAMS literal */ - 340, /* (7) account_options ::= account_options QTIME literal */ - 340, /* (8) account_options ::= account_options DBS literal */ - 340, /* (9) account_options ::= account_options USERS literal */ - 340, /* (10) account_options ::= account_options CONNS literal */ - 340, /* (11) account_options ::= account_options STATE literal */ - 341, /* (12) alter_account_options ::= alter_account_option */ - 341, /* (13) alter_account_options ::= alter_account_options alter_account_option */ - 343, /* (14) alter_account_option ::= PASS literal */ - 343, /* (15) alter_account_option ::= PPS literal */ - 343, /* (16) alter_account_option ::= TSERIES literal */ - 343, /* (17) alter_account_option ::= STORAGE literal */ - 343, /* (18) alter_account_option ::= STREAMS literal */ - 343, /* (19) alter_account_option ::= QTIME literal */ - 343, /* (20) alter_account_option ::= DBS literal */ - 343, /* (21) alter_account_option ::= USERS literal */ - 343, /* (22) alter_account_option ::= CONNS literal */ - 343, /* (23) alter_account_option ::= STATE literal */ - 339, /* (24) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ - 339, /* (25) cmd ::= ALTER USER user_name PASS NK_STRING */ - 339, /* (26) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ - 339, /* (27) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ - 339, /* (28) cmd ::= DROP USER user_name */ - 345, /* (29) sysinfo_opt ::= */ - 345, /* (30) sysinfo_opt ::= SYSINFO NK_INTEGER */ - 339, /* (31) cmd ::= GRANT privileges ON priv_level with_opt TO user_name */ - 339, /* (32) cmd ::= REVOKE privileges ON priv_level with_opt FROM user_name */ - 346, /* (33) privileges ::= ALL */ - 346, /* (34) privileges ::= priv_type_list */ - 346, /* (35) privileges ::= SUBSCRIBE */ - 349, /* (36) priv_type_list ::= priv_type */ - 349, /* (37) priv_type_list ::= priv_type_list NK_COMMA priv_type */ - 350, /* (38) priv_type ::= READ */ - 350, /* (39) priv_type ::= WRITE */ - 347, /* (40) priv_level ::= NK_STAR NK_DOT NK_STAR */ - 347, /* (41) priv_level ::= db_name NK_DOT NK_STAR */ - 347, /* (42) priv_level ::= db_name NK_DOT table_name */ - 347, /* (43) priv_level ::= topic_name */ - 348, /* (44) with_opt ::= */ - 348, /* (45) with_opt ::= WITH search_condition */ - 339, /* (46) cmd ::= CREATE DNODE dnode_endpoint */ - 339, /* (47) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ - 339, /* (48) cmd ::= DROP DNODE NK_INTEGER force_opt */ - 339, /* (49) cmd ::= DROP DNODE dnode_endpoint force_opt */ - 339, /* (50) cmd ::= DROP DNODE NK_INTEGER unsafe_opt */ - 339, /* (51) cmd ::= DROP DNODE dnode_endpoint unsafe_opt */ - 339, /* (52) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ - 339, /* (53) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ - 339, /* (54) cmd ::= ALTER ALL DNODES NK_STRING */ - 339, /* (55) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ - 339, /* (56) cmd ::= RESTORE DNODE NK_INTEGER */ - 355, /* (57) dnode_endpoint ::= NK_STRING */ - 355, /* (58) dnode_endpoint ::= NK_ID */ - 355, /* (59) dnode_endpoint ::= NK_IPTOKEN */ - 356, /* (60) force_opt ::= */ - 356, /* (61) force_opt ::= FORCE */ - 357, /* (62) unsafe_opt ::= UNSAFE */ - 339, /* (63) cmd ::= ALTER LOCAL NK_STRING */ - 339, /* (64) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ - 339, /* (65) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ - 339, /* (66) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ - 339, /* (67) cmd ::= RESTORE QNODE ON DNODE NK_INTEGER */ - 339, /* (68) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ - 339, /* (69) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ - 339, /* (70) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ - 339, /* (71) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ - 339, /* (72) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ - 339, /* (73) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ - 339, /* (74) cmd ::= RESTORE MNODE ON DNODE NK_INTEGER */ - 339, /* (75) cmd ::= RESTORE VNODE ON DNODE NK_INTEGER */ - 339, /* (76) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ - 339, /* (77) cmd ::= DROP DATABASE exists_opt db_name */ - 339, /* (78) cmd ::= USE db_name */ - 339, /* (79) cmd ::= ALTER DATABASE db_name alter_db_options */ - 339, /* (80) cmd ::= FLUSH DATABASE db_name */ - 339, /* (81) cmd ::= TRIM DATABASE db_name speed_opt */ - 339, /* (82) cmd ::= COMPACT DATABASE db_name start_opt end_opt */ - 358, /* (83) not_exists_opt ::= IF NOT EXISTS */ - 358, /* (84) not_exists_opt ::= */ - 360, /* (85) exists_opt ::= IF EXISTS */ - 360, /* (86) exists_opt ::= */ - 359, /* (87) db_options ::= */ - 359, /* (88) db_options ::= db_options BUFFER NK_INTEGER */ - 359, /* (89) db_options ::= db_options CACHEMODEL NK_STRING */ - 359, /* (90) db_options ::= db_options CACHESIZE NK_INTEGER */ - 359, /* (91) db_options ::= db_options COMP NK_INTEGER */ - 359, /* (92) db_options ::= db_options DURATION NK_INTEGER */ - 359, /* (93) db_options ::= db_options DURATION NK_VARIABLE */ - 359, /* (94) db_options ::= db_options MAXROWS NK_INTEGER */ - 359, /* (95) db_options ::= db_options MINROWS NK_INTEGER */ - 359, /* (96) db_options ::= db_options KEEP integer_list */ - 359, /* (97) db_options ::= db_options KEEP variable_list */ - 359, /* (98) db_options ::= db_options PAGES NK_INTEGER */ - 359, /* (99) db_options ::= db_options PAGESIZE NK_INTEGER */ - 359, /* (100) db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ - 359, /* (101) db_options ::= db_options PRECISION NK_STRING */ - 359, /* (102) db_options ::= db_options REPLICA NK_INTEGER */ - 359, /* (103) db_options ::= db_options VGROUPS NK_INTEGER */ - 359, /* (104) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ - 359, /* (105) db_options ::= db_options RETENTIONS retention_list */ - 359, /* (106) db_options ::= db_options SCHEMALESS NK_INTEGER */ - 359, /* (107) db_options ::= db_options WAL_LEVEL NK_INTEGER */ - 359, /* (108) db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ - 359, /* (109) db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ - 359, /* (110) db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ - 359, /* (111) db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ - 359, /* (112) db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ - 359, /* (113) db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ - 359, /* (114) db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ - 359, /* (115) db_options ::= db_options STT_TRIGGER NK_INTEGER */ - 359, /* (116) db_options ::= db_options TABLE_PREFIX signed */ - 359, /* (117) db_options ::= db_options TABLE_SUFFIX signed */ - 361, /* (118) alter_db_options ::= alter_db_option */ - 361, /* (119) alter_db_options ::= alter_db_options alter_db_option */ - 369, /* (120) alter_db_option ::= BUFFER NK_INTEGER */ - 369, /* (121) alter_db_option ::= CACHEMODEL NK_STRING */ - 369, /* (122) alter_db_option ::= CACHESIZE NK_INTEGER */ - 369, /* (123) alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ - 369, /* (124) alter_db_option ::= KEEP integer_list */ - 369, /* (125) alter_db_option ::= KEEP variable_list */ - 369, /* (126) alter_db_option ::= PAGES NK_INTEGER */ - 369, /* (127) alter_db_option ::= REPLICA NK_INTEGER */ - 369, /* (128) alter_db_option ::= WAL_LEVEL NK_INTEGER */ - 369, /* (129) alter_db_option ::= STT_TRIGGER NK_INTEGER */ - 369, /* (130) alter_db_option ::= MINROWS NK_INTEGER */ - 369, /* (131) alter_db_option ::= WAL_RETENTION_PERIOD NK_INTEGER */ - 369, /* (132) alter_db_option ::= WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ - 369, /* (133) alter_db_option ::= WAL_RETENTION_SIZE NK_INTEGER */ - 369, /* (134) alter_db_option ::= WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ - 365, /* (135) integer_list ::= NK_INTEGER */ - 365, /* (136) integer_list ::= integer_list NK_COMMA NK_INTEGER */ - 366, /* (137) variable_list ::= NK_VARIABLE */ - 366, /* (138) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ - 367, /* (139) retention_list ::= retention */ - 367, /* (140) retention_list ::= retention_list NK_COMMA retention */ - 370, /* (141) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ - 362, /* (142) speed_opt ::= */ - 362, /* (143) speed_opt ::= MAX_SPEED NK_INTEGER */ - 363, /* (144) start_opt ::= */ - 363, /* (145) start_opt ::= START WITH NK_INTEGER */ - 363, /* (146) start_opt ::= START WITH NK_STRING */ - 363, /* (147) start_opt ::= START WITH TIMESTAMP NK_STRING */ - 364, /* (148) end_opt ::= */ - 364, /* (149) end_opt ::= END WITH NK_INTEGER */ - 364, /* (150) end_opt ::= END WITH NK_STRING */ - 364, /* (151) end_opt ::= END WITH TIMESTAMP NK_STRING */ - 339, /* (152) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - 339, /* (153) cmd ::= CREATE TABLE multi_create_clause */ - 339, /* (154) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ - 339, /* (155) cmd ::= DROP TABLE multi_drop_clause */ - 339, /* (156) cmd ::= DROP STABLE exists_opt full_table_name */ - 339, /* (157) cmd ::= ALTER TABLE alter_table_clause */ - 339, /* (158) cmd ::= ALTER STABLE alter_table_clause */ - 378, /* (159) alter_table_clause ::= full_table_name alter_table_options */ - 378, /* (160) alter_table_clause ::= full_table_name ADD COLUMN column_def */ - 378, /* (161) alter_table_clause ::= full_table_name DROP COLUMN column_name */ - 378, /* (162) alter_table_clause ::= full_table_name MODIFY COLUMN column_def */ - 378, /* (163) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ - 378, /* (164) alter_table_clause ::= full_table_name ADD TAG column_def */ - 378, /* (165) alter_table_clause ::= full_table_name DROP TAG column_name */ - 378, /* (166) alter_table_clause ::= full_table_name MODIFY TAG column_def */ - 378, /* (167) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ - 378, /* (168) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ - 375, /* (169) multi_create_clause ::= create_subtable_clause */ - 375, /* (170) multi_create_clause ::= multi_create_clause create_subtable_clause */ - 383, /* (171) create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ - 377, /* (172) multi_drop_clause ::= drop_table_clause */ - 377, /* (173) multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause */ - 386, /* (174) drop_table_clause ::= exists_opt full_table_name */ - 384, /* (175) specific_cols_opt ::= */ - 384, /* (176) specific_cols_opt ::= NK_LP col_name_list NK_RP */ - 371, /* (177) full_table_name ::= table_name */ - 371, /* (178) full_table_name ::= db_name NK_DOT table_name */ - 372, /* (179) column_def_list ::= column_def */ - 372, /* (180) column_def_list ::= column_def_list NK_COMMA column_def */ - 380, /* (181) column_def ::= column_name type_name */ - 380, /* (182) column_def ::= column_name type_name COMMENT NK_STRING */ - 388, /* (183) type_name ::= BOOL */ - 388, /* (184) type_name ::= TINYINT */ - 388, /* (185) type_name ::= SMALLINT */ - 388, /* (186) type_name ::= INT */ - 388, /* (187) type_name ::= INTEGER */ - 388, /* (188) type_name ::= BIGINT */ - 388, /* (189) type_name ::= FLOAT */ - 388, /* (190) type_name ::= DOUBLE */ - 388, /* (191) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ - 388, /* (192) type_name ::= TIMESTAMP */ - 388, /* (193) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ - 388, /* (194) type_name ::= TINYINT UNSIGNED */ - 388, /* (195) type_name ::= SMALLINT UNSIGNED */ - 388, /* (196) type_name ::= INT UNSIGNED */ - 388, /* (197) type_name ::= BIGINT UNSIGNED */ - 388, /* (198) type_name ::= JSON */ - 388, /* (199) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ - 388, /* (200) type_name ::= MEDIUMBLOB */ - 388, /* (201) type_name ::= BLOB */ - 388, /* (202) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ - 388, /* (203) type_name ::= GEOMETRY NK_LP NK_INTEGER NK_RP */ - 388, /* (204) type_name ::= DECIMAL */ - 388, /* (205) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ - 388, /* (206) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ - 373, /* (207) tags_def_opt ::= */ - 373, /* (208) tags_def_opt ::= tags_def */ - 376, /* (209) tags_def ::= TAGS NK_LP column_def_list NK_RP */ - 374, /* (210) table_options ::= */ - 374, /* (211) table_options ::= table_options COMMENT NK_STRING */ - 374, /* (212) table_options ::= table_options MAX_DELAY duration_list */ - 374, /* (213) table_options ::= table_options WATERMARK duration_list */ - 374, /* (214) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ - 374, /* (215) table_options ::= table_options TTL NK_INTEGER */ - 374, /* (216) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ - 374, /* (217) table_options ::= table_options DELETE_MARK duration_list */ - 379, /* (218) alter_table_options ::= alter_table_option */ - 379, /* (219) alter_table_options ::= alter_table_options alter_table_option */ - 391, /* (220) alter_table_option ::= COMMENT NK_STRING */ - 391, /* (221) alter_table_option ::= TTL NK_INTEGER */ - 389, /* (222) duration_list ::= duration_literal */ - 389, /* (223) duration_list ::= duration_list NK_COMMA duration_literal */ - 390, /* (224) rollup_func_list ::= rollup_func_name */ - 390, /* (225) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ - 393, /* (226) rollup_func_name ::= function_name */ - 393, /* (227) rollup_func_name ::= FIRST */ - 393, /* (228) rollup_func_name ::= LAST */ - 387, /* (229) col_name_list ::= col_name */ - 387, /* (230) col_name_list ::= col_name_list NK_COMMA col_name */ - 395, /* (231) col_name ::= column_name */ - 339, /* (232) cmd ::= SHOW DNODES */ - 339, /* (233) cmd ::= SHOW USERS */ - 339, /* (234) cmd ::= SHOW USER PRIVILEGES */ - 339, /* (235) cmd ::= SHOW DATABASES */ - 339, /* (236) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ - 339, /* (237) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ - 339, /* (238) cmd ::= SHOW db_name_cond_opt VGROUPS */ - 339, /* (239) cmd ::= SHOW MNODES */ - 339, /* (240) cmd ::= SHOW QNODES */ - 339, /* (241) cmd ::= SHOW FUNCTIONS */ - 339, /* (242) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ - 339, /* (243) cmd ::= SHOW INDEXES FROM db_name NK_DOT table_name */ - 339, /* (244) cmd ::= SHOW STREAMS */ - 339, /* (245) cmd ::= SHOW ACCOUNTS */ - 339, /* (246) cmd ::= SHOW APPS */ - 339, /* (247) cmd ::= SHOW CONNECTIONS */ - 339, /* (248) cmd ::= SHOW LICENCES */ - 339, /* (249) cmd ::= SHOW GRANTS */ - 339, /* (250) cmd ::= SHOW CREATE DATABASE db_name */ - 339, /* (251) cmd ::= SHOW CREATE TABLE full_table_name */ - 339, /* (252) cmd ::= SHOW CREATE STABLE full_table_name */ - 339, /* (253) cmd ::= SHOW QUERIES */ - 339, /* (254) cmd ::= SHOW SCORES */ - 339, /* (255) cmd ::= SHOW TOPICS */ - 339, /* (256) cmd ::= SHOW VARIABLES */ - 339, /* (257) cmd ::= SHOW CLUSTER VARIABLES */ - 339, /* (258) cmd ::= SHOW LOCAL VARIABLES */ - 339, /* (259) cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ - 339, /* (260) cmd ::= SHOW BNODES */ - 339, /* (261) cmd ::= SHOW SNODES */ - 339, /* (262) cmd ::= SHOW CLUSTER */ - 339, /* (263) cmd ::= SHOW TRANSACTIONS */ - 339, /* (264) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ - 339, /* (265) cmd ::= SHOW CONSUMERS */ - 339, /* (266) cmd ::= SHOW SUBSCRIPTIONS */ - 339, /* (267) cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ - 339, /* (268) cmd ::= SHOW TAGS FROM db_name NK_DOT table_name */ - 339, /* (269) cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt */ - 339, /* (270) cmd ::= SHOW TABLE TAGS tag_list_opt FROM db_name NK_DOT table_name */ - 339, /* (271) cmd ::= SHOW VNODES ON DNODE NK_INTEGER */ - 339, /* (272) cmd ::= SHOW VNODES */ - 339, /* (273) cmd ::= SHOW db_name_cond_opt ALIVE */ - 339, /* (274) cmd ::= SHOW CLUSTER ALIVE */ - 396, /* (275) db_name_cond_opt ::= */ - 396, /* (276) db_name_cond_opt ::= db_name NK_DOT */ - 397, /* (277) like_pattern_opt ::= */ - 397, /* (278) like_pattern_opt ::= LIKE NK_STRING */ - 398, /* (279) table_name_cond ::= table_name */ - 399, /* (280) from_db_opt ::= */ - 399, /* (281) from_db_opt ::= FROM db_name */ - 400, /* (282) tag_list_opt ::= */ - 400, /* (283) tag_list_opt ::= tag_item */ - 400, /* (284) tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ - 401, /* (285) tag_item ::= TBNAME */ - 401, /* (286) tag_item ::= QTAGS */ - 401, /* (287) tag_item ::= column_name */ - 401, /* (288) tag_item ::= column_name column_alias */ - 401, /* (289) tag_item ::= column_name AS column_alias */ - 339, /* (290) cmd ::= CREATE SMA INDEX not_exists_opt full_index_name ON full_table_name index_options */ - 339, /* (291) cmd ::= CREATE INDEX not_exists_opt full_index_name ON full_table_name NK_LP col_name_list NK_RP */ - 339, /* (292) cmd ::= DROP INDEX exists_opt full_index_name */ - 403, /* (293) full_index_name ::= index_name */ - 403, /* (294) full_index_name ::= db_name NK_DOT index_name */ - 404, /* (295) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ - 404, /* (296) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ - 406, /* (297) func_list ::= func */ - 406, /* (298) func_list ::= func_list NK_COMMA func */ - 409, /* (299) func ::= sma_func_name NK_LP expression_list NK_RP */ - 410, /* (300) sma_func_name ::= function_name */ - 410, /* (301) sma_func_name ::= COUNT */ - 410, /* (302) sma_func_name ::= FIRST */ - 410, /* (303) sma_func_name ::= LAST */ - 410, /* (304) sma_func_name ::= LAST_ROW */ - 408, /* (305) sma_stream_opt ::= */ - 408, /* (306) sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal */ - 408, /* (307) sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal */ - 408, /* (308) sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal */ - 411, /* (309) with_meta ::= AS */ - 411, /* (310) with_meta ::= WITH META AS */ - 411, /* (311) with_meta ::= ONLY META AS */ - 339, /* (312) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ - 339, /* (313) cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta DATABASE db_name */ - 339, /* (314) cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta STABLE full_table_name where_clause_opt */ - 339, /* (315) cmd ::= DROP TOPIC exists_opt topic_name */ - 339, /* (316) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ - 339, /* (317) cmd ::= DESC full_table_name */ - 339, /* (318) cmd ::= DESCRIBE full_table_name */ - 339, /* (319) cmd ::= RESET QUERY CACHE */ - 339, /* (320) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ - 339, /* (321) cmd ::= EXPLAIN analyze_opt explain_options insert_query */ - 415, /* (322) analyze_opt ::= */ - 415, /* (323) analyze_opt ::= ANALYZE */ - 416, /* (324) explain_options ::= */ - 416, /* (325) explain_options ::= explain_options VERBOSE NK_BOOL */ - 416, /* (326) explain_options ::= explain_options RATIO NK_FLOAT */ - 339, /* (327) cmd ::= CREATE or_replace_opt agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt language_opt */ - 339, /* (328) cmd ::= DROP FUNCTION exists_opt function_name */ - 419, /* (329) agg_func_opt ::= */ - 419, /* (330) agg_func_opt ::= AGGREGATE */ - 420, /* (331) bufsize_opt ::= */ - 420, /* (332) bufsize_opt ::= BUFSIZE NK_INTEGER */ - 421, /* (333) language_opt ::= */ - 421, /* (334) language_opt ::= LANGUAGE NK_STRING */ - 418, /* (335) or_replace_opt ::= */ - 418, /* (336) or_replace_opt ::= OR REPLACE */ - 339, /* (337) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name col_list_opt tag_def_or_ref_opt subtable_opt AS query_or_subquery */ - 339, /* (338) cmd ::= DROP STREAM exists_opt stream_name */ - 339, /* (339) cmd ::= PAUSE STREAM exists_opt stream_name */ - 339, /* (340) cmd ::= RESUME STREAM exists_opt ignore_opt stream_name */ - 424, /* (341) col_list_opt ::= */ - 424, /* (342) col_list_opt ::= NK_LP col_name_list NK_RP */ - 425, /* (343) tag_def_or_ref_opt ::= */ - 425, /* (344) tag_def_or_ref_opt ::= tags_def */ - 425, /* (345) tag_def_or_ref_opt ::= TAGS NK_LP col_name_list NK_RP */ - 423, /* (346) stream_options ::= */ - 423, /* (347) stream_options ::= stream_options TRIGGER AT_ONCE */ - 423, /* (348) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ - 423, /* (349) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ - 423, /* (350) stream_options ::= stream_options WATERMARK duration_literal */ - 423, /* (351) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ - 423, /* (352) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ - 423, /* (353) stream_options ::= stream_options DELETE_MARK duration_literal */ - 423, /* (354) stream_options ::= stream_options IGNORE UPDATE NK_INTEGER */ - 426, /* (355) subtable_opt ::= */ - 426, /* (356) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - 427, /* (357) ignore_opt ::= */ - 427, /* (358) ignore_opt ::= IGNORE UNTREATED */ - 339, /* (359) cmd ::= KILL CONNECTION NK_INTEGER */ - 339, /* (360) cmd ::= KILL QUERY NK_STRING */ - 339, /* (361) cmd ::= KILL TRANSACTION NK_INTEGER */ - 339, /* (362) cmd ::= BALANCE VGROUP */ - 339, /* (363) cmd ::= BALANCE VGROUP LEADER */ - 339, /* (364) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ - 339, /* (365) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ - 339, /* (366) cmd ::= SPLIT VGROUP NK_INTEGER */ - 429, /* (367) dnode_list ::= DNODE NK_INTEGER */ - 429, /* (368) dnode_list ::= dnode_list DNODE NK_INTEGER */ - 339, /* (369) cmd ::= DELETE FROM full_table_name where_clause_opt */ - 339, /* (370) cmd ::= query_or_subquery */ - 339, /* (371) cmd ::= insert_query */ - 417, /* (372) insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ - 417, /* (373) insert_query ::= INSERT INTO full_table_name query_or_subquery */ - 342, /* (374) literal ::= NK_INTEGER */ - 342, /* (375) literal ::= NK_FLOAT */ - 342, /* (376) literal ::= NK_STRING */ - 342, /* (377) literal ::= NK_BOOL */ - 342, /* (378) literal ::= TIMESTAMP NK_STRING */ - 342, /* (379) literal ::= duration_literal */ - 342, /* (380) literal ::= NULL */ - 342, /* (381) literal ::= NK_QUESTION */ - 392, /* (382) duration_literal ::= NK_VARIABLE */ - 368, /* (383) signed ::= NK_INTEGER */ - 368, /* (384) signed ::= NK_PLUS NK_INTEGER */ - 368, /* (385) signed ::= NK_MINUS NK_INTEGER */ - 368, /* (386) signed ::= NK_FLOAT */ - 368, /* (387) signed ::= NK_PLUS NK_FLOAT */ - 368, /* (388) signed ::= NK_MINUS NK_FLOAT */ - 382, /* (389) signed_literal ::= signed */ - 382, /* (390) signed_literal ::= NK_STRING */ - 382, /* (391) signed_literal ::= NK_BOOL */ - 382, /* (392) signed_literal ::= TIMESTAMP NK_STRING */ - 382, /* (393) signed_literal ::= duration_literal */ - 382, /* (394) signed_literal ::= NULL */ - 382, /* (395) signed_literal ::= literal_func */ - 382, /* (396) signed_literal ::= NK_QUESTION */ - 431, /* (397) literal_list ::= signed_literal */ - 431, /* (398) literal_list ::= literal_list NK_COMMA signed_literal */ - 351, /* (399) db_name ::= NK_ID */ - 352, /* (400) table_name ::= NK_ID */ - 381, /* (401) column_name ::= NK_ID */ - 394, /* (402) function_name ::= NK_ID */ - 432, /* (403) table_alias ::= NK_ID */ - 402, /* (404) column_alias ::= NK_ID */ - 344, /* (405) user_name ::= NK_ID */ - 353, /* (406) topic_name ::= NK_ID */ - 422, /* (407) stream_name ::= NK_ID */ - 414, /* (408) cgroup_name ::= NK_ID */ - 405, /* (409) index_name ::= NK_ID */ - 433, /* (410) expr_or_subquery ::= expression */ - 428, /* (411) expression ::= literal */ - 428, /* (412) expression ::= pseudo_column */ - 428, /* (413) expression ::= column_reference */ - 428, /* (414) expression ::= function_expression */ - 428, /* (415) expression ::= case_when_expression */ - 428, /* (416) expression ::= NK_LP expression NK_RP */ - 428, /* (417) expression ::= NK_PLUS expr_or_subquery */ - 428, /* (418) expression ::= NK_MINUS expr_or_subquery */ - 428, /* (419) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ - 428, /* (420) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ - 428, /* (421) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ - 428, /* (422) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ - 428, /* (423) expression ::= expr_or_subquery NK_REM expr_or_subquery */ - 428, /* (424) expression ::= column_reference NK_ARROW NK_STRING */ - 428, /* (425) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ - 428, /* (426) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ - 385, /* (427) expression_list ::= expr_or_subquery */ - 385, /* (428) expression_list ::= expression_list NK_COMMA expr_or_subquery */ - 435, /* (429) column_reference ::= column_name */ - 435, /* (430) column_reference ::= table_name NK_DOT column_name */ - 434, /* (431) pseudo_column ::= ROWTS */ - 434, /* (432) pseudo_column ::= TBNAME */ - 434, /* (433) pseudo_column ::= table_name NK_DOT TBNAME */ - 434, /* (434) pseudo_column ::= QSTART */ - 434, /* (435) pseudo_column ::= QEND */ - 434, /* (436) pseudo_column ::= QDURATION */ - 434, /* (437) pseudo_column ::= WSTART */ - 434, /* (438) pseudo_column ::= WEND */ - 434, /* (439) pseudo_column ::= WDURATION */ - 434, /* (440) pseudo_column ::= IROWTS */ - 434, /* (441) pseudo_column ::= ISFILLED */ - 434, /* (442) pseudo_column ::= QTAGS */ - 436, /* (443) function_expression ::= function_name NK_LP expression_list NK_RP */ - 436, /* (444) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ - 436, /* (445) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ - 436, /* (446) function_expression ::= literal_func */ - 430, /* (447) literal_func ::= noarg_func NK_LP NK_RP */ - 430, /* (448) literal_func ::= NOW */ - 440, /* (449) noarg_func ::= NOW */ - 440, /* (450) noarg_func ::= TODAY */ - 440, /* (451) noarg_func ::= TIMEZONE */ - 440, /* (452) noarg_func ::= DATABASE */ - 440, /* (453) noarg_func ::= CLIENT_VERSION */ - 440, /* (454) noarg_func ::= SERVER_VERSION */ - 440, /* (455) noarg_func ::= SERVER_STATUS */ - 440, /* (456) noarg_func ::= CURRENT_USER */ - 440, /* (457) noarg_func ::= USER */ - 438, /* (458) star_func ::= COUNT */ - 438, /* (459) star_func ::= FIRST */ - 438, /* (460) star_func ::= LAST */ - 438, /* (461) star_func ::= LAST_ROW */ - 439, /* (462) star_func_para_list ::= NK_STAR */ - 439, /* (463) star_func_para_list ::= other_para_list */ - 441, /* (464) other_para_list ::= star_func_para */ - 441, /* (465) other_para_list ::= other_para_list NK_COMMA star_func_para */ - 442, /* (466) star_func_para ::= expr_or_subquery */ - 442, /* (467) star_func_para ::= table_name NK_DOT NK_STAR */ - 437, /* (468) case_when_expression ::= CASE when_then_list case_when_else_opt END */ - 437, /* (469) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ - 443, /* (470) when_then_list ::= when_then_expr */ - 443, /* (471) when_then_list ::= when_then_list when_then_expr */ - 446, /* (472) when_then_expr ::= WHEN common_expression THEN common_expression */ - 444, /* (473) case_when_else_opt ::= */ - 444, /* (474) case_when_else_opt ::= ELSE common_expression */ - 447, /* (475) predicate ::= expr_or_subquery compare_op expr_or_subquery */ - 447, /* (476) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ - 447, /* (477) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ - 447, /* (478) predicate ::= expr_or_subquery IS NULL */ - 447, /* (479) predicate ::= expr_or_subquery IS NOT NULL */ - 447, /* (480) predicate ::= expr_or_subquery in_op in_predicate_value */ - 448, /* (481) compare_op ::= NK_LT */ - 448, /* (482) compare_op ::= NK_GT */ - 448, /* (483) compare_op ::= NK_LE */ - 448, /* (484) compare_op ::= NK_GE */ - 448, /* (485) compare_op ::= NK_NE */ - 448, /* (486) compare_op ::= NK_EQ */ - 448, /* (487) compare_op ::= LIKE */ - 448, /* (488) compare_op ::= NOT LIKE */ - 448, /* (489) compare_op ::= MATCH */ - 448, /* (490) compare_op ::= NMATCH */ - 448, /* (491) compare_op ::= CONTAINS */ - 449, /* (492) in_op ::= IN */ - 449, /* (493) in_op ::= NOT IN */ - 450, /* (494) in_predicate_value ::= NK_LP literal_list NK_RP */ - 451, /* (495) boolean_value_expression ::= boolean_primary */ - 451, /* (496) boolean_value_expression ::= NOT boolean_primary */ - 451, /* (497) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ - 451, /* (498) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ - 452, /* (499) boolean_primary ::= predicate */ - 452, /* (500) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ - 445, /* (501) common_expression ::= expr_or_subquery */ - 445, /* (502) common_expression ::= boolean_value_expression */ - 453, /* (503) from_clause_opt ::= */ - 453, /* (504) from_clause_opt ::= FROM table_reference_list */ - 454, /* (505) table_reference_list ::= table_reference */ - 454, /* (506) table_reference_list ::= table_reference_list NK_COMMA table_reference */ - 455, /* (507) table_reference ::= table_primary */ - 455, /* (508) table_reference ::= joined_table */ - 456, /* (509) table_primary ::= table_name alias_opt */ - 456, /* (510) table_primary ::= db_name NK_DOT table_name alias_opt */ - 456, /* (511) table_primary ::= subquery alias_opt */ - 456, /* (512) table_primary ::= parenthesized_joined_table */ - 458, /* (513) alias_opt ::= */ - 458, /* (514) alias_opt ::= table_alias */ - 458, /* (515) alias_opt ::= AS table_alias */ - 460, /* (516) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - 460, /* (517) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ - 457, /* (518) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ - 461, /* (519) join_type ::= */ - 461, /* (520) join_type ::= INNER */ - 462, /* (521) query_specification ::= SELECT hint_list tag_mode_opt set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */ - 463, /* (522) hint_list ::= */ - 463, /* (523) hint_list ::= NK_HINT */ - 464, /* (524) tag_mode_opt ::= */ - 464, /* (525) tag_mode_opt ::= TAGS */ - 465, /* (526) set_quantifier_opt ::= */ - 465, /* (527) set_quantifier_opt ::= DISTINCT */ - 465, /* (528) set_quantifier_opt ::= ALL */ - 466, /* (529) select_list ::= select_item */ - 466, /* (530) select_list ::= select_list NK_COMMA select_item */ - 474, /* (531) select_item ::= NK_STAR */ - 474, /* (532) select_item ::= common_expression */ - 474, /* (533) select_item ::= common_expression column_alias */ - 474, /* (534) select_item ::= common_expression AS column_alias */ - 474, /* (535) select_item ::= table_name NK_DOT NK_STAR */ - 413, /* (536) where_clause_opt ::= */ - 413, /* (537) where_clause_opt ::= WHERE search_condition */ - 467, /* (538) partition_by_clause_opt ::= */ - 467, /* (539) partition_by_clause_opt ::= PARTITION BY partition_list */ - 475, /* (540) partition_list ::= partition_item */ - 475, /* (541) partition_list ::= partition_list NK_COMMA partition_item */ - 476, /* (542) partition_item ::= expr_or_subquery */ - 476, /* (543) partition_item ::= expr_or_subquery column_alias */ - 476, /* (544) partition_item ::= expr_or_subquery AS column_alias */ - 471, /* (545) twindow_clause_opt ::= */ - 471, /* (546) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ - 471, /* (547) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ - 471, /* (548) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ - 471, /* (549) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ - 471, /* (550) twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ - 407, /* (551) sliding_opt ::= */ - 407, /* (552) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ - 470, /* (553) fill_opt ::= */ - 470, /* (554) fill_opt ::= FILL NK_LP fill_mode NK_RP */ - 470, /* (555) fill_opt ::= FILL NK_LP VALUE NK_COMMA expression_list NK_RP */ - 470, /* (556) fill_opt ::= FILL NK_LP VALUE_F NK_COMMA expression_list NK_RP */ - 477, /* (557) fill_mode ::= NONE */ - 477, /* (558) fill_mode ::= PREV */ - 477, /* (559) fill_mode ::= NULL */ - 477, /* (560) fill_mode ::= NULL_F */ - 477, /* (561) fill_mode ::= LINEAR */ - 477, /* (562) fill_mode ::= NEXT */ - 472, /* (563) group_by_clause_opt ::= */ - 472, /* (564) group_by_clause_opt ::= GROUP BY group_by_list */ - 478, /* (565) group_by_list ::= expr_or_subquery */ - 478, /* (566) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ - 473, /* (567) having_clause_opt ::= */ - 473, /* (568) having_clause_opt ::= HAVING search_condition */ - 468, /* (569) range_opt ::= */ - 468, /* (570) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ - 468, /* (571) range_opt ::= RANGE NK_LP expr_or_subquery NK_RP */ - 469, /* (572) every_opt ::= */ - 469, /* (573) every_opt ::= EVERY NK_LP duration_literal NK_RP */ - 479, /* (574) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ - 480, /* (575) query_simple ::= query_specification */ - 480, /* (576) query_simple ::= union_query_expression */ - 484, /* (577) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ - 484, /* (578) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ - 485, /* (579) query_simple_or_subquery ::= query_simple */ - 485, /* (580) query_simple_or_subquery ::= subquery */ - 412, /* (581) query_or_subquery ::= query_expression */ - 412, /* (582) query_or_subquery ::= subquery */ - 481, /* (583) order_by_clause_opt ::= */ - 481, /* (584) order_by_clause_opt ::= ORDER BY sort_specification_list */ - 482, /* (585) slimit_clause_opt ::= */ - 482, /* (586) slimit_clause_opt ::= SLIMIT NK_INTEGER */ - 482, /* (587) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - 482, /* (588) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - 483, /* (589) limit_clause_opt ::= */ - 483, /* (590) limit_clause_opt ::= LIMIT NK_INTEGER */ - 483, /* (591) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ - 483, /* (592) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - 459, /* (593) subquery ::= NK_LP query_expression NK_RP */ - 459, /* (594) subquery ::= NK_LP subquery NK_RP */ - 354, /* (595) search_condition ::= common_expression */ - 486, /* (596) sort_specification_list ::= sort_specification */ - 486, /* (597) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ - 487, /* (598) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ - 488, /* (599) ordering_specification_opt ::= */ - 488, /* (600) ordering_specification_opt ::= ASC */ - 488, /* (601) ordering_specification_opt ::= DESC */ - 489, /* (602) null_ordering_opt ::= */ - 489, /* (603) null_ordering_opt ::= NULLS FIRST */ - 489, /* (604) null_ordering_opt ::= NULLS LAST */ + 340, /* (0) cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ + 340, /* (1) cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ + 341, /* (2) account_options ::= */ + 341, /* (3) account_options ::= account_options PPS literal */ + 341, /* (4) account_options ::= account_options TSERIES literal */ + 341, /* (5) account_options ::= account_options STORAGE literal */ + 341, /* (6) account_options ::= account_options STREAMS literal */ + 341, /* (7) account_options ::= account_options QTIME literal */ + 341, /* (8) account_options ::= account_options DBS literal */ + 341, /* (9) account_options ::= account_options USERS literal */ + 341, /* (10) account_options ::= account_options CONNS literal */ + 341, /* (11) account_options ::= account_options STATE literal */ + 342, /* (12) alter_account_options ::= alter_account_option */ + 342, /* (13) alter_account_options ::= alter_account_options alter_account_option */ + 344, /* (14) alter_account_option ::= PASS literal */ + 344, /* (15) alter_account_option ::= PPS literal */ + 344, /* (16) alter_account_option ::= TSERIES literal */ + 344, /* (17) alter_account_option ::= STORAGE literal */ + 344, /* (18) alter_account_option ::= STREAMS literal */ + 344, /* (19) alter_account_option ::= QTIME literal */ + 344, /* (20) alter_account_option ::= DBS literal */ + 344, /* (21) alter_account_option ::= USERS literal */ + 344, /* (22) alter_account_option ::= CONNS literal */ + 344, /* (23) alter_account_option ::= STATE literal */ + 345, /* (24) ip_range_list ::= NK_STRING */ + 345, /* (25) ip_range_list ::= ip_range_list NK_COMMA NK_STRING */ + 346, /* (26) white_list ::= HOST ip_range_list */ + 347, /* (27) white_list_opt ::= */ + 347, /* (28) white_list_opt ::= white_list */ + 340, /* (29) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt white_list_opt */ + 340, /* (30) cmd ::= ALTER USER user_name PASS NK_STRING */ + 340, /* (31) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ + 340, /* (32) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ + 340, /* (33) cmd ::= ALTER USER user_name ADD white_list */ + 340, /* (34) cmd ::= ALTER USER user_name DROP white_list */ + 340, /* (35) cmd ::= DROP USER user_name */ + 349, /* (36) sysinfo_opt ::= */ + 349, /* (37) sysinfo_opt ::= SYSINFO NK_INTEGER */ + 340, /* (38) cmd ::= GRANT privileges ON priv_level with_opt TO user_name */ + 340, /* (39) cmd ::= REVOKE privileges ON priv_level with_opt FROM user_name */ + 350, /* (40) privileges ::= ALL */ + 350, /* (41) privileges ::= priv_type_list */ + 350, /* (42) privileges ::= SUBSCRIBE */ + 353, /* (43) priv_type_list ::= priv_type */ + 353, /* (44) priv_type_list ::= priv_type_list NK_COMMA priv_type */ + 354, /* (45) priv_type ::= READ */ + 354, /* (46) priv_type ::= WRITE */ + 351, /* (47) priv_level ::= NK_STAR NK_DOT NK_STAR */ + 351, /* (48) priv_level ::= db_name NK_DOT NK_STAR */ + 351, /* (49) priv_level ::= db_name NK_DOT table_name */ + 351, /* (50) priv_level ::= topic_name */ + 352, /* (51) with_opt ::= */ + 352, /* (52) with_opt ::= WITH search_condition */ + 340, /* (53) cmd ::= CREATE DNODE dnode_endpoint */ + 340, /* (54) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ + 340, /* (55) cmd ::= DROP DNODE NK_INTEGER force_opt */ + 340, /* (56) cmd ::= DROP DNODE dnode_endpoint force_opt */ + 340, /* (57) cmd ::= DROP DNODE NK_INTEGER unsafe_opt */ + 340, /* (58) cmd ::= DROP DNODE dnode_endpoint unsafe_opt */ + 340, /* (59) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ + 340, /* (60) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ + 340, /* (61) cmd ::= ALTER ALL DNODES NK_STRING */ + 340, /* (62) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ + 340, /* (63) cmd ::= RESTORE DNODE NK_INTEGER */ + 359, /* (64) dnode_endpoint ::= NK_STRING */ + 359, /* (65) dnode_endpoint ::= NK_ID */ + 359, /* (66) dnode_endpoint ::= NK_IPTOKEN */ + 360, /* (67) force_opt ::= */ + 360, /* (68) force_opt ::= FORCE */ + 361, /* (69) unsafe_opt ::= UNSAFE */ + 340, /* (70) cmd ::= ALTER LOCAL NK_STRING */ + 340, /* (71) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ + 340, /* (72) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ + 340, /* (73) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ + 340, /* (74) cmd ::= RESTORE QNODE ON DNODE NK_INTEGER */ + 340, /* (75) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ + 340, /* (76) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ + 340, /* (77) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ + 340, /* (78) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ + 340, /* (79) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ + 340, /* (80) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ + 340, /* (81) cmd ::= RESTORE MNODE ON DNODE NK_INTEGER */ + 340, /* (82) cmd ::= RESTORE VNODE ON DNODE NK_INTEGER */ + 340, /* (83) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ + 340, /* (84) cmd ::= DROP DATABASE exists_opt db_name */ + 340, /* (85) cmd ::= USE db_name */ + 340, /* (86) cmd ::= ALTER DATABASE db_name alter_db_options */ + 340, /* (87) cmd ::= FLUSH DATABASE db_name */ + 340, /* (88) cmd ::= TRIM DATABASE db_name speed_opt */ + 340, /* (89) cmd ::= COMPACT DATABASE db_name start_opt end_opt */ + 362, /* (90) not_exists_opt ::= IF NOT EXISTS */ + 362, /* (91) not_exists_opt ::= */ + 364, /* (92) exists_opt ::= IF EXISTS */ + 364, /* (93) exists_opt ::= */ + 363, /* (94) db_options ::= */ + 363, /* (95) db_options ::= db_options BUFFER NK_INTEGER */ + 363, /* (96) db_options ::= db_options CACHEMODEL NK_STRING */ + 363, /* (97) db_options ::= db_options CACHESIZE NK_INTEGER */ + 363, /* (98) db_options ::= db_options COMP NK_INTEGER */ + 363, /* (99) db_options ::= db_options DURATION NK_INTEGER */ + 363, /* (100) db_options ::= db_options DURATION NK_VARIABLE */ + 363, /* (101) db_options ::= db_options MAXROWS NK_INTEGER */ + 363, /* (102) db_options ::= db_options MINROWS NK_INTEGER */ + 363, /* (103) db_options ::= db_options KEEP integer_list */ + 363, /* (104) db_options ::= db_options KEEP variable_list */ + 363, /* (105) db_options ::= db_options PAGES NK_INTEGER */ + 363, /* (106) db_options ::= db_options PAGESIZE NK_INTEGER */ + 363, /* (107) db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ + 363, /* (108) db_options ::= db_options PRECISION NK_STRING */ + 363, /* (109) db_options ::= db_options REPLICA NK_INTEGER */ + 363, /* (110) db_options ::= db_options VGROUPS NK_INTEGER */ + 363, /* (111) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ + 363, /* (112) db_options ::= db_options RETENTIONS retention_list */ + 363, /* (113) db_options ::= db_options SCHEMALESS NK_INTEGER */ + 363, /* (114) db_options ::= db_options WAL_LEVEL NK_INTEGER */ + 363, /* (115) db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ + 363, /* (116) db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ + 363, /* (117) db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + 363, /* (118) db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ + 363, /* (119) db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + 363, /* (120) db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ + 363, /* (121) db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ + 363, /* (122) db_options ::= db_options STT_TRIGGER NK_INTEGER */ + 363, /* (123) db_options ::= db_options TABLE_PREFIX signed */ + 363, /* (124) db_options ::= db_options TABLE_SUFFIX signed */ + 365, /* (125) alter_db_options ::= alter_db_option */ + 365, /* (126) alter_db_options ::= alter_db_options alter_db_option */ + 373, /* (127) alter_db_option ::= BUFFER NK_INTEGER */ + 373, /* (128) alter_db_option ::= CACHEMODEL NK_STRING */ + 373, /* (129) alter_db_option ::= CACHESIZE NK_INTEGER */ + 373, /* (130) alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ + 373, /* (131) alter_db_option ::= KEEP integer_list */ + 373, /* (132) alter_db_option ::= KEEP variable_list */ + 373, /* (133) alter_db_option ::= PAGES NK_INTEGER */ + 373, /* (134) alter_db_option ::= REPLICA NK_INTEGER */ + 373, /* (135) alter_db_option ::= WAL_LEVEL NK_INTEGER */ + 373, /* (136) alter_db_option ::= STT_TRIGGER NK_INTEGER */ + 373, /* (137) alter_db_option ::= MINROWS NK_INTEGER */ + 373, /* (138) alter_db_option ::= WAL_RETENTION_PERIOD NK_INTEGER */ + 373, /* (139) alter_db_option ::= WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + 373, /* (140) alter_db_option ::= WAL_RETENTION_SIZE NK_INTEGER */ + 373, /* (141) alter_db_option ::= WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + 369, /* (142) integer_list ::= NK_INTEGER */ + 369, /* (143) integer_list ::= integer_list NK_COMMA NK_INTEGER */ + 370, /* (144) variable_list ::= NK_VARIABLE */ + 370, /* (145) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ + 371, /* (146) retention_list ::= retention */ + 371, /* (147) retention_list ::= retention_list NK_COMMA retention */ + 374, /* (148) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ + 366, /* (149) speed_opt ::= */ + 366, /* (150) speed_opt ::= MAX_SPEED NK_INTEGER */ + 367, /* (151) start_opt ::= */ + 367, /* (152) start_opt ::= START WITH NK_INTEGER */ + 367, /* (153) start_opt ::= START WITH NK_STRING */ + 367, /* (154) start_opt ::= START WITH TIMESTAMP NK_STRING */ + 368, /* (155) end_opt ::= */ + 368, /* (156) end_opt ::= END WITH NK_INTEGER */ + 368, /* (157) end_opt ::= END WITH NK_STRING */ + 368, /* (158) end_opt ::= END WITH TIMESTAMP NK_STRING */ + 340, /* (159) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ + 340, /* (160) cmd ::= CREATE TABLE multi_create_clause */ + 340, /* (161) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ + 340, /* (162) cmd ::= DROP TABLE multi_drop_clause */ + 340, /* (163) cmd ::= DROP STABLE exists_opt full_table_name */ + 340, /* (164) cmd ::= ALTER TABLE alter_table_clause */ + 340, /* (165) cmd ::= ALTER STABLE alter_table_clause */ + 382, /* (166) alter_table_clause ::= full_table_name alter_table_options */ + 382, /* (167) alter_table_clause ::= full_table_name ADD COLUMN column_def */ + 382, /* (168) alter_table_clause ::= full_table_name DROP COLUMN column_name */ + 382, /* (169) alter_table_clause ::= full_table_name MODIFY COLUMN column_def */ + 382, /* (170) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ + 382, /* (171) alter_table_clause ::= full_table_name ADD TAG column_def */ + 382, /* (172) alter_table_clause ::= full_table_name DROP TAG column_name */ + 382, /* (173) alter_table_clause ::= full_table_name MODIFY TAG column_def */ + 382, /* (174) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ + 382, /* (175) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ + 379, /* (176) multi_create_clause ::= create_subtable_clause */ + 379, /* (177) multi_create_clause ::= multi_create_clause create_subtable_clause */ + 387, /* (178) create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ + 381, /* (179) multi_drop_clause ::= drop_table_clause */ + 381, /* (180) multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause */ + 390, /* (181) drop_table_clause ::= exists_opt full_table_name */ + 388, /* (182) specific_cols_opt ::= */ + 388, /* (183) specific_cols_opt ::= NK_LP col_name_list NK_RP */ + 375, /* (184) full_table_name ::= table_name */ + 375, /* (185) full_table_name ::= db_name NK_DOT table_name */ + 376, /* (186) column_def_list ::= column_def */ + 376, /* (187) column_def_list ::= column_def_list NK_COMMA column_def */ + 384, /* (188) column_def ::= column_name type_name */ + 384, /* (189) column_def ::= column_name type_name COMMENT NK_STRING */ + 392, /* (190) type_name ::= BOOL */ + 392, /* (191) type_name ::= TINYINT */ + 392, /* (192) type_name ::= SMALLINT */ + 392, /* (193) type_name ::= INT */ + 392, /* (194) type_name ::= INTEGER */ + 392, /* (195) type_name ::= BIGINT */ + 392, /* (196) type_name ::= FLOAT */ + 392, /* (197) type_name ::= DOUBLE */ + 392, /* (198) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ + 392, /* (199) type_name ::= TIMESTAMP */ + 392, /* (200) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ + 392, /* (201) type_name ::= TINYINT UNSIGNED */ + 392, /* (202) type_name ::= SMALLINT UNSIGNED */ + 392, /* (203) type_name ::= INT UNSIGNED */ + 392, /* (204) type_name ::= BIGINT UNSIGNED */ + 392, /* (205) type_name ::= JSON */ + 392, /* (206) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ + 392, /* (207) type_name ::= MEDIUMBLOB */ + 392, /* (208) type_name ::= BLOB */ + 392, /* (209) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ + 392, /* (210) type_name ::= GEOMETRY NK_LP NK_INTEGER NK_RP */ + 392, /* (211) type_name ::= DECIMAL */ + 392, /* (212) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ + 392, /* (213) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ + 377, /* (214) tags_def_opt ::= */ + 377, /* (215) tags_def_opt ::= tags_def */ + 380, /* (216) tags_def ::= TAGS NK_LP column_def_list NK_RP */ + 378, /* (217) table_options ::= */ + 378, /* (218) table_options ::= table_options COMMENT NK_STRING */ + 378, /* (219) table_options ::= table_options MAX_DELAY duration_list */ + 378, /* (220) table_options ::= table_options WATERMARK duration_list */ + 378, /* (221) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ + 378, /* (222) table_options ::= table_options TTL NK_INTEGER */ + 378, /* (223) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ + 378, /* (224) table_options ::= table_options DELETE_MARK duration_list */ + 383, /* (225) alter_table_options ::= alter_table_option */ + 383, /* (226) alter_table_options ::= alter_table_options alter_table_option */ + 395, /* (227) alter_table_option ::= COMMENT NK_STRING */ + 395, /* (228) alter_table_option ::= TTL NK_INTEGER */ + 393, /* (229) duration_list ::= duration_literal */ + 393, /* (230) duration_list ::= duration_list NK_COMMA duration_literal */ + 394, /* (231) rollup_func_list ::= rollup_func_name */ + 394, /* (232) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ + 397, /* (233) rollup_func_name ::= function_name */ + 397, /* (234) rollup_func_name ::= FIRST */ + 397, /* (235) rollup_func_name ::= LAST */ + 391, /* (236) col_name_list ::= col_name */ + 391, /* (237) col_name_list ::= col_name_list NK_COMMA col_name */ + 399, /* (238) col_name ::= column_name */ + 340, /* (239) cmd ::= SHOW DNODES */ + 340, /* (240) cmd ::= SHOW USERS */ + 340, /* (241) cmd ::= SHOW USER PRIVILEGES */ + 340, /* (242) cmd ::= SHOW DATABASES */ + 340, /* (243) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ + 340, /* (244) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ + 340, /* (245) cmd ::= SHOW db_name_cond_opt VGROUPS */ + 340, /* (246) cmd ::= SHOW MNODES */ + 340, /* (247) cmd ::= SHOW QNODES */ + 340, /* (248) cmd ::= SHOW FUNCTIONS */ + 340, /* (249) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ + 340, /* (250) cmd ::= SHOW INDEXES FROM db_name NK_DOT table_name */ + 340, /* (251) cmd ::= SHOW STREAMS */ + 340, /* (252) cmd ::= SHOW ACCOUNTS */ + 340, /* (253) cmd ::= SHOW APPS */ + 340, /* (254) cmd ::= SHOW CONNECTIONS */ + 340, /* (255) cmd ::= SHOW LICENCES */ + 340, /* (256) cmd ::= SHOW GRANTS */ + 340, /* (257) cmd ::= SHOW CREATE DATABASE db_name */ + 340, /* (258) cmd ::= SHOW CREATE TABLE full_table_name */ + 340, /* (259) cmd ::= SHOW CREATE STABLE full_table_name */ + 340, /* (260) cmd ::= SHOW QUERIES */ + 340, /* (261) cmd ::= SHOW SCORES */ + 340, /* (262) cmd ::= SHOW TOPICS */ + 340, /* (263) cmd ::= SHOW VARIABLES */ + 340, /* (264) cmd ::= SHOW CLUSTER VARIABLES */ + 340, /* (265) cmd ::= SHOW LOCAL VARIABLES */ + 340, /* (266) cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ + 340, /* (267) cmd ::= SHOW BNODES */ + 340, /* (268) cmd ::= SHOW SNODES */ + 340, /* (269) cmd ::= SHOW CLUSTER */ + 340, /* (270) cmd ::= SHOW TRANSACTIONS */ + 340, /* (271) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ + 340, /* (272) cmd ::= SHOW CONSUMERS */ + 340, /* (273) cmd ::= SHOW SUBSCRIPTIONS */ + 340, /* (274) cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ + 340, /* (275) cmd ::= SHOW TAGS FROM db_name NK_DOT table_name */ + 340, /* (276) cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt */ + 340, /* (277) cmd ::= SHOW TABLE TAGS tag_list_opt FROM db_name NK_DOT table_name */ + 340, /* (278) cmd ::= SHOW VNODES ON DNODE NK_INTEGER */ + 340, /* (279) cmd ::= SHOW VNODES */ + 340, /* (280) cmd ::= SHOW db_name_cond_opt ALIVE */ + 340, /* (281) cmd ::= SHOW CLUSTER ALIVE */ + 400, /* (282) db_name_cond_opt ::= */ + 400, /* (283) db_name_cond_opt ::= db_name NK_DOT */ + 401, /* (284) like_pattern_opt ::= */ + 401, /* (285) like_pattern_opt ::= LIKE NK_STRING */ + 402, /* (286) table_name_cond ::= table_name */ + 403, /* (287) from_db_opt ::= */ + 403, /* (288) from_db_opt ::= FROM db_name */ + 404, /* (289) tag_list_opt ::= */ + 404, /* (290) tag_list_opt ::= tag_item */ + 404, /* (291) tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ + 405, /* (292) tag_item ::= TBNAME */ + 405, /* (293) tag_item ::= QTAGS */ + 405, /* (294) tag_item ::= column_name */ + 405, /* (295) tag_item ::= column_name column_alias */ + 405, /* (296) tag_item ::= column_name AS column_alias */ + 340, /* (297) cmd ::= CREATE SMA INDEX not_exists_opt full_index_name ON full_table_name index_options */ + 340, /* (298) cmd ::= CREATE INDEX not_exists_opt full_index_name ON full_table_name NK_LP col_name_list NK_RP */ + 340, /* (299) cmd ::= DROP INDEX exists_opt full_index_name */ + 407, /* (300) full_index_name ::= index_name */ + 407, /* (301) full_index_name ::= db_name NK_DOT index_name */ + 408, /* (302) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ + 408, /* (303) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ + 410, /* (304) func_list ::= func */ + 410, /* (305) func_list ::= func_list NK_COMMA func */ + 413, /* (306) func ::= sma_func_name NK_LP expression_list NK_RP */ + 414, /* (307) sma_func_name ::= function_name */ + 414, /* (308) sma_func_name ::= COUNT */ + 414, /* (309) sma_func_name ::= FIRST */ + 414, /* (310) sma_func_name ::= LAST */ + 414, /* (311) sma_func_name ::= LAST_ROW */ + 412, /* (312) sma_stream_opt ::= */ + 412, /* (313) sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal */ + 412, /* (314) sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal */ + 412, /* (315) sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal */ + 415, /* (316) with_meta ::= AS */ + 415, /* (317) with_meta ::= WITH META AS */ + 415, /* (318) with_meta ::= ONLY META AS */ + 340, /* (319) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ + 340, /* (320) cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta DATABASE db_name */ + 340, /* (321) cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta STABLE full_table_name where_clause_opt */ + 340, /* (322) cmd ::= DROP TOPIC exists_opt topic_name */ + 340, /* (323) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ + 340, /* (324) cmd ::= DESC full_table_name */ + 340, /* (325) cmd ::= DESCRIBE full_table_name */ + 340, /* (326) cmd ::= RESET QUERY CACHE */ + 340, /* (327) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ + 340, /* (328) cmd ::= EXPLAIN analyze_opt explain_options insert_query */ + 419, /* (329) analyze_opt ::= */ + 419, /* (330) analyze_opt ::= ANALYZE */ + 420, /* (331) explain_options ::= */ + 420, /* (332) explain_options ::= explain_options VERBOSE NK_BOOL */ + 420, /* (333) explain_options ::= explain_options RATIO NK_FLOAT */ + 340, /* (334) cmd ::= CREATE or_replace_opt agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt language_opt */ + 340, /* (335) cmd ::= DROP FUNCTION exists_opt function_name */ + 423, /* (336) agg_func_opt ::= */ + 423, /* (337) agg_func_opt ::= AGGREGATE */ + 424, /* (338) bufsize_opt ::= */ + 424, /* (339) bufsize_opt ::= BUFSIZE NK_INTEGER */ + 425, /* (340) language_opt ::= */ + 425, /* (341) language_opt ::= LANGUAGE NK_STRING */ + 422, /* (342) or_replace_opt ::= */ + 422, /* (343) or_replace_opt ::= OR REPLACE */ + 340, /* (344) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name col_list_opt tag_def_or_ref_opt subtable_opt AS query_or_subquery */ + 340, /* (345) cmd ::= DROP STREAM exists_opt stream_name */ + 340, /* (346) cmd ::= PAUSE STREAM exists_opt stream_name */ + 340, /* (347) cmd ::= RESUME STREAM exists_opt ignore_opt stream_name */ + 428, /* (348) col_list_opt ::= */ + 428, /* (349) col_list_opt ::= NK_LP col_name_list NK_RP */ + 429, /* (350) tag_def_or_ref_opt ::= */ + 429, /* (351) tag_def_or_ref_opt ::= tags_def */ + 429, /* (352) tag_def_or_ref_opt ::= TAGS NK_LP col_name_list NK_RP */ + 427, /* (353) stream_options ::= */ + 427, /* (354) stream_options ::= stream_options TRIGGER AT_ONCE */ + 427, /* (355) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ + 427, /* (356) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ + 427, /* (357) stream_options ::= stream_options WATERMARK duration_literal */ + 427, /* (358) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ + 427, /* (359) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ + 427, /* (360) stream_options ::= stream_options DELETE_MARK duration_literal */ + 427, /* (361) stream_options ::= stream_options IGNORE UPDATE NK_INTEGER */ + 430, /* (362) subtable_opt ::= */ + 430, /* (363) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + 431, /* (364) ignore_opt ::= */ + 431, /* (365) ignore_opt ::= IGNORE UNTREATED */ + 340, /* (366) cmd ::= KILL CONNECTION NK_INTEGER */ + 340, /* (367) cmd ::= KILL QUERY NK_STRING */ + 340, /* (368) cmd ::= KILL TRANSACTION NK_INTEGER */ + 340, /* (369) cmd ::= BALANCE VGROUP */ + 340, /* (370) cmd ::= BALANCE VGROUP LEADER */ + 340, /* (371) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + 340, /* (372) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ + 340, /* (373) cmd ::= SPLIT VGROUP NK_INTEGER */ + 433, /* (374) dnode_list ::= DNODE NK_INTEGER */ + 433, /* (375) dnode_list ::= dnode_list DNODE NK_INTEGER */ + 340, /* (376) cmd ::= DELETE FROM full_table_name where_clause_opt */ + 340, /* (377) cmd ::= query_or_subquery */ + 340, /* (378) cmd ::= insert_query */ + 421, /* (379) insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ + 421, /* (380) insert_query ::= INSERT INTO full_table_name query_or_subquery */ + 343, /* (381) literal ::= NK_INTEGER */ + 343, /* (382) literal ::= NK_FLOAT */ + 343, /* (383) literal ::= NK_STRING */ + 343, /* (384) literal ::= NK_BOOL */ + 343, /* (385) literal ::= TIMESTAMP NK_STRING */ + 343, /* (386) literal ::= duration_literal */ + 343, /* (387) literal ::= NULL */ + 343, /* (388) literal ::= NK_QUESTION */ + 396, /* (389) duration_literal ::= NK_VARIABLE */ + 372, /* (390) signed ::= NK_INTEGER */ + 372, /* (391) signed ::= NK_PLUS NK_INTEGER */ + 372, /* (392) signed ::= NK_MINUS NK_INTEGER */ + 372, /* (393) signed ::= NK_FLOAT */ + 372, /* (394) signed ::= NK_PLUS NK_FLOAT */ + 372, /* (395) signed ::= NK_MINUS NK_FLOAT */ + 386, /* (396) signed_literal ::= signed */ + 386, /* (397) signed_literal ::= NK_STRING */ + 386, /* (398) signed_literal ::= NK_BOOL */ + 386, /* (399) signed_literal ::= TIMESTAMP NK_STRING */ + 386, /* (400) signed_literal ::= duration_literal */ + 386, /* (401) signed_literal ::= NULL */ + 386, /* (402) signed_literal ::= literal_func */ + 386, /* (403) signed_literal ::= NK_QUESTION */ + 435, /* (404) literal_list ::= signed_literal */ + 435, /* (405) literal_list ::= literal_list NK_COMMA signed_literal */ + 355, /* (406) db_name ::= NK_ID */ + 356, /* (407) table_name ::= NK_ID */ + 385, /* (408) column_name ::= NK_ID */ + 398, /* (409) function_name ::= NK_ID */ + 436, /* (410) table_alias ::= NK_ID */ + 406, /* (411) column_alias ::= NK_ID */ + 348, /* (412) user_name ::= NK_ID */ + 357, /* (413) topic_name ::= NK_ID */ + 426, /* (414) stream_name ::= NK_ID */ + 418, /* (415) cgroup_name ::= NK_ID */ + 409, /* (416) index_name ::= NK_ID */ + 437, /* (417) expr_or_subquery ::= expression */ + 432, /* (418) expression ::= literal */ + 432, /* (419) expression ::= pseudo_column */ + 432, /* (420) expression ::= column_reference */ + 432, /* (421) expression ::= function_expression */ + 432, /* (422) expression ::= case_when_expression */ + 432, /* (423) expression ::= NK_LP expression NK_RP */ + 432, /* (424) expression ::= NK_PLUS expr_or_subquery */ + 432, /* (425) expression ::= NK_MINUS expr_or_subquery */ + 432, /* (426) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + 432, /* (427) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + 432, /* (428) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + 432, /* (429) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + 432, /* (430) expression ::= expr_or_subquery NK_REM expr_or_subquery */ + 432, /* (431) expression ::= column_reference NK_ARROW NK_STRING */ + 432, /* (432) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + 432, /* (433) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + 389, /* (434) expression_list ::= expr_or_subquery */ + 389, /* (435) expression_list ::= expression_list NK_COMMA expr_or_subquery */ + 439, /* (436) column_reference ::= column_name */ + 439, /* (437) column_reference ::= table_name NK_DOT column_name */ + 438, /* (438) pseudo_column ::= ROWTS */ + 438, /* (439) pseudo_column ::= TBNAME */ + 438, /* (440) pseudo_column ::= table_name NK_DOT TBNAME */ + 438, /* (441) pseudo_column ::= QSTART */ + 438, /* (442) pseudo_column ::= QEND */ + 438, /* (443) pseudo_column ::= QDURATION */ + 438, /* (444) pseudo_column ::= WSTART */ + 438, /* (445) pseudo_column ::= WEND */ + 438, /* (446) pseudo_column ::= WDURATION */ + 438, /* (447) pseudo_column ::= IROWTS */ + 438, /* (448) pseudo_column ::= ISFILLED */ + 438, /* (449) pseudo_column ::= QTAGS */ + 440, /* (450) function_expression ::= function_name NK_LP expression_list NK_RP */ + 440, /* (451) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ + 440, /* (452) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ + 440, /* (453) function_expression ::= literal_func */ + 434, /* (454) literal_func ::= noarg_func NK_LP NK_RP */ + 434, /* (455) literal_func ::= NOW */ + 444, /* (456) noarg_func ::= NOW */ + 444, /* (457) noarg_func ::= TODAY */ + 444, /* (458) noarg_func ::= TIMEZONE */ + 444, /* (459) noarg_func ::= DATABASE */ + 444, /* (460) noarg_func ::= CLIENT_VERSION */ + 444, /* (461) noarg_func ::= SERVER_VERSION */ + 444, /* (462) noarg_func ::= SERVER_STATUS */ + 444, /* (463) noarg_func ::= CURRENT_USER */ + 444, /* (464) noarg_func ::= USER */ + 442, /* (465) star_func ::= COUNT */ + 442, /* (466) star_func ::= FIRST */ + 442, /* (467) star_func ::= LAST */ + 442, /* (468) star_func ::= LAST_ROW */ + 443, /* (469) star_func_para_list ::= NK_STAR */ + 443, /* (470) star_func_para_list ::= other_para_list */ + 445, /* (471) other_para_list ::= star_func_para */ + 445, /* (472) other_para_list ::= other_para_list NK_COMMA star_func_para */ + 446, /* (473) star_func_para ::= expr_or_subquery */ + 446, /* (474) star_func_para ::= table_name NK_DOT NK_STAR */ + 441, /* (475) case_when_expression ::= CASE when_then_list case_when_else_opt END */ + 441, /* (476) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ + 447, /* (477) when_then_list ::= when_then_expr */ + 447, /* (478) when_then_list ::= when_then_list when_then_expr */ + 450, /* (479) when_then_expr ::= WHEN common_expression THEN common_expression */ + 448, /* (480) case_when_else_opt ::= */ + 448, /* (481) case_when_else_opt ::= ELSE common_expression */ + 451, /* (482) predicate ::= expr_or_subquery compare_op expr_or_subquery */ + 451, /* (483) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + 451, /* (484) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + 451, /* (485) predicate ::= expr_or_subquery IS NULL */ + 451, /* (486) predicate ::= expr_or_subquery IS NOT NULL */ + 451, /* (487) predicate ::= expr_or_subquery in_op in_predicate_value */ + 452, /* (488) compare_op ::= NK_LT */ + 452, /* (489) compare_op ::= NK_GT */ + 452, /* (490) compare_op ::= NK_LE */ + 452, /* (491) compare_op ::= NK_GE */ + 452, /* (492) compare_op ::= NK_NE */ + 452, /* (493) compare_op ::= NK_EQ */ + 452, /* (494) compare_op ::= LIKE */ + 452, /* (495) compare_op ::= NOT LIKE */ + 452, /* (496) compare_op ::= MATCH */ + 452, /* (497) compare_op ::= NMATCH */ + 452, /* (498) compare_op ::= CONTAINS */ + 453, /* (499) in_op ::= IN */ + 453, /* (500) in_op ::= NOT IN */ + 454, /* (501) in_predicate_value ::= NK_LP literal_list NK_RP */ + 455, /* (502) boolean_value_expression ::= boolean_primary */ + 455, /* (503) boolean_value_expression ::= NOT boolean_primary */ + 455, /* (504) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + 455, /* (505) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + 456, /* (506) boolean_primary ::= predicate */ + 456, /* (507) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ + 449, /* (508) common_expression ::= expr_or_subquery */ + 449, /* (509) common_expression ::= boolean_value_expression */ + 457, /* (510) from_clause_opt ::= */ + 457, /* (511) from_clause_opt ::= FROM table_reference_list */ + 458, /* (512) table_reference_list ::= table_reference */ + 458, /* (513) table_reference_list ::= table_reference_list NK_COMMA table_reference */ + 459, /* (514) table_reference ::= table_primary */ + 459, /* (515) table_reference ::= joined_table */ + 460, /* (516) table_primary ::= table_name alias_opt */ + 460, /* (517) table_primary ::= db_name NK_DOT table_name alias_opt */ + 460, /* (518) table_primary ::= subquery alias_opt */ + 460, /* (519) table_primary ::= parenthesized_joined_table */ + 462, /* (520) alias_opt ::= */ + 462, /* (521) alias_opt ::= table_alias */ + 462, /* (522) alias_opt ::= AS table_alias */ + 464, /* (523) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + 464, /* (524) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ + 461, /* (525) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ + 465, /* (526) join_type ::= */ + 465, /* (527) join_type ::= INNER */ + 466, /* (528) query_specification ::= SELECT hint_list tag_mode_opt set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */ + 467, /* (529) hint_list ::= */ + 467, /* (530) hint_list ::= NK_HINT */ + 468, /* (531) tag_mode_opt ::= */ + 468, /* (532) tag_mode_opt ::= TAGS */ + 469, /* (533) set_quantifier_opt ::= */ + 469, /* (534) set_quantifier_opt ::= DISTINCT */ + 469, /* (535) set_quantifier_opt ::= ALL */ + 470, /* (536) select_list ::= select_item */ + 470, /* (537) select_list ::= select_list NK_COMMA select_item */ + 478, /* (538) select_item ::= NK_STAR */ + 478, /* (539) select_item ::= common_expression */ + 478, /* (540) select_item ::= common_expression column_alias */ + 478, /* (541) select_item ::= common_expression AS column_alias */ + 478, /* (542) select_item ::= table_name NK_DOT NK_STAR */ + 417, /* (543) where_clause_opt ::= */ + 417, /* (544) where_clause_opt ::= WHERE search_condition */ + 471, /* (545) partition_by_clause_opt ::= */ + 471, /* (546) partition_by_clause_opt ::= PARTITION BY partition_list */ + 479, /* (547) partition_list ::= partition_item */ + 479, /* (548) partition_list ::= partition_list NK_COMMA partition_item */ + 480, /* (549) partition_item ::= expr_or_subquery */ + 480, /* (550) partition_item ::= expr_or_subquery column_alias */ + 480, /* (551) partition_item ::= expr_or_subquery AS column_alias */ + 475, /* (552) twindow_clause_opt ::= */ + 475, /* (553) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ + 475, /* (554) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ + 475, /* (555) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ + 475, /* (556) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ + 475, /* (557) twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ + 411, /* (558) sliding_opt ::= */ + 411, /* (559) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ + 474, /* (560) fill_opt ::= */ + 474, /* (561) fill_opt ::= FILL NK_LP fill_mode NK_RP */ + 474, /* (562) fill_opt ::= FILL NK_LP VALUE NK_COMMA expression_list NK_RP */ + 474, /* (563) fill_opt ::= FILL NK_LP VALUE_F NK_COMMA expression_list NK_RP */ + 481, /* (564) fill_mode ::= NONE */ + 481, /* (565) fill_mode ::= PREV */ + 481, /* (566) fill_mode ::= NULL */ + 481, /* (567) fill_mode ::= NULL_F */ + 481, /* (568) fill_mode ::= LINEAR */ + 481, /* (569) fill_mode ::= NEXT */ + 476, /* (570) group_by_clause_opt ::= */ + 476, /* (571) group_by_clause_opt ::= GROUP BY group_by_list */ + 482, /* (572) group_by_list ::= expr_or_subquery */ + 482, /* (573) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ + 477, /* (574) having_clause_opt ::= */ + 477, /* (575) having_clause_opt ::= HAVING search_condition */ + 472, /* (576) range_opt ::= */ + 472, /* (577) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ + 472, /* (578) range_opt ::= RANGE NK_LP expr_or_subquery NK_RP */ + 473, /* (579) every_opt ::= */ + 473, /* (580) every_opt ::= EVERY NK_LP duration_literal NK_RP */ + 483, /* (581) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + 484, /* (582) query_simple ::= query_specification */ + 484, /* (583) query_simple ::= union_query_expression */ + 488, /* (584) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ + 488, /* (585) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ + 489, /* (586) query_simple_or_subquery ::= query_simple */ + 489, /* (587) query_simple_or_subquery ::= subquery */ + 416, /* (588) query_or_subquery ::= query_expression */ + 416, /* (589) query_or_subquery ::= subquery */ + 485, /* (590) order_by_clause_opt ::= */ + 485, /* (591) order_by_clause_opt ::= ORDER BY sort_specification_list */ + 486, /* (592) slimit_clause_opt ::= */ + 486, /* (593) slimit_clause_opt ::= SLIMIT NK_INTEGER */ + 486, /* (594) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + 486, /* (595) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + 487, /* (596) limit_clause_opt ::= */ + 487, /* (597) limit_clause_opt ::= LIMIT NK_INTEGER */ + 487, /* (598) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ + 487, /* (599) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + 463, /* (600) subquery ::= NK_LP query_expression NK_RP */ + 463, /* (601) subquery ::= NK_LP subquery NK_RP */ + 358, /* (602) search_condition ::= common_expression */ + 490, /* (603) sort_specification_list ::= sort_specification */ + 490, /* (604) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ + 491, /* (605) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ + 492, /* (606) ordering_specification_opt ::= */ + 492, /* (607) ordering_specification_opt ::= ASC */ + 492, /* (608) ordering_specification_opt ::= DESC */ + 493, /* (609) null_ordering_opt ::= */ + 493, /* (610) null_ordering_opt ::= NULLS FIRST */ + 493, /* (611) null_ordering_opt ::= NULLS LAST */ }; /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number @@ -3859,587 +4237,594 @@ static const signed char yyRuleInfoNRhs[] = { -2, /* (21) alter_account_option ::= USERS literal */ -2, /* (22) alter_account_option ::= CONNS literal */ -2, /* (23) alter_account_option ::= STATE literal */ - -6, /* (24) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ - -5, /* (25) cmd ::= ALTER USER user_name PASS NK_STRING */ - -5, /* (26) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ - -5, /* (27) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ - -3, /* (28) cmd ::= DROP USER user_name */ - 0, /* (29) sysinfo_opt ::= */ - -2, /* (30) sysinfo_opt ::= SYSINFO NK_INTEGER */ - -7, /* (31) cmd ::= GRANT privileges ON priv_level with_opt TO user_name */ - -7, /* (32) cmd ::= REVOKE privileges ON priv_level with_opt FROM user_name */ - -1, /* (33) privileges ::= ALL */ - -1, /* (34) privileges ::= priv_type_list */ - -1, /* (35) privileges ::= SUBSCRIBE */ - -1, /* (36) priv_type_list ::= priv_type */ - -3, /* (37) priv_type_list ::= priv_type_list NK_COMMA priv_type */ - -1, /* (38) priv_type ::= READ */ - -1, /* (39) priv_type ::= WRITE */ - -3, /* (40) priv_level ::= NK_STAR NK_DOT NK_STAR */ - -3, /* (41) priv_level ::= db_name NK_DOT NK_STAR */ - -3, /* (42) priv_level ::= db_name NK_DOT table_name */ - -1, /* (43) priv_level ::= topic_name */ - 0, /* (44) with_opt ::= */ - -2, /* (45) with_opt ::= WITH search_condition */ - -3, /* (46) cmd ::= CREATE DNODE dnode_endpoint */ - -5, /* (47) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ - -4, /* (48) cmd ::= DROP DNODE NK_INTEGER force_opt */ - -4, /* (49) cmd ::= DROP DNODE dnode_endpoint force_opt */ - -4, /* (50) cmd ::= DROP DNODE NK_INTEGER unsafe_opt */ - -4, /* (51) cmd ::= DROP DNODE dnode_endpoint unsafe_opt */ - -4, /* (52) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ - -5, /* (53) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ - -4, /* (54) cmd ::= ALTER ALL DNODES NK_STRING */ - -5, /* (55) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ - -3, /* (56) cmd ::= RESTORE DNODE NK_INTEGER */ - -1, /* (57) dnode_endpoint ::= NK_STRING */ - -1, /* (58) dnode_endpoint ::= NK_ID */ - -1, /* (59) dnode_endpoint ::= NK_IPTOKEN */ - 0, /* (60) force_opt ::= */ - -1, /* (61) force_opt ::= FORCE */ - -1, /* (62) unsafe_opt ::= UNSAFE */ - -3, /* (63) cmd ::= ALTER LOCAL NK_STRING */ - -4, /* (64) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ - -5, /* (65) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ - -5, /* (66) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ - -5, /* (67) cmd ::= RESTORE QNODE ON DNODE NK_INTEGER */ - -5, /* (68) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ - -5, /* (69) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ - -5, /* (70) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ - -5, /* (71) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ - -5, /* (72) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ - -5, /* (73) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ - -5, /* (74) cmd ::= RESTORE MNODE ON DNODE NK_INTEGER */ - -5, /* (75) cmd ::= RESTORE VNODE ON DNODE NK_INTEGER */ - -5, /* (76) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ - -4, /* (77) cmd ::= DROP DATABASE exists_opt db_name */ - -2, /* (78) cmd ::= USE db_name */ - -4, /* (79) cmd ::= ALTER DATABASE db_name alter_db_options */ - -3, /* (80) cmd ::= FLUSH DATABASE db_name */ - -4, /* (81) cmd ::= TRIM DATABASE db_name speed_opt */ - -5, /* (82) cmd ::= COMPACT DATABASE db_name start_opt end_opt */ - -3, /* (83) not_exists_opt ::= IF NOT EXISTS */ - 0, /* (84) not_exists_opt ::= */ - -2, /* (85) exists_opt ::= IF EXISTS */ - 0, /* (86) exists_opt ::= */ - 0, /* (87) db_options ::= */ - -3, /* (88) db_options ::= db_options BUFFER NK_INTEGER */ - -3, /* (89) db_options ::= db_options CACHEMODEL NK_STRING */ - -3, /* (90) db_options ::= db_options CACHESIZE NK_INTEGER */ - -3, /* (91) db_options ::= db_options COMP NK_INTEGER */ - -3, /* (92) db_options ::= db_options DURATION NK_INTEGER */ - -3, /* (93) db_options ::= db_options DURATION NK_VARIABLE */ - -3, /* (94) db_options ::= db_options MAXROWS NK_INTEGER */ - -3, /* (95) db_options ::= db_options MINROWS NK_INTEGER */ - -3, /* (96) db_options ::= db_options KEEP integer_list */ - -3, /* (97) db_options ::= db_options KEEP variable_list */ - -3, /* (98) db_options ::= db_options PAGES NK_INTEGER */ - -3, /* (99) db_options ::= db_options PAGESIZE NK_INTEGER */ - -3, /* (100) db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ - -3, /* (101) db_options ::= db_options PRECISION NK_STRING */ - -3, /* (102) db_options ::= db_options REPLICA NK_INTEGER */ - -3, /* (103) db_options ::= db_options VGROUPS NK_INTEGER */ - -3, /* (104) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ - -3, /* (105) db_options ::= db_options RETENTIONS retention_list */ - -3, /* (106) db_options ::= db_options SCHEMALESS NK_INTEGER */ - -3, /* (107) db_options ::= db_options WAL_LEVEL NK_INTEGER */ - -3, /* (108) db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ - -3, /* (109) db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ - -4, /* (110) db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ - -3, /* (111) db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ - -4, /* (112) db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ - -3, /* (113) db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ - -3, /* (114) db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ - -3, /* (115) db_options ::= db_options STT_TRIGGER NK_INTEGER */ - -3, /* (116) db_options ::= db_options TABLE_PREFIX signed */ - -3, /* (117) db_options ::= db_options TABLE_SUFFIX signed */ - -1, /* (118) alter_db_options ::= alter_db_option */ - -2, /* (119) alter_db_options ::= alter_db_options alter_db_option */ - -2, /* (120) alter_db_option ::= BUFFER NK_INTEGER */ - -2, /* (121) alter_db_option ::= CACHEMODEL NK_STRING */ - -2, /* (122) alter_db_option ::= CACHESIZE NK_INTEGER */ - -2, /* (123) alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ - -2, /* (124) alter_db_option ::= KEEP integer_list */ - -2, /* (125) alter_db_option ::= KEEP variable_list */ - -2, /* (126) alter_db_option ::= PAGES NK_INTEGER */ - -2, /* (127) alter_db_option ::= REPLICA NK_INTEGER */ - -2, /* (128) alter_db_option ::= WAL_LEVEL NK_INTEGER */ - -2, /* (129) alter_db_option ::= STT_TRIGGER NK_INTEGER */ - -2, /* (130) alter_db_option ::= MINROWS NK_INTEGER */ - -2, /* (131) alter_db_option ::= WAL_RETENTION_PERIOD NK_INTEGER */ - -3, /* (132) alter_db_option ::= WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ - -2, /* (133) alter_db_option ::= WAL_RETENTION_SIZE NK_INTEGER */ - -3, /* (134) alter_db_option ::= WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ - -1, /* (135) integer_list ::= NK_INTEGER */ - -3, /* (136) integer_list ::= integer_list NK_COMMA NK_INTEGER */ - -1, /* (137) variable_list ::= NK_VARIABLE */ - -3, /* (138) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ - -1, /* (139) retention_list ::= retention */ - -3, /* (140) retention_list ::= retention_list NK_COMMA retention */ - -3, /* (141) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ - 0, /* (142) speed_opt ::= */ - -2, /* (143) speed_opt ::= MAX_SPEED NK_INTEGER */ - 0, /* (144) start_opt ::= */ - -3, /* (145) start_opt ::= START WITH NK_INTEGER */ - -3, /* (146) start_opt ::= START WITH NK_STRING */ - -4, /* (147) start_opt ::= START WITH TIMESTAMP NK_STRING */ - 0, /* (148) end_opt ::= */ - -3, /* (149) end_opt ::= END WITH NK_INTEGER */ - -3, /* (150) end_opt ::= END WITH NK_STRING */ - -4, /* (151) end_opt ::= END WITH TIMESTAMP NK_STRING */ - -9, /* (152) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - -3, /* (153) cmd ::= CREATE TABLE multi_create_clause */ - -9, /* (154) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ - -3, /* (155) cmd ::= DROP TABLE multi_drop_clause */ - -4, /* (156) cmd ::= DROP STABLE exists_opt full_table_name */ - -3, /* (157) cmd ::= ALTER TABLE alter_table_clause */ - -3, /* (158) cmd ::= ALTER STABLE alter_table_clause */ - -2, /* (159) alter_table_clause ::= full_table_name alter_table_options */ - -4, /* (160) alter_table_clause ::= full_table_name ADD COLUMN column_def */ - -4, /* (161) alter_table_clause ::= full_table_name DROP COLUMN column_name */ - -4, /* (162) alter_table_clause ::= full_table_name MODIFY COLUMN column_def */ - -5, /* (163) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ - -4, /* (164) alter_table_clause ::= full_table_name ADD TAG column_def */ - -4, /* (165) alter_table_clause ::= full_table_name DROP TAG column_name */ - -4, /* (166) alter_table_clause ::= full_table_name MODIFY TAG column_def */ - -5, /* (167) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ - -6, /* (168) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ - -1, /* (169) multi_create_clause ::= create_subtable_clause */ - -2, /* (170) multi_create_clause ::= multi_create_clause create_subtable_clause */ - -10, /* (171) create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ - -1, /* (172) multi_drop_clause ::= drop_table_clause */ - -3, /* (173) multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause */ - -2, /* (174) drop_table_clause ::= exists_opt full_table_name */ - 0, /* (175) specific_cols_opt ::= */ - -3, /* (176) specific_cols_opt ::= NK_LP col_name_list NK_RP */ - -1, /* (177) full_table_name ::= table_name */ - -3, /* (178) full_table_name ::= db_name NK_DOT table_name */ - -1, /* (179) column_def_list ::= column_def */ - -3, /* (180) column_def_list ::= column_def_list NK_COMMA column_def */ - -2, /* (181) column_def ::= column_name type_name */ - -4, /* (182) column_def ::= column_name type_name COMMENT NK_STRING */ - -1, /* (183) type_name ::= BOOL */ - -1, /* (184) type_name ::= TINYINT */ - -1, /* (185) type_name ::= SMALLINT */ - -1, /* (186) type_name ::= INT */ - -1, /* (187) type_name ::= INTEGER */ - -1, /* (188) type_name ::= BIGINT */ - -1, /* (189) type_name ::= FLOAT */ - -1, /* (190) type_name ::= DOUBLE */ - -4, /* (191) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ - -1, /* (192) type_name ::= TIMESTAMP */ - -4, /* (193) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ - -2, /* (194) type_name ::= TINYINT UNSIGNED */ - -2, /* (195) type_name ::= SMALLINT UNSIGNED */ - -2, /* (196) type_name ::= INT UNSIGNED */ - -2, /* (197) type_name ::= BIGINT UNSIGNED */ - -1, /* (198) type_name ::= JSON */ - -4, /* (199) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ - -1, /* (200) type_name ::= MEDIUMBLOB */ - -1, /* (201) type_name ::= BLOB */ - -4, /* (202) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ - -4, /* (203) type_name ::= GEOMETRY NK_LP NK_INTEGER NK_RP */ - -1, /* (204) type_name ::= DECIMAL */ - -4, /* (205) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ - -6, /* (206) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ - 0, /* (207) tags_def_opt ::= */ - -1, /* (208) tags_def_opt ::= tags_def */ - -4, /* (209) tags_def ::= TAGS NK_LP column_def_list NK_RP */ - 0, /* (210) table_options ::= */ - -3, /* (211) table_options ::= table_options COMMENT NK_STRING */ - -3, /* (212) table_options ::= table_options MAX_DELAY duration_list */ - -3, /* (213) table_options ::= table_options WATERMARK duration_list */ - -5, /* (214) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ - -3, /* (215) table_options ::= table_options TTL NK_INTEGER */ - -5, /* (216) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ - -3, /* (217) table_options ::= table_options DELETE_MARK duration_list */ - -1, /* (218) alter_table_options ::= alter_table_option */ - -2, /* (219) alter_table_options ::= alter_table_options alter_table_option */ - -2, /* (220) alter_table_option ::= COMMENT NK_STRING */ - -2, /* (221) alter_table_option ::= TTL NK_INTEGER */ - -1, /* (222) duration_list ::= duration_literal */ - -3, /* (223) duration_list ::= duration_list NK_COMMA duration_literal */ - -1, /* (224) rollup_func_list ::= rollup_func_name */ - -3, /* (225) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ - -1, /* (226) rollup_func_name ::= function_name */ - -1, /* (227) rollup_func_name ::= FIRST */ - -1, /* (228) rollup_func_name ::= LAST */ - -1, /* (229) col_name_list ::= col_name */ - -3, /* (230) col_name_list ::= col_name_list NK_COMMA col_name */ - -1, /* (231) col_name ::= column_name */ - -2, /* (232) cmd ::= SHOW DNODES */ - -2, /* (233) cmd ::= SHOW USERS */ - -3, /* (234) cmd ::= SHOW USER PRIVILEGES */ - -2, /* (235) cmd ::= SHOW DATABASES */ - -4, /* (236) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ - -4, /* (237) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ - -3, /* (238) cmd ::= SHOW db_name_cond_opt VGROUPS */ - -2, /* (239) cmd ::= SHOW MNODES */ - -2, /* (240) cmd ::= SHOW QNODES */ - -2, /* (241) cmd ::= SHOW FUNCTIONS */ - -5, /* (242) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ - -6, /* (243) cmd ::= SHOW INDEXES FROM db_name NK_DOT table_name */ - -2, /* (244) cmd ::= SHOW STREAMS */ - -2, /* (245) cmd ::= SHOW ACCOUNTS */ - -2, /* (246) cmd ::= SHOW APPS */ - -2, /* (247) cmd ::= SHOW CONNECTIONS */ - -2, /* (248) cmd ::= SHOW LICENCES */ - -2, /* (249) cmd ::= SHOW GRANTS */ - -4, /* (250) cmd ::= SHOW CREATE DATABASE db_name */ - -4, /* (251) cmd ::= SHOW CREATE TABLE full_table_name */ - -4, /* (252) cmd ::= SHOW CREATE STABLE full_table_name */ - -2, /* (253) cmd ::= SHOW QUERIES */ - -2, /* (254) cmd ::= SHOW SCORES */ - -2, /* (255) cmd ::= SHOW TOPICS */ - -2, /* (256) cmd ::= SHOW VARIABLES */ - -3, /* (257) cmd ::= SHOW CLUSTER VARIABLES */ - -3, /* (258) cmd ::= SHOW LOCAL VARIABLES */ - -5, /* (259) cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ - -2, /* (260) cmd ::= SHOW BNODES */ - -2, /* (261) cmd ::= SHOW SNODES */ - -2, /* (262) cmd ::= SHOW CLUSTER */ - -2, /* (263) cmd ::= SHOW TRANSACTIONS */ - -4, /* (264) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ - -2, /* (265) cmd ::= SHOW CONSUMERS */ - -2, /* (266) cmd ::= SHOW SUBSCRIPTIONS */ - -5, /* (267) cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ - -6, /* (268) cmd ::= SHOW TAGS FROM db_name NK_DOT table_name */ - -7, /* (269) cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt */ - -8, /* (270) cmd ::= SHOW TABLE TAGS tag_list_opt FROM db_name NK_DOT table_name */ - -5, /* (271) cmd ::= SHOW VNODES ON DNODE NK_INTEGER */ - -2, /* (272) cmd ::= SHOW VNODES */ - -3, /* (273) cmd ::= SHOW db_name_cond_opt ALIVE */ - -3, /* (274) cmd ::= SHOW CLUSTER ALIVE */ - 0, /* (275) db_name_cond_opt ::= */ - -2, /* (276) db_name_cond_opt ::= db_name NK_DOT */ - 0, /* (277) like_pattern_opt ::= */ - -2, /* (278) like_pattern_opt ::= LIKE NK_STRING */ - -1, /* (279) table_name_cond ::= table_name */ - 0, /* (280) from_db_opt ::= */ - -2, /* (281) from_db_opt ::= FROM db_name */ - 0, /* (282) tag_list_opt ::= */ - -1, /* (283) tag_list_opt ::= tag_item */ - -3, /* (284) tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ - -1, /* (285) tag_item ::= TBNAME */ - -1, /* (286) tag_item ::= QTAGS */ - -1, /* (287) tag_item ::= column_name */ - -2, /* (288) tag_item ::= column_name column_alias */ - -3, /* (289) tag_item ::= column_name AS column_alias */ - -8, /* (290) cmd ::= CREATE SMA INDEX not_exists_opt full_index_name ON full_table_name index_options */ - -9, /* (291) cmd ::= CREATE INDEX not_exists_opt full_index_name ON full_table_name NK_LP col_name_list NK_RP */ - -4, /* (292) cmd ::= DROP INDEX exists_opt full_index_name */ - -1, /* (293) full_index_name ::= index_name */ - -3, /* (294) full_index_name ::= db_name NK_DOT index_name */ - -10, /* (295) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ - -12, /* (296) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ - -1, /* (297) func_list ::= func */ - -3, /* (298) func_list ::= func_list NK_COMMA func */ - -4, /* (299) func ::= sma_func_name NK_LP expression_list NK_RP */ - -1, /* (300) sma_func_name ::= function_name */ - -1, /* (301) sma_func_name ::= COUNT */ - -1, /* (302) sma_func_name ::= FIRST */ - -1, /* (303) sma_func_name ::= LAST */ - -1, /* (304) sma_func_name ::= LAST_ROW */ - 0, /* (305) sma_stream_opt ::= */ - -3, /* (306) sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal */ - -3, /* (307) sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal */ - -3, /* (308) sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal */ - -1, /* (309) with_meta ::= AS */ - -3, /* (310) with_meta ::= WITH META AS */ - -3, /* (311) with_meta ::= ONLY META AS */ - -6, /* (312) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ - -7, /* (313) cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta DATABASE db_name */ - -8, /* (314) cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta STABLE full_table_name where_clause_opt */ - -4, /* (315) cmd ::= DROP TOPIC exists_opt topic_name */ - -7, /* (316) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ - -2, /* (317) cmd ::= DESC full_table_name */ - -2, /* (318) cmd ::= DESCRIBE full_table_name */ - -3, /* (319) cmd ::= RESET QUERY CACHE */ - -4, /* (320) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ - -4, /* (321) cmd ::= EXPLAIN analyze_opt explain_options insert_query */ - 0, /* (322) analyze_opt ::= */ - -1, /* (323) analyze_opt ::= ANALYZE */ - 0, /* (324) explain_options ::= */ - -3, /* (325) explain_options ::= explain_options VERBOSE NK_BOOL */ - -3, /* (326) explain_options ::= explain_options RATIO NK_FLOAT */ - -12, /* (327) cmd ::= CREATE or_replace_opt agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt language_opt */ - -4, /* (328) cmd ::= DROP FUNCTION exists_opt function_name */ - 0, /* (329) agg_func_opt ::= */ - -1, /* (330) agg_func_opt ::= AGGREGATE */ - 0, /* (331) bufsize_opt ::= */ - -2, /* (332) bufsize_opt ::= BUFSIZE NK_INTEGER */ - 0, /* (333) language_opt ::= */ - -2, /* (334) language_opt ::= LANGUAGE NK_STRING */ - 0, /* (335) or_replace_opt ::= */ - -2, /* (336) or_replace_opt ::= OR REPLACE */ - -12, /* (337) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name col_list_opt tag_def_or_ref_opt subtable_opt AS query_or_subquery */ - -4, /* (338) cmd ::= DROP STREAM exists_opt stream_name */ - -4, /* (339) cmd ::= PAUSE STREAM exists_opt stream_name */ - -5, /* (340) cmd ::= RESUME STREAM exists_opt ignore_opt stream_name */ - 0, /* (341) col_list_opt ::= */ - -3, /* (342) col_list_opt ::= NK_LP col_name_list NK_RP */ - 0, /* (343) tag_def_or_ref_opt ::= */ - -1, /* (344) tag_def_or_ref_opt ::= tags_def */ - -4, /* (345) tag_def_or_ref_opt ::= TAGS NK_LP col_name_list NK_RP */ - 0, /* (346) stream_options ::= */ - -3, /* (347) stream_options ::= stream_options TRIGGER AT_ONCE */ - -3, /* (348) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ - -4, /* (349) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ - -3, /* (350) stream_options ::= stream_options WATERMARK duration_literal */ - -4, /* (351) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ - -3, /* (352) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ - -3, /* (353) stream_options ::= stream_options DELETE_MARK duration_literal */ - -4, /* (354) stream_options ::= stream_options IGNORE UPDATE NK_INTEGER */ - 0, /* (355) subtable_opt ::= */ - -4, /* (356) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - 0, /* (357) ignore_opt ::= */ - -2, /* (358) ignore_opt ::= IGNORE UNTREATED */ - -3, /* (359) cmd ::= KILL CONNECTION NK_INTEGER */ - -3, /* (360) cmd ::= KILL QUERY NK_STRING */ - -3, /* (361) cmd ::= KILL TRANSACTION NK_INTEGER */ - -2, /* (362) cmd ::= BALANCE VGROUP */ - -3, /* (363) cmd ::= BALANCE VGROUP LEADER */ - -4, /* (364) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ - -4, /* (365) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ - -3, /* (366) cmd ::= SPLIT VGROUP NK_INTEGER */ - -2, /* (367) dnode_list ::= DNODE NK_INTEGER */ - -3, /* (368) dnode_list ::= dnode_list DNODE NK_INTEGER */ - -4, /* (369) cmd ::= DELETE FROM full_table_name where_clause_opt */ - -1, /* (370) cmd ::= query_or_subquery */ - -1, /* (371) cmd ::= insert_query */ - -7, /* (372) insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ - -4, /* (373) insert_query ::= INSERT INTO full_table_name query_or_subquery */ - -1, /* (374) literal ::= NK_INTEGER */ - -1, /* (375) literal ::= NK_FLOAT */ - -1, /* (376) literal ::= NK_STRING */ - -1, /* (377) literal ::= NK_BOOL */ - -2, /* (378) literal ::= TIMESTAMP NK_STRING */ - -1, /* (379) literal ::= duration_literal */ - -1, /* (380) literal ::= NULL */ - -1, /* (381) literal ::= NK_QUESTION */ - -1, /* (382) duration_literal ::= NK_VARIABLE */ - -1, /* (383) signed ::= NK_INTEGER */ - -2, /* (384) signed ::= NK_PLUS NK_INTEGER */ - -2, /* (385) signed ::= NK_MINUS NK_INTEGER */ - -1, /* (386) signed ::= NK_FLOAT */ - -2, /* (387) signed ::= NK_PLUS NK_FLOAT */ - -2, /* (388) signed ::= NK_MINUS NK_FLOAT */ - -1, /* (389) signed_literal ::= signed */ - -1, /* (390) signed_literal ::= NK_STRING */ - -1, /* (391) signed_literal ::= NK_BOOL */ - -2, /* (392) signed_literal ::= TIMESTAMP NK_STRING */ - -1, /* (393) signed_literal ::= duration_literal */ - -1, /* (394) signed_literal ::= NULL */ - -1, /* (395) signed_literal ::= literal_func */ - -1, /* (396) signed_literal ::= NK_QUESTION */ - -1, /* (397) literal_list ::= signed_literal */ - -3, /* (398) literal_list ::= literal_list NK_COMMA signed_literal */ - -1, /* (399) db_name ::= NK_ID */ - -1, /* (400) table_name ::= NK_ID */ - -1, /* (401) column_name ::= NK_ID */ - -1, /* (402) function_name ::= NK_ID */ - -1, /* (403) table_alias ::= NK_ID */ - -1, /* (404) column_alias ::= NK_ID */ - -1, /* (405) user_name ::= NK_ID */ - -1, /* (406) topic_name ::= NK_ID */ - -1, /* (407) stream_name ::= NK_ID */ - -1, /* (408) cgroup_name ::= NK_ID */ - -1, /* (409) index_name ::= NK_ID */ - -1, /* (410) expr_or_subquery ::= expression */ - -1, /* (411) expression ::= literal */ - -1, /* (412) expression ::= pseudo_column */ - -1, /* (413) expression ::= column_reference */ - -1, /* (414) expression ::= function_expression */ - -1, /* (415) expression ::= case_when_expression */ - -3, /* (416) expression ::= NK_LP expression NK_RP */ - -2, /* (417) expression ::= NK_PLUS expr_or_subquery */ - -2, /* (418) expression ::= NK_MINUS expr_or_subquery */ - -3, /* (419) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ - -3, /* (420) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ - -3, /* (421) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ - -3, /* (422) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ - -3, /* (423) expression ::= expr_or_subquery NK_REM expr_or_subquery */ - -3, /* (424) expression ::= column_reference NK_ARROW NK_STRING */ - -3, /* (425) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ - -3, /* (426) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ - -1, /* (427) expression_list ::= expr_or_subquery */ - -3, /* (428) expression_list ::= expression_list NK_COMMA expr_or_subquery */ - -1, /* (429) column_reference ::= column_name */ - -3, /* (430) column_reference ::= table_name NK_DOT column_name */ - -1, /* (431) pseudo_column ::= ROWTS */ - -1, /* (432) pseudo_column ::= TBNAME */ - -3, /* (433) pseudo_column ::= table_name NK_DOT TBNAME */ - -1, /* (434) pseudo_column ::= QSTART */ - -1, /* (435) pseudo_column ::= QEND */ - -1, /* (436) pseudo_column ::= QDURATION */ - -1, /* (437) pseudo_column ::= WSTART */ - -1, /* (438) pseudo_column ::= WEND */ - -1, /* (439) pseudo_column ::= WDURATION */ - -1, /* (440) pseudo_column ::= IROWTS */ - -1, /* (441) pseudo_column ::= ISFILLED */ - -1, /* (442) pseudo_column ::= QTAGS */ - -4, /* (443) function_expression ::= function_name NK_LP expression_list NK_RP */ - -4, /* (444) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ - -6, /* (445) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ - -1, /* (446) function_expression ::= literal_func */ - -3, /* (447) literal_func ::= noarg_func NK_LP NK_RP */ - -1, /* (448) literal_func ::= NOW */ - -1, /* (449) noarg_func ::= NOW */ - -1, /* (450) noarg_func ::= TODAY */ - -1, /* (451) noarg_func ::= TIMEZONE */ - -1, /* (452) noarg_func ::= DATABASE */ - -1, /* (453) noarg_func ::= CLIENT_VERSION */ - -1, /* (454) noarg_func ::= SERVER_VERSION */ - -1, /* (455) noarg_func ::= SERVER_STATUS */ - -1, /* (456) noarg_func ::= CURRENT_USER */ - -1, /* (457) noarg_func ::= USER */ - -1, /* (458) star_func ::= COUNT */ - -1, /* (459) star_func ::= FIRST */ - -1, /* (460) star_func ::= LAST */ - -1, /* (461) star_func ::= LAST_ROW */ - -1, /* (462) star_func_para_list ::= NK_STAR */ - -1, /* (463) star_func_para_list ::= other_para_list */ - -1, /* (464) other_para_list ::= star_func_para */ - -3, /* (465) other_para_list ::= other_para_list NK_COMMA star_func_para */ - -1, /* (466) star_func_para ::= expr_or_subquery */ - -3, /* (467) star_func_para ::= table_name NK_DOT NK_STAR */ - -4, /* (468) case_when_expression ::= CASE when_then_list case_when_else_opt END */ - -5, /* (469) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ - -1, /* (470) when_then_list ::= when_then_expr */ - -2, /* (471) when_then_list ::= when_then_list when_then_expr */ - -4, /* (472) when_then_expr ::= WHEN common_expression THEN common_expression */ - 0, /* (473) case_when_else_opt ::= */ - -2, /* (474) case_when_else_opt ::= ELSE common_expression */ - -3, /* (475) predicate ::= expr_or_subquery compare_op expr_or_subquery */ - -5, /* (476) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ - -6, /* (477) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ - -3, /* (478) predicate ::= expr_or_subquery IS NULL */ - -4, /* (479) predicate ::= expr_or_subquery IS NOT NULL */ - -3, /* (480) predicate ::= expr_or_subquery in_op in_predicate_value */ - -1, /* (481) compare_op ::= NK_LT */ - -1, /* (482) compare_op ::= NK_GT */ - -1, /* (483) compare_op ::= NK_LE */ - -1, /* (484) compare_op ::= NK_GE */ - -1, /* (485) compare_op ::= NK_NE */ - -1, /* (486) compare_op ::= NK_EQ */ - -1, /* (487) compare_op ::= LIKE */ - -2, /* (488) compare_op ::= NOT LIKE */ - -1, /* (489) compare_op ::= MATCH */ - -1, /* (490) compare_op ::= NMATCH */ - -1, /* (491) compare_op ::= CONTAINS */ - -1, /* (492) in_op ::= IN */ - -2, /* (493) in_op ::= NOT IN */ - -3, /* (494) in_predicate_value ::= NK_LP literal_list NK_RP */ - -1, /* (495) boolean_value_expression ::= boolean_primary */ - -2, /* (496) boolean_value_expression ::= NOT boolean_primary */ - -3, /* (497) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ - -3, /* (498) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ - -1, /* (499) boolean_primary ::= predicate */ - -3, /* (500) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ - -1, /* (501) common_expression ::= expr_or_subquery */ - -1, /* (502) common_expression ::= boolean_value_expression */ - 0, /* (503) from_clause_opt ::= */ - -2, /* (504) from_clause_opt ::= FROM table_reference_list */ - -1, /* (505) table_reference_list ::= table_reference */ - -3, /* (506) table_reference_list ::= table_reference_list NK_COMMA table_reference */ - -1, /* (507) table_reference ::= table_primary */ - -1, /* (508) table_reference ::= joined_table */ - -2, /* (509) table_primary ::= table_name alias_opt */ - -4, /* (510) table_primary ::= db_name NK_DOT table_name alias_opt */ - -2, /* (511) table_primary ::= subquery alias_opt */ - -1, /* (512) table_primary ::= parenthesized_joined_table */ - 0, /* (513) alias_opt ::= */ - -1, /* (514) alias_opt ::= table_alias */ - -2, /* (515) alias_opt ::= AS table_alias */ - -3, /* (516) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - -3, /* (517) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ - -6, /* (518) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ - 0, /* (519) join_type ::= */ - -1, /* (520) join_type ::= INNER */ - -14, /* (521) query_specification ::= SELECT hint_list tag_mode_opt set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */ - 0, /* (522) hint_list ::= */ - -1, /* (523) hint_list ::= NK_HINT */ - 0, /* (524) tag_mode_opt ::= */ - -1, /* (525) tag_mode_opt ::= TAGS */ - 0, /* (526) set_quantifier_opt ::= */ - -1, /* (527) set_quantifier_opt ::= DISTINCT */ - -1, /* (528) set_quantifier_opt ::= ALL */ - -1, /* (529) select_list ::= select_item */ - -3, /* (530) select_list ::= select_list NK_COMMA select_item */ - -1, /* (531) select_item ::= NK_STAR */ - -1, /* (532) select_item ::= common_expression */ - -2, /* (533) select_item ::= common_expression column_alias */ - -3, /* (534) select_item ::= common_expression AS column_alias */ - -3, /* (535) select_item ::= table_name NK_DOT NK_STAR */ - 0, /* (536) where_clause_opt ::= */ - -2, /* (537) where_clause_opt ::= WHERE search_condition */ - 0, /* (538) partition_by_clause_opt ::= */ - -3, /* (539) partition_by_clause_opt ::= PARTITION BY partition_list */ - -1, /* (540) partition_list ::= partition_item */ - -3, /* (541) partition_list ::= partition_list NK_COMMA partition_item */ - -1, /* (542) partition_item ::= expr_or_subquery */ - -2, /* (543) partition_item ::= expr_or_subquery column_alias */ - -3, /* (544) partition_item ::= expr_or_subquery AS column_alias */ - 0, /* (545) twindow_clause_opt ::= */ - -6, /* (546) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ - -4, /* (547) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ - -6, /* (548) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ - -8, /* (549) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ - -7, /* (550) twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ - 0, /* (551) sliding_opt ::= */ - -4, /* (552) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ - 0, /* (553) fill_opt ::= */ - -4, /* (554) fill_opt ::= FILL NK_LP fill_mode NK_RP */ - -6, /* (555) fill_opt ::= FILL NK_LP VALUE NK_COMMA expression_list NK_RP */ - -6, /* (556) fill_opt ::= FILL NK_LP VALUE_F NK_COMMA expression_list NK_RP */ - -1, /* (557) fill_mode ::= NONE */ - -1, /* (558) fill_mode ::= PREV */ - -1, /* (559) fill_mode ::= NULL */ - -1, /* (560) fill_mode ::= NULL_F */ - -1, /* (561) fill_mode ::= LINEAR */ - -1, /* (562) fill_mode ::= NEXT */ - 0, /* (563) group_by_clause_opt ::= */ - -3, /* (564) group_by_clause_opt ::= GROUP BY group_by_list */ - -1, /* (565) group_by_list ::= expr_or_subquery */ - -3, /* (566) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ - 0, /* (567) having_clause_opt ::= */ - -2, /* (568) having_clause_opt ::= HAVING search_condition */ - 0, /* (569) range_opt ::= */ - -6, /* (570) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ - -4, /* (571) range_opt ::= RANGE NK_LP expr_or_subquery NK_RP */ - 0, /* (572) every_opt ::= */ - -4, /* (573) every_opt ::= EVERY NK_LP duration_literal NK_RP */ - -4, /* (574) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ - -1, /* (575) query_simple ::= query_specification */ - -1, /* (576) query_simple ::= union_query_expression */ - -4, /* (577) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ - -3, /* (578) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ - -1, /* (579) query_simple_or_subquery ::= query_simple */ - -1, /* (580) query_simple_or_subquery ::= subquery */ - -1, /* (581) query_or_subquery ::= query_expression */ - -1, /* (582) query_or_subquery ::= subquery */ - 0, /* (583) order_by_clause_opt ::= */ - -3, /* (584) order_by_clause_opt ::= ORDER BY sort_specification_list */ - 0, /* (585) slimit_clause_opt ::= */ - -2, /* (586) slimit_clause_opt ::= SLIMIT NK_INTEGER */ - -4, /* (587) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - -4, /* (588) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - 0, /* (589) limit_clause_opt ::= */ - -2, /* (590) limit_clause_opt ::= LIMIT NK_INTEGER */ - -4, /* (591) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ - -4, /* (592) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - -3, /* (593) subquery ::= NK_LP query_expression NK_RP */ - -3, /* (594) subquery ::= NK_LP subquery NK_RP */ - -1, /* (595) search_condition ::= common_expression */ - -1, /* (596) sort_specification_list ::= sort_specification */ - -3, /* (597) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ - -3, /* (598) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ - 0, /* (599) ordering_specification_opt ::= */ - -1, /* (600) ordering_specification_opt ::= ASC */ - -1, /* (601) ordering_specification_opt ::= DESC */ - 0, /* (602) null_ordering_opt ::= */ - -2, /* (603) null_ordering_opt ::= NULLS FIRST */ - -2, /* (604) null_ordering_opt ::= NULLS LAST */ + -1, /* (24) ip_range_list ::= NK_STRING */ + -3, /* (25) ip_range_list ::= ip_range_list NK_COMMA NK_STRING */ + -2, /* (26) white_list ::= HOST ip_range_list */ + 0, /* (27) white_list_opt ::= */ + -1, /* (28) white_list_opt ::= white_list */ + -7, /* (29) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt white_list_opt */ + -5, /* (30) cmd ::= ALTER USER user_name PASS NK_STRING */ + -5, /* (31) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ + -5, /* (32) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ + -5, /* (33) cmd ::= ALTER USER user_name ADD white_list */ + -5, /* (34) cmd ::= ALTER USER user_name DROP white_list */ + -3, /* (35) cmd ::= DROP USER user_name */ + 0, /* (36) sysinfo_opt ::= */ + -2, /* (37) sysinfo_opt ::= SYSINFO NK_INTEGER */ + -7, /* (38) cmd ::= GRANT privileges ON priv_level with_opt TO user_name */ + -7, /* (39) cmd ::= REVOKE privileges ON priv_level with_opt FROM user_name */ + -1, /* (40) privileges ::= ALL */ + -1, /* (41) privileges ::= priv_type_list */ + -1, /* (42) privileges ::= SUBSCRIBE */ + -1, /* (43) priv_type_list ::= priv_type */ + -3, /* (44) priv_type_list ::= priv_type_list NK_COMMA priv_type */ + -1, /* (45) priv_type ::= READ */ + -1, /* (46) priv_type ::= WRITE */ + -3, /* (47) priv_level ::= NK_STAR NK_DOT NK_STAR */ + -3, /* (48) priv_level ::= db_name NK_DOT NK_STAR */ + -3, /* (49) priv_level ::= db_name NK_DOT table_name */ + -1, /* (50) priv_level ::= topic_name */ + 0, /* (51) with_opt ::= */ + -2, /* (52) with_opt ::= WITH search_condition */ + -3, /* (53) cmd ::= CREATE DNODE dnode_endpoint */ + -5, /* (54) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ + -4, /* (55) cmd ::= DROP DNODE NK_INTEGER force_opt */ + -4, /* (56) cmd ::= DROP DNODE dnode_endpoint force_opt */ + -4, /* (57) cmd ::= DROP DNODE NK_INTEGER unsafe_opt */ + -4, /* (58) cmd ::= DROP DNODE dnode_endpoint unsafe_opt */ + -4, /* (59) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ + -5, /* (60) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ + -4, /* (61) cmd ::= ALTER ALL DNODES NK_STRING */ + -5, /* (62) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ + -3, /* (63) cmd ::= RESTORE DNODE NK_INTEGER */ + -1, /* (64) dnode_endpoint ::= NK_STRING */ + -1, /* (65) dnode_endpoint ::= NK_ID */ + -1, /* (66) dnode_endpoint ::= NK_IPTOKEN */ + 0, /* (67) force_opt ::= */ + -1, /* (68) force_opt ::= FORCE */ + -1, /* (69) unsafe_opt ::= UNSAFE */ + -3, /* (70) cmd ::= ALTER LOCAL NK_STRING */ + -4, /* (71) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ + -5, /* (72) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ + -5, /* (73) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ + -5, /* (74) cmd ::= RESTORE QNODE ON DNODE NK_INTEGER */ + -5, /* (75) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ + -5, /* (76) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ + -5, /* (77) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ + -5, /* (78) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ + -5, /* (79) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ + -5, /* (80) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ + -5, /* (81) cmd ::= RESTORE MNODE ON DNODE NK_INTEGER */ + -5, /* (82) cmd ::= RESTORE VNODE ON DNODE NK_INTEGER */ + -5, /* (83) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ + -4, /* (84) cmd ::= DROP DATABASE exists_opt db_name */ + -2, /* (85) cmd ::= USE db_name */ + -4, /* (86) cmd ::= ALTER DATABASE db_name alter_db_options */ + -3, /* (87) cmd ::= FLUSH DATABASE db_name */ + -4, /* (88) cmd ::= TRIM DATABASE db_name speed_opt */ + -5, /* (89) cmd ::= COMPACT DATABASE db_name start_opt end_opt */ + -3, /* (90) not_exists_opt ::= IF NOT EXISTS */ + 0, /* (91) not_exists_opt ::= */ + -2, /* (92) exists_opt ::= IF EXISTS */ + 0, /* (93) exists_opt ::= */ + 0, /* (94) db_options ::= */ + -3, /* (95) db_options ::= db_options BUFFER NK_INTEGER */ + -3, /* (96) db_options ::= db_options CACHEMODEL NK_STRING */ + -3, /* (97) db_options ::= db_options CACHESIZE NK_INTEGER */ + -3, /* (98) db_options ::= db_options COMP NK_INTEGER */ + -3, /* (99) db_options ::= db_options DURATION NK_INTEGER */ + -3, /* (100) db_options ::= db_options DURATION NK_VARIABLE */ + -3, /* (101) db_options ::= db_options MAXROWS NK_INTEGER */ + -3, /* (102) db_options ::= db_options MINROWS NK_INTEGER */ + -3, /* (103) db_options ::= db_options KEEP integer_list */ + -3, /* (104) db_options ::= db_options KEEP variable_list */ + -3, /* (105) db_options ::= db_options PAGES NK_INTEGER */ + -3, /* (106) db_options ::= db_options PAGESIZE NK_INTEGER */ + -3, /* (107) db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ + -3, /* (108) db_options ::= db_options PRECISION NK_STRING */ + -3, /* (109) db_options ::= db_options REPLICA NK_INTEGER */ + -3, /* (110) db_options ::= db_options VGROUPS NK_INTEGER */ + -3, /* (111) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ + -3, /* (112) db_options ::= db_options RETENTIONS retention_list */ + -3, /* (113) db_options ::= db_options SCHEMALESS NK_INTEGER */ + -3, /* (114) db_options ::= db_options WAL_LEVEL NK_INTEGER */ + -3, /* (115) db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ + -3, /* (116) db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ + -4, /* (117) db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + -3, /* (118) db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ + -4, /* (119) db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + -3, /* (120) db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ + -3, /* (121) db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ + -3, /* (122) db_options ::= db_options STT_TRIGGER NK_INTEGER */ + -3, /* (123) db_options ::= db_options TABLE_PREFIX signed */ + -3, /* (124) db_options ::= db_options TABLE_SUFFIX signed */ + -1, /* (125) alter_db_options ::= alter_db_option */ + -2, /* (126) alter_db_options ::= alter_db_options alter_db_option */ + -2, /* (127) alter_db_option ::= BUFFER NK_INTEGER */ + -2, /* (128) alter_db_option ::= CACHEMODEL NK_STRING */ + -2, /* (129) alter_db_option ::= CACHESIZE NK_INTEGER */ + -2, /* (130) alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ + -2, /* (131) alter_db_option ::= KEEP integer_list */ + -2, /* (132) alter_db_option ::= KEEP variable_list */ + -2, /* (133) alter_db_option ::= PAGES NK_INTEGER */ + -2, /* (134) alter_db_option ::= REPLICA NK_INTEGER */ + -2, /* (135) alter_db_option ::= WAL_LEVEL NK_INTEGER */ + -2, /* (136) alter_db_option ::= STT_TRIGGER NK_INTEGER */ + -2, /* (137) alter_db_option ::= MINROWS NK_INTEGER */ + -2, /* (138) alter_db_option ::= WAL_RETENTION_PERIOD NK_INTEGER */ + -3, /* (139) alter_db_option ::= WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + -2, /* (140) alter_db_option ::= WAL_RETENTION_SIZE NK_INTEGER */ + -3, /* (141) alter_db_option ::= WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + -1, /* (142) integer_list ::= NK_INTEGER */ + -3, /* (143) integer_list ::= integer_list NK_COMMA NK_INTEGER */ + -1, /* (144) variable_list ::= NK_VARIABLE */ + -3, /* (145) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ + -1, /* (146) retention_list ::= retention */ + -3, /* (147) retention_list ::= retention_list NK_COMMA retention */ + -3, /* (148) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ + 0, /* (149) speed_opt ::= */ + -2, /* (150) speed_opt ::= MAX_SPEED NK_INTEGER */ + 0, /* (151) start_opt ::= */ + -3, /* (152) start_opt ::= START WITH NK_INTEGER */ + -3, /* (153) start_opt ::= START WITH NK_STRING */ + -4, /* (154) start_opt ::= START WITH TIMESTAMP NK_STRING */ + 0, /* (155) end_opt ::= */ + -3, /* (156) end_opt ::= END WITH NK_INTEGER */ + -3, /* (157) end_opt ::= END WITH NK_STRING */ + -4, /* (158) end_opt ::= END WITH TIMESTAMP NK_STRING */ + -9, /* (159) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ + -3, /* (160) cmd ::= CREATE TABLE multi_create_clause */ + -9, /* (161) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ + -3, /* (162) cmd ::= DROP TABLE multi_drop_clause */ + -4, /* (163) cmd ::= DROP STABLE exists_opt full_table_name */ + -3, /* (164) cmd ::= ALTER TABLE alter_table_clause */ + -3, /* (165) cmd ::= ALTER STABLE alter_table_clause */ + -2, /* (166) alter_table_clause ::= full_table_name alter_table_options */ + -4, /* (167) alter_table_clause ::= full_table_name ADD COLUMN column_def */ + -4, /* (168) alter_table_clause ::= full_table_name DROP COLUMN column_name */ + -4, /* (169) alter_table_clause ::= full_table_name MODIFY COLUMN column_def */ + -5, /* (170) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ + -4, /* (171) alter_table_clause ::= full_table_name ADD TAG column_def */ + -4, /* (172) alter_table_clause ::= full_table_name DROP TAG column_name */ + -4, /* (173) alter_table_clause ::= full_table_name MODIFY TAG column_def */ + -5, /* (174) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ + -6, /* (175) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ + -1, /* (176) multi_create_clause ::= create_subtable_clause */ + -2, /* (177) multi_create_clause ::= multi_create_clause create_subtable_clause */ + -10, /* (178) create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ + -1, /* (179) multi_drop_clause ::= drop_table_clause */ + -3, /* (180) multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause */ + -2, /* (181) drop_table_clause ::= exists_opt full_table_name */ + 0, /* (182) specific_cols_opt ::= */ + -3, /* (183) specific_cols_opt ::= NK_LP col_name_list NK_RP */ + -1, /* (184) full_table_name ::= table_name */ + -3, /* (185) full_table_name ::= db_name NK_DOT table_name */ + -1, /* (186) column_def_list ::= column_def */ + -3, /* (187) column_def_list ::= column_def_list NK_COMMA column_def */ + -2, /* (188) column_def ::= column_name type_name */ + -4, /* (189) column_def ::= column_name type_name COMMENT NK_STRING */ + -1, /* (190) type_name ::= BOOL */ + -1, /* (191) type_name ::= TINYINT */ + -1, /* (192) type_name ::= SMALLINT */ + -1, /* (193) type_name ::= INT */ + -1, /* (194) type_name ::= INTEGER */ + -1, /* (195) type_name ::= BIGINT */ + -1, /* (196) type_name ::= FLOAT */ + -1, /* (197) type_name ::= DOUBLE */ + -4, /* (198) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ + -1, /* (199) type_name ::= TIMESTAMP */ + -4, /* (200) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ + -2, /* (201) type_name ::= TINYINT UNSIGNED */ + -2, /* (202) type_name ::= SMALLINT UNSIGNED */ + -2, /* (203) type_name ::= INT UNSIGNED */ + -2, /* (204) type_name ::= BIGINT UNSIGNED */ + -1, /* (205) type_name ::= JSON */ + -4, /* (206) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ + -1, /* (207) type_name ::= MEDIUMBLOB */ + -1, /* (208) type_name ::= BLOB */ + -4, /* (209) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ + -4, /* (210) type_name ::= GEOMETRY NK_LP NK_INTEGER NK_RP */ + -1, /* (211) type_name ::= DECIMAL */ + -4, /* (212) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ + -6, /* (213) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ + 0, /* (214) tags_def_opt ::= */ + -1, /* (215) tags_def_opt ::= tags_def */ + -4, /* (216) tags_def ::= TAGS NK_LP column_def_list NK_RP */ + 0, /* (217) table_options ::= */ + -3, /* (218) table_options ::= table_options COMMENT NK_STRING */ + -3, /* (219) table_options ::= table_options MAX_DELAY duration_list */ + -3, /* (220) table_options ::= table_options WATERMARK duration_list */ + -5, /* (221) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ + -3, /* (222) table_options ::= table_options TTL NK_INTEGER */ + -5, /* (223) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ + -3, /* (224) table_options ::= table_options DELETE_MARK duration_list */ + -1, /* (225) alter_table_options ::= alter_table_option */ + -2, /* (226) alter_table_options ::= alter_table_options alter_table_option */ + -2, /* (227) alter_table_option ::= COMMENT NK_STRING */ + -2, /* (228) alter_table_option ::= TTL NK_INTEGER */ + -1, /* (229) duration_list ::= duration_literal */ + -3, /* (230) duration_list ::= duration_list NK_COMMA duration_literal */ + -1, /* (231) rollup_func_list ::= rollup_func_name */ + -3, /* (232) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ + -1, /* (233) rollup_func_name ::= function_name */ + -1, /* (234) rollup_func_name ::= FIRST */ + -1, /* (235) rollup_func_name ::= LAST */ + -1, /* (236) col_name_list ::= col_name */ + -3, /* (237) col_name_list ::= col_name_list NK_COMMA col_name */ + -1, /* (238) col_name ::= column_name */ + -2, /* (239) cmd ::= SHOW DNODES */ + -2, /* (240) cmd ::= SHOW USERS */ + -3, /* (241) cmd ::= SHOW USER PRIVILEGES */ + -2, /* (242) cmd ::= SHOW DATABASES */ + -4, /* (243) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ + -4, /* (244) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ + -3, /* (245) cmd ::= SHOW db_name_cond_opt VGROUPS */ + -2, /* (246) cmd ::= SHOW MNODES */ + -2, /* (247) cmd ::= SHOW QNODES */ + -2, /* (248) cmd ::= SHOW FUNCTIONS */ + -5, /* (249) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ + -6, /* (250) cmd ::= SHOW INDEXES FROM db_name NK_DOT table_name */ + -2, /* (251) cmd ::= SHOW STREAMS */ + -2, /* (252) cmd ::= SHOW ACCOUNTS */ + -2, /* (253) cmd ::= SHOW APPS */ + -2, /* (254) cmd ::= SHOW CONNECTIONS */ + -2, /* (255) cmd ::= SHOW LICENCES */ + -2, /* (256) cmd ::= SHOW GRANTS */ + -4, /* (257) cmd ::= SHOW CREATE DATABASE db_name */ + -4, /* (258) cmd ::= SHOW CREATE TABLE full_table_name */ + -4, /* (259) cmd ::= SHOW CREATE STABLE full_table_name */ + -2, /* (260) cmd ::= SHOW QUERIES */ + -2, /* (261) cmd ::= SHOW SCORES */ + -2, /* (262) cmd ::= SHOW TOPICS */ + -2, /* (263) cmd ::= SHOW VARIABLES */ + -3, /* (264) cmd ::= SHOW CLUSTER VARIABLES */ + -3, /* (265) cmd ::= SHOW LOCAL VARIABLES */ + -5, /* (266) cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ + -2, /* (267) cmd ::= SHOW BNODES */ + -2, /* (268) cmd ::= SHOW SNODES */ + -2, /* (269) cmd ::= SHOW CLUSTER */ + -2, /* (270) cmd ::= SHOW TRANSACTIONS */ + -4, /* (271) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ + -2, /* (272) cmd ::= SHOW CONSUMERS */ + -2, /* (273) cmd ::= SHOW SUBSCRIPTIONS */ + -5, /* (274) cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ + -6, /* (275) cmd ::= SHOW TAGS FROM db_name NK_DOT table_name */ + -7, /* (276) cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt */ + -8, /* (277) cmd ::= SHOW TABLE TAGS tag_list_opt FROM db_name NK_DOT table_name */ + -5, /* (278) cmd ::= SHOW VNODES ON DNODE NK_INTEGER */ + -2, /* (279) cmd ::= SHOW VNODES */ + -3, /* (280) cmd ::= SHOW db_name_cond_opt ALIVE */ + -3, /* (281) cmd ::= SHOW CLUSTER ALIVE */ + 0, /* (282) db_name_cond_opt ::= */ + -2, /* (283) db_name_cond_opt ::= db_name NK_DOT */ + 0, /* (284) like_pattern_opt ::= */ + -2, /* (285) like_pattern_opt ::= LIKE NK_STRING */ + -1, /* (286) table_name_cond ::= table_name */ + 0, /* (287) from_db_opt ::= */ + -2, /* (288) from_db_opt ::= FROM db_name */ + 0, /* (289) tag_list_opt ::= */ + -1, /* (290) tag_list_opt ::= tag_item */ + -3, /* (291) tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ + -1, /* (292) tag_item ::= TBNAME */ + -1, /* (293) tag_item ::= QTAGS */ + -1, /* (294) tag_item ::= column_name */ + -2, /* (295) tag_item ::= column_name column_alias */ + -3, /* (296) tag_item ::= column_name AS column_alias */ + -8, /* (297) cmd ::= CREATE SMA INDEX not_exists_opt full_index_name ON full_table_name index_options */ + -9, /* (298) cmd ::= CREATE INDEX not_exists_opt full_index_name ON full_table_name NK_LP col_name_list NK_RP */ + -4, /* (299) cmd ::= DROP INDEX exists_opt full_index_name */ + -1, /* (300) full_index_name ::= index_name */ + -3, /* (301) full_index_name ::= db_name NK_DOT index_name */ + -10, /* (302) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ + -12, /* (303) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ + -1, /* (304) func_list ::= func */ + -3, /* (305) func_list ::= func_list NK_COMMA func */ + -4, /* (306) func ::= sma_func_name NK_LP expression_list NK_RP */ + -1, /* (307) sma_func_name ::= function_name */ + -1, /* (308) sma_func_name ::= COUNT */ + -1, /* (309) sma_func_name ::= FIRST */ + -1, /* (310) sma_func_name ::= LAST */ + -1, /* (311) sma_func_name ::= LAST_ROW */ + 0, /* (312) sma_stream_opt ::= */ + -3, /* (313) sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal */ + -3, /* (314) sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal */ + -3, /* (315) sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal */ + -1, /* (316) with_meta ::= AS */ + -3, /* (317) with_meta ::= WITH META AS */ + -3, /* (318) with_meta ::= ONLY META AS */ + -6, /* (319) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ + -7, /* (320) cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta DATABASE db_name */ + -8, /* (321) cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta STABLE full_table_name where_clause_opt */ + -4, /* (322) cmd ::= DROP TOPIC exists_opt topic_name */ + -7, /* (323) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ + -2, /* (324) cmd ::= DESC full_table_name */ + -2, /* (325) cmd ::= DESCRIBE full_table_name */ + -3, /* (326) cmd ::= RESET QUERY CACHE */ + -4, /* (327) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ + -4, /* (328) cmd ::= EXPLAIN analyze_opt explain_options insert_query */ + 0, /* (329) analyze_opt ::= */ + -1, /* (330) analyze_opt ::= ANALYZE */ + 0, /* (331) explain_options ::= */ + -3, /* (332) explain_options ::= explain_options VERBOSE NK_BOOL */ + -3, /* (333) explain_options ::= explain_options RATIO NK_FLOAT */ + -12, /* (334) cmd ::= CREATE or_replace_opt agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt language_opt */ + -4, /* (335) cmd ::= DROP FUNCTION exists_opt function_name */ + 0, /* (336) agg_func_opt ::= */ + -1, /* (337) agg_func_opt ::= AGGREGATE */ + 0, /* (338) bufsize_opt ::= */ + -2, /* (339) bufsize_opt ::= BUFSIZE NK_INTEGER */ + 0, /* (340) language_opt ::= */ + -2, /* (341) language_opt ::= LANGUAGE NK_STRING */ + 0, /* (342) or_replace_opt ::= */ + -2, /* (343) or_replace_opt ::= OR REPLACE */ + -12, /* (344) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name col_list_opt tag_def_or_ref_opt subtable_opt AS query_or_subquery */ + -4, /* (345) cmd ::= DROP STREAM exists_opt stream_name */ + -4, /* (346) cmd ::= PAUSE STREAM exists_opt stream_name */ + -5, /* (347) cmd ::= RESUME STREAM exists_opt ignore_opt stream_name */ + 0, /* (348) col_list_opt ::= */ + -3, /* (349) col_list_opt ::= NK_LP col_name_list NK_RP */ + 0, /* (350) tag_def_or_ref_opt ::= */ + -1, /* (351) tag_def_or_ref_opt ::= tags_def */ + -4, /* (352) tag_def_or_ref_opt ::= TAGS NK_LP col_name_list NK_RP */ + 0, /* (353) stream_options ::= */ + -3, /* (354) stream_options ::= stream_options TRIGGER AT_ONCE */ + -3, /* (355) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ + -4, /* (356) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ + -3, /* (357) stream_options ::= stream_options WATERMARK duration_literal */ + -4, /* (358) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ + -3, /* (359) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ + -3, /* (360) stream_options ::= stream_options DELETE_MARK duration_literal */ + -4, /* (361) stream_options ::= stream_options IGNORE UPDATE NK_INTEGER */ + 0, /* (362) subtable_opt ::= */ + -4, /* (363) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + 0, /* (364) ignore_opt ::= */ + -2, /* (365) ignore_opt ::= IGNORE UNTREATED */ + -3, /* (366) cmd ::= KILL CONNECTION NK_INTEGER */ + -3, /* (367) cmd ::= KILL QUERY NK_STRING */ + -3, /* (368) cmd ::= KILL TRANSACTION NK_INTEGER */ + -2, /* (369) cmd ::= BALANCE VGROUP */ + -3, /* (370) cmd ::= BALANCE VGROUP LEADER */ + -4, /* (371) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + -4, /* (372) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ + -3, /* (373) cmd ::= SPLIT VGROUP NK_INTEGER */ + -2, /* (374) dnode_list ::= DNODE NK_INTEGER */ + -3, /* (375) dnode_list ::= dnode_list DNODE NK_INTEGER */ + -4, /* (376) cmd ::= DELETE FROM full_table_name where_clause_opt */ + -1, /* (377) cmd ::= query_or_subquery */ + -1, /* (378) cmd ::= insert_query */ + -7, /* (379) insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ + -4, /* (380) insert_query ::= INSERT INTO full_table_name query_or_subquery */ + -1, /* (381) literal ::= NK_INTEGER */ + -1, /* (382) literal ::= NK_FLOAT */ + -1, /* (383) literal ::= NK_STRING */ + -1, /* (384) literal ::= NK_BOOL */ + -2, /* (385) literal ::= TIMESTAMP NK_STRING */ + -1, /* (386) literal ::= duration_literal */ + -1, /* (387) literal ::= NULL */ + -1, /* (388) literal ::= NK_QUESTION */ + -1, /* (389) duration_literal ::= NK_VARIABLE */ + -1, /* (390) signed ::= NK_INTEGER */ + -2, /* (391) signed ::= NK_PLUS NK_INTEGER */ + -2, /* (392) signed ::= NK_MINUS NK_INTEGER */ + -1, /* (393) signed ::= NK_FLOAT */ + -2, /* (394) signed ::= NK_PLUS NK_FLOAT */ + -2, /* (395) signed ::= NK_MINUS NK_FLOAT */ + -1, /* (396) signed_literal ::= signed */ + -1, /* (397) signed_literal ::= NK_STRING */ + -1, /* (398) signed_literal ::= NK_BOOL */ + -2, /* (399) signed_literal ::= TIMESTAMP NK_STRING */ + -1, /* (400) signed_literal ::= duration_literal */ + -1, /* (401) signed_literal ::= NULL */ + -1, /* (402) signed_literal ::= literal_func */ + -1, /* (403) signed_literal ::= NK_QUESTION */ + -1, /* (404) literal_list ::= signed_literal */ + -3, /* (405) literal_list ::= literal_list NK_COMMA signed_literal */ + -1, /* (406) db_name ::= NK_ID */ + -1, /* (407) table_name ::= NK_ID */ + -1, /* (408) column_name ::= NK_ID */ + -1, /* (409) function_name ::= NK_ID */ + -1, /* (410) table_alias ::= NK_ID */ + -1, /* (411) column_alias ::= NK_ID */ + -1, /* (412) user_name ::= NK_ID */ + -1, /* (413) topic_name ::= NK_ID */ + -1, /* (414) stream_name ::= NK_ID */ + -1, /* (415) cgroup_name ::= NK_ID */ + -1, /* (416) index_name ::= NK_ID */ + -1, /* (417) expr_or_subquery ::= expression */ + -1, /* (418) expression ::= literal */ + -1, /* (419) expression ::= pseudo_column */ + -1, /* (420) expression ::= column_reference */ + -1, /* (421) expression ::= function_expression */ + -1, /* (422) expression ::= case_when_expression */ + -3, /* (423) expression ::= NK_LP expression NK_RP */ + -2, /* (424) expression ::= NK_PLUS expr_or_subquery */ + -2, /* (425) expression ::= NK_MINUS expr_or_subquery */ + -3, /* (426) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + -3, /* (427) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + -3, /* (428) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + -3, /* (429) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + -3, /* (430) expression ::= expr_or_subquery NK_REM expr_or_subquery */ + -3, /* (431) expression ::= column_reference NK_ARROW NK_STRING */ + -3, /* (432) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + -3, /* (433) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + -1, /* (434) expression_list ::= expr_or_subquery */ + -3, /* (435) expression_list ::= expression_list NK_COMMA expr_or_subquery */ + -1, /* (436) column_reference ::= column_name */ + -3, /* (437) column_reference ::= table_name NK_DOT column_name */ + -1, /* (438) pseudo_column ::= ROWTS */ + -1, /* (439) pseudo_column ::= TBNAME */ + -3, /* (440) pseudo_column ::= table_name NK_DOT TBNAME */ + -1, /* (441) pseudo_column ::= QSTART */ + -1, /* (442) pseudo_column ::= QEND */ + -1, /* (443) pseudo_column ::= QDURATION */ + -1, /* (444) pseudo_column ::= WSTART */ + -1, /* (445) pseudo_column ::= WEND */ + -1, /* (446) pseudo_column ::= WDURATION */ + -1, /* (447) pseudo_column ::= IROWTS */ + -1, /* (448) pseudo_column ::= ISFILLED */ + -1, /* (449) pseudo_column ::= QTAGS */ + -4, /* (450) function_expression ::= function_name NK_LP expression_list NK_RP */ + -4, /* (451) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ + -6, /* (452) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ + -1, /* (453) function_expression ::= literal_func */ + -3, /* (454) literal_func ::= noarg_func NK_LP NK_RP */ + -1, /* (455) literal_func ::= NOW */ + -1, /* (456) noarg_func ::= NOW */ + -1, /* (457) noarg_func ::= TODAY */ + -1, /* (458) noarg_func ::= TIMEZONE */ + -1, /* (459) noarg_func ::= DATABASE */ + -1, /* (460) noarg_func ::= CLIENT_VERSION */ + -1, /* (461) noarg_func ::= SERVER_VERSION */ + -1, /* (462) noarg_func ::= SERVER_STATUS */ + -1, /* (463) noarg_func ::= CURRENT_USER */ + -1, /* (464) noarg_func ::= USER */ + -1, /* (465) star_func ::= COUNT */ + -1, /* (466) star_func ::= FIRST */ + -1, /* (467) star_func ::= LAST */ + -1, /* (468) star_func ::= LAST_ROW */ + -1, /* (469) star_func_para_list ::= NK_STAR */ + -1, /* (470) star_func_para_list ::= other_para_list */ + -1, /* (471) other_para_list ::= star_func_para */ + -3, /* (472) other_para_list ::= other_para_list NK_COMMA star_func_para */ + -1, /* (473) star_func_para ::= expr_or_subquery */ + -3, /* (474) star_func_para ::= table_name NK_DOT NK_STAR */ + -4, /* (475) case_when_expression ::= CASE when_then_list case_when_else_opt END */ + -5, /* (476) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ + -1, /* (477) when_then_list ::= when_then_expr */ + -2, /* (478) when_then_list ::= when_then_list when_then_expr */ + -4, /* (479) when_then_expr ::= WHEN common_expression THEN common_expression */ + 0, /* (480) case_when_else_opt ::= */ + -2, /* (481) case_when_else_opt ::= ELSE common_expression */ + -3, /* (482) predicate ::= expr_or_subquery compare_op expr_or_subquery */ + -5, /* (483) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + -6, /* (484) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + -3, /* (485) predicate ::= expr_or_subquery IS NULL */ + -4, /* (486) predicate ::= expr_or_subquery IS NOT NULL */ + -3, /* (487) predicate ::= expr_or_subquery in_op in_predicate_value */ + -1, /* (488) compare_op ::= NK_LT */ + -1, /* (489) compare_op ::= NK_GT */ + -1, /* (490) compare_op ::= NK_LE */ + -1, /* (491) compare_op ::= NK_GE */ + -1, /* (492) compare_op ::= NK_NE */ + -1, /* (493) compare_op ::= NK_EQ */ + -1, /* (494) compare_op ::= LIKE */ + -2, /* (495) compare_op ::= NOT LIKE */ + -1, /* (496) compare_op ::= MATCH */ + -1, /* (497) compare_op ::= NMATCH */ + -1, /* (498) compare_op ::= CONTAINS */ + -1, /* (499) in_op ::= IN */ + -2, /* (500) in_op ::= NOT IN */ + -3, /* (501) in_predicate_value ::= NK_LP literal_list NK_RP */ + -1, /* (502) boolean_value_expression ::= boolean_primary */ + -2, /* (503) boolean_value_expression ::= NOT boolean_primary */ + -3, /* (504) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + -3, /* (505) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + -1, /* (506) boolean_primary ::= predicate */ + -3, /* (507) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ + -1, /* (508) common_expression ::= expr_or_subquery */ + -1, /* (509) common_expression ::= boolean_value_expression */ + 0, /* (510) from_clause_opt ::= */ + -2, /* (511) from_clause_opt ::= FROM table_reference_list */ + -1, /* (512) table_reference_list ::= table_reference */ + -3, /* (513) table_reference_list ::= table_reference_list NK_COMMA table_reference */ + -1, /* (514) table_reference ::= table_primary */ + -1, /* (515) table_reference ::= joined_table */ + -2, /* (516) table_primary ::= table_name alias_opt */ + -4, /* (517) table_primary ::= db_name NK_DOT table_name alias_opt */ + -2, /* (518) table_primary ::= subquery alias_opt */ + -1, /* (519) table_primary ::= parenthesized_joined_table */ + 0, /* (520) alias_opt ::= */ + -1, /* (521) alias_opt ::= table_alias */ + -2, /* (522) alias_opt ::= AS table_alias */ + -3, /* (523) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + -3, /* (524) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ + -6, /* (525) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ + 0, /* (526) join_type ::= */ + -1, /* (527) join_type ::= INNER */ + -14, /* (528) query_specification ::= SELECT hint_list tag_mode_opt set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */ + 0, /* (529) hint_list ::= */ + -1, /* (530) hint_list ::= NK_HINT */ + 0, /* (531) tag_mode_opt ::= */ + -1, /* (532) tag_mode_opt ::= TAGS */ + 0, /* (533) set_quantifier_opt ::= */ + -1, /* (534) set_quantifier_opt ::= DISTINCT */ + -1, /* (535) set_quantifier_opt ::= ALL */ + -1, /* (536) select_list ::= select_item */ + -3, /* (537) select_list ::= select_list NK_COMMA select_item */ + -1, /* (538) select_item ::= NK_STAR */ + -1, /* (539) select_item ::= common_expression */ + -2, /* (540) select_item ::= common_expression column_alias */ + -3, /* (541) select_item ::= common_expression AS column_alias */ + -3, /* (542) select_item ::= table_name NK_DOT NK_STAR */ + 0, /* (543) where_clause_opt ::= */ + -2, /* (544) where_clause_opt ::= WHERE search_condition */ + 0, /* (545) partition_by_clause_opt ::= */ + -3, /* (546) partition_by_clause_opt ::= PARTITION BY partition_list */ + -1, /* (547) partition_list ::= partition_item */ + -3, /* (548) partition_list ::= partition_list NK_COMMA partition_item */ + -1, /* (549) partition_item ::= expr_or_subquery */ + -2, /* (550) partition_item ::= expr_or_subquery column_alias */ + -3, /* (551) partition_item ::= expr_or_subquery AS column_alias */ + 0, /* (552) twindow_clause_opt ::= */ + -6, /* (553) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ + -4, /* (554) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ + -6, /* (555) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ + -8, /* (556) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ + -7, /* (557) twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ + 0, /* (558) sliding_opt ::= */ + -4, /* (559) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ + 0, /* (560) fill_opt ::= */ + -4, /* (561) fill_opt ::= FILL NK_LP fill_mode NK_RP */ + -6, /* (562) fill_opt ::= FILL NK_LP VALUE NK_COMMA expression_list NK_RP */ + -6, /* (563) fill_opt ::= FILL NK_LP VALUE_F NK_COMMA expression_list NK_RP */ + -1, /* (564) fill_mode ::= NONE */ + -1, /* (565) fill_mode ::= PREV */ + -1, /* (566) fill_mode ::= NULL */ + -1, /* (567) fill_mode ::= NULL_F */ + -1, /* (568) fill_mode ::= LINEAR */ + -1, /* (569) fill_mode ::= NEXT */ + 0, /* (570) group_by_clause_opt ::= */ + -3, /* (571) group_by_clause_opt ::= GROUP BY group_by_list */ + -1, /* (572) group_by_list ::= expr_or_subquery */ + -3, /* (573) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ + 0, /* (574) having_clause_opt ::= */ + -2, /* (575) having_clause_opt ::= HAVING search_condition */ + 0, /* (576) range_opt ::= */ + -6, /* (577) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ + -4, /* (578) range_opt ::= RANGE NK_LP expr_or_subquery NK_RP */ + 0, /* (579) every_opt ::= */ + -4, /* (580) every_opt ::= EVERY NK_LP duration_literal NK_RP */ + -4, /* (581) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + -1, /* (582) query_simple ::= query_specification */ + -1, /* (583) query_simple ::= union_query_expression */ + -4, /* (584) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ + -3, /* (585) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ + -1, /* (586) query_simple_or_subquery ::= query_simple */ + -1, /* (587) query_simple_or_subquery ::= subquery */ + -1, /* (588) query_or_subquery ::= query_expression */ + -1, /* (589) query_or_subquery ::= subquery */ + 0, /* (590) order_by_clause_opt ::= */ + -3, /* (591) order_by_clause_opt ::= ORDER BY sort_specification_list */ + 0, /* (592) slimit_clause_opt ::= */ + -2, /* (593) slimit_clause_opt ::= SLIMIT NK_INTEGER */ + -4, /* (594) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + -4, /* (595) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + 0, /* (596) limit_clause_opt ::= */ + -2, /* (597) limit_clause_opt ::= LIMIT NK_INTEGER */ + -4, /* (598) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ + -4, /* (599) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + -3, /* (600) subquery ::= NK_LP query_expression NK_RP */ + -3, /* (601) subquery ::= NK_LP subquery NK_RP */ + -1, /* (602) search_condition ::= common_expression */ + -1, /* (603) sort_specification_list ::= sort_specification */ + -3, /* (604) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ + -3, /* (605) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ + 0, /* (606) ordering_specification_opt ::= */ + -1, /* (607) ordering_specification_opt ::= ASC */ + -1, /* (608) ordering_specification_opt ::= DESC */ + 0, /* (609) null_ordering_opt ::= */ + -2, /* (610) null_ordering_opt ::= NULLS FIRST */ + -2, /* (611) null_ordering_opt ::= NULLS LAST */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -4469,54 +4854,6 @@ static YYACTIONTYPE yy_reduce( (void)yyLookahead; (void)yyLookaheadToken; yymsp = yypParser->yytos; -#ifndef NDEBUG - if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ - yysize = yyRuleInfoNRhs[yyruleno]; - if( yysize ){ - fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n", - yyTracePrompt, - yyruleno, yyRuleName[yyruleno], - yyrulenoyytos - yypParser->yystack)>yypParser->yyhwm ){ - yypParser->yyhwm++; - assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack)); - } -#endif -#if YYSTACKDEPTH>0 - if( yypParser->yytos>=yypParser->yystackEnd ){ - yyStackOverflow(yypParser); - /* The call to yyStackOverflow() above pops the stack until it is - ** empty, causing the main parser loop to exit. So the return value - ** is never used and does not matter. */ - return 0; - } -#else - if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ - if( yyGrowStack(yypParser) ){ - yyStackOverflow(yypParser); - /* The call to yyStackOverflow() above pops the stack until it is - ** empty, causing the main parser loop to exit. So the return value - ** is never used and does not matter. */ - return 0; - } - yymsp = yypParser->yytos; - } -#endif - } switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example @@ -4530,15 +4867,21 @@ static YYACTIONTYPE yy_reduce( /********** Begin reduce actions **********************************************/ YYMINORTYPE yylhsminor; case 0: /* cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ +#line 50 "sql.y" { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } - yy_destructor(yypParser,340,&yymsp[0].minor); - break; - case 1: /* cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ -{ pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } +#line 4872 "sql.c" yy_destructor(yypParser,341,&yymsp[0].minor); break; + case 1: /* cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ +#line 51 "sql.y" +{ pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } +#line 4878 "sql.c" + yy_destructor(yypParser,342,&yymsp[0].minor); + break; case 2: /* account_options ::= */ +#line 55 "sql.y" { } +#line 4884 "sql.c" break; case 3: /* account_options ::= account_options PPS literal */ case 4: /* account_options ::= account_options TSERIES literal */ yytestcase(yyruleno==4); @@ -4549,20 +4892,26 @@ static YYACTIONTYPE yy_reduce( case 9: /* account_options ::= account_options USERS literal */ yytestcase(yyruleno==9); case 10: /* account_options ::= account_options CONNS literal */ yytestcase(yyruleno==10); case 11: /* account_options ::= account_options STATE literal */ yytestcase(yyruleno==11); -{ yy_destructor(yypParser,340,&yymsp[-2].minor); +{ yy_destructor(yypParser,341,&yymsp[-2].minor); +#line 56 "sql.y" { } - yy_destructor(yypParser,342,&yymsp[0].minor); +#line 4898 "sql.c" + yy_destructor(yypParser,343,&yymsp[0].minor); } break; case 12: /* alter_account_options ::= alter_account_option */ -{ yy_destructor(yypParser,343,&yymsp[0].minor); +{ yy_destructor(yypParser,344,&yymsp[0].minor); +#line 68 "sql.y" { } +#line 4906 "sql.c" } break; case 13: /* alter_account_options ::= alter_account_options alter_account_option */ -{ yy_destructor(yypParser,341,&yymsp[-1].minor); +{ yy_destructor(yypParser,342,&yymsp[-1].minor); +#line 69 "sql.y" { } - yy_destructor(yypParser,343,&yymsp[0].minor); +#line 4913 "sql.c" + yy_destructor(yypParser,344,&yymsp[0].minor); } break; case 14: /* alter_account_option ::= PASS literal */ @@ -4575,1660 +4924,2498 @@ static YYACTIONTYPE yy_reduce( case 21: /* alter_account_option ::= USERS literal */ yytestcase(yyruleno==21); case 22: /* alter_account_option ::= CONNS literal */ yytestcase(yyruleno==22); case 23: /* alter_account_option ::= STATE literal */ yytestcase(yyruleno==23); +#line 73 "sql.y" { } - yy_destructor(yypParser,342,&yymsp[0].minor); +#line 4929 "sql.c" + yy_destructor(yypParser,343,&yymsp[0].minor); break; - case 24: /* cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ -{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy169, &yymsp[-1].minor.yy0, yymsp[0].minor.yy243); } + case 24: /* ip_range_list ::= NK_STRING */ +#line 86 "sql.y" +{ yylhsminor.yy236 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } +#line 4935 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; break; - case 25: /* cmd ::= ALTER USER user_name PASS NK_STRING */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy169, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); } + case 25: /* ip_range_list ::= ip_range_list NK_COMMA NK_STRING */ +#line 87 "sql.y" +{ yylhsminor.yy236 = addNodeToList(pCxt, yymsp[-2].minor.yy236, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } +#line 4941 "sql.c" + yymsp[-2].minor.yy236 = yylhsminor.yy236; break; - case 26: /* cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy169, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); } + case 26: /* white_list ::= HOST ip_range_list */ +#line 91 "sql.y" +{ yymsp[-1].minor.yy236 = yymsp[0].minor.yy236; } +#line 4947 "sql.c" break; - case 27: /* cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy169, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } + case 27: /* white_list_opt ::= */ + case 182: /* specific_cols_opt ::= */ yytestcase(yyruleno==182); + case 214: /* tags_def_opt ::= */ yytestcase(yyruleno==214); + case 289: /* tag_list_opt ::= */ yytestcase(yyruleno==289); + case 348: /* col_list_opt ::= */ yytestcase(yyruleno==348); + case 350: /* tag_def_or_ref_opt ::= */ yytestcase(yyruleno==350); + case 545: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==545); + case 570: /* group_by_clause_opt ::= */ yytestcase(yyruleno==570); + case 590: /* order_by_clause_opt ::= */ yytestcase(yyruleno==590); +#line 95 "sql.y" +{ yymsp[1].minor.yy236 = NULL; } +#line 4960 "sql.c" break; - case 28: /* cmd ::= DROP USER user_name */ -{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy169); } + case 28: /* white_list_opt ::= white_list */ + case 215: /* tags_def_opt ::= tags_def */ yytestcase(yyruleno==215); + case 351: /* tag_def_or_ref_opt ::= tags_def */ yytestcase(yyruleno==351); + case 470: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==470); +#line 96 "sql.y" +{ yylhsminor.yy236 = yymsp[0].minor.yy236; } +#line 4968 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; break; - case 29: /* sysinfo_opt ::= */ -{ yymsp[1].minor.yy243 = 1; } + case 29: /* cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt white_list_opt */ +#line 100 "sql.y" +{ + pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-4].minor.yy889, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy847); + addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, yymsp[0].minor.yy236); + } +#line 4977 "sql.c" break; - case 30: /* sysinfo_opt ::= SYSINFO NK_INTEGER */ -{ yymsp[-1].minor.yy243 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); } + case 30: /* cmd ::= ALTER USER user_name PASS NK_STRING */ +#line 104 "sql.y" +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy889, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); } +#line 4982 "sql.c" break; - case 31: /* cmd ::= GRANT privileges ON priv_level with_opt TO user_name */ -{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-5].minor.yy949, &yymsp[-3].minor.yy637, &yymsp[0].minor.yy169, yymsp[-2].minor.yy952); } + case 31: /* cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ +#line 105 "sql.y" +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy889, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); } +#line 4987 "sql.c" break; - case 32: /* cmd ::= REVOKE privileges ON priv_level with_opt FROM user_name */ -{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-5].minor.yy949, &yymsp[-3].minor.yy637, &yymsp[0].minor.yy169, yymsp[-2].minor.yy952); } + case 32: /* cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ +#line 106 "sql.y" +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy889, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } +#line 4992 "sql.c" break; - case 33: /* privileges ::= ALL */ -{ yymsp[0].minor.yy949 = PRIVILEGE_TYPE_ALL; } + case 33: /* cmd ::= ALTER USER user_name ADD white_list */ +#line 107 "sql.y" +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy889, TSDB_ALTER_USER_ADD_WHITE_LIST, yymsp[0].minor.yy236); } +#line 4997 "sql.c" break; - case 34: /* privileges ::= priv_type_list */ - case 36: /* priv_type_list ::= priv_type */ yytestcase(yyruleno==36); -{ yylhsminor.yy949 = yymsp[0].minor.yy949; } - yymsp[0].minor.yy949 = yylhsminor.yy949; + case 34: /* cmd ::= ALTER USER user_name DROP white_list */ +#line 108 "sql.y" +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy889, TSDB_ALTER_USER_DROP_WHITE_LIST, yymsp[0].minor.yy236); } +#line 5002 "sql.c" break; - case 35: /* privileges ::= SUBSCRIBE */ -{ yymsp[0].minor.yy949 = PRIVILEGE_TYPE_SUBSCRIBE; } + case 35: /* cmd ::= DROP USER user_name */ +#line 109 "sql.y" +{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy889); } +#line 5007 "sql.c" break; - case 37: /* priv_type_list ::= priv_type_list NK_COMMA priv_type */ -{ yylhsminor.yy949 = yymsp[-2].minor.yy949 | yymsp[0].minor.yy949; } - yymsp[-2].minor.yy949 = yylhsminor.yy949; + case 36: /* sysinfo_opt ::= */ +#line 113 "sql.y" +{ yymsp[1].minor.yy847 = 1; } +#line 5012 "sql.c" break; - case 38: /* priv_type ::= READ */ -{ yymsp[0].minor.yy949 = PRIVILEGE_TYPE_READ; } + case 37: /* sysinfo_opt ::= SYSINFO NK_INTEGER */ +#line 114 "sql.y" +{ yymsp[-1].minor.yy847 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); } +#line 5017 "sql.c" break; - case 39: /* priv_type ::= WRITE */ -{ yymsp[0].minor.yy949 = PRIVILEGE_TYPE_WRITE; } + case 38: /* cmd ::= GRANT privileges ON priv_level with_opt TO user_name */ +#line 117 "sql.y" +{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-5].minor.yy701, &yymsp[-3].minor.yy833, &yymsp[0].minor.yy889, yymsp[-2].minor.yy28); } +#line 5022 "sql.c" break; - case 40: /* priv_level ::= NK_STAR NK_DOT NK_STAR */ -{ yylhsminor.yy637.first = yymsp[-2].minor.yy0; yylhsminor.yy637.second = yymsp[0].minor.yy0; } - yymsp[-2].minor.yy637 = yylhsminor.yy637; + case 39: /* cmd ::= REVOKE privileges ON priv_level with_opt FROM user_name */ +#line 118 "sql.y" +{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-5].minor.yy701, &yymsp[-3].minor.yy833, &yymsp[0].minor.yy889, yymsp[-2].minor.yy28); } +#line 5027 "sql.c" break; - case 41: /* priv_level ::= db_name NK_DOT NK_STAR */ -{ yylhsminor.yy637.first = yymsp[-2].minor.yy169; yylhsminor.yy637.second = yymsp[0].minor.yy0; } - yymsp[-2].minor.yy637 = yylhsminor.yy637; + case 40: /* privileges ::= ALL */ +#line 122 "sql.y" +{ yymsp[0].minor.yy701 = PRIVILEGE_TYPE_ALL; } +#line 5032 "sql.c" break; - case 42: /* priv_level ::= db_name NK_DOT table_name */ -{ yylhsminor.yy637.first = yymsp[-2].minor.yy169; yylhsminor.yy637.second = yymsp[0].minor.yy169; } - yymsp[-2].minor.yy637 = yylhsminor.yy637; + case 41: /* privileges ::= priv_type_list */ + case 43: /* priv_type_list ::= priv_type */ yytestcase(yyruleno==43); +#line 123 "sql.y" +{ yylhsminor.yy701 = yymsp[0].minor.yy701; } +#line 5038 "sql.c" + yymsp[0].minor.yy701 = yylhsminor.yy701; break; - case 43: /* priv_level ::= topic_name */ -{ yylhsminor.yy637.first = yymsp[0].minor.yy169; yylhsminor.yy637.second = nil_token; } - yymsp[0].minor.yy637 = yylhsminor.yy637; + case 42: /* privileges ::= SUBSCRIBE */ +#line 124 "sql.y" +{ yymsp[0].minor.yy701 = PRIVILEGE_TYPE_SUBSCRIBE; } +#line 5044 "sql.c" break; - case 44: /* with_opt ::= */ - case 144: /* start_opt ::= */ yytestcase(yyruleno==144); - case 148: /* end_opt ::= */ yytestcase(yyruleno==148); - case 277: /* like_pattern_opt ::= */ yytestcase(yyruleno==277); - case 355: /* subtable_opt ::= */ yytestcase(yyruleno==355); - case 473: /* case_when_else_opt ::= */ yytestcase(yyruleno==473); - case 503: /* from_clause_opt ::= */ yytestcase(yyruleno==503); - case 536: /* where_clause_opt ::= */ yytestcase(yyruleno==536); - case 545: /* twindow_clause_opt ::= */ yytestcase(yyruleno==545); - case 551: /* sliding_opt ::= */ yytestcase(yyruleno==551); - case 553: /* fill_opt ::= */ yytestcase(yyruleno==553); - case 567: /* having_clause_opt ::= */ yytestcase(yyruleno==567); - case 569: /* range_opt ::= */ yytestcase(yyruleno==569); - case 572: /* every_opt ::= */ yytestcase(yyruleno==572); - case 585: /* slimit_clause_opt ::= */ yytestcase(yyruleno==585); - case 589: /* limit_clause_opt ::= */ yytestcase(yyruleno==589); -{ yymsp[1].minor.yy952 = NULL; } + case 44: /* priv_type_list ::= priv_type_list NK_COMMA priv_type */ +#line 129 "sql.y" +{ yylhsminor.yy701 = yymsp[-2].minor.yy701 | yymsp[0].minor.yy701; } +#line 5049 "sql.c" + yymsp[-2].minor.yy701 = yylhsminor.yy701; break; - case 45: /* with_opt ::= WITH search_condition */ - case 504: /* from_clause_opt ::= FROM table_reference_list */ yytestcase(yyruleno==504); - case 537: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==537); - case 568: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==568); -{ yymsp[-1].minor.yy952 = yymsp[0].minor.yy952; } + case 45: /* priv_type ::= READ */ +#line 133 "sql.y" +{ yymsp[0].minor.yy701 = PRIVILEGE_TYPE_READ; } +#line 5055 "sql.c" break; - case 46: /* cmd ::= CREATE DNODE dnode_endpoint */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy169, NULL); } + case 46: /* priv_type ::= WRITE */ +#line 134 "sql.y" +{ yymsp[0].minor.yy701 = PRIVILEGE_TYPE_WRITE; } +#line 5060 "sql.c" break; - case 47: /* cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy0); } + case 47: /* priv_level ::= NK_STAR NK_DOT NK_STAR */ +#line 138 "sql.y" +{ yylhsminor.yy833.first = yymsp[-2].minor.yy0; yylhsminor.yy833.second = yymsp[0].minor.yy0; } +#line 5065 "sql.c" + yymsp[-2].minor.yy833 = yylhsminor.yy833; break; - case 48: /* cmd ::= DROP DNODE NK_INTEGER force_opt */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy957, false); } + case 48: /* priv_level ::= db_name NK_DOT NK_STAR */ +#line 139 "sql.y" +{ yylhsminor.yy833.first = yymsp[-2].minor.yy889; yylhsminor.yy833.second = yymsp[0].minor.yy0; } +#line 5071 "sql.c" + yymsp[-2].minor.yy833 = yylhsminor.yy833; break; - case 49: /* cmd ::= DROP DNODE dnode_endpoint force_opt */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy169, yymsp[0].minor.yy957, false); } + case 49: /* priv_level ::= db_name NK_DOT table_name */ +#line 140 "sql.y" +{ yylhsminor.yy833.first = yymsp[-2].minor.yy889; yylhsminor.yy833.second = yymsp[0].minor.yy889; } +#line 5077 "sql.c" + yymsp[-2].minor.yy833 = yylhsminor.yy833; break; - case 50: /* cmd ::= DROP DNODE NK_INTEGER unsafe_opt */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy0, false, yymsp[0].minor.yy957); } + case 50: /* priv_level ::= topic_name */ +#line 141 "sql.y" +{ yylhsminor.yy833.first = yymsp[0].minor.yy889; yylhsminor.yy833.second = nil_token; } +#line 5083 "sql.c" + yymsp[0].minor.yy833 = yylhsminor.yy833; break; - case 51: /* cmd ::= DROP DNODE dnode_endpoint unsafe_opt */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy169, false, yymsp[0].minor.yy957); } + case 51: /* with_opt ::= */ + case 151: /* start_opt ::= */ yytestcase(yyruleno==151); + case 155: /* end_opt ::= */ yytestcase(yyruleno==155); + case 284: /* like_pattern_opt ::= */ yytestcase(yyruleno==284); + case 362: /* subtable_opt ::= */ yytestcase(yyruleno==362); + case 480: /* case_when_else_opt ::= */ yytestcase(yyruleno==480); + case 510: /* from_clause_opt ::= */ yytestcase(yyruleno==510); + case 543: /* where_clause_opt ::= */ yytestcase(yyruleno==543); + case 552: /* twindow_clause_opt ::= */ yytestcase(yyruleno==552); + case 558: /* sliding_opt ::= */ yytestcase(yyruleno==558); + case 560: /* fill_opt ::= */ yytestcase(yyruleno==560); + case 574: /* having_clause_opt ::= */ yytestcase(yyruleno==574); + case 576: /* range_opt ::= */ yytestcase(yyruleno==576); + case 579: /* every_opt ::= */ yytestcase(yyruleno==579); + case 592: /* slimit_clause_opt ::= */ yytestcase(yyruleno==592); + case 596: /* limit_clause_opt ::= */ yytestcase(yyruleno==596); +#line 143 "sql.y" +{ yymsp[1].minor.yy28 = NULL; } +#line 5104 "sql.c" break; - case 52: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ + case 52: /* with_opt ::= WITH search_condition */ + case 511: /* from_clause_opt ::= FROM table_reference_list */ yytestcase(yyruleno==511); + case 544: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==544); + case 575: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==575); +#line 144 "sql.y" +{ yymsp[-1].minor.yy28 = yymsp[0].minor.yy28; } +#line 5112 "sql.c" + break; + case 53: /* cmd ::= CREATE DNODE dnode_endpoint */ +#line 147 "sql.y" +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy889, NULL); } +#line 5117 "sql.c" + break; + case 54: /* cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ +#line 148 "sql.y" +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy0); } +#line 5122 "sql.c" + break; + case 55: /* cmd ::= DROP DNODE NK_INTEGER force_opt */ +#line 149 "sql.y" +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy793, false); } +#line 5127 "sql.c" + break; + case 56: /* cmd ::= DROP DNODE dnode_endpoint force_opt */ +#line 150 "sql.y" +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy889, yymsp[0].minor.yy793, false); } +#line 5132 "sql.c" + break; + case 57: /* cmd ::= DROP DNODE NK_INTEGER unsafe_opt */ +#line 151 "sql.y" +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy0, false, yymsp[0].minor.yy793); } +#line 5137 "sql.c" + break; + case 58: /* cmd ::= DROP DNODE dnode_endpoint unsafe_opt */ +#line 152 "sql.y" +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy889, false, yymsp[0].minor.yy793); } +#line 5142 "sql.c" + break; + case 59: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ +#line 153 "sql.y" { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, NULL); } +#line 5147 "sql.c" break; - case 53: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ + case 60: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ +#line 154 "sql.y" { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &yymsp[-2].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } +#line 5152 "sql.c" break; - case 54: /* cmd ::= ALTER ALL DNODES NK_STRING */ + case 61: /* cmd ::= ALTER ALL DNODES NK_STRING */ +#line 155 "sql.y" { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &yymsp[0].minor.yy0, NULL); } +#line 5157 "sql.c" break; - case 55: /* cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ + case 62: /* cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ +#line 156 "sql.y" { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } +#line 5162 "sql.c" break; - case 56: /* cmd ::= RESTORE DNODE NK_INTEGER */ + case 63: /* cmd ::= RESTORE DNODE NK_INTEGER */ +#line 157 "sql.y" { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_DNODE_STMT, &yymsp[0].minor.yy0); } +#line 5167 "sql.c" break; - case 57: /* dnode_endpoint ::= NK_STRING */ - case 58: /* dnode_endpoint ::= NK_ID */ yytestcase(yyruleno==58); - case 59: /* dnode_endpoint ::= NK_IPTOKEN */ yytestcase(yyruleno==59); - case 301: /* sma_func_name ::= COUNT */ yytestcase(yyruleno==301); - case 302: /* sma_func_name ::= FIRST */ yytestcase(yyruleno==302); - case 303: /* sma_func_name ::= LAST */ yytestcase(yyruleno==303); - case 304: /* sma_func_name ::= LAST_ROW */ yytestcase(yyruleno==304); - case 399: /* db_name ::= NK_ID */ yytestcase(yyruleno==399); - case 400: /* table_name ::= NK_ID */ yytestcase(yyruleno==400); - case 401: /* column_name ::= NK_ID */ yytestcase(yyruleno==401); - case 402: /* function_name ::= NK_ID */ yytestcase(yyruleno==402); - case 403: /* table_alias ::= NK_ID */ yytestcase(yyruleno==403); - case 404: /* column_alias ::= NK_ID */ yytestcase(yyruleno==404); - case 405: /* user_name ::= NK_ID */ yytestcase(yyruleno==405); - case 406: /* topic_name ::= NK_ID */ yytestcase(yyruleno==406); - case 407: /* stream_name ::= NK_ID */ yytestcase(yyruleno==407); - case 408: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==408); - case 409: /* index_name ::= NK_ID */ yytestcase(yyruleno==409); - case 449: /* noarg_func ::= NOW */ yytestcase(yyruleno==449); - case 450: /* noarg_func ::= TODAY */ yytestcase(yyruleno==450); - case 451: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==451); - case 452: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==452); - case 453: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==453); - case 454: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==454); - case 455: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==455); - case 456: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==456); - case 457: /* noarg_func ::= USER */ yytestcase(yyruleno==457); - case 458: /* star_func ::= COUNT */ yytestcase(yyruleno==458); - case 459: /* star_func ::= FIRST */ yytestcase(yyruleno==459); - case 460: /* star_func ::= LAST */ yytestcase(yyruleno==460); - case 461: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==461); -{ yylhsminor.yy169 = yymsp[0].minor.yy0; } - yymsp[0].minor.yy169 = yylhsminor.yy169; + case 64: /* dnode_endpoint ::= NK_STRING */ + case 65: /* dnode_endpoint ::= NK_ID */ yytestcase(yyruleno==65); + case 66: /* dnode_endpoint ::= NK_IPTOKEN */ yytestcase(yyruleno==66); + case 308: /* sma_func_name ::= COUNT */ yytestcase(yyruleno==308); + case 309: /* sma_func_name ::= FIRST */ yytestcase(yyruleno==309); + case 310: /* sma_func_name ::= LAST */ yytestcase(yyruleno==310); + case 311: /* sma_func_name ::= LAST_ROW */ yytestcase(yyruleno==311); + case 406: /* db_name ::= NK_ID */ yytestcase(yyruleno==406); + case 407: /* table_name ::= NK_ID */ yytestcase(yyruleno==407); + case 408: /* column_name ::= NK_ID */ yytestcase(yyruleno==408); + case 409: /* function_name ::= NK_ID */ yytestcase(yyruleno==409); + case 410: /* table_alias ::= NK_ID */ yytestcase(yyruleno==410); + case 411: /* column_alias ::= NK_ID */ yytestcase(yyruleno==411); + case 412: /* user_name ::= NK_ID */ yytestcase(yyruleno==412); + case 413: /* topic_name ::= NK_ID */ yytestcase(yyruleno==413); + case 414: /* stream_name ::= NK_ID */ yytestcase(yyruleno==414); + case 415: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==415); + case 416: /* index_name ::= NK_ID */ yytestcase(yyruleno==416); + case 456: /* noarg_func ::= NOW */ yytestcase(yyruleno==456); + case 457: /* noarg_func ::= TODAY */ yytestcase(yyruleno==457); + case 458: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==458); + case 459: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==459); + case 460: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==460); + case 461: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==461); + case 462: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==462); + case 463: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==463); + case 464: /* noarg_func ::= USER */ yytestcase(yyruleno==464); + case 465: /* star_func ::= COUNT */ yytestcase(yyruleno==465); + case 466: /* star_func ::= FIRST */ yytestcase(yyruleno==466); + case 467: /* star_func ::= LAST */ yytestcase(yyruleno==467); + case 468: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==468); +#line 161 "sql.y" +{ yylhsminor.yy889 = yymsp[0].minor.yy0; } +#line 5202 "sql.c" + yymsp[0].minor.yy889 = yylhsminor.yy889; break; - case 60: /* force_opt ::= */ - case 84: /* not_exists_opt ::= */ yytestcase(yyruleno==84); - case 86: /* exists_opt ::= */ yytestcase(yyruleno==86); - case 322: /* analyze_opt ::= */ yytestcase(yyruleno==322); - case 329: /* agg_func_opt ::= */ yytestcase(yyruleno==329); - case 335: /* or_replace_opt ::= */ yytestcase(yyruleno==335); - case 357: /* ignore_opt ::= */ yytestcase(yyruleno==357); - case 524: /* tag_mode_opt ::= */ yytestcase(yyruleno==524); - case 526: /* set_quantifier_opt ::= */ yytestcase(yyruleno==526); -{ yymsp[1].minor.yy957 = false; } + case 67: /* force_opt ::= */ + case 91: /* not_exists_opt ::= */ yytestcase(yyruleno==91); + case 93: /* exists_opt ::= */ yytestcase(yyruleno==93); + case 329: /* analyze_opt ::= */ yytestcase(yyruleno==329); + case 336: /* agg_func_opt ::= */ yytestcase(yyruleno==336); + case 342: /* or_replace_opt ::= */ yytestcase(yyruleno==342); + case 364: /* ignore_opt ::= */ yytestcase(yyruleno==364); + case 531: /* tag_mode_opt ::= */ yytestcase(yyruleno==531); + case 533: /* set_quantifier_opt ::= */ yytestcase(yyruleno==533); +#line 167 "sql.y" +{ yymsp[1].minor.yy793 = false; } +#line 5216 "sql.c" break; - case 61: /* force_opt ::= FORCE */ - case 62: /* unsafe_opt ::= UNSAFE */ yytestcase(yyruleno==62); - case 323: /* analyze_opt ::= ANALYZE */ yytestcase(yyruleno==323); - case 330: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==330); - case 525: /* tag_mode_opt ::= TAGS */ yytestcase(yyruleno==525); - case 527: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==527); -{ yymsp[0].minor.yy957 = true; } + case 68: /* force_opt ::= FORCE */ + case 69: /* unsafe_opt ::= UNSAFE */ yytestcase(yyruleno==69); + case 330: /* analyze_opt ::= ANALYZE */ yytestcase(yyruleno==330); + case 337: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==337); + case 532: /* tag_mode_opt ::= TAGS */ yytestcase(yyruleno==532); + case 534: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==534); +#line 168 "sql.y" +{ yymsp[0].minor.yy793 = true; } +#line 5226 "sql.c" break; - case 63: /* cmd ::= ALTER LOCAL NK_STRING */ + case 70: /* cmd ::= ALTER LOCAL NK_STRING */ +#line 175 "sql.y" { pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[0].minor.yy0, NULL); } +#line 5231 "sql.c" break; - case 64: /* cmd ::= ALTER LOCAL NK_STRING NK_STRING */ + case 71: /* cmd ::= ALTER LOCAL NK_STRING NK_STRING */ +#line 176 "sql.y" { pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } +#line 5236 "sql.c" break; - case 65: /* cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ + case 72: /* cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ +#line 179 "sql.y" { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_QNODE_STMT, &yymsp[0].minor.yy0); } +#line 5241 "sql.c" break; - case 66: /* cmd ::= DROP QNODE ON DNODE NK_INTEGER */ + case 73: /* cmd ::= DROP QNODE ON DNODE NK_INTEGER */ +#line 180 "sql.y" { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_QNODE_STMT, &yymsp[0].minor.yy0); } +#line 5246 "sql.c" break; - case 67: /* cmd ::= RESTORE QNODE ON DNODE NK_INTEGER */ + case 74: /* cmd ::= RESTORE QNODE ON DNODE NK_INTEGER */ +#line 181 "sql.y" { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_QNODE_STMT, &yymsp[0].minor.yy0); } +#line 5251 "sql.c" break; - case 68: /* cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ + case 75: /* cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ +#line 184 "sql.y" { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_BNODE_STMT, &yymsp[0].minor.yy0); } +#line 5256 "sql.c" break; - case 69: /* cmd ::= DROP BNODE ON DNODE NK_INTEGER */ + case 76: /* cmd ::= DROP BNODE ON DNODE NK_INTEGER */ +#line 185 "sql.y" { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_BNODE_STMT, &yymsp[0].minor.yy0); } +#line 5261 "sql.c" break; - case 70: /* cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ + case 77: /* cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ +#line 188 "sql.y" { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_SNODE_STMT, &yymsp[0].minor.yy0); } +#line 5266 "sql.c" break; - case 71: /* cmd ::= DROP SNODE ON DNODE NK_INTEGER */ + case 78: /* cmd ::= DROP SNODE ON DNODE NK_INTEGER */ +#line 189 "sql.y" { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_SNODE_STMT, &yymsp[0].minor.yy0); } +#line 5271 "sql.c" break; - case 72: /* cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ + case 79: /* cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ +#line 192 "sql.y" { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_MNODE_STMT, &yymsp[0].minor.yy0); } +#line 5276 "sql.c" break; - case 73: /* cmd ::= DROP MNODE ON DNODE NK_INTEGER */ + case 80: /* cmd ::= DROP MNODE ON DNODE NK_INTEGER */ +#line 193 "sql.y" { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_MNODE_STMT, &yymsp[0].minor.yy0); } +#line 5281 "sql.c" break; - case 74: /* cmd ::= RESTORE MNODE ON DNODE NK_INTEGER */ + case 81: /* cmd ::= RESTORE MNODE ON DNODE NK_INTEGER */ +#line 194 "sql.y" { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_MNODE_STMT, &yymsp[0].minor.yy0); } +#line 5286 "sql.c" break; - case 75: /* cmd ::= RESTORE VNODE ON DNODE NK_INTEGER */ + case 82: /* cmd ::= RESTORE VNODE ON DNODE NK_INTEGER */ +#line 197 "sql.y" { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_VNODE_STMT, &yymsp[0].minor.yy0); } +#line 5291 "sql.c" break; - case 76: /* cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ -{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy957, &yymsp[-1].minor.yy169, yymsp[0].minor.yy952); } + case 83: /* cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ +#line 200 "sql.y" +{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy793, &yymsp[-1].minor.yy889, yymsp[0].minor.yy28); } +#line 5296 "sql.c" break; - case 77: /* cmd ::= DROP DATABASE exists_opt db_name */ -{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy957, &yymsp[0].minor.yy169); } + case 84: /* cmd ::= DROP DATABASE exists_opt db_name */ +#line 201 "sql.y" +{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy793, &yymsp[0].minor.yy889); } +#line 5301 "sql.c" break; - case 78: /* cmd ::= USE db_name */ -{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy169); } + case 85: /* cmd ::= USE db_name */ +#line 202 "sql.y" +{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy889); } +#line 5306 "sql.c" break; - case 79: /* cmd ::= ALTER DATABASE db_name alter_db_options */ -{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy169, yymsp[0].minor.yy952); } + case 86: /* cmd ::= ALTER DATABASE db_name alter_db_options */ +#line 203 "sql.y" +{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy889, yymsp[0].minor.yy28); } +#line 5311 "sql.c" break; - case 80: /* cmd ::= FLUSH DATABASE db_name */ -{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy169); } + case 87: /* cmd ::= FLUSH DATABASE db_name */ +#line 204 "sql.y" +{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy889); } +#line 5316 "sql.c" break; - case 81: /* cmd ::= TRIM DATABASE db_name speed_opt */ -{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[-1].minor.yy169, yymsp[0].minor.yy480); } + case 88: /* cmd ::= TRIM DATABASE db_name speed_opt */ +#line 205 "sql.y" +{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[-1].minor.yy889, yymsp[0].minor.yy956); } +#line 5321 "sql.c" break; - case 82: /* cmd ::= COMPACT DATABASE db_name start_opt end_opt */ -{ pCxt->pRootNode = createCompactStmt(pCxt, &yymsp[-2].minor.yy169, yymsp[-1].minor.yy952, yymsp[0].minor.yy952); } + case 89: /* cmd ::= COMPACT DATABASE db_name start_opt end_opt */ +#line 206 "sql.y" +{ pCxt->pRootNode = createCompactStmt(pCxt, &yymsp[-2].minor.yy889, yymsp[-1].minor.yy28, yymsp[0].minor.yy28); } +#line 5326 "sql.c" break; - case 83: /* not_exists_opt ::= IF NOT EXISTS */ -{ yymsp[-2].minor.yy957 = true; } + case 90: /* not_exists_opt ::= IF NOT EXISTS */ +#line 210 "sql.y" +{ yymsp[-2].minor.yy793 = true; } +#line 5331 "sql.c" break; - case 85: /* exists_opt ::= IF EXISTS */ - case 336: /* or_replace_opt ::= OR REPLACE */ yytestcase(yyruleno==336); - case 358: /* ignore_opt ::= IGNORE UNTREATED */ yytestcase(yyruleno==358); -{ yymsp[-1].minor.yy957 = true; } + case 92: /* exists_opt ::= IF EXISTS */ + case 343: /* or_replace_opt ::= OR REPLACE */ yytestcase(yyruleno==343); + case 365: /* ignore_opt ::= IGNORE UNTREATED */ yytestcase(yyruleno==365); +#line 215 "sql.y" +{ yymsp[-1].minor.yy793 = true; } +#line 5338 "sql.c" break; - case 87: /* db_options ::= */ -{ yymsp[1].minor.yy952 = createDefaultDatabaseOptions(pCxt); } + case 94: /* db_options ::= */ +#line 218 "sql.y" +{ yymsp[1].minor.yy28 = createDefaultDatabaseOptions(pCxt); } +#line 5343 "sql.c" break; - case 88: /* db_options ::= db_options BUFFER NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 95: /* db_options ::= db_options BUFFER NK_INTEGER */ +#line 219 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } +#line 5348 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 89: /* db_options ::= db_options CACHEMODEL NK_STRING */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 96: /* db_options ::= db_options CACHEMODEL NK_STRING */ +#line 220 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); } +#line 5354 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 90: /* db_options ::= db_options CACHESIZE NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 97: /* db_options ::= db_options CACHESIZE NK_INTEGER */ +#line 221 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); } +#line 5360 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 91: /* db_options ::= db_options COMP NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_COMP, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 98: /* db_options ::= db_options COMP NK_INTEGER */ +#line 222 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_COMP, &yymsp[0].minor.yy0); } +#line 5366 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 92: /* db_options ::= db_options DURATION NK_INTEGER */ - case 93: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==93); -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 99: /* db_options ::= db_options DURATION NK_INTEGER */ + case 100: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==100); +#line 223 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } +#line 5373 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 94: /* db_options ::= db_options MAXROWS NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 101: /* db_options ::= db_options MAXROWS NK_INTEGER */ +#line 225 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } +#line 5379 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 95: /* db_options ::= db_options MINROWS NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 102: /* db_options ::= db_options MINROWS NK_INTEGER */ +#line 226 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } +#line 5385 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 96: /* db_options ::= db_options KEEP integer_list */ - case 97: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==97); -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_KEEP, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 103: /* db_options ::= db_options KEEP integer_list */ + case 104: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==104); +#line 227 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_KEEP, yymsp[0].minor.yy236); } +#line 5392 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 98: /* db_options ::= db_options PAGES NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 105: /* db_options ::= db_options PAGES NK_INTEGER */ +#line 229 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } +#line 5398 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 99: /* db_options ::= db_options PAGESIZE NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 106: /* db_options ::= db_options PAGESIZE NK_INTEGER */ +#line 230 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } +#line 5404 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 100: /* db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 107: /* db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ +#line 231 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); } +#line 5410 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 101: /* db_options ::= db_options PRECISION NK_STRING */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 108: /* db_options ::= db_options PRECISION NK_STRING */ +#line 232 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } +#line 5416 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 102: /* db_options ::= db_options REPLICA NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 109: /* db_options ::= db_options REPLICA NK_INTEGER */ +#line 233 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } +#line 5422 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 103: /* db_options ::= db_options VGROUPS NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 110: /* db_options ::= db_options VGROUPS NK_INTEGER */ +#line 235 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } +#line 5428 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 104: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 111: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ +#line 236 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } +#line 5434 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 105: /* db_options ::= db_options RETENTIONS retention_list */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_RETENTIONS, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 112: /* db_options ::= db_options RETENTIONS retention_list */ +#line 237 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_RETENTIONS, yymsp[0].minor.yy236); } +#line 5440 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 106: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 113: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ +#line 238 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } +#line 5446 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 107: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_WAL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 114: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */ +#line 239 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_WAL, &yymsp[0].minor.yy0); } +#line 5452 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 108: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 115: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ +#line 240 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } +#line 5458 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 109: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 116: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ +#line 241 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); } +#line 5464 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 110: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + case 117: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ +#line 242 "sql.y" { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; - yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-3].minor.yy952, DB_OPTION_WAL_RETENTION_PERIOD, &t); + yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-3].minor.yy28, DB_OPTION_WAL_RETENTION_PERIOD, &t); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; +#line 5474 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 111: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 118: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ +#line 247 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); } +#line 5480 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 112: /* db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + case 119: /* db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ +#line 248 "sql.y" { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; - yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-3].minor.yy952, DB_OPTION_WAL_RETENTION_SIZE, &t); + yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-3].minor.yy28, DB_OPTION_WAL_RETENTION_SIZE, &t); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; +#line 5490 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 113: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 120: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ +#line 253 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); } +#line 5496 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 114: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 121: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ +#line 254 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); } +#line 5502 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 115: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 122: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */ +#line 255 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); } +#line 5508 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 116: /* db_options ::= db_options TABLE_PREFIX signed */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_TABLE_PREFIX, yymsp[0].minor.yy952); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 123: /* db_options ::= db_options TABLE_PREFIX signed */ +#line 256 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_TABLE_PREFIX, yymsp[0].minor.yy28); } +#line 5514 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 117: /* db_options ::= db_options TABLE_SUFFIX signed */ -{ yylhsminor.yy952 = setDatabaseOption(pCxt, yymsp[-2].minor.yy952, DB_OPTION_TABLE_SUFFIX, yymsp[0].minor.yy952); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 124: /* db_options ::= db_options TABLE_SUFFIX signed */ +#line 257 "sql.y" +{ yylhsminor.yy28 = setDatabaseOption(pCxt, yymsp[-2].minor.yy28, DB_OPTION_TABLE_SUFFIX, yymsp[0].minor.yy28); } +#line 5520 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 118: /* alter_db_options ::= alter_db_option */ -{ yylhsminor.yy952 = createAlterDatabaseOptions(pCxt); yylhsminor.yy952 = setAlterDatabaseOption(pCxt, yylhsminor.yy952, &yymsp[0].minor.yy25); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 125: /* alter_db_options ::= alter_db_option */ +#line 259 "sql.y" +{ yylhsminor.yy28 = createAlterDatabaseOptions(pCxt); yylhsminor.yy28 = setAlterDatabaseOption(pCxt, yylhsminor.yy28, &yymsp[0].minor.yy481); } +#line 5526 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 119: /* alter_db_options ::= alter_db_options alter_db_option */ -{ yylhsminor.yy952 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy952, &yymsp[0].minor.yy25); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; + case 126: /* alter_db_options ::= alter_db_options alter_db_option */ +#line 260 "sql.y" +{ yylhsminor.yy28 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy28, &yymsp[0].minor.yy481); } +#line 5532 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 120: /* alter_db_option ::= BUFFER NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 127: /* alter_db_option ::= BUFFER NK_INTEGER */ +#line 264 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5538 "sql.c" break; - case 121: /* alter_db_option ::= CACHEMODEL NK_STRING */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 128: /* alter_db_option ::= CACHEMODEL NK_STRING */ +#line 265 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5543 "sql.c" break; - case 122: /* alter_db_option ::= CACHESIZE NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 129: /* alter_db_option ::= CACHESIZE NK_INTEGER */ +#line 266 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5548 "sql.c" break; - case 123: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 130: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ +#line 267 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5553 "sql.c" break; - case 124: /* alter_db_option ::= KEEP integer_list */ - case 125: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==125); -{ yymsp[-1].minor.yy25.type = DB_OPTION_KEEP; yymsp[-1].minor.yy25.pList = yymsp[0].minor.yy824; } + case 131: /* alter_db_option ::= KEEP integer_list */ + case 132: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==132); +#line 268 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_KEEP; yymsp[-1].minor.yy481.pList = yymsp[0].minor.yy236; } +#line 5559 "sql.c" break; - case 126: /* alter_db_option ::= PAGES NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_PAGES; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 133: /* alter_db_option ::= PAGES NK_INTEGER */ +#line 270 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_PAGES; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5564 "sql.c" break; - case 127: /* alter_db_option ::= REPLICA NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 134: /* alter_db_option ::= REPLICA NK_INTEGER */ +#line 271 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5569 "sql.c" break; - case 128: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_WAL; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 135: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */ +#line 273 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_WAL; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5574 "sql.c" break; - case 129: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 136: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */ +#line 274 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5579 "sql.c" break; - case 130: /* alter_db_option ::= MINROWS NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_MINROWS; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 137: /* alter_db_option ::= MINROWS NK_INTEGER */ +#line 275 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_MINROWS; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5584 "sql.c" break; - case 131: /* alter_db_option ::= WAL_RETENTION_PERIOD NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_WAL_RETENTION_PERIOD; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 138: /* alter_db_option ::= WAL_RETENTION_PERIOD NK_INTEGER */ +#line 276 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_WAL_RETENTION_PERIOD; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5589 "sql.c" break; - case 132: /* alter_db_option ::= WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + case 139: /* alter_db_option ::= WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ +#line 277 "sql.y" { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; - yymsp[-2].minor.yy25.type = DB_OPTION_WAL_RETENTION_PERIOD; yymsp[-2].minor.yy25.val = t; + yymsp[-2].minor.yy481.type = DB_OPTION_WAL_RETENTION_PERIOD; yymsp[-2].minor.yy481.val = t; } +#line 5598 "sql.c" break; - case 133: /* alter_db_option ::= WAL_RETENTION_SIZE NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = DB_OPTION_WAL_RETENTION_SIZE; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } + case 140: /* alter_db_option ::= WAL_RETENTION_SIZE NK_INTEGER */ +#line 282 "sql.y" +{ yymsp[-1].minor.yy481.type = DB_OPTION_WAL_RETENTION_SIZE; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 5603 "sql.c" break; - case 134: /* alter_db_option ::= WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + case 141: /* alter_db_option ::= WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ +#line 283 "sql.y" { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; - yymsp[-2].minor.yy25.type = DB_OPTION_WAL_RETENTION_SIZE; yymsp[-2].minor.yy25.val = t; + yymsp[-2].minor.yy481.type = DB_OPTION_WAL_RETENTION_SIZE; yymsp[-2].minor.yy481.val = t; } - break; - case 135: /* integer_list ::= NK_INTEGER */ -{ yylhsminor.yy824 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy824 = yylhsminor.yy824; - break; - case 136: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ - case 368: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==368); -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; - break; - case 137: /* variable_list ::= NK_VARIABLE */ -{ yylhsminor.yy824 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy824 = yylhsminor.yy824; - break; - case 138: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */ -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; - break; - case 139: /* retention_list ::= retention */ - case 169: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==169); - case 172: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==172); - case 179: /* column_def_list ::= column_def */ yytestcase(yyruleno==179); - case 224: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==224); - case 229: /* col_name_list ::= col_name */ yytestcase(yyruleno==229); - case 283: /* tag_list_opt ::= tag_item */ yytestcase(yyruleno==283); - case 297: /* func_list ::= func */ yytestcase(yyruleno==297); - case 397: /* literal_list ::= signed_literal */ yytestcase(yyruleno==397); - case 464: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==464); - case 470: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==470); - case 529: /* select_list ::= select_item */ yytestcase(yyruleno==529); - case 540: /* partition_list ::= partition_item */ yytestcase(yyruleno==540); - case 596: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==596); -{ yylhsminor.yy824 = createNodeList(pCxt, yymsp[0].minor.yy952); } - yymsp[0].minor.yy824 = yylhsminor.yy824; - break; - case 140: /* retention_list ::= retention_list NK_COMMA retention */ - case 173: /* multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause */ yytestcase(yyruleno==173); - case 180: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==180); - case 225: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==225); - case 230: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==230); - case 284: /* tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ yytestcase(yyruleno==284); - case 298: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==298); - case 398: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==398); - case 465: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==465); - case 530: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==530); - case 541: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==541); - case 597: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==597); -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, yymsp[0].minor.yy952); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; - break; - case 141: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ -{ yylhsminor.yy952 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; - break; - case 142: /* speed_opt ::= */ - case 331: /* bufsize_opt ::= */ yytestcase(yyruleno==331); -{ yymsp[1].minor.yy480 = 0; } - break; - case 143: /* speed_opt ::= MAX_SPEED NK_INTEGER */ - case 332: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ yytestcase(yyruleno==332); -{ yymsp[-1].minor.yy480 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } - break; - case 145: /* start_opt ::= START WITH NK_INTEGER */ - case 149: /* end_opt ::= END WITH NK_INTEGER */ yytestcase(yyruleno==149); -{ yymsp[-2].minor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0); } - break; - case 146: /* start_opt ::= START WITH NK_STRING */ - case 150: /* end_opt ::= END WITH NK_STRING */ yytestcase(yyruleno==150); -{ yymsp[-2].minor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } - break; - case 147: /* start_opt ::= START WITH TIMESTAMP NK_STRING */ - case 151: /* end_opt ::= END WITH TIMESTAMP NK_STRING */ yytestcase(yyruleno==151); -{ yymsp[-3].minor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } - break; - case 152: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - case 154: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==154); -{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy957, yymsp[-5].minor.yy952, yymsp[-3].minor.yy824, yymsp[-1].minor.yy824, yymsp[0].minor.yy952); } - break; - case 153: /* cmd ::= CREATE TABLE multi_create_clause */ -{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy824); } - break; - case 155: /* cmd ::= DROP TABLE multi_drop_clause */ -{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy824); } - break; - case 156: /* cmd ::= DROP STABLE exists_opt full_table_name */ -{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy957, yymsp[0].minor.yy952); } - break; - case 157: /* cmd ::= ALTER TABLE alter_table_clause */ - case 370: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==370); - case 371: /* cmd ::= insert_query */ yytestcase(yyruleno==371); -{ pCxt->pRootNode = yymsp[0].minor.yy952; } - break; - case 158: /* cmd ::= ALTER STABLE alter_table_clause */ -{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy952); } - break; - case 159: /* alter_table_clause ::= full_table_name alter_table_options */ -{ yylhsminor.yy952 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy952, yymsp[0].minor.yy952); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; - break; - case 160: /* alter_table_clause ::= full_table_name ADD COLUMN column_def */ -{ yylhsminor.yy952 = createAlterTableAddModifyCol(pCxt, yymsp[-3].minor.yy952, TSDB_ALTER_TABLE_ADD_COLUMN, yymsp[0].minor.yy952); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; - break; - case 161: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ -{ yylhsminor.yy952 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy952, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy169); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; - break; - case 162: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_def */ -{ yylhsminor.yy952 = createAlterTableAddModifyCol(pCxt, yymsp[-3].minor.yy952, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, yymsp[0].minor.yy952); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; - break; - case 163: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ -{ yylhsminor.yy952 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy952, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy169, &yymsp[0].minor.yy169); } - yymsp[-4].minor.yy952 = yylhsminor.yy952; - break; - case 164: /* alter_table_clause ::= full_table_name ADD TAG column_def */ -{ yylhsminor.yy952 = createAlterTableAddModifyCol(pCxt, yymsp[-3].minor.yy952, TSDB_ALTER_TABLE_ADD_TAG, yymsp[0].minor.yy952); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; - break; - case 165: /* alter_table_clause ::= full_table_name DROP TAG column_name */ -{ yylhsminor.yy952 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy952, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy169); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; - break; - case 166: /* alter_table_clause ::= full_table_name MODIFY TAG column_def */ -{ yylhsminor.yy952 = createAlterTableAddModifyCol(pCxt, yymsp[-3].minor.yy952, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, yymsp[0].minor.yy952); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; - break; - case 167: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ -{ yylhsminor.yy952 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy952, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy169, &yymsp[0].minor.yy169); } - yymsp[-4].minor.yy952 = yylhsminor.yy952; - break; - case 168: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ -{ yylhsminor.yy952 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy952, &yymsp[-2].minor.yy169, yymsp[0].minor.yy952); } - yymsp[-5].minor.yy952 = yylhsminor.yy952; - break; - case 170: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ - case 471: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==471); -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-1].minor.yy824, yymsp[0].minor.yy952); } - yymsp[-1].minor.yy824 = yylhsminor.yy824; - break; - case 171: /* create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ -{ yylhsminor.yy952 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy957, yymsp[-8].minor.yy952, yymsp[-6].minor.yy952, yymsp[-5].minor.yy824, yymsp[-2].minor.yy824, yymsp[0].minor.yy952); } - yymsp[-9].minor.yy952 = yylhsminor.yy952; - break; - case 174: /* drop_table_clause ::= exists_opt full_table_name */ -{ yylhsminor.yy952 = createDropTableClause(pCxt, yymsp[-1].minor.yy957, yymsp[0].minor.yy952); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; - break; - case 175: /* specific_cols_opt ::= */ - case 207: /* tags_def_opt ::= */ yytestcase(yyruleno==207); - case 282: /* tag_list_opt ::= */ yytestcase(yyruleno==282); - case 341: /* col_list_opt ::= */ yytestcase(yyruleno==341); - case 343: /* tag_def_or_ref_opt ::= */ yytestcase(yyruleno==343); - case 538: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==538); - case 563: /* group_by_clause_opt ::= */ yytestcase(yyruleno==563); - case 583: /* order_by_clause_opt ::= */ yytestcase(yyruleno==583); -{ yymsp[1].minor.yy824 = NULL; } - break; - case 176: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ - case 342: /* col_list_opt ::= NK_LP col_name_list NK_RP */ yytestcase(yyruleno==342); -{ yymsp[-2].minor.yy824 = yymsp[-1].minor.yy824; } - break; - case 177: /* full_table_name ::= table_name */ -{ yylhsminor.yy952 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy169, NULL); } - yymsp[0].minor.yy952 = yylhsminor.yy952; - break; - case 178: /* full_table_name ::= db_name NK_DOT table_name */ -{ yylhsminor.yy952 = createRealTableNode(pCxt, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy169, NULL); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; - break; - case 181: /* column_def ::= column_name type_name */ -{ yylhsminor.yy952 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy169, yymsp[0].minor.yy84, NULL); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; - break; - case 182: /* column_def ::= column_name type_name COMMENT NK_STRING */ -{ yylhsminor.yy952 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy169, yymsp[-2].minor.yy84, &yymsp[0].minor.yy0); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; - break; - case 183: /* type_name ::= BOOL */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_BOOL); } - break; - case 184: /* type_name ::= TINYINT */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_TINYINT); } - break; - case 185: /* type_name ::= SMALLINT */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_SMALLINT); } - break; - case 186: /* type_name ::= INT */ - case 187: /* type_name ::= INTEGER */ yytestcase(yyruleno==187); -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_INT); } - break; - case 188: /* type_name ::= BIGINT */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_BIGINT); } - break; - case 189: /* type_name ::= FLOAT */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_FLOAT); } - break; - case 190: /* type_name ::= DOUBLE */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_DOUBLE); } - break; - case 191: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } - break; - case 192: /* type_name ::= TIMESTAMP */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } - break; - case 193: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } - break; - case 194: /* type_name ::= TINYINT UNSIGNED */ -{ yymsp[-1].minor.yy84 = createDataType(TSDB_DATA_TYPE_UTINYINT); } - break; - case 195: /* type_name ::= SMALLINT UNSIGNED */ -{ yymsp[-1].minor.yy84 = createDataType(TSDB_DATA_TYPE_USMALLINT); } - break; - case 196: /* type_name ::= INT UNSIGNED */ -{ yymsp[-1].minor.yy84 = createDataType(TSDB_DATA_TYPE_UINT); } - break; - case 197: /* type_name ::= BIGINT UNSIGNED */ -{ yymsp[-1].minor.yy84 = createDataType(TSDB_DATA_TYPE_UBIGINT); } - break; - case 198: /* type_name ::= JSON */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_JSON); } - break; - case 199: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } - break; - case 200: /* type_name ::= MEDIUMBLOB */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } - break; - case 201: /* type_name ::= BLOB */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_BLOB); } - break; - case 202: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } - break; - case 203: /* type_name ::= GEOMETRY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createVarLenDataType(TSDB_DATA_TYPE_GEOMETRY, &yymsp[-1].minor.yy0); } - break; - case 204: /* type_name ::= DECIMAL */ -{ yymsp[0].minor.yy84 = createDataType(TSDB_DATA_TYPE_DECIMAL); } - break; - case 205: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy84 = createDataType(TSDB_DATA_TYPE_DECIMAL); } - break; - case 206: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ -{ yymsp[-5].minor.yy84 = createDataType(TSDB_DATA_TYPE_DECIMAL); } - break; - case 208: /* tags_def_opt ::= tags_def */ - case 344: /* tag_def_or_ref_opt ::= tags_def */ yytestcase(yyruleno==344); - case 463: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==463); -{ yylhsminor.yy824 = yymsp[0].minor.yy824; } - yymsp[0].minor.yy824 = yylhsminor.yy824; - break; - case 209: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ - case 345: /* tag_def_or_ref_opt ::= TAGS NK_LP col_name_list NK_RP */ yytestcase(yyruleno==345); -{ yymsp[-3].minor.yy824 = yymsp[-1].minor.yy824; } - break; - case 210: /* table_options ::= */ -{ yymsp[1].minor.yy952 = createDefaultTableOptions(pCxt); } - break; - case 211: /* table_options ::= table_options COMMENT NK_STRING */ -{ yylhsminor.yy952 = setTableOption(pCxt, yymsp[-2].minor.yy952, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; - break; - case 212: /* table_options ::= table_options MAX_DELAY duration_list */ -{ yylhsminor.yy952 = setTableOption(pCxt, yymsp[-2].minor.yy952, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; - break; - case 213: /* table_options ::= table_options WATERMARK duration_list */ -{ yylhsminor.yy952 = setTableOption(pCxt, yymsp[-2].minor.yy952, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; - break; - case 214: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ -{ yylhsminor.yy952 = setTableOption(pCxt, yymsp[-4].minor.yy952, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy824); } - yymsp[-4].minor.yy952 = yylhsminor.yy952; - break; - case 215: /* table_options ::= table_options TTL NK_INTEGER */ -{ yylhsminor.yy952 = setTableOption(pCxt, yymsp[-2].minor.yy952, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; - break; - case 216: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ -{ yylhsminor.yy952 = setTableOption(pCxt, yymsp[-4].minor.yy952, TABLE_OPTION_SMA, yymsp[-1].minor.yy824); } - yymsp[-4].minor.yy952 = yylhsminor.yy952; - break; - case 217: /* table_options ::= table_options DELETE_MARK duration_list */ -{ yylhsminor.yy952 = setTableOption(pCxt, yymsp[-2].minor.yy952, TABLE_OPTION_DELETE_MARK, yymsp[0].minor.yy824); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; - break; - case 218: /* alter_table_options ::= alter_table_option */ -{ yylhsminor.yy952 = createAlterTableOptions(pCxt); yylhsminor.yy952 = setTableOption(pCxt, yylhsminor.yy952, yymsp[0].minor.yy25.type, &yymsp[0].minor.yy25.val); } - yymsp[0].minor.yy952 = yylhsminor.yy952; - break; - case 219: /* alter_table_options ::= alter_table_options alter_table_option */ -{ yylhsminor.yy952 = setTableOption(pCxt, yymsp[-1].minor.yy952, yymsp[0].minor.yy25.type, &yymsp[0].minor.yy25.val); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; - break; - case 220: /* alter_table_option ::= COMMENT NK_STRING */ -{ yymsp[-1].minor.yy25.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } - break; - case 221: /* alter_table_option ::= TTL NK_INTEGER */ -{ yymsp[-1].minor.yy25.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy25.val = yymsp[0].minor.yy0; } - break; - case 222: /* duration_list ::= duration_literal */ - case 427: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==427); -{ yylhsminor.yy824 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy952)); } - yymsp[0].minor.yy824 = yylhsminor.yy824; - break; - case 223: /* duration_list ::= duration_list NK_COMMA duration_literal */ - case 428: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==428); -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, releaseRawExprNode(pCxt, yymsp[0].minor.yy952)); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; - break; - case 226: /* rollup_func_name ::= function_name */ -{ yylhsminor.yy952 = createFunctionNode(pCxt, &yymsp[0].minor.yy169, NULL); } - yymsp[0].minor.yy952 = yylhsminor.yy952; - break; - case 227: /* rollup_func_name ::= FIRST */ - case 228: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==228); - case 286: /* tag_item ::= QTAGS */ yytestcase(yyruleno==286); -{ yylhsminor.yy952 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } - yymsp[0].minor.yy952 = yylhsminor.yy952; - break; - case 231: /* col_name ::= column_name */ - case 287: /* tag_item ::= column_name */ yytestcase(yyruleno==287); -{ yylhsminor.yy952 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy169); } - yymsp[0].minor.yy952 = yylhsminor.yy952; - break; - case 232: /* cmd ::= SHOW DNODES */ +#line 5612 "sql.c" + break; + case 142: /* integer_list ::= NK_INTEGER */ +#line 291 "sql.y" +{ yylhsminor.yy236 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } +#line 5617 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; + break; + case 143: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ + case 375: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==375); +#line 292 "sql.y" +{ yylhsminor.yy236 = addNodeToList(pCxt, yymsp[-2].minor.yy236, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } +#line 5624 "sql.c" + yymsp[-2].minor.yy236 = yylhsminor.yy236; + break; + case 144: /* variable_list ::= NK_VARIABLE */ +#line 296 "sql.y" +{ yylhsminor.yy236 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } +#line 5630 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; + break; + case 145: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */ +#line 297 "sql.y" +{ yylhsminor.yy236 = addNodeToList(pCxt, yymsp[-2].minor.yy236, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } +#line 5636 "sql.c" + yymsp[-2].minor.yy236 = yylhsminor.yy236; + break; + case 146: /* retention_list ::= retention */ + case 176: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==176); + case 179: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==179); + case 186: /* column_def_list ::= column_def */ yytestcase(yyruleno==186); + case 231: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==231); + case 236: /* col_name_list ::= col_name */ yytestcase(yyruleno==236); + case 290: /* tag_list_opt ::= tag_item */ yytestcase(yyruleno==290); + case 304: /* func_list ::= func */ yytestcase(yyruleno==304); + case 404: /* literal_list ::= signed_literal */ yytestcase(yyruleno==404); + case 471: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==471); + case 477: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==477); + case 536: /* select_list ::= select_item */ yytestcase(yyruleno==536); + case 547: /* partition_list ::= partition_item */ yytestcase(yyruleno==547); + case 603: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==603); +#line 301 "sql.y" +{ yylhsminor.yy236 = createNodeList(pCxt, yymsp[0].minor.yy28); } +#line 5655 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; + break; + case 147: /* retention_list ::= retention_list NK_COMMA retention */ + case 180: /* multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause */ yytestcase(yyruleno==180); + case 187: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==187); + case 232: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==232); + case 237: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==237); + case 291: /* tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ yytestcase(yyruleno==291); + case 305: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==305); + case 405: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==405); + case 472: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==472); + case 537: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==537); + case 548: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==548); + case 604: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==604); +#line 302 "sql.y" +{ yylhsminor.yy236 = addNodeToList(pCxt, yymsp[-2].minor.yy236, yymsp[0].minor.yy28); } +#line 5672 "sql.c" + yymsp[-2].minor.yy236 = yylhsminor.yy236; + break; + case 148: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ +#line 304 "sql.y" +{ yylhsminor.yy28 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } +#line 5678 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; + break; + case 149: /* speed_opt ::= */ + case 338: /* bufsize_opt ::= */ yytestcase(yyruleno==338); +#line 308 "sql.y" +{ yymsp[1].minor.yy956 = 0; } +#line 5685 "sql.c" + break; + case 150: /* speed_opt ::= MAX_SPEED NK_INTEGER */ + case 339: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ yytestcase(yyruleno==339); +#line 309 "sql.y" +{ yymsp[-1].minor.yy956 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } +#line 5691 "sql.c" + break; + case 152: /* start_opt ::= START WITH NK_INTEGER */ + case 156: /* end_opt ::= END WITH NK_INTEGER */ yytestcase(yyruleno==156); +#line 312 "sql.y" +{ yymsp[-2].minor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0); } +#line 5697 "sql.c" + break; + case 153: /* start_opt ::= START WITH NK_STRING */ + case 157: /* end_opt ::= END WITH NK_STRING */ yytestcase(yyruleno==157); +#line 313 "sql.y" +{ yymsp[-2].minor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } +#line 5703 "sql.c" + break; + case 154: /* start_opt ::= START WITH TIMESTAMP NK_STRING */ + case 158: /* end_opt ::= END WITH TIMESTAMP NK_STRING */ yytestcase(yyruleno==158); +#line 314 "sql.y" +{ yymsp[-3].minor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } +#line 5709 "sql.c" + break; + case 159: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ + case 161: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==161); +#line 323 "sql.y" +{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy793, yymsp[-5].minor.yy28, yymsp[-3].minor.yy236, yymsp[-1].minor.yy236, yymsp[0].minor.yy28); } +#line 5715 "sql.c" + break; + case 160: /* cmd ::= CREATE TABLE multi_create_clause */ +#line 324 "sql.y" +{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy236); } +#line 5720 "sql.c" + break; + case 162: /* cmd ::= DROP TABLE multi_drop_clause */ +#line 327 "sql.y" +{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy236); } +#line 5725 "sql.c" + break; + case 163: /* cmd ::= DROP STABLE exists_opt full_table_name */ +#line 328 "sql.y" +{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy793, yymsp[0].minor.yy28); } +#line 5730 "sql.c" + break; + case 164: /* cmd ::= ALTER TABLE alter_table_clause */ + case 377: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==377); + case 378: /* cmd ::= insert_query */ yytestcase(yyruleno==378); +#line 330 "sql.y" +{ pCxt->pRootNode = yymsp[0].minor.yy28; } +#line 5737 "sql.c" + break; + case 165: /* cmd ::= ALTER STABLE alter_table_clause */ +#line 331 "sql.y" +{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy28); } +#line 5742 "sql.c" + break; + case 166: /* alter_table_clause ::= full_table_name alter_table_options */ +#line 333 "sql.y" +{ yylhsminor.yy28 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy28, yymsp[0].minor.yy28); } +#line 5747 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; + break; + case 167: /* alter_table_clause ::= full_table_name ADD COLUMN column_def */ +#line 335 "sql.y" +{ yylhsminor.yy28 = createAlterTableAddModifyCol(pCxt, yymsp[-3].minor.yy28, TSDB_ALTER_TABLE_ADD_COLUMN, yymsp[0].minor.yy28); } +#line 5753 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; + break; + case 168: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ +#line 336 "sql.y" +{ yylhsminor.yy28 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy28, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy889); } +#line 5759 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; + break; + case 169: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_def */ +#line 338 "sql.y" +{ yylhsminor.yy28 = createAlterTableAddModifyCol(pCxt, yymsp[-3].minor.yy28, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, yymsp[0].minor.yy28); } +#line 5765 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; + break; + case 170: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ +#line 340 "sql.y" +{ yylhsminor.yy28 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy28, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy889, &yymsp[0].minor.yy889); } +#line 5771 "sql.c" + yymsp[-4].minor.yy28 = yylhsminor.yy28; + break; + case 171: /* alter_table_clause ::= full_table_name ADD TAG column_def */ +#line 342 "sql.y" +{ yylhsminor.yy28 = createAlterTableAddModifyCol(pCxt, yymsp[-3].minor.yy28, TSDB_ALTER_TABLE_ADD_TAG, yymsp[0].minor.yy28); } +#line 5777 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; + break; + case 172: /* alter_table_clause ::= full_table_name DROP TAG column_name */ +#line 343 "sql.y" +{ yylhsminor.yy28 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy28, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy889); } +#line 5783 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; + break; + case 173: /* alter_table_clause ::= full_table_name MODIFY TAG column_def */ +#line 345 "sql.y" +{ yylhsminor.yy28 = createAlterTableAddModifyCol(pCxt, yymsp[-3].minor.yy28, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, yymsp[0].minor.yy28); } +#line 5789 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; + break; + case 174: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ +#line 347 "sql.y" +{ yylhsminor.yy28 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy28, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy889, &yymsp[0].minor.yy889); } +#line 5795 "sql.c" + yymsp[-4].minor.yy28 = yylhsminor.yy28; + break; + case 175: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ +#line 349 "sql.y" +{ yylhsminor.yy28 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy28, &yymsp[-2].minor.yy889, yymsp[0].minor.yy28); } +#line 5801 "sql.c" + yymsp[-5].minor.yy28 = yylhsminor.yy28; + break; + case 177: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ + case 478: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==478); +#line 354 "sql.y" +{ yylhsminor.yy236 = addNodeToList(pCxt, yymsp[-1].minor.yy236, yymsp[0].minor.yy28); } +#line 5808 "sql.c" + yymsp[-1].minor.yy236 = yylhsminor.yy236; + break; + case 178: /* create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */ +#line 358 "sql.y" +{ yylhsminor.yy28 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy793, yymsp[-8].minor.yy28, yymsp[-6].minor.yy28, yymsp[-5].minor.yy236, yymsp[-2].minor.yy236, yymsp[0].minor.yy28); } +#line 5814 "sql.c" + yymsp[-9].minor.yy28 = yylhsminor.yy28; + break; + case 181: /* drop_table_clause ::= exists_opt full_table_name */ +#line 365 "sql.y" +{ yylhsminor.yy28 = createDropTableClause(pCxt, yymsp[-1].minor.yy793, yymsp[0].minor.yy28); } +#line 5820 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; + break; + case 183: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ + case 349: /* col_list_opt ::= NK_LP col_name_list NK_RP */ yytestcase(yyruleno==349); +#line 370 "sql.y" +{ yymsp[-2].minor.yy236 = yymsp[-1].minor.yy236; } +#line 5827 "sql.c" + break; + case 184: /* full_table_name ::= table_name */ +#line 372 "sql.y" +{ yylhsminor.yy28 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy889, NULL); } +#line 5832 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; + break; + case 185: /* full_table_name ::= db_name NK_DOT table_name */ +#line 373 "sql.y" +{ yylhsminor.yy28 = createRealTableNode(pCxt, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy889, NULL); } +#line 5838 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; + break; + case 188: /* column_def ::= column_name type_name */ +#line 380 "sql.y" +{ yylhsminor.yy28 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy889, yymsp[0].minor.yy32, NULL); } +#line 5844 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; + break; + case 189: /* column_def ::= column_name type_name COMMENT NK_STRING */ +#line 381 "sql.y" +{ yylhsminor.yy28 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy889, yymsp[-2].minor.yy32, &yymsp[0].minor.yy0); } +#line 5850 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; + break; + case 190: /* type_name ::= BOOL */ +#line 385 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_BOOL); } +#line 5856 "sql.c" + break; + case 191: /* type_name ::= TINYINT */ +#line 386 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_TINYINT); } +#line 5861 "sql.c" + break; + case 192: /* type_name ::= SMALLINT */ +#line 387 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_SMALLINT); } +#line 5866 "sql.c" + break; + case 193: /* type_name ::= INT */ + case 194: /* type_name ::= INTEGER */ yytestcase(yyruleno==194); +#line 388 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_INT); } +#line 5872 "sql.c" + break; + case 195: /* type_name ::= BIGINT */ +#line 390 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_BIGINT); } +#line 5877 "sql.c" + break; + case 196: /* type_name ::= FLOAT */ +#line 391 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_FLOAT); } +#line 5882 "sql.c" + break; + case 197: /* type_name ::= DOUBLE */ +#line 392 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_DOUBLE); } +#line 5887 "sql.c" + break; + case 198: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ +#line 393 "sql.y" +{ yymsp[-3].minor.yy32 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } +#line 5892 "sql.c" + break; + case 199: /* type_name ::= TIMESTAMP */ +#line 394 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } +#line 5897 "sql.c" + break; + case 200: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ +#line 395 "sql.y" +{ yymsp[-3].minor.yy32 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } +#line 5902 "sql.c" + break; + case 201: /* type_name ::= TINYINT UNSIGNED */ +#line 396 "sql.y" +{ yymsp[-1].minor.yy32 = createDataType(TSDB_DATA_TYPE_UTINYINT); } +#line 5907 "sql.c" + break; + case 202: /* type_name ::= SMALLINT UNSIGNED */ +#line 397 "sql.y" +{ yymsp[-1].minor.yy32 = createDataType(TSDB_DATA_TYPE_USMALLINT); } +#line 5912 "sql.c" + break; + case 203: /* type_name ::= INT UNSIGNED */ +#line 398 "sql.y" +{ yymsp[-1].minor.yy32 = createDataType(TSDB_DATA_TYPE_UINT); } +#line 5917 "sql.c" + break; + case 204: /* type_name ::= BIGINT UNSIGNED */ +#line 399 "sql.y" +{ yymsp[-1].minor.yy32 = createDataType(TSDB_DATA_TYPE_UBIGINT); } +#line 5922 "sql.c" + break; + case 205: /* type_name ::= JSON */ +#line 400 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_JSON); } +#line 5927 "sql.c" + break; + case 206: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ +#line 401 "sql.y" +{ yymsp[-3].minor.yy32 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } +#line 5932 "sql.c" + break; + case 207: /* type_name ::= MEDIUMBLOB */ +#line 402 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } +#line 5937 "sql.c" + break; + case 208: /* type_name ::= BLOB */ +#line 403 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_BLOB); } +#line 5942 "sql.c" + break; + case 209: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ +#line 404 "sql.y" +{ yymsp[-3].minor.yy32 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } +#line 5947 "sql.c" + break; + case 210: /* type_name ::= GEOMETRY NK_LP NK_INTEGER NK_RP */ +#line 405 "sql.y" +{ yymsp[-3].minor.yy32 = createVarLenDataType(TSDB_DATA_TYPE_GEOMETRY, &yymsp[-1].minor.yy0); } +#line 5952 "sql.c" + break; + case 211: /* type_name ::= DECIMAL */ +#line 406 "sql.y" +{ yymsp[0].minor.yy32 = createDataType(TSDB_DATA_TYPE_DECIMAL); } +#line 5957 "sql.c" + break; + case 212: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ +#line 407 "sql.y" +{ yymsp[-3].minor.yy32 = createDataType(TSDB_DATA_TYPE_DECIMAL); } +#line 5962 "sql.c" + break; + case 213: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ +#line 408 "sql.y" +{ yymsp[-5].minor.yy32 = createDataType(TSDB_DATA_TYPE_DECIMAL); } +#line 5967 "sql.c" + break; + case 216: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ + case 352: /* tag_def_or_ref_opt ::= TAGS NK_LP col_name_list NK_RP */ yytestcase(yyruleno==352); +#line 417 "sql.y" +{ yymsp[-3].minor.yy236 = yymsp[-1].minor.yy236; } +#line 5973 "sql.c" + break; + case 217: /* table_options ::= */ +#line 419 "sql.y" +{ yymsp[1].minor.yy28 = createDefaultTableOptions(pCxt); } +#line 5978 "sql.c" + break; + case 218: /* table_options ::= table_options COMMENT NK_STRING */ +#line 420 "sql.y" +{ yylhsminor.yy28 = setTableOption(pCxt, yymsp[-2].minor.yy28, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } +#line 5983 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; + break; + case 219: /* table_options ::= table_options MAX_DELAY duration_list */ +#line 421 "sql.y" +{ yylhsminor.yy28 = setTableOption(pCxt, yymsp[-2].minor.yy28, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy236); } +#line 5989 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; + break; + case 220: /* table_options ::= table_options WATERMARK duration_list */ +#line 422 "sql.y" +{ yylhsminor.yy28 = setTableOption(pCxt, yymsp[-2].minor.yy28, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy236); } +#line 5995 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; + break; + case 221: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ +#line 423 "sql.y" +{ yylhsminor.yy28 = setTableOption(pCxt, yymsp[-4].minor.yy28, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy236); } +#line 6001 "sql.c" + yymsp[-4].minor.yy28 = yylhsminor.yy28; + break; + case 222: /* table_options ::= table_options TTL NK_INTEGER */ +#line 424 "sql.y" +{ yylhsminor.yy28 = setTableOption(pCxt, yymsp[-2].minor.yy28, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } +#line 6007 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; + break; + case 223: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ +#line 425 "sql.y" +{ yylhsminor.yy28 = setTableOption(pCxt, yymsp[-4].minor.yy28, TABLE_OPTION_SMA, yymsp[-1].minor.yy236); } +#line 6013 "sql.c" + yymsp[-4].minor.yy28 = yylhsminor.yy28; + break; + case 224: /* table_options ::= table_options DELETE_MARK duration_list */ +#line 426 "sql.y" +{ yylhsminor.yy28 = setTableOption(pCxt, yymsp[-2].minor.yy28, TABLE_OPTION_DELETE_MARK, yymsp[0].minor.yy236); } +#line 6019 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; + break; + case 225: /* alter_table_options ::= alter_table_option */ +#line 428 "sql.y" +{ yylhsminor.yy28 = createAlterTableOptions(pCxt); yylhsminor.yy28 = setTableOption(pCxt, yylhsminor.yy28, yymsp[0].minor.yy481.type, &yymsp[0].minor.yy481.val); } +#line 6025 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; + break; + case 226: /* alter_table_options ::= alter_table_options alter_table_option */ +#line 429 "sql.y" +{ yylhsminor.yy28 = setTableOption(pCxt, yymsp[-1].minor.yy28, yymsp[0].minor.yy481.type, &yymsp[0].minor.yy481.val); } +#line 6031 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; + break; + case 227: /* alter_table_option ::= COMMENT NK_STRING */ +#line 433 "sql.y" +{ yymsp[-1].minor.yy481.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 6037 "sql.c" + break; + case 228: /* alter_table_option ::= TTL NK_INTEGER */ +#line 434 "sql.y" +{ yymsp[-1].minor.yy481.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy481.val = yymsp[0].minor.yy0; } +#line 6042 "sql.c" + break; + case 229: /* duration_list ::= duration_literal */ + case 434: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==434); +#line 438 "sql.y" +{ yylhsminor.yy236 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy28)); } +#line 6048 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; + break; + case 230: /* duration_list ::= duration_list NK_COMMA duration_literal */ + case 435: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==435); +#line 439 "sql.y" +{ yylhsminor.yy236 = addNodeToList(pCxt, yymsp[-2].minor.yy236, releaseRawExprNode(pCxt, yymsp[0].minor.yy28)); } +#line 6055 "sql.c" + yymsp[-2].minor.yy236 = yylhsminor.yy236; + break; + case 233: /* rollup_func_name ::= function_name */ +#line 446 "sql.y" +{ yylhsminor.yy28 = createFunctionNode(pCxt, &yymsp[0].minor.yy889, NULL); } +#line 6061 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; + break; + case 234: /* rollup_func_name ::= FIRST */ + case 235: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==235); + case 293: /* tag_item ::= QTAGS */ yytestcase(yyruleno==293); +#line 447 "sql.y" +{ yylhsminor.yy28 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } +#line 6069 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; + break; + case 238: /* col_name ::= column_name */ + case 294: /* tag_item ::= column_name */ yytestcase(yyruleno==294); +#line 455 "sql.y" +{ yylhsminor.yy28 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy889); } +#line 6076 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; + break; + case 239: /* cmd ::= SHOW DNODES */ +#line 458 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); } +#line 6082 "sql.c" break; - case 233: /* cmd ::= SHOW USERS */ + case 240: /* cmd ::= SHOW USERS */ +#line 459 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); } +#line 6087 "sql.c" break; - case 234: /* cmd ::= SHOW USER PRIVILEGES */ + case 241: /* cmd ::= SHOW USER PRIVILEGES */ +#line 460 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USER_PRIVILEGES_STMT); } +#line 6092 "sql.c" break; - case 235: /* cmd ::= SHOW DATABASES */ + case 242: /* cmd ::= SHOW DATABASES */ +#line 461 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT); } +#line 6097 "sql.c" break; - case 236: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy952, yymsp[0].minor.yy952, OP_TYPE_LIKE); } + case 243: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ +#line 462 "sql.y" +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy28, yymsp[0].minor.yy28, OP_TYPE_LIKE); } +#line 6102 "sql.c" break; - case 237: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy952, yymsp[0].minor.yy952, OP_TYPE_LIKE); } + case 244: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ +#line 463 "sql.y" +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy28, yymsp[0].minor.yy28, OP_TYPE_LIKE); } +#line 6107 "sql.c" break; - case 238: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy952, NULL, OP_TYPE_LIKE); } + case 245: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ +#line 464 "sql.y" +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy28, NULL, OP_TYPE_LIKE); } +#line 6112 "sql.c" break; - case 239: /* cmd ::= SHOW MNODES */ + case 246: /* cmd ::= SHOW MNODES */ +#line 465 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); } +#line 6117 "sql.c" break; - case 240: /* cmd ::= SHOW QNODES */ + case 247: /* cmd ::= SHOW QNODES */ +#line 467 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); } +#line 6122 "sql.c" break; - case 241: /* cmd ::= SHOW FUNCTIONS */ + case 248: /* cmd ::= SHOW FUNCTIONS */ +#line 468 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); } +#line 6127 "sql.c" break; - case 242: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy952, yymsp[-1].minor.yy952, OP_TYPE_EQUAL); } + case 249: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ +#line 469 "sql.y" +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy28, yymsp[-1].minor.yy28, OP_TYPE_EQUAL); } +#line 6132 "sql.c" break; - case 243: /* cmd ::= SHOW INDEXES FROM db_name NK_DOT table_name */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, createIdentifierValueNode(pCxt, &yymsp[-2].minor.yy169), createIdentifierValueNode(pCxt, &yymsp[0].minor.yy169), OP_TYPE_EQUAL); } + case 250: /* cmd ::= SHOW INDEXES FROM db_name NK_DOT table_name */ +#line 470 "sql.y" +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, createIdentifierValueNode(pCxt, &yymsp[-2].minor.yy889), createIdentifierValueNode(pCxt, &yymsp[0].minor.yy889), OP_TYPE_EQUAL); } +#line 6137 "sql.c" break; - case 244: /* cmd ::= SHOW STREAMS */ + case 251: /* cmd ::= SHOW STREAMS */ +#line 471 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT); } +#line 6142 "sql.c" break; - case 245: /* cmd ::= SHOW ACCOUNTS */ + case 252: /* cmd ::= SHOW ACCOUNTS */ +#line 472 "sql.y" { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } +#line 6147 "sql.c" break; - case 246: /* cmd ::= SHOW APPS */ + case 253: /* cmd ::= SHOW APPS */ +#line 473 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); } +#line 6152 "sql.c" break; - case 247: /* cmd ::= SHOW CONNECTIONS */ + case 254: /* cmd ::= SHOW CONNECTIONS */ +#line 474 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); } +#line 6157 "sql.c" break; - case 248: /* cmd ::= SHOW LICENCES */ - case 249: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==249); + case 255: /* cmd ::= SHOW LICENCES */ + case 256: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==256); +#line 475 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); } +#line 6163 "sql.c" break; - case 250: /* cmd ::= SHOW CREATE DATABASE db_name */ -{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy169); } + case 257: /* cmd ::= SHOW CREATE DATABASE db_name */ +#line 477 "sql.y" +{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy889); } +#line 6168 "sql.c" break; - case 251: /* cmd ::= SHOW CREATE TABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy952); } + case 258: /* cmd ::= SHOW CREATE TABLE full_table_name */ +#line 478 "sql.y" +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy28); } +#line 6173 "sql.c" break; - case 252: /* cmd ::= SHOW CREATE STABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy952); } + case 259: /* cmd ::= SHOW CREATE STABLE full_table_name */ +#line 479 "sql.y" +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy28); } +#line 6178 "sql.c" break; - case 253: /* cmd ::= SHOW QUERIES */ + case 260: /* cmd ::= SHOW QUERIES */ +#line 480 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); } +#line 6183 "sql.c" break; - case 254: /* cmd ::= SHOW SCORES */ + case 261: /* cmd ::= SHOW SCORES */ +#line 481 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); } +#line 6188 "sql.c" break; - case 255: /* cmd ::= SHOW TOPICS */ + case 262: /* cmd ::= SHOW TOPICS */ +#line 482 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); } +#line 6193 "sql.c" break; - case 256: /* cmd ::= SHOW VARIABLES */ - case 257: /* cmd ::= SHOW CLUSTER VARIABLES */ yytestcase(yyruleno==257); + case 263: /* cmd ::= SHOW VARIABLES */ + case 264: /* cmd ::= SHOW CLUSTER VARIABLES */ yytestcase(yyruleno==264); +#line 483 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT); } +#line 6199 "sql.c" break; - case 258: /* cmd ::= SHOW LOCAL VARIABLES */ + case 265: /* cmd ::= SHOW LOCAL VARIABLES */ +#line 485 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT); } +#line 6204 "sql.c" break; - case 259: /* cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[-2].minor.yy0), yymsp[0].minor.yy952); } + case 266: /* cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ +#line 486 "sql.y" +{ pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[-2].minor.yy0), yymsp[0].minor.yy28); } +#line 6209 "sql.c" break; - case 260: /* cmd ::= SHOW BNODES */ + case 267: /* cmd ::= SHOW BNODES */ +#line 487 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); } +#line 6214 "sql.c" break; - case 261: /* cmd ::= SHOW SNODES */ + case 268: /* cmd ::= SHOW SNODES */ +#line 488 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); } +#line 6219 "sql.c" break; - case 262: /* cmd ::= SHOW CLUSTER */ + case 269: /* cmd ::= SHOW CLUSTER */ +#line 489 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); } +#line 6224 "sql.c" break; - case 263: /* cmd ::= SHOW TRANSACTIONS */ + case 270: /* cmd ::= SHOW TRANSACTIONS */ +#line 490 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); } +#line 6229 "sql.c" break; - case 264: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ -{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy952); } + case 271: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ +#line 491 "sql.y" +{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy28); } +#line 6234 "sql.c" break; - case 265: /* cmd ::= SHOW CONSUMERS */ + case 272: /* cmd ::= SHOW CONSUMERS */ +#line 492 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); } +#line 6239 "sql.c" break; - case 266: /* cmd ::= SHOW SUBSCRIPTIONS */ + case 273: /* cmd ::= SHOW SUBSCRIPTIONS */ +#line 493 "sql.y" { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); } +#line 6244 "sql.c" break; - case 267: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy952, yymsp[-1].minor.yy952, OP_TYPE_EQUAL); } + case 274: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ +#line 494 "sql.y" +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy28, yymsp[-1].minor.yy28, OP_TYPE_EQUAL); } +#line 6249 "sql.c" break; - case 268: /* cmd ::= SHOW TAGS FROM db_name NK_DOT table_name */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, createIdentifierValueNode(pCxt, &yymsp[-2].minor.yy169), createIdentifierValueNode(pCxt, &yymsp[0].minor.yy169), OP_TYPE_EQUAL); } + case 275: /* cmd ::= SHOW TAGS FROM db_name NK_DOT table_name */ +#line 495 "sql.y" +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, createIdentifierValueNode(pCxt, &yymsp[-2].minor.yy889), createIdentifierValueNode(pCxt, &yymsp[0].minor.yy889), OP_TYPE_EQUAL); } +#line 6254 "sql.c" break; - case 269: /* cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowTableTagsStmt(pCxt, yymsp[-1].minor.yy952, yymsp[0].minor.yy952, yymsp[-3].minor.yy824); } + case 276: /* cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt */ +#line 496 "sql.y" +{ pCxt->pRootNode = createShowTableTagsStmt(pCxt, yymsp[-1].minor.yy28, yymsp[0].minor.yy28, yymsp[-3].minor.yy236); } +#line 6259 "sql.c" break; - case 270: /* cmd ::= SHOW TABLE TAGS tag_list_opt FROM db_name NK_DOT table_name */ -{ pCxt->pRootNode = createShowTableTagsStmt(pCxt, createIdentifierValueNode(pCxt, &yymsp[0].minor.yy169), createIdentifierValueNode(pCxt, &yymsp[-2].minor.yy169), yymsp[-4].minor.yy824); } + case 277: /* cmd ::= SHOW TABLE TAGS tag_list_opt FROM db_name NK_DOT table_name */ +#line 497 "sql.y" +{ pCxt->pRootNode = createShowTableTagsStmt(pCxt, createIdentifierValueNode(pCxt, &yymsp[0].minor.yy889), createIdentifierValueNode(pCxt, &yymsp[-2].minor.yy889), yymsp[-4].minor.yy236); } +#line 6264 "sql.c" break; - case 271: /* cmd ::= SHOW VNODES ON DNODE NK_INTEGER */ + case 278: /* cmd ::= SHOW VNODES ON DNODE NK_INTEGER */ +#line 498 "sql.y" { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0), NULL); } +#line 6269 "sql.c" break; - case 272: /* cmd ::= SHOW VNODES */ + case 279: /* cmd ::= SHOW VNODES */ +#line 499 "sql.y" { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, NULL); } +#line 6274 "sql.c" break; - case 273: /* cmd ::= SHOW db_name_cond_opt ALIVE */ -{ pCxt->pRootNode = createShowAliveStmt(pCxt, yymsp[-1].minor.yy952, QUERY_NODE_SHOW_DB_ALIVE_STMT); } + case 280: /* cmd ::= SHOW db_name_cond_opt ALIVE */ +#line 501 "sql.y" +{ pCxt->pRootNode = createShowAliveStmt(pCxt, yymsp[-1].minor.yy28, QUERY_NODE_SHOW_DB_ALIVE_STMT); } +#line 6279 "sql.c" break; - case 274: /* cmd ::= SHOW CLUSTER ALIVE */ + case 281: /* cmd ::= SHOW CLUSTER ALIVE */ +#line 502 "sql.y" { pCxt->pRootNode = createShowAliveStmt(pCxt, NULL, QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT); } +#line 6284 "sql.c" break; - case 275: /* db_name_cond_opt ::= */ - case 280: /* from_db_opt ::= */ yytestcase(yyruleno==280); -{ yymsp[1].minor.yy952 = createDefaultDatabaseCondValue(pCxt); } + case 282: /* db_name_cond_opt ::= */ + case 287: /* from_db_opt ::= */ yytestcase(yyruleno==287); +#line 504 "sql.y" +{ yymsp[1].minor.yy28 = createDefaultDatabaseCondValue(pCxt); } +#line 6290 "sql.c" break; - case 276: /* db_name_cond_opt ::= db_name NK_DOT */ -{ yylhsminor.yy952 = createIdentifierValueNode(pCxt, &yymsp[-1].minor.yy169); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; + case 283: /* db_name_cond_opt ::= db_name NK_DOT */ +#line 505 "sql.y" +{ yylhsminor.yy28 = createIdentifierValueNode(pCxt, &yymsp[-1].minor.yy889); } +#line 6295 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 278: /* like_pattern_opt ::= LIKE NK_STRING */ -{ yymsp[-1].minor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } + case 285: /* like_pattern_opt ::= LIKE NK_STRING */ +#line 508 "sql.y" +{ yymsp[-1].minor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } +#line 6301 "sql.c" break; - case 279: /* table_name_cond ::= table_name */ -{ yylhsminor.yy952 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy169); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 286: /* table_name_cond ::= table_name */ +#line 510 "sql.y" +{ yylhsminor.yy28 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy889); } +#line 6306 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 281: /* from_db_opt ::= FROM db_name */ -{ yymsp[-1].minor.yy952 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy169); } + case 288: /* from_db_opt ::= FROM db_name */ +#line 513 "sql.y" +{ yymsp[-1].minor.yy28 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy889); } +#line 6312 "sql.c" break; - case 285: /* tag_item ::= TBNAME */ -{ yylhsminor.yy952 = setProjectionAlias(pCxt, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL), &yymsp[0].minor.yy0); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 292: /* tag_item ::= TBNAME */ +#line 521 "sql.y" +{ yylhsminor.yy28 = setProjectionAlias(pCxt, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL), &yymsp[0].minor.yy0); } +#line 6317 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 288: /* tag_item ::= column_name column_alias */ -{ yylhsminor.yy952 = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &yymsp[-1].minor.yy169), &yymsp[0].minor.yy169); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; + case 295: /* tag_item ::= column_name column_alias */ +#line 524 "sql.y" +{ yylhsminor.yy28 = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &yymsp[-1].minor.yy889), &yymsp[0].minor.yy889); } +#line 6323 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 289: /* tag_item ::= column_name AS column_alias */ -{ yylhsminor.yy952 = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &yymsp[-2].minor.yy169), &yymsp[0].minor.yy169); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 296: /* tag_item ::= column_name AS column_alias */ +#line 525 "sql.y" +{ yylhsminor.yy28 = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &yymsp[-2].minor.yy889), &yymsp[0].minor.yy889); } +#line 6329 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 290: /* cmd ::= CREATE SMA INDEX not_exists_opt full_index_name ON full_table_name index_options */ -{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy957, yymsp[-3].minor.yy952, yymsp[-1].minor.yy952, NULL, yymsp[0].minor.yy952); } + case 297: /* cmd ::= CREATE SMA INDEX not_exists_opt full_index_name ON full_table_name index_options */ +#line 529 "sql.y" +{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy793, yymsp[-3].minor.yy28, yymsp[-1].minor.yy28, NULL, yymsp[0].minor.yy28); } +#line 6335 "sql.c" break; - case 291: /* cmd ::= CREATE INDEX not_exists_opt full_index_name ON full_table_name NK_LP col_name_list NK_RP */ -{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_NORMAL, yymsp[-6].minor.yy957, yymsp[-5].minor.yy952, yymsp[-3].minor.yy952, yymsp[-1].minor.yy824, NULL); } + case 298: /* cmd ::= CREATE INDEX not_exists_opt full_index_name ON full_table_name NK_LP col_name_list NK_RP */ +#line 531 "sql.y" +{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_NORMAL, yymsp[-6].minor.yy793, yymsp[-5].minor.yy28, yymsp[-3].minor.yy28, yymsp[-1].minor.yy236, NULL); } +#line 6340 "sql.c" break; - case 292: /* cmd ::= DROP INDEX exists_opt full_index_name */ -{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy957, yymsp[0].minor.yy952); } + case 299: /* cmd ::= DROP INDEX exists_opt full_index_name */ +#line 532 "sql.y" +{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy793, yymsp[0].minor.yy28); } +#line 6345 "sql.c" break; - case 293: /* full_index_name ::= index_name */ -{ yylhsminor.yy952 = createRealTableNodeForIndexName(pCxt, NULL, &yymsp[0].minor.yy169); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 300: /* full_index_name ::= index_name */ +#line 534 "sql.y" +{ yylhsminor.yy28 = createRealTableNodeForIndexName(pCxt, NULL, &yymsp[0].minor.yy889); } +#line 6350 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 294: /* full_index_name ::= db_name NK_DOT index_name */ -{ yylhsminor.yy952 = createRealTableNodeForIndexName(pCxt, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy169); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 301: /* full_index_name ::= db_name NK_DOT index_name */ +#line 535 "sql.y" +{ yylhsminor.yy28 = createRealTableNodeForIndexName(pCxt, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy889); } +#line 6356 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 295: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ -{ yymsp[-9].minor.yy952 = createIndexOption(pCxt, yymsp[-7].minor.yy824, releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), NULL, yymsp[-1].minor.yy952, yymsp[0].minor.yy952); } + case 302: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ +#line 538 "sql.y" +{ yymsp[-9].minor.yy28 = createIndexOption(pCxt, yymsp[-7].minor.yy236, releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), NULL, yymsp[-1].minor.yy28, yymsp[0].minor.yy28); } +#line 6362 "sql.c" break; - case 296: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ -{ yymsp[-11].minor.yy952 = createIndexOption(pCxt, yymsp[-9].minor.yy824, releaseRawExprNode(pCxt, yymsp[-5].minor.yy952), releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), yymsp[-1].minor.yy952, yymsp[0].minor.yy952); } + case 303: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */ +#line 541 "sql.y" +{ yymsp[-11].minor.yy28 = createIndexOption(pCxt, yymsp[-9].minor.yy236, releaseRawExprNode(pCxt, yymsp[-5].minor.yy28), releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), yymsp[-1].minor.yy28, yymsp[0].minor.yy28); } +#line 6367 "sql.c" break; - case 299: /* func ::= sma_func_name NK_LP expression_list NK_RP */ -{ yylhsminor.yy952 = createFunctionNode(pCxt, &yymsp[-3].minor.yy169, yymsp[-1].minor.yy824); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; + case 306: /* func ::= sma_func_name NK_LP expression_list NK_RP */ +#line 548 "sql.y" +{ yylhsminor.yy28 = createFunctionNode(pCxt, &yymsp[-3].minor.yy889, yymsp[-1].minor.yy236); } +#line 6372 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 300: /* sma_func_name ::= function_name */ - case 514: /* alias_opt ::= table_alias */ yytestcase(yyruleno==514); -{ yylhsminor.yy169 = yymsp[0].minor.yy169; } - yymsp[0].minor.yy169 = yylhsminor.yy169; + case 307: /* sma_func_name ::= function_name */ + case 521: /* alias_opt ::= table_alias */ yytestcase(yyruleno==521); +#line 552 "sql.y" +{ yylhsminor.yy889 = yymsp[0].minor.yy889; } +#line 6379 "sql.c" + yymsp[0].minor.yy889 = yylhsminor.yy889; break; - case 305: /* sma_stream_opt ::= */ - case 346: /* stream_options ::= */ yytestcase(yyruleno==346); -{ yymsp[1].minor.yy952 = createStreamOptions(pCxt); } + case 312: /* sma_stream_opt ::= */ + case 353: /* stream_options ::= */ yytestcase(yyruleno==353); +#line 558 "sql.y" +{ yymsp[1].minor.yy28 = createStreamOptions(pCxt); } +#line 6386 "sql.c" break; - case 306: /* sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal */ -{ ((SStreamOptions*)yymsp[-2].minor.yy952)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy952); yylhsminor.yy952 = yymsp[-2].minor.yy952; } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 313: /* sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal */ +#line 559 "sql.y" +{ ((SStreamOptions*)yymsp[-2].minor.yy28)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy28); yylhsminor.yy28 = yymsp[-2].minor.yy28; } +#line 6391 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 307: /* sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-2].minor.yy952)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy952); yylhsminor.yy952 = yymsp[-2].minor.yy952; } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 314: /* sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal */ +#line 560 "sql.y" +{ ((SStreamOptions*)yymsp[-2].minor.yy28)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy28); yylhsminor.yy28 = yymsp[-2].minor.yy28; } +#line 6397 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 308: /* sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal */ -{ ((SStreamOptions*)yymsp[-2].minor.yy952)->pDeleteMark = releaseRawExprNode(pCxt, yymsp[0].minor.yy952); yylhsminor.yy952 = yymsp[-2].minor.yy952; } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 315: /* sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal */ +#line 561 "sql.y" +{ ((SStreamOptions*)yymsp[-2].minor.yy28)->pDeleteMark = releaseRawExprNode(pCxt, yymsp[0].minor.yy28); yylhsminor.yy28 = yymsp[-2].minor.yy28; } +#line 6403 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 309: /* with_meta ::= AS */ -{ yymsp[0].minor.yy480 = 0; } + case 316: /* with_meta ::= AS */ +#line 566 "sql.y" +{ yymsp[0].minor.yy956 = 0; } +#line 6409 "sql.c" break; - case 310: /* with_meta ::= WITH META AS */ -{ yymsp[-2].minor.yy480 = 1; } + case 317: /* with_meta ::= WITH META AS */ +#line 567 "sql.y" +{ yymsp[-2].minor.yy956 = 1; } +#line 6414 "sql.c" break; - case 311: /* with_meta ::= ONLY META AS */ -{ yymsp[-2].minor.yy480 = 2; } + case 318: /* with_meta ::= ONLY META AS */ +#line 568 "sql.y" +{ yymsp[-2].minor.yy956 = 2; } +#line 6419 "sql.c" break; - case 312: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ -{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy957, &yymsp[-2].minor.yy169, yymsp[0].minor.yy952); } + case 319: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ +#line 570 "sql.y" +{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy793, &yymsp[-2].minor.yy889, yymsp[0].minor.yy28); } +#line 6424 "sql.c" break; - case 313: /* cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy957, &yymsp[-3].minor.yy169, &yymsp[0].minor.yy169, yymsp[-2].minor.yy480); } + case 320: /* cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta DATABASE db_name */ +#line 572 "sql.y" +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy793, &yymsp[-3].minor.yy889, &yymsp[0].minor.yy889, yymsp[-2].minor.yy956); } +#line 6429 "sql.c" break; - case 314: /* cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta STABLE full_table_name where_clause_opt */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-5].minor.yy957, &yymsp[-4].minor.yy169, yymsp[-1].minor.yy952, yymsp[-3].minor.yy480, yymsp[0].minor.yy952); } + case 321: /* cmd ::= CREATE TOPIC not_exists_opt topic_name with_meta STABLE full_table_name where_clause_opt */ +#line 574 "sql.y" +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-5].minor.yy793, &yymsp[-4].minor.yy889, yymsp[-1].minor.yy28, yymsp[-3].minor.yy956, yymsp[0].minor.yy28); } +#line 6434 "sql.c" break; - case 315: /* cmd ::= DROP TOPIC exists_opt topic_name */ -{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy957, &yymsp[0].minor.yy169); } + case 322: /* cmd ::= DROP TOPIC exists_opt topic_name */ +#line 576 "sql.y" +{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy793, &yymsp[0].minor.yy889); } +#line 6439 "sql.c" break; - case 316: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ -{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy957, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy169); } + case 323: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ +#line 577 "sql.y" +{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy793, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy889); } +#line 6444 "sql.c" break; - case 317: /* cmd ::= DESC full_table_name */ - case 318: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==318); -{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy952); } + case 324: /* cmd ::= DESC full_table_name */ + case 325: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==325); +#line 580 "sql.y" +{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy28); } +#line 6450 "sql.c" break; - case 319: /* cmd ::= RESET QUERY CACHE */ + case 326: /* cmd ::= RESET QUERY CACHE */ +#line 584 "sql.y" { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); } +#line 6455 "sql.c" break; - case 320: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ - case 321: /* cmd ::= EXPLAIN analyze_opt explain_options insert_query */ yytestcase(yyruleno==321); -{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy957, yymsp[-1].minor.yy952, yymsp[0].minor.yy952); } + case 327: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ + case 328: /* cmd ::= EXPLAIN analyze_opt explain_options insert_query */ yytestcase(yyruleno==328); +#line 587 "sql.y" +{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy793, yymsp[-1].minor.yy28, yymsp[0].minor.yy28); } +#line 6461 "sql.c" break; - case 324: /* explain_options ::= */ -{ yymsp[1].minor.yy952 = createDefaultExplainOptions(pCxt); } + case 331: /* explain_options ::= */ +#line 595 "sql.y" +{ yymsp[1].minor.yy28 = createDefaultExplainOptions(pCxt); } +#line 6466 "sql.c" break; - case 325: /* explain_options ::= explain_options VERBOSE NK_BOOL */ -{ yylhsminor.yy952 = setExplainVerbose(pCxt, yymsp[-2].minor.yy952, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 332: /* explain_options ::= explain_options VERBOSE NK_BOOL */ +#line 596 "sql.y" +{ yylhsminor.yy28 = setExplainVerbose(pCxt, yymsp[-2].minor.yy28, &yymsp[0].minor.yy0); } +#line 6471 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 326: /* explain_options ::= explain_options RATIO NK_FLOAT */ -{ yylhsminor.yy952 = setExplainRatio(pCxt, yymsp[-2].minor.yy952, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 333: /* explain_options ::= explain_options RATIO NK_FLOAT */ +#line 597 "sql.y" +{ yylhsminor.yy28 = setExplainRatio(pCxt, yymsp[-2].minor.yy28, &yymsp[0].minor.yy0); } +#line 6477 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 327: /* cmd ::= CREATE or_replace_opt agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt language_opt */ -{ pCxt->pRootNode = createCreateFunctionStmt(pCxt, yymsp[-7].minor.yy957, yymsp[-9].minor.yy957, &yymsp[-6].minor.yy169, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy84, yymsp[-1].minor.yy480, &yymsp[0].minor.yy169, yymsp[-10].minor.yy957); } + case 334: /* cmd ::= CREATE or_replace_opt agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt language_opt */ +#line 602 "sql.y" +{ pCxt->pRootNode = createCreateFunctionStmt(pCxt, yymsp[-7].minor.yy793, yymsp[-9].minor.yy793, &yymsp[-6].minor.yy889, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy32, yymsp[-1].minor.yy956, &yymsp[0].minor.yy889, yymsp[-10].minor.yy793); } +#line 6483 "sql.c" break; - case 328: /* cmd ::= DROP FUNCTION exists_opt function_name */ -{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy957, &yymsp[0].minor.yy169); } + case 335: /* cmd ::= DROP FUNCTION exists_opt function_name */ +#line 603 "sql.y" +{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy793, &yymsp[0].minor.yy889); } +#line 6488 "sql.c" break; - case 333: /* language_opt ::= */ -{ yymsp[1].minor.yy169 = nil_token; } + case 340: /* language_opt ::= */ +#line 617 "sql.y" +{ yymsp[1].minor.yy889 = nil_token; } +#line 6493 "sql.c" break; - case 334: /* language_opt ::= LANGUAGE NK_STRING */ -{ yymsp[-1].minor.yy169 = yymsp[0].minor.yy0; } + case 341: /* language_opt ::= LANGUAGE NK_STRING */ +#line 618 "sql.y" +{ yymsp[-1].minor.yy889 = yymsp[0].minor.yy0; } +#line 6498 "sql.c" break; - case 337: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name col_list_opt tag_def_or_ref_opt subtable_opt AS query_or_subquery */ -{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-9].minor.yy957, &yymsp[-8].minor.yy169, yymsp[-5].minor.yy952, yymsp[-7].minor.yy952, yymsp[-3].minor.yy824, yymsp[-2].minor.yy952, yymsp[0].minor.yy952, yymsp[-4].minor.yy824); } + case 344: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name col_list_opt tag_def_or_ref_opt subtable_opt AS query_or_subquery */ +#line 628 "sql.y" +{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-9].minor.yy793, &yymsp[-8].minor.yy889, yymsp[-5].minor.yy28, yymsp[-7].minor.yy28, yymsp[-3].minor.yy236, yymsp[-2].minor.yy28, yymsp[0].minor.yy28, yymsp[-4].minor.yy236); } +#line 6503 "sql.c" break; - case 338: /* cmd ::= DROP STREAM exists_opt stream_name */ -{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy957, &yymsp[0].minor.yy169); } + case 345: /* cmd ::= DROP STREAM exists_opt stream_name */ +#line 629 "sql.y" +{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy793, &yymsp[0].minor.yy889); } +#line 6508 "sql.c" break; - case 339: /* cmd ::= PAUSE STREAM exists_opt stream_name */ -{ pCxt->pRootNode = createPauseStreamStmt(pCxt, yymsp[-1].minor.yy957, &yymsp[0].minor.yy169); } + case 346: /* cmd ::= PAUSE STREAM exists_opt stream_name */ +#line 630 "sql.y" +{ pCxt->pRootNode = createPauseStreamStmt(pCxt, yymsp[-1].minor.yy793, &yymsp[0].minor.yy889); } +#line 6513 "sql.c" break; - case 340: /* cmd ::= RESUME STREAM exists_opt ignore_opt stream_name */ -{ pCxt->pRootNode = createResumeStreamStmt(pCxt, yymsp[-2].minor.yy957, yymsp[-1].minor.yy957, &yymsp[0].minor.yy169); } + case 347: /* cmd ::= RESUME STREAM exists_opt ignore_opt stream_name */ +#line 631 "sql.y" +{ pCxt->pRootNode = createResumeStreamStmt(pCxt, yymsp[-2].minor.yy793, yymsp[-1].minor.yy793, &yymsp[0].minor.yy889); } +#line 6518 "sql.c" break; - case 347: /* stream_options ::= stream_options TRIGGER AT_ONCE */ - case 348: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ yytestcase(yyruleno==348); -{ yylhsminor.yy952 = setStreamOptions(pCxt, yymsp[-2].minor.yy952, SOPT_TRIGGER_TYPE_SET, &yymsp[0].minor.yy0, NULL); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 354: /* stream_options ::= stream_options TRIGGER AT_ONCE */ + case 355: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ yytestcase(yyruleno==355); +#line 645 "sql.y" +{ yylhsminor.yy28 = setStreamOptions(pCxt, yymsp[-2].minor.yy28, SOPT_TRIGGER_TYPE_SET, &yymsp[0].minor.yy0, NULL); } +#line 6524 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 349: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ -{ yylhsminor.yy952 = setStreamOptions(pCxt, yymsp[-3].minor.yy952, SOPT_TRIGGER_TYPE_SET, &yymsp[-1].minor.yy0, releaseRawExprNode(pCxt, yymsp[0].minor.yy952)); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; + case 356: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ +#line 647 "sql.y" +{ yylhsminor.yy28 = setStreamOptions(pCxt, yymsp[-3].minor.yy28, SOPT_TRIGGER_TYPE_SET, &yymsp[-1].minor.yy0, releaseRawExprNode(pCxt, yymsp[0].minor.yy28)); } +#line 6530 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 350: /* stream_options ::= stream_options WATERMARK duration_literal */ -{ yylhsminor.yy952 = setStreamOptions(pCxt, yymsp[-2].minor.yy952, SOPT_WATERMARK_SET, NULL, releaseRawExprNode(pCxt, yymsp[0].minor.yy952)); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 357: /* stream_options ::= stream_options WATERMARK duration_literal */ +#line 648 "sql.y" +{ yylhsminor.yy28 = setStreamOptions(pCxt, yymsp[-2].minor.yy28, SOPT_WATERMARK_SET, NULL, releaseRawExprNode(pCxt, yymsp[0].minor.yy28)); } +#line 6536 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 351: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ -{ yylhsminor.yy952 = setStreamOptions(pCxt, yymsp[-3].minor.yy952, SOPT_IGNORE_EXPIRED_SET, &yymsp[0].minor.yy0, NULL); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; + case 358: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ +#line 649 "sql.y" +{ yylhsminor.yy28 = setStreamOptions(pCxt, yymsp[-3].minor.yy28, SOPT_IGNORE_EXPIRED_SET, &yymsp[0].minor.yy0, NULL); } +#line 6542 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 352: /* stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ -{ yylhsminor.yy952 = setStreamOptions(pCxt, yymsp[-2].minor.yy952, SOPT_FILL_HISTORY_SET, &yymsp[0].minor.yy0, NULL); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 359: /* stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ +#line 650 "sql.y" +{ yylhsminor.yy28 = setStreamOptions(pCxt, yymsp[-2].minor.yy28, SOPT_FILL_HISTORY_SET, &yymsp[0].minor.yy0, NULL); } +#line 6548 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 353: /* stream_options ::= stream_options DELETE_MARK duration_literal */ -{ yylhsminor.yy952 = setStreamOptions(pCxt, yymsp[-2].minor.yy952, SOPT_DELETE_MARK_SET, NULL, releaseRawExprNode(pCxt, yymsp[0].minor.yy952)); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 360: /* stream_options ::= stream_options DELETE_MARK duration_literal */ +#line 651 "sql.y" +{ yylhsminor.yy28 = setStreamOptions(pCxt, yymsp[-2].minor.yy28, SOPT_DELETE_MARK_SET, NULL, releaseRawExprNode(pCxt, yymsp[0].minor.yy28)); } +#line 6554 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 354: /* stream_options ::= stream_options IGNORE UPDATE NK_INTEGER */ -{ yylhsminor.yy952 = setStreamOptions(pCxt, yymsp[-3].minor.yy952, SOPT_IGNORE_UPDATE_SET, &yymsp[0].minor.yy0, NULL); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; + case 361: /* stream_options ::= stream_options IGNORE UPDATE NK_INTEGER */ +#line 652 "sql.y" +{ yylhsminor.yy28 = setStreamOptions(pCxt, yymsp[-3].minor.yy28, SOPT_IGNORE_UPDATE_SET, &yymsp[0].minor.yy0, NULL); } +#line 6560 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 356: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - case 552: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==552); - case 573: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==573); -{ yymsp[-3].minor.yy952 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy952); } + case 363: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + case 559: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==559); + case 580: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==580); +#line 655 "sql.y" +{ yymsp[-3].minor.yy28 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy28); } +#line 6568 "sql.c" break; - case 359: /* cmd ::= KILL CONNECTION NK_INTEGER */ + case 366: /* cmd ::= KILL CONNECTION NK_INTEGER */ +#line 663 "sql.y" { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &yymsp[0].minor.yy0); } +#line 6573 "sql.c" break; - case 360: /* cmd ::= KILL QUERY NK_STRING */ + case 367: /* cmd ::= KILL QUERY NK_STRING */ +#line 664 "sql.y" { pCxt->pRootNode = createKillQueryStmt(pCxt, &yymsp[0].minor.yy0); } +#line 6578 "sql.c" break; - case 361: /* cmd ::= KILL TRANSACTION NK_INTEGER */ + case 368: /* cmd ::= KILL TRANSACTION NK_INTEGER */ +#line 665 "sql.y" { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &yymsp[0].minor.yy0); } +#line 6583 "sql.c" break; - case 362: /* cmd ::= BALANCE VGROUP */ + case 369: /* cmd ::= BALANCE VGROUP */ +#line 668 "sql.y" { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); } +#line 6588 "sql.c" break; - case 363: /* cmd ::= BALANCE VGROUP LEADER */ + case 370: /* cmd ::= BALANCE VGROUP LEADER */ +#line 669 "sql.y" { pCxt->pRootNode = createBalanceVgroupLeaderStmt(pCxt); } +#line 6593 "sql.c" break; - case 364: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + case 371: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ +#line 670 "sql.y" { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } +#line 6598 "sql.c" break; - case 365: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ -{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy824); } + case 372: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ +#line 671 "sql.y" +{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy236); } +#line 6603 "sql.c" break; - case 366: /* cmd ::= SPLIT VGROUP NK_INTEGER */ + case 373: /* cmd ::= SPLIT VGROUP NK_INTEGER */ +#line 672 "sql.y" { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &yymsp[0].minor.yy0); } +#line 6608 "sql.c" break; - case 367: /* dnode_list ::= DNODE NK_INTEGER */ -{ yymsp[-1].minor.yy824 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + case 374: /* dnode_list ::= DNODE NK_INTEGER */ +#line 676 "sql.y" +{ yymsp[-1].minor.yy236 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } +#line 6613 "sql.c" break; - case 369: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ -{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy952, yymsp[0].minor.yy952); } + case 376: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ +#line 683 "sql.y" +{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy28, yymsp[0].minor.yy28); } +#line 6618 "sql.c" break; - case 372: /* insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ -{ yymsp[-6].minor.yy952 = createInsertStmt(pCxt, yymsp[-4].minor.yy952, yymsp[-2].minor.yy824, yymsp[0].minor.yy952); } + case 379: /* insert_query ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ +#line 692 "sql.y" +{ yymsp[-6].minor.yy28 = createInsertStmt(pCxt, yymsp[-4].minor.yy28, yymsp[-2].minor.yy236, yymsp[0].minor.yy28); } +#line 6623 "sql.c" break; - case 373: /* insert_query ::= INSERT INTO full_table_name query_or_subquery */ -{ yymsp[-3].minor.yy952 = createInsertStmt(pCxt, yymsp[-1].minor.yy952, NULL, yymsp[0].minor.yy952); } + case 380: /* insert_query ::= INSERT INTO full_table_name query_or_subquery */ +#line 693 "sql.y" +{ yymsp[-3].minor.yy28 = createInsertStmt(pCxt, yymsp[-1].minor.yy28, NULL, yymsp[0].minor.yy28); } +#line 6628 "sql.c" break; - case 374: /* literal ::= NK_INTEGER */ -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 381: /* literal ::= NK_INTEGER */ +#line 696 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } +#line 6633 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 375: /* literal ::= NK_FLOAT */ -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 382: /* literal ::= NK_FLOAT */ +#line 697 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } +#line 6639 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 376: /* literal ::= NK_STRING */ -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 383: /* literal ::= NK_STRING */ +#line 698 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } +#line 6645 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 377: /* literal ::= NK_BOOL */ -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 384: /* literal ::= NK_BOOL */ +#line 699 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } +#line 6651 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 378: /* literal ::= TIMESTAMP NK_STRING */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; + case 385: /* literal ::= TIMESTAMP NK_STRING */ +#line 700 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } +#line 6657 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 379: /* literal ::= duration_literal */ - case 389: /* signed_literal ::= signed */ yytestcase(yyruleno==389); - case 410: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==410); - case 411: /* expression ::= literal */ yytestcase(yyruleno==411); - case 412: /* expression ::= pseudo_column */ yytestcase(yyruleno==412); - case 413: /* expression ::= column_reference */ yytestcase(yyruleno==413); - case 414: /* expression ::= function_expression */ yytestcase(yyruleno==414); - case 415: /* expression ::= case_when_expression */ yytestcase(yyruleno==415); - case 446: /* function_expression ::= literal_func */ yytestcase(yyruleno==446); - case 495: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==495); - case 499: /* boolean_primary ::= predicate */ yytestcase(yyruleno==499); - case 501: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==501); - case 502: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==502); - case 505: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==505); - case 507: /* table_reference ::= table_primary */ yytestcase(yyruleno==507); - case 508: /* table_reference ::= joined_table */ yytestcase(yyruleno==508); - case 512: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==512); - case 575: /* query_simple ::= query_specification */ yytestcase(yyruleno==575); - case 576: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==576); - case 579: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==579); - case 581: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==581); -{ yylhsminor.yy952 = yymsp[0].minor.yy952; } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 386: /* literal ::= duration_literal */ + case 396: /* signed_literal ::= signed */ yytestcase(yyruleno==396); + case 417: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==417); + case 418: /* expression ::= literal */ yytestcase(yyruleno==418); + case 419: /* expression ::= pseudo_column */ yytestcase(yyruleno==419); + case 420: /* expression ::= column_reference */ yytestcase(yyruleno==420); + case 421: /* expression ::= function_expression */ yytestcase(yyruleno==421); + case 422: /* expression ::= case_when_expression */ yytestcase(yyruleno==422); + case 453: /* function_expression ::= literal_func */ yytestcase(yyruleno==453); + case 502: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==502); + case 506: /* boolean_primary ::= predicate */ yytestcase(yyruleno==506); + case 508: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==508); + case 509: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==509); + case 512: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==512); + case 514: /* table_reference ::= table_primary */ yytestcase(yyruleno==514); + case 515: /* table_reference ::= joined_table */ yytestcase(yyruleno==515); + case 519: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==519); + case 582: /* query_simple ::= query_specification */ yytestcase(yyruleno==582); + case 583: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==583); + case 586: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==586); + case 588: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==588); +#line 701 "sql.y" +{ yylhsminor.yy28 = yymsp[0].minor.yy28; } +#line 6683 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 380: /* literal ::= NULL */ -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 387: /* literal ::= NULL */ +#line 702 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } +#line 6689 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 381: /* literal ::= NK_QUESTION */ -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 388: /* literal ::= NK_QUESTION */ +#line 703 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } +#line 6695 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 382: /* duration_literal ::= NK_VARIABLE */ -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 389: /* duration_literal ::= NK_VARIABLE */ +#line 705 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } +#line 6701 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 383: /* signed ::= NK_INTEGER */ -{ yylhsminor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 390: /* signed ::= NK_INTEGER */ +#line 707 "sql.y" +{ yylhsminor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } +#line 6707 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 384: /* signed ::= NK_PLUS NK_INTEGER */ -{ yymsp[-1].minor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } + case 391: /* signed ::= NK_PLUS NK_INTEGER */ +#line 708 "sql.y" +{ yymsp[-1].minor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } +#line 6713 "sql.c" break; - case 385: /* signed ::= NK_MINUS NK_INTEGER */ + case 392: /* signed ::= NK_MINUS NK_INTEGER */ +#line 709 "sql.y" { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; - yylhsminor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); + yylhsminor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; +#line 6722 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 386: /* signed ::= NK_FLOAT */ -{ yylhsminor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 393: /* signed ::= NK_FLOAT */ +#line 714 "sql.y" +{ yylhsminor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } +#line 6728 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 387: /* signed ::= NK_PLUS NK_FLOAT */ -{ yymsp[-1].minor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } + case 394: /* signed ::= NK_PLUS NK_FLOAT */ +#line 715 "sql.y" +{ yymsp[-1].minor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } +#line 6734 "sql.c" break; - case 388: /* signed ::= NK_MINUS NK_FLOAT */ + case 395: /* signed ::= NK_MINUS NK_FLOAT */ +#line 716 "sql.y" { SToken t = yymsp[-1].minor.yy0; t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; - yylhsminor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); + yylhsminor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; +#line 6743 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 390: /* signed_literal ::= NK_STRING */ -{ yylhsminor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 397: /* signed_literal ::= NK_STRING */ +#line 723 "sql.y" +{ yylhsminor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } +#line 6749 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 391: /* signed_literal ::= NK_BOOL */ -{ yylhsminor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 398: /* signed_literal ::= NK_BOOL */ +#line 724 "sql.y" +{ yylhsminor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } +#line 6755 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 392: /* signed_literal ::= TIMESTAMP NK_STRING */ -{ yymsp[-1].minor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } + case 399: /* signed_literal ::= TIMESTAMP NK_STRING */ +#line 725 "sql.y" +{ yymsp[-1].minor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } +#line 6761 "sql.c" break; - case 393: /* signed_literal ::= duration_literal */ - case 395: /* signed_literal ::= literal_func */ yytestcase(yyruleno==395); - case 466: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==466); - case 532: /* select_item ::= common_expression */ yytestcase(yyruleno==532); - case 542: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==542); - case 580: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==580); - case 582: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==582); - case 595: /* search_condition ::= common_expression */ yytestcase(yyruleno==595); -{ yylhsminor.yy952 = releaseRawExprNode(pCxt, yymsp[0].minor.yy952); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 400: /* signed_literal ::= duration_literal */ + case 402: /* signed_literal ::= literal_func */ yytestcase(yyruleno==402); + case 473: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==473); + case 539: /* select_item ::= common_expression */ yytestcase(yyruleno==539); + case 549: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==549); + case 587: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==587); + case 589: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==589); + case 602: /* search_condition ::= common_expression */ yytestcase(yyruleno==602); +#line 726 "sql.y" +{ yylhsminor.yy28 = releaseRawExprNode(pCxt, yymsp[0].minor.yy28); } +#line 6773 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 394: /* signed_literal ::= NULL */ -{ yylhsminor.yy952 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 401: /* signed_literal ::= NULL */ +#line 727 "sql.y" +{ yylhsminor.yy28 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } +#line 6779 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 396: /* signed_literal ::= NK_QUESTION */ -{ yylhsminor.yy952 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 403: /* signed_literal ::= NK_QUESTION */ +#line 729 "sql.y" +{ yylhsminor.yy28 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } +#line 6785 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 416: /* expression ::= NK_LP expression NK_RP */ - case 500: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==500); - case 594: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==594); -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy952)); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 423: /* expression ::= NK_LP expression NK_RP */ + case 507: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==507); + case 601: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==601); +#line 790 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy28)); } +#line 6793 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 417: /* expression ::= NK_PLUS expr_or_subquery */ + case 424: /* expression ::= NK_PLUS expr_or_subquery */ +#line 791 "sql.y" { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy952)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy28)); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; +#line 6802 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 418: /* expression ::= NK_MINUS expr_or_subquery */ + case 425: /* expression ::= NK_MINUS expr_or_subquery */ +#line 795 "sql.y" { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy952), NULL)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy28), NULL)); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; +#line 6811 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 419: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + case 426: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ +#line 799 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6821 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 420: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + case 427: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ +#line 804 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6831 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 421: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + case 428: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */ +#line 809 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6841 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 422: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + case 429: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ +#line 814 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6851 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 423: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */ + case 430: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */ +#line 819 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6861 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 424: /* expression ::= column_reference NK_ARROW NK_STRING */ + case 431: /* expression ::= column_reference NK_ARROW NK_STRING */ +#line 824 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6870 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 425: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + case 432: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ +#line 828 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6880 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 426: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + case 433: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ +#line 833 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6890 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 429: /* column_reference ::= column_name */ -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy169, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy169)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 436: /* column_reference ::= column_name */ +#line 844 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy889, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy889)); } +#line 6896 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 430: /* column_reference ::= table_name NK_DOT column_name */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy169, createColumnNode(pCxt, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy169)); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 437: /* column_reference ::= table_name NK_DOT column_name */ +#line 845 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy889, createColumnNode(pCxt, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy889)); } +#line 6902 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 431: /* pseudo_column ::= ROWTS */ - case 432: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==432); - case 434: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==434); - case 435: /* pseudo_column ::= QEND */ yytestcase(yyruleno==435); - case 436: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==436); - case 437: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==437); - case 438: /* pseudo_column ::= WEND */ yytestcase(yyruleno==438); - case 439: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==439); - case 440: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==440); - case 441: /* pseudo_column ::= ISFILLED */ yytestcase(yyruleno==441); - case 442: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==442); - case 448: /* literal_func ::= NOW */ yytestcase(yyruleno==448); -{ yylhsminor.yy952 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 438: /* pseudo_column ::= ROWTS */ + case 439: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==439); + case 441: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==441); + case 442: /* pseudo_column ::= QEND */ yytestcase(yyruleno==442); + case 443: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==443); + case 444: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==444); + case 445: /* pseudo_column ::= WEND */ yytestcase(yyruleno==445); + case 446: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==446); + case 447: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==447); + case 448: /* pseudo_column ::= ISFILLED */ yytestcase(yyruleno==448); + case 449: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==449); + case 455: /* literal_func ::= NOW */ yytestcase(yyruleno==455); +#line 847 "sql.y" +{ yylhsminor.yy28 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } +#line 6919 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 433: /* pseudo_column ::= table_name NK_DOT TBNAME */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy169)))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 440: /* pseudo_column ::= table_name NK_DOT TBNAME */ +#line 849 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy889)))); } +#line 6925 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 443: /* function_expression ::= function_name NK_LP expression_list NK_RP */ - case 444: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==444); -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy169, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy169, yymsp[-1].minor.yy824)); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; + case 450: /* function_expression ::= function_name NK_LP expression_list NK_RP */ + case 451: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==451); +#line 860 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy889, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy889, yymsp[-1].minor.yy236)); } +#line 6932 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 445: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), yymsp[-1].minor.yy84)); } - yymsp[-5].minor.yy952 = yylhsminor.yy952; + case 452: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ +#line 863 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), yymsp[-1].minor.yy32)); } +#line 6938 "sql.c" + yymsp[-5].minor.yy28 = yylhsminor.yy28; break; - case 447: /* literal_func ::= noarg_func NK_LP NK_RP */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy169, NULL)); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 454: /* literal_func ::= noarg_func NK_LP NK_RP */ +#line 866 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy889, NULL)); } +#line 6944 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 462: /* star_func_para_list ::= NK_STAR */ -{ yylhsminor.yy824 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy824 = yylhsminor.yy824; + case 469: /* star_func_para_list ::= NK_STAR */ +#line 890 "sql.y" +{ yylhsminor.yy236 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } +#line 6950 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; break; - case 467: /* star_func_para ::= table_name NK_DOT NK_STAR */ - case 535: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==535); -{ yylhsminor.yy952 = createColumnNode(pCxt, &yymsp[-2].minor.yy169, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 474: /* star_func_para ::= table_name NK_DOT NK_STAR */ + case 542: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==542); +#line 899 "sql.y" +{ yylhsminor.yy28 = createColumnNode(pCxt, &yymsp[-2].minor.yy889, &yymsp[0].minor.yy0); } +#line 6957 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 468: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy824, yymsp[-1].minor.yy952)); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; + case 475: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */ +#line 902 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy236, yymsp[-1].minor.yy28)); } +#line 6963 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 469: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), yymsp[-2].minor.yy824, yymsp[-1].minor.yy952)); } - yymsp[-4].minor.yy952 = yylhsminor.yy952; + case 476: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ +#line 904 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), yymsp[-2].minor.yy236, yymsp[-1].minor.yy28)); } +#line 6969 "sql.c" + yymsp[-4].minor.yy28 = yylhsminor.yy28; break; - case 472: /* when_then_expr ::= WHEN common_expression THEN common_expression */ -{ yymsp[-3].minor.yy952 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952)); } + case 479: /* when_then_expr ::= WHEN common_expression THEN common_expression */ +#line 911 "sql.y" +{ yymsp[-3].minor.yy28 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28)); } +#line 6975 "sql.c" break; - case 474: /* case_when_else_opt ::= ELSE common_expression */ -{ yymsp[-1].minor.yy952 = releaseRawExprNode(pCxt, yymsp[0].minor.yy952); } + case 481: /* case_when_else_opt ::= ELSE common_expression */ +#line 914 "sql.y" +{ yymsp[-1].minor.yy28 = releaseRawExprNode(pCxt, yymsp[0].minor.yy28); } +#line 6980 "sql.c" break; - case 475: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */ - case 480: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==480); + case 482: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */ + case 487: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==487); +#line 917 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy520, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy896, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 6990 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 476: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + case 483: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ +#line 924 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy952), releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy28), releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-4].minor.yy952 = yylhsminor.yy952; +#line 7000 "sql.c" + yymsp[-4].minor.yy28 = yylhsminor.yy28; break; - case 477: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + case 484: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ +#line 930 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy952), releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy28), releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-5].minor.yy952 = yylhsminor.yy952; +#line 7010 "sql.c" + yymsp[-5].minor.yy28 = yylhsminor.yy28; break; - case 478: /* predicate ::= expr_or_subquery IS NULL */ + case 485: /* predicate ::= expr_or_subquery IS NULL */ +#line 935 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), NULL)); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 7019 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 479: /* predicate ::= expr_or_subquery IS NOT NULL */ + case 486: /* predicate ::= expr_or_subquery IS NOT NULL */ +#line 939 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), NULL)); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; +#line 7028 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 481: /* compare_op ::= NK_LT */ -{ yymsp[0].minor.yy520 = OP_TYPE_LOWER_THAN; } + case 488: /* compare_op ::= NK_LT */ +#line 951 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_LOWER_THAN; } +#line 7034 "sql.c" break; - case 482: /* compare_op ::= NK_GT */ -{ yymsp[0].minor.yy520 = OP_TYPE_GREATER_THAN; } + case 489: /* compare_op ::= NK_GT */ +#line 952 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_GREATER_THAN; } +#line 7039 "sql.c" break; - case 483: /* compare_op ::= NK_LE */ -{ yymsp[0].minor.yy520 = OP_TYPE_LOWER_EQUAL; } + case 490: /* compare_op ::= NK_LE */ +#line 953 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_LOWER_EQUAL; } +#line 7044 "sql.c" break; - case 484: /* compare_op ::= NK_GE */ -{ yymsp[0].minor.yy520 = OP_TYPE_GREATER_EQUAL; } + case 491: /* compare_op ::= NK_GE */ +#line 954 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_GREATER_EQUAL; } +#line 7049 "sql.c" break; - case 485: /* compare_op ::= NK_NE */ -{ yymsp[0].minor.yy520 = OP_TYPE_NOT_EQUAL; } + case 492: /* compare_op ::= NK_NE */ +#line 955 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_NOT_EQUAL; } +#line 7054 "sql.c" break; - case 486: /* compare_op ::= NK_EQ */ -{ yymsp[0].minor.yy520 = OP_TYPE_EQUAL; } + case 493: /* compare_op ::= NK_EQ */ +#line 956 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_EQUAL; } +#line 7059 "sql.c" break; - case 487: /* compare_op ::= LIKE */ -{ yymsp[0].minor.yy520 = OP_TYPE_LIKE; } + case 494: /* compare_op ::= LIKE */ +#line 957 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_LIKE; } +#line 7064 "sql.c" break; - case 488: /* compare_op ::= NOT LIKE */ -{ yymsp[-1].minor.yy520 = OP_TYPE_NOT_LIKE; } + case 495: /* compare_op ::= NOT LIKE */ +#line 958 "sql.y" +{ yymsp[-1].minor.yy896 = OP_TYPE_NOT_LIKE; } +#line 7069 "sql.c" break; - case 489: /* compare_op ::= MATCH */ -{ yymsp[0].minor.yy520 = OP_TYPE_MATCH; } + case 496: /* compare_op ::= MATCH */ +#line 959 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_MATCH; } +#line 7074 "sql.c" break; - case 490: /* compare_op ::= NMATCH */ -{ yymsp[0].minor.yy520 = OP_TYPE_NMATCH; } + case 497: /* compare_op ::= NMATCH */ +#line 960 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_NMATCH; } +#line 7079 "sql.c" break; - case 491: /* compare_op ::= CONTAINS */ -{ yymsp[0].minor.yy520 = OP_TYPE_JSON_CONTAINS; } + case 498: /* compare_op ::= CONTAINS */ +#line 961 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_JSON_CONTAINS; } +#line 7084 "sql.c" break; - case 492: /* in_op ::= IN */ -{ yymsp[0].minor.yy520 = OP_TYPE_IN; } + case 499: /* in_op ::= IN */ +#line 965 "sql.y" +{ yymsp[0].minor.yy896 = OP_TYPE_IN; } +#line 7089 "sql.c" break; - case 493: /* in_op ::= NOT IN */ -{ yymsp[-1].minor.yy520 = OP_TYPE_NOT_IN; } + case 500: /* in_op ::= NOT IN */ +#line 966 "sql.y" +{ yymsp[-1].minor.yy896 = OP_TYPE_NOT_IN; } +#line 7094 "sql.c" break; - case 494: /* in_predicate_value ::= NK_LP literal_list NK_RP */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy824)); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 501: /* in_predicate_value ::= NK_LP literal_list NK_RP */ +#line 968 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy236)); } +#line 7099 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 496: /* boolean_value_expression ::= NOT boolean_primary */ + case 503: /* boolean_value_expression ::= NOT boolean_primary */ +#line 972 "sql.y" { - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy952), NULL)); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy28), NULL)); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; +#line 7108 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 497: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + case 504: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ +#line 977 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 7118 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 498: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + case 505: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ +#line 983 "sql.y" { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy952); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy952); - yylhsminor.yy952 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy28); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy28); + yylhsminor.yy28 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; +#line 7128 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 506: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ -{ yylhsminor.yy952 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy952, yymsp[0].minor.yy952, NULL); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 513: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ +#line 1001 "sql.y" +{ yylhsminor.yy28 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy28, yymsp[0].minor.yy28, NULL); } +#line 7134 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 509: /* table_primary ::= table_name alias_opt */ -{ yylhsminor.yy952 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy169, &yymsp[0].minor.yy169); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; + case 516: /* table_primary ::= table_name alias_opt */ +#line 1007 "sql.y" +{ yylhsminor.yy28 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy889, &yymsp[0].minor.yy889); } +#line 7140 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 510: /* table_primary ::= db_name NK_DOT table_name alias_opt */ -{ yylhsminor.yy952 = createRealTableNode(pCxt, &yymsp[-3].minor.yy169, &yymsp[-1].minor.yy169, &yymsp[0].minor.yy169); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; + case 517: /* table_primary ::= db_name NK_DOT table_name alias_opt */ +#line 1008 "sql.y" +{ yylhsminor.yy28 = createRealTableNode(pCxt, &yymsp[-3].minor.yy889, &yymsp[-1].minor.yy889, &yymsp[0].minor.yy889); } +#line 7146 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 511: /* table_primary ::= subquery alias_opt */ -{ yylhsminor.yy952 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy952), &yymsp[0].minor.yy169); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; + case 518: /* table_primary ::= subquery alias_opt */ +#line 1009 "sql.y" +{ yylhsminor.yy28 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy28), &yymsp[0].minor.yy889); } +#line 7152 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 513: /* alias_opt ::= */ -{ yymsp[1].minor.yy169 = nil_token; } + case 520: /* alias_opt ::= */ +#line 1014 "sql.y" +{ yymsp[1].minor.yy889 = nil_token; } +#line 7158 "sql.c" break; - case 515: /* alias_opt ::= AS table_alias */ -{ yymsp[-1].minor.yy169 = yymsp[0].minor.yy169; } + case 522: /* alias_opt ::= AS table_alias */ +#line 1016 "sql.y" +{ yymsp[-1].minor.yy889 = yymsp[0].minor.yy889; } +#line 7163 "sql.c" break; - case 516: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - case 517: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==517); -{ yymsp[-2].minor.yy952 = yymsp[-1].minor.yy952; } + case 523: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + case 524: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==524); +#line 1018 "sql.y" +{ yymsp[-2].minor.yy28 = yymsp[-1].minor.yy28; } +#line 7169 "sql.c" break; - case 518: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ -{ yylhsminor.yy952 = createJoinTableNode(pCxt, yymsp[-4].minor.yy932, yymsp[-5].minor.yy952, yymsp[-2].minor.yy952, yymsp[0].minor.yy952); } - yymsp[-5].minor.yy952 = yylhsminor.yy952; + case 525: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ +#line 1023 "sql.y" +{ yylhsminor.yy28 = createJoinTableNode(pCxt, yymsp[-4].minor.yy152, yymsp[-5].minor.yy28, yymsp[-2].minor.yy28, yymsp[0].minor.yy28); } +#line 7174 "sql.c" + yymsp[-5].minor.yy28 = yylhsminor.yy28; break; - case 519: /* join_type ::= */ -{ yymsp[1].minor.yy932 = JOIN_TYPE_INNER; } + case 526: /* join_type ::= */ +#line 1027 "sql.y" +{ yymsp[1].minor.yy152 = JOIN_TYPE_INNER; } +#line 7180 "sql.c" break; - case 520: /* join_type ::= INNER */ -{ yymsp[0].minor.yy932 = JOIN_TYPE_INNER; } + case 527: /* join_type ::= INNER */ +#line 1028 "sql.y" +{ yymsp[0].minor.yy152 = JOIN_TYPE_INNER; } +#line 7185 "sql.c" break; - case 521: /* query_specification ::= SELECT hint_list tag_mode_opt set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */ + case 528: /* query_specification ::= SELECT hint_list tag_mode_opt set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */ +#line 1034 "sql.y" { - yymsp[-13].minor.yy952 = createSelectStmt(pCxt, yymsp[-10].minor.yy957, yymsp[-9].minor.yy824, yymsp[-8].minor.yy952, yymsp[-12].minor.yy824); - yymsp[-13].minor.yy952 = setSelectStmtTagMode(pCxt, yymsp[-13].minor.yy952, yymsp[-11].minor.yy957); - yymsp[-13].minor.yy952 = addWhereClause(pCxt, yymsp[-13].minor.yy952, yymsp[-7].minor.yy952); - yymsp[-13].minor.yy952 = addPartitionByClause(pCxt, yymsp[-13].minor.yy952, yymsp[-6].minor.yy824); - yymsp[-13].minor.yy952 = addWindowClauseClause(pCxt, yymsp[-13].minor.yy952, yymsp[-2].minor.yy952); - yymsp[-13].minor.yy952 = addGroupByClause(pCxt, yymsp[-13].minor.yy952, yymsp[-1].minor.yy824); - yymsp[-13].minor.yy952 = addHavingClause(pCxt, yymsp[-13].minor.yy952, yymsp[0].minor.yy952); - yymsp[-13].minor.yy952 = addRangeClause(pCxt, yymsp[-13].minor.yy952, yymsp[-5].minor.yy952); - yymsp[-13].minor.yy952 = addEveryClause(pCxt, yymsp[-13].minor.yy952, yymsp[-4].minor.yy952); - yymsp[-13].minor.yy952 = addFillClause(pCxt, yymsp[-13].minor.yy952, yymsp[-3].minor.yy952); + yymsp[-13].minor.yy28 = createSelectStmt(pCxt, yymsp[-10].minor.yy793, yymsp[-9].minor.yy236, yymsp[-8].minor.yy28, yymsp[-12].minor.yy236); + yymsp[-13].minor.yy28 = setSelectStmtTagMode(pCxt, yymsp[-13].minor.yy28, yymsp[-11].minor.yy793); + yymsp[-13].minor.yy28 = addWhereClause(pCxt, yymsp[-13].minor.yy28, yymsp[-7].minor.yy28); + yymsp[-13].minor.yy28 = addPartitionByClause(pCxt, yymsp[-13].minor.yy28, yymsp[-6].minor.yy236); + yymsp[-13].minor.yy28 = addWindowClauseClause(pCxt, yymsp[-13].minor.yy28, yymsp[-2].minor.yy28); + yymsp[-13].minor.yy28 = addGroupByClause(pCxt, yymsp[-13].minor.yy28, yymsp[-1].minor.yy236); + yymsp[-13].minor.yy28 = addHavingClause(pCxt, yymsp[-13].minor.yy28, yymsp[0].minor.yy28); + yymsp[-13].minor.yy28 = addRangeClause(pCxt, yymsp[-13].minor.yy28, yymsp[-5].minor.yy28); + yymsp[-13].minor.yy28 = addEveryClause(pCxt, yymsp[-13].minor.yy28, yymsp[-4].minor.yy28); + yymsp[-13].minor.yy28 = addFillClause(pCxt, yymsp[-13].minor.yy28, yymsp[-3].minor.yy28); } +#line 7201 "sql.c" break; - case 522: /* hint_list ::= */ -{ yymsp[1].minor.yy824 = createHintNodeList(pCxt, NULL); } + case 529: /* hint_list ::= */ +#line 1049 "sql.y" +{ yymsp[1].minor.yy236 = createHintNodeList(pCxt, NULL); } +#line 7206 "sql.c" break; - case 523: /* hint_list ::= NK_HINT */ -{ yylhsminor.yy824 = createHintNodeList(pCxt, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy824 = yylhsminor.yy824; + case 530: /* hint_list ::= NK_HINT */ +#line 1050 "sql.y" +{ yylhsminor.yy236 = createHintNodeList(pCxt, &yymsp[0].minor.yy0); } +#line 7211 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; break; - case 528: /* set_quantifier_opt ::= ALL */ -{ yymsp[0].minor.yy957 = false; } + case 535: /* set_quantifier_opt ::= ALL */ +#line 1061 "sql.y" +{ yymsp[0].minor.yy793 = false; } +#line 7217 "sql.c" break; - case 531: /* select_item ::= NK_STAR */ -{ yylhsminor.yy952 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy952 = yylhsminor.yy952; + case 538: /* select_item ::= NK_STAR */ +#line 1068 "sql.y" +{ yylhsminor.yy28 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } +#line 7222 "sql.c" + yymsp[0].minor.yy28 = yylhsminor.yy28; break; - case 533: /* select_item ::= common_expression column_alias */ - case 543: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==543); -{ yylhsminor.yy952 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy952), &yymsp[0].minor.yy169); } - yymsp[-1].minor.yy952 = yylhsminor.yy952; + case 540: /* select_item ::= common_expression column_alias */ + case 550: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==550); +#line 1070 "sql.y" +{ yylhsminor.yy28 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy28), &yymsp[0].minor.yy889); } +#line 7229 "sql.c" + yymsp[-1].minor.yy28 = yylhsminor.yy28; break; - case 534: /* select_item ::= common_expression AS column_alias */ - case 544: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==544); -{ yylhsminor.yy952 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), &yymsp[0].minor.yy169); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 541: /* select_item ::= common_expression AS column_alias */ + case 551: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==551); +#line 1071 "sql.y" +{ yylhsminor.yy28 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), &yymsp[0].minor.yy889); } +#line 7236 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 539: /* partition_by_clause_opt ::= PARTITION BY partition_list */ - case 564: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==564); - case 584: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==584); -{ yymsp[-2].minor.yy824 = yymsp[0].minor.yy824; } + case 546: /* partition_by_clause_opt ::= PARTITION BY partition_list */ + case 571: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==571); + case 591: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==591); +#line 1080 "sql.y" +{ yymsp[-2].minor.yy236 = yymsp[0].minor.yy236; } +#line 7244 "sql.c" break; - case 546: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ -{ yymsp[-5].minor.yy952 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), releaseRawExprNode(pCxt, yymsp[-1].minor.yy952)); } + case 553: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ +#line 1093 "sql.y" +{ yymsp[-5].minor.yy28 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), releaseRawExprNode(pCxt, yymsp[-1].minor.yy28)); } +#line 7249 "sql.c" break; - case 547: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ -{ yymsp[-3].minor.yy952 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy952)); } + case 554: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ +#line 1094 "sql.y" +{ yymsp[-3].minor.yy28 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy28)); } +#line 7254 "sql.c" break; - case 548: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-5].minor.yy952 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), NULL, yymsp[-1].minor.yy952, yymsp[0].minor.yy952); } + case 555: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ +#line 1096 "sql.y" +{ yymsp[-5].minor.yy28 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), NULL, yymsp[-1].minor.yy28, yymsp[0].minor.yy28); } +#line 7259 "sql.c" break; - case 549: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-7].minor.yy952 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy952), releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), yymsp[-1].minor.yy952, yymsp[0].minor.yy952); } + case 556: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ +#line 1099 "sql.y" +{ yymsp[-7].minor.yy28 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy28), releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), yymsp[-1].minor.yy28, yymsp[0].minor.yy28); } +#line 7264 "sql.c" break; - case 550: /* twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ -{ yymsp[-6].minor.yy952 = createEventWindowNode(pCxt, yymsp[-3].minor.yy952, yymsp[0].minor.yy952); } + case 557: /* twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */ +#line 1101 "sql.y" +{ yymsp[-6].minor.yy28 = createEventWindowNode(pCxt, yymsp[-3].minor.yy28, yymsp[0].minor.yy28); } +#line 7269 "sql.c" break; - case 554: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ -{ yymsp[-3].minor.yy952 = createFillNode(pCxt, yymsp[-1].minor.yy214, NULL); } + case 561: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ +#line 1107 "sql.y" +{ yymsp[-3].minor.yy28 = createFillNode(pCxt, yymsp[-1].minor.yy322, NULL); } +#line 7274 "sql.c" break; - case 555: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA expression_list NK_RP */ -{ yymsp[-5].minor.yy952 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy824)); } + case 562: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA expression_list NK_RP */ +#line 1108 "sql.y" +{ yymsp[-5].minor.yy28 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy236)); } +#line 7279 "sql.c" break; - case 556: /* fill_opt ::= FILL NK_LP VALUE_F NK_COMMA expression_list NK_RP */ -{ yymsp[-5].minor.yy952 = createFillNode(pCxt, FILL_MODE_VALUE_F, createNodeListNode(pCxt, yymsp[-1].minor.yy824)); } + case 563: /* fill_opt ::= FILL NK_LP VALUE_F NK_COMMA expression_list NK_RP */ +#line 1109 "sql.y" +{ yymsp[-5].minor.yy28 = createFillNode(pCxt, FILL_MODE_VALUE_F, createNodeListNode(pCxt, yymsp[-1].minor.yy236)); } +#line 7284 "sql.c" break; - case 557: /* fill_mode ::= NONE */ -{ yymsp[0].minor.yy214 = FILL_MODE_NONE; } + case 564: /* fill_mode ::= NONE */ +#line 1113 "sql.y" +{ yymsp[0].minor.yy322 = FILL_MODE_NONE; } +#line 7289 "sql.c" break; - case 558: /* fill_mode ::= PREV */ -{ yymsp[0].minor.yy214 = FILL_MODE_PREV; } + case 565: /* fill_mode ::= PREV */ +#line 1114 "sql.y" +{ yymsp[0].minor.yy322 = FILL_MODE_PREV; } +#line 7294 "sql.c" break; - case 559: /* fill_mode ::= NULL */ -{ yymsp[0].minor.yy214 = FILL_MODE_NULL; } + case 566: /* fill_mode ::= NULL */ +#line 1115 "sql.y" +{ yymsp[0].minor.yy322 = FILL_MODE_NULL; } +#line 7299 "sql.c" break; - case 560: /* fill_mode ::= NULL_F */ -{ yymsp[0].minor.yy214 = FILL_MODE_NULL_F; } + case 567: /* fill_mode ::= NULL_F */ +#line 1116 "sql.y" +{ yymsp[0].minor.yy322 = FILL_MODE_NULL_F; } +#line 7304 "sql.c" break; - case 561: /* fill_mode ::= LINEAR */ -{ yymsp[0].minor.yy214 = FILL_MODE_LINEAR; } + case 568: /* fill_mode ::= LINEAR */ +#line 1117 "sql.y" +{ yymsp[0].minor.yy322 = FILL_MODE_LINEAR; } +#line 7309 "sql.c" break; - case 562: /* fill_mode ::= NEXT */ -{ yymsp[0].minor.yy214 = FILL_MODE_NEXT; } + case 569: /* fill_mode ::= NEXT */ +#line 1118 "sql.y" +{ yymsp[0].minor.yy322 = FILL_MODE_NEXT; } +#line 7314 "sql.c" break; - case 565: /* group_by_list ::= expr_or_subquery */ -{ yylhsminor.yy824 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); } - yymsp[0].minor.yy824 = yylhsminor.yy824; + case 572: /* group_by_list ::= expr_or_subquery */ +#line 1127 "sql.y" +{ yylhsminor.yy236 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } +#line 7319 "sql.c" + yymsp[0].minor.yy236 = yylhsminor.yy236; break; - case 566: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ -{ yylhsminor.yy824 = addNodeToList(pCxt, yymsp[-2].minor.yy824, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy952))); } - yymsp[-2].minor.yy824 = yylhsminor.yy824; + case 573: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ +#line 1128 "sql.y" +{ yylhsminor.yy236 = addNodeToList(pCxt, yymsp[-2].minor.yy236, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy28))); } +#line 7325 "sql.c" + yymsp[-2].minor.yy236 = yylhsminor.yy236; break; - case 570: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ -{ yymsp[-5].minor.yy952 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy952), releaseRawExprNode(pCxt, yymsp[-1].minor.yy952)); } + case 577: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ +#line 1135 "sql.y" +{ yymsp[-5].minor.yy28 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy28), releaseRawExprNode(pCxt, yymsp[-1].minor.yy28)); } +#line 7331 "sql.c" break; - case 571: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_RP */ -{ yymsp[-3].minor.yy952 = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy952)); } + case 578: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_RP */ +#line 1137 "sql.y" +{ yymsp[-3].minor.yy28 = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy28)); } +#line 7336 "sql.c" break; - case 574: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + case 581: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ +#line 1144 "sql.y" { - yylhsminor.yy952 = addOrderByClause(pCxt, yymsp[-3].minor.yy952, yymsp[-2].minor.yy824); - yylhsminor.yy952 = addSlimitClause(pCxt, yylhsminor.yy952, yymsp[-1].minor.yy952); - yylhsminor.yy952 = addLimitClause(pCxt, yylhsminor.yy952, yymsp[0].minor.yy952); + yylhsminor.yy28 = addOrderByClause(pCxt, yymsp[-3].minor.yy28, yymsp[-2].minor.yy236); + yylhsminor.yy28 = addSlimitClause(pCxt, yylhsminor.yy28, yymsp[-1].minor.yy28); + yylhsminor.yy28 = addLimitClause(pCxt, yylhsminor.yy28, yymsp[0].minor.yy28); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; +#line 7345 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 577: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ -{ yylhsminor.yy952 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy952, yymsp[0].minor.yy952); } - yymsp[-3].minor.yy952 = yylhsminor.yy952; + case 584: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ +#line 1154 "sql.y" +{ yylhsminor.yy28 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy28, yymsp[0].minor.yy28); } +#line 7351 "sql.c" + yymsp[-3].minor.yy28 = yylhsminor.yy28; break; - case 578: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ -{ yylhsminor.yy952 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy952, yymsp[0].minor.yy952); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 585: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ +#line 1156 "sql.y" +{ yylhsminor.yy28 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy28, yymsp[0].minor.yy28); } +#line 7357 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 586: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ - case 590: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==590); -{ yymsp[-1].minor.yy952 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } + case 593: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ + case 597: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==597); +#line 1170 "sql.y" +{ yymsp[-1].minor.yy28 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } +#line 7364 "sql.c" break; - case 587: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - case 591: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==591); -{ yymsp[-3].minor.yy952 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } + case 594: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + case 598: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==598); +#line 1171 "sql.y" +{ yymsp[-3].minor.yy28 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } +#line 7370 "sql.c" break; - case 588: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - case 592: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==592); -{ yymsp[-3].minor.yy952 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } + case 595: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + case 599: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==599); +#line 1172 "sql.y" +{ yymsp[-3].minor.yy28 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } +#line 7376 "sql.c" break; - case 593: /* subquery ::= NK_LP query_expression NK_RP */ -{ yylhsminor.yy952 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy952); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 600: /* subquery ::= NK_LP query_expression NK_RP */ +#line 1180 "sql.y" +{ yylhsminor.yy28 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy28); } +#line 7381 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 598: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ -{ yylhsminor.yy952 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy952), yymsp[-1].minor.yy498, yymsp[0].minor.yy977); } - yymsp[-2].minor.yy952 = yylhsminor.yy952; + case 605: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ +#line 1194 "sql.y" +{ yylhsminor.yy28 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy28), yymsp[-1].minor.yy734, yymsp[0].minor.yy945); } +#line 7387 "sql.c" + yymsp[-2].minor.yy28 = yylhsminor.yy28; break; - case 599: /* ordering_specification_opt ::= */ -{ yymsp[1].minor.yy498 = ORDER_ASC; } + case 606: /* ordering_specification_opt ::= */ +#line 1198 "sql.y" +{ yymsp[1].minor.yy734 = ORDER_ASC; } +#line 7393 "sql.c" break; - case 600: /* ordering_specification_opt ::= ASC */ -{ yymsp[0].minor.yy498 = ORDER_ASC; } + case 607: /* ordering_specification_opt ::= ASC */ +#line 1199 "sql.y" +{ yymsp[0].minor.yy734 = ORDER_ASC; } +#line 7398 "sql.c" break; - case 601: /* ordering_specification_opt ::= DESC */ -{ yymsp[0].minor.yy498 = ORDER_DESC; } + case 608: /* ordering_specification_opt ::= DESC */ +#line 1200 "sql.y" +{ yymsp[0].minor.yy734 = ORDER_DESC; } +#line 7403 "sql.c" break; - case 602: /* null_ordering_opt ::= */ -{ yymsp[1].minor.yy977 = NULL_ORDER_DEFAULT; } + case 609: /* null_ordering_opt ::= */ +#line 1204 "sql.y" +{ yymsp[1].minor.yy945 = NULL_ORDER_DEFAULT; } +#line 7408 "sql.c" break; - case 603: /* null_ordering_opt ::= NULLS FIRST */ -{ yymsp[-1].minor.yy977 = NULL_ORDER_FIRST; } + case 610: /* null_ordering_opt ::= NULLS FIRST */ +#line 1205 "sql.y" +{ yymsp[-1].minor.yy945 = NULL_ORDER_FIRST; } +#line 7413 "sql.c" break; - case 604: /* null_ordering_opt ::= NULLS LAST */ -{ yymsp[-1].minor.yy977 = NULL_ORDER_LAST; } + case 611: /* null_ordering_opt ::= NULLS LAST */ +#line 1206 "sql.y" +{ yymsp[-1].minor.yy945 = NULL_ORDER_LAST; } +#line 7418 "sql.c" break; default: break; @@ -6290,6 +7477,7 @@ static void yy_syntax_error( ParseCTX_FETCH #define TOKEN yyminor /************ Begin %syntax_error code ****************************************/ +#line 29 "sql.y" if (TSDB_CODE_SUCCESS == pCxt->errCode) { if(TOKEN.z) { @@ -6300,6 +7488,7 @@ static void yy_syntax_error( } else if (TSDB_CODE_PAR_DB_NOT_SPECIFIED == pCxt->errCode && TK_NK_FLOAT == TOKEN.type) { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, TOKEN.z); } +#line 7491 "sql.c" /************ End %syntax_error code ******************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ ParseCTX_STORE @@ -6385,12 +7574,56 @@ void Parse( } #endif - do{ + while(1){ /* Exit by "break" */ + assert( yypParser->yytos>=yypParser->yystack ); assert( yyact==yypParser->yytos->stateno ); yyact = yy_find_shift_action((YYCODETYPE)yymajor,yyact); if( yyact >= YY_MIN_REDUCE ){ - yyact = yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor, - yyminor ParseCTX_PARAM); + unsigned int yyruleno = yyact - YY_MIN_REDUCE; /* Reduce by this rule */ +#ifndef NDEBUG + assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ); + if( yyTraceFILE ){ + int yysize = yyRuleInfoNRhs[yyruleno]; + if( yysize ){ + fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n", + yyTracePrompt, + yyruleno, yyRuleName[yyruleno], + yyrulenoyytos[yysize].stateno); + }else{ + fprintf(yyTraceFILE, "%sReduce %d [%s]%s.\n", + yyTracePrompt, yyruleno, yyRuleName[yyruleno], + yyrulenoyytos - yypParser->yystack)>yypParser->yyhwm ){ + yypParser->yyhwm++; + assert( yypParser->yyhwm == + (int)(yypParser->yytos - yypParser->yystack)); + } +#endif +#if YYSTACKDEPTH>0 + if( yypParser->yytos>=yypParser->yystackEnd ){ + yyStackOverflow(yypParser); + break; + } +#else + if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ + if( yyGrowStack(yypParser) ){ + yyStackOverflow(yypParser); + break; + } + } +#endif + } + yyact = yy_reduce(yypParser,yyruleno,yymajor,yyminor ParseCTX_PARAM); }else if( yyact <= YY_MAX_SHIFTREDUCE ){ yy_shift(yypParser,yyact,(YYCODETYPE)yymajor,yyminor); #ifndef YYNOERRORRECOVERY @@ -6446,14 +7679,13 @@ void Parse( yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); yymajor = YYNOCODE; }else{ - while( yypParser->yytos >= yypParser->yystack - && (yyact = yy_find_reduce_action( - yypParser->yytos->stateno, - YYERRORSYMBOL)) > YY_MAX_SHIFTREDUCE - ){ + while( yypParser->yytos > yypParser->yystack ){ + yyact = yy_find_reduce_action(yypParser->yytos->stateno, + YYERRORSYMBOL); + if( yyact<=YY_MAX_SHIFTREDUCE ) break; yy_pop_parser_stack(yypParser); } - if( yypParser->yytos < yypParser->yystack || yymajor==0 ){ + if( yypParser->yytos <= yypParser->yystack || yymajor==0 ){ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY @@ -6503,7 +7735,7 @@ void Parse( break; #endif } - }while( yypParser->yytos>yypParser->yystack ); + } #ifndef NDEBUG if( yyTraceFILE ){ yyStackEntry *i; From 2d32724c1b16da284843a4dc08bdc66205fcb3de Mon Sep 17 00:00:00 2001 From: "chao.feng" Date: Fri, 25 Aug 2023 15:17:09 +0800 Subject: [PATCH 02/74] update test case tmqSeekAndCommit.py by charles --- tests/parallel_test/cases.task | 1 + tests/system-test/7-tmq/tmqSeekAndCommit.py | 93 +++++++++++++++++++-- 2 files changed, 87 insertions(+), 7 deletions(-) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 326a754654..5dcba314fa 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -135,6 +135,7 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal-multiCtb.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_taosx.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSeekAndCommit.py ,,n,system-test,python3 ./test.py -f 7-tmq/tmq_offset.py ,,n,system-test,python3 ./test.py -f 7-tmq/tmqDataPrecisionUnit.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/raw_block_interface_test.py diff --git a/tests/system-test/7-tmq/tmqSeekAndCommit.py b/tests/system-test/7-tmq/tmqSeekAndCommit.py index 2d837ef7a4..253edcd10d 100644 --- a/tests/system-test/7-tmq/tmqSeekAndCommit.py +++ b/tests/system-test/7-tmq/tmqSeekAndCommit.py @@ -21,6 +21,7 @@ class TDTestCase: self.db_name = "tmq_db" self.topic_name = "tmq_topic" self.stable_name = "tmqst" + self.prepareData() def prepareData(self): @@ -73,8 +74,9 @@ class TDTestCase: return consumer def test_seek_and_committed_position_with_autocommit(self): + """Check the position and committed offset of the topic for autocommit scenario + """ try: - self.prepareData() inputDict = { "topic_name": self.topic_name, "group_id": "1", @@ -95,18 +97,26 @@ class TDTestCase: partitions = consumer.assignment() position_partitions = consumer.position(partitions) - tdLog.info("position_partitions: %s"%(position_partitions)) for i in range(len(position_partitions)): tdLog.info("position_partitions[%s].offset: %s"%(i, position_partitions[i].offset)) committed_partitions = consumer.committed(partitions) - tdLog.info("committed_partitions: %s"%(committed_partitions)) + origin_committed_position = [] for i in range(len(committed_partitions)): tdLog.info("committed_partitions[%s].offset: %s"%(i, committed_partitions[i].offset)) + origin_committed_position.append(committed_partitions[i].offset) assert(len(position_partitions) == len(committed_partitions)) for i in range(len(position_partitions)): assert(position_partitions[i].offset == committed_partitions[i].offset) - # seek to the beginning of the topic - + # seek to the specified offset of the topic, then check position and committed offset + for partition in partitions: + partition.offset = 5 + consumer.seek(partition) + position_partitions = consumer.position(partitions) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == 5) + committed_partitions = consumer.committed(partitions) + for i in range(len(committed_partitions)): + assert(committed_partitions[i].offset != 5 and committed_partitions[i].offset == origin_committed_position[i]) except Exception as ex: raise Exception("Failed to test seek and committed position with autocommit with error: {}".format(str(ex))) finally: @@ -114,12 +124,81 @@ class TDTestCase: consumer.close() def test_commit_by_offset(self): - pass - + """Check the position and committed offset of the topic for commit by offset scenario + """ + try: + inputDict = { + "topic_name": self.topic_name, + "group_id": "1", + "auto_commit": "false", + "offset_reset": "earliest" + } + consumer = self.tmqSubscribe(inputDict) + origin_committed_position = [] + while(True): + res = consumer.poll(1) + if not res: + break + err = res.error() + if err is not None: + raise err + partitions = consumer.assignment() + consumer.commit(offsets=partitions) + val = res.value() + for block in val: + tdLog.info("block.fetchall() number: %s"%(len(block.fetchall()))) + position_partitions = consumer.position(partitions) + committed_partitions = consumer.committed(partitions) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == committed_partitions[i].offset) + committed_partitions = consumer.committed(partitions) + for i in range(len(committed_partitions)): + origin_committed_position.append(committed_partitions[i].offset) + tdLog.info("original committed_partitions[%s].offset: %s"%(i, committed_partitions[i].offset)) + # seek to the specified offset of the topic, then check position and committed offset + for partition in partitions: + partition.offset = 2 + consumer.seek(partition) + position_partitions = consumer.position(partitions) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == 2) + committed_partitions = consumer.committed(partitions) + for i in range(len(committed_partitions)): + tdLog.info("after seek committed_partitions[%s].offset: %s"%(i, committed_partitions[i].offset)) + assert(committed_partitions[i].offset != 2 and committed_partitions[i].offset == origin_committed_position[i]) + # continue to consume data from seek offset + while(True): + res = consumer.poll(1) + if not res: + break + err = res.error() + if err is not None: + raise err + partitions = consumer.assignment() + # commit by offset + consumer.commit(offsets=partitions) + val = res.value() + for block in val: + tdLog.info("block.fetchall() number: %s"%(len(block.fetchall()))) + partitions = consumer.assignment() + position_partitions = consumer.position(partitions) + committed_partitions = consumer.committed(partitions) + assert(len(position_partitions) == len(committed_partitions)) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == committed_partitions[i].offset) + except Exception as ex: + raise Exception("Failed to test commit by offset with error: {}".format(str(ex))) + finally: + consumer.unsubscribe() + consumer.close() + def run(self): self.test_seek_and_committed_position_with_autocommit() + self.test_commit_by_offset() def stop(self): + tdSql.execute("drop topic %s" % self.topic_name) + tdSql.execute("drop database %s"%(self.db_name)) tdSql.close() tdLog.success(f"{__file__} successfully executed") From 66f0a69752d3910dc29a3b925acc2cd3a72e6c76 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 29 Aug 2023 14:31:47 +0800 Subject: [PATCH 03/74] feat: get cpu cores from quota --- source/os/src/osSysinfo.c | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index 5f73251e3b..053fa25fa3 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -124,6 +124,8 @@ static char tsSysCpuFile[] = "/proc/stat"; static char tsProcCpuFile[25] = {0}; static char tsProcMemFile[25] = {0}; static char tsProcIOFile[25] = {0}; +static char tsCpuCfsPeroid[] = "/sys/fs/cgroup/cpu/cpu.cfs_period_us"; +static char tsCpuCfsQuota[] = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"; static void taosGetProcIOnfos() { tsPageSizeKB = sysconf(_SC_PAGESIZE) / 1024; @@ -493,6 +495,53 @@ int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores) { #endif } +static int32_t taosCntrGetCpuCores(float *numOfCores) { +#ifdef WINDOWS + return -1; +#elif defined(_TD_DARWIN_64) + return -1; +#else + TdFilePtr pFile = NULL; + if (!(pFile = taosOpenFile(tsCpuCfsQuota, TD_FILE_READ | TD_FILE_STREAM))) { + goto _sys; + } + char qline[32] = {0}; + if (taosGetsFile(pFile, sizeof(qline), qline) < 0) { + taosCloseFile(&pFile); + goto _sys; + } + taosCloseFile(&pFile); + float quota = taosStr2Float(qline, NULL); + if (quota < 0) { + goto _sys; + } + + if (!(pFile = taosOpenFile(tsCpuCfsPeroid, TD_FILE_READ | TD_FILE_STREAM))) { + goto _sys; + } + char pline[32] = {0}; + if (taosGetsFile(pFile, sizeof(pline), pline) < 0) { + taosCloseFile(&pFile); + goto _sys; + } + taosCloseFile(&pFile); + + float peroid = taosStr2Float(pline, NULL); + float quotaCores = quota / peroid; + float sysCores = sysconf(_SC_NPROCESSORS_ONLN); + if (quotaCores < sysCores && quotaCores > 0) { + *numOfCores = quotaCores; + } else { + *numOfCores = sysCores; + } + goto _end; +_sys: + *numOfCores = sysconf(_SC_NPROCESSORS_ONLN); +_end: + return 0; +#endif +} + int32_t taosGetCpuCores(float *numOfCores) { #ifdef WINDOWS SYSTEM_INFO info; @@ -502,8 +551,12 @@ int32_t taosGetCpuCores(float *numOfCores) { #elif defined(_TD_DARWIN_64) *numOfCores = sysconf(_SC_NPROCESSORS_ONLN); return 0; +#else +#if 1 + taosCntrGetCpuCores(numOfCores); #else *numOfCores = sysconf(_SC_NPROCESSORS_ONLN); +#endif return 0; #endif } From f09429f08925e3fc0a54881b17bdc91e1d630f5e Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 29 Aug 2023 14:37:22 +0800 Subject: [PATCH 04/74] feat: get cpu cores from quota --- source/os/src/osSysinfo.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index 053fa25fa3..7a6897ed6d 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -121,11 +121,11 @@ LONG WINAPI exceptionHandler(LPEXCEPTION_POINTERS exception); static pid_t tsProcId; static char tsSysNetFile[] = "/proc/net/dev"; static char tsSysCpuFile[] = "/proc/stat"; +static char tsCpuPeroidFile[] = "/sys/fs/cgroup/cpu/cpu.cfs_period_us"; +static char tsCpuQuotaFile[] = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"; static char tsProcCpuFile[25] = {0}; static char tsProcMemFile[25] = {0}; static char tsProcIOFile[25] = {0}; -static char tsCpuCfsPeroid[] = "/sys/fs/cgroup/cpu/cpu.cfs_period_us"; -static char tsCpuCfsQuota[] = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"; static void taosGetProcIOnfos() { tsPageSizeKB = sysconf(_SC_PAGESIZE) / 1024; @@ -502,7 +502,7 @@ static int32_t taosCntrGetCpuCores(float *numOfCores) { return -1; #else TdFilePtr pFile = NULL; - if (!(pFile = taosOpenFile(tsCpuCfsQuota, TD_FILE_READ | TD_FILE_STREAM))) { + if (!(pFile = taosOpenFile(tsCpuQuotaFile, TD_FILE_READ | TD_FILE_STREAM))) { goto _sys; } char qline[32] = {0}; @@ -516,7 +516,7 @@ static int32_t taosCntrGetCpuCores(float *numOfCores) { goto _sys; } - if (!(pFile = taosOpenFile(tsCpuCfsPeroid, TD_FILE_READ | TD_FILE_STREAM))) { + if (!(pFile = taosOpenFile(tsCpuPeroidFile, TD_FILE_READ | TD_FILE_STREAM))) { goto _sys; } char pline[32] = {0}; From 523994d93b135bacb8d1703aaef0f7375b5ef7c1 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 29 Aug 2023 15:15:07 +0800 Subject: [PATCH 05/74] enh: allow altering options to the same value --- source/dnode/mnode/impl/src/mndDb.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index c58df5c88c..69bb267bc5 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -964,7 +964,10 @@ static int32_t mndProcessAlterDbReq(SRpcMsg *pReq) { } code = mndSetDbCfgFromAlterDbReq(&dbObj, &alterReq); - if (code != 0) goto _OVER; + if (code != 0) { + if (code == TSDB_CODE_MND_DB_OPTION_UNCHANGED) code = 0; + goto _OVER; + } code = mndCheckInChangeDbCfg(pMnode, &dbObj.cfg); if (code != 0) goto _OVER; From db07511c932b5684ccbe2e414890101b4b981c52 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 29 Aug 2023 16:08:51 +0800 Subject: [PATCH 06/74] enh: report time series by period and quantity --- source/dnode/vnode/src/meta/metaQuery.c | 5 ++++- source/dnode/vnode/src/vnd/vnodeQuery.c | 12 +++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index ca5346eee3..cf59b3c658 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -699,13 +699,16 @@ int64_t metaGetTbNum(SMeta *pMeta) { // N.B. Called by statusReq per second int64_t metaGetTimeSeriesNum(SMeta *pMeta) { // sum of (number of columns of stable - 1) * number of ctables (excluding timestamp column) - if (pMeta->pVnode->config.vndStats.numOfTimeSeries <= 0 || + static int64_t vndNumOfCTables = 0; + int64_t numOfCTables = pMeta->pVnode->config.vndStats.numOfCTables; + if (numOfCTables - vndNumOfCTables > 100 || pMeta->pVnode->config.vndStats.numOfTimeSeries <= 0 || ++pMeta->pVnode->config.vndStats.itvTimeSeries % (60 * 5) == 0) { int64_t num = 0; vnodeGetTimeSeriesNum(pMeta->pVnode, &num); pMeta->pVnode->config.vndStats.numOfTimeSeries = num; pMeta->pVnode->config.vndStats.itvTimeSeries = (TD_VID(pMeta->pVnode) % 100) * 2; + vndNumOfCTables = numOfCTables; } return pMeta->pVnode->config.vndStats.numOfTimeSeries + pMeta->pVnode->config.vndStats.numOfNTimeSeries; diff --git a/source/dnode/vnode/src/vnd/vnodeQuery.c b/source/dnode/vnode/src/vnd/vnodeQuery.c index 1554d58d56..e7a1674d39 100644 --- a/source/dnode/vnode/src/vnd/vnodeQuery.c +++ b/source/dnode/vnode/src/vnd/vnodeQuery.c @@ -545,13 +545,11 @@ int32_t vnodeGetCtbNum(SVnode *pVnode, int64_t suid, int64_t *num) { } static int32_t vnodeGetStbColumnNum(SVnode *pVnode, tb_uid_t suid, int *num) { - STSchema *pTSchema = metaGetTbTSchema(pVnode->pMeta, suid, -1, 1); - // metaGetTbTSchemaEx(pVnode->pMeta, suid, suid, -1, &pTSchema); - - if (pTSchema) { - *num = pTSchema->numOfCols; - - taosMemoryFree(pTSchema); +static int32_t vnodeGetStbColumnNum(SVnode *pVnode, tb_uid_t suid, int *num) { + SSchemaWrapper *pSW = metaGetTableSchema(pVnode->pMeta, suid, -1, 1); + if (pSW) { + *num = pSW->nCols; + tDeleteSchemaWrapper(pSW); } else { *num = 2; } From f00596868f39a24a208b5584357383b9e0c28ebf Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 29 Aug 2023 16:12:49 +0800 Subject: [PATCH 07/74] fix: remove duplicated line --- source/dnode/vnode/src/vnd/vnodeQuery.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/dnode/vnode/src/vnd/vnodeQuery.c b/source/dnode/vnode/src/vnd/vnodeQuery.c index e7a1674d39..01dd062866 100644 --- a/source/dnode/vnode/src/vnd/vnodeQuery.c +++ b/source/dnode/vnode/src/vnd/vnodeQuery.c @@ -544,7 +544,6 @@ int32_t vnodeGetCtbNum(SVnode *pVnode, int64_t suid, int64_t *num) { return TSDB_CODE_SUCCESS; } -static int32_t vnodeGetStbColumnNum(SVnode *pVnode, tb_uid_t suid, int *num) { static int32_t vnodeGetStbColumnNum(SVnode *pVnode, tb_uid_t suid, int *num) { SSchemaWrapper *pSW = metaGetTableSchema(pVnode->pMeta, suid, -1, 1); if (pSW) { From 33966cf8563ce056a4dc8ed8536b5c71f94d7d41 Mon Sep 17 00:00:00 2001 From: shenglian zhou Date: Tue, 29 Aug 2023 17:35:03 +0800 Subject: [PATCH 08/74] enhance: continue coding --- include/common/tmsg.h | 10 ++++++ include/libs/nodes/cmdnodes.h | 4 +++ include/util/taoserror.h | 1 + source/common/src/tmsg.c | 33 ++++++++++++++++- source/dnode/mnode/impl/src/mndUser.c | 2 +- source/libs/parser/src/parAstCreater.c | 49 +++++++++++++++++++++++--- 6 files changed, 93 insertions(+), 6 deletions(-) diff --git a/include/common/tmsg.h b/include/common/tmsg.h index 8ba2cf1cc5..c2e6aecd67 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -884,6 +884,11 @@ typedef struct { int32_t tSerializeSDropUserReq(void* buf, int32_t bufLen, SDropUserReq* pReq); int32_t tDeserializeSDropUserReq(void* buf, int32_t bufLen, SDropUserReq* pReq); +typedef struct SIpV4Range{ + uint32_t ip; + uint32_t mask; +} SIpV4Range; + typedef struct { int8_t createType; int8_t superUser; // denote if it is a super user or not @@ -893,10 +898,13 @@ typedef struct { char pass[TSDB_USET_PASSWORD_LEN]; int32_t sqlLen; char* sql; + int32_t numIpRanges; + SIpV4Range* pIpRanges; } SCreateUserReq; int32_t tSerializeSCreateUserReq(void* buf, int32_t bufLen, SCreateUserReq* pReq); int32_t tDeserializeSCreateUserReq(void* buf, int32_t bufLen, SCreateUserReq* pReq); +void tFreeSCreateUserReq(SCreateUserReq* pReq); typedef struct { int8_t alterType; @@ -911,6 +919,8 @@ typedef struct { int32_t tagCondLen; int32_t sqlLen; char* sql; + int32_t numIpRanges; + SIpV4Range* pIpRanges; } SAlterUserReq; int32_t tSerializeSAlterUserReq(void* buf, int32_t bufLen, SAlterUserReq* pReq); diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h index f0a715e651..59b66eafd9 100644 --- a/include/libs/nodes/cmdnodes.h +++ b/include/libs/nodes/cmdnodes.h @@ -222,6 +222,8 @@ typedef struct SCreateUserStmt { char userName[TSDB_USER_LEN]; char password[TSDB_USET_PASSWORD_LEN]; int8_t sysinfo; + int32_t numIpRanges; + SIpV4Range* pIpRanges; } SCreateUserStmt; typedef struct SAlterUserStmt { @@ -231,6 +233,8 @@ typedef struct SAlterUserStmt { char password[TSDB_USET_PASSWORD_LEN]; int8_t enable; int8_t sysinfo; + int32_t numIpRanges; + SIpV4Range* pIpRanges; } SAlterUserStmt; typedef struct SDropUserStmt { diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 4a3f0d3a70..ccd5d63263 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -710,6 +710,7 @@ int32_t* taosGetErrno(); #define TSDB_CODE_PAR_SYSTABLE_NOT_ALLOWED_FUNC TAOS_DEF_ERROR_CODE(0, 0x2668) #define TSDB_CODE_PAR_SYSTABLE_NOT_ALLOWED TAOS_DEF_ERROR_CODE(0, 0x2669) #define TSDB_CODE_PAR_INVALID_VARBINARY TAOS_DEF_ERROR_CODE(0, 0x266A) +#define TSDB_CODE_PAR_INVALID_IP_RANGE TAOS_DEF_ERROR_CODE(0, 0x266B) #define TSDB_CODE_PAR_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x26FF) //planner diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 9a21563abe..7bf6520140 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -1380,6 +1380,11 @@ int32_t tSerializeSCreateUserReq(void *buf, int32_t bufLen, SCreateUserReq *pReq if (tEncodeI8(&encoder, pReq->enable) < 0) return -1; if (tEncodeCStr(&encoder, pReq->user) < 0) return -1; if (tEncodeCStr(&encoder, pReq->pass) < 0) return -1; + if (tEncodeI32(&encoder, pReq->numIpRanges) < 0) return -1; + for (int32_t i = 0; i < pReq->numIpRanges; ++i) { + if (tEncodeU32(&encoder, pReq->pIpRanges[i].ip) < 0) return -1; + if (tEncodeU32(&encoder, pReq->pIpRanges[i].mask) < 0) return -1; + } tEndEncode(&encoder); int32_t tlen = encoder.pos; @@ -1398,12 +1403,23 @@ int32_t tDeserializeSCreateUserReq(void *buf, int32_t bufLen, SCreateUserReq *pR if (tDecodeI8(&decoder, &pReq->enable) < 0) return -1; if (tDecodeCStrTo(&decoder, pReq->user) < 0) return -1; if (tDecodeCStrTo(&decoder, pReq->pass) < 0) return -1; + if (tDecodeI32(&decoder, &pReq->numIpRanges) < 0) return -1; + pReq->pIpRanges = taosMemoryMalloc(pReq->numIpRanges * sizeof(SIpV4Range)); + if (pReq->pIpRanges == NULL) return -1; + for (int32_t i = 0; i < pReq->numIpRanges; ++i) { + if (tDecodeU32(&decoder, &(pReq->pIpRanges[i].ip)) < 0) return -1; + if (tDecodeU32(&decoder, &(pReq->pIpRanges[i].mask)) < 0) return -1; + } tEndDecode(&decoder); tDecoderClear(&decoder); return 0; } +void tFreeSCreateUserReq(SCreateUserReq* pReq) { + taosMemoryFree(pReq->pIpRanges); +} + int32_t tSerializeSAlterUserReq(void *buf, int32_t bufLen, SAlterUserReq *pReq) { SEncoder encoder = {0}; tEncoderInit(&encoder, buf, bufLen); @@ -1422,6 +1438,11 @@ int32_t tSerializeSAlterUserReq(void *buf, int32_t bufLen, SAlterUserReq *pReq) if (tEncodeCStr(&encoder, pReq->tabName) < 0) return -1; } if (tEncodeBinary(&encoder, pReq->tagCond, pReq->tagCondLen) < 0) return -1; + if (tEncodeI32(&encoder, pReq->numIpRanges) < 0) return -1; + for (int32_t i = 0; i < pReq->numIpRanges; ++i) { + if (tEncodeU32(&encoder, pReq->pIpRanges[i].ip) < 0) return -1; + if (tEncodeU32(&encoder, pReq->pIpRanges[i].mask) < 0) return -1; + } tEndEncode(&encoder); int32_t tlen = encoder.pos; @@ -1451,13 +1472,23 @@ int32_t tDeserializeSAlterUserReq(void *buf, int32_t bufLen, SAlterUserReq *pReq if (tDecodeBinaryAlloc(&decoder, (void **)&pReq->tagCond, &tagCondLen) < 0) return -1; pReq->tagCondLen = tagCondLen; } + if (tDecodeI32(&decoder, &pReq->numIpRanges) < 0) return -1; + pReq->pIpRanges = taosMemoryMalloc(pReq->numIpRanges * sizeof(SIpV4Range)); + if (pReq->pIpRanges == NULL) return -1; + for (int32_t i = 0; i < pReq->numIpRanges; ++i) { + if (tDecodeU32(&decoder, &(pReq->pIpRanges[i].ip)) < 0) return -1; + if (tDecodeU32(&decoder, &(pReq->pIpRanges[i].mask)) < 0) return -1; + } tEndDecode(&decoder); tDecoderClear(&decoder); return 0; } -void tFreeSAlterUserReq(SAlterUserReq *pReq) { taosMemoryFreeClear(pReq->tagCond); } +void tFreeSAlterUserReq(SAlterUserReq *pReq) { + taosMemoryFreeClear(pReq->tagCond); + taosMemoryFree(pReq->pIpRanges); +} int32_t tSerializeSGetUserAuthReq(void *buf, int32_t bufLen, SGetUserAuthReq *pReq) { SEncoder encoder = {0}; diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 8afc73bef6..832e2b0da7 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -665,7 +665,7 @@ _OVER: mndReleaseUser(pMnode, pUser); mndReleaseUser(pMnode, pOperUser); - + tFreeSCreateUserReq(&createReq); return code; } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index cc2e11fea2..94e678b0bc 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -14,6 +14,7 @@ * along with this program. If not, see . */ +#include #include #include "parAst.h" @@ -1665,16 +1666,56 @@ SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const ST return (SNode*)pStmt; } +static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange) { + struct in_addr addr; + + char* ipCopy = strdup(ipRange); + char* slash = strchr(ipCopy, '/'); + if (slash) { + *slash = '\0'; + if (inet_pton(AF_INET, ipCopy, &addr) == 1) { + int prefix = atoi(slash + 1); + pIpRange->ip = addr.s_addr; + uint32_t mask = (1 << (32 - prefix)) - 1; + mask = htonl(~mask); + pIpRange->mask = mask; + if (prefix < 0 || prefix > 32) { + return TSDB_CODE_PAR_INVALID_IP_RANGE; + } + } else { + return TSDB_CODE_PAR_INVALID_IP_RANGE; + } + } else { + if (inet_pton(AF_INET, ipCopy, &addr) == 1) { + pIpRange->ip = addr.s_addr; + pIpRange->mask = 0xFFFFFFFF; + } else { + return TSDB_CODE_PAR_INVALID_IP_RANGE; + } + } + return TSDB_CODE_SUCCESS; +} + SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStmt, SNodeList* pIpRangesNodeList) { if (pIpRangesNodeList == NULL) { return pCreateUserStmt; } + SCreateUserStmt* pCreateUser = (SCreateUserStmt*)pCreateUserStmt; + pCreateUser->numIpRanges = LIST_LENGTH(pIpRangesNodeList); + pCreateUser->pIpRanges = taosMemoryMalloc(pCreateUser->numIpRanges * sizeof(SIpV4Range)); + int32_t i = 0; + int32_t code = 0; + SNode* pNode = NULL; FOREACH(pNode, pIpRangesNodeList) { - char* pStr = NULL; - nodesNodeToString(pNode, false, &pStr, NULL); - printf("%s\n", pStr); - taosMemoryFree(pStr); + SValueNode* pValNode = (SValueNode*)(pNode); + code = getIpV4RangeFromWhitelistItem(pValNode->literal, pCreateUser->pIpRanges + i); + if (code != TSDB_CODE_SUCCESS) { + //TODO: see check user name/pass to return error no + taosMemoryFree(pCreateUser->pIpRanges); + nodesDestroyNode(pCreateUserStmt); + return NULL; + } } return pCreateUserStmt; } From 1e4e2549a44979adaaaf03fa81f35b79314a3380 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 29 Aug 2023 19:53:59 +0800 Subject: [PATCH 09/74] chore: add test cases --- .../parser/alter__for_community_version.sim | 4 +-- tests/system-test/1-insert/alter_database.py | 29 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/tests/script/tsim/parser/alter__for_community_version.sim b/tests/script/tsim/parser/alter__for_community_version.sim index b902daa2dd..48fb2f8246 100644 --- a/tests/script/tsim/parser/alter__for_community_version.sim +++ b/tests/script/tsim/parser/alter__for_community_version.sim @@ -35,7 +35,7 @@ sql_error alter database $db keep 20.0,20.0,20.0 sql_error alter database $db keep 0,0,0 sql_error alter database $db keep 3 sql_error alter database $db keep -1,-1,-1 -sql_error alter database $db keep 20,20 +sql alter database $db keep 20,20 sql_error alter database $db keep 9,9,9 sql_error alter database $db keep 20,20,19 sql_error alter database $db keep 20,19,20 @@ -44,7 +44,7 @@ sql_error alter database $db keep 20,19,18 sql_error alter database $db keep 20,20,20,20 sql_error alter database $db keep 365001,365001,365001 sql_error alter database $db keep 365001 -sql_error alter database $db keep 20 +sql alter database $db keep 20 sql select * from information_schema.ins_databases if $rows != 3 then return -1 diff --git a/tests/system-test/1-insert/alter_database.py b/tests/system-test/1-insert/alter_database.py index 1fca294a47..8de43b8ee8 100644 --- a/tests/system-test/1-insert/alter_database.py +++ b/tests/system-test/1-insert/alter_database.py @@ -18,7 +18,7 @@ class TDTestCase: tdSql.init(conn.cursor(), logSql) self.buffer_boundary = [3, 4097, 8193, 12289, 16384] self.buffer_error = [self.buffer_boundary[0] - - 1, self.buffer_boundary[-1]+1, 256] + 1, self.buffer_boundary[-1]+1] # pages_boundary >= 64 self.pages_boundary = [64, 128, 512] self.pages_error = [self.pages_boundary[0]-1] @@ -47,15 +47,40 @@ class TDTestCase: tdSql.execute('create database db') tdSql.query( 'select * from information_schema.ins_databases where name = "db"') - self.pages_error.append(tdSql.queryResult[0][10]) + # self.pages_error.append(tdSql.queryResult[0][10]) for pages in self.pages_error: tdSql.error(f'alter database db pages {pages}') tdSql.execute('drop database db') + def alter_same_options(self): + tdSql.execute('drop database if exists db') + tdSql.execute('create database db') + tdSql.query('select * from information_schema.ins_databases where name = "db"') + + db_options_items = ["replica","keep","buffer","pages","minrows","cachemodel","cachesize","wal_level","wal_fsync_period", + "wal_retention_period","wal_retention_size","stt_trigger"] + db_options_result_idx = [4,7,8,10,11,18,19,20,21,22,23,24] + + self.option_result = [] + for idx in db_options_result_idx: + self.option_result.append(tdSql.queryResult[0][idx]) + + index = 0 + for option in db_options_items: + if option == "cachemodel": + option_sql = "alter database db %s '%s'" % (option, self.option_result[index] ) + else: + option_sql = "alter database db %s %s" % (option, self.option_result[index] ) + tdLog.debug(option_sql) + tdSql.query(option_sql) + index += 1 + tdSql.execute('drop database db') + def run(self): self.alter_buffer() self.alter_pages() + self.alter_same_options() def stop(self): tdSql.close() From 8e2074062223e14c6eca92b72bd783d06bb2fa7e Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 30 Aug 2023 11:39:21 +0800 Subject: [PATCH 10/74] enh: report time series by quantity --- source/dnode/vnode/src/inc/vnodeInt.h | 1 + source/dnode/vnode/src/meta/metaQuery.c | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index be663c2be9..44dff1f8bb 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -354,6 +354,7 @@ struct SVStatis { int64_t nInsertSuccess; // delta int64_t nBatchInsert; // delta int64_t nBatchInsertSuccess; // delta + int64_t nComparedTables; }; struct SVnodeInfo { diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index cf59b3c658..c8a9d5428f 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -699,16 +699,15 @@ int64_t metaGetTbNum(SMeta *pMeta) { // N.B. Called by statusReq per second int64_t metaGetTimeSeriesNum(SMeta *pMeta) { // sum of (number of columns of stable - 1) * number of ctables (excluding timestamp column) - static int64_t vndNumOfCTables = 0; - int64_t numOfCTables = pMeta->pVnode->config.vndStats.numOfCTables; - if (numOfCTables - vndNumOfCTables > 100 || pMeta->pVnode->config.vndStats.numOfTimeSeries <= 0 || + int64_t nTables = metaGetTbNum(pMeta); + if (nTables - pMeta->pVnode->statis.nComparedTables > 100 || pMeta->pVnode->config.vndStats.numOfTimeSeries <= 0 || ++pMeta->pVnode->config.vndStats.itvTimeSeries % (60 * 5) == 0) { int64_t num = 0; vnodeGetTimeSeriesNum(pMeta->pVnode, &num); pMeta->pVnode->config.vndStats.numOfTimeSeries = num; pMeta->pVnode->config.vndStats.itvTimeSeries = (TD_VID(pMeta->pVnode) % 100) * 2; - vndNumOfCTables = numOfCTables; + pMeta->pVnode->statis.nComparedTables = nTables; } return pMeta->pVnode->config.vndStats.numOfTimeSeries + pMeta->pVnode->config.vndStats.numOfNTimeSeries; From 1a34cd1020a8c4d168edcc118e54a5ebf22ae80a Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 30 Aug 2023 11:45:07 +0800 Subject: [PATCH 11/74] chore: optimize of report time series by quantity --- source/dnode/vnode/inc/vnode.h | 1 + source/dnode/vnode/src/inc/vnodeInt.h | 1 - source/dnode/vnode/src/meta/metaQuery.c | 5 +++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 5ae257aef8..e15f5f911d 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -288,6 +288,7 @@ typedef struct { int64_t numOfSTables; int64_t numOfCTables; int64_t numOfNTables; + int64_t numOfCmprTables; int64_t numOfNTimeSeries; int64_t numOfTimeSeries; int64_t itvTimeSeries; diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index 44dff1f8bb..be663c2be9 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -354,7 +354,6 @@ struct SVStatis { int64_t nInsertSuccess; // delta int64_t nBatchInsert; // delta int64_t nBatchInsertSuccess; // delta - int64_t nComparedTables; }; struct SVnodeInfo { diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index c8a9d5428f..c74f36eaa2 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -700,14 +700,15 @@ int64_t metaGetTbNum(SMeta *pMeta) { int64_t metaGetTimeSeriesNum(SMeta *pMeta) { // sum of (number of columns of stable - 1) * number of ctables (excluding timestamp column) int64_t nTables = metaGetTbNum(pMeta); - if (nTables - pMeta->pVnode->statis.nComparedTables > 100 || pMeta->pVnode->config.vndStats.numOfTimeSeries <= 0 || + if (nTables - pMeta->pVnode->config.vndStats.numOfCmprTables > 100 || + pMeta->pVnode->config.vndStats.numOfTimeSeries <= 0 || ++pMeta->pVnode->config.vndStats.itvTimeSeries % (60 * 5) == 0) { int64_t num = 0; vnodeGetTimeSeriesNum(pMeta->pVnode, &num); pMeta->pVnode->config.vndStats.numOfTimeSeries = num; pMeta->pVnode->config.vndStats.itvTimeSeries = (TD_VID(pMeta->pVnode) % 100) * 2; - pMeta->pVnode->statis.nComparedTables = nTables; + pMeta->pVnode->config.vndStats.numOfCmprTables = nTables; } return pMeta->pVnode->config.vndStats.numOfTimeSeries + pMeta->pVnode->config.vndStats.numOfNTimeSeries; From b8205f23bfe976e8b6fed64a9e0c7bcaa5ad1b9c Mon Sep 17 00:00:00 2001 From: shenglian zhou Date: Wed, 30 Aug 2023 14:32:46 +0800 Subject: [PATCH 12/74] enhance: ip whitelist before debug --- source/libs/nodes/src/nodesUtilFuncs.c | 11 ++++- source/libs/parser/inc/sql.y | 2 +- source/libs/parser/src/parAstCreater.c | 63 ++++++++++++++++++-------- source/libs/parser/src/parTranslater.c | 6 +++ source/util/src/terror.c | 3 +- 5 files changed, 62 insertions(+), 23 deletions(-) diff --git a/source/libs/nodes/src/nodesUtilFuncs.c b/source/libs/nodes/src/nodesUtilFuncs.c index 77637757b1..bc2067660a 100644 --- a/source/libs/nodes/src/nodesUtilFuncs.c +++ b/source/libs/nodes/src/nodesUtilFuncs.c @@ -924,8 +924,15 @@ void nodesDestroyNode(SNode* pNode) { nodesDestroyNode((SNode*)pStmt->pVal); break; } - case QUERY_NODE_CREATE_USER_STMT: // no pointer field - case QUERY_NODE_ALTER_USER_STMT: // no pointer field + case QUERY_NODE_CREATE_USER_STMT: { + SCreateUserStmt* pStmt = (SCreateUserStmt*)pNode; + taosMemoryFree(pStmt->pIpRanges); + break; + } + case QUERY_NODE_ALTER_USER_STMT: { + SAlterUserStmt* pStmt = (SAlterUserStmt*)pNode; + taosMemoryFree(pStmt->pIpRanges); + } case QUERY_NODE_DROP_USER_STMT: // no pointer field case QUERY_NODE_USE_DATABASE_STMT: // no pointer field case QUERY_NODE_CREATE_DNODE_STMT: // no pointer field diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 2a7f6c6eef..eb5d6d71df 100755 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -99,7 +99,7 @@ white_list_opt(A) ::= white_list(B). cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C) white_list_opt(D). { pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C); - addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, D); + pCxt->pRootNode = addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, D); } cmd ::= ALTER USER user_name(A) PASS NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PASSWD, &B); } cmd ::= ALTER USER user_name(A) ENABLE NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_ENABLE, &B); } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 94e678b0bc..ddeecbd288 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1696,6 +1696,27 @@ static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange return TSDB_CODE_SUCCESS; } +static int32_t fillIpRangesFromWhiteList(SAstCreateContext* pCxt, SNodeList* pIpRangesNodeList, SIpV4Range* pIpRanges) { + int32_t i = 0; + int32_t code = 0; + + SNode* pNode = NULL; + FOREACH(pNode, pIpRangesNodeList) { + if (QUERY_NODE_VALUE != nodeType(pNode)) { + pCxt->errCode = TSDB_CODE_PAR_INVALID_IP_RANGE; + return TSDB_CODE_PAR_INVALID_IP_RANGE; + } + SValueNode* pValNode = (SValueNode*)(pNode); + code = getIpV4RangeFromWhitelistItem(pValNode->literal, pIpRanges + i); + ++i; + if (code != TSDB_CODE_SUCCESS) { + pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, code, pValNode->literal); + return code; + } + } + return TSDB_CODE_SUCCESS; +} + SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStmt, SNodeList* pIpRangesNodeList) { if (pIpRangesNodeList == NULL) { return pCreateUserStmt; @@ -1703,19 +1724,16 @@ SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStm SCreateUserStmt* pCreateUser = (SCreateUserStmt*)pCreateUserStmt; pCreateUser->numIpRanges = LIST_LENGTH(pIpRangesNodeList); pCreateUser->pIpRanges = taosMemoryMalloc(pCreateUser->numIpRanges * sizeof(SIpV4Range)); - int32_t i = 0; - int32_t code = 0; + if (NULL == pCreateUser->pIpRanges) { + pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY; + nodesDestroyNode(pCreateUserStmt); + return NULL; + } - SNode* pNode = NULL; - FOREACH(pNode, pIpRangesNodeList) { - SValueNode* pValNode = (SValueNode*)(pNode); - code = getIpV4RangeFromWhitelistItem(pValNode->literal, pCreateUser->pIpRanges + i); - if (code != TSDB_CODE_SUCCESS) { - //TODO: see check user name/pass to return error no - taosMemoryFree(pCreateUser->pIpRanges); - nodesDestroyNode(pCreateUserStmt); - return NULL; - } + int32_t code = fillIpRangesFromWhiteList(pCxt, pIpRangesNodeList, pCreateUser->pIpRanges); + if (TSDB_CODE_SUCCESS != code) { + nodesDestroyNode(pCreateUserStmt); + return NULL; } return pCreateUserStmt; } @@ -1753,13 +1771,20 @@ SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t al case TSDB_ALTER_USER_ADD_WHITE_LIST: case TSDB_ALTER_USER_DROP_WHITE_LIST: { SNodeList* pIpRangesNodeList = pAlterInfo; - SNode* pNode = NULL; - FOREACH(pNode, pIpRangesNodeList) { - char* pStr = NULL; - nodesNodeToString(pNode, false, &pStr, NULL); - printf("%s\n", pStr); - taosMemoryFree(pStr); - } + pStmt->numIpRanges = LIST_LENGTH(pIpRangesNodeList); + pStmt->pIpRanges = taosMemoryMalloc(pStmt->numIpRanges * sizeof(SIpV4Range)); + if (NULL == pStmt->pIpRanges) { + pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY; + nodesDestroyNode(pStmt); + return NULL; + } + + int32_t code = fillIpRangesFromWhiteList(pCxt, pIpRangesNodeList, pStmt->pIpRanges); + if (TSDB_CODE_SUCCESS != code) { + nodesDestroyNode(pStmt); + return NULL; + } + break; } default: break; diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index e973694a04..62930fc388 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -5712,6 +5712,9 @@ static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pSt createReq.sysInfo = pStmt->sysinfo; createReq.enable = 1; strcpy(createReq.pass, pStmt->password); + createReq.numIpRanges = pStmt->numIpRanges; + createReq.pIpRanges = taosMemoryMalloc(createReq.numIpRanges); + memcpy(createReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * createReq.numIpRanges); return buildCmdMsg(pCxt, TDMT_MND_CREATE_USER, (FSerializeFunc)tSerializeSCreateUserReq, &createReq); } @@ -5727,6 +5730,9 @@ static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt if (NULL != pCxt->pParseCxt->db) { snprintf(alterReq.objname, sizeof(alterReq.objname), "%s", pCxt->pParseCxt->db); } + alterReq.numIpRanges = pStmt->numIpRanges; + alterReq.pIpRanges = taosMemoryMalloc(alterReq.numIpRanges); + memcpy(alterReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * alterReq.numIpRanges); return buildCmdMsg(pCxt, TDMT_MND_ALTER_USER, (FSerializeFunc)tSerializeSAlterUserReq, &alterReq); } diff --git a/source/util/src/terror.c b/source/util/src/terror.c index e1dfdc8cf7..9281eaae11 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -556,7 +556,6 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NOT_ALLOWED_WIN_QUERY, "Window query not su TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DROP_COL, "No columns can be dropped") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_COL_JSON, "Only tag can be json type") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_VALUE_TOO_LONG, "Value too long for column/tag") -TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_VARBINARY, "Invalidate varbinary type") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DELETE_WHERE, "The DELETE statement must have a definite time window range") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_REDISTRIBUTE_VG, "The REDISTRIBUTE VGROUP statement only support 1 to 3 dnodes") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_FILL_NOT_ALLOWED_FUNC, "Fill not allowed") @@ -573,6 +572,8 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_GET_META_ERROR, "Fail to get table i TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NOT_UNIQUE_TABLE_ALIAS, "Not unique table/alias") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SYSTABLE_NOT_ALLOWED_FUNC, "System table not allowed") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SYSTABLE_NOT_ALLOWED, "System table not allowed") +TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_VARBINARY, "Invalidate varbinary type") +TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_IP_RANGE, "Invalid IPV4 address ranges") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INTERNAL_ERROR, "Parser internal error") //planner From 97f048364bc901982f44ecabe662d9f1cc219870 Mon Sep 17 00:00:00 2001 From: slzhou Date: Wed, 30 Aug 2023 14:37:04 +0800 Subject: [PATCH 13/74] enhance: regenerate sql.c --- include/common/ttokendef.h | 2 ++ source/libs/parser/src/sql.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h index 9b2ea843ce..944880511b 100644 --- a/include/common/ttokendef.h +++ b/include/common/ttokendef.h @@ -16,6 +16,7 @@ #ifndef _TD_COMMON_TOKEN_H_ #define _TD_COMMON_TOKEN_H_ + #define TK_OR 1 #define TK_AND 2 #define TK_UNION 3 @@ -356,6 +357,7 @@ #define TK_VIEW 338 #define TK_WAL 339 + #define TK_NK_SPACE 600 #define TK_NK_COMMENT 601 #define TK_NK_ILLEGAL 602 diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index e9e712296d..5b6e93e4f2 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -4955,7 +4955,7 @@ static YYACTIONTYPE yy_reduce( #line 100 "sql.y" { pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-4].minor.yy889, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy847); - addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, yymsp[0].minor.yy236); + pCxt->pRootNode = addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, yymsp[0].minor.yy236); } #line 4960 "sql.c" break; From 402a4c3d60bc4885aba47948484d06d95073a6d0 Mon Sep 17 00:00:00 2001 From: slzhou Date: Wed, 30 Aug 2023 15:13:43 +0800 Subject: [PATCH 14/74] enhance: add test case --- source/libs/parser/src/parAstCreater.c | 32 +++++++++++++------------- tests/parallel_test/cases.task | 1 + tests/script/tsim/user/whitelist.sim | 28 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 tests/script/tsim/user/whitelist.sim diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 1eb36de093..151249a46d 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1652,20 +1652,6 @@ SNode* createShowTableTagsStmt(SAstCreateContext* pCxt, SNode* pTbName, SNode* p return (SNode*)pStmt; } -SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo) { - CHECK_PARSER_STATUS(pCxt); - char password[TSDB_USET_PASSWORD_LEN + 3] = {0}; - if (!checkUserName(pCxt, pUserName) || !checkPassword(pCxt, pPassword, password)) { - return NULL; - } - SCreateUserStmt* pStmt = (SCreateUserStmt*)nodesMakeNode(QUERY_NODE_CREATE_USER_STMT); - CHECK_OUT_OF_MEM(pStmt); - COPY_STRING_FORM_ID_TOKEN(pStmt->userName, pUserName); - strcpy(pStmt->password, password); - pStmt->sysinfo = sysinfo; - return (SNode*)pStmt; -} - static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange) { struct in_addr addr; @@ -1738,6 +1724,20 @@ SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStm return pCreateUserStmt; } +SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo) { + CHECK_PARSER_STATUS(pCxt); + char password[TSDB_USET_PASSWORD_LEN + 3] = {0}; + if (!checkUserName(pCxt, pUserName) || !checkPassword(pCxt, pPassword, password)) { + return NULL; + } + SCreateUserStmt* pStmt = (SCreateUserStmt*)nodesMakeNode(QUERY_NODE_CREATE_USER_STMT); + CHECK_OUT_OF_MEM(pStmt); + COPY_STRING_FORM_ID_TOKEN(pStmt->userName, pUserName); + strcpy(pStmt->password, password); + pStmt->sysinfo = sysinfo; + return (SNode*)pStmt; +} + SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, void* pAlterInfo) { CHECK_PARSER_STATUS(pCxt); if (!checkUserName(pCxt, pUserName)) { @@ -1775,13 +1775,13 @@ SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t al pStmt->pIpRanges = taosMemoryMalloc(pStmt->numIpRanges * sizeof(SIpV4Range)); if (NULL == pStmt->pIpRanges) { pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY; - nodesDestroyNode(pStmt); + nodesDestroyNode((SNode*)pStmt); return NULL; } int32_t code = fillIpRangesFromWhiteList(pCxt, pIpRangesNodeList, pStmt->pIpRanges); if (TSDB_CODE_SUCCESS != code) { - nodesDestroyNode(pStmt); + nodesDestroyNode((SNode*)pStmt); return NULL; } break; diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 17d24c12b6..f30c6c5314 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -808,6 +808,7 @@ ,,y,script,./test.sh -f tsim/user/basic.sim ,,y,script,./test.sh -f tsim/user/password.sim +,,y,script,./test.sh -f tsim/user/whitelist.sim ,,y,script,./test.sh -f tsim/user/privilege_db.sim ,,y,script,./test.sh -f tsim/user/privilege_sysinfo.sim ,,y,script,./test.sh -f tsim/user/privilege_topic.sim diff --git a/tests/script/tsim/user/whitelist.sim b/tests/script/tsim/user/whitelist.sim new file mode 100644 index 0000000000..53f16a90bb --- /dev/null +++ b/tests/script/tsim/user/whitelist.sim @@ -0,0 +1,28 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/exec.sh -n dnode1 -s start +sql connect + +print ============= step1 +sql create user u_read pass 'taosdata1' host '127.0.0.1/24','192.168.1.0/24' +sql create user u_write pass 'taosdata1' host '127.0.0.1','192.168.1.0' + +sql alter user u_read add host '3.3.3.4/24' +sql alter user u_write drop host '4.4.4.5/25' + +sql show users +if $rows != 3 then + return -1 +endi + +print ============= step2 +sql_error create user read1 pass 'taosdata1' host '127.0.0/24' +sql_error create user write1 pass 'taosdata1' host '4.4.4.4/33' + +sql show users +if $rows != 3 then + return -1 +endi + + +system sh/exec.sh -n dnode1 -s stop -x SIGINT From eb7d2d495ad63f2064995fee89c44dfc3a48e8f2 Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 30 Aug 2023 15:21:03 +0800 Subject: [PATCH 15/74] chore: supports obtaining physical/virtual CPU cores --- include/os/osSysinfo.h | 2 +- source/dnode/mgmt/node_util/src/dmUtil.c | 2 +- source/libs/function/src/tudf.c | 3 ++- source/os/src/osSysinfo.c | 29 ++++++++++++------------ 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/include/os/osSysinfo.h b/include/os/osSysinfo.h index a6a3655a55..29b6f07dca 100644 --- a/include/os/osSysinfo.h +++ b/include/os/osSysinfo.h @@ -39,7 +39,7 @@ int64_t taosGetOsUptime(); int32_t taosGetEmail(char *email, int32_t maxLen); int32_t taosGetOsReleaseName(char *releaseName, char* sName, char* ver, int32_t maxLen); int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores); -int32_t taosGetCpuCores(float *numOfCores); +int32_t taosGetCpuCores(float *numOfCores, bool physical); void taosGetCpuUsage(double *cpu_system, double *cpu_engine); int32_t taosGetCpuInstructions(char* sse42, char* avx, char* avx2, char* fma); int32_t taosGetTotalMemory(int64_t *totalKB); diff --git a/source/dnode/mgmt/node_util/src/dmUtil.c b/source/dnode/mgmt/node_util/src/dmUtil.c index 648a9ab9ce..bab7d068f3 100644 --- a/source/dnode/mgmt/node_util/src/dmUtil.c +++ b/source/dnode/mgmt/node_util/src/dmUtil.c @@ -56,7 +56,7 @@ void *dmSetMgmtHandle(SArray *pArray, tmsg_t msgType, void *nodeMsgFp, bool need void dmGetMonitorSystemInfo(SMonSysInfo *pInfo) { taosGetCpuUsage(&pInfo->cpu_system, &pInfo->cpu_engine); - taosGetCpuCores(&pInfo->cpu_cores); + taosGetCpuCores(&pInfo->cpu_cores, false); taosGetProcMemory(&pInfo->mem_engine); taosGetSysMemory(&pInfo->mem_system); pInfo->mem_total = tsTotalMemoryKB; diff --git a/source/libs/function/src/tudf.c b/source/libs/function/src/tudf.c index 5b9f44c812..7e344866a5 100644 --- a/source/libs/function/src/tudf.c +++ b/source/libs/function/src/tudf.c @@ -121,7 +121,8 @@ static int32_t udfSpawnUdfd(SUdfdData *pData) { snprintf(dnodeIdEnvItem, 32, "%s=%d", "DNODE_ID", pData->dnodeId); float numCpuCores = 4; - taosGetCpuCores(&numCpuCores); + taosGetCpuCores(&numCpuCores, false); + numCpuCores = TMAX(numCpuCores, 2); snprintf(thrdPoolSizeEnvItem, 32, "%s=%d", "UV_THREADPOOL_SIZE", (int)numCpuCores * 2); char pathTaosdLdLib[512] = {0}; diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index 7a6897ed6d..89b1916f23 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -236,7 +236,7 @@ bool taosCheckSystemIsLittleEnd() { void taosGetSystemInfo() { #ifdef WINDOWS - taosGetCpuCores(&tsNumOfCores); + taosGetCpuCores(&tsNumOfCores, false); taosGetTotalMemory(&tsTotalMemoryKB); taosGetCpuUsage(NULL, NULL); #elif defined(_TD_DARWIN_64) @@ -247,7 +247,7 @@ void taosGetSystemInfo() { tsNumOfCores = sysconf(_SC_NPROCESSORS_ONLN); #else taosGetProcIOnfos(); - taosGetCpuCores(&tsNumOfCores); + taosGetCpuCores(&tsNumOfCores, false); taosGetTotalMemory(&tsTotalMemoryKB); taosGetCpuUsage(NULL, NULL); taosGetCpuInstructions(&tsSSE42Enable, &tsAVXEnable, &tsAVX2Enable, &tsFMAEnable); @@ -495,6 +495,7 @@ int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores) { #endif } +// Returns the container's CPU quota if successful, otherwise returns the physical CPU cores static int32_t taosCntrGetCpuCores(float *numOfCores) { #ifdef WINDOWS return -1; @@ -503,26 +504,26 @@ static int32_t taosCntrGetCpuCores(float *numOfCores) { #else TdFilePtr pFile = NULL; if (!(pFile = taosOpenFile(tsCpuQuotaFile, TD_FILE_READ | TD_FILE_STREAM))) { - goto _sys; + goto _physical; } char qline[32] = {0}; if (taosGetsFile(pFile, sizeof(qline), qline) < 0) { taosCloseFile(&pFile); - goto _sys; + goto _physical; } taosCloseFile(&pFile); float quota = taosStr2Float(qline, NULL); if (quota < 0) { - goto _sys; + goto _physical; } if (!(pFile = taosOpenFile(tsCpuPeroidFile, TD_FILE_READ | TD_FILE_STREAM))) { - goto _sys; + goto _physical; } char pline[32] = {0}; if (taosGetsFile(pFile, sizeof(pline), pline) < 0) { taosCloseFile(&pFile); - goto _sys; + goto _physical; } taosCloseFile(&pFile); @@ -535,14 +536,14 @@ static int32_t taosCntrGetCpuCores(float *numOfCores) { *numOfCores = sysCores; } goto _end; -_sys: +_physical: *numOfCores = sysconf(_SC_NPROCESSORS_ONLN); _end: return 0; #endif } -int32_t taosGetCpuCores(float *numOfCores) { +int32_t taosGetCpuCores(float *numOfCores, bool physical) { #ifdef WINDOWS SYSTEM_INFO info; GetSystemInfo(&info); @@ -552,11 +553,11 @@ int32_t taosGetCpuCores(float *numOfCores) { *numOfCores = sysconf(_SC_NPROCESSORS_ONLN); return 0; #else -#if 1 - taosCntrGetCpuCores(numOfCores); -#else - *numOfCores = sysconf(_SC_NPROCESSORS_ONLN); -#endif + if (physical) { + *numOfCores = sysconf(_SC_NPROCESSORS_ONLN); + } else { + taosCntrGetCpuCores(numOfCores); + } return 0; #endif } From 25262c0deae0d9d883a56cc2e9d02ce6ab6dd38c Mon Sep 17 00:00:00 2001 From: slzhou Date: Wed, 30 Aug 2023 16:33:19 +0800 Subject: [PATCH 16/74] fix: unknow error --- source/libs/parser/src/parAstCreater.c | 4 ++-- source/libs/parser/src/parUtil.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 151249a46d..3de0ca3f85 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1689,14 +1689,14 @@ static int32_t fillIpRangesFromWhiteList(SAstCreateContext* pCxt, SNodeList* pIp SNode* pNode = NULL; FOREACH(pNode, pIpRangesNodeList) { if (QUERY_NODE_VALUE != nodeType(pNode)) { - pCxt->errCode = TSDB_CODE_PAR_INVALID_IP_RANGE; + pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_IP_RANGE); return TSDB_CODE_PAR_INVALID_IP_RANGE; } SValueNode* pValNode = (SValueNode*)(pNode); code = getIpV4RangeFromWhitelistItem(pValNode->literal, pIpRanges + i); ++i; if (code != TSDB_CODE_SUCCESS) { - pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, code, pValNode->literal); + pCxt->errCode = generateSyntaxErrMsgExt(&pCxt->msgBuf, code, "Invalid IP range %s", pValNode->literal); return code; } } diff --git a/source/libs/parser/src/parUtil.c b/source/libs/parser/src/parUtil.c index 67cc9226e7..39cf30cc65 100644 --- a/source/libs/parser/src/parUtil.c +++ b/source/libs/parser/src/parUtil.c @@ -182,6 +182,8 @@ static char* getSyntaxErrFormat(int32_t errCode) { return "No valid function in window query"; case TSDB_CODE_PAR_INVALID_OPTR_USAGE: return "Invalid usage of expr: %s"; + case TSDB_CODE_PAR_INVALID_IP_RANGE: + return "invalid ip range"; case TSDB_CODE_OUT_OF_MEMORY: return "Out of memory"; default: From f41783c73f974b5fb3832c33f7d0379d28cf9c85 Mon Sep 17 00:00:00 2001 From: slzhou Date: Wed, 30 Aug 2023 17:12:12 +0800 Subject: [PATCH 17/74] fix: address sanitizer error --- include/libs/nodes/cmdnodes.h | 4 ++++ source/libs/nodes/src/nodesUtilFuncs.c | 2 ++ source/libs/parser/src/parAstCreater.c | 31 +++++++++++++++++--------- source/libs/parser/src/parTranslater.c | 12 ++++++---- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h index 59b66eafd9..40b9d21503 100644 --- a/include/libs/nodes/cmdnodes.h +++ b/include/libs/nodes/cmdnodes.h @@ -224,6 +224,8 @@ typedef struct SCreateUserStmt { int8_t sysinfo; int32_t numIpRanges; SIpV4Range* pIpRanges; + + SNodeList* pNodeListIpRanges; } SCreateUserStmt; typedef struct SAlterUserStmt { @@ -235,6 +237,8 @@ typedef struct SAlterUserStmt { int8_t sysinfo; int32_t numIpRanges; SIpV4Range* pIpRanges; + + SNodeList* pNodeListIpRanges; } SAlterUserStmt; typedef struct SDropUserStmt { diff --git a/source/libs/nodes/src/nodesUtilFuncs.c b/source/libs/nodes/src/nodesUtilFuncs.c index bc2067660a..a5b9f6dd91 100644 --- a/source/libs/nodes/src/nodesUtilFuncs.c +++ b/source/libs/nodes/src/nodesUtilFuncs.c @@ -927,11 +927,13 @@ void nodesDestroyNode(SNode* pNode) { case QUERY_NODE_CREATE_USER_STMT: { SCreateUserStmt* pStmt = (SCreateUserStmt*)pNode; taosMemoryFree(pStmt->pIpRanges); + nodesDestroyList(pStmt->pNodeListIpRanges); break; } case QUERY_NODE_ALTER_USER_STMT: { SAlterUserStmt* pStmt = (SAlterUserStmt*)pNode; taosMemoryFree(pStmt->pIpRanges); + nodesDestroyList(pStmt->pNodeListIpRanges); } case QUERY_NODE_DROP_USER_STMT: // no pointer field case QUERY_NODE_USE_DATABASE_STMT: // no pointer field diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index bc07687022..286477659c 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1655,33 +1655,39 @@ SNode* createShowTableTagsStmt(SAstCreateContext* pCxt, SNode* pTbName, SNode* p } static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange) { - struct in_addr addr; - - char* ipCopy = strdup(ipRange); + int32_t code = TSDB_CODE_SUCCESS; + char* ipCopy = taosStrdup(ipRange); char* slash = strchr(ipCopy, '/'); if (slash) { *slash = '\0'; + struct in_addr addr; if (inet_pton(AF_INET, ipCopy, &addr) == 1) { int prefix = atoi(slash + 1); - pIpRange->ip = addr.s_addr; - uint32_t mask = (1 << (32 - prefix)) - 1; - mask = htonl(~mask); - pIpRange->mask = mask; if (prefix < 0 || prefix > 32) { - return TSDB_CODE_PAR_INVALID_IP_RANGE; + code = TSDB_CODE_PAR_INVALID_IP_RANGE; + } else { + pIpRange->ip = addr.s_addr; + uint32_t mask = (1 << (32 - prefix)) - 1; + mask = htonl(~mask); + pIpRange->mask = mask; + code = TSDB_CODE_SUCCESS; } } else { - return TSDB_CODE_PAR_INVALID_IP_RANGE; + code = TSDB_CODE_PAR_INVALID_IP_RANGE; } } else { + struct in_addr addr; if (inet_pton(AF_INET, ipCopy, &addr) == 1) { pIpRange->ip = addr.s_addr; pIpRange->mask = 0xFFFFFFFF; + code = TSDB_CODE_SUCCESS; } else { - return TSDB_CODE_PAR_INVALID_IP_RANGE; + code = TSDB_CODE_PAR_INVALID_IP_RANGE; } } - return TSDB_CODE_SUCCESS; + + taosMemoryFreeClear(ipCopy); + return code; } static int32_t fillIpRangesFromWhiteList(SAstCreateContext* pCxt, SNodeList* pIpRangesNodeList, SIpV4Range* pIpRanges) { @@ -1706,6 +1712,8 @@ static int32_t fillIpRangesFromWhiteList(SAstCreateContext* pCxt, SNodeList* pIp } SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStmt, SNodeList* pIpRangesNodeList) { + ((SCreateUserStmt*)pCreateUserStmt)->pNodeListIpRanges = pIpRangesNodeList; + if (pIpRangesNodeList == NULL) { return pCreateUserStmt; } @@ -1773,6 +1781,7 @@ SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t al case TSDB_ALTER_USER_ADD_WHITE_LIST: case TSDB_ALTER_USER_DROP_WHITE_LIST: { SNodeList* pIpRangesNodeList = pAlterInfo; + pStmt->pNodeListIpRanges = pIpRangesNodeList; pStmt->numIpRanges = LIST_LENGTH(pIpRangesNodeList); pStmt->pIpRanges = taosMemoryMalloc(pStmt->numIpRanges * sizeof(SIpV4Range)); if (NULL == pStmt->pIpRanges) { diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 253e605190..7fba30e60f 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -5713,10 +5713,12 @@ static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pSt createReq.enable = 1; strcpy(createReq.pass, pStmt->password); createReq.numIpRanges = pStmt->numIpRanges; - createReq.pIpRanges = taosMemoryMalloc(createReq.numIpRanges); + createReq.pIpRanges = taosMemoryMalloc(createReq.numIpRanges * sizeof(SIpV4Range)); memcpy(createReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * createReq.numIpRanges); - return buildCmdMsg(pCxt, TDMT_MND_CREATE_USER, (FSerializeFunc)tSerializeSCreateUserReq, &createReq); + int32_t code = buildCmdMsg(pCxt, TDMT_MND_CREATE_USER, (FSerializeFunc)tSerializeSCreateUserReq, &createReq); + tFreeSCreateUserReq(&createReq); + return code; } static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt) { @@ -5731,10 +5733,12 @@ static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt snprintf(alterReq.objname, sizeof(alterReq.objname), "%s", pCxt->pParseCxt->db); } alterReq.numIpRanges = pStmt->numIpRanges; - alterReq.pIpRanges = taosMemoryMalloc(alterReq.numIpRanges); + alterReq.pIpRanges = taosMemoryMalloc(alterReq.numIpRanges * sizeof(SIpV4Range)); memcpy(alterReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * alterReq.numIpRanges); - return buildCmdMsg(pCxt, TDMT_MND_ALTER_USER, (FSerializeFunc)tSerializeSAlterUserReq, &alterReq); + int32_t code = buildCmdMsg(pCxt, TDMT_MND_ALTER_USER, (FSerializeFunc)tSerializeSAlterUserReq, &alterReq); + tFreeSAlterUserReq(&alterReq); + return code; } static int32_t translateDropUser(STranslateContext* pCxt, SDropUserStmt* pStmt) { From 198b3ad3b40a67088475d964a34e4c4b22579bdd Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Wed, 30 Aug 2023 17:41:05 +0800 Subject: [PATCH 18/74] add ttl test cases --- tests/system-test/0-others/ttl.py | 37 ++++++++++++ .../system-test/0-others/ttlChangeOnWrite.py | 59 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 tests/system-test/0-others/ttl.py create mode 100644 tests/system-test/0-others/ttlChangeOnWrite.py diff --git a/tests/system-test/0-others/ttl.py b/tests/system-test/0-others/ttl.py new file mode 100644 index 0000000000..32b18c6bbb --- /dev/null +++ b/tests/system-test/0-others/ttl.py @@ -0,0 +1,37 @@ +import time +from util.log import * +from util.sql import * +from util.cases import * +from util.dnodes import * + + +class TDTestCase: + updatecfgDict = {'ttlUnit': 1, "ttlPushInterval": 1, "ttlChangeOnWrite": 0} + + def init(self, conn, logSql, replicaVar=1): + self.replicaVar = int(replicaVar) + tdLog.debug(f"start to excute {__file__}") + tdSql.init(conn.cursor(), True) + self.ttl = 5 + self.dbname = "test" + + def check_ttl_result(self): + tdSql.execute(f'create database {self.dbname}') + tdSql.execute(f'create table {self.dbname}.t1(ts timestamp, c1 int)') + tdSql.execute(f'create table {self.dbname}.t2(ts timestamp, c1 int) ttl {self.ttl}') + tdSql.query(f'show {self.dbname}.tables') + tdSql.checkRows(2) + + time.sleep(self.ttl + 2) + tdSql.query(f'show {self.dbname}.tables') + tdSql.checkRows(1) + + def run(self): + self.check_ttl_result() + + def stop(self): + tdSql.close() + tdLog.success(f"{__file__} successfully executed") + +tdCases.addLinux(__file__, TDTestCase()) +tdCases.addWindows(__file__, TDTestCase()) diff --git a/tests/system-test/0-others/ttlChangeOnWrite.py b/tests/system-test/0-others/ttlChangeOnWrite.py new file mode 100644 index 0000000000..f9c63e4ec2 --- /dev/null +++ b/tests/system-test/0-others/ttlChangeOnWrite.py @@ -0,0 +1,59 @@ +import time +from util.log import * +from util.sql import * +from util.cases import * +from util.dnodes import * + + +class TDTestCase: + updatecfgDict = {'ttlUnit': 1, "ttlPushInterval": 3, "ttlChangeOnWrite": 1, "trimVDbIntervalSec": 360, + "ttlFlushThreshold": 100, "ttlBatchDropNum": 10} + + def init(self, conn, logSql, replicaVar=1): + self.replicaVar = int(replicaVar) + tdLog.debug(f"start to excute {__file__}") + tdSql.init(conn.cursor(), True) + self.ttl = 5 + self.tables = 100 + self.dbname = "test" + + def check_batch_drop_num(self): + tdSql.execute(f'create database {self.dbname} vgroups 1') + tdSql.execute(f'use {self.dbname}') + tdSql.execute(f'create table stb(ts timestamp, c1 int) tags(t1 int)') + for i in range(self.tables): + tdSql.execute(f'create table t{i} using stb tags({i}) ttl {self.ttl}') + + time.sleep(self.ttl * 2) + tdSql.query('show tables') + tdSql.checkRows(90) + + def check_ttl_result(self): + tdSql.execute(f'drop database if exists {self.dbname}') + tdSql.execute(f'create database {self.dbname}') + tdSql.execute(f'create table {self.dbname}.t1(ts timestamp, c1 int)') + tdSql.execute(f'create table {self.dbname}.t2(ts timestamp, c1 int) ttl {self.ttl}') + tdSql.query(f'show {self.dbname}.tables') + tdSql.checkRows(2) + + time.sleep(self.ttl) + tdSql.execute(f'insert into {self.dbname}.t2 values(now, 1)'); + + time.sleep(self.ttl) + tdSql.query(f'show {self.dbname}.tables') + tdSql.checkRows(2) + + time.sleep(self.ttl * 2) + tdSql.query(f'show {self.dbname}.tables') + tdSql.checkRows(1) + + def run(self): + self.check_batch_drop_num() + self.check_ttl_result() + + def stop(self): + tdSql.close() + tdLog.success(f"{__file__} successfully executed") + +tdCases.addLinux(__file__, TDTestCase()) +tdCases.addWindows(__file__, TDTestCase()) From f39f447aa458403f6946c55eae60bbd7789b22bb Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Wed, 30 Aug 2023 17:43:04 +0800 Subject: [PATCH 19/74] add cases into CI --- tests/parallel_test/cases.task | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 17d24c12b6..c64eda352a 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -170,6 +170,8 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege_all.py ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/fsync.py ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/multilevel.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/ttl.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/ttlChangeOnWrite.py ,,n,system-test,python3 ./test.py -f 0-others/compatibility.py ,,n,system-test,python3 ./test.py -f 0-others/tag_index_basic.py ,,n,system-test,python3 ./test.py -f 0-others/udfpy_main.py From 189c5cf1370526ae3bf7dad71edc946d6f2964c6 Mon Sep 17 00:00:00 2001 From: slzhou Date: Thu, 31 Aug 2023 07:55:21 +0800 Subject: [PATCH 20/74] fix: address sanitizer error --- source/libs/parser/src/parAstCreater.c | 6 +++--- source/libs/parser/src/parTranslater.c | 16 ++++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 286477659c..4725f711f0 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1712,11 +1712,11 @@ static int32_t fillIpRangesFromWhiteList(SAstCreateContext* pCxt, SNodeList* pIp } SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStmt, SNodeList* pIpRangesNodeList) { - ((SCreateUserStmt*)pCreateUserStmt)->pNodeListIpRanges = pIpRangesNodeList; - - if (pIpRangesNodeList == NULL) { + if (NULL == pCreateUserStmt || NULL == pIpRangesNodeList) { return pCreateUserStmt; } + + ((SCreateUserStmt*)pCreateUserStmt)->pNodeListIpRanges = pIpRangesNodeList; SCreateUserStmt* pCreateUser = (SCreateUserStmt*)pCreateUserStmt; pCreateUser->numIpRanges = LIST_LENGTH(pIpRangesNodeList); pCreateUser->pIpRanges = taosMemoryMalloc(pCreateUser->numIpRanges * sizeof(SIpV4Range)); diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 7fba30e60f..1c27e2d2d8 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -5712,10 +5712,12 @@ static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pSt createReq.sysInfo = pStmt->sysinfo; createReq.enable = 1; strcpy(createReq.pass, pStmt->password); + createReq.numIpRanges = pStmt->numIpRanges; - createReq.pIpRanges = taosMemoryMalloc(createReq.numIpRanges * sizeof(SIpV4Range)); - memcpy(createReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * createReq.numIpRanges); - + if (pStmt->numIpRanges > 0) { + createReq.pIpRanges = taosMemoryMalloc(createReq.numIpRanges * sizeof(SIpV4Range)); + memcpy(createReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * createReq.numIpRanges); + } int32_t code = buildCmdMsg(pCxt, TDMT_MND_CREATE_USER, (FSerializeFunc)tSerializeSCreateUserReq, &createReq); tFreeSCreateUserReq(&createReq); return code; @@ -5732,10 +5734,12 @@ static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt if (NULL != pCxt->pParseCxt->db) { snprintf(alterReq.objname, sizeof(alterReq.objname), "%s", pCxt->pParseCxt->db); } - alterReq.numIpRanges = pStmt->numIpRanges; - alterReq.pIpRanges = taosMemoryMalloc(alterReq.numIpRanges * sizeof(SIpV4Range)); - memcpy(alterReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * alterReq.numIpRanges); + alterReq.numIpRanges = pStmt->numIpRanges; + if (pStmt->numIpRanges > 0) { + alterReq.pIpRanges = taosMemoryMalloc(alterReq.numIpRanges * sizeof(SIpV4Range)); + memcpy(alterReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * alterReq.numIpRanges); + } int32_t code = buildCmdMsg(pCxt, TDMT_MND_ALTER_USER, (FSerializeFunc)tSerializeSAlterUserReq, &alterReq); tFreeSAlterUserReq(&alterReq); return code; From d5b0d39c401f425da1a07617d9575535a627e044 Mon Sep 17 00:00:00 2001 From: kailixu Date: Thu, 31 Aug 2023 08:59:09 +0800 Subject: [PATCH 21/74] fix: typo when get cpu cores --- source/os/src/osSysinfo.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index 89b1916f23..562328a198 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -121,7 +121,7 @@ LONG WINAPI exceptionHandler(LPEXCEPTION_POINTERS exception); static pid_t tsProcId; static char tsSysNetFile[] = "/proc/net/dev"; static char tsSysCpuFile[] = "/proc/stat"; -static char tsCpuPeroidFile[] = "/sys/fs/cgroup/cpu/cpu.cfs_period_us"; +static char tsCpuPeriodFile[] = "/sys/fs/cgroup/cpu/cpu.cfs_period_us"; static char tsCpuQuotaFile[] = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"; static char tsProcCpuFile[25] = {0}; static char tsProcMemFile[25] = {0}; @@ -504,31 +504,31 @@ static int32_t taosCntrGetCpuCores(float *numOfCores) { #else TdFilePtr pFile = NULL; if (!(pFile = taosOpenFile(tsCpuQuotaFile, TD_FILE_READ | TD_FILE_STREAM))) { - goto _physical; + goto _sys; } char qline[32] = {0}; if (taosGetsFile(pFile, sizeof(qline), qline) < 0) { taosCloseFile(&pFile); - goto _physical; + goto _sys; } taosCloseFile(&pFile); float quota = taosStr2Float(qline, NULL); if (quota < 0) { - goto _physical; + goto _sys; } - if (!(pFile = taosOpenFile(tsCpuPeroidFile, TD_FILE_READ | TD_FILE_STREAM))) { - goto _physical; + if (!(pFile = taosOpenFile(tsCpuPeriodFile, TD_FILE_READ | TD_FILE_STREAM))) { + goto _sys; } char pline[32] = {0}; if (taosGetsFile(pFile, sizeof(pline), pline) < 0) { taosCloseFile(&pFile); - goto _physical; + goto _sys; } taosCloseFile(&pFile); - float peroid = taosStr2Float(pline, NULL); - float quotaCores = quota / peroid; + float period = taosStr2Float(pline, NULL); + float quotaCores = quota / period; float sysCores = sysconf(_SC_NPROCESSORS_ONLN); if (quotaCores < sysCores && quotaCores > 0) { *numOfCores = quotaCores; @@ -536,7 +536,7 @@ static int32_t taosCntrGetCpuCores(float *numOfCores) { *numOfCores = sysCores; } goto _end; -_physical: +_sys: *numOfCores = sysconf(_SC_NPROCESSORS_ONLN); _end: return 0; From 16e3541d4a71b5040fd1070b9b921fa4bbb2e191 Mon Sep 17 00:00:00 2001 From: slzhou Date: Thu, 31 Aug 2023 15:44:42 +0800 Subject: [PATCH 22/74] fix: windows compilation error --- source/libs/parser/src/parAstCreater.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 4725f711f0..2a3235b4f5 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -13,8 +13,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ - -#include +#include #include #include "parAst.h" @@ -1661,7 +1660,7 @@ static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange if (slash) { *slash = '\0'; struct in_addr addr; - if (inet_pton(AF_INET, ipCopy, &addr) == 1) { + if (uv_inet_pton(AF_INET, ipCopy, &addr) == 0) { int prefix = atoi(slash + 1); if (prefix < 0 || prefix > 32) { code = TSDB_CODE_PAR_INVALID_IP_RANGE; @@ -1677,7 +1676,7 @@ static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange } } else { struct in_addr addr; - if (inet_pton(AF_INET, ipCopy, &addr) == 1) { + if (uv_inet_pton(AF_INET, ipCopy, &addr) == 0) { pIpRange->ip = addr.s_addr; pIpRange->mask = 0xFFFFFFFF; code = TSDB_CODE_SUCCESS; From b8f041f5ea6ae6b9594b730cccfbac55e9fdda7e Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 1 Sep 2023 10:05:46 +0800 Subject: [PATCH 23/74] fix:use vgstatus before if rebalance --- source/client/src/clientTmq.c | 97 +++++++++++------------------------ 1 file changed, 31 insertions(+), 66 deletions(-) diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index e861bd4b92..c6755f0bba 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -197,10 +197,7 @@ typedef struct { typedef struct { int64_t refId; - int32_t epoch; char topicName[TSDB_TOPIC_FNAME_LEN]; -// SMqClientVg* pVg; -// SMqClientTopic* pTopic; int32_t vgId; uint64_t requestId; // request id for debug purpose } SMqPollCbParam; @@ -1313,52 +1310,37 @@ static SMqClientTopic* getTopicInfo(tmq_t* tmq, char* topicName){ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { SMqPollCbParam* pParam = (SMqPollCbParam*)param; - - int64_t refId = pParam->refId; -// SMqClientVg* pVg = pParam->pVg; -// SMqClientTopic* pTopic = pParam->pTopic; - + int64_t refId = pParam->refId; + int32_t vgId = pParam->vgId; + uint64_t requestId = pParam->requestId; tmq_t* tmq = taosAcquireRef(tmqMgmt.rsetId, refId); if (tmq == NULL) { - taosMemoryFree(pParam); - taosMemoryFree(pMsg->pData); - taosMemoryFree(pMsg->pEpSet); terrno = TSDB_CODE_TMQ_CONSUMER_CLOSED; - return -1; + goto FAILED; } - int32_t epoch = pParam->epoch; - int32_t vgId = pParam->vgId; - uint64_t requestId = pParam->requestId; - if (code != 0) { - if (pMsg->pData) taosMemoryFree(pMsg->pData); - if (pMsg->pEpSet) taosMemoryFree(pMsg->pEpSet); - // in case of consumer mismatch, wait for 500ms and retry if (code == TSDB_CODE_TMQ_CONSUMER_MISMATCH) { -// taosMsleep(500); atomic_store_8(&tmq->status, TMQ_CONSUMER_STATUS__RECOVER); - tscDebug("consumer:0x%" PRIx64 " wait for the re-balance, wait for 500ms and set status to be RECOVER", + tscDebug("consumer:0x%" PRIx64 " wait for the re-balance, set status to be RECOVER", tmq->consumerId); } else if (code == TSDB_CODE_TQ_NO_COMMITTED_OFFSET) { SMqPollRspWrapper* pRspWrapper = taosAllocateQitem(sizeof(SMqPollRspWrapper), DEF_QITEM, 0); if (pRspWrapper == NULL) { - tscWarn("consumer:0x%" PRIx64 " msg from vgId:%d discarded, epoch %d since out of memory, reqId:0x%" PRIx64, - tmq->consumerId, vgId, epoch, requestId); - goto CREATE_MSG_FAIL; + tscWarn("consumer:0x%" PRIx64 " msg from vgId:%d discarded, since out of memory, reqId:0x%" PRIx64, + tmq->consumerId, vgId, requestId); + goto FAILED; } pRspWrapper->tmqRspType = TMQ_MSG_TYPE__END_RSP; taosWriteQitem(tmq->mqueue, pRspWrapper); -// } else if (code == TSDB_CODE_WAL_LOG_NOT_EXIST) { // poll data while insert -// taosMsleep(5); } else{ - tscError("consumer:0x%" PRIx64 " msg from vgId:%d discarded, epoch %d, since %s, reqId:0x%" PRIx64, tmq->consumerId, - vgId, epoch, tstrerror(code), requestId); + tscError("consumer:0x%" PRIx64 " msg from vgId:%d discarded, since %s, reqId:0x%" PRIx64, tmq->consumerId, + vgId, tstrerror(code), requestId); } - goto CREATE_MSG_FAIL; + goto FAILED; } int32_t msgEpoch = ((SMqRspHead*)pMsg->pData)->epoch; @@ -1368,43 +1350,27 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { tscWarn("consumer:0x%" PRIx64 " msg discard from vgId:%d since from earlier epoch, rsp epoch %d, current epoch %d, reqId:0x%" PRIx64, tmq->consumerId, vgId, msgEpoch, clientEpoch, requestId); - - tsem_post(&tmq->rspSem); - taosReleaseRef(tmqMgmt.rsetId, refId); - - taosMemoryFree(pMsg->pData); - taosMemoryFree(pMsg->pEpSet); - taosMemoryFree(pParam); - - return 0; + goto FAILED; } - if (msgEpoch != clientEpoch) { - tscWarn("consumer:0x%" PRIx64 " mismatch rsp from vgId:%d, epoch %d, current epoch %d, reqId:0x%" PRIx64, - tmq->consumerId, vgId, msgEpoch, clientEpoch, requestId); - } + ASSERT(msgEpoch == clientEpoch); // handle meta rsp int8_t rspType = ((SMqRspHead*)pMsg->pData)->mqMsgType; SMqPollRspWrapper* pRspWrapper = taosAllocateQitem(sizeof(SMqPollRspWrapper), DEF_QITEM, 0); if (pRspWrapper == NULL) { - taosMemoryFree(pMsg->pData); - taosMemoryFree(pMsg->pEpSet); - tscWarn("consumer:0x%" PRIx64 " msg discard from vgId:%d, epoch %d since out of memory", tmq->consumerId, vgId, - epoch); - goto CREATE_MSG_FAIL; + tscWarn("consumer:0x%" PRIx64 " msg discard from vgId:%d, since out of memory", tmq->consumerId, vgId); + goto FAILED; } pRspWrapper->tmqRspType = rspType; -// pRspWrapper->vgHandle = pVg; -// pRspWrapper->topicHandle = pTopic; pRspWrapper->reqId = requestId; pRspWrapper->pEpset = pMsg->pEpSet; + pMsg->pEpSet = NULL; pRspWrapper->vgId = vgId; strcpy(pRspWrapper->topicName, pParam->topicName); - pMsg->pEpSet = NULL; if (rspType == TMQ_MSG_TYPE__POLL_DATA_RSP) { SDecoder decoder; tDecoderInit(&decoder, POINTER_SHIFT(pMsg->pData, sizeof(SMqRspHead)), pMsg->len - sizeof(SMqRspHead)); @@ -1432,7 +1398,6 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { tscError("consumer:0x%" PRIx64 " invalid rsp msg received, type:%d ignored", tmq->consumerId, rspType); } - taosMemoryFree(pMsg->pData); taosWriteQitem(tmq->mqueue, pRspWrapper); int32_t total = taosQueueItemSize(tmq->mqueue); @@ -1442,22 +1407,23 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { tsem_post(&tmq->rspSem); taosReleaseRef(tmqMgmt.rsetId, refId); taosMemoryFree(pParam); + taosMemoryFreeClear(pMsg->pData); return 0; -CREATE_MSG_FAIL: - if (epoch == tmq->epoch) { - taosWLockLatch(&tmq->lock); - SMqClientVg* pVg = getVgInfo(tmq, pParam->topicName, vgId); - if(pVg){ - atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); - } - taosWUnLockLatch(&tmq->lock); +FAILED: + taosWLockLatch(&tmq->lock); + SMqClientVg* pVg = getVgInfo(tmq, pParam->topicName, vgId); + if(pVg){ + atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); } + taosWUnLockLatch(&tmq->lock); tsem_post(&tmq->rspSem); taosReleaseRef(tmqMgmt.rsetId, refId); taosMemoryFree(pParam); + taosMemoryFreeClear(pMsg->pData); + taosMemoryFreeClear(pMsg->pEpSet); return -1; } @@ -1467,6 +1433,7 @@ typedef struct SVgroupSaveInfo { STqOffsetVal commitOffset; STqOffsetVal seekOffset; int64_t numOfRows; + int32_t vgStatus; } SVgroupSaveInfo; static void initClientTopicFromRsp(SMqClientTopic* pTopic, SMqSubTopicEp* pTopicEp, SHashObj* pVgOffsetHashMap, @@ -1475,7 +1442,7 @@ static void initClientTopicFromRsp(SMqClientTopic* pTopic, SMqSubTopicEp* pTopic pTopicEp->schema.nCols = 0; pTopicEp->schema.pSchema = NULL; - char vgKey[TSDB_TOPIC_FNAME_LEN + 22]; + char vgKey[TSDB_TOPIC_FNAME_LEN + 22] = {0}; int32_t vgNumGet = taosArrayGetSize(pTopicEp->vgs); tstrncpy(pTopic->topicName, pTopicEp->topic, TSDB_TOPIC_FNAME_LEN); @@ -1497,7 +1464,7 @@ static void initClientTopicFromRsp(SMqClientTopic* pTopic, SMqSubTopicEp* pTopic .pollCnt = 0, .vgId = pVgEp->vgId, .epSet = pVgEp->epSet, - .vgStatus = TMQ_VG_STATUS__IDLE, + .vgStatus = pInfo ? pInfo->vgStatus : TMQ_VG_STATUS__IDLE, .vgSkipCnt = 0, .emptyBlockReceiveTs = 0, .numOfRows = pInfo ? pInfo->numOfRows : 0, @@ -1509,7 +1476,6 @@ static void initClientTopicFromRsp(SMqClientTopic* pTopic, SMqSubTopicEp* pTopic clientVg.offsetInfo.walVerBegin = -1; clientVg.offsetInfo.walVerEnd = -1; clientVg.seekUpdated = false; -// clientVg.receivedInfoFromVnode = false; taosArrayPush(pTopic->vgs, &clientVg); } @@ -1565,7 +1531,9 @@ static bool doUpdateLocalEp(tmq_t* tmq, int32_t epoch, const SMqAskEpRsp* pRsp) tscInfo("consumer:0x%" PRIx64 ", epoch:%d vgId:%d vgKey:%s, offset:%s", tmq->consumerId, epoch, pVgCur->vgId, vgKey, buf); - SVgroupSaveInfo info = {.currentOffset = pVgCur->offsetInfo.endOffset, .seekOffset = pVgCur->offsetInfo.beginOffset, .commitOffset = pVgCur->offsetInfo.committedOffset, .numOfRows = pVgCur->numOfRows}; + SVgroupSaveInfo info = {.currentOffset = pVgCur->offsetInfo.endOffset, .seekOffset = pVgCur->offsetInfo.beginOffset, + .commitOffset = pVgCur->offsetInfo.committedOffset, .numOfRows = pVgCur->numOfRows, + .vgStatus = pVgCur->vgStatus}; taosHashPut(pVgOffsetHashMap, vgKey, strlen(vgKey), &info, sizeof(SVgroupSaveInfo)); } } @@ -1766,9 +1734,6 @@ static int32_t doTmqPollImpl(tmq_t* pTmq, SMqClientTopic* pTopic, SMqClientVg* p } pParam->refId = pTmq->refId; - pParam->epoch = pTmq->epoch; -// pParam->pVg = pVg; // pVg may be released,fix it -// pParam->pTopic = pTopic; strcpy(pParam->topicName, pTopic->topicName); pParam->vgId = pVg->vgId; pParam->requestId = req.reqId; From 5f78c275354946378efe91299d76bb303ce85d4f Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 1 Sep 2023 15:11:25 +0800 Subject: [PATCH 24/74] add enable white list --- include/common/tglobal.h | 1 + include/common/tmsg.h | 112 ++++++++++---------- source/common/src/tglobal.c | 3 + source/common/src/tmsg.c | 36 +++---- source/dnode/mgmt/mgmt_dnode/src/dmHandle.c | 1 + source/dnode/mnode/impl/inc/mndDef.h | 1 + source/dnode/mnode/impl/src/mndDnode.c | 38 +++---- 7 files changed, 96 insertions(+), 96 deletions(-) diff --git a/include/common/tglobal.h b/include/common/tglobal.h index d7a3d84424..1c5510ba0d 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -88,6 +88,7 @@ extern int64_t tsMndLogRetention; extern int8_t tsGrant; extern int32_t tsMndGrantMode; extern bool tsMndSkipGrant; +extern bool tsEnableWhiteList; // dnode extern int64_t tsDndStart; diff --git a/include/common/tmsg.h b/include/common/tmsg.h index 5e039f9ced..bb843ced91 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -420,10 +420,9 @@ typedef enum ENodeType { QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT, QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN, QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE, - QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL + QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL } ENodeType; - typedef struct { int32_t vgId; char* dbFName; @@ -876,19 +875,19 @@ typedef struct { int32_t tSerializeSDropUserReq(void* buf, int32_t bufLen, SDropUserReq* pReq); int32_t tDeserializeSDropUserReq(void* buf, int32_t bufLen, SDropUserReq* pReq); -typedef struct SIpV4Range{ +typedef struct SIpV4Range { uint32_t ip; uint32_t mask; } SIpV4Range; typedef struct { - int8_t createType; - int8_t superUser; // denote if it is a super user or not - int8_t sysInfo; - int8_t enable; - char user[TSDB_USER_LEN]; - char pass[TSDB_USET_PASSWORD_LEN]; - int32_t numIpRanges; + int8_t createType; + int8_t superUser; // denote if it is a super user or not + int8_t sysInfo; + int8_t enable; + char user[TSDB_USER_LEN]; + char pass[TSDB_USET_PASSWORD_LEN]; + int32_t numIpRanges; SIpV4Range* pIpRanges; } SCreateUserReq; @@ -897,17 +896,17 @@ int32_t tDeserializeSCreateUserReq(void* buf, int32_t bufLen, SCreateUserReq* pR void tFreeSCreateUserReq(SCreateUserReq* pReq); typedef struct { - int8_t alterType; - int8_t superUser; - int8_t sysInfo; - int8_t enable; - char user[TSDB_USER_LEN]; - char pass[TSDB_USET_PASSWORD_LEN]; - char objname[TSDB_DB_FNAME_LEN]; // db or topic - char tabName[TSDB_TABLE_NAME_LEN]; - char* tagCond; - int32_t tagCondLen; - int32_t numIpRanges; + int8_t alterType; + int8_t superUser; + int8_t sysInfo; + int8_t enable; + char user[TSDB_USER_LEN]; + char pass[TSDB_USET_PASSWORD_LEN]; + char objname[TSDB_DB_FNAME_LEN]; // db or topic + char tabName[TSDB_TABLE_NAME_LEN]; + char* tagCond; + int32_t tagCondLen; + int32_t numIpRanges; SIpV4Range* pIpRanges; } SAlterUserReq; @@ -985,14 +984,12 @@ typedef struct { int64_t offset; } SInterval; - typedef struct STbVerInfo { char tbFName[TSDB_TABLE_FNAME_LEN]; int32_t sversion; int32_t tversion; } STbVerInfo; - typedef struct { int32_t code; int64_t affectedRows; @@ -1215,13 +1212,13 @@ typedef struct { int16_t sstTrigger; } SDbCfgRsp; -typedef SDbCfgRsp SDbCfgInfo; +typedef SDbCfgRsp SDbCfgInfo; -int32_t tSerializeSDbCfgRspImpl(SEncoder *encoder, const SDbCfgRsp *pRsp); +int32_t tSerializeSDbCfgRspImpl(SEncoder* encoder, const SDbCfgRsp* pRsp); int32_t tSerializeSDbCfgRsp(void* buf, int32_t bufLen, const SDbCfgRsp* pRsp); int32_t tDeserializeSDbCfgRsp(void* buf, int32_t bufLen, SDbCfgRsp* pRsp); -int32_t tDeserializeSDbCfgRspImpl(SDecoder* decoder, SDbCfgRsp *pRsp); -void tFreeSDbCfgRsp(SDbCfgRsp *pRsp); +int32_t tDeserializeSDbCfgRspImpl(SDecoder* decoder, SDbCfgRsp* pRsp); +void tFreeSDbCfgRsp(SDbCfgRsp* pRsp); typedef struct { int32_t rowNum; @@ -1278,8 +1275,8 @@ int32_t tDeserializeSDnodeListRsp(void* buf, int32_t bufLen, SDnodeListRsp* pRsp void tFreeSDnodeListRsp(SDnodeListRsp* pRsp); typedef struct { - SUseDbRsp *useDbRsp; - SDbCfgRsp *cfgRsp; + SUseDbRsp* useDbRsp; + SDbCfgRsp* cfgRsp; } SDbHbRsp; typedef struct { @@ -1380,6 +1377,7 @@ typedef struct { char locale[TD_LOCALE_LEN]; // tsLocale char charset[TD_LOCALE_LEN]; // tsCharset int8_t ttlChangeOnWrite; + int8_t enableWhiteList; } SClusterCfg; typedef struct { @@ -1414,7 +1412,7 @@ typedef struct { int64_t numOfBatchInsertReqs; int64_t numOfBatchInsertSuccessReqs; int32_t numOfCachedTables; - int32_t learnerProgress; // use one reservered + int32_t learnerProgress; // use one reservered } SVnodeLoad; typedef struct { @@ -2074,17 +2072,16 @@ typedef struct { int32_t tversion; } SResReadyRsp; - typedef struct SOperatorParam { - int32_t opType; - int32_t downstreamIdx; - void* value; - SArray* pChildren; //SArray + int32_t opType; + int32_t downstreamIdx; + void* value; + SArray* pChildren; // SArray } SOperatorParam; typedef struct STableScanOperatorParam { - bool tableSeq; - SArray* pUidList; + bool tableSeq; + SArray* pUidList; } STableScanOperatorParam; typedef struct { @@ -2173,7 +2170,6 @@ typedef struct { int32_t tSerializeSTaskDropReq(void* buf, int32_t bufLen, STaskDropReq* pReq); int32_t tDeserializeSTaskDropReq(void* buf, int32_t bufLen, STaskDropReq* pReq); - typedef enum { TASK_NOTIFY_FINISHED = 1, } ETaskNotifyType; @@ -2297,10 +2293,10 @@ typedef struct { char clientId[256]; SArray* topicNames; // SArray - int8_t withTbName; - int8_t autoCommit; - int32_t autoCommitInterval; - int8_t resetOffsetCfg; + int8_t withTbName; + int8_t autoCommit; + int32_t autoCommitInterval; + int8_t resetOffsetCfg; } SCMSubscribeReq; static FORCE_INLINE int32_t tSerializeSCMSubscribeReq(void** buf, const SCMSubscribeReq* pReq) { @@ -2677,7 +2673,7 @@ typedef struct { int32_t newTTL; int32_t newCommentLen; char* newComment; - int64_t ctimeMs; // fill by vnode + int64_t ctimeMs; // fill by vnode } SVAlterTbReq; int32_t tEncodeSVAlterTbReq(SEncoder* pEncoder, const SVAlterTbReq* pReq); @@ -3081,7 +3077,7 @@ typedef struct { int64_t suid; } SMqRebVgReq; -static FORCE_INLINE int tEncodeSMqRebVgReq(SEncoder *pCoder, const SMqRebVgReq* pReq) { +static FORCE_INLINE int tEncodeSMqRebVgReq(SEncoder* pCoder, const SMqRebVgReq* pReq) { if (tStartEncode(pCoder) < 0) return -1; if (tEncodeI64(pCoder, pReq->leftForVer) < 0) return -1; if (tEncodeI32(pCoder, pReq->vgId) < 0) return -1; @@ -3101,7 +3097,7 @@ static FORCE_INLINE int tEncodeSMqRebVgReq(SEncoder *pCoder, const SMqRebVgReq* return 0; } -static FORCE_INLINE int tDecodeSMqRebVgReq(SDecoder *pCoder, SMqRebVgReq* pReq) { +static FORCE_INLINE int tDecodeSMqRebVgReq(SDecoder* pCoder, SMqRebVgReq* pReq) { if (tStartDecode(pCoder) < 0) return -1; if (tDecodeI64(pCoder, &pReq->leftForVer) < 0) return -1; @@ -3117,7 +3113,7 @@ static FORCE_INLINE int tDecodeSMqRebVgReq(SDecoder *pCoder, SMqRebVgReq* pReq) if (tDecodeCStr(pCoder, &pReq->qmsg) < 0) return -1; } else if (pReq->subType == TOPIC_SUB_TYPE__TABLE) { if (tDecodeI64(pCoder, &pReq->suid) < 0) return -1; - if (!tDecodeIsEnd(pCoder)){ + if (!tDecodeIsEnd(pCoder)) { if (tDecodeCStr(pCoder, &pReq->qmsg) < 0) return -1; } } @@ -3641,12 +3637,12 @@ typedef struct { int32_t vgId; STqOffsetVal offset; int64_t rows; -}OffsetRows; +} OffsetRows; -typedef struct{ - char topicName[TSDB_TOPIC_FNAME_LEN]; - SArray* offsetRows; -}TopicOffsetRows; +typedef struct { + char topicName[TSDB_TOPIC_FNAME_LEN]; + SArray* offsetRows; +} TopicOffsetRows; typedef struct { int64_t consumerId; @@ -3659,9 +3655,9 @@ typedef struct { } SMqHbRsp; typedef struct { - SMsgHead head; - int64_t consumerId; - char subKey[TSDB_SUBSCRIBE_KEY_LEN]; + SMsgHead head; + int64_t consumerId; + char subKey[TSDB_SUBSCRIBE_KEY_LEN]; } SMqSeekReq; #define TD_AUTO_CREATE_TABLE 0x1 @@ -3715,7 +3711,7 @@ typedef struct SDeleteRes { int64_t affectedRows; char tableFName[TSDB_TABLE_NAME_LEN]; char tsColName[TSDB_COL_NAME_LEN]; - int64_t ctimeMs; // fill by vnode + int64_t ctimeMs; // fill by vnode } SDeleteRes; int32_t tEncodeDeleteRes(SEncoder* pCoder, const SDeleteRes* pRes); @@ -3793,8 +3789,8 @@ int32_t tSerializeSMqHbReq(void* buf, int32_t bufLen, SMqHbReq* pReq); int32_t tDeserializeSMqHbReq(void* buf, int32_t bufLen, SMqHbReq* pReq); int32_t tDeatroySMqHbReq(SMqHbReq* pReq); -int32_t tSerializeSMqSeekReq(void *buf, int32_t bufLen, SMqSeekReq *pReq); -int32_t tDeserializeSMqSeekReq(void *buf, int32_t bufLen, SMqSeekReq *pReq); +int32_t tSerializeSMqSeekReq(void* buf, int32_t bufLen, SMqSeekReq* pReq); +int32_t tDeserializeSMqSeekReq(void* buf, int32_t bufLen, SMqSeekReq* pReq); #define SUBMIT_REQ_AUTO_CREATE_TABLE 0x1 #define SUBMIT_REQ_COLUMN_DATA_FORMAT 0x2 @@ -3809,7 +3805,7 @@ typedef struct { SArray* aRowP; SArray* aCol; }; - int64_t ctimeMs; + int64_t ctimeMs; } SSubmitTbData; typedef struct { diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index ff9e922ee1..8971c1312c 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -81,6 +81,7 @@ int64_t tsMndLogRetention = 2000; int8_t tsGrant = 1; int32_t tsMndGrantMode = 0; bool tsMndSkipGrant = false; +bool tsEnableWhiteList = false; // ip white list cfg // dnode int64_t tsDndStart = 0; @@ -659,6 +660,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { if (cfgAddInt64(pCfg, "minDiskFreeSize", tsMinDiskFreeSize, TFS_MIN_DISK_FREE_SIZE, 1024 * 1024 * 1024, CFG_SCOPE_SERVER) != 0) return -1; + if (cfgAddBool(pCfg, "enableWhiteList", tsEnableWhiteList, CFG_SCOPE_SERVER) != 0) return -1; GRANT_CFG_ADD; return 0; @@ -1047,6 +1049,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsMndLogRetention = cfgGetItem(pCfg, "mndLogRetention")->i64; tsMndSkipGrant = cfgGetItem(pCfg, "skipGrant")->bval; tsMndGrantMode = cfgGetItem(pCfg, "grantMode")->i32; + tsEnableWhiteList = cfgGetItem(pCfg, "enableWhiteList")->bval; tsStartUdfd = cfgGetItem(pCfg, "udf")->bval; tstrncpy(tsUdfdResFuncs, cfgGetItem(pCfg, "udfdResFuncs")->str, sizeof(tsUdfdResFuncs)); diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 7bf6520140..0553f73bb3 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -1060,6 +1060,7 @@ int32_t tSerializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) { if (tEncodeCStr(&encoder, pReq->clusterCfg.timezone) < 0) return -1; if (tEncodeCStr(&encoder, pReq->clusterCfg.locale) < 0) return -1; if (tEncodeCStr(&encoder, pReq->clusterCfg.charset) < 0) return -1; + if (tEncodeI8(&encoder, pReq->clusterCfg.enableWhiteList) < 0) return -1; // vnode loads int32_t vlen = (int32_t)taosArrayGetSize(pReq->pVloads); @@ -1147,6 +1148,7 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) { if (tDecodeCStrTo(&decoder, pReq->clusterCfg.timezone) < 0) return -1; if (tDecodeCStrTo(&decoder, pReq->clusterCfg.locale) < 0) return -1; if (tDecodeCStrTo(&decoder, pReq->clusterCfg.charset) < 0) return -1; + if (tDecodeI8(&decoder, &pReq->clusterCfg.enableWhiteList) < 0) return -1; // vnode loads int32_t vlen = 0; @@ -1416,9 +1418,7 @@ int32_t tDeserializeSCreateUserReq(void *buf, int32_t bufLen, SCreateUserReq *pR return 0; } -void tFreeSCreateUserReq(SCreateUserReq* pReq) { - taosMemoryFree(pReq->pIpRanges); -} +void tFreeSCreateUserReq(SCreateUserReq *pReq) { taosMemoryFree(pReq->pIpRanges); } int32_t tSerializeSAlterUserReq(void *buf, int32_t bufLen, SAlterUserReq *pReq) { SEncoder encoder = {0}; @@ -4761,7 +4761,7 @@ int32_t tDeserializeSAlterVnodeReplicaReq(void *buf, int32_t bufLen, SAlterVnode if (tDecodeSReplica(&decoder, pReplica) < 0) return -1; } } - if (!tDecodeIsEnd(&decoder)){ + if (!tDecodeIsEnd(&decoder)) { if (tDecodeI32(&decoder, &pReq->changeVersion) < 0) return -1; } @@ -5632,17 +5632,17 @@ void tFreeSSubQueryMsg(SSubQueryMsg *pReq) { taosMemoryFreeClear(pReq->msg); } -int32_t tSerializeSOperatorParam(SEncoder* pEncoder, SOperatorParam* pOpParam) { +int32_t tSerializeSOperatorParam(SEncoder *pEncoder, SOperatorParam *pOpParam) { if (tEncodeI32(pEncoder, pOpParam->opType) < 0) return -1; if (tEncodeI32(pEncoder, pOpParam->downstreamIdx) < 0) return -1; switch (pOpParam->opType) { case QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN: { - STableScanOperatorParam* pScan = (STableScanOperatorParam*)pOpParam->value; + STableScanOperatorParam *pScan = (STableScanOperatorParam *)pOpParam->value; if (tEncodeI8(pEncoder, pScan->tableSeq) < 0) return -1; int32_t uidNum = taosArrayGetSize(pScan->pUidList); if (tEncodeI32(pEncoder, uidNum) < 0) return -1; for (int32_t m = 0; m < uidNum; ++m) { - int64_t* pUid = taosArrayGet(pScan->pUidList, m); + int64_t *pUid = taosArrayGet(pScan->pUidList, m); if (tEncodeI64(pEncoder, *pUid) < 0) return -1; } break; @@ -5650,25 +5650,25 @@ int32_t tSerializeSOperatorParam(SEncoder* pEncoder, SOperatorParam* pOpParam) { default: return TSDB_CODE_INVALID_PARA; } - + int32_t n = taosArrayGetSize(pOpParam->pChildren); if (tEncodeI32(pEncoder, n) < 0) return -1; for (int32_t i = 0; i < n; ++i) { - SOperatorParam* pChild = *(SOperatorParam**)taosArrayGet(pOpParam->pChildren, i); + SOperatorParam *pChild = *(SOperatorParam **)taosArrayGet(pOpParam->pChildren, i); if (tSerializeSOperatorParam(pEncoder, pChild) < 0) return -1; } return 0; } -int32_t tDeserializeSOperatorParam(SDecoder *pDecoder, SOperatorParam* pOpParam) { +int32_t tDeserializeSOperatorParam(SDecoder *pDecoder, SOperatorParam *pOpParam) { if (tDecodeI32(pDecoder, &pOpParam->opType) < 0) return -1; if (tDecodeI32(pDecoder, &pOpParam->downstreamIdx) < 0) return -1; switch (pOpParam->opType) { case QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN: { - STableScanOperatorParam* pScan = taosMemoryMalloc(sizeof(STableScanOperatorParam)); + STableScanOperatorParam *pScan = taosMemoryMalloc(sizeof(STableScanOperatorParam)); if (NULL == pScan) return -1; - if (tDecodeI8(pDecoder, (int8_t*)&pScan->tableSeq) < 0) return -1; + if (tDecodeI8(pDecoder, (int8_t *)&pScan->tableSeq) < 0) return -1; int32_t uidNum = 0; int64_t uid = 0; if (tDecodeI32(pDecoder, &uidNum) < 0) return -1; @@ -5695,7 +5695,7 @@ int32_t tDeserializeSOperatorParam(SDecoder *pDecoder, SOperatorParam* pOpParam) pOpParam->pChildren = taosArrayInit(childrenNum, POINTER_BYTES); if (NULL == pOpParam->pChildren) return -1; for (int32_t i = 0; i < childrenNum; ++i) { - SOperatorParam* pChild = taosMemoryCalloc(1, sizeof(SOperatorParam)); + SOperatorParam *pChild = taosMemoryCalloc(1, sizeof(SOperatorParam)); if (NULL == pChild) return -1; if (tDeserializeSOperatorParam(pDecoder, pChild) < 0) return -1; taosArrayPush(pOpParam->pChildren, &pChild); @@ -5707,7 +5707,6 @@ int32_t tDeserializeSOperatorParam(SDecoder *pDecoder, SOperatorParam* pOpParam) return 0; } - int32_t tSerializeSResFetchReq(void *buf, int32_t bufLen, SResFetchReq *pReq) { int32_t headLen = sizeof(SMsgHead); if (buf != NULL) { @@ -5768,7 +5767,7 @@ int32_t tDeserializeSResFetchReq(void *buf, int32_t bufLen, SResFetchReq *pReq) if (NULL == pReq->pOpParam) return -1; if (tDeserializeSOperatorParam(&decoder, pReq->pOpParam) < 0) return -1; } - + tEndDecode(&decoder); tDecoderClear(&decoder); @@ -5956,7 +5955,7 @@ int32_t tDeserializeSTaskNotifyReq(void *buf, int32_t bufLen, STaskNotifyReq *pR if (tDecodeU64(&decoder, &pReq->taskId) < 0) return -1; if (tDecodeI64(&decoder, &pReq->refId) < 0) return -1; if (tDecodeI32(&decoder, &pReq->execId) < 0) return -1; - if (tDecodeI32(&decoder, (int32_t*)&pReq->type) < 0) return -1; + if (tDecodeI32(&decoder, (int32_t *)&pReq->type) < 0) return -1; tEndDecode(&decoder); @@ -5964,7 +5963,6 @@ int32_t tDeserializeSTaskNotifyReq(void *buf, int32_t bufLen, STaskNotifyReq *pR return 0; } - int32_t tSerializeSQueryTableRsp(void *buf, int32_t bufLen, SQueryTableRsp *pRsp) { SEncoder encoder = {0}; tEncoderInit(&encoder, buf, bufLen); @@ -5982,7 +5980,7 @@ int32_t tSerializeSQueryTableRsp(void *buf, int32_t bufLen, SQueryTableRsp *pRsp if (tEncodeI32(&encoder, pVer->tversion) < 0) return -1; } } - + tEndEncode(&encoder); int32_t tlen = encoder.pos; @@ -6010,7 +6008,7 @@ int32_t tDeserializeSQueryTableRsp(void *buf, int32_t bufLen, SQueryTableRsp *pR if (tDecodeI32(&decoder, &tbVer.tversion) < 0) return -1; if (NULL == taosArrayPush(pRsp->tbVerInfo, &tbVer)) return -1; } - + tEndDecode(&decoder); tDecoderClear(&decoder); diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c index 1bce20ff44..e6b7c0cb68 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c @@ -91,6 +91,7 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { req.clusterCfg.statusInterval = tsStatusInterval; req.clusterCfg.checkTime = 0; req.clusterCfg.ttlChangeOnWrite = tsTtlChangeOnWrite; + req.clusterCfg.enableWhiteList = tsEnableWhiteList ? 1 : 0; char timestr[32] = "1970-01-01 00:00:00.00"; (void)taosParseTime(timestr, &req.clusterCfg.checkTime, (int32_t)strlen(timestr), TSDB_TIME_PRECISION_MILLI, 0); memcpy(req.clusterCfg.timezone, tsTimezoneStr, TD_TIMEZONE_LEN); diff --git a/source/dnode/mnode/impl/inc/mndDef.h b/source/dnode/mnode/impl/inc/mndDef.h index 1bf13c8fb5..90d54e7f58 100644 --- a/source/dnode/mnode/impl/inc/mndDef.h +++ b/source/dnode/mnode/impl/inc/mndDef.h @@ -136,6 +136,7 @@ typedef enum { DND_REASON_LOCALE_NOT_MATCH, DND_REASON_CHARSET_NOT_MATCH, DND_REASON_TTL_CHANGE_ON_WRITE_NOT_MATCH, + DND_REASON_ENABLE_WHITELIST_NOT_MATCH, DND_REASON_OTHERS } EDndReason; diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 115c33cff1..a11bd2556e 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -15,6 +15,8 @@ #define _DEFAULT_SOURCE #include "mndDnode.h" +#include "audit.h" +#include "mndCluster.h" #include "mndDb.h" #include "mndMnode.h" #include "mndPrivilege.h" @@ -25,8 +27,6 @@ #include "mndUser.h" #include "mndVgroup.h" #include "tmisce.h" -#include "mndCluster.h" -#include "audit.h" #define TSDB_DNODE_VER_NUMBER 2 #define TSDB_DNODE_RESERVE_SIZE 64 @@ -421,6 +421,11 @@ static int32_t mndCheckClusterCfgPara(SMnode *pMnode, SDnodeObj *pDnode, const S tsTtlChangeOnWrite); return DND_REASON_TTL_CHANGE_ON_WRITE_NOT_MATCH; } + int8_t enable = tsEnableWhiteList ? 1 : 0; + if (pCfg->enableWhiteList != enable) { + mError("dnode:%d, enable :%d inconsistent with cluster:%d", pDnode->id, pCfg->enableWhiteList, enable); + return DND_REASON_ENABLE_WHITELIST_NOT_MATCH; + } return 0; } @@ -926,14 +931,10 @@ _OVER: extern int32_t mndProcessRestoreDnodeReqImpl(SRpcMsg *pReq); -int32_t mndProcessRestoreDnodeReq(SRpcMsg *pReq){ - return mndProcessRestoreDnodeReqImpl(pReq); -} +int32_t mndProcessRestoreDnodeReq(SRpcMsg *pReq) { return mndProcessRestoreDnodeReqImpl(pReq); } #ifndef TD_ENTERPRISE -int32_t mndProcessRestoreDnodeReqImpl(SRpcMsg *pReq){ - return 0; -} +int32_t mndProcessRestoreDnodeReqImpl(SRpcMsg *pReq) { return 0; } #endif static int32_t mndDropDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SMnodeObj *pMObj, SQnodeObj *pQObj, @@ -1004,15 +1005,14 @@ static int32_t mndProcessDropDnodeReq(SRpcMsg *pReq) { goto _OVER; } - mInfo("dnode:%d, start to drop, ep:%s:%d, force:%s, unsafe:%s", - dropReq.dnodeId, dropReq.fqdn, dropReq.port, dropReq.force?"true":"false", dropReq.unsafe?"true":"false"); + mInfo("dnode:%d, start to drop, ep:%s:%d, force:%s, unsafe:%s", dropReq.dnodeId, dropReq.fqdn, dropReq.port, + dropReq.force ? "true" : "false", dropReq.unsafe ? "true" : "false"); if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_MNODE) != 0) { goto _OVER; } bool force = dropReq.force; - if(dropReq.unsafe) - { + if (dropReq.unsafe) { force = true; } @@ -1043,19 +1043,19 @@ static int32_t mndProcessDropDnodeReq(SRpcMsg *pReq) { } int32_t numOfVnodes = mndGetVnodesNum(pMnode, pDnode->id); - bool isonline = mndIsDnodeOnline(pDnode, taosGetTimestampMs()); + bool isonline = mndIsDnodeOnline(pDnode, taosGetTimestampMs()); if (isonline && force) { terrno = TSDB_CODE_DNODE_ONLY_USE_WHEN_OFFLINE; mError("dnode:%d, failed to drop since %s, vnodes:%d mnode:%d qnode:%d snode:%d", pDnode->id, terrstr(), - numOfVnodes, pMObj != NULL, pQObj != NULL, pSObj != NULL); + numOfVnodes, pMObj != NULL, pQObj != NULL, pSObj != NULL); goto _OVER; } if (!isonline && !force) { terrno = TSDB_CODE_DNODE_OFFLINE; mError("dnode:%d, failed to drop since %s, vnodes:%d mnode:%d qnode:%d snode:%d", pDnode->id, terrstr(), - numOfVnodes, pMObj != NULL, pQObj != NULL, pSObj != NULL); + numOfVnodes, pMObj != NULL, pQObj != NULL, pSObj != NULL); goto _OVER; } @@ -1065,8 +1065,8 @@ static int32_t mndProcessDropDnodeReq(SRpcMsg *pReq) { char obj1[30] = {0}; sprintf(obj1, "%d", dropReq.dnodeId); - //char obj2[150] = {0}; - //sprintf(obj2, "%s:%d", dropReq.fqdn, dropReq.port); + // char obj2[150] = {0}; + // sprintf(obj2, "%s:%d", dropReq.fqdn, dropReq.port); char detail[100] = {0}; sprintf(detail, "force:%d, unsafe:%d", dropReq.force, dropReq.unsafe); @@ -1164,8 +1164,8 @@ static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq) { if (code < 0) return code; if (flag < 0) { - mError("dnode:%d, failed to config ttlBatchDropNum since value:%d. Valid range: [0, %d]", cfgReq.dnodeId, - flag, INT32_MAX); + mError("dnode:%d, failed to config ttlBatchDropNum since value:%d. Valid range: [0, %d]", cfgReq.dnodeId, flag, + INT32_MAX); terrno = TSDB_CODE_INVALID_CFG; return -1; } From 549ee9f2e027eb3b2a65d9c9301a8658932a7ac8 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Fri, 1 Sep 2023 16:37:51 +0800 Subject: [PATCH 25/74] atomic rename file on windows --- source/os/CMakeLists.txt | 1 + source/os/src/osFile.c | 30 ++++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/source/os/CMakeLists.txt b/source/os/CMakeLists.txt index 46e28b529d..14bcda857f 100644 --- a/source/os/CMakeLists.txt +++ b/source/os/CMakeLists.txt @@ -40,6 +40,7 @@ target_link_libraries( os PUBLIC pthread PUBLIC zlibstatic + PUBLIC KtmW32 ) if(TD_WINDOWS) target_link_libraries( diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c index ede1f1fb0e..e014470fed 100644 --- a/source/os/src/osFile.c +++ b/source/os/src/osFile.c @@ -19,6 +19,8 @@ #ifdef WINDOWS #include +#include +#include #define F_OK 0 #define W_OK 2 #define R_OK 4 @@ -175,12 +177,32 @@ int32_t taosRemoveFile(const char *path) { return remove(path); } int32_t taosRenameFile(const char *oldName, const char *newName) { #ifdef WINDOWS - bool code = MoveFileEx(oldName, newName, MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED); - if (!code) { - printf("failed to rename file %s to %s, reason:%s\n", oldName, newName, strerror(errno)); + bool finished = false; + + HANDLE transactionHandle = CreateTransaction(NULL, NULL, 0, 0, 0, INFINITE, NULL); + if (transactionHandle == INVALID_HANDLE_VALUE) { + printf("failed to rename file %s to %s, reason: CreateTransaction failed.\n", oldName, newName); + return -1; } - return code ? 0 : -1; + BOOL result = MoveFileTransacted(oldName, newName, NULL, NULL, MOVEFILE_REPLACE_EXISTING, transactionHandle); + + if (result) { + finished = CommitTransaction(transactionHandle); + if (!finished) { + DWORD error = GetLastError(); + printf("failed to rename file %s to %s, reason: CommitTransaction errcode %d.\n", oldName, newName, error); + } + } else { + RollbackTransaction(transactionHandle); + DWORD error = GetLastError(); + finished = false; + printf("failed to rename file %s to %s, reason: MoveFileTransacted errcode %d.\n", oldName, newName, error); + } + + CloseHandle(transactionHandle); + + return finished ? 0 : -1; #else int32_t code = rename(oldName, newName); if (code < 0) { From f0fbe08e1de0e214afa3306ac3adfd7b561aa1a8 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 1 Sep 2023 16:45:46 +0800 Subject: [PATCH 26/74] fix:core dump if tmq is null --- include/client/taos.h | 23 ++++++++++------------- source/client/src/clientTmq.c | 5 ++++- source/libs/parser/src/parUtil.c | 2 ++ source/util/src/terror.c | 4 ++-- utils/test/c/varbinary_test.c | 1 + 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/include/client/taos.h b/include/client/taos.h index 5b7946c9ad..a640e12ac5 100644 --- a/include/client/taos.h +++ b/include/client/taos.h @@ -268,6 +268,13 @@ typedef enum tmq_conf_res_t { TMQ_CONF_OK = 0, } tmq_conf_res_t; +typedef enum tmq_res_t { + TMQ_RES_INVALID = -1, + TMQ_RES_DATA = 1, + TMQ_RES_TABLE_META = 2, + TMQ_RES_METADATA = 3, +} tmq_res_t; + typedef struct tmq_topic_assignment { int32_t vgId; int64_t currentOffset; @@ -302,6 +309,8 @@ DLL_EXPORT int32_t tmq_offset_seek(tmq_t *tmq, const char *pTopicName, int32_t DLL_EXPORT int64_t tmq_position(tmq_t *tmq, const char *pTopicName, int32_t vgId); // The current offset is the offset of the last consumed message + 1 DLL_EXPORT int64_t tmq_committed(tmq_t *tmq, const char *pTopicName, int32_t vgId); +DLL_EXPORT const char *tmq_get_table_name(TAOS_RES *res); +DLL_EXPORT tmq_res_t tmq_get_res_type(TAOS_RES *res); DLL_EXPORT const char *tmq_get_topic_name(TAOS_RES *res); DLL_EXPORT const char *tmq_get_db_name(TAOS_RES *res); DLL_EXPORT int32_t tmq_get_vgroup_id(TAOS_RES *res); @@ -309,34 +318,22 @@ DLL_EXPORT int64_t tmq_get_vgroup_offset(TAOS_RES* res); DLL_EXPORT const char *tmq_err2str(int32_t code); /* ------------------------------ TAOSX -----------------------------------*/ -// note: following apis are unstable -enum tmq_res_t { - TMQ_RES_INVALID = -1, - TMQ_RES_DATA = 1, - TMQ_RES_TABLE_META = 2, - TMQ_RES_METADATA = 3, -}; - typedef struct tmq_raw_data { void *raw; uint32_t raw_len; uint16_t raw_type; } tmq_raw_data; -typedef enum tmq_res_t tmq_res_t; - -DLL_EXPORT const char *tmq_get_table_name(TAOS_RES *res); -DLL_EXPORT tmq_res_t tmq_get_res_type(TAOS_RES *res); DLL_EXPORT int32_t tmq_get_raw(TAOS_RES *res, tmq_raw_data *raw); DLL_EXPORT int32_t tmq_write_raw(TAOS *taos, tmq_raw_data raw); DLL_EXPORT int taos_write_raw_block(TAOS *taos, int numOfRows, char *pData, const char *tbname); DLL_EXPORT int taos_write_raw_block_with_fields(TAOS *taos, int rows, char *pData, const char *tbname, TAOS_FIELD *fields, int numFields); DLL_EXPORT void tmq_free_raw(tmq_raw_data raw); + // Returning null means error. Returned result need to be freed by tmq_free_json_meta DLL_EXPORT char *tmq_get_json_meta(TAOS_RES *res); DLL_EXPORT void tmq_free_json_meta(char *jsonMeta); - /* ---------------------------- TAOSX END -------------------------------- */ typedef enum { diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index c6755f0bba..8eca73da3d 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -1315,8 +1315,11 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { uint64_t requestId = pParam->requestId; tmq_t* tmq = taosAcquireRef(tmqMgmt.rsetId, refId); if (tmq == NULL) { + taosMemoryFree(pParam); + taosMemoryFreeClear(pMsg->pData); + taosMemoryFreeClear(pMsg->pEpSet); terrno = TSDB_CODE_TMQ_CONSUMER_CLOSED; - goto FAILED; + return -1; } if (code != 0) { diff --git a/source/libs/parser/src/parUtil.c b/source/libs/parser/src/parUtil.c index b216ec5491..9a35b2f804 100644 --- a/source/libs/parser/src/parUtil.c +++ b/source/libs/parser/src/parUtil.c @@ -37,6 +37,8 @@ static char* getSyntaxErrFormat(int32_t errCode) { return "Column ambiguously defined: %s"; case TSDB_CODE_PAR_WRONG_VALUE_TYPE: return "Invalid value type: %s"; + case TSDB_CODE_PAR_INVALID_VARBINARY: + return "Invalid varbinary value: %s"; case TSDB_CODE_PAR_ILLEGAL_USE_AGG_FUNCTION: return "There mustn't be aggregation"; case TSDB_CODE_PAR_WRONG_NUMBER_OF_SELECT: diff --git a/source/util/src/terror.c b/source/util/src/terror.c index 278b23b5a9..5edc3e3f08 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -537,7 +537,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_ROW_LENGTH, "Row length exceeds TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_COLUMNS_NUM, "Illegal number of columns") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_TOO_MANY_COLUMNS, "Too many columns") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_FIRST_COLUMN, "First column must be timestamp") -TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN, "Invalid binary/nchar column/tag length") +TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN, "Invalid varbinary/binary/nchar column/tag length") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_TAGS_NUM, "Invalid number of tag columns") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_PERMISSION_DENIED, "Permission denied") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_STREAM_QUERY, "Invalid stream query") @@ -556,7 +556,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NOT_ALLOWED_WIN_QUERY, "Window query not su TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DROP_COL, "No columns can be dropped") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_COL_JSON, "Only tag can be json type") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_VALUE_TOO_LONG, "Value too long for column/tag") -TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_VARBINARY, "Invalidate varbinary type") +TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_VARBINARY, "Invalid varbinary value") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DELETE_WHERE, "The DELETE statement must have a definite time window range") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_REDISTRIBUTE_VG, "The REDISTRIBUTE VGROUP statement only support 1 to 3 dnodes") TAOS_DEFINE_ERROR(TSDB_CODE_PAR_FILL_NOT_ALLOWED_FUNC, "Fill not allowed") diff --git a/utils/test/c/varbinary_test.c b/utils/test/c/varbinary_test.c index e29b94ad1f..389f409e1a 100644 --- a/utils/test/c/varbinary_test.c +++ b/utils/test/c/varbinary_test.c @@ -85,6 +85,7 @@ void varbinary_sql_test() { // test insert pRes = taos_query(taos, "insert into tb2 using stb tags (2, 'tb2_bin1', 093) values (now + 2s, 'nchar1', 892, 0.3)"); + printf("error:%s", taos_errstr(pRes)); ASSERT(taos_errno(pRes) != 0); pRes = taos_query(taos, "insert into tb3 using stb tags (3, 'tb3_bin1', 0x7f829) values (now + 3s, 'nchar1', 0x7f829, 0.3)"); From 02ac3eac5a634492360f5c15c6f4bae08f73471e Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 1 Sep 2023 16:51:44 +0800 Subject: [PATCH 27/74] fix:logic error --- source/dnode/vnode/src/tq/tq.c | 3 ++- source/dnode/vnode/src/tq/tqUtil.c | 7 +------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/source/dnode/vnode/src/tq/tq.c b/source/dnode/vnode/src/tq/tq.c index 5b848b51bd..a4b10ac858 100644 --- a/source/dnode/vnode/src/tq/tq.c +++ b/source/dnode/vnode/src/tq/tq.c @@ -1742,6 +1742,7 @@ int32_t tqProcessTaskUpdateReq(STQ* pTq, SRpcMsg* pMsg) { char* msg = POINTER_SHIFT(pMsg->pCont, sizeof(SMsgHead)); int32_t len = pMsg->contLen - sizeof(SMsgHead); SRpcMsg rsp = {.info = pMsg->info, .code = TSDB_CODE_SUCCESS}; + bool allStopped = false; SStreamTaskNodeUpdateMsg req = {0}; @@ -1787,7 +1788,7 @@ int32_t tqProcessTaskUpdateReq(STQ* pTq, SRpcMsg* pMsg) { pMeta->closedTask += 1; int32_t numOfTasks = streamMetaGetNumOfTasks(pMeta); - bool allStopped = (pMeta->closedTask == numOfTasks); + allStopped = (pMeta->closedTask == numOfTasks); if (allStopped) { pMeta->closedTask = 0; } else { diff --git a/source/dnode/vnode/src/tq/tqUtil.c b/source/dnode/vnode/src/tq/tqUtil.c index 60d23663d0..79a87f86e4 100644 --- a/source/dnode/vnode/src/tq/tqUtil.c +++ b/source/dnode/vnode/src/tq/tqUtil.c @@ -225,12 +225,7 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, int totalRows = 0; while (1) { int32_t savedEpoch = atomic_load_32(&pHandle->epoch); - if (savedEpoch > pRequest->epoch) { - tqWarn("tmq poll: consumer:0x%" PRIx64 " (epoch %d), subkey:%s vgId:%d offset %" PRId64 - ", found new consumer epoch %d, discard req epoch %d", - pRequest->consumerId, pRequest->epoch, pHandle->subKey, vgId, fetchVer, savedEpoch, pRequest->epoch); - break; - } + ASSERT(savedEpoch <= pRequest->epoch); if (tqFetchLog(pTq, pHandle, &fetchVer, pRequest->reqId) < 0) { tqOffsetResetToLog(&taosxRsp.rspOffset, fetchVer); From 90e938e48f8d4be240f3dc7b7f59c2b168bed20f Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Mon, 4 Sep 2023 16:53:12 +0800 Subject: [PATCH 28/74] fix:set vg status idle if reveive poll callback --- source/client/src/clientTmq.c | 25 ++++++++--------------- source/dnode/mnode/impl/src/mndConsumer.c | 1 - 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index 8eca73da3d..87511865e9 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -1333,7 +1333,7 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { if (pRspWrapper == NULL) { tscWarn("consumer:0x%" PRIx64 " msg from vgId:%d discarded, since out of memory, reqId:0x%" PRIx64, tmq->consumerId, vgId, requestId); - goto FAILED; + goto END; } pRspWrapper->tmqRspType = TMQ_MSG_TYPE__END_RSP; @@ -1343,7 +1343,7 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { vgId, tstrerror(code), requestId); } - goto FAILED; + goto END; } int32_t msgEpoch = ((SMqRspHead*)pMsg->pData)->epoch; @@ -1353,7 +1353,8 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { tscWarn("consumer:0x%" PRIx64 " msg discard from vgId:%d since from earlier epoch, rsp epoch %d, current epoch %d, reqId:0x%" PRIx64, tmq->consumerId, vgId, msgEpoch, clientEpoch, requestId); - goto FAILED; + code = -1; + goto END; } ASSERT(msgEpoch == clientEpoch); @@ -1364,7 +1365,8 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { SMqPollRspWrapper* pRspWrapper = taosAllocateQitem(sizeof(SMqPollRspWrapper), DEF_QITEM, 0); if (pRspWrapper == NULL) { tscWarn("consumer:0x%" PRIx64 " msg discard from vgId:%d, since out of memory", tmq->consumerId, vgId); - goto FAILED; + code = TSDB_CODE_OUT_OF_MEMORY; + goto END; } pRspWrapper->tmqRspType = rspType; @@ -1407,14 +1409,7 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { tscDebug("consumer:0x%" PRIx64 " put poll res into mqueue, type:%d, vgId:%d, total in queue:%d, reqId:0x%" PRIx64, tmq->consumerId, rspType, vgId, total, requestId); - tsem_post(&tmq->rspSem); - taosReleaseRef(tmqMgmt.rsetId, refId); - taosMemoryFree(pParam); - taosMemoryFreeClear(pMsg->pData); - - return 0; - -FAILED: +END: taosWLockLatch(&tmq->lock); SMqClientVg* pVg = getVgInfo(tmq, pParam->topicName, vgId); if(pVg){ @@ -1428,7 +1423,7 @@ FAILED: taosMemoryFreeClear(pMsg->pData); taosMemoryFreeClear(pMsg->pEpSet); - return -1; + return code; } typedef struct SVgroupSaveInfo { @@ -1844,13 +1839,9 @@ static void updateVgInfo(SMqClientVg* pVg, STqOffsetVal* reqOffset, STqOffsetVal tscDebug("consumer:0x%" PRIx64" local offset is NOT update, since seekupdate is set", consumerId); } - // update the status - atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); - // update the valid wal version range pVg->offsetInfo.walVerBegin = sver; pVg->offsetInfo.walVerEnd = ever + 1; -// pVg->receivedInfoFromVnode = true; } static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { diff --git a/source/dnode/mnode/impl/src/mndConsumer.c b/source/dnode/mnode/impl/src/mndConsumer.c index f25bd2cffb..7f96255b1e 100644 --- a/source/dnode/mnode/impl/src/mndConsumer.c +++ b/source/dnode/mnode/impl/src/mndConsumer.c @@ -401,7 +401,6 @@ static int32_t mndProcessMqHbReq(SRpcMsg *pMsg) { SMqSubscribeObj *pSub = mndAcquireSubscribe(pMnode, pConsumer->cgroup, data->topicName); if(pSub == NULL){ - ASSERT(0); continue; } taosWLockLatch(&pSub->lock); From 338e8f66577d89537573dfb9665c16d297d9a4a3 Mon Sep 17 00:00:00 2001 From: sunpeng Date: Mon, 4 Sep 2023 17:56:03 +0800 Subject: [PATCH 29/74] Update mxml_CMakeLists.txt.in --- cmake/mxml_CMakeLists.txt.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/mxml_CMakeLists.txt.in b/cmake/mxml_CMakeLists.txt.in index 1ac90ebdd4..762df40e10 100644 --- a/cmake/mxml_CMakeLists.txt.in +++ b/cmake/mxml_CMakeLists.txt.in @@ -1,7 +1,7 @@ # cos ExternalProject_Add(mxml GIT_REPOSITORY https://github.com/michaelrsweet/mxml.git - GIT_TAG release-2.12 + GIT_TAG v2.12 SOURCE_DIR "${TD_CONTRIB_DIR}/mxml" #BINARY_DIR "" BUILD_IN_SOURCE TRUE From 9a2da3adee182b707a37b724f659b8e86213365c Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Mon, 4 Sep 2023 18:31:07 +0800 Subject: [PATCH 30/74] fix:set vg status idle if reveive poll callback --- source/client/src/clientTmq.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index 87511865e9..0a64a02f20 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -1308,6 +1308,15 @@ static SMqClientTopic* getTopicInfo(tmq_t* tmq, char* topicName){ return NULL; } +static void setVgIdle(tmq_t* tmq, char* topicName, int32_t vgId){ + taosWLockLatch(&tmq->lock); + SMqClientVg* pVg = getVgInfo(tmq, topicName, vgId); + if(pVg){ + atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); + } + taosWUnLockLatch(&tmq->lock); +} + int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { SMqPollCbParam* pParam = (SMqPollCbParam*)param; int64_t refId = pParam->refId; @@ -1410,12 +1419,9 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { tmq->consumerId, rspType, vgId, total, requestId); END: - taosWLockLatch(&tmq->lock); - SMqClientVg* pVg = getVgInfo(tmq, pParam->topicName, vgId); - if(pVg){ - atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); + if(code != 0){ + setVgIdle(tmq, pParam->topicName, vgId); } - taosWUnLockLatch(&tmq->lock); tsem_post(&tmq->rspSem); taosReleaseRef(tmqMgmt.rsetId, refId); @@ -1839,6 +1845,9 @@ static void updateVgInfo(SMqClientVg* pVg, STqOffsetVal* reqOffset, STqOffsetVal tscDebug("consumer:0x%" PRIx64" local offset is NOT update, since seekupdate is set", consumerId); } + // update the status + atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); + // update the valid wal version range pVg->offsetInfo.walVerBegin = sver; pVg->offsetInfo.walVerEnd = ever + 1; @@ -1922,6 +1931,7 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { tmq->consumerId, pollRspWrapper->vgId, pDataRsp->head.epoch, consumerEpoch); pRspWrapper = tmqFreeRspWrapper(pRspWrapper); taosFreeQitem(pollRspWrapper); + setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); } } else if (pRspWrapper->tmqRspType == TMQ_MSG_TYPE__POLL_META_RSP) { // todo handle the wal range and epset for each vgroup @@ -1953,6 +1963,7 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { tmq->consumerId, pollRspWrapper->vgId, pollRspWrapper->metaRsp.head.epoch, consumerEpoch); pRspWrapper = tmqFreeRspWrapper(pRspWrapper); taosFreeQitem(pollRspWrapper); + setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); } } else if (pRspWrapper->tmqRspType == TMQ_MSG_TYPE__POLL_DATA_META_RSP) { SMqPollRspWrapper* pollRspWrapper = (SMqPollRspWrapper*)pRspWrapper; @@ -2010,6 +2021,7 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { tmq->consumerId, pollRspWrapper->vgId, pollRspWrapper->taosxRsp.head.epoch, consumerEpoch); pRspWrapper = tmqFreeRspWrapper(pRspWrapper); taosFreeQitem(pollRspWrapper); + setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); } } else { tscDebug("consumer:0x%" PRIx64 " not data msg received", tmq->consumerId); From 91275a065fdd215d70c211300bcd47f2209f62b6 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 4 Sep 2023 18:39:47 +0800 Subject: [PATCH 31/74] linux link --- source/os/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/os/CMakeLists.txt b/source/os/CMakeLists.txt index 14bcda857f..6438ce7ed0 100644 --- a/source/os/CMakeLists.txt +++ b/source/os/CMakeLists.txt @@ -40,11 +40,10 @@ target_link_libraries( os PUBLIC pthread PUBLIC zlibstatic - PUBLIC KtmW32 ) if(TD_WINDOWS) target_link_libraries( - os PUBLIC ws2_32 iconv msvcregex wcwidth winmm crashdump dbghelp version + os PUBLIC ws2_32 iconv msvcregex wcwidth winmm crashdump dbghelp version KtmW32 ) elseif(TD_DARWIN_64) find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation) From 53c4f4a147368c2351e63fc730b50145006471bb Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 5 Sep 2023 10:35:05 +0800 Subject: [PATCH 32/74] opti:commit logic --- source/client/src/clientTmq.c | 32 ++++++++++++-------------------- utils/test/c/tmqSim.c | 2 +- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index 0a64a02f20..0ec47a1cb3 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -442,7 +442,6 @@ static int32_t tmqCommitCb(void* param, SDataBuf* pBuf, int32_t code) { SMqCommitCbParam* pParam = (SMqCommitCbParam*)param; SMqCommitCbParamSet* pParamSet = (SMqCommitCbParamSet*)pParam->params; -// taosMemoryFree(pParam->pOffset); taosMemoryFree(pBuf->pData); taosMemoryFree(pBuf->pEpSet); @@ -513,14 +512,14 @@ static int32_t doSendCommitMsg(tmq_t* tmq, int32_t vgId, SEpSet* epSet, STqOffse pMsgSendInfo->fp = tmqCommitCb; pMsgSendInfo->msgType = TDMT_VND_TMQ_COMMIT_OFFSET; + int64_t transporterId = 0; + code = asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, epSet, &transporterId, pMsgSendInfo); + if(code != 0){ + return code; + } atomic_add_fetch_32(&pParamSet->waitingRspNum, 1); atomic_add_fetch_32(&pParamSet->totalRspNum, 1); - - SEp* pEp = GET_ACTIVE_EP(epSet); - - - int64_t transporterId = 0; - return asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, epSet, &transporterId, pMsgSendInfo); + return code; } static SMqClientTopic* getTopicByName(tmq_t* tmq, const char* pTopicName) { @@ -538,7 +537,7 @@ static SMqClientTopic* getTopicByName(tmq_t* tmq, const char* pTopicName) { return NULL; } -static SMqCommitCbParamSet* prepareCommitCbParamSet(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* userParam, int32_t rspNum){ +static SMqCommitCbParamSet* prepareCommitCbParamSet(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* userParam){ SMqCommitCbParamSet* pParamSet = taosMemoryCalloc(1, sizeof(SMqCommitCbParamSet)); if (pParamSet == NULL) { return NULL; @@ -548,13 +547,11 @@ static SMqCommitCbParamSet* prepareCommitCbParamSet(tmq_t* tmq, tmq_commit_cb* p pParamSet->epoch = tmq->epoch; pParamSet->callbackFn = pCommitFp; pParamSet->userParam = userParam; - pParamSet->waitingRspNum = rspNum; + pParamSet->waitingRspNum = 0; return pParamSet; } - - static int32_t getClientVg(tmq_t* tmq, char* pTopicName, int32_t vgId, SMqClientVg** pVg){ SMqClientTopic* pTopic = getTopicByName(tmq, pTopicName); if (pTopic == NULL) { @@ -575,11 +572,10 @@ static int32_t getClientVg(tmq_t* tmq, char* pTopicName, int32_t vgId, SMqClient } static int32_t asyncCommitOffset(tmq_t* tmq, char* pTopicName, int32_t vgId, STqOffsetVal* offsetVal, tmq_commit_cb* pCommitFp, void* userParam) { - int32_t code = 0; tscInfo("consumer:0x%" PRIx64 " do manual commit offset for %s, vgId:%d", tmq->consumerId, pTopicName, vgId); taosRLockLatch(&tmq->lock); SMqClientVg* pVg = NULL; - code = getClientVg(tmq, pTopicName, vgId, &pVg); + int32_t code = getClientVg(tmq, pTopicName, vgId, &pVg); if(code != 0){ goto end; } @@ -597,7 +593,7 @@ static int32_t asyncCommitOffset(tmq_t* tmq, char* pTopicName, int32_t vgId, STq char commitBuf[TSDB_OFFSET_LEN] = {0}; tFormatOffset(commitBuf, tListLen(commitBuf), &pVg->offsetInfo.committedOffset); - SMqCommitCbParamSet* pParamSet = prepareCommitCbParamSet(tmq, pCommitFp, userParam, 0); + SMqCommitCbParamSet* pParamSet = prepareCommitCbParamSet(tmq, pCommitFp, userParam); if (pParamSet == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto end; @@ -661,8 +657,7 @@ end: static void asyncCommitAllOffsets(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* userParam) { int32_t code = 0; - // init as 1 to prevent concurrency issue - SMqCommitCbParamSet* pParamSet = prepareCommitCbParamSet(tmq, pCommitFp, userParam, 1); + SMqCommitCbParamSet* pParamSet = prepareCommitCbParamSet(tmq, pCommitFp, userParam); if (pParamSet == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto end; @@ -709,10 +704,9 @@ static void asyncCommitAllOffsets(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* us // request is sent if (pParamSet->totalRspNum != 0) { - // count down since waiting rsp num init as 1 - commitRspCountDown(pParamSet, tmq->consumerId, "", 0); return; } + code = TSDB_CODE_TMQ_SAME_COMMITTED_VALUE; end: taosMemoryFree(pParamSet); @@ -2580,8 +2574,6 @@ int32_t tmqCommitDone(SMqCommitCbParamSet* pParamSet) { } taosMemoryFree(pParamSet); -// tmq->needReportOffsetRows = true; - taosReleaseRef(tmqMgmt.rsetId, refId); return 0; } diff --git a/utils/test/c/tmqSim.c b/utils/test/c/tmqSim.c index fbfacd9eda..6b774b3eff 100644 --- a/utils/test/c/tmqSim.c +++ b/utils/test/c/tmqSim.c @@ -696,7 +696,7 @@ static int32_t g_once_commit_flag = 0; static void tmq_commit_cb_print(tmq_t* tmq, int32_t code, void* param) { taosFprintfFile(g_fp, "tmq_commit_cb_print() commit %d\n", code); - if (0 == g_once_commit_flag) { + if (0 == g_once_commit_flag && code == 0) { g_once_commit_flag = 1; notifyMainScript((SThreadInfo*)param, (int32_t)NOTIFY_CMD_START_COMMIT); } From 087fd8289d062d55ce4f6800620dcfa06f3ce1db Mon Sep 17 00:00:00 2001 From: "chao.feng" Date: Tue, 5 Sep 2023 14:01:46 +0800 Subject: [PATCH 33/74] update test case tmqConsumerDiscontinuousData.py to fix the failed occationally by charles --- .../7-tmq/tmqConsumeDiscontinuousData.py | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/tests/system-test/7-tmq/tmqConsumeDiscontinuousData.py b/tests/system-test/7-tmq/tmqConsumeDiscontinuousData.py index 3dabca4cd1..dd2420dcfb 100644 --- a/tests/system-test/7-tmq/tmqConsumeDiscontinuousData.py +++ b/tests/system-test/7-tmq/tmqConsumeDiscontinuousData.py @@ -205,12 +205,21 @@ class TDTestCase: time.sleep(self.walRetentionPeriod + 1) tdLog.info("secondely call to flash database") tdSql.query("flush database %s"%(paraDict['dbName'])) - + # wait the consumer to complete one poll while (0 == self.retryPoll): time.sleep(1) continue - + + # write data again when consumer stopped to make sure some data aren't consumed + pInsertDataAgainThread = tmqCom.asyncInsertDataByInterlace(paraDict) + pInsertDataAgainThread.join() + tdLog.info("firstly call to flash database when writing data second time") + tdSql.query("flush database %s"%(paraDict['dbName'])) + time.sleep(self.walRetentionPeriod + 1) + tdLog.info("secondely call to flash database when writing data second time") + tdSql.query("flush database %s"%(paraDict['dbName'])) + with self.lock: self.retryPoll = 0 currentTime = datetime.now() @@ -218,15 +227,14 @@ class TDTestCase: paraDict["startTs"] = 1640966400000 + paraDict["ctbNum"] * paraDict["rowsPerTbl"] pThread3 = tmqCom.asyncInsertDataByInterlace(paraDict) - - + tdLog.debug("wait sub-thread to end insert data") pThread3.join() - - totalInsertRows = paraDict["ctbNum"] * paraDict["rowsPerTbl"] * 2 + + totalInsertRows = paraDict["ctbNum"] * paraDict["rowsPerTbl"] * 3 tdLog.debug("wait sub-thread to end consume data") pThread2.join() - + tdLog.info("act consume total rows: %d, act insert total rows: %d"%(self.actConsumeTotalRows, totalInsertRows)) if (self.actConsumeTotalRows >= totalInsertRows): From 4e46ce4c03bdccafc65646ac58d7744d4cf82d5c Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 5 Sep 2023 16:04:44 +0800 Subject: [PATCH 34/74] fix:wait pHandle idle if vnode receives subscribe msg --- source/dnode/vnode/src/tq/tq.c | 47 ++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/source/dnode/vnode/src/tq/tq.c b/source/dnode/vnode/src/tq/tq.c index b99f54642e..74b1dcec00 100644 --- a/source/dnode/vnode/src/tq/tq.c +++ b/source/dnode/vnode/src/tq/tq.c @@ -269,19 +269,21 @@ int32_t tqProcessSeekReq(STQ* pTq, SRpcMsg* pMsg) { } tqDebug("tmq seek: consumer:0x%" PRIx64 " vgId:%d, subkey %s", req.consumerId, vgId, req.subKey); + taosWLockLatch(&pTq->lock); + STqHandle* pHandle = taosHashGet(pTq->pHandle, req.subKey, strlen(req.subKey)); if (pHandle == NULL) { tqWarn("tmq seek: consumer:0x%" PRIx64 " vgId:%d subkey %s not found", req.consumerId, vgId, req.subKey); code = 0; + taosWUnLockLatch(&pTq->lock); goto end; } // 2. check consumer-vg assignment status - taosRLockLatch(&pTq->lock); if (pHandle->consumerId != req.consumerId) { tqError("ERROR tmq seek: consumer:0x%" PRIx64 " vgId:%d, subkey %s, mismatch for saved handle consumer:0x%" PRIx64, req.consumerId, vgId, req.subKey, pHandle->consumerId); - taosRUnLockLatch(&pTq->lock); + taosWUnLockLatch(&pTq->lock); code = TSDB_CODE_TMQ_CONSUMER_MISMATCH; goto end; } @@ -289,7 +291,7 @@ int32_t tqProcessSeekReq(STQ* pTq, SRpcMsg* pMsg) { // if consumer register to push manager, push empty to consumer to change vg status from TMQ_VG_STATUS__WAIT to // TMQ_VG_STATUS__IDLE, otherwise poll data failed after seek. tqUnregisterPushHandle(pTq, pHandle); - taosRUnLockLatch(&pTq->lock); + taosWUnLockLatch(&pTq->lock); end: rsp.code = code; @@ -496,15 +498,16 @@ int32_t tqProcessVgWalInfoReq(STQ* pTq, SRpcMsg* pMsg) { int32_t vgId = TD_VID(pTq->pVnode); // 1. find handle + taosRLockLatch(&pTq->lock); STqHandle* pHandle = taosHashGet(pTq->pHandle, req.subKey, strlen(req.subKey)); if (pHandle == NULL) { tqError("consumer:0x%" PRIx64 " vgId:%d subkey:%s not found", consumerId, vgId, req.subKey); terrno = TSDB_CODE_INVALID_MSG; + taosRUnLockLatch(&pTq->lock); return -1; } // 2. check re-balance status - taosRLockLatch(&pTq->lock); if (pHandle->consumerId != consumerId) { tqDebug("ERROR consumer:0x%" PRIx64 " vgId:%d, subkey %s, mismatch for saved handle consumer:0x%" PRIx64, consumerId, vgId, req.subKey, pHandle->consumerId); @@ -580,7 +583,7 @@ int32_t tqProcessDeleteSubReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg bool exec = tqIsHandleExec(pHandle); if(exec){ - tqInfo("vgId:%d, topic:%s, subscription is executing, wait for 10ms and retry, pHandle:%p", vgId, + tqInfo("vgId:%d, topic:%s, subscription is executing, delete wait for 10ms and retry, pHandle:%p", vgId, pHandle->subKey, pHandle); taosWUnLockLatch(&pTq->lock); taosMsleep(10); @@ -689,19 +692,29 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg } ret = tqMetaSaveHandle(pTq, req.subKey, &handle); } else { - taosWLockLatch(&pTq->lock); - - if (pHandle->consumerId == req.newConsumerId) { // do nothing - tqInfo("vgId:%d no switch consumer:0x%" PRIx64 " remains, because redo wal log", req.vgId, req.newConsumerId); - } else { - tqInfo("vgId:%d switch consumer from Id:0x%" PRIx64 " to Id:0x%" PRIx64, req.vgId, pHandle->consumerId, - req.newConsumerId); - atomic_store_64(&pHandle->consumerId, req.newConsumerId); - atomic_store_32(&pHandle->epoch, 0); - tqUnregisterPushHandle(pTq, pHandle); - ret = tqMetaSaveHandle(pTq, req.subKey, pHandle); + while(1){ + taosWLockLatch(&pTq->lock); + bool exec = tqIsHandleExec(pHandle); + if(exec){ + tqInfo("vgId:%d, topic:%s, subscription is executing, sub wait for 10ms and retry, pHandle:%p", pTq->pVnode->config.vgId, + pHandle->subKey, pHandle); + taosWUnLockLatch(&pTq->lock); + taosMsleep(10); + continue; + } + if (pHandle->consumerId == req.newConsumerId) { // do nothing + tqInfo("vgId:%d no switch consumer:0x%" PRIx64 " remains, because redo wal log", req.vgId, req.newConsumerId); + } else { + tqInfo("vgId:%d switch consumer from Id:0x%" PRIx64 " to Id:0x%" PRIx64, req.vgId, pHandle->consumerId, + req.newConsumerId); + atomic_store_64(&pHandle->consumerId, req.newConsumerId); + atomic_store_32(&pHandle->epoch, 0); + tqUnregisterPushHandle(pTq, pHandle); + ret = tqMetaSaveHandle(pTq, req.subKey, pHandle); + } + taosWUnLockLatch(&pTq->lock); + break; } - taosWUnLockLatch(&pTq->lock); } end: From 1716579081dfb18524edc99bcd8382338fa45e08 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 5 Sep 2023 16:13:59 +0800 Subject: [PATCH 35/74] fix:return TSDB_CODE_PAR_VALUE_TOO_LONG if data value is longer than bytes --- source/common/src/tdataformat.c | 4 ++-- source/libs/parser/src/parInsertUtil.c | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/source/common/src/tdataformat.c b/source/common/src/tdataformat.c index 7b8f0e67fb..f05f7dc3f9 100644 --- a/source/common/src/tdataformat.c +++ b/source/common/src/tdataformat.c @@ -2460,10 +2460,10 @@ int32_t tColDataAddValueByDataBlock(SColData *pColData, int8_t type, int32_t byt code = tColDataAppendValueImpl[pColData->flag][CV_FLAG_NULL](pColData, NULL, 0); if (code) goto _exit; } else { - if (ASSERT(varDataTLen(data + offset) <= bytes)) { + if (varDataTLen(data + offset) > bytes) { uError("var data length invalid, varDataTLen(data + offset):%d <= bytes:%d", (int)varDataTLen(data + offset), bytes); - code = TSDB_CODE_INVALID_PARA; + code = TSDB_CODE_PAR_VALUE_TOO_LONG; goto _exit; } code = tColDataAppendValueImpl[pColData->flag][CV_FLAG_VALUE](pColData, (uint8_t *)varDataVal(data + offset), diff --git a/source/libs/parser/src/parInsertUtil.c b/source/libs/parser/src/parInsertUtil.c index 5ae2cf12c9..79e305989b 100644 --- a/source/libs/parser/src/parInsertUtil.c +++ b/source/libs/parser/src/parInsertUtil.c @@ -683,8 +683,10 @@ int rawBlockBindData(SQuery* query, STableMeta* pTableMeta, void* data, SVCreate pStart += BitmapLen(numOfRows); } char* pData = pStart; - - tColDataAddValueByDataBlock(pCol, pColSchema->type, pColSchema->bytes, numOfRows, offset, pData); + ret = tColDataAddValueByDataBlock(pCol, pColSchema->type, pColSchema->bytes, numOfRows, offset, pData); + if(ret != 0){ + goto end; + } fields += sizeof(int8_t) + sizeof(int32_t); if (needChangeLength) { pStart += htonl(colLength[j]); @@ -712,7 +714,10 @@ int rawBlockBindData(SQuery* query, STableMeta* pTableMeta, void* data, SVCreate char* pData = pStart; SColData* pCol = taosArrayGet(pTableCxt->pData->aCol, j); - tColDataAddValueByDataBlock(pCol, pColSchema->type, pColSchema->bytes, numOfRows, offset, pData); + ret = tColDataAddValueByDataBlock(pCol, pColSchema->type, pColSchema->bytes, numOfRows, offset, pData); + if(ret != 0){ + goto end; + } fields += sizeof(int8_t) + sizeof(int32_t); if (needChangeLength) { pStart += htonl(colLength[i]); @@ -729,7 +734,10 @@ int rawBlockBindData(SQuery* query, STableMeta* pTableMeta, void* data, SVCreate for (int c = 0; c < boundInfo->numOfBound; ++c) { if( boundInfo->pColIndex[c] != -1){ SColData* pCol = taosArrayGet(pTableCxt->pData->aCol, c); - tColDataAddValueByDataBlock(pCol, 0, 0, numOfRows, NULL, NULL); + ret = tColDataAddValueByDataBlock(pCol, 0, 0, numOfRows, NULL, NULL); + if(ret != 0){ + goto end; + } }else{ boundInfo->pColIndex[c] = c; // restore for next block } From 0e9adcd57383e3d296ca48ea730bb708fde54dfc Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 5 Sep 2023 16:45:19 +0800 Subject: [PATCH 36/74] fix:add error code 0x4012 to ignore list --- tests/pytest/auto_crash_gen.py | 4 ++-- tests/pytest/auto_crash_gen_valgrind.py | 4 ++-- tests/pytest/auto_crash_gen_valgrind_cluster.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/pytest/auto_crash_gen.py b/tests/pytest/auto_crash_gen.py index 00e1786399..343cbd72c3 100755 --- a/tests/pytest/auto_crash_gen.py +++ b/tests/pytest/auto_crash_gen.py @@ -219,11 +219,11 @@ def get_auto_mix_cmds(args_list ,valgrind=valgrind_mode): if valgrind : - crash_gen_cmd = 'cd %s && ./crash_gen.sh --valgrind %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0203 '%(crash_gen_path ,arguments) + crash_gen_cmd = 'cd %s && ./crash_gen.sh --valgrind %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0203,0x4012 '%(crash_gen_path ,arguments) else: - crash_gen_cmd = 'cd %s && ./crash_gen.sh %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0203'%(crash_gen_path ,arguments) + crash_gen_cmd = 'cd %s && ./crash_gen.sh %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0203,0x4012'%(crash_gen_path ,arguments) return crash_gen_cmd diff --git a/tests/pytest/auto_crash_gen_valgrind.py b/tests/pytest/auto_crash_gen_valgrind.py index e37cda0a27..29d9d61732 100755 --- a/tests/pytest/auto_crash_gen_valgrind.py +++ b/tests/pytest/auto_crash_gen_valgrind.py @@ -220,11 +220,11 @@ def get_auto_mix_cmds(args_list ,valgrind=valgrind_mode): if valgrind : - crash_gen_cmd = 'cd %s && ./crash_gen.sh --valgrind %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0203 '%(crash_gen_path ,arguments) + crash_gen_cmd = 'cd %s && ./crash_gen.sh --valgrind %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0203,0x4012 '%(crash_gen_path ,arguments) else: - crash_gen_cmd = 'cd %s && ./crash_gen.sh %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0203'%(crash_gen_path ,arguments) + crash_gen_cmd = 'cd %s && ./crash_gen.sh %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0203,0x4012'%(crash_gen_path ,arguments) return crash_gen_cmd diff --git a/tests/pytest/auto_crash_gen_valgrind_cluster.py b/tests/pytest/auto_crash_gen_valgrind_cluster.py index af19836a83..8546d436de 100755 --- a/tests/pytest/auto_crash_gen_valgrind_cluster.py +++ b/tests/pytest/auto_crash_gen_valgrind_cluster.py @@ -220,11 +220,11 @@ def get_auto_mix_cmds(args_list ,valgrind=valgrind_mode): if valgrind : - crash_gen_cmd = 'cd %s && ./crash_gen.sh --valgrind -i 3 %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0707,0x0203 '%(crash_gen_path ,arguments) + crash_gen_cmd = 'cd %s && ./crash_gen.sh --valgrind -i 3 %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0707,0x0203,0x4012 '%(crash_gen_path ,arguments) else: - crash_gen_cmd = 'cd %s && ./crash_gen.sh -i 3 %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0014,0x0707,0x0203'%(crash_gen_path ,arguments) + crash_gen_cmd = 'cd %s && ./crash_gen.sh -i 3 %s -g 0x32c,0x32d,0x3d3,0x18,0x2501,0x369,0x388,0x061a,0x2550,0x0014,0x0707,0x0203,0x4012'%(crash_gen_path ,arguments) return crash_gen_cmd From 0b077a89a7b2d29b0e0eb35a3b6597ea4398ca21 Mon Sep 17 00:00:00 2001 From: Benguang Zhao Date: Tue, 5 Sep 2023 18:24:48 +0800 Subject: [PATCH 37/74] fix: break potential infinite loop in tfsMkdirRecurAt --- source/libs/tfs/src/tfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index 445c24159f..f2b45c5b84 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -296,7 +296,7 @@ int32_t tfsMkdirRecurAt(STfs *pTfs, const char *rname, SDiskID diskId) { // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dirname.3.html char *dir = taosStrdup(taosDirName(s)); - if (tfsMkdirRecurAt(pTfs, dir, diskId) < 0) { + if (strlen(dir) >= strlen(rname) || tfsMkdirRecurAt(pTfs, dir, diskId) < 0) { taosMemoryFree(s); taosMemoryFree(dir); return -1; From 4db2f9972155286a538d178fd541ed3961f9732d Mon Sep 17 00:00:00 2001 From: danielclow <106956386+danielclow@users.noreply.github.com> Date: Wed, 6 Sep 2023 09:50:28 +0800 Subject: [PATCH 38/74] docs: fix links to removed page (#22761) --- docs/zh/14-reference/05-taosbenchmark.md | 2 +- docs/zh/14-reference/14-taosKeeper.md | 2 +- docs/zh/20-third-party/11-kafka.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/zh/14-reference/05-taosbenchmark.md b/docs/zh/14-reference/05-taosbenchmark.md index d5ae95b20b..cc9f467138 100644 --- a/docs/zh/14-reference/05-taosbenchmark.md +++ b/docs/zh/14-reference/05-taosbenchmark.md @@ -13,7 +13,7 @@ taosBenchmark (曾用名 taosdemo ) 是一个用于测试 TDengine 产品性能 taosBenchmark 有两种安装方式: -- 安装 TDengine 官方安装包的同时会自动安装 taosBenchmark, 详情请参考[ TDengine 安装](../../operation/pkg-install)。 +- 安装 TDengine 官方安装包的同时会自动安装 taosBenchmark, 详情请参考[ TDengine 安装](../../get-started/)。 - 单独编译 taos-tools 并安装, 详情请参考 [taos-tools](https://github.com/taosdata/taos-tools) 仓库。 diff --git a/docs/zh/14-reference/14-taosKeeper.md b/docs/zh/14-reference/14-taosKeeper.md index 738d351d45..92c85e7a2c 100644 --- a/docs/zh/14-reference/14-taosKeeper.md +++ b/docs/zh/14-reference/14-taosKeeper.md @@ -16,7 +16,7 @@ taosKeeper 是 TDengine 3.0 版本监控指标的导出工具,通过简单的 taosKeeper 有两种安装方式: taosKeeper 安装方式: -- 安装 TDengine 官方安装包的同时会自动安装 taosKeeper, 详情请参考[ TDengine 安装](../../operation/pkg-install)。 +- 安装 TDengine 官方安装包的同时会自动安装 taosKeeper, 详情请参考[ TDengine 安装](../../get-started/)。 - 单独编译 taosKeeper 并安装,详情请参考 [taosKeeper](https://github.com/taosdata/taoskeeper) 仓库。 diff --git a/docs/zh/20-third-party/11-kafka.md b/docs/zh/20-third-party/11-kafka.md index 2f09e50f0b..3d8822fdae 100644 --- a/docs/zh/20-third-party/11-kafka.md +++ b/docs/zh/20-third-party/11-kafka.md @@ -23,7 +23,7 @@ TDengine Source Connector 用于把数据实时地从 TDengine 读出来发送 1. Linux 操作系统 2. 已安装 Java 8 和 Maven 3. 已安装 Git、curl、vi -4. 已安装并启动 TDengine。如果还没有可参考[安装和卸载](../../operation/pkg-install) +4. 已安装并启动 TDengine。如果还没有可参考[安装和卸载](../../get-started/) ## 安装 Kafka From 897fd5b8b5f0fe2b4ef01809b16cd179c95960d3 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 6 Sep 2023 10:15:41 +0800 Subject: [PATCH 39/74] fix:tmq close error because of same committed offset --- source/client/src/clientTmq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index 0ec47a1cb3..3969a68fd1 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -982,7 +982,7 @@ int32_t tmq_unsubscribe(tmq_t* tmq) { } if (tmq->autoCommit) { int32_t rsp = tmq_commit_sync(tmq, NULL); - if (rsp != 0) { + if (rsp != 0 && rsp != TSDB_CODE_TMQ_SAME_COMMITTED_VALUE) { return rsp; } } @@ -2122,7 +2122,7 @@ int32_t tmq_consumer_close(tmq_t* tmq) { // if auto commit is set, commit before close consumer. Otherwise, do nothing. if (tmq->autoCommit) { int32_t rsp = tmq_commit_sync(tmq, NULL); - if (rsp != 0) { + if (rsp != 0 && rsp != TSDB_CODE_TMQ_SAME_COMMITTED_VALUE) { return rsp; } } From f17e8493d47cc589c18780ae0bb0260f73bac5dd Mon Sep 17 00:00:00 2001 From: wade zhang <95411902+gccgdb1234@users.noreply.github.com> Date: Wed, 6 Sep 2023 13:37:54 +0800 Subject: [PATCH 40/74] Update 14-java.mdx --- docs/zh/08-connector/14-java.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/zh/08-connector/14-java.mdx b/docs/zh/08-connector/14-java.mdx index 0ff00d1710..64e9a3daed 100644 --- a/docs/zh/08-connector/14-java.mdx +++ b/docs/zh/08-connector/14-java.mdx @@ -1004,7 +1004,7 @@ TaosConsumer consumer = new TaosConsumer<>(config); - httpConnectTimeout: 创建连接超时参数,单位 ms,默认为 5000 ms。仅在 WebSocket 连接下有效。 - messageWaitTimeout: 数据传输超时参数,单位 ms,默认为 10000 ms。仅在 WebSocket 连接下有效。 - httpPoolSize: 同一个连接下最大并行请求数。仅在 WebSocket 连接下有效。 - 其他参数请参考:[Consumer 参数列表](../../../develop/tmq#创建-consumer-以及consumer-group) + 其他参数请参考:[Consumer 参数列表](../../develop/tmq#创建-consumer-以及consumer-group) #### 订阅消费数据 @@ -1082,7 +1082,7 @@ consumer.unsubscribe(); consumer.close() ``` -详情请参考:[数据订阅](../../../develop/tmq) +详情请参考:[数据订阅](../../develop/tmq) #### 完整示例 @@ -1373,7 +1373,7 @@ public static void main(String[] args) throws Exception { **解决方法**: 更换 taos-jdbcdriver 3.0.2+ 版本。 -其它问题请参考 [FAQ](../../../train-faq/faq) +其它问题请参考 [FAQ](../../train-faq/faq) ## API 参考 From 4428dd326a9e0b002d91a0e9e74eabbcde7b4b00 Mon Sep 17 00:00:00 2001 From: wade zhang <95411902+gccgdb1234@users.noreply.github.com> Date: Wed, 6 Sep 2023 13:39:09 +0800 Subject: [PATCH 41/74] Update 26-rust.mdx --- docs/zh/08-connector/26-rust.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/zh/08-connector/26-rust.mdx b/docs/zh/08-connector/26-rust.mdx index 3e51aa72bb..018552117e 100644 --- a/docs/zh/08-connector/26-rust.mdx +++ b/docs/zh/08-connector/26-rust.mdx @@ -352,7 +352,7 @@ client.put(&sml_data)? ### 数据订阅 -TDengine 通过消息队列 [TMQ](../../../taos-sql/tmq/) 启动一个订阅。 +TDengine 通过消息队列 [TMQ](../../taos-sql/tmq/) 启动一个订阅。 #### 创建 Topic @@ -491,7 +491,7 @@ let taos = pool.get()?; ## 常见问题 -请参考 [FAQ](../../../train-faq/faq) +请参考 [FAQ](../../train-faq/faq) ## API 参考 From eef4800c826b6ae97502070381472d1d2784e671 Mon Sep 17 00:00:00 2001 From: sunpeng Date: Wed, 6 Sep 2023 14:27:18 +0800 Subject: [PATCH 42/74] fix: special taos-ws-py version in py test --- tests/docs-examples-test/python.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/docs-examples-test/python.sh b/tests/docs-examples-test/python.sh index 2a44ee7552..5de7261e02 100644 --- a/tests/docs-examples-test/python.sh +++ b/tests/docs-examples-test/python.sh @@ -86,7 +86,7 @@ pip3 install kafka-python python3 kafka_example_consumer.py # 21 -pip3 install taos-ws-py +pip3 install taos-ws-py==0.2.6 python3 conn_websocket_pandas.py # 22 From cc62961337e692be232988eb57d6cddbfeff840e Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 6 Sep 2023 14:45:07 +0800 Subject: [PATCH 43/74] fix:heap use after free of pParamSet since the first commitCb is called before send another commit message --- source/client/src/clientTmq.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index 3969a68fd1..d76aa2456e 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -234,7 +234,6 @@ typedef struct { int64_t refId; int32_t epoch; int32_t waitingRspNum; - int32_t totalRspNum; int32_t code; tmq_commit_cb* callbackFn; /*SArray* successfulOffsets;*/ @@ -513,12 +512,12 @@ static int32_t doSendCommitMsg(tmq_t* tmq, int32_t vgId, SEpSet* epSet, STqOffse pMsgSendInfo->msgType = TDMT_VND_TMQ_COMMIT_OFFSET; int64_t transporterId = 0; + atomic_add_fetch_32(&pParamSet->waitingRspNum, 1); code = asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, epSet, &transporterId, pMsgSendInfo); if(code != 0){ + atomic_sub_fetch_32(&pParamSet->waitingRspNum, 1); return code; } - atomic_add_fetch_32(&pParamSet->waitingRspNum, 1); - atomic_add_fetch_32(&pParamSet->totalRspNum, 1); return code; } @@ -537,7 +536,7 @@ static SMqClientTopic* getTopicByName(tmq_t* tmq, const char* pTopicName) { return NULL; } -static SMqCommitCbParamSet* prepareCommitCbParamSet(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* userParam){ +static SMqCommitCbParamSet* prepareCommitCbParamSet(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* userParam, int32_t rspNum){ SMqCommitCbParamSet* pParamSet = taosMemoryCalloc(1, sizeof(SMqCommitCbParamSet)); if (pParamSet == NULL) { return NULL; @@ -547,7 +546,7 @@ static SMqCommitCbParamSet* prepareCommitCbParamSet(tmq_t* tmq, tmq_commit_cb* p pParamSet->epoch = tmq->epoch; pParamSet->callbackFn = pCommitFp; pParamSet->userParam = userParam; - pParamSet->waitingRspNum = 0; + pParamSet->waitingRspNum = rspNum; return pParamSet; } @@ -593,7 +592,7 @@ static int32_t asyncCommitOffset(tmq_t* tmq, char* pTopicName, int32_t vgId, STq char commitBuf[TSDB_OFFSET_LEN] = {0}; tFormatOffset(commitBuf, tListLen(commitBuf), &pVg->offsetInfo.committedOffset); - SMqCommitCbParamSet* pParamSet = prepareCommitCbParamSet(tmq, pCommitFp, userParam); + SMqCommitCbParamSet* pParamSet = prepareCommitCbParamSet(tmq, pCommitFp, userParam, 0); if (pParamSet == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto end; @@ -657,7 +656,8 @@ end: static void asyncCommitAllOffsets(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* userParam) { int32_t code = 0; - SMqCommitCbParamSet* pParamSet = prepareCommitCbParamSet(tmq, pCommitFp, userParam); + // init as 1 to prevent concurrency issue + SMqCommitCbParamSet* pParamSet = prepareCommitCbParamSet(tmq, pCommitFp, userParam, 1); if (pParamSet == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto end; @@ -703,7 +703,9 @@ static void asyncCommitAllOffsets(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* us tscInfo("consumer:0x%" PRIx64 " total commit:%d for %d topics", tmq->consumerId, pParamSet->waitingRspNum - 1, numOfTopics); // request is sent - if (pParamSet->totalRspNum != 0) { + if (pParamSet->waitingRspNum != 1) { + // count down since waiting rsp num init as 1 + commitRspCountDown(pParamSet, tmq->consumerId, "", 0); return; } code = TSDB_CODE_TMQ_SAME_COMMITTED_VALUE; @@ -3005,7 +3007,12 @@ int32_t tmq_get_topic_assignment(tmq_t* tmq, const char* pTopicName, tmq_topic_a tscInfo("consumer:0x%" PRIx64 " %s retrieve wal info vgId:%d, epoch %d, req:%s, reqId:0x%" PRIx64, tmq->consumerId, pTopic->topicName, pClientVg->vgId, tmq->epoch, offsetFormatBuf, req.reqId); - asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, &pClientVg->epSet, &transporterId, sendInfo); + code = asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, &pClientVg->epSet, &transporterId, sendInfo); + if(code != 0){ + taosMemoryFree(pParam); + taosMemoryFree(msg); + goto end; + } } tsem_wait(&pCommon->rsp); From d7caed1c44b46292a637c9a02ade78bde551ea56 Mon Sep 17 00:00:00 2001 From: liuyao <54liuyao@163.com> Date: Wed, 6 Sep 2023 16:34:25 +0800 Subject: [PATCH 44/74] opt stream state --- include/libs/stream/streamState.h | 48 ------------------- .../executor/src/streamtimewindowoperator.c | 8 +++- source/libs/stream/src/streamState.c | 2 +- source/libs/stream/src/tstreamFileState.c | 12 ++++- 4 files changed, 18 insertions(+), 52 deletions(-) diff --git a/include/libs/stream/streamState.h b/include/libs/stream/streamState.h index 7747df8595..4312da6f2c 100644 --- a/include/libs/stream/streamState.h +++ b/include/libs/stream/streamState.h @@ -29,54 +29,6 @@ extern "C" { #include "storageapi.h" -// void* streamBackendInit(const char* path); -// void streamBackendCleanup(void* arg); -// SListNode* streamBackendAddCompare(void* backend, void* arg); -// void streamBackendDelCompare(void* backend, void* arg); - -// <<<<<<< HEAD -// typedef struct STdbState { -// rocksdb_t* rocksdb; -// rocksdb_column_family_handle_t** pHandle; -// rocksdb_writeoptions_t* writeOpts; -// rocksdb_readoptions_t* readOpts; -// rocksdb_options_t** cfOpts; -// rocksdb_options_t* dbOpt; -// struct SStreamTask* pOwner; -// void* param; -// void* env; -// SListNode* pComparNode; -// void* pBackend; -// char idstr[64]; -// void* compactFactory; -// TdThreadRwlock rwLock; -// ======= -// typedef struct STdbState { -// rocksdb_t* rocksdb; -// rocksdb_column_family_handle_t** pHandle; -// rocksdb_writeoptions_t* writeOpts; -// rocksdb_readoptions_t* readOpts; -// rocksdb_options_t** cfOpts; -// rocksdb_options_t* dbOpt; -// struct SStreamTask* pOwner; -// void* param; -// void* env; -// SListNode* pComparNode; -// void* pBackendHandle; -// char idstr[64]; -// void* compactFactory; -// -// TDB* db; -// TTB* pStateDb; -// TTB* pFuncStateDb; -// TTB* pFillStateDb; // todo refactor -// TTB* pSessionStateDb; -// TTB* pParNameDb; -// TTB* pParTagDb; -// TXN* txn; -//} STdbState; -//>>>>>>> enh/dev3.0 - SStreamState* streamStateOpen(char* path, void* pTask, bool specPath, int32_t szPage, int32_t pages); void streamStateClose(SStreamState* pState, bool remove); int32_t streamStateBegin(SStreamState* pState); diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index c0e2a44153..1c909cb47d 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -786,6 +786,8 @@ static void doStreamIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDat if (startPos < 0) { break; } + qDebug("===stream===ignore expired data, window end ts:%" PRId64 ", maxts - wartermak:%" PRId64, nextWin.ekey, + pInfo->twAggSup.maxTs - pInfo->twAggSup.waterMark); continue; } @@ -1552,6 +1554,7 @@ void destroyStreamSessionAggOperatorInfo(void* param) { tSimpleHashCleanup(pInfo->pStUpdated); tSimpleHashCleanup(pInfo->pStDeleted); pInfo->pUpdated = taosArrayDestroy(pInfo->pUpdated); + cleanupGroupResInfo(&pInfo->groupResInfo); taosArrayDestroy(pInfo->historyWins); blockDataDestroy(pInfo->pCheckpointRes); @@ -2197,6 +2200,7 @@ void initGroupResInfoFromArrayList(SGroupResInfo* pGroupResInfo, SArray* pArrayL pGroupResInfo->pRows = pArrayList; pGroupResInfo->index = 0; pGroupResInfo->pBuf = NULL; + pGroupResInfo->freeItem = false; } void doBuildSessionResult(SOperatorInfo* pOperator, void* pState, SGroupResInfo* pGroupResInfo, SSDataBlock* pBlock) { @@ -2874,10 +2878,12 @@ void destroyStreamStateOperatorInfo(void* param) { } colDataDestroy(&pInfo->twAggSup.timeWindowData); blockDataDestroy(pInfo->pDelRes); - taosArrayDestroy(pInfo->historyWins); tSimpleHashCleanup(pInfo->pSeUpdated); tSimpleHashCleanup(pInfo->pSeDeleted); pInfo->pUpdated = taosArrayDestroy(pInfo->pUpdated); + cleanupGroupResInfo(&pInfo->groupResInfo); + + taosArrayDestroy(pInfo->historyWins); blockDataDestroy(pInfo->pCheckpointRes); taosMemoryFreeClear(param); diff --git a/source/libs/stream/src/streamState.c b/source/libs/stream/src/streamState.c index 83aed42fe2..44c7b4f2e0 100644 --- a/source/libs/stream/src/streamState.c +++ b/source/libs/stream/src/streamState.c @@ -345,7 +345,7 @@ bool streamStateCheck(SStreamState* pState, const SWinKey* key) { return hasRowBuff(pState->pFileState, (void*)key, sizeof(SWinKey)); #else SStateKey sKey = {.key = *key, .opNum = pState->number}; - return tdbTbGet(pState->pTdbState->pStateDb, &sKey, sizeof(SStateKey), pVal, pVLen); + return tdbTbGet(pState->pTdbState->pStateDb, &sKey, sizeof(SStateKey), NULL, NULL); #endif } diff --git a/source/libs/stream/src/tstreamFileState.c b/source/libs/stream/src/tstreamFileState.c index bca9dcabda..be3ad73472 100644 --- a/source/libs/stream/src/tstreamFileState.c +++ b/source/libs/stream/src/tstreamFileState.c @@ -25,7 +25,8 @@ #define FLUSH_RATIO 0.5 #define FLUSH_NUM 4 -#define DEFAULT_MAX_STREAM_BUFFER_SIZE (128 * 1024 * 1024); +#define DEFAULT_MAX_STREAM_BUFFER_SIZE (128 * 1024 * 1024) +#define MIN_NUM_OF_ROW_BUFF 10240 struct SStreamFileState { SList* usedBuffs; @@ -67,7 +68,7 @@ SStreamFileState* streamFileStateInit(int64_t memSize, uint32_t keySize, uint32_ pFileState->usedBuffs = tdListNew(POINTER_BYTES); pFileState->freeBuffs = tdListNew(POINTER_BYTES); _hash_fn_t hashFn = taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY); - int32_t cap = TMIN(10240, pFileState->maxRowCount); + int32_t cap = TMIN(MIN_NUM_OF_ROW_BUFF, pFileState->maxRowCount); pFileState->rowBuffMap = tSimpleHashInit(cap, hashFn); if (!pFileState->usedBuffs || !pFileState->freeBuffs || !pFileState->rowBuffMap) { goto _error; @@ -272,10 +273,12 @@ int32_t getRowBuff(SStreamFileState* pFileState, void* pKey, int32_t keyLen, voi *pVLen = pFileState->rowSize; *pVal = *pos; (*pos)->beUsed = true; + (*pos)->beFlushed = false; return TSDB_CODE_SUCCESS; } SRowBuffPos* pNewPos = getNewRowPos(pFileState); pNewPos->beUsed = true; + pNewPos->beFlushed = false; ASSERT(pNewPos->pRowBuff); memcpy(pNewPos->pKey, pKey, keyLen); @@ -375,6 +378,10 @@ int32_t flushSnapshot(SStreamFileState* pFileState, SStreamSnapshot* pSnapshot, while ((pNode = tdListNext(&iter)) != NULL && code == TSDB_CODE_SUCCESS) { SRowBuffPos* pPos = *(SRowBuffPos**)pNode->data; ASSERT(pPos->pRowBuff && pFileState->rowSize > 0); + if (pPos->beFlushed) { + continue; + } + pPos->beFlushed = true; if (streamStateGetBatchSize(batch) >= BATCH_LIMIT) { streamStatePutBatch_rocksdb(pFileState->pFileStore, batch); @@ -513,6 +520,7 @@ int32_t recoverSnapshot(SStreamFileState* pFileState, int64_t ckId) { ASSERT(pVLen == pFileState->rowSize); memcpy(pNewPos->pRowBuff, pVal, pVLen); taosMemoryFreeClear(pVal); + pNewPos->beFlushed = true; code = tSimpleHashPut(pFileState->rowBuffMap, pNewPos->pKey, pFileState->keyLen, &pNewPos, POINTER_BYTES); if (code != TSDB_CODE_SUCCESS) { destroyRowBuffPos(pNewPos); From 0be918a17e2cdc0f306de964e3cfa27455f2d418 Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Wed, 6 Sep 2023 17:15:04 +0800 Subject: [PATCH 45/74] test:modify method of stopall function --- tests/pytest/util/dnodes.py | 71 +++++++++++++++++++------------------ tests/system-test/test.py | 2 +- 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/tests/pytest/util/dnodes.py b/tests/pytest/util/dnodes.py index cd873ca0f2..c4fc1ce654 100644 --- a/tests/pytest/util/dnodes.py +++ b/tests/pytest/util/dnodes.py @@ -668,7 +668,7 @@ class TDDnodes: self.testCluster = False self.valgrind = 0 self.asan = False - self.killValgrind = 1 + self.killValgrind = 0 def init(self, path, remoteIP = ""): binPath = self.dnodes[0].getPath() + "/../../../" @@ -775,9 +775,41 @@ class TDDnodes: tdLog.info("execute finished") return + def killProcesser(self, processerName): + if platform.system().lower() == 'windows': + killCmd = ("wmic process where name=\"%s.exe\" call terminate > NUL 2>&1" % processerName) + psCmd = ("wmic process where name=\"%s.exe\" | findstr \"%s.exe\"" % (processerName, processerName)) + else: + killCmd = ( + "ps -ef|grep -w %s| grep -v grep | awk '{print $2}' | xargs kill -TERM > /dev/null 2>&1" + % processerName + ) + psCmd = ("ps -ef|grep -w %s| grep -v grep | awk '{print $2}'" % processerName) + + processID = "" + + try: + processID = subprocess.check_output(psCmd, shell=True) + while processID: + os.system(killCmd) + time.sleep(1) + try: + processID = subprocess.check_output(psCmd, shell=True) + except Exception as err: + processID = "" + tdLog.debug('**** kill pid warn: {err}') + except Exception as err: + processID = "" + tdLog.debug(f'**** find pid warn: {err}') + + + def stopAll(self): tdLog.info("stop all dnodes, asan:%d" % self.asan) - distro_id = distro.id() + if platform.system().lower() != 'windows': + distro_id = distro.id() + else: + distro_id = "not alpine" if self.asan and distro_id != "alpine": tdLog.info("execute script: %s" % self.stopDnodesPath) os.system(self.stopDnodesPath) @@ -792,7 +824,6 @@ class TDDnodes: if (distro_id == "alpine"): - print(distro_id) psCmd = "ps -ef | grep -w taosd | grep 'root' | grep -v grep| grep -v defunct | awk '{print $2}' | xargs" processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip() while(processID): @@ -803,36 +834,9 @@ class TDDnodes: processID = subprocess.check_output( psCmd, shell=True).decode("utf-8").strip() elif platform.system().lower() == 'windows': - psCmd = "for /f %a in ('wmic process where \"name='taosd.exe'\" get processId ^| xargs echo ^| awk '{print $2}' ^&^& echo aa') do @(ps | grep %a | awk '{print $1}' | xargs)" - processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip() - while(processID): - print(f"pid of taosd.exe:{processID}") - killCmd = "kill -9 %s > nul 2>&1" % processID - os.system(killCmd) - time.sleep(1) - processID = subprocess.check_output( - psCmd, shell=True).decode("utf-8").strip() - - psCmd = "for /f %a in ('wmic process where \"name='tmq_sim.exe'\" get processId ^| xargs echo ^| awk '{print $2}' ^&^& echo aa') do @(ps | grep %a | awk '{print $1}' | xargs)" - processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip() - while(processID): - print(f"pid of tmq_sim.exe:{processID}") - killCmd = "kill -9 %s > nul 2>&1" % processID - os.system(killCmd) - time.sleep(1) - processID = subprocess.check_output( - psCmd, shell=True).decode("utf-8").strip() - - psCmd = "for /f %a in ('wmic process where \"name='taosBenchmark.exe'\" get processId ^| xargs echo ^| awk '{print $2}' ^&^& echo aa') do @(ps | grep %a | awk '{print $1}' | xargs)" - processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip() - while(processID): - print(f"pid of taosBenchmark.exe:{processID}") - killCmd = "kill -9 %s > nul 2>&1" % processID - os.system(killCmd) - time.sleep(1) - processID = subprocess.check_output( - psCmd, shell=True).decode("utf-8").strip() - + self.killProcesser("taosd") + self.killProcesser("tmq_sim") + self.killProcesser("taosBenchmark") else: psCmd = "ps -ef | grep -w taosd | grep 'root' | grep -v grep| grep -v defunct | awk '{print $2}' | xargs" processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip() @@ -849,7 +853,6 @@ class TDDnodes: time.sleep(1) processID = subprocess.check_output( psCmd, shell=True).decode("utf-8").strip() - if self.killValgrind == 1: psCmd = "ps -ef|grep -w valgrind.bin| grep -v grep | awk '{print $2}' | xargs" processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip() diff --git a/tests/system-test/test.py b/tests/system-test/test.py index 1c50e5bbbe..b1625997b4 100644 --- a/tests/system-test/test.py +++ b/tests/system-test/test.py @@ -177,7 +177,7 @@ if __name__ == "__main__": sys.exit(0) if key in ['-k', '--killValgrind']: - killValgrind = 0 + killValgrind = 1 if key in ['-e', '--execCmd']: try: From 24140902cf2c634ec9fed744b0ef0d890792be32 Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Tue, 5 Sep 2023 18:17:25 +0800 Subject: [PATCH 46/74] test:replace clock_gettime in cases for win --- tests/system-test/0-others/splitVGroup.py | 2 +- tests/system-test/0-others/timeRangeWise.py | 2 +- tests/system-test/1-insert/precisionUS.py | 2 +- tests/system-test/2-query/orderBy.py | 2 +- tests/system-test/2-query/smaBasic.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/system-test/0-others/splitVGroup.py b/tests/system-test/0-others/splitVGroup.py index 9fd00892e4..ed80505ce2 100644 --- a/tests/system-test/0-others/splitVGroup.py +++ b/tests/system-test/0-others/splitVGroup.py @@ -198,7 +198,7 @@ class TDTestCase: # init def init(self, conn, logSql, replicaVar=1): - seed = time.clock_gettime(time.CLOCK_REALTIME) + seed = time.time() % 10000 random.seed(seed) self.replicaVar = int(replicaVar) tdLog.debug(f"start to excute {__file__}") diff --git a/tests/system-test/0-others/timeRangeWise.py b/tests/system-test/0-others/timeRangeWise.py index a7dc18aa82..5ef5aa4a75 100644 --- a/tests/system-test/0-others/timeRangeWise.py +++ b/tests/system-test/0-others/timeRangeWise.py @@ -210,7 +210,7 @@ class TDTestCase: # init def init(self, conn, logSql, replicaVar=1): - seed = time.clock_gettime(time.CLOCK_REALTIME) + seed = time.time() % 10000 random.seed(seed) self.replicaVar = int(replicaVar) tdLog.debug(f"start to excute {__file__}") diff --git a/tests/system-test/1-insert/precisionUS.py b/tests/system-test/1-insert/precisionUS.py index 1b41d66010..d634149297 100644 --- a/tests/system-test/1-insert/precisionUS.py +++ b/tests/system-test/1-insert/precisionUS.py @@ -220,7 +220,7 @@ class TDTestCase: # init def init(self, conn, logSql, replicaVar=1): - seed = time.clock_gettime(time.CLOCK_REALTIME) + seed = time.time() % 10000 random.seed(seed) self.replicaVar = int(replicaVar) tdLog.debug(f"start to excute {__file__}") diff --git a/tests/system-test/2-query/orderBy.py b/tests/system-test/2-query/orderBy.py index fed1651b3a..fa447cbca4 100644 --- a/tests/system-test/2-query/orderBy.py +++ b/tests/system-test/2-query/orderBy.py @@ -220,7 +220,7 @@ class TDTestCase: # init def init(self, conn, logSql, replicaVar=1): - seed = time.clock_gettime(time.CLOCK_REALTIME) + seed = time.time() % 10000 random.seed(seed) self.replicaVar = int(replicaVar) tdLog.debug(f"start to excute {__file__}") diff --git a/tests/system-test/2-query/smaBasic.py b/tests/system-test/2-query/smaBasic.py index c221a70605..a82d190e2b 100644 --- a/tests/system-test/2-query/smaBasic.py +++ b/tests/system-test/2-query/smaBasic.py @@ -269,7 +269,7 @@ class TDTestCase: # init def init(self, conn, logSql, replicaVar=1): - seed = time.clock_gettime(time.CLOCK_REALTIME) + seed = time.time() % 10000 random.seed(seed) self.replicaVar = int(replicaVar) tdLog.debug(f"start to excute {__file__}") From bec4691324edaa1e42cfc0ef5c5bf4c907f8da5a Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Wed, 6 Sep 2023 11:28:19 +0800 Subject: [PATCH 47/74] test: modify 5dnode3mnodeStop2Follower.py --- .../system-test/6-cluster/5dnode3mnodeStop2Follower.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py b/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py index e89df638d0..5aaf5b9b28 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py @@ -88,15 +88,15 @@ class TDTestCase: # restart all taosd tdDnodes=cluster.dnodes - tdDnodes[1].stoptaosd() + # tdDnodes[1].stoptaosd() tdDnodes[2].stoptaosd() - tdLog.info("check whether 2 mnode status is offline") - clusterComCheck.check3mnode2off() + tdLog.info("check whether 1 mnode status is offline") + clusterComCheck.check3mnodeoff(3) # tdSql.error("create user user1 pass '123';") - tdLog.info("start two follower") - tdDnodes[1].starttaosd() + tdLog.info("start follower") + # tdDnodes[1].starttaosd() tdDnodes[2].starttaosd() clusterComCheck.checkMnodeStatus(mnodeNums) From 629de12bb1cdf8c39295f2dee38c371a613e4b77 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 6 Sep 2023 18:29:28 +0800 Subject: [PATCH 48/74] fix:do not return error if commit nothing --- source/client/src/clientTmq.c | 132 ++++++++---------- tests/system-test/7-tmq/subscribeDb3.py | 4 +- .../tmqConsFromTsdb1-1ctb-funcNFilter.py | 2 +- .../7-tmq/tmqConsFromTsdb1-1ctb.py | 2 +- .../tmqConsFromTsdb1-mutilVg-mutilCtb.py | 2 +- .../7-tmq/tmqConsFromTsdb1-mutilVg.py | 2 +- tests/system-test/7-tmq/tmqConsFromTsdb1.py | 2 +- 7 files changed, 63 insertions(+), 83 deletions(-) diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index d76aa2456e..ed83e41427 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -190,7 +190,6 @@ typedef struct { typedef struct { int64_t refId; - int32_t epoch; void* pParam; __tmq_askep_fn_t pUserFn; } SMqAskEpCbParam; @@ -708,7 +707,6 @@ static void asyncCommitAllOffsets(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* us commitRspCountDown(pParamSet, tmq->consumerId, "", 0); return; } - code = TSDB_CODE_TMQ_SAME_COMMITTED_VALUE; end: taosMemoryFree(pParamSet); @@ -743,20 +741,6 @@ void tmqAssignDelayedCommitTask(void* param, void* tmrId) { taosMemoryFree(param); } -//void tmqAssignDelayedReportTask(void* param, void* tmrId) { -// int64_t refId = *(int64_t*)param; -// tmq_t* tmq = taosAcquireRef(tmqMgmt.rsetId, refId); -// if (tmq != NULL) { -// int8_t* pTaskType = taosAllocateQitem(sizeof(int8_t), DEF_QITEM, 0); -// *pTaskType = TMQ_DELAYED_TASK__REPORT; -// taosWriteQitem(tmq->delayedTask, pTaskType); -// tsem_post(&tmq->rspSem); -// } -// -// taosReleaseRef(tmqMgmt.rsetId, refId); -// taosMemoryFree(param); -//} - int32_t tmqHbCb(void* param, SDataBuf* pMsg, int32_t code) { if (pMsg) { taosMemoryFree(pMsg->pData); @@ -984,7 +968,7 @@ int32_t tmq_unsubscribe(tmq_t* tmq) { } if (tmq->autoCommit) { int32_t rsp = tmq_commit_sync(tmq, NULL); - if (rsp != 0 && rsp != TSDB_CODE_TMQ_SAME_COMMITTED_VALUE) { + if (rsp != 0) { return rsp; } } @@ -1085,7 +1069,6 @@ tmq_t* tmq_consumer_new(tmq_conf_t* conf, char* errstr, int32_t errstrLen) { pTmq->status = TMQ_CONSUMER_STATUS__INIT; pTmq->pollCnt = 0; pTmq->epoch = 0; -// pTmq->needReportOffsetRows = true; // set conf strcpy(pTmq->clientId, conf->clientId); @@ -1146,7 +1129,7 @@ _failed: } int32_t tmq_subscribe(tmq_t* tmq, const tmq_list_t* topic_list) { - if(tmq == NULL) return TSDB_CODE_INVALID_PARA; + if(tmq == NULL || topic_list == NULL) return TSDB_CODE_INVALID_PARA; const int32_t MAX_RETRY_COUNT = 120 * 2; // let's wait for 2 mins at most const SArray* container = &topic_list->container; int32_t sz = taosArrayGetSize(container); @@ -1222,7 +1205,10 @@ int32_t tmq_subscribe(tmq_t* tmq, const tmq_list_t* topic_list) { SEpSet epSet = getEpSet_s(&tmq->pTscObj->pAppInfo->mgmtEp); int64_t transporterId = 0; - asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, &epSet, &transporterId, sendInfo); + code = asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, &epSet, &transporterId, sendInfo); + if(code != 0){ + goto FAIL; + } // avoid double free if msg is sent buf = NULL; @@ -1239,7 +1225,7 @@ int32_t tmq_subscribe(tmq_t* tmq, const tmq_list_t* topic_list) { int32_t retryCnt = 0; while (TSDB_CODE_MND_CONSUMER_NOT_READY == doAskEp(tmq)) { if (retryCnt++ > MAX_RETRY_COUNT) { - tscError("consumer:0x%" PRIx64 ", mnd not ready for subscribe, retry:%d in 500ms", tmq->consumerId, retryCnt); + tscError("consumer:0x%" PRIx64 ", mnd not ready for subscribe, retry more than 2 minutes", tmq->consumerId); code = TSDB_CODE_MND_CONSUMER_NOT_READY; goto FAIL; } @@ -1512,10 +1498,9 @@ static bool doUpdateLocalEp(tmq_t* tmq, int32_t epoch, const SMqAskEpRsp* pRsp) taosWLockLatch(&tmq->lock); int32_t topicNumCur = taosArrayGetSize(tmq->clientTopics); - char vgKey[TSDB_TOPIC_FNAME_LEN + 22]; + char vgKey[TSDB_TOPIC_FNAME_LEN + 22] = {0}; tscInfo("consumer:0x%" PRIx64 " update ep epoch from %d to epoch %d, incoming topics:%d, existed topics:%d", tmq->consumerId, tmq->epoch, epoch, topicNumGet, topicNumCur); - // todo extract method for (int32_t i = 0; i < topicNumCur; i++) { // find old topic SMqClientTopic* pTopicCur = taosArrayGet(tmq->clientTopics, i); @@ -1566,32 +1551,17 @@ static bool doUpdateLocalEp(tmq_t* tmq, int32_t epoch, const SMqAskEpRsp* pRsp) int32_t askEpCallbackFn(void* param, SDataBuf* pMsg, int32_t code) { SMqAskEpCbParam* pParam = (SMqAskEpCbParam*)param; tmq_t* tmq = taosAcquireRef(tmqMgmt.rsetId, pParam->refId); - if (tmq == NULL) { - terrno = TSDB_CODE_TMQ_CONSUMER_CLOSED; -// pParam->pUserFn(tmq, terrno, NULL, pParam->pParam); - - taosMemoryFree(pMsg->pData); - taosMemoryFree(pMsg->pEpSet); - taosMemoryFree(pParam); - return terrno; + code = TSDB_CODE_TMQ_CONSUMER_CLOSED; + goto END; } if (code != TSDB_CODE_SUCCESS) { tscError("consumer:0x%" PRIx64 ", get topic endpoint error, code:%s", tmq->consumerId, tstrerror(code)); - pParam->pUserFn(tmq, code, NULL, pParam->pParam); - taosReleaseRef(tmqMgmt.rsetId, pParam->refId); - - taosMemoryFree(pMsg->pData); - taosMemoryFree(pMsg->pEpSet); - taosMemoryFree(pParam); - return code; + goto END; } - // tmq's epoch is monotonically increase, - // so it's safe to discard any old epoch msg. - // Epoch will only increase when received newer epoch ep msg SMqRspHead* head = pMsg->pData; int32_t epoch = atomic_load_32(&tmq->epoch); if (head->epoch <= epoch) { @@ -1610,10 +1580,10 @@ int32_t askEpCallbackFn(void* param, SDataBuf* pMsg, int32_t code) { tscInfo("consumer:0x%" PRIx64 ", recv ep, msg epoch %d, current epoch %d, update local ep", tmq->consumerId, head->epoch, epoch); } - - pParam->pUserFn(tmq, code, pMsg, pParam->pParam); taosReleaseRef(tmqMgmt.rsetId, pParam->refId); +END: + pParam->pUserFn(tmq, code, pMsg, pParam->pParam); taosMemoryFree(pMsg->pEpSet); taosMemoryFree(pMsg->pData); taosMemoryFree(pParam); @@ -1925,9 +1895,9 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { } else { tscInfo("consumer:0x%" PRIx64 " vgId:%d msg discard since epoch mismatch: msg epoch %d, consumer epoch %d", tmq->consumerId, pollRspWrapper->vgId, pDataRsp->head.epoch, consumerEpoch); + setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); pRspWrapper = tmqFreeRspWrapper(pRspWrapper); taosFreeQitem(pollRspWrapper); - setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); } } else if (pRspWrapper->tmqRspType == TMQ_MSG_TYPE__POLL_META_RSP) { // todo handle the wal range and epset for each vgroup @@ -1957,9 +1927,9 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { } else { tscInfo("consumer:0x%" PRIx64 " vgId:%d msg discard since epoch mismatch: msg epoch %d, consumer epoch %d", tmq->consumerId, pollRspWrapper->vgId, pollRspWrapper->metaRsp.head.epoch, consumerEpoch); + setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); pRspWrapper = tmqFreeRspWrapper(pRspWrapper); taosFreeQitem(pollRspWrapper); - setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); } } else if (pRspWrapper->tmqRspType == TMQ_MSG_TYPE__POLL_DATA_META_RSP) { SMqPollRspWrapper* pollRspWrapper = (SMqPollRspWrapper*)pRspWrapper; @@ -2015,9 +1985,9 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { } else { tscInfo("consumer:0x%" PRIx64 " vgId:%d msg discard since epoch mismatch: msg epoch %d, consumer epoch %d", tmq->consumerId, pollRspWrapper->vgId, pollRspWrapper->taosxRsp.head.epoch, consumerEpoch); + setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); pRspWrapper = tmqFreeRspWrapper(pRspWrapper); taosFreeQitem(pollRspWrapper); - setVgIdle(tmq, pollRspWrapper->topicName, pollRspWrapper->vgId); } } else { tscDebug("consumer:0x%" PRIx64 " not data msg received", tmq->consumerId); @@ -2124,7 +2094,7 @@ int32_t tmq_consumer_close(tmq_t* tmq) { // if auto commit is set, commit before close consumer. Otherwise, do nothing. if (tmq->autoCommit) { int32_t rsp = tmq_commit_sync(tmq, NULL); - if (rsp != 0 && rsp != TSDB_CODE_TMQ_SAME_COMMITTED_VALUE) { + if (rsp != 0) { return rsp; } } @@ -2440,23 +2410,29 @@ end: } } -void updateEpCallbackFn(tmq_t* pTmq, int32_t code, SDataBuf* pDataBuf, void* param) { +void defaultAskEpCb(tmq_t* pTmq, int32_t code, SDataBuf* pDataBuf, void* param) { SAskEpInfo* pInfo = param; pInfo->code = code; - if (code == TSDB_CODE_SUCCESS) { - SMqRspHead* head = pDataBuf->pData; - - SMqAskEpRsp rsp; - tDecodeSMqAskEpRsp(POINTER_SHIFT(pDataBuf->pData, sizeof(SMqRspHead)), &rsp); - doUpdateLocalEp(pTmq, head->epoch, &rsp); - tDeleteSMqAskEpRsp(&rsp); + if (pTmq == NULL || code != TSDB_CODE_SUCCESS){ + goto END; } + SMqRspHead* head = pDataBuf->pData; + SMqAskEpRsp rsp; + tDecodeSMqAskEpRsp(POINTER_SHIFT(pDataBuf->pData, sizeof(SMqRspHead)), &rsp); + doUpdateLocalEp(pTmq, head->epoch, &rsp); + tDeleteSMqAskEpRsp(&rsp); + +END: tsem_post(&pInfo->sem); } void addToQueueCallbackFn(tmq_t* pTmq, int32_t code, SDataBuf* pDataBuf, void* param) { + if (pTmq == NULL){ + terrno = TSDB_CODE_TMQ_CONSUMER_CLOSED; + return; + } if (code != TSDB_CODE_SUCCESS) { terrno = code; return; @@ -2482,7 +2458,7 @@ int32_t doAskEp(tmq_t* pTmq) { SAskEpInfo* pInfo = taosMemoryMalloc(sizeof(SAskEpInfo)); tsem_init(&pInfo->sem, 0, 0); - asyncAskEp(pTmq, updateEpCallbackFn, pInfo); + asyncAskEp(pTmq, defaultAskEpCb, pInfo); tsem_wait(&pInfo->sem); int32_t code = pInfo->code; @@ -2496,49 +2472,45 @@ void asyncAskEp(tmq_t* pTmq, __tmq_askep_fn_t askEpFn, void* param) { req.consumerId = pTmq->consumerId; req.epoch = pTmq->epoch; strcpy(req.cgroup, pTmq->groupId); + int code = 0; + SMqAskEpCbParam* pParam = NULL; + void* pReq = NULL; int32_t tlen = tSerializeSMqAskEpReq(NULL, 0, &req); if (tlen < 0) { tscError("consumer:0x%" PRIx64 ", tSerializeSMqAskEpReq failed", pTmq->consumerId); - askEpFn(pTmq, TSDB_CODE_INVALID_PARA, NULL, param); - return; + code = TSDB_CODE_INVALID_PARA; + goto FAIL; } - void* pReq = taosMemoryCalloc(1, tlen); + pReq = taosMemoryCalloc(1, tlen); if (pReq == NULL) { tscError("consumer:0x%" PRIx64 ", failed to malloc askEpReq msg, size:%d", pTmq->consumerId, tlen); - askEpFn(pTmq, TSDB_CODE_OUT_OF_MEMORY, NULL, param); - return; + code = TSDB_CODE_OUT_OF_MEMORY; + goto FAIL; } if (tSerializeSMqAskEpReq(pReq, tlen, &req) < 0) { tscError("consumer:0x%" PRIx64 ", tSerializeSMqAskEpReq %d failed", pTmq->consumerId, tlen); - taosMemoryFree(pReq); - - askEpFn(pTmq, TSDB_CODE_INVALID_PARA, NULL, param); - return; + code = TSDB_CODE_INVALID_PARA; + goto FAIL; } - SMqAskEpCbParam* pParam = taosMemoryCalloc(1, sizeof(SMqAskEpCbParam)); + pParam = taosMemoryCalloc(1, sizeof(SMqAskEpCbParam)); if (pParam == NULL) { tscError("consumer:0x%" PRIx64 ", failed to malloc subscribe param", pTmq->consumerId); - taosMemoryFree(pReq); - - askEpFn(pTmq, TSDB_CODE_OUT_OF_MEMORY, NULL, param); - return; + code = TSDB_CODE_OUT_OF_MEMORY; + goto FAIL; } pParam->refId = pTmq->refId; - pParam->epoch = pTmq->epoch; pParam->pUserFn = askEpFn; pParam->pParam = param; SMsgSendInfo* sendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo)); if (sendInfo == NULL) { - taosMemoryFree(pParam); - taosMemoryFree(pReq); - askEpFn(pTmq, TSDB_CODE_OUT_OF_MEMORY, NULL, param); - return; + code = TSDB_CODE_OUT_OF_MEMORY; + goto FAIL; } sendInfo->msgInfo = (SDataBuf){.pData = pReq, .len = tlen, .handle = NULL}; @@ -2553,7 +2525,15 @@ void asyncAskEp(tmq_t* pTmq, __tmq_askep_fn_t askEpFn, void* param) { tscInfo("consumer:0x%" PRIx64 " ask ep from mnode, reqId:0x%" PRIx64, pTmq->consumerId, sendInfo->requestId); int64_t transporterId = 0; - asyncSendMsgToServer(pTmq->pTscObj->pAppInfo->pTransporter, &epSet, &transporterId, sendInfo); + code = asyncSendMsgToServer(pTmq->pTscObj->pAppInfo->pTransporter, &epSet, &transporterId, sendInfo); + if(code == 0){ + return; + } + +FAIL: + taosMemoryFreeClear(pParam); + taosMemoryFreeClear(pReq); + askEpFn(pTmq, code, NULL, param); } int32_t makeTopicVgroupKey(char* dst, const char* topicName, int32_t vg) { diff --git a/tests/system-test/7-tmq/subscribeDb3.py b/tests/system-test/7-tmq/subscribeDb3.py index b66334a6a6..9e8ca99930 100644 --- a/tests/system-test/7-tmq/subscribeDb3.py +++ b/tests/system-test/7-tmq/subscribeDb3.py @@ -94,7 +94,7 @@ class TDTestCase: resultList=[] while 1: tdSql.query("select * from %s.consumeresult"%cdbName) - #tdLog.info("row: %d, %l64d, %l64d"%(tdSql.getData(0, 1),tdSql.getData(0, 2),tdSql.getData(0, 3)) + tdLog.info("row: %d, %l64d, %l64d"%(tdSql.getData(0, 1),tdSql.getData(0, 2),tdSql.getData(0, 3))) if tdSql.getRows() == expectRows: break else: @@ -336,7 +336,7 @@ class TDTestCase: for i in range(expectRows): totalConsumeRows += resultList[i] - if totalConsumeRows > expectrowcnt or totalConsumeRows <= 0: + if totalConsumeRows > expectrowcnt or totalConsumeRows < 0: tdLog.info("act consume rows: %d, expect consume rows between %d and 0"%(totalConsumeRows, expectrowcnt)) tdLog.exit("tmq consume rows error!") diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py index 6a03f0f751..117c3ce637 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py @@ -218,7 +218,7 @@ class TDTestCase: actConsumeTotalRows = resultList[0] - if not (actConsumeTotalRows > 0 and actConsumeTotalRows < totalRowsInserted): + if not (actConsumeTotalRows >= 0 and actConsumeTotalRows <= totalRowsInserted): tdLog.info("act consume rows: %d"%(actConsumeTotalRows)) tdLog.info("and second consume rows should be between 0 and %d"%(totalRowsInserted)) tdLog.exit("%d tmq consume rows error!"%consumerId) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py index c11159c6e5..2864240441 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py @@ -216,7 +216,7 @@ class TDTestCase: actConsumeTotalRows = resultList[0] tdLog.info("act consume rows: %d, expect rows range (0, %d)"%(actConsumeTotalRows, totalRowsInserted)) - if not (actConsumeTotalRows > 0 and actConsumeTotalRows < totalRowsInserted): + if not (actConsumeTotalRows >= 0 and actConsumeTotalRows <= totalRowsInserted): tdLog.info("act consume rows: %d"%(actConsumeTotalRows)) tdLog.info("and second consume rows should be between 0 and %d"%(totalRowsInserted)) tdLog.exit("%d tmq consume rows error!"%consumerId) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py index 439845aa54..d8606efe58 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py @@ -218,7 +218,7 @@ class TDTestCase: tdLog.info("act consume rows: %d"%(actConsumeTotalRows)) tdLog.info("and second consume rows should be between 0 and %d"%(totalRowsInserted)) - if not (actConsumeTotalRows > 0 and actConsumeTotalRows <= totalRowsInserted): + if not (actConsumeTotalRows >= 0 and actConsumeTotalRows <= totalRowsInserted): tdLog.exit("%d tmq consume rows error!"%consumerId) time.sleep(10) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py index 53ff020b08..05aa82c929 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py @@ -216,7 +216,7 @@ class TDTestCase: actConsumeTotalRows = resultList[0] - if not (actConsumeTotalRows > 0 and actConsumeTotalRows <= totalRowsInserted): + if not (actConsumeTotalRows >= 0 and actConsumeTotalRows <= totalRowsInserted): tdLog.info("act consume rows: %d"%(actConsumeTotalRows)) tdLog.info("and second consume rows should be between 0 and %d"%(totalRowsInserted)) tdLog.exit("%d tmq consume rows error!"%consumerId) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1.py b/tests/system-test/7-tmq/tmqConsFromTsdb1.py index 4bb6cf463f..dcaa6ceb7c 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1.py @@ -217,7 +217,7 @@ class TDTestCase: tdLog.info("act consume rows: %d"%(actConsumeTotalRows)) tdLog.info("and second consume rows should be between 0 and %d"%(totalRowsInserted)) - if not ((actConsumeTotalRows > 0) and (actConsumeTotalRows <= totalRowsInserted)): + if not ((actConsumeTotalRows >= 0) and (actConsumeTotalRows <= totalRowsInserted)): tdLog.exit("%d tmq consume rows error!"%consumerId) time.sleep(10) From f4ec83025d1cdc7e339d2421cf46df847473837a Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 6 Sep 2023 19:46:17 +0800 Subject: [PATCH 49/74] opti:optimize code logic & fix python test case error --- source/client/src/clientTmq.c | 103 +++++++++++++----------- tests/system-test/7-tmq/subscribeDb3.py | 2 +- 2 files changed, 58 insertions(+), 47 deletions(-) diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index ed83e41427..c4021e5302 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -152,7 +152,6 @@ typedef struct { int32_t vgId; int32_t vgStatus; int32_t vgSkipCnt; // here used to mark the slow vgroups -// bool receivedInfoFromVnode; // has already received info from vnode int64_t emptyBlockReceiveTs; // once empty block is received, idle for ignoreCnt then start to poll data bool seekUpdated; // offset is updated by seek operator, therefore, not update by vnode rsp. SEpSet epSet; @@ -1314,7 +1313,6 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { } if (code != 0) { - // in case of consumer mismatch, wait for 500ms and retry if (code == TSDB_CODE_TMQ_CONSUMER_MISMATCH) { atomic_store_8(&tmq->status, TMQ_CONSUMER_STATUS__RECOVER); tscDebug("consumer:0x%" PRIx64 " wait for the re-balance, set status to be RECOVER", @@ -1672,35 +1670,35 @@ SMqTaosxRspObj* tmqBuildTaosxRspFromWrapper(SMqPollRspWrapper* pWrapper, SMqClie return pRspObj; } -static int32_t handleErrorBeforePoll(SMqClientVg* pVg, tmq_t* pTmq) { - atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); - tsem_post(&pTmq->rspSem); - return -1; -} - static int32_t doTmqPollImpl(tmq_t* pTmq, SMqClientTopic* pTopic, SMqClientVg* pVg, int64_t timeout) { SMqPollReq req = {0}; + char* msg = NULL; + SMqPollCbParam* pParam = NULL; + SMsgSendInfo* sendInfo = NULL; + int code = 0; tmqBuildConsumeReqImpl(&req, pTmq, timeout, pTopic, pVg); int32_t msgSize = tSerializeSMqPollReq(NULL, 0, &req); - if (msgSize < 0) { - return handleErrorBeforePoll(pVg, pTmq); + if (msgSize < 0){ + code = TSDB_CODE_INVALID_MSG; + goto FAIL; } - char* msg = taosMemoryCalloc(1, msgSize); + msg = taosMemoryCalloc(1, msgSize); if (NULL == msg) { - return handleErrorBeforePoll(pVg, pTmq); + code = TSDB_CODE_OUT_OF_MEMORY; + goto FAIL; } if (tSerializeSMqPollReq(msg, msgSize, &req) < 0) { - taosMemoryFree(msg); - return handleErrorBeforePoll(pVg, pTmq); + code = TSDB_CODE_INVALID_MSG; + goto FAIL; } - SMqPollCbParam* pParam = taosMemoryMalloc(sizeof(SMqPollCbParam)); + pParam = taosMemoryMalloc(sizeof(SMqPollCbParam)); if (pParam == NULL) { - taosMemoryFree(msg); - return handleErrorBeforePoll(pVg, pTmq); + code = TSDB_CODE_OUT_OF_MEMORY; + goto FAIL; } pParam->refId = pTmq->refId; @@ -1708,11 +1706,10 @@ static int32_t doTmqPollImpl(tmq_t* pTmq, SMqClientTopic* pTopic, SMqClientVg* p pParam->vgId = pVg->vgId; pParam->requestId = req.reqId; - SMsgSendInfo* sendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo)); + sendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo)); if (sendInfo == NULL) { - taosMemoryFree(pParam); - taosMemoryFree(msg); - return handleErrorBeforePoll(pVg, pTmq); + code = TSDB_CODE_OUT_OF_MEMORY; + goto FAIL; } sendInfo->msgInfo = (SDataBuf){.pData = msg, .len = msgSize, .handle = NULL}; @@ -1728,13 +1725,21 @@ static int32_t doTmqPollImpl(tmq_t* pTmq, SMqClientTopic* pTopic, SMqClientVg* p tscDebug("consumer:0x%" PRIx64 " send poll to %s vgId:%d, epoch %d, req:%s, reqId:0x%" PRIx64, pTmq->consumerId, pTopic->topicName, pVg->vgId, pTmq->epoch, offsetFormatBuf, req.reqId); - asyncSendMsgToServer(pTmq->pTscObj->pAppInfo->pTransporter, &pVg->epSet, &transporterId, sendInfo); + code = asyncSendMsgToServer(pTmq->pTscObj->pAppInfo->pTransporter, &pVg->epSet, &transporterId, sendInfo); + if(code != 0){ + goto FAIL; + } pVg->pollCnt++; pVg->seekUpdated = false; // reset this flag. pTmq->pollCnt++; - return TSDB_CODE_SUCCESS; + return 0; + +FAIL: + taosMemoryFreeClear(pParam); + taosMemoryFreeClear(msg); + return code; } // broadcast the poll request to all related vnodes @@ -1771,6 +1776,8 @@ static int32_t tmqPollImpl(tmq_t* tmq, int64_t timeout) { atomic_store_32(&pVg->vgSkipCnt, 0); code = doTmqPollImpl(tmq, pTopic, pVg, timeout); if (code != TSDB_CODE_SUCCESS) { + atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); + tsem_post(&tmq->rspSem); goto end; } } @@ -1782,19 +1789,15 @@ end: return code; } -static int32_t tmqHandleNoPollRsp(tmq_t* tmq, SMqRspWrapper* rspWrapper, bool* pReset) { +static int32_t tmqHandleNoPollRsp(tmq_t* tmq, SMqRspWrapper* rspWrapper) { if (rspWrapper->tmqRspType == TMQ_MSG_TYPE__EP_RSP) { - /*printf("ep %d %d\n", rspMsg->head.epoch, tmq->epoch);*/ if (rspWrapper->epoch > atomic_load_32(&tmq->epoch)) { SMqAskEpRspWrapper* pEpRspWrapper = (SMqAskEpRspWrapper*)rspWrapper; SMqAskEpRsp* rspMsg = &pEpRspWrapper->msg; doUpdateLocalEp(tmq, rspWrapper->epoch, rspMsg); - /*tmqClearUnhandleMsg(tmq);*/ tDeleteSMqAskEpRsp(rspMsg); - *pReset = true; } else { tmqFreeRspWrapper(rspWrapper); - *pReset = false; } } else { return -1; @@ -1819,7 +1822,7 @@ static void updateVgInfo(SMqClientVg* pVg, STqOffsetVal* reqOffset, STqOffsetVal pVg->offsetInfo.walVerEnd = ever + 1; } -static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { +static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout) { tscDebug("consumer:0x%" PRIx64 " start to handle the rsp, total:%d", tmq->consumerId, tmq->qall->numOfItems); while (1) { @@ -1972,12 +1975,12 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { tmq->totalRows += numOfRows; - char buf[TSDB_OFFSET_LEN] = {0}; - tFormatOffset(buf, TSDB_OFFSET_LEN, &pVg->offsetInfo.endOffset); - tscDebug("consumer:0x%" PRIx64 " process taosx poll rsp, vgId:%d, offset:%s, blocks:%d, rows:%" PRId64 - ", vg total:%" PRId64 ", total:%" PRId64 ", reqId:0x%" PRIx64, - tmq->consumerId, pVg->vgId, buf, pollRspWrapper->dataRsp.blockNum, numOfRows, pVg->numOfRows, - tmq->totalRows, pollRspWrapper->reqId); + char buf[TSDB_OFFSET_LEN] = {0}; + tFormatOffset(buf, TSDB_OFFSET_LEN, &pVg->offsetInfo.endOffset); + tscDebug("consumer:0x%" PRIx64 " process taosx poll rsp, vgId:%d, offset:%s, blocks:%d, rows:%" PRId64 + ", vg total:%" PRId64 ", total:%" PRId64 ", reqId:0x%" PRIx64, + tmq->consumerId, pVg->vgId, buf, pollRspWrapper->dataRsp.blockNum, numOfRows, pVg->numOfRows, + tmq->totalRows, pollRspWrapper->reqId); taosFreeQitem(pollRspWrapper); taosWUnLockLatch(&tmq->lock); @@ -1991,14 +1994,8 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { } } else { tscDebug("consumer:0x%" PRIx64 " not data msg received", tmq->consumerId); - - bool reset = false; - tmqHandleNoPollRsp(tmq, pRspWrapper, &reset); + tmqHandleNoPollRsp(tmq, pRspWrapper); taosFreeQitem(pRspWrapper); - if (pollIfReset && reset) { - tscDebug("consumer:0x%" PRIx64 ", reset and repoll", tmq->consumerId); - tmqPollImpl(tmq, timeout); - } } } } @@ -2006,7 +2003,7 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) { TAOS_RES* tmq_consumer_poll(tmq_t* tmq, int64_t timeout) { if(tmq == NULL) return NULL; - void* rspObj; + void* rspObj = NULL; int64_t startTime = taosGetTimestampMs(); tscInfo("consumer:0x%" PRIx64 " start to poll at %" PRId64 ", timeout:%" PRId64, tmq->consumerId, startTime, @@ -2038,7 +2035,7 @@ TAOS_RES* tmq_consumer_poll(tmq_t* tmq, int64_t timeout) { tscError("consumer:0x%" PRIx64 " return due to poll error", tmq->consumerId); } - rspObj = tmqHandleAllRsp(tmq, timeout, false); + rspObj = tmqHandleAllRsp(tmq, timeout); if (rspObj) { tscDebug("consumer:0x%" PRIx64 " return rsp %p", tmq->consumerId, rspObj); return (TAOS_RES*)rspObj; @@ -2728,7 +2725,14 @@ int64_t getCommittedFromServer(tmq_t *tmq, char* tname, int32_t vgId, SEpSet* ep sendInfo->msgType = TDMT_VND_TMQ_VG_COMMITTEDINFO; int64_t transporterId = 0; - asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, epSet, &transporterId, sendInfo); + code = asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, epSet, &transporterId, sendInfo); + if(code != 0){ + taosMemoryFree(buf); + taosMemoryFree(sendInfo); + tsem_destroy(&pParam->sem); + taosMemoryFree(pParam); + return code; + } tsem_wait(&pParam->sem); code = pParam->code; @@ -3142,7 +3146,14 @@ int32_t tmq_offset_seek(tmq_t* tmq, const char* pTopicName, int32_t vgId, int64_ sendInfo->msgType = TDMT_VND_TMQ_SEEK; int64_t transporterId = 0; - asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, &epSet, &transporterId, sendInfo); + code = asyncSendMsgToServer(tmq->pTscObj->pAppInfo->pTransporter, &epSet, &transporterId, sendInfo); + if(code != 0){ + taosMemoryFree(msg); + taosMemoryFree(sendInfo); + tsem_destroy(&pParam->sem); + taosMemoryFree(pParam); + return code; + } tsem_wait(&pParam->sem); code = pParam->code; diff --git a/tests/system-test/7-tmq/subscribeDb3.py b/tests/system-test/7-tmq/subscribeDb3.py index 9e8ca99930..37e3a17100 100644 --- a/tests/system-test/7-tmq/subscribeDb3.py +++ b/tests/system-test/7-tmq/subscribeDb3.py @@ -94,7 +94,7 @@ class TDTestCase: resultList=[] while 1: tdSql.query("select * from %s.consumeresult"%cdbName) - tdLog.info("row: %d, %l64d, %l64d"%(tdSql.getData(0, 1),tdSql.getData(0, 2),tdSql.getData(0, 3))) + # tdLog.info("row: %d, %l64d, %l64d"%(tdSql.getData(0, 1),tdSql.getData(0, 2),tdSql.getData(0, 3))) if tdSql.getRows() == expectRows: break else: From ce91bdab90aa3124b1bdf4e172087e796dbbc39e Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Wed, 6 Sep 2023 19:08:04 +0800 Subject: [PATCH 50/74] stack overflow --- source/libs/sync/src/syncMain.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 1ff266ad8f..edecfcb2bc 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -2562,7 +2562,11 @@ int32_t syncNodeRebuildAndCopyIfExist(SSyncNode* ths, int32_t oldtotalReplicaNum ths->logReplMgrs[i]->matchIndex, ths->logReplMgrs[i]->endIndex); } - SSyncLogReplMgr oldLogReplMgrs[TSDB_MAX_REPLICA + TSDB_MAX_LEARNER_REPLICA] = {0}; + SSyncLogReplMgr* oldLogReplMgrs = NULL; + int64_t length = sizeof(SSyncLogReplMgr) * (TSDB_MAX_REPLICA + TSDB_MAX_LEARNER_REPLICA); + oldLogReplMgrs = taosMemoryMalloc(length); + if (NULL == oldLogReplMgrs) return -1; + memset(oldLogReplMgrs, 0, length); for(int i = 0; i < oldtotalReplicaNum; i++){ oldLogReplMgrs[i] = *(ths->logReplMgrs[i]); @@ -2643,6 +2647,8 @@ int32_t syncNodeRebuildAndCopyIfExist(SSyncNode* ths, int32_t oldtotalReplicaNum } } + taosMemoryFree(oldLogReplMgrs); + return 0; } From 8a72e94b1b4fc502b2ceef21065c579657efb010 Mon Sep 17 00:00:00 2001 From: jiajingbin Date: Thu, 7 Sep 2023 14:41:54 +0800 Subject: [PATCH 51/74] test: lock start_timestamp and interval --- tests/system-test/8-stream/pause_resume_test.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/system-test/8-stream/pause_resume_test.py b/tests/system-test/8-stream/pause_resume_test.py index f5f1cf07fa..421f499a3d 100644 --- a/tests/system-test/8-stream/pause_resume_test.py +++ b/tests/system-test/8-stream/pause_resume_test.py @@ -11,9 +11,12 @@ class TDTestCase: tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tdCom = tdCom + self.date_time = 1694054350870 + self.interval = 15 def pause_resume_test(self, interval, partition="tbname", delete=False, fill_history_value=None, pause=True, resume=True, ignore_untreated=False): tdLog.info(f"*** testing stream pause+resume: interval: {interval}, partition: {partition}, delete: {delete}, fill_history: {fill_history_value}, ignore_untreated: {ignore_untreated} ***") + date_time = self.date_time if_exist_value_list = [None, True] if_exist = random.choice(if_exist_value_list) reverse_check = True if ignore_untreated else False @@ -54,20 +57,20 @@ class TDTestCase: self.tdCom.create_stream(stream_name=f'{self.ctb_name}{self.tdCom.stream_suffix}', des_table=self.tdCom.ctb_stream_des_table, source_sql=f'select _wstart AS wstart, {self.tdCom.stb_source_select_str} from {self.ctb_name} {partition_elm} interval({self.tdCom.dataDict["interval"]}s)', trigger_mode="at_once", subtable_value=ctb_subtable_value, fill_history_value=fill_history_value) self.tdCom.create_stream(stream_name=f'{self.tb_name}{self.tdCom.stream_suffix}', des_table=self.tdCom.tb_stream_des_table, source_sql=f'select _wstart AS wstart, {self.tdCom.tb_source_select_str} from {self.tb_name} {partition_elm} interval({self.tdCom.dataDict["interval"]}s)', trigger_mode="at_once", subtable_value=tb_subtable_value, fill_history_value=fill_history_value) for i in range(range_count): - ts_value = str(self.tdCom.date_time+self.tdCom.dataDict["interval"])+f'+{i*10}s' + ts_value = str(date_time+self.tdCom.dataDict["interval"])+f'+{i*10}s' ts_cast_delete_value = self.tdCom.time_cast(ts_value) self.tdCom.sinsert_rows(tbname=self.ctb_name, ts_value=ts_value) if self.tdCom.update and i%2 == 0: self.tdCom.sinsert_rows(tbname=self.ctb_name, ts_value=ts_value) if self.delete and i%2 != 0: self.tdCom.sdelete_rows(tbname=self.ctb_name, start_ts=ts_cast_delete_value) - self.tdCom.date_time += 1 + date_time += 1 self.tdCom.sinsert_rows(tbname=self.tb_name, ts_value=ts_value) if self.tdCom.update and i%2 == 0: self.tdCom.sinsert_rows(tbname=self.tb_name, ts_value=ts_value) if self.delete and i%2 != 0: self.tdCom.sdelete_rows(tbname=self.tb_name, start_ts=ts_cast_delete_value) - self.tdCom.date_time += 1 + date_time += 1 if partition: partition_elm = f'partition by {partition}' else: @@ -140,8 +143,8 @@ class TDTestCase: for delete in [True, False]: for fill_history_value in [0, 1]: # pause/resume - self.pause_resume_test(interval=random.randint(10, 15), partition="tbname", ignore_untreated=False, fill_history_value=fill_history_value, delete=delete) - self.pause_resume_test(interval=random.randint(10, 15), partition="tbname", ignore_untreated=True, fill_history_value=fill_history_value, delete=delete) + self.pause_resume_test(interval=self.interval, partition="tbname", ignore_untreated=False, fill_history_value=fill_history_value, delete=delete) + self.pause_resume_test(interval=self.interval, partition="tbname", ignore_untreated=True, fill_history_value=fill_history_value, delete=delete) # self.pause_resume_test(interval=random.randint(10, 15), partition="tbname", resume=False, fill_history_value=fill_history_value, delete=delete) def stop(self): @@ -151,4 +154,4 @@ class TDTestCase: event = threading.Event() tdCases.addLinux(__file__, TDTestCase()) -tdCases.addWindows(__file__, TDTestCase()) \ No newline at end of file +tdCases.addWindows(__file__, TDTestCase()) From 55a9668908f219e5ca93a1993b2f27cdf03f7b82 Mon Sep 17 00:00:00 2001 From: Benguang Zhao Date: Thu, 7 Sep 2023 17:14:22 +0800 Subject: [PATCH 52/74] fix: next merger iter of tombs in loop of tsdbSnapWriteTombRecord --- source/dnode/vnode/src/tsdb/tsdbSnapshot.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c index 8601248a69..ed4257b86d 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c +++ b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c @@ -857,6 +857,9 @@ static int32_t tsdbSnapWriteTombRecord(STsdbSnapWriter* writer, const STombRecor } else { break; } + + code = tsdbIterMergerNext(writer->ctx->tombIterMerger); + TSDB_CHECK_CODE(code, lino, _exit); } if (record->suid == INT64_MAX) { From 5007087e1967b0e0ab4eeaeff6e6d04d2e558c72 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Fri, 8 Sep 2023 08:09:53 +0800 Subject: [PATCH 53/74] fix(tdb/pcache): fix mem leak with unpined pages --- source/libs/tdb/src/db/tdbPCache.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index 262f3d27e6..f157810cdc 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -229,7 +229,9 @@ void tdbPCacheInvalidatePage(SPCache *pCache, SPager *pPager, SPgno pgno) { } if (pPage) { + tdbPCachePinPage(pCache, pPage); tdbPCacheRemovePageFromHash(pCache, pPage); + tdbPCacheFreePage(pCache, pPage); } } From 3524ef32ebe1534e2dcccd8740046bbc17f9ae12 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Fri, 8 Sep 2023 09:28:08 +0800 Subject: [PATCH 54/74] tdb/pcache: not free page if already on free list --- source/libs/tdb/src/db/tdbPCache.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index f157810cdc..54baee350a 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -229,9 +229,15 @@ void tdbPCacheInvalidatePage(SPCache *pCache, SPager *pPager, SPgno pgno) { } if (pPage) { - tdbPCachePinPage(pCache, pPage); + bool moveToFreeList = false; + if (pPage->pLruNext) { + tdbPCachePinPage(pCache, pPage); + moveToFreeList = true; + } tdbPCacheRemovePageFromHash(pCache, pPage); - tdbPCacheFreePage(pCache, pPage); + if (moveToFreeList) { + tdbPCacheFreePage(pCache, pPage); + } } } From 443756c6ffa86c52652bfb41ab6099d76070010e Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Mon, 11 Sep 2023 08:55:30 +0800 Subject: [PATCH 55/74] fix(meta): null txn after abort --- source/dnode/vnode/src/meta/metaCommit.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/meta/metaCommit.c b/source/dnode/vnode/src/meta/metaCommit.c index d262567953..1494325657 100644 --- a/source/dnode/vnode/src/meta/metaCommit.c +++ b/source/dnode/vnode/src/meta/metaCommit.c @@ -61,5 +61,12 @@ int metaPrepareAsyncCommit(SMeta *pMeta) { // abort the meta txn int metaAbort(SMeta *pMeta) { if (!pMeta->txn) return 0; - return tdbAbort(pMeta->pEnv, pMeta->txn); + int code = tdbAbort(pMeta->pEnv, pMeta->txn); + if (code) { + metaError("vgId:%d, failed to abort meta since %s", TD_VID(pMeta->pVnode), tstrerror(terrno)); + } else { + pMeta->txn = NULL; + } + + return code; } From 712287f4f2fa982c3bb74b8482895113dd7c88bb Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Thu, 7 Sep 2023 11:42:31 +0800 Subject: [PATCH 56/74] test: increase timeout 60s of replica 3to1 --- .../manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system-test/6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py b/tests/system-test/6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py index aa0c7a0177..be170e0f76 100644 --- a/tests/system-test/6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py +++ b/tests/system-test/6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py @@ -177,7 +177,7 @@ class TDTestCase: tdSql.query("select count(*) from %s"%stableName) tdSql.checkData(0,0,rowsPerStb) - clusterComCheck.check_vgroups_status(vgroup_numbers=paraDict["vgroups"],db_replica=replica1,db_name=paraDict["dbName"],count_number=40) + clusterComCheck.check_vgroups_status(vgroup_numbers=paraDict["vgroups"],db_replica=replica1,db_name=paraDict["dbName"],count_number=60) sleep(5) tdLog.info(f"show transactions;alter database db0_0 replica {replica3};") TdSqlEx.execute(f'show transactions;') From b3157b40b1598dec59bcb1f02bfce915e4ee0985 Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Thu, 7 Sep 2023 19:08:12 +0800 Subject: [PATCH 57/74] test: fix error comparison between bool and str --- tests/pytest/util/cluster.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/pytest/util/cluster.py b/tests/pytest/util/cluster.py index a6e3530dc9..7c653f9f2e 100644 --- a/tests/pytest/util/cluster.py +++ b/tests/pytest/util/cluster.py @@ -52,8 +52,8 @@ class ConfigureyCluster: dnode.addExtraCfg("secondEp", f"{hostname}:{startPort_sec}") # configure dnoe of independent mnodes - if num <= self.mnodeNums and self.mnodeNums != 0 and independentMnode == "True" : - tdLog.info("set mnode supportVnodes 0") + if num <= self.mnodeNums and self.mnodeNums != 0 and independentMnode == True : + tdLog.info(f"set mnode:{num} supportVnodes 0") dnode.addExtraCfg("supportVnodes", 0) # print(dnode) self.dnodes.append(dnode) From 954f8321d042614f255294072b7b00406b4b5dd7 Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Thu, 7 Sep 2023 22:51:30 +0800 Subject: [PATCH 58/74] test: modify expect data type from str to datetime --- tests/system-test/2-query/To_unixtimestamp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system-test/2-query/To_unixtimestamp.py b/tests/system-test/2-query/To_unixtimestamp.py index 424ebff6c5..975abfa8b0 100644 --- a/tests/system-test/2-query/To_unixtimestamp.py +++ b/tests/system-test/2-query/To_unixtimestamp.py @@ -99,7 +99,7 @@ class TDTestCase: tdSql.query(f"select to_unixtimestamp('1970-01-01 08:00:00+08:00', 0);") tdSql.checkEqual(tdSql.queryResult[0][0], 0) tdSql.query(f"select to_unixtimestamp('1970-01-01 00:00:00', 1);") - tdSql.checkData(0, 0, '1970-01-01 00:00:00') + tdSql.checkData(0, 0, datetime.datetime(1970, 1, 1, 0, 0, 0)) tdSql.error(f"select to_unixtimestamp('1970-01-01 08:00:00+08:00', 2);") tdSql.error(f"select to_unixtimestamp('1970-01-01 08:00:00+08:00', 1.5);") tdSql.error(f"select to_unixtimestamp('1970-01-01 08:00:00+08:00', 'abc');") From da3ffdb4cf67624ca0895504408747094daf6d38 Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Mon, 11 Sep 2023 19:04:07 +0800 Subject: [PATCH 59/74] test:modify the way to determine whether the replica change is complete --- .../6-cluster/clusterCommonCheck.py | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tests/system-test/6-cluster/clusterCommonCheck.py b/tests/system-test/6-cluster/clusterCommonCheck.py index 5e5568c5c5..85d670a325 100644 --- a/tests/system-test/6-cluster/clusterCommonCheck.py +++ b/tests/system-test/6-cluster/clusterCommonCheck.py @@ -245,9 +245,12 @@ class ClusterComCheck: tdLog.exit(f"vgroup number of {db_name} is not correct") if self.db_replica == 1 : if tdSql.queryResult[0][4] == 'leader' and tdSql.queryResult[1][4] == 'leader' and tdSql.queryResult[last_number][4] == 'leader': - ready_time= (count + 1) - tdLog.success(f"all vgroups of {db_name} are leaders in {count + 1} s") - return True + tdSql.query(f"select `replica` from information_schema.ins_databases where `name`='{db_name}';") + print("db replica :",tdSql.queryResult[0][0]) + if tdSql.queryResult[0][0] == db_replica: + ready_time= (count + 1) + tdLog.success(f"all vgroups with replica {self.db_replica} of {db_name} are leaders in {count + 1} s") + return True count+=1 elif self.db_replica == 3 : vgroup_status_first=[tdSql.queryResult[0][4],tdSql.queryResult[0][6],tdSql.queryResult[0][8]] @@ -255,13 +258,16 @@ class ClusterComCheck: vgroup_status_last=[tdSql.queryResult[last_number][4],tdSql.queryResult[last_number][6],tdSql.queryResult[last_number][8]] if vgroup_status_first.count('leader') == 1 and vgroup_status_first.count('follower') == 2: if vgroup_status_last.count('leader') == 1 and vgroup_status_last.count('follower') == 2: - ready_time= (count + 1) - tdLog.success(f"elections of {db_name}.vgroups are ready in {ready_time} s") - return True + tdSql.query(f"select `replica` from information_schema.ins_databases where `name`='{db_name}';") + print("db replica :",tdSql.queryResult[0][0]) + if tdSql.queryResult[0][0] == db_replica: + ready_time= (count + 1) + tdLog.success(f"elections of {db_name}.vgroups with replica {self.db_replica} are ready in {ready_time} s") + return True count+=1 else: tdLog.debug(tdSql.queryResult) - tdLog.notice(f"elections of {db_name} all vgroups are failed in {count} s ") + tdLog.notice(f"elections of {db_name} all vgroups with replica {self.db_replica} are failed in {count} s ") caller = inspect.getframeinfo(inspect.stack()[1][0]) args = (caller.filename, caller.lineno) tdLog.exit("%s(%d) failed " % args) From 2fe019c5b18d2dfeac75182d150d265d20c72cb5 Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Mon, 11 Sep 2023 19:08:22 +0800 Subject: [PATCH 60/74] test:modify the way to determine whether the replica change is complete --- .../manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system-test/6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py b/tests/system-test/6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py index be170e0f76..9ab47764c8 100644 --- a/tests/system-test/6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py +++ b/tests/system-test/6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py @@ -177,7 +177,7 @@ class TDTestCase: tdSql.query("select count(*) from %s"%stableName) tdSql.checkData(0,0,rowsPerStb) - clusterComCheck.check_vgroups_status(vgroup_numbers=paraDict["vgroups"],db_replica=replica1,db_name=paraDict["dbName"],count_number=60) + clusterComCheck.check_vgroups_status(vgroup_numbers=paraDict["vgroups"],db_replica=replica1,db_name=paraDict["dbName"],count_number=100) sleep(5) tdLog.info(f"show transactions;alter database db0_0 replica {replica3};") TdSqlEx.execute(f'show transactions;') From 81605016f7a3677f52a67a700d07fec1b38c81a7 Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Mon, 11 Sep 2023 20:01:35 +0800 Subject: [PATCH 61/74] test:modify testcase of indepent mnode --- tests/parallel_test/cases.task | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 0d63ea3340..732d94de49 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -94,10 +94,10 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 3 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreDnode.py -N 5 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreVnode.py -N 5 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreMnode.py -N 5 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreQnode.py -N 5 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreDnode.py -N 5 -M 3 -i False +,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreVnode.py -N 5 -M 3 -i False +,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreMnode.py -N 5 -M 3 -i False +,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreQnode.py -N 5 -M 3 -i False ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/create_wrong_topic.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dropDbR3ConflictTransaction.py -N 3 From 5ad58438b658a7b56bf568afb220d3d793555822 Mon Sep 17 00:00:00 2001 From: "chao.feng" Date: Fri, 25 Aug 2023 15:17:09 +0800 Subject: [PATCH 62/74] update test case tmqSeekAndCommit.py by charles --- tests/parallel_test/cases.task | 1 + tests/parallel_test/run_case.sh | 2 +- tests/system-test/7-tmq/tmqSeekAndCommit.py | 93 +++++++++++++++++++-- 3 files changed, 88 insertions(+), 8 deletions(-) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 326a754654..5dcba314fa 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -135,6 +135,7 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal-multiCtb.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_taosx.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSeekAndCommit.py ,,n,system-test,python3 ./test.py -f 7-tmq/tmq_offset.py ,,n,system-test,python3 ./test.py -f 7-tmq/tmqDataPrecisionUnit.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/raw_block_interface_test.py diff --git a/tests/parallel_test/run_case.sh b/tests/parallel_test/run_case.sh index 206f99ff3d..ea22d11e08 100755 --- a/tests/parallel_test/run_case.sh +++ b/tests/parallel_test/run_case.sh @@ -79,7 +79,7 @@ md5sum /home/TDinternal/debug/build/lib/libtaos.so #define taospy 2.7.10 pip3 list|grep taospy pip3 uninstall taospy -y -pip3 install --default-timeout=120 taospy==2.7.10 +pip3 install --default-timeout=120 taospy==2.7.11 $TIMEOUT_CMD $cmd RET=$? diff --git a/tests/system-test/7-tmq/tmqSeekAndCommit.py b/tests/system-test/7-tmq/tmqSeekAndCommit.py index 2d837ef7a4..253edcd10d 100644 --- a/tests/system-test/7-tmq/tmqSeekAndCommit.py +++ b/tests/system-test/7-tmq/tmqSeekAndCommit.py @@ -21,6 +21,7 @@ class TDTestCase: self.db_name = "tmq_db" self.topic_name = "tmq_topic" self.stable_name = "tmqst" + self.prepareData() def prepareData(self): @@ -73,8 +74,9 @@ class TDTestCase: return consumer def test_seek_and_committed_position_with_autocommit(self): + """Check the position and committed offset of the topic for autocommit scenario + """ try: - self.prepareData() inputDict = { "topic_name": self.topic_name, "group_id": "1", @@ -95,18 +97,26 @@ class TDTestCase: partitions = consumer.assignment() position_partitions = consumer.position(partitions) - tdLog.info("position_partitions: %s"%(position_partitions)) for i in range(len(position_partitions)): tdLog.info("position_partitions[%s].offset: %s"%(i, position_partitions[i].offset)) committed_partitions = consumer.committed(partitions) - tdLog.info("committed_partitions: %s"%(committed_partitions)) + origin_committed_position = [] for i in range(len(committed_partitions)): tdLog.info("committed_partitions[%s].offset: %s"%(i, committed_partitions[i].offset)) + origin_committed_position.append(committed_partitions[i].offset) assert(len(position_partitions) == len(committed_partitions)) for i in range(len(position_partitions)): assert(position_partitions[i].offset == committed_partitions[i].offset) - # seek to the beginning of the topic - + # seek to the specified offset of the topic, then check position and committed offset + for partition in partitions: + partition.offset = 5 + consumer.seek(partition) + position_partitions = consumer.position(partitions) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == 5) + committed_partitions = consumer.committed(partitions) + for i in range(len(committed_partitions)): + assert(committed_partitions[i].offset != 5 and committed_partitions[i].offset == origin_committed_position[i]) except Exception as ex: raise Exception("Failed to test seek and committed position with autocommit with error: {}".format(str(ex))) finally: @@ -114,12 +124,81 @@ class TDTestCase: consumer.close() def test_commit_by_offset(self): - pass - + """Check the position and committed offset of the topic for commit by offset scenario + """ + try: + inputDict = { + "topic_name": self.topic_name, + "group_id": "1", + "auto_commit": "false", + "offset_reset": "earliest" + } + consumer = self.tmqSubscribe(inputDict) + origin_committed_position = [] + while(True): + res = consumer.poll(1) + if not res: + break + err = res.error() + if err is not None: + raise err + partitions = consumer.assignment() + consumer.commit(offsets=partitions) + val = res.value() + for block in val: + tdLog.info("block.fetchall() number: %s"%(len(block.fetchall()))) + position_partitions = consumer.position(partitions) + committed_partitions = consumer.committed(partitions) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == committed_partitions[i].offset) + committed_partitions = consumer.committed(partitions) + for i in range(len(committed_partitions)): + origin_committed_position.append(committed_partitions[i].offset) + tdLog.info("original committed_partitions[%s].offset: %s"%(i, committed_partitions[i].offset)) + # seek to the specified offset of the topic, then check position and committed offset + for partition in partitions: + partition.offset = 2 + consumer.seek(partition) + position_partitions = consumer.position(partitions) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == 2) + committed_partitions = consumer.committed(partitions) + for i in range(len(committed_partitions)): + tdLog.info("after seek committed_partitions[%s].offset: %s"%(i, committed_partitions[i].offset)) + assert(committed_partitions[i].offset != 2 and committed_partitions[i].offset == origin_committed_position[i]) + # continue to consume data from seek offset + while(True): + res = consumer.poll(1) + if not res: + break + err = res.error() + if err is not None: + raise err + partitions = consumer.assignment() + # commit by offset + consumer.commit(offsets=partitions) + val = res.value() + for block in val: + tdLog.info("block.fetchall() number: %s"%(len(block.fetchall()))) + partitions = consumer.assignment() + position_partitions = consumer.position(partitions) + committed_partitions = consumer.committed(partitions) + assert(len(position_partitions) == len(committed_partitions)) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == committed_partitions[i].offset) + except Exception as ex: + raise Exception("Failed to test commit by offset with error: {}".format(str(ex))) + finally: + consumer.unsubscribe() + consumer.close() + def run(self): self.test_seek_and_committed_position_with_autocommit() + self.test_commit_by_offset() def stop(self): + tdSql.execute("drop topic %s" % self.topic_name) + tdSql.execute("drop database %s"%(self.db_name)) tdSql.close() tdLog.success(f"{__file__} successfully executed") From a003db7e1a203f8345e7b0973f24aaa11c725c20 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Tue, 12 Sep 2023 10:44:11 +0800 Subject: [PATCH 63/74] reset file handles limit on windows --- source/common/src/tglobal.c | 1 + source/os/src/osFile.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 8971c1312c..90812a66b2 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -1601,6 +1601,7 @@ int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile if (taosSetS3Cfg(tsCfg) != 0) return -1; } taosSetSystemCfg(tsCfg); + if (taosSetFileHandlesLimit() != 0) return -1; cfgDumpCfg(tsCfg, tsc, false); diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c index db4807db43..1ce9a348b3 100644 --- a/source/os/src/osFile.c +++ b/source/os/src/osFile.c @@ -954,3 +954,12 @@ cmp_end: return ret; } + +int32_t taosSetFileHandlesLimit() { +#ifdef WINDOWS + const int max_handles = 8192; + int res = _setmaxstdio(max_handles); + return res == max_handles ? 0 : -1; +#endif + return 0; +} From 2f9ab38fd06a74e0acbb4b3b81e10c3fd341a4e2 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 12 Sep 2023 13:33:12 +0800 Subject: [PATCH 64/74] fix: set stack size to 8 MB for windows and dup fd for gzdopen --- cmake/cmake.platform | 8 ++++++++ source/os/src/osFile.c | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cmake/cmake.platform b/cmake/cmake.platform index 76ac6ba004..30a33fcdb4 100644 --- a/cmake/cmake.platform +++ b/cmake/cmake.platform @@ -176,6 +176,14 @@ IF(APPLE) set(THREADS_PREFER_PTHREAD_FLAG ON) ENDIF() +IF(TD_WINDOWS) + IF(MSVC) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:8388608") + ELSEIF(MINGW) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,8388608") + ENDIF() +ENDIF() + MESSAGE(STATUS "Platform arch:" ${PLATFORM_ARCH_STR}) set(TD_DEPS_DIR "x86") diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c index db4807db43..120dbe920c 100644 --- a/source/os/src/osFile.c +++ b/source/os/src/osFile.c @@ -926,10 +926,16 @@ int32_t taosCompressFile(char *srcFileName, char *destFileName) { goto cmp_end; } - dstFp = gzdopen(pFile->fd, "wb6f"); + // Both gzclose() and fclose() will close the associated fd, so they need to have different fds. + FileFd gzFd = dup(pFile->fd); + if (gzFd < 0) { + ret = -4; + goto cmp_end; + } + dstFp = gzdopen(gzFd, "wb6f"); if (dstFp == NULL) { ret = -3; - taosCloseFile(&pFile); + close(gzFd); goto cmp_end; } From e5120fade2919f7ddc3074363ae0eb797508b0f8 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Tue, 12 Sep 2023 14:12:21 +0800 Subject: [PATCH 65/74] fix read line on windows --- source/os/src/osFile.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c index db4807db43..e68e28af6f 100644 --- a/source/os/src/osFile.c +++ b/source/os/src/osFile.c @@ -841,14 +841,33 @@ int64_t taosGetLineFile(TdFilePtr pFile, char **__restrict ptrBuf) { return -1; } #ifdef WINDOWS - *ptrBuf = taosMemoryMalloc(1024); + size_t bufferSize = 512; + *ptrBuf = taosMemoryMalloc(bufferSize); if (*ptrBuf == NULL) return -1; - if (fgets(*ptrBuf, 1023, pFile->fp) == NULL) { - taosMemoryFreeClear(*ptrBuf); - return -1; + + size_t bytesRead = 0; + size_t totalBytesRead = 0; + + while (1) { + char *result = fgets(*ptrBuf + totalBytesRead, bufferSize - totalBytesRead, pFile->fp); + if (result == NULL) { + taosMemoryFreeClear(*ptrBuf); + return -1; + } + bytesRead = strlen(*ptrBuf + totalBytesRead); + totalBytesRead += bytesRead; + + if (totalBytesRead < bufferSize - 1 || (*ptrBuf)[totalBytesRead - 1] == '\n') { + break; + } + + bufferSize += 512; + *ptrBuf = taosMemoryRealloc(*ptrBuf, bufferSize); + if (*ptrBuf == NULL) return -1; } - (*ptrBuf)[1023] = 0; - return strlen(*ptrBuf); + + (*ptrBuf)[totalBytesRead] = '\0'; + return totalBytesRead; #else size_t len = 0; return getline(ptrBuf, &len, pFile->fp); From 8787e0d58c3ade7111857e6591a731fd3648a762 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Tue, 12 Sep 2023 14:29:42 +0800 Subject: [PATCH 66/74] build failed on linux --- include/os/osFile.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/os/osFile.h b/include/os/osFile.h index da1f8f8b57..63483dc906 100644 --- a/include/os/osFile.h +++ b/include/os/osFile.h @@ -112,6 +112,8 @@ int32_t taosGetErrorFile(TdFilePtr pFile); int32_t taosCompressFile(char *srcFileName, char *destFileName); +int32_t taosSetFileHandlesLimit(); + #ifdef __cplusplus } #endif From 3e48f3639ced6f09bd5710037aef92bb59db744d Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Tue, 12 Sep 2023 14:46:32 +0800 Subject: [PATCH 67/74] fix transfer crash --- source/dnode/vnode/src/tq/tqStreamTaskSnap.c | 36 ++++++++++---------- source/libs/stream/src/streamMeta.c | 3 ++ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/source/dnode/vnode/src/tq/tqStreamTaskSnap.c b/source/dnode/vnode/src/tq/tqStreamTaskSnap.c index 2d58a10e51..bf81570975 100644 --- a/source/dnode/vnode/src/tq/tqStreamTaskSnap.c +++ b/source/dnode/vnode/src/tq/tqStreamTaskSnap.c @@ -165,7 +165,6 @@ struct SStreamTaskWriter { STQ* pTq; int64_t sver; int64_t ever; - TXN* txn; }; int32_t streamTaskSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamTaskWriter** ppWriter) { @@ -182,12 +181,6 @@ int32_t streamTaskSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamTa pWriter->sver = sver; pWriter->ever = ever; - if (tdbBegin(pTq->pStreamMeta->db, &pWriter->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, 0) < 0) { - code = -1; - taosMemoryFree(pWriter); - goto _err; - } - *ppWriter = pWriter; tqDebug("vgId:%d, vnode stream-task snapshot writer opened", TD_VID(pTq->pVnode)); return code; @@ -203,30 +196,33 @@ int32_t streamTaskSnapWriterClose(SStreamTaskWriter* pWriter, int8_t rollback) { int32_t code = 0; STQ* pTq = pWriter->pTq; + taosWLockLatch(&pTq->pStreamMeta->lock); tqDebug("vgId:%d, vnode stream-task snapshot writer closed", TD_VID(pTq->pVnode)); if (rollback) { - tdbAbort(pWriter->pTq->pStreamMeta->db, pWriter->txn); + tdbAbort(pTq->pStreamMeta->db, pTq->pStreamMeta->txn); } else { - code = tdbCommit(pWriter->pTq->pStreamMeta->db, pWriter->txn); + code = tdbCommit(pTq->pStreamMeta->db, pTq->pStreamMeta->txn); if (code) goto _err; - code = tdbPostCommit(pWriter->pTq->pStreamMeta->db, pWriter->txn); + code = tdbPostCommit(pTq->pStreamMeta->db, pTq->pStreamMeta->txn); if (code) goto _err; } + if (tdbBegin(pTq->pStreamMeta->db, &pTq->pStreamMeta->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, 0) < 0) { + code = -1; + taosMemoryFree(pWriter); + goto _err; + } + + taosWUnLockLatch(&pTq->pStreamMeta->lock); + taosMemoryFree(pWriter); - - // restore from metastore - // if (tqMetaRestoreHandle(pTq) < 0) { - // goto _err; - // } - return code; _err: tqError("vgId:%d, vnode stream-task snapshot writer failed to close since %s", TD_VID(pWriter->pTq->pVnode), tstrerror(code)); + taosWUnLockLatch(&pTq->pStreamMeta->lock); return code; - return 0; } int32_t streamTaskSnapWrite(SStreamTaskWriter* pWriter, uint8_t* pData, uint32_t nData) { @@ -247,11 +243,15 @@ int32_t streamTaskSnapWrite(SStreamTaskWriter* pWriter, uint8_t* pData, uint32_t } tDecoderClear(&decoder); // tdbTbInsert(TTB *pTb, const void *pKey, int keyLen, const void *pVal, int valLen, TXN *pTxn) + + taosWLockLatch(&pTq->pStreamMeta->lock); int64_t key[2] = {task.streamId, task.taskId}; if (tdbTbUpsert(pTq->pStreamMeta->pTaskDb, key, sizeof(int64_t) << 1, (uint8_t*)pData + sizeof(SSnapDataHdr), - nData - sizeof(SSnapDataHdr), pWriter->txn) < 0) { + nData - sizeof(SSnapDataHdr), pTq->pStreamMeta->txn) < 0) { + taosWUnLockLatch(&pTq->pStreamMeta->lock); return -1; } + taosWUnLockLatch(&pTq->pStreamMeta->lock); } else if (pHdr->type == SNAP_DATA_STREAM_TASK_CHECKPOINT) { // do nothing } diff --git a/source/libs/stream/src/streamMeta.c b/source/libs/stream/src/streamMeta.c index 5bc21286d7..16d01b06a4 100644 --- a/source/libs/stream/src/streamMeta.c +++ b/source/libs/stream/src/streamMeta.c @@ -539,10 +539,13 @@ int32_t streamMetaUnregisterTask(SStreamMeta* pMeta, int64_t streamId, int32_t t } int32_t streamMetaBegin(SStreamMeta* pMeta) { + taosWLockLatch(&pMeta->lock); if (tdbBegin(pMeta->db, &pMeta->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED) < 0) { + taosWUnLockLatch(&pMeta->lock); return -1; } + taosWUnLockLatch(&pMeta->lock); return 0; } From ccb75a9c11d6ea5ec7f1b4e6ad2673c65f1b7050 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Tue, 12 Sep 2023 14:46:56 +0800 Subject: [PATCH 68/74] fix transfer crash --- source/dnode/vnode/src/vnd/vnodeSnapshot.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index 733f073ce9..f19068ea88 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -425,20 +425,6 @@ int32_t vnodeSnapWriterClose(SVSnapWriter *pWriter, int8_t rollback, SSnapshot * if (code) goto _exit; } - if (pWriter->pStreamTaskWriter) { - code = streamTaskSnapWriterClose(pWriter->pStreamTaskWriter, rollback); - if (code) goto _exit; - } - - if (pWriter->pStreamStateWriter) { - code = streamStateSnapWriterClose(pWriter->pStreamStateWriter, rollback); - if (code) goto _exit; - - code = streamStateRebuildFromSnap(pWriter->pStreamStateWriter, 0); - pWriter->pStreamStateWriter = NULL; - if (code) goto _exit; - } - if (pWriter->pRsmaSnapWriter) { code = rsmaSnapWriterClose(&pWriter->pRsmaSnapWriter, rollback); if (code) goto _exit; From a9ad8f4ef0cb0d440157bee4cc54d728d1098b3e Mon Sep 17 00:00:00 2001 From: wade zhang <95411902+gccgdb1234@users.noreply.github.com> Date: Tue, 12 Sep 2023 15:02:22 +0800 Subject: [PATCH 69/74] Update 01-deploy.md --- docs/en/10-deployment/01-deploy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/10-deployment/01-deploy.md b/docs/en/10-deployment/01-deploy.md index ec9162c859..e204f7765e 100644 --- a/docs/en/10-deployment/01-deploy.md +++ b/docs/en/10-deployment/01-deploy.md @@ -12,7 +12,7 @@ The FQDN of all hosts must be setup properly. For e.g. FQDNs may have to be conf ### Step 1 -If any previous version of TDengine has been installed and configured on any host, the installation needs to be removed and the data needs to be cleaned up. For details about uninstalling please refer to [Install and Uninstall](/operation/pkg-install). To clean up the data, please use `rm -rf /var/lib/taos/\*` assuming the `dataDir` is configured as `/var/lib/taos`. +If any previous version of TDengine has been installed and configured on any host, the installation needs to be removed and the data needs to be cleaned up. For details about uninstalling please refer to [Install and Uninstall](../../operation/pkg-install). To clean up the data, please use `rm -rf /var/lib/taos/\*` assuming the `dataDir` is configured as `/var/lib/taos`. :::note FQDN information is written to file. If you have started TDengine without configuring or changing the FQDN, ensure that data is backed up or no longer needed before running the `rm -rf /var/lib\taos/\*` command. From 05c25834dfd0faed3671609b4502d2206b2aae8d Mon Sep 17 00:00:00 2001 From: wade zhang <95411902+gccgdb1234@users.noreply.github.com> Date: Tue, 12 Sep 2023 15:02:59 +0800 Subject: [PATCH 70/74] Update 05-taosbenchmark.md --- docs/en/14-reference/05-taosbenchmark.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/14-reference/05-taosbenchmark.md b/docs/en/14-reference/05-taosbenchmark.md index 38a8048a21..e65046f65d 100644 --- a/docs/en/14-reference/05-taosbenchmark.md +++ b/docs/en/14-reference/05-taosbenchmark.md @@ -13,7 +13,7 @@ taosBenchmark (formerly taosdemo ) is a tool for testing the performance of TDen There are two ways to install taosBenchmark: -- Installing the official TDengine installer will automatically install taosBenchmark. Please refer to [TDengine installation](/operation/pkg-install) for details. +- Installing the official TDengine installer will automatically install taosBenchmark. Please refer to [TDengine installation](../../operation/pkg-install) for details. - Compile taos-tools separately and install them. Please refer to the [taos-tools](https://github.com/taosdata/taos-tools) repository for details. From 4cca1099933a19d70326ebe6cf24276d23599cdf Mon Sep 17 00:00:00 2001 From: wade zhang <95411902+gccgdb1234@users.noreply.github.com> Date: Tue, 12 Sep 2023 15:03:28 +0800 Subject: [PATCH 71/74] Update 14-taosKeeper.md --- docs/en/14-reference/14-taosKeeper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/14-reference/14-taosKeeper.md b/docs/en/14-reference/14-taosKeeper.md index cfc2554387..48b3d04b24 100644 --- a/docs/en/14-reference/14-taosKeeper.md +++ b/docs/en/14-reference/14-taosKeeper.md @@ -16,7 +16,7 @@ taosKeeper is a tool for TDengine that exports monitoring metrics. With taosKeep There are two ways to install taosKeeper: Methods of installing taosKeeper: -- Installing the official TDengine installer will automatically install taosKeeper. Please refer to [TDengine installation](/operation/pkg-install) for details. +- Installing the official TDengine installer will automatically install taosKeeper. Please refer to [TDengine installation](../../operation/pkg-install) for details. - You can compile taosKeeper separately and install it. Please refer to the [taosKeeper](https://github.com/taosdata/taoskeeper) repository for details. ## Configuration and Launch From 3c88944458a66a096211f318305d5a40ab834048 Mon Sep 17 00:00:00 2001 From: wade zhang <95411902+gccgdb1234@users.noreply.github.com> Date: Tue, 12 Sep 2023 15:03:55 +0800 Subject: [PATCH 72/74] Update 11-kafka.md --- docs/en/20-third-party/11-kafka.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/20-third-party/11-kafka.md b/docs/en/20-third-party/11-kafka.md index a98c3e3a6b..02a12e55bc 100644 --- a/docs/en/20-third-party/11-kafka.md +++ b/docs/en/20-third-party/11-kafka.md @@ -21,7 +21,7 @@ TDengine Source Connector is used to read data from TDengine in real-time and se 1. Linux operating system 2. Java 8 and Maven installed 3. Git/curl/vi is installed -4. TDengine is installed and started. If not, please refer to [Installation and Uninstallation](/operation/pkg-install) +4. TDengine is installed and started. If not, please refer to [Installation and Uninstallation](../../operation/pkg-install) ## Install Kafka From 8e064cdd03164c8d19d35bf1586dc4aeeb36e52d Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Tue, 12 Sep 2023 16:41:14 +0800 Subject: [PATCH 73/74] fix merge error --- source/dnode/vnode/src/tq/tqStreamStateSnap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tq/tqStreamStateSnap.c b/source/dnode/vnode/src/tq/tqStreamStateSnap.c index 61fc3c7ae9..4a1b3961cd 100644 --- a/source/dnode/vnode/src/tq/tqStreamStateSnap.c +++ b/source/dnode/vnode/src/tq/tqStreamStateSnap.c @@ -51,7 +51,7 @@ int32_t streamStateSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamS SStreamSnapReader* pSnapReader = NULL; - if (streamSnapReaderOpen(pTq, sver, chkpId, pTq->path, &pSnapReader) == 0) { + if (streamSnapReaderOpen(meta, sver, chkpId, pTq->path, &pSnapReader) == 0) { pReader->complete = 1; } else { code = -1; From 51359ad99d5d29169f7e172fbd6fc32d3537ddc4 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Tue, 12 Sep 2023 18:24:50 +0800 Subject: [PATCH 74/74] free old pointer as realloc failed. --- source/os/src/osFile.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c index e68e28af6f..1d680f214a 100644 --- a/source/os/src/osFile.c +++ b/source/os/src/osFile.c @@ -862,8 +862,13 @@ int64_t taosGetLineFile(TdFilePtr pFile, char **__restrict ptrBuf) { } bufferSize += 512; - *ptrBuf = taosMemoryRealloc(*ptrBuf, bufferSize); - if (*ptrBuf == NULL) return -1; + void* newBuf = taosMemoryRealloc(*ptrBuf, bufferSize); + if (newBuf == NULL) { + taosMemoryFreeClear(*ptrBuf); + return -1; + } + + *ptrBuf = newBuf; } (*ptrBuf)[totalBytesRead] = '\0';